How to write a good tech job listing

5 December 2016

This was a webinar given at Stack Overflow on 5th December 2016.

How to be awesome

25 May 2016

This talk was given at the At The Frontend conference in Copenhagen on 25th May 2016.

How to Be Awesome (Part 2)

24 November 2015

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.

Write for humans

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.

Who are you?

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.

What we’re looking for

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”.

Be interesting

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.

Don’t waste time on things we already know

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!

Don’t waste time on things we don’t care about

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.

An example

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.

Cover letter

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.

Completing the cycle of awesome

The cycle of awesome

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.

Squiffy 5 - an improved editing experience

14 November 2015

Squiffy 5 is now available - you can use it in your web browser, or download it for Windows, OS X and Linux.

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!

There’s also improved syntax highlighting. Section and passage headers are now highlighted, and in-line JavaScript code gets its own highlighting.

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 5

Try it out… Squiffy works in your web browser without downloading anything, or you can download versions for Windows, OS X and Linux.

Squiffy is free and open source, and you can find both the compiler and editor on GitHub:

How to Be Awesome (Part 1)

29 September 2015

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 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.

The cycle of suck

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

Text Adventures

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.


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

All Posts