Though I started out planning to major in computer engineering and robotics (since that's what I did all through my high school years in independent study and through several International Science and Engineering Fairs), I found that the time lag between understanding a problem and implementing its solution were much shorter in the world of software than in the world of hardware. Not having to design and fab a new part to test an idea was such a time and money saver! I discovered this in college, and once I had, the course of my professional life was changed forever.
From 2008 to 2012, once I graduated, I was hired on and progressed to the rank of Software Developer Engineer II on the Microsoft product Visio. As you might imagine, being it's a member of the Office suite, Visio is a massive C++ project with (perhaps too) many features. While Visio isn't a particularly sexy application or model of good software design, it gave me the opportunity to stretch my C++ legs in a multi-million-line codebase.
In a playground of this size, I was able to observe many arcane features of the C++ language in action and had lots of examples of good (and bad) coding styles and practices to learn from. I was ecstatic. I enjoy nothing more than learning new cool things, and there are just so many nasty/brilliant opportunities in C++. You just don't get a chance to use them in small projects, but in a product the size of Visio I was able to see them ALL and even use a few myself in production code, much to my horror/delight.
While working at Microsoft was both a challenging and rewarding experience, I also found a passion for projects with a more humble scope. I met my friend Zach on Visio and he introduced me to indie game development and to the C# language. After tossing some prototype code around for a while, we both realized that the other was exceptionally skilled and competent, so we decided to moonlight together on a few side projects. Most notably, Zach designed and I led implementation of the Zachtronics Industries's hit indie titles SpaceChem and Ironclad Tactics.
If you aren't familiar with SpaceChem, Rock Paper Shotgun and Indiegames.com provide some reviews to give you a taste of the awesome, genre-defining gameplay to be found in SpaceChem. If you prefer, you can also read about SpaceChem from Gamasutra, the SciencePunk Blog and Metacritic. I'm also extremely proud to say that SpaceChem was rated as Gamasutra's #1 indie game of 2011. Ironclad Tactics wasn't quite as warmly received, though it does have an incredible amount of art and polish, a compelling story told through a graphic novel, and is a unique mix of card and tactics game.
In 2012, Zach left Microsoft to pursue game development full time and launched Zachtronics as a business. Later that year, I decided to leave Microsoft and join him in his indy endeavors. This was a radically difficult decision for me - I loved my coworkers and situation at Microsoft, but as the product cycle was wrapping up I realized that I wasn't up for another. I had spent the vast majority of my time investigating and deeply probing through Visio's code to solve some of its nastiest bugs, and while this was somewhat rewarding, I wasn't learning much new and my design skills were atrophying. With a heavy heart, I left to be a full-time Zachtronics programmer and implement and support the complex 2D animation pipeline and custom toolset for Ironclad Tactics (among many other things!) This was a radically different type of work and I took to it immediately.
My work at Zachtronics wasn't limited to C# gameplay coding, oh no. I also dabbled in HTML and Python for various backend support tools such as metrics logging, score validation and crunching, and user-generated-content curation. The best examples of my work can be seen in the Google App Engine projects running the Zachtronics Industries Store, the score validation service behind SpaceChem's revolutionary histogram-based leaderboards (here's an excellent web-based view of the data shown in-game, care of Chad Birch), and the Zachtronics Industries crash reporting service built into SpaceChem, which is thankfully invisible to most users.
Because Zach demanded it of me, I've also had the pleasure of writing the plain-C, cross-platform video encoder powering SpaceChem's upload to Youtube feature and the cross-platform portable .NET p/invoke wrapper for the Steam APIs powering SpaceChem's and Ironclad Tactics' Steam integration on Mac, Linux, and Windows. Goodness, the Theora and SWIG projects are awesome!
Because of my insatiable curiosity and thirst for all that is new, I just had to explore the ever- and rapidly-widening world of JavaScript development. I'm working on another side project these days to help track and monitor students at the local Kumon of Remond center and came up with the incredibly-originally-named StudentTracker site. The site is a bit rough and not really in a good state to accept others users, but it's super cool! It's built on AngularJS, Firebase, and AngularFire, facilitating cross-device, touch-centric, realtime check-in and -out of students and employees, work hour tracking, and student performance tracking and commenting. Those libraries are exceptionally snazzy and provide an incredible API surface for magical user experiences!
I'm quite pleased with the site - it's a pretty sizable project and I've had a grand ol' time putting it together and iterating on its UI and design for optimal user-empowerment and usability. The staff at Kumon of Redmond have some very nice things to say about how it's improved their lives, so I'm happy. At some point I'm hoping to polish it up and either sell it or charge users a small monthly fee to keep it running, but for the moment I'm content hacking away on it for fun.
My time working with Zach taught me a lot about UI design, usability, and to focus on user experiences. It was a great learning experience and a lot of fun, but we found after a couple years of working together that Zachtronics simply didn't have enough challenging project work to keep me occupied full-time. Therefore, as of March 2014 I left Zachtronics and entered the fold of FTI Consulting's Technology segment as a Senior Software Engineer working on full-stack development. Unlike the rest of the company (which is devoted, as you'd expect from the name of the company, to consulting), this small division works on developing software. Specifically, on their litigation support/e-discovery suite Ringtail. It's hard to describe Ringtail to people who aren't lawyers, but suffice it to say that it's a large, complex SQL Server, ASP.NET, and ExtJS web application.
Anyway, I'm glad to be back working with top minds solving hard problems in a complex application space. While working on games was fun, it wasn't terribly challenging. I hadn't known it at the time, but I had come to miss the joy of fighting tough technical battles along side brilliant developers. Thankfully, Ringtail provides both in abundance. As an added bonus, I love being able to work on the full software stack, everything from the database stored procedures to the application UI. The broad range of technologies helps to keep me interested and the work novel. Huzzah!