This month's tech blog post is a bit different from our last few. Instead of
describing a cool piece of tech, I'm going to tell you what it's like to be a
certain kind of engineer at Bungie. This is aimed at new engineers, students
still in school (or recent graduates just coming out of it), and really anyone
new to this industry looking around to see what options are available. With
that in mind, I'll be talking about tools engineers, what they do, and why you
might want to be one. I'm going to focus on the role as it plays out here at
Bungie, but most of the information should apply to other game studios as
well.
Just so that we're all on the same page, I'll start with something that may be
obvious. What is a "tool" exactly? When I talk about being a "tools" engineer
and working on "tools", I'm referring to any application that's used to
develop the game and isn't the game itself. This could be anything from the
editors you might be familiar with from engines like Unreal or Unity, to
scripts that help you dig into why something isn't working, to applications
used to build and deploy new versions of the game as it's being worked on.
With that out of the way, let's start by looking back at how tools have
evolved in the industry. In the early days of game development, teams didn't
have dedicated tools engineers, let alone dedicated tools. Often the person
making the gameplay engine would be the same one making the art and designing
the levels. Or they'd be working closely enough with the people that did those
things that they didn't need a separate editor for them. As games became more
complex, working directly in code or editing text files became a real
bottleneck, so primitive level editors were developed. At first these editors
allowed artists and designers to do simple things like draw boxes for walls,
and place other boxes for the player, enemies, and other game elements. As
time went on, the editors became more sophisticated. As games moved into 3D,
editors did too. Some would even let developers see the game as the player
would while they worked on it. The reason these tools were created, and kept
improving, was that they made working on the game easier with each iteration.
With more specialized tools came the need to hire people who specialized in
creating and maintaining them. Enter the tools engineer. Who are they and what
do they do exactly? As I talked to my fellow engineers for this post, a few
things came up over and over again:
Positive Feedback
The great feedback you get from your team members and people using your tools
came up with every single tools engineer I talked to for this post. Since
you're working closely with the users of your tools, there's a straight line
between them and you. You become directly responsible for improving their
workflows, and they often love you for it. Of course, you're not a one-person
team tackling problems all on your own, especially at a large studio like
Bungie. You're surrounded by other programmers, team leads, testers,
producers, and others helping you to track down issues and prioritize work.
But you often develop close relationships with content creators, like artists
and designers, as that cycle of "find problem - fix problem" repeats over
time, and there's nothing like getting a high five (virtual or otherwise) from
people you know and respect to give you the warm fuzzies and make you feel
like you're out there making the world a little better.
It's also fun to see how the sausage is made, so to speak. Since you're
working so closely with the super-talented people putting the game together,
you have a front row seat to the circus that is game development. Once in a
while, I’ll walk around the studio (or used to, at least, and hope to again
soon) to watch people using the tools I’ve created. I’m always blown away by
what I see coming to life on their screens.
Variety
As a tools engineer, you work on all the different applications that go into
making the game, and there are a lot of them. You get to work closely with the
people using those applications to make sure their workflows are as smooth as
possible. There are always new challenges to tackle, new features needed,
something becomes slow that used to be fast, some user interface isn't as easy
to use as it should be, and so on. One day you're working on perf
improvements, the next you're designing or updating the UI. There's no real
average day for a tools engineer and you’re often able to manage your workload
based on your own interests. You could find yourself iterating steadily on the
same thing for a while or find that your work changes wildly over the course
of a release.
For example, it's not uncommon to do a lot of planning and talking with
content creators at the beginning of a release cycle, doing things like
gathering feedback on existing workflows and coming up with mockups of
possible new features to improve them. Then as the release progresses you go
heads down on the work of implementing the things you planned. As you get
closer to ship, you’ll often switch to pure bug fix mode.
Over time, depending on what your interests are, you might also want to move
on to a completely different team at some point. Over my time here at Bungie
I’ve created or done major work on tools for a wide variety of people
including world artists, gear artists, activity designers, testers, as well as
some of our more global tools used by almost everyone. If you like being
challenged on a number of different fronts, tools work may be right up your
alley.
Ownership
Our tools ecosystem is vast and it's not hard to find a bit of tech to carve
off and claim as your own, even when you're just starting out. In fact, the
most common way for new engineers to ramp up on our code base is for them to
take over some feature and start building up expertise in that area while
learning from any existing experts.
By "ownership" I mean digging deep into a system, identifying ways to make it
cleaner and more maintainable, working closely with users on upgrades, and
being unafraid to propose radical changes (if that's what needed). Your
ownership continues to grow as you become the vision holder. If the previous
owner is still around, they're often excited to hand it off to you. At Bungie,
we prioritize trusting and empowering individuals over maintaining a chain of
command. You'll never be told that something is off limits because someone
else wrote it and doesn't want it changed. We care deeply about the experience
of our artists, designers, writers, testers, and everyone else that use our
tools.
Another example of ownership opportunity that isn't even related to code is
when I helped a handful of folks that are especially passionate about user
experience (UX) to form a group called Tools UX. We now work to evangelize the
importance of usability in our tools and help others to improve it.
Tools vs. gameplay
When looking at job descriptions, you might see a studio looking for both
"tools" engineers and "gameplay" engineers. Are they really that different?
Why don't they just post job openings for "engineers"? There's a lot of
overlap for sure. But I'd say the main difference lies in focus. Gameplay
engineers will mainly focus on the features within the game, while tools
engineers will mostly focus on the needs of the end users of their tools.
Sometimes you need to put on your detective hat and pull information out of
users who might not know exactly what they want in order to design a better
workflow for them. For example, in creating our content merging tool, I worked
closely with our user research designer to find out what people expected from
such a tool so that it could be made as easy to use as possible.
There's also the difference of programming language. On Destiny, C++ is used
for the engine and C# for the tools, but the same high coding standards apply
to both - as well as the same general architectural and programming skills.
That said, there might be times as a tools engineer when you need to work in
engine code, and vice versa.
Developing Skills
If you're an engineer looking for a fun career track in games, and tools work
sounds exciting, you might wonder what kinds of skills are important to build?
To start with, there are the high coding standards I mentioned. But beyond
that, you should be someone interested in solving the types of problems that
come when trying to make workflows better. That includes having a knack for
communicating with non-technical people in a way that makes more technical
concepts clear to them. It also means having a customer service attitude,
where your first instinct is to have a conversation about what's going on so
you can figure out a way to make it better. If you enjoy designing intuitive
interfaces for your tools, so much the better.
Extras
If you’re curious about details of the tools used to make Destiny itself, the
line count of our main tools solution is 1,903,542, with one generated file
that represents all the game structures used in our tools taking up 292,294 of
those lines. There are 8,969 *.cs and 1,085 *.xaml files. Of course, those
aren’t the total lines ever written. I’ve personally deleted well more than
100,000 lines as part of various cleanup efforts. It also doesn’t cover other
solutions that contain tools code, or games besides Destiny.
To put pictures to words, here are screenshots of just some of the editors
created with that code...
Wrap up
Working on tools is a great option if you're looking to get into game
development. You get to work on new and interesting problems all the time,
you're always learning new things about the different types of content that
goes into the game, and you get that amazing feeling of helping those around
you create the things they came here to create. I’ve been working on tools at
Bungie for over a decade now and even though the usual issues around tech debt
and wishing you had more time to polish things haven’t gone away, I’m still
getting the same joy from making people’s work lives better and still finding
interesting challenges to work on.
- James Haywood