I solve problems, design systems, lead development of products, manage teams, and mentor others to achieve their success. Together, we’re building the EA Digital Platform: EA’s core back-end services, aimed to empower game teams.
I managed the software development team of a patented esports tournament and cash match platform for mobile, desktop, and web. I helped make crucial decisions, facilitated safe conversations, interfaced with advisors and investors, sourced and recruited developers, and wore every engineering hat necessary. I managed the product goals and roadmap, including market research and partner relations. As we grew our player base, I also managed our community, including research, outreach, and support.
After having built the initial front-end and distributed back-end, we grew the team and I ultimately focused primarily on team and project management, as well as partner relations. We used ClojureScript & React on the front-end and Clojure & Ring on the back-end. All services were Dockerized and all IO to/from Postgres, Mongo, and other external sources was scheduled by core.async.
I was a member of the Marvel: Avenger’s Academy game team and worked on a variety of tasks, in modern C++, ranging from implementing game features and UI per spec to improving core systems, such as the multi-threaded downloader. I had the opportunity to research, profile, and improve the game’s load times by over 40%.
Always with safety in mind, I gave talks on functional programming and the intricacies of C++ value categories, pushed for regular code reviews, and mentored others to achieve more maintainable code.
I was the lead developer on multiple Android and iOS games, covering the client-side game play as well as implementing the entire back end. All client-side work was done using Unity3D; I spent a great deal of time working in C#, designing type-safe, asynchronous APIs. The back end work was all done in C++14, using Crow, a multi-threaded micro web framework for modern C++.
Some interesting systems I designed and implemented include a type-safe notification system and a procedural music generator using common Jazz progressions and Markov chains.
My primary focus was on a shared code base of modern C++14 which was used by five different servers, including XMPP and SIP. As my first task, I rewrote the build system for all five servers, using bash and GNU Make, to be more standard and idiomatic; we used Linux exclusively, including CentOS, Ubuntu, and Arch.
To aid in the quality of the products, I was able to spend a great deal of time improving processes; I introduced continuous integration, unit testing, and all changes to the servers were reviewed by me. To improve type, memory, and thread safety, I reworked, rewrote, and improved many existing systems.
A challenging task was to reimplement our C++ authentication code as a generic RESTful authentication server, written in Node.js. This required reading and understanding the TURN RFC’s requirements on authentication, implementing the server, and integrating it into all of the Eyeball products.
I also gave multiple technical talks, during lunches, covering topics such as debugging with GDB, smart source control with Git, and practical uses of modern C++. As we were actively recruiting at the time, I had the opportunity to play a key role as the last stop for candidates interested in the server team; I grew comfortable with the process and testing a candidate’s abilities in a cool, respectful fashion.
I built upon an existing game engine utilizing cocos2d-x to integrate 3D rendering support using Ogre3D. The target platforms were Android NDK and iOS, using C++, which required profiling of the renderer to achieve good performance.
I enjoyed working remotely for the whole duration of the project; it was an exciting challenge to quickly learn how to manage remote work and improve communication with detailed write ups and daily check-ins with the project lead.
I was a founding member of the core game engine team at TinyCo. We had the opportunity to not only instill better practices, such as continuous integration and daily code reviewing, but also do a great deal of systems-level API work in modern C++. I developed and integrated a replacement notification system using template meta-programming, which was much more thread-safe and type-safe. During my time at TinyCo, I also reimplemented the texture loading, on Android and iOS, to work asynchronously, using modern C++ synchronization.
The systems I implemented and the APIs I maintained were the core of hit games including Family Guy: The Quest for Stuff, Tiny Monsters, and more; these games manage ~100 million installs across Android and iOS.
I gave multiple talks to the engineering department, covering modern C++ techniques and features, using modern C++ synchronization for threading, and using template meta-programming for type-rich interfaces.
The culture at TinyCo was competitive, yet collaborative; we had many discussions and debates about C++ best practices and architecture design either during review or lunch time talks. At the end of the day, the code was cleaner and better maintained because of our passion.
I have been actively developing open source software for several years. Many of my own projects, ranging from game engines and systems-level C++ libraries, to unit testing frameworks and Vim plug-ins, are used by thousands each day. Along with providing support for them, I also have contributed to a number of other projects which are not mine. Some of these include Rust, Clojure, NixOS, Reagent, Fail2Ban, OpenMW, and many more.
In other projects, though I may not merge my own commits, I help the community by reviewing code which others have committed or reporting issues and troubleshooting their causes. The competitive, yet amazingly collaborative environment which is the open source world, be it on Github or in IRC, is a place where passionate developers can certainly thrive; I love being a part of it.