Mike Mueller graduated from URI in 2001 with a B.S. degree in computer science and a minor in physics. He is the founder of Vigilant Software and Principal Software Architect at Panoptic Development.
FMC: Mike, when you began college, did you know you wanted to major in computer science? And why did you choose URI?
MM: Yes, it’s something I’ve known for a long time. My family got a computer when I was about nine years old, a Tandy 286 (eight whole MHz) that shipped with a version of GW-BASIC. I started learning to program soon after, getting books from the library and learning, very slowly, what it was all about. I enjoyed the process; making the computer do what I told it to do was satisfying, like solving a puzzle. Throughout my life, it’s been obvious that computer science fascinates me, and it hasn’t ceased to.
The decision to go to URI was a pragmatic one. I knew URI to be a solid school with a diverse range of subjects, and I believed it would provide a well-rounded experience. I was accepted to a couple other, more technical, schools, but being a hundred thousand dollars in debt at age 22 was a scary prospect. Looking back, my education and experience at URI was great and has opened just as many opportunities as any private college would have. It also allowed me to explore avenues outside my major, rekindling my fascination with physics and the sciences in general.
FMC: You were a software engineer for WebMachines, Inc. while still a student at URI. Tell us about that.
MM: WebMachines was my first taste of the ...interesting... world of software startups. It was a small, VC-funded business building some really cool devices intended to make it easier to get online. I started there in 1999 as part of my student internship, and it really propelled me forward in my education and my career. I did a lot of coding in C on embedded platforms (QNX and Linux), put together servers from parts, installed and configured Linux systems running what is now considered a basic LAMP stack.
Blissfully unaware of macroeconomics 101 and the concept of market bubbles, I loved working there. I worked with some great people, many of whom I’m still in touch with today, learned a ton, and played with cool technology. WebMachines was developing software for tablet computing 10 years before the iPad was announced, and we made internet-enabled HDTVs when dial-up was still the way most people got online. The devices worked well and the consumer tech conferences loved them, but the market wasn’t ready for prime time yet.
FMC: How did you get your first job after college?
MM: When I graduated, and as the dot com bubble was deflating, WebMachines brought me on full time. Two months later, they ran out of money and I had to scramble for a job. Fortunately, another small North Kingstown [Rhode Island] company was growing and needed engineers at the time. Vector Software ended up hiring five people (myself included) who came out of WM, several of whom are still there.
FMC: What did you do in that position?
MM: Vector produces some interesting software testing tools, the most important one being an automated unit test tool. Essentially, it parses your project’s code, automatically generates stubs and test drivers, and then provides a GUI to let you specify inputs and expected outputs; very cool stuff. They had support for Ada and C at the time, and I was involved at the early stages of their C++ product. Anyone familiar with the language knows that this is an extremely challenging problem to solve. I spent a lot of time adding support for particular language features (and cursing Bjarne Stroustrup’s name), optimizing for performance, and providing technical support to customers.
FMC: Why did you leave Vector Software, and what did you do next?
MM: An opportunity came up (via a WM colleague) to work for Raytheon on the software for a next-generation ship for the Navy. It seemed like a chance to broaden my technological horizons. I worked on the infrastructure team, building CORBA services in Java and C++ that served as a foundation for the rest of the ship’s software (providing basic services like database, messaging, and LDAP directories). I learned a lot about how enterprise software is developed.
FMC: Let’s talk about the company you founded, Vigilant Software. How did that come about? And what is it?
MM: In my career, I’ve learned that the most challenging thing about developing software is ensuring it behaves properly in every conceivable situation. As Knuth once wrote, “Beware of bugs in the above code; I have only proved it correct, not tried it.” I found I really enjoyed using unit tests to ferret out issues in code. I’m happy to see that automated tests have become a given in most places, and appreciate recent movements like test-driven development (TDD).
I became interested in the idea of discovering software defects automatically. Of course, there were already tools that did some basic checks, warning you if you might have used the wrong operator= or whatever. But to really be intelligent about it, you have to be path-sensitive—trace every executable path through a program and identify when a NULL pointer might be dereferenced, or an array might be accessed out of bounds.
I eventually developed software that does this kind of analysis for C and C++ programs, and founded Vigilant to market and sell the tool. As someone who cares about software quality, it’s been very satisfying to develop this tool, and even use it to find and fix bugs in open source projects like Squid and Git.
FMC: What are you doing presently?
MM: I’m currently still developing Vigilant, which is a few years old and just starting to get interesting as a business, as well as working on a small consulting business called Panoptic Development. A few colleagues from another job started Panoptic to offer web development services (Rails, Django, etc.) to a variety of customers, and they brought me on early last year. We’re based in Providence, but a couple of us have since moved to San Francisco, so we have people on both coasts now. I’m currently working on Drupal, building an Android app, doing some Rails maintenance work, and trying to find people to grow our team!
FMC: How hard do you work? Does your career leave you with enough time to enjoy life?
MM: It depends; consulting work can be crazy and it can be slow. What’s nice is I can say “no” to a project if I don’t think I have the availability for it, or if it looks like it’s more trouble than it’s worth. It’s a nice kind of freedom to have. Having a full-time job is stable and usually more secure (but layoffs happen all the time); consulting is a bit more flexible and, for me, keeps things interesting.
FMC: Can you give some advice to our current students?
MM: I think the key to success in any career is passion. In just about any endeavor, your drive, commitment, and success will come directly from your passion. This is doubly true for software careers, because the rate of change is phenomenal. All the time, new languages, toolkits, and methodologies are being developed to make it possible to develop more powerful software more easily (if you know how to use them). If you don’t have the drive to play and learn in your spare time and stay abreast of the latest tools and languages, you risk gradually becoming irrelevant. It’s a harsh reality of our competitive field, and as I see it, the key requirement is passion.