As GDC approaches it seems appropriate to reflect on the industry and our careers, but I’d like to take it a step further and talk about industry hiring practices – in hopes it sparks introspection and conversation at the conference. While I could wax on using generalities, I’ve decided to put myself on the line and use personal experience to provide concrete specifics rather than anecdotal theoreticals.
I've been creating games and game engines for over 20 years. In that time I've adapted many different platforms and technologies and have developed and published games on all of them. Missing from this list are the countless company-specific libraries & engines as well as things I'm just not recalling at the moment.
- 6502 assembly, 68x0 assembly, x86 assembly
- BASIC, Pascal, C, C++, Obj-C, C#, Java
- TRS-80, Vic-20, Timex Sinclair
- Apple IIe, Atari 800, Atari ST, Amiga
- SNES, Saturn, Dreamcast, N64, PSX
- DOS, Win16, WinCE, Win32, Linux, Mac OS, Mac OS X
- WinG, Direct2D, DirectX, XNA, etc.
- MFC, TurboVision, Qt, OWL, WinForms, WPF
- OpenGL, OpenGL/es, STL, Boost, etc.
- MCI, DirectSound, Halestorm, Miles, OpenAL, Hekkus, etc.
- Renderware, Flash, SDL, Cocos2Dx, Unity 3D, etc.
- Farseer, Box2D, Chipmunk, etc.
- Smacker, Bink, etc.
- PalmOS, iOS, Android
There have literally been hundreds of games built upon the engines I've created over the years and some of them even shipped! (Game industry humor there, sorry if it hits too close to home...)
But despite this vast wealth of experience, I am certifiably un-hirable in the video game industry. Nobody wants me, at any price (I've offered myself for free and nobody was interested). All they want are new grads with a Unity 3D side-project or two under their belt. They're cheap, they'll work heinous hours without question because they don't yet have a family, and best of all -- they'll shut the hell up and do as they’re told.
That last part is the dirty little secret of our industry. The moment someone has enough experience to know when stupid decisions are being made (and when they're being taken advantage of) and enough integrity in their work to say something about it, they're castigated by the industry management caste. Their job ads always say they want creative, independent thinkers who are self-motivated and passionate about their work -- but they don't really mean it. I just wish they'd be honest about it, with us as well as themselves.
THE PIGEON HOLE
Unfortunately, I have even more experience than all the above. That's just the Software Engineer parts. I've also held the roles of Game Designer, Producer, Executive Producer, VP Engineering, Technical Director, Founder, Marketer, and Business Developer. Most know the term Renaissance Man, but the word polymath has crept into our industry lexicon over the last few years, and it too is an apt description of my background.
But I used the word "unfortunate" because all that experience is, once again, viewed in a negative light by the video game industry. Nobody wants to hire someone with this background because they assume the worst about that person.
This attitude is vocally denied, but reflected in truth by their interview questions:
- What do you really want to be when you grow up?
- But do you want to be a programmer or a manager?
In their narrow little view it's “impossible” for someone to be attracted to and successful in every role. Yet here I stand, having been an Executive Producer at one of the world's leading publishers and currently writing game engine code for Android & iOS. I'm a paradox.
The questions they ask also belie their self-denied age discrimination. The only person for whom #1 is a relevant question is someone young and fresh out of college. Anyone 10-20 years down the road should already be doing what they want to do when they grow up. Why ask questions when the answers have no relevance or value?
I've been in this industry long enough to know what I want, so trust my answer. At some point both the employer and employee need a measure of trust, right? My answer to the above questions is always the same, but nobody likes them because (again) they don't fit the cookie-cutter responses they've been trained to want.
- My family is my primary focus. What I want out of an employment relationship is a place where I can work on really cool things with really great people that will hopefully become friends. I'd also prefer a company that appreciates work/life balance, especially for people with children.
- I can do either. Really. Look at my resume (you HAVE looked beyond the current job, right?). I want to find the right place, right project, right people, and then fit in however I can -- there are numerous ways I can contribute! I applied for the position you called me about because I know I can do it. Time is my most valuable commodity so trust me I wouldn't waste any of it if I didn't think I could do the job.
The way this always shakes out in practice is (a) Nobody will hire me as a Producer or Manager because I've got too much development experience to be a “real” manager; or (b) They won't hire me as a Developer because I have too much management experience to be a "real" programmer.
On the Production side, there's a bias against people without current-generation console experience as well, but seriously how different can it possibly be than prior generations? Hilariously, they also won't consider me for Mobile producer roles even though I've been working on Mobile products (sometimes in that role) for the past ten years.
On the Development side, it always comes down to the dreaded programming test. Many companies, especially those in video games, are real assholes when it comes to programming tests. Most of them won't even talk to you until you've taken their 4-8 hour online test, which immediately indicates how little they value your time.
Moreover, a programming test is rarely the final arbiter of hiring decisions anyway so why not at least meet me first? If you don't like me or don't like my philosophy on games, software development, or whatever, then neither one of us has to waste more than 15 minutes.
Most of the time, test questions contributed by existing team members are designed to show their managers how "clever" they are. But at a minimum they test for depth of knowledge, not breadth, so I'm at an extreme disadvantage from the very start.
Even if we ignore my vast non-programming experience, just within Development my background is massively more diverse than most industry programmers -- who tend to focus on specific platforms and specific pieces of technology (shaders, physics, Windows, Wii, Mac, or whatever).
Just in the past five years alone, I've developed for and shipped on Windows, Surface, Mac, Android, iOS, WinCE, and Linux in C, C++, C#, Obj-C, Java, Cocos2Dx, SDL, and Unity 3D. It's completely unrealistic to expect a person to have deep knowledge in every one of those technologies -- even if the hiring company only uses one of them.
And that's where companies make their mistake (IMHO) and miss out on great hires with tons of relevant experience like me. Their programming interviews are based upon a myopic view of what makes a great developer. Regardless of what they write in their job descriptions, all they really want are Code Monkeys who are deeply focused on the one or two technologies they deem as currently relevant.
Sadly what the video game industry has shown time and time again is how this ultimately hurts the Developers doing the testing. What happens when technology inevitably moves on every few years? Companies throw out the "old furniture" and remodel – because developers are completely fungible, right? Just look at the current console transition to see this same old pattern emerging. You're a PS3 pipeline programmer? Sorry, that's no longer relevant on PS4. Don't let the door hit your ass on the way out.
Another huge problem with myopic programming tests is they ensure a monolithic gene pool. Ever notice how the pool of developers at a company tends to be cut from the same cloth? There are a lot of different kinds of developers, and if you hire only one kind you're doing a disservice to your management, products, shareholders, and customers.
The marketing literature would have you believe all developers are the same – they “love” solving problems. But some of us aren’t like that. I freakin’ hate problems – they prevent me from realizing my creative expression. For some people, programming is an end unto itself. But for others, it’s a means to an end. You need both types.
I got into this industry to create entertaining experiences, not to play with imaginary numbers. And you know what? There’s nothing wrong with that! Intellectual diversity would be good for many companies. They should consider it.
One example of how these tests produce static gene pools is the old Westwood Studios programming test. They're not the only ones like this by any means, but their entire test was riddled with questions like "Add these two numbers using only the left shift & and operators". Other companies may focus on language minutia like "Please explain the 'volatile' and/or ‘mutable’ keyword".
I can answer one of those and Google the other one pretty quickly, but seriously -- what's the point? Outside of device driver authors, nobody does those things anymore. I'm happy to see you're getting your jollies asking insipid questions about arcane language features, but here in the real world usage of these things is considered poor practice.
They ask these questions because they assume a person who knows obscure things must be “legit”. Nothing is further from the truth of course, and worse (for the company) is these kinds of questions backfire. Anyone who knows how to write high-quality, maintainable software will question working with people who write such poor code.
The bottom line is an age-old adage that's been known for centuries -- If you want the right answers, you have to start with the right questions.
IMHO the entire industry needs to mature its hiring practices for software developers. It's fine to ask some basic sanity-test questions in an interview, like "Explain polymorphism and give an example of when you've used it in the past." But the focus should be on talent, not mere skill set, because the skill set will change in a year or two and all you're going to be left with is the person.
There's a software industry problem that's grown much larger than the video game industry, thanks to overseas outsourcing, and that is a devaluation of people. Software (and by extension video game) companies don't value people and don't value talent. They can deny it all they want but the hard data is reflected in their hiring practices.
Regardless, the best way to focus on talent rather than skill set during an interview is to (gasp) ask different questions! Having been a hiring manager on many occasions, the programming questions I like to start with are:
- What is your favorite feature of C++ (or C# or…) and why?
- What is your least-favorite, and why?
These two simple questions give you far more insight into a candidate than any programming test ever could. Companies say they give programming tests because people lie on resumes and can't be trusted, but I think that's just laziness on their part. People who lie on their resume (i.e. don't actually have programming experience) cannot satisfactorily answer these two questions. Five minutes and you're done.
For people like me it ultimately it comes down to this: We will fail your programming tests. You will conclude we are not “worthy” to work at your company or even “qualified” enough to write code (must've lied on that resume!).
Yet somehow I do this every day and have been doing so for 20+ years. How is that paradox possible? Simple: You've asked the wrong questions. You've focused on skill set instead of talent. And both your team and your company are less than they could be because of it.