In a previous post, I wrote about what build engineers actually do. A related question is, “What makes a good build engineer?”
Obviously this is subjective, but I can share my opinions based on my particular skillsets that are useful in my job as a build engineer, and the qualities I look for in prospective candidates when looking to expand my team.
When trying to answer this question, an important thing to realize is that there are actually many subsets of build engineering. Depending on your team size and the needs of your developers, it may be possible to have build engineers that do not touch certain areas of build engineering at all (i.e, you may have some engineers that only work on low-level build optimizations, while some work exclusively on build automation). Within our team at Unity, we have one person that works almost exclusively on issues related to version control, while another works exclusively on developing and customizing our CI/build automation solution. This means there are many sets of skills that can make up a good build engineer. Customize what you search for based on your own needs. Develop your own skills based on your areas of interest and desired areas of expertise.
In terms of technical skill, the best build engineers come from software development backgrounds, but have a bit of sysadmin thrown in. They are good at developing complex systems and also throwing scripts together to automate something. In other words, they need to be a jack-of-all-trades, and (preferably) a master of one or two areas (for more on this read about breadth and depth of technical knowledge). Depending on the build engineer’s interests and experience, specific areas of specialised expertise may include (this is certainly not a comprehensive list):
- General software development
- Build languages (and various compiler toolchains)
- Continuous integration methodologies
- Version control systems (including best practices)
- Various build optimization techniques (bulk builds, distributed builds, etc)
- Development methodologies (branch-based development, patch-oriented workflows) and the best practices for implementing them
- Virtualization technologies
- Cloud computing
Soft Skills and Traits
There are certain personality traits that are also valuable. Some of them are invaluable. Build engineers should, in particular:
- Be humble (this isn’t the area for someone who wants the spotlight)
- Be able to keep a cool head (when something goes wrong at Unity, it is not unheard of to get an influx of a dozen or more individual Skype notifications over the course of 2 or 3 minutes)
- Be patient
- Be open-minded
- Be able to think from others’ perspective
- Have a passion for automating anything that can be automated (but also have an understanding of how to avoid trying to automate the un-automatable)
- Derive satisfaction out of giving others the tools they need and watching them succeed
Obviously the measure of what makes a good build engineer is somewhat subjective and will change depending on your needs. In almost every case, however, they will need to be a special kind of crazy.