Coding server-side Java on the Quickbooks back end Jim Showalter worked for Rational before it became a division of IBM and helmed numerous startup companies before going back to his roots as a programmer in 2005. In this interview, Matthew Heusser talks with Jim about working life and the evolving Java technology stack at Intuit, open source tools he uses every day, and where he currently finds challenge and inspiration as a career programmer. Jim Showalter is an old-school engineer, which in his case means that he started programming with punch cards, coding Fortran on an OS/360 mainframe, in 1970. The price of a mistake in those days was 24 hours of calendar time, because his middle-school computer science teacher had to take students’ punch cards to the school district’s mainframe and run them overnight. Jim got very good at writing tight, solid code as a result, and he’s still doing it today. Figure 1. It’s been 40 years since he used a punch card, but Jim Showalter was programming in Java this morning. Most people don’t stay in programming for over 40 years, and Jim is no exception. After a stint as a technical consultant, he eventually felt the gravitational pull toward management, where he spent a half-dozen years pursuing management roles, including line manager, director, and VP of engineering. In 2004, Jim decided to return to his first (technical) love of computer programming. He learned C# and Java and became a programmer at Intuit. In the end, he stuck with Java, and today he is a principal engineer at Intuit, where he writes code for a living. Also on JavaWorld: Ted Neward on the dark side of code ‘craftsmanship’. It’s not uncommon for software engineers to swing from development to management and back, but Jim’s depth of experience is unique. On a recent visit to Intuit headquarters, I took the opportunity to ask him some questions. We talked about what compelled him back into programming after a career in management, what inspires him about software development today, and what he sees on the horizon, for himself and enterprise Java technology. I also got a glimpse of the working culture at Intuit, and learned how Java fits into Intuit’s technology stack. Matt Heusser: Let’s start at the beginning of your career, Jim. What happened after you discovered coding with punch cards in middle school? Jim Showalter: In high school we had some access to programming, but it was off and on. You had to take a programming class, and only a few were offered. It used to be that computers were really expensive, but that was just about to change. After high school I went on an eight-year baccalaureate program that included an associates degree in electronics and ended in a CS degree from the University of California at Santa Cruz. My final semester at UC Santa Cruz, I was working on a minicomputer, and it used to run out of memory running vi, so I got my first personal computer, a Kaypro II, to run Turbo Pascal. It ran CP/M. After graduation I went to Plexus, where we used C. I still like that language a lot: small, fast, and dangerous. The Ducati of languages. Matt Heusser: After Plexus, how long did you stay technical? When and why did you move into management? Tell us about your first trek up the career ladder. Jim Showalter : I got interested in how products were used by customers — there seemed to be a lot more to product development than just typing code into an editor. I started flying out to customer sites, working with their engineers, and spent more time consulting, training, and selling than writing code. At some point I realized that even the best individual contributor can only produce their amount of output, but a manager can coordinate a bunch of effort, and (it is hoped) be more productive than they could ever be by themselves. “After graduation I went to Plexus, where we used C. I still like that language a lot: small, fast, and dangerous. The Ducati of languages.” Matt Heusser: You spent some time doing technical consulting before you got back to programming. What was that like? Jim Showalter : It’s always interesting to work with actual customers. It’s the only way to keep development pointed in the correct direction. That job gave me a sense for end users that has stuck with me ever since. You go to a site thinking you know something, only to find out that the users are using the product in ways it wasn’t designed for, or that they’re working around problems you didn’t even know about, or some other surprise. At Intuit we actually welcome this kind of thing as part of our development process. It’s interesting to see the same embrace of serendipity in the Lean methodology. Matt Heusser: When did you decide that you wanted to code again full time? What tickled your interest and how did you transition? Jim Showalter : One of the best engineers I’ve met worked in my team at the company before Intuit. He was considering management, and asked me to describe the experience. I talked about planning, budgets, board meetings, etc. At the end he said: “So … when we ship a product, you get to say ‘I facilitated that.'” And at that moment I realized I missed being an individual contributor! Matt Heusser: Was it difficult to go back to programming? Jim Showalter : For a while I was terrified. Technology accelerates at an accelerating rate, so being out of the game for while meant working a lot harder than if I’d kept my skills current all along. For eight months I didn’t do anything except code, 12-plus hours a day, seven days a week. When I felt comfortable interviewing, I applied to Intuit, brought some of the stuff I’d been working on, and demo-ed it. And one of the interviewers found a race condition! People ask why I hate bugs so much. That’s one of the reasons. Matt Heusser: Wait. You just said 12 hours a day, seven days a week to come up to speed — for eight months. That sounds like a serious life commitment. Jim Showalter : When you’re in flow state, you don’t really notice time. And it didn’t feel like work, because I was learning a bunch of new stuff, and learning is fun. “For a while I was terrified. Technology accelerates at an accelerating rate, so being out of the game for while meant working a lot harder than if I’d kept my skills current all along.” Matt Heusser: Tell us more about those eight months. What kinds of problems were you working on? Was it an at-home project? Open source? What IDE, version control, and technology stack were you working with? Jim Showalter : It was entirely at home. Initially it was Visual Studio and C#, but later it was Eclipse and Java. Version control was Subversion, but now I use Git and the eGit plugin. Matt Heusser: When it came time to code again, did you look at different languages? Why Java? Jim Showalter : Java had become the dominant language for web development, plus it’s just a generally well-thought-out language. It doesn’t have a lot of weird exceptions or oddities. I can code in it basically as fast as I can type. I already knew C#, so the transition was fairly straightforward, although I still miss reified generics, value types, and delegates. I’m looking forward to Java 8 and beyond. Every update to the language has added something valuable, for example built-in support for XML serialization, annotations, for that matter generics. It keeps improving. Matt Heusser: Can you tell us a little bit about what you do at Intuit? What products do you work on? How does Java fit into the Intuit architecture? Figure 2. The Lagoon outside Intuit’s corporate headquarters; Jim works in building four. Jim Showalter : I work on Quickbooks Online, which is a full-featured web-based accounting application. The back-end is written in Java, and I work on the back-end. It’s a classic three-tier architecture, plus we have a layer of services. We’re gradually integrating it with everything else at Intuit, scaling it out, internationalizing it, making it part of Intuit’s third-party developer platform, etc. There’s a ton of activity — a great place to be developing at Intuit! Matt Heusser: Are there any little-known Java code libraries that you use every day that you would like to tell other developers about? Jim Showalter: Most of what I use is standard stuff everyone knows about. JMockit is probably my favorite lesser known library. It’s indispensable for writing unit tests — you can mock pretty much anything, including constructors, private methods, static methods, etc. The guy that writes it — and there’s only one guy — has a brain the size of a planet. There are some Eclipse plugins I really like that maybe aren’t well-known: EclEmma for coverage (it even has branch coverage now), UMLet for UML diagrams, and eGit for Git. I also really like Maven, but it doesn’t qualify as little known. Matt Heusser: How has Intuit’s technology stack changed in the seven years that you have been at the company? Jim Showalter: Intuit’s server-side technology stack hasn’t changed very much (Oracle, Java, Tomcat), although we continually upgrade the components to newer versions. On the other hand, the UI stack is constantly and rapidly evolving. It’s a full-time job just keeping up on the new JavaScript frameworks. Matt Heusser: You say you work on the Java back-end of Quickbooks Online; do you ever work with client-side technologies? Jim Showalter: Historically my focus has been on the server. There are enough problems on the server to keep a person occupied for an entire career. Yet lately I’ve been coming up to speed on client-side programming. JavaScript standardization across browsers, HTML5, and maturing tools make client-side programming increasingly straightforward — but the rate at which new JavaScript frameworks and language features are introduced keeps it challenging. “Intuit’s server-side technology stack hasn’t changed very much (Oracle, Java, Tomcat), although we continually upgrade the components to newer versions. On the other hand, the UI stack is constantly and rapidly evolving. It’s a full-time job just keeping up on the new JavaScript frameworks.” Matt Heusser: I know you’ve been working on a fair amount of web services and database work. Do you prefer REST or SOAP — or JSON or XML — and why? Jim Showalter: As service providers, we can’t really dictate REST vs. SOAP, or JSON vs. XML to our clients, so we support them all. However, the programmers who use our services are trending towards REST/JSON as their preferred combination. Matt Heusser: How do you test the web services? Do you have a framework? Jim Showalter: We use a combination of HttpClient and JUnit, with canned requests in XML along with expected responses. We’ve written a bunch of test utility classes that understand our complicated business logic (the application does double-entry bookkeeping and has a global tax model) and our query format. When we detect that we’re writing the same boilerplate for multiple tests, we factor that into more utilities. Matt Heusser: You also write a lot of unit tests in JUnit — do you ever wrap those in timers to create performance tests? Is there a concept of performance testing at the unit level? Jim Showalter: We use DynaTrace for performance testing, in a dedicated performance environment, and we get numbers there that are accurate. We run a series of end-to-end performance tests, rather than small unit tests. Matt Heusser: What is your favorite way to “wrap” a database? Do you use an object-relational mapper like Hibernate? Jim Showalter: I like JPA/Hibernate, but our application was written before Hibernate existed, so we have our own ORM. But we’re investigating what it would take to port to a standard. Matt Heusser: Have you written classes that other programmers reuse? Tell us about code reuse at Intuit. Jim Showalter: I’ve written classes and frameworks for reuse, and so do other programmers at Intuit, but that’s not where the true reuse advantage comes from. Our significant reuse comes from exposing our application’s accounting engine and data through a service layer other programmers can use, both inside and outside Intuit. Matt Heusser: What is one thing about Java at Intuit that the world should know? Jim Showalter: When young programmers think of “cool” technology companies, they’re probably thinking of Google, startups, that sort of thing. But Intuit has been described as a 30-year-old startup. We innovate, we’re growing (and hiring), we dominate some market sectors and are expanding into others, and the company is well managed. Java programmers (and other kinds of programmers) owe it to themselves to check us out. Figure 3. Showalter with John Ruberto, director of product development for Intuit Quickbooks, Matt’s host for the day at Intuit. Matthew Heusser is a writer and consulting technologist who lives in West Michigan. You can follow him on twitter @mheusser or learn more about his company, Excelon Development. Web DevelopmentJavaSoftware Development