Is your current job awesome? Or could you be doing better? I'm lucky enough to have what I consider to be an awesome job - I'm a web developer on the Stack Overflow Careers team. I've been working for here for 18 months now and I still love it. This is unusual for me - in the past, the honeymoon period for my jobs has been short, and after only a few weeks I've been sick of them and dreaming about the next thing. But here at Stack Overflow I'm doing work I believe is important, it's exciting and challenging, and I'm surrounded by wonderful smart people. So if you're currently stuck in a non-awesome job, how do you upgrade? Note that I'm not necessarily talking about how you can get a job exactly like mine - this is about how you can get a job that is awesome for you.
The cycle of awesome
I have a theory. My theory is that having an awesome job is part of a self-fulfilling cycle, which I like to call the "cycle of awesome".
The cycle works like this:
- If you already have an awesome job, you get to build awesome stuff.
- If you've built awesome stuff, you can show people how awesome you are - "look at all this awesome stuff I built".
- If you can show people how awesome you are, you can get an awesome job.
This is the self-perpetuating "cycle of awesome". If you can break into the cycle somehow, you're set. But what if you're outside the cycle, in a crappy job building stuff that sucks?
Stuck in a trap
Five years ago my day job was working on a large Windows desktop app for fund managers, which was largely written in VB6. It looked very much like an enormous Excel spreadsheet, and I don't think a designer had ever been near it. The code was split across maybe 300 different projects, and the limitations of VB6 meant you could only ever load a small handful at once. It was the kind of "line of business" application that a small number of people absolutely depended on, but I doubt many of our users could honestly say they loved it. The year was 2010, and we were using technology from 1998. To me, this was an emergency level of technical debt, but the management didn't see it that way. We had started building a few new components using .NET 2.0 (by 2010, only five years old), but this was only adding to the already enormous complexity of the application, and there was no sign of the fundamental VB6 foundations of the software being replaced any time soon. Looking at the world outside the company, it was clear the way software was being written was changing. New applications were being written for the web and mobile, not Windows desktops. The company could not expect to keep acquiring customers, and hiring and retaining developers, if it carried on like it was still the early 2000s. But they had no desire to change. I could possibly have coped with the glacial pace of technological change if the company had been a really great place to work. But it was the kind of heavily corporate environment bogged down with procedures, timesheets, pointless meetings, a dress code, locked-down PCs and heavily filtered internet (when Stack Overflow launched I had to put in a request with the IT department to allow access, which my boss had to approve). So I was stuck in something more like the "cycle of suck". I was building stuff that sucked, my CV was not going to get any better, and so I was trapped in my sucky job.
Breaking in to the cycle of awesome
How do you break out of the cycle of suck, and hop on to the cycle of awesome? There are three places in the cycle you can try to start, but I think there's only one that really works:
- Start at "Get awesome job"? Well yes, some people do get on the cycle here. Some people come out of university with great grades in Computer Science, they've done some impressive internships, they actually remember all that algorithms stuff, and they breeze through the interviews at a Big Famous Tech Company. Maybe in another reality I could have done this too. Unfortunately I did a degree in Physics, and instead of putting any effort into planning my career, I spent my summers working in supermarkets and packaging factories. That was all in the distant past anyway. I'm an entirely self taught programmer - programming had been something I only ever did in my spare time, right until I got that VB6 job in 2007.
- Start at "Tell people you're awesome"? Maybe you can get on here if you can talk the talk. It works for some people...
- Start at "Build awesome stuff". This. The great thing about being a software developer is the opportunity that most people in other professions simply do not have. You can build awesome stuff on your own. And there are loads of free resources to help you do that. It's entirely within your power to build awesome stuff and get it in front of other people. You can do it now, you can do it on your own, and you don't need to wait for your boss to tell you to go and do something.
Going it alone
So that's what I did - I decided to build some awesome stuff. In 2010 I quit my job and threw myself head-first into building the things that I wanted to build. I'd been spending much of my spare time working on my open source project Quest, a system that lets non-programmers write text adventure games, and I knew that teachers were starting to use it in their classrooms, so I thought there might be some opportunity there to make some money out of it. To be honest, quitting my job to focus on building a text adventure engine did seem kind of silly - but the iPad had just been released, and I was wondering if interactive ebooks might become a thing. If so then maybe I would find myself in the right place at the right time. All the best ideas are kind of hard to distinguish from ridiculous ones, and there was only one way to find out on which side of that dividing line this fell. And that was really the extent of my "business plan" - I didn't think it through in more detail than that. It was more a case of "what's the worst that could happen?" And the worst case scenario didn't seem too bad - I'd quit my job working as a VB6 developer, but if I wanted another crappy developer job then it wouldn't be that difficult to find one. What I wanted was a good job, and the best way to find one was to increase my skills. Being quite a frugal person I happened to have enough money saved up that, even if I didn't have any income for a year or so, it wouldn't be a big problem.
I made this
So I spent most of the next four years doing various things with Quest and interactive fiction:
- I finished my Quest rewrite, and kept on iterating with new releases, turning it from a Windows desktop application into a web app
- I massively expanded and improved my website, turning it into a hub for all kinds of text-based games
- I built a new product for schools using text adventures in the classroom
- I ran workshops in schools getting kids to create their own games
- I experimented with being a publisher, turning text games into mobile apps
- I wrote my own game which was an experiment in what a modern text adventure might look like
- I worked with writers and filmmakers on a project for a book publisher, building a promotional text game for a new sci-fi novel
I made small amounts of money here and there, with a larger amount of money from a few months of contract .NET developer work to top up my finances. Ultimately though, my money ran out. I had failed to build a successful business, but I had spent years doing work that I enjoyed, and I now had a vastly increased set of skills and a much more interesting CV. I had built some awesome stuff - now I just needed to follow the cycle around, to tell people about it and try to get an awesome job. That's what I'll be talking about in part 2 of this post. Just in case you think the only way to build awesome stuff is to quit your job and spend four years trying to build an entire business - you don't have to be as batshit insane as me. You can build stuff in your spare time - I still do, it just takes a little bit longer. Build something you're interested in building, something you can be proud of, and ship it. It's the best way to learn, and it's the best way to upgrade your CV.
Video
If you want a sneak preview of what I'll be talking about in part 2, you can watch my talk "How to be awesome" which this post is based on:
UPDATE: Part 2 is now available here Are you ready to start your "Get Awesome Job" phase? Check out the junior or senior developer job listings at Stack Overflow Jobs