In some ways it’s quite horrifying how little thought I put into my first two jobs. The VIS advert in the university careers service newsletter jumped out at me purely because they were in Dundee and made software (my then girlfriend, now wife, lived in Dundee at the time). I thought I’d go and take a look, and the “Brave” concept art around the place hooked me in. Without that chance sighting, who knows what I would have done – not games, I think.
I then stumbled into Realtime Worlds because I wasn’t enjoying certain aspects of VIS, and I knew a few people who had gone up the road. It seemed the best option in Dundee, and we’d just bought a house so moving wasn’t that desirable.
I guess what I’ve described is a pretty common human problem-solving technique: go with a gut feeling, a local, adequate solution, and see how things go. Change your approach if it isn’t working.
But earlier this year, for the first time in my life, I decided to be a bit more deliberative about the search my next job. I realised that it was time to move on, that I care passionately about what my workplace is like, and that I am not the kind of person who changes job too often. I asked myself, “if I could work on any software project, anywhere in the world, where would I choose?”
I thought I’d share the process I went through for anyone who’s interested.
I never seriously entertained the thought of leaving software development, but equally, I never wanted to restrict myself to games. So I came up with three fairly general criteria that I could apply to any developer:
- Must produce truly world-class product(s) – recognisable “brand names”. I know this isn’t necessary for me to enjoy a job – because I know I’d love to work for the right early unheard-of startup – but with a young family, the time felt right for something more stable. Once I started to look at established companies, I couldn’t face the thought of somewhere whose product was anything less than excellent. Sub-standard things irritate me deeply and I want to be proud of what I do.
- Must be known for being a good place to work – good culture, talented colleagues. The people I work with, and the types of interactions I have with them, are what make me happy to get up in the morning and go to work. And I need time with my family, so sweat shops are out, even though some of them do amazing things.
- Must be innovative and ambitious, technically and/or creatively. In other words, the work itself must be interesting. Otherwise, you could name some rather mundane places that satisfy (1) and (2) – perhaps banks, although I’ve never worked at one, so that may be grossly unfair. As a specific example, I worked my university summers at Data Connection (now Metaswitch), and they matched (1) and (2) without really inspiring me to go back.
I did not limit myself geographically. I was most likely limited by my own awareness and knowledge of developers, and perhaps in a variety of subconscious biases, but I tried to search as widely as I could. I decided to be really picky on all three criteria, and came up with a list of about 10-15 companies to start off with (4 of them were game developers).
The next question was, what do I actually want to do? After getting semi-accidentally sucked into management at Realtime, I felt that I needed to make a clear choice between going back to programming, or committing to the management path. I honestly found this a tricky question. My heart instantly said programming, because I love it unconditionally. But my head couldn’t help wonder what the other path might hold. Maybe the possibilities for career growth make management a better long-term option? And there’s always the classic fear of being an old programmer, articulated here for example.
In the end, I decided on an experiment. I would apply for management roles with some companies, and engineering roles with others. I figured the interview process itself would help me to learn about myself and ultimately make a decision. As a general rule of thumb, I tended to go “management” for the really giant companies, and “engineer” at the others. I did this on the basis that I’ve already done the thrown-in-the-deep-end-with-no-help thing. It would be good to experience somewhere that provided clear structure, expectations and guidance to younger managers, and an opportunity to be mentored well. So I created two drastically different CVs for the 2 roles, and sent my applications off. What happened next was wonderfully illuminating.
So the first reply I get is for a management role with a company that shall go unnamed, inviting me to their first-round phone screen. The questions are slightly unsettling from the start:
“Tell me about a product that’s not electronic or electrical in any way that you absolutely love and consider to be well-designed”.
Ok, um, panic!! … looking around me … ah, my Moleskine notebook is sitting in front of me with a list of questions to ask at the end. That’ll do. I manage to give a semi-decent answer about why it’s a well-designed notebook. Phew.
“Now, consider how you might make use of electronics to improve this product. Describe your design to me”.
Just nothing. Totally blank. I half-heartedly stumble through some ideas and the interviewer, taking pity on me, takes one of them and turns it into some kind of portable pen that could scan pages for transfer to a computer. I admonish them for what is, frankly, a stupid idea. Ooops! They point out that it’s just an interview question and leave awkward silence for me to give a better answer. Eventually I blurt something out about how useful it would be to have a wireless device that could help you locate your notebook if you lost it, if such a technology were cheap enough. A bit lame, and a bit sci-fi, but at least somewhat useful.
An hour later and I can finally hang up the phone, pouring with sweat and totally on edge. Lucy asks me why I didn’t choose our cots (we have pretty nice cots). Built-in baby monitors, toys that make lights and sounds, temperature monitoring … the possibilities for naff but plausible electronics would have been endless! Damn!
A week later, for reasons I cannot fathom, they let me through to their next round of interviews. I start sweating nervously on the spot. Here we go again …
“Describe the design of an iPhone application you’d like to make”. Great! I’m in the middle of creating an iPhone game for a bit of fun. Launching enthusiastically into my game design, they cut me short. “Could you choose something that’s not a game, please?”
[I can’t face the embarrassment of describing what I came up with. Let’s just say I finished this interview even more of a wreck.]
The very next day, I have my first engineering interview. At this point I’m pretty terrified of any kind of interview, so I start off more or less trembling.
“If I write an empty class in C++, how many functions does it already have?”
I can do this.
“If I add a pointer-to-integer member, and assign a new int to it in the constructor, what else should I do to the class?”
I can do this too.
“If I change this member to a pointer-to-array-of-integers, what changes should I make?”
I suddenly notice that I’m completely, blissfully, relaxed 🙂
“What happens to your code if the memory allocation fails during the assignment operator?”
Doh! But easily fixed!
“Could you describe all of the casting operators in C++?”
In my sleep.
“What do I mean by shadow mapping?”
I love interviews again! Ask me more!
And so on.
In short, after an hour of non-stop technical questions, I know I have to follow my heart. The unnamed giant company call back and ask for another management interview, and I tell them to **** off (nicely), because I am, conclusively, an engineer again.
And the result …
The outcome of all this is that I’m now a software engineer at PDI/Dreamworks. Working on film graphics seems like a good way to learn something new but also make use of what I already know. And my 3 criteria are definitely met.
I’ve only been here 2 weeks, so for now it’s still pure excitement. A considered opinion will have to wait. But whatever happens, I feel good knowing that I explored my options as best I could.