Posted July 16, 2009

This is the first installment of a series on how to get a job at Fog Creek Software (and other selective software companies).

Disclaimer: This article is based on my own personal experiences and preferences in hiring and does not necessarily reflect Fog Creek's official policies. As such, it is meant as a helpful guide. Reading this article will not entitle you to a job. And of course: Fog Creek Software, Inc. does not discriminate in employment matters on the basis of race, color, religion, gender, national origin, age, military service eligibility, veteran status, sexual orientation, marital status, disability, or any other protected class.

My last two articles discussed, if somewhat briefly, why a cover letter is important in our hiring process at Fog Creek. The intent of those articles was to provide a peek into our hiring process; an idea of what we look for and why we find it useful when screening applications. I was surprised at the negativity of some of the responses. Perhaps I was too brief. In the interests of providing constructive criticism and some guidance to all of the commentors that [voiced uncertainty] (http://www.reddit.com/r/programming/comments/8yn6h/reddits_entitlement_comple x/c0aujqy) about what to write in a cover letter, I'd like to start a series called "How to Get Hired at Fog Creek (and Other Selective Software Companies)".

This is part one of the series: Rmand Cover Letters.

As I've mentioned several times now, our rmcreening process is broken down into seven areas, as outlined in Joel's article: Passion, Pickiness, English, Brains, Selectivity, Hardcore, and Diversity. I'll talk about each, and what candidates can do to best demonstrate themselves in their applications.

Also, before I begin, I have to say that I wouldn't be talking about any of this if I thought this information would allow people to game the system. I've spent almost four years using these guidelines to evaluate applicants, and I've come to believe that they probably are as objective as you can get with the information available at the beginning of an application process. To game the system, a candidate would have to outright lie about many facets of their background and experience. The only real problem I see with it is that a strong candidate who does not submit a quality application may be passed over. Hopefully this will help.

General Guidelines

Résumé: Your résumé should be a concise summary of who you are as an applicant. It

should have the following sections:

Experience: List each of your past, relevant jobs. Include the company name, your title, your start and end dates, and a short list of responsibilities and accomplishments. Some people say that you should write in a particular style for this section. Just make sure you don't get too choppy. Full English sentences are almost always better.

Education: For each college or university you've attended, list the school's name, location, dates of graduation or expected graduation, major, relevant minors, and GPA. Don't include high school.

Extras: Software developers often list their competencies in various languages. While we don't screen for specific languages, it can be useful. Just make sure you're honest; if you say you are an expert in C, we'll expect you to show it in the interviews. Other extras might include such details as honors received, activities you participate in, or groups that you belong to. They may not affect a hiring decision much, but it'll help me get an idea of who you are.

Try to keep your rmo one page. If you have a lot of experience, going to two pages is acceptable. Three or more pages is overkill, and it usually means you're including things on your rmhat would be better off in your cover letter.

Cover Letter

Your cover letter is where you round out your application and fill in any holes that might be missing on your rmAt the very least, it should explain which position you're applying for, why you're applying for it, and why you would be a good fit. You shouldn't suck up; instead, take the opportunity to clarify and elaborate on yourself as a candidate. I'll talk more about specifics below.

Application

If you're submitting your application via email, your cover letter should be the body of the email, with your rms an attachment. I personally don't have a problem with receiving rmas Word documents, but some people do. If possible, send a PDF version. It's more universal, doesn't require that the recipient has the latest version of Office, and generally looks more professional. A link to a well-formatted HTML version is also OK, just don't attach an HTML file to an email.

Specific Criteria

We screen applications using the seven guidelines below. Generally, you need to fulfill five of the seven to pass the screening, but we provide plenty of latitude for applicants who show they are smart and get things done. In the four years I've been involved in hiring, I can only think of one or two applicants that have met all seven, so don't worry if you are missing a couple.

Passion

For me, passion is far and away the most important attribute a candidate can show. Every single developer at Fog Creek is immensely passionate about making software. Almost everyone is working on a side-project or two, learning new languages, contributing to StackOverflow. I want to see that same sort of passion from candidates. This is probably where the cover letter is most beneficial. Use it as an opportunity to brag about what you've done, especially about things you did outside of work or school. Open source software, Flash games, your own blog software, anything. What if you were too busy at work to do side projects? Then tell me what had you so engrossed at work.

Besides showing me that you're passionate about software, a good set of side projects show me that you know what you're doing, especially for younger, less experienced candidates. A long running side project is a great way to learn about making real software. Most college and internship projects are too short to really learn about the full process of creating software. Write something, then spend at least a year maintaining and improving it. Even better, get other people to use it, fix bugs, and keep your users happy and coming back.

Pickiness

This is the other aspect where a well-written cover letter is really the only way to show that you're being picky about which companies you're applying to. We're not looking for you to suck up to us; in fact, sucking up is considered a negative. We just want to know that if we go through all the trouble of spending numerous developer hours screening and interviewing you, and thousands of dollars flying you out and putting you up in a nice Manhattan hotel, that you'll be likely to take the job if we offer you one. Hiring is expensive, and screening for pickiness helps us make sure that those dollars are spent most effectively.

The easiest way to show that you're selective about who you apply to is to tell us a little bit about why you're applying. What about the company makes you want to work there? Is there a particular product that interests you, something about the company culture that makes you think it's the right place for you? Don't exaggerate; "I want to work for your company because it is the best company ever" will not get bonus points. Just be honest. I'm genuinely interested in why you're applying. Also, do some research on the company. I don't expect people to have read the entire Joel on Software archives, but you should have a basic idea of what products a company makes before applying.

My previous articles got some push-back on this point. Some people told me that for them, a job is just a job, but that shouldn't be grounds for screening them out. Personally, I disagree. If you want to work for selective companies, it has to be about more than just the paycheck.

English

A lot of software development is about communication. We want to hire candidates with strong communication skills, specifically in English. The easiest way to score points here is to make sure your cover letter is written well. Proof-read it a few times, then get a friend to read it over. A well- written cover letter stands out, but a poorly written one stands out even more. Too many errors and you'll be immediately disqualified. There's nothing worse than getting an application that says "Great comunication skills".

Brains

You've got to be smart. The easiest way to show off your brains is to have had good grades in school. Just put your GPA on your resume and you're done. Good work!

Of course, that's not the only way to demonstrate your intelligence. I know many incredibly smart people who just didn't do well in school. Maybe it just wasn't their thing, or they were working two jobs and didn't have time, or they dropped out to start their own company. If that's you, then you'll have to show me how bright you are. Do you solve really hard problems on a regular basis at work? Tell me about it. Did you apply to MENSA for the fun of it and get in? Impressive. Hold the record for creating the Sunday crossword puzzle with the fewest black squares? Awesome. Exceptional standardized test scores will even do in a pinch (though that might not be as widely accepted).

Selectivity

This is where we get lazy. See, we figure that if you've gotten into other selective institutions, then you're probably a pretty good applicant. It means you've been approved by a similar process. Your rms all you really need here. Just make sure you have an "Education" section. Even if you didn't finish college, the fact that you got in can only help.

Hardcore

What I mean by hardcore is that you've worked with a difficult technology, something that not every Bob, George, and Davie could grasp. Lower-level technologies are usually hardcore: things like significant experience in assembly, writing a graphics engine in C++, optimizing JVM load times in C. New technologies also count as hardcore. At one point Python and Ruby would have qualified. Now, Haskell and Erlang make the cut. (And of course, Lisp is always hardcore.) Usually the experience section of your rmill cover this. A small side project or two aren't really enough to count (though you should still do them); you need several years' experience. This can be difficult for recent graduates, but remember, you don't need every one of these criteria.

Diversity

Now, before I go and get myself in trouble, I want to make it clear that I'm not talking about the usual definition of diversity that has to do with inherent characteristics of who you are. What we are looking for here is diveristy of experience. Software development, at all levels, is about intense problem solving. Having a team with a diverse background of experience means having a team with more points of view. Usually, the "Experience" section of your resume will be enough to fulfill this, though sometimes an applicant's extracurriculars will make a difference. Just show me that you're a well-rounded person.

Summary

Remember, you don't need to hit all seven of these, so don't try to make things up just to fulfill one area. Spend time on your strong suits. Better to meet four really well than stretch the truth to make five.

Of course, not all companies use this particular screening process. Some may not even look at your cover letter. But spending the time to carefully craft your application will be well worth the effort either way. I find that the process of writing my cover letter helps me improve my rmand vice versa. For the companies that do read cover letters, you'll have a leg up, and for those that do not, having one certainly won't hurt you.

Update: The second and third articles in the series is up!