This talk was given at the At The Frontend conference in Copenhagen on 25th May 2016.
How do you describe yourself to potential employers? Many developers get this terribly wrong.
In part 1 of this blog post I talked about getting a better job by building awesome stuff. In this part, I’ll talk about how to communicate your awesomeness.
Applying for a job normally involves writing a cover letter and CV. The whole process can feel very impersonal – filling in online forms, typing words onto a screen, hitting the Submit button and maybe never hearing anything back. Yes, it sucks. But remember where your words will go, as you send them off on their journey. They will be read by another human being.
Sometimes I’ve seen people applying for a job who must have thought that their cover letter and CV would simply be fed into some kind of computer that would check their skills off against a list of requirements. While it’s true that some companies have systems which automatically check your CV against a list of keywords, you don’t want to optimise your job application for their simplistic software.
Software is not going to get excited by your CV, but a human should. Unfortunately, human beings are flawed – they sometimes come to irrational decisions, they are clouded by emotions, and they get bored. Humans like stories.
So tell your story. You want to make that person on the other side interested in who you are. You want to make them excited because they’ve found a promising candidate for the job they’re trying to fill. You want to give them a clear idea of what you’re all about. You want them to be on your side.
I’ve been involved in recruitment a few times, both at Stack Overflow and elsewhere. When I’m reading your cover letter and CV, I’m trying to answer one question – “who are you, and why should I care?“. It might sound harsh but that’s what it ultimately comes down to, especially when you have a big pile of applications to go through.
There is no “correct” way to write a CV or cover letter – you can read lots of advice about structure and formatting, but the sole purpose of these is to answer the question. If you fail to answer it, you’ll have a hard time getting a great job.
To answer it, you need to communicate a story about yourself. Who are you? What have you done that’s interesting? What excites you about the job you’re applying for? How can you convince somebody that you’re capable of doing the job?
It’s a story about you, so write in your own voice. Don’t waffle – anything that doesn’t add to your story only detracts from it. Get to the point and keep it simple.
You want to leave the reader with a clear, convincing message. They should be left with a clear feeling that you’re obviously a great candidate for this position.
So, what things should be in your story?
At Stack Overflow, when we hire developers, we’re looking for people who are passionate about coding, have an appropriate level of experience (both breadth and depth), and who Get Things Done. Other companies will have their own criteria, but if you’re the kind of person who is smart and gets things done, and you want to work with other people who are smart and get things done, then your cover letter and CV should be all about that, whichever company you’re applying for.
How do you convince us you’ve got what it takes? We want to see that you’re passionate, experienced, and get things done, so you should just say that, right? Wrong. You don’t get to inject thoughts into people’s heads just like that. You have to give us the evidence that leads us to that thought. You want us to come up with the thought ourselves. If you tell us what to think, it’s not just patronising but boring.
Here’s the kind of thing people write in cover letters all the time:
As an outstanding senior-level software engineer with over 8 years of experience using Microsoft technologies, I believe I possess the skills, qualifications and vital experience necessary to make a very profound contribution to your business operation. In my current and previous roles I have delivered substantial improvements in creating high quality systems and streamlining operations, resulting in improved revenue, increased profits, and a high rate of client satisfaction.
This is just tiring to read. And it doesn’t even say anything! There is no actual information in there, just a list of things this applicant wishes us to think. Tell us an actual story, give us the evidence, and let us come to our own judgements. If I read something that makes me think “this person must be really passionate about coding”, that’s a lot more convincing than simply telling me you’re passionate about coding.
It all boils down to that classic writing advice – “show don’t tell”.
Chronology is not the most important thing, so you don’t need to start at the beginning of your story. I often see people start cover letters with things like:
I started computer programming 18 years ago as a hobby …
Sure, this is the first thing that happens in the story, but it’s not the most important thing, and it’s not a great hook. You know how movies tend to start with something exciting happening, and then fill you in on the background later? Try doing that instead. Hook me in with something interesting and unusual about you. A lot of programmers started programming as a childhood hobby, so lead with something else.
Another common way people start cover letters:
I recently came across your job posting on your company website for the “Full-Stack Web Developer” position. After reviewing the details of the position I found that the requirements necessary and my experience could be a great fit if given the opportunity.
This doesn’t tell me anything at all. It’s even less interesting than why you started programming – you’re just telling me you’re applying for a job. I knew that already. You think you fulfil the requirements of the position – well, of course you do!
There’s no need to give us your complete life history. One applicant included this on their CV:
Drove dump Truck, operated machinery, all manner of physical construction work.
What did they think they were adding by giving us this information? You don’t need to include every detail of every job you’ve ever done. You don’t want to distract from the overall story you’re telling.
Here’s an example of a cover letter that worked – it’s my own, from when I applied to work at Stack Exchange almost two years ago.
Looking back at this now, what’s interesting is that it’s not brilliant. At all. In fact it’s embarrasingly short – I clearly didn’t spend as long on it as I should have. However, it does demonstrate the points I’m making. The first sentence just gets straight to the point, saying who I am and what I’m all about. There’s a link there to all my open source code so anybody can go and look through that. It explains why I’m applying now, to this company, and why I’m excited at the opportunity.
That’s it! In part 1 of this blog post, I talked about breaking into the “cycle of awesome” by building awesome stuff. If you build awesome stuff, it’s a lot easier to tell people how awesome you are. You’re much more likely to be passionate and excited about stuff you’ve built yourself, so it’s actually easier to write your story – it’s much easier to write about things which you care about.
Now you can complete the cycle, and find your way to an awesome job. It’s not the easy way – there is no easy way to be awesome – but it is possible, and you can do it.
This release makes various enhancements to the Squiffy Editor. The number one request by far has been to add an option to change the font size - so that is now done!
It’s now easier to work on larger games. You can collapse sections and passages, so it’s easier to focus on just the one you’re currently editing. The section and passage lists at the top of the screen are now searchable.
You’ll find shortcuts to collapse and uncollapse all sections and passages on the new Tools tab. This also features new shortcut buttons allowing you to easily add new sections and passages. Let’s say you’ve written a paragraph of text and want to add a link to it. Now you can simply select the text you want to link, hit “Add section” or “Add passage”, and a new section or passage of that name will be created, with the text linked to it.
Squiffy is free and open source, and you can find both the compiler and editor on GitHub:
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.
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:
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?
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.
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:
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.
So I spent most of the next four years doing various things with Quest and interactive fiction:
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.
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
Squiffy 4 is now available. This release brings the editor to Windows, OS X and Linux, so you can now create and edit games offline.
Squiffy is a simple system for writing multiple-choice interactive fiction. It publishes to HTML so you can upload your game anywhere. The quickest way to see it in action is to check out the documentation, which has a load of live examples - you can see the code and the results in the same place, and play around by editing the examples in the ScratchPad.
With this release, you now have three options for using Squiffy:
The new desktop version of the Squiffy editor takes the web-based editor (created for Squiffy 3) and wraps it up using Electron. It’s exactly the same code, so all future improvements will be available in both the web and desktop versions.
What sort of future improvements? Well, we’re nearly at the end of my Squiffy Roadmap now, but this is just the beginning. Now we have a fairly simple editor across all platforms for what is still a fairly simple system, we can start to flesh out the features a bit. I’d like to add a graphical view showing how a game’s sections and passages connect to each other, and I’ve got various ideas for how the editor could assist you with building a game - making it a one-click operation to add new sections and passages, showing you which sections and passages are empty or missing, etc.
Both the Squiffy Compiler and Squiffy Editor are open source on GitHub:
All feedback, suggestions and pull requests are welcome!