by Arthur Camara
An opinionated guide to writing developer resumes
What was a formality less than a century ago is now the very first step to landing any interview: sending your resume.
This lengthy printed document has now become a PDF, a web page, a LinkedIn profile, a Stack Overflow Developer Story, a Youtube video, a Github profile, or some combination of these.
Resumes as we know them are doomed. More efficient forms of job application and assessment will eventually emerge. But we're not quite there yet. And since this has yet to happen (or should I say, since we, the developers and entrepreneurs, have yet to make it happen), my colleagues and I will continue to receive and evaluate developer resumes every week, from all corners of the globe.
Over the past several years, I've seen how ineffective most candidates are in trying to communicate their experience, technical skills, and potential through resumes.
This article is an up-to-date guide for developers who want to maximize the chances of getting an interview at cool companies and startups. It reflects my own opinions and views on do’s and don’ts.
I’ve made mistakes myself in the past. I’ve been learning quite a bit over the last few years, both from my own successes and from evaluating the resumes of others. Hopefully this guide will help others who want to get ahead in the game.
Let’s start by not rating ourselves as experts in Java and intermediate in C#, let’s drop Times New Roman, and let’s remind ourselves that there’s a lot more to be done than squashing the 4-page CV into a single page. Let’s purposefully forget to disclose our full address, social security number, and the contact information for our references.
TL;DR summary of this guide:
- What resumes should be about: experience, side projects, and education.
- Technical skills are overrated. How to effectively showcase your skills.
- Cover letters are overrated. How to effectively introduce yourself.
- Do not include irrelevant personal information. Not even your full name.
- A modern presentation is key: length, layout, photos, fonts, format.
- Bonus #1: Ultimate checklist before sending your next resume.
- Bonus #2: Simple resume template on Google Docs.
- Final words
What are resumes and what should you focus on?
Resumes are essentially what they've always been: letters of introduction and intent. Except that nobody's got time for long letters anymore, and most prefer to receive structured lists that are easy to skim.
The first rule is that you should always be truthful. Your next most important goal is to write a document that's easy to skim. If you work with web development, that should feel more or less natural to you. It's essentially what we optimize most consumer-driven web applications and sites for. People jump through pages, their eyes quickly sampling words. You should effectively optimize your resume for the same user behavior.
Your intent is implicit: you want to get an interview and eventually a job. Your introduction is pretty much everything you write on your resume, the evidence that you're well suited for the job.
As a developer, you should ideally focus on three things: Experience, Side Projects, and Education. With very rare exceptions, you must be able to produce strong cases for at least two of those items against any job you're applying for.
If you're applying for a tech lead position, showing you have great relevant experience and a strong base education could be good enough to land you an interview. If you're applying for a junior role and you still don't have much hands-on experience, your education credentials along with side projects will help you here.
If you can’t honestly produce strong cases for at least two of those for the desired position, you should either invest your time in improving them beforehand, or consider a position that would better suit your current situation.
Experience is the primary evidence that you’ve got what it takes to be successful at a certain job. Listing past roles isn’t mainly about showing you were employed in the past years, but rather about summarizing what you were specifically doing and how it has contributed to who you are today and your professional skills. Still, remember that your first goal is to make your resume easy to skim, so keep it on point.
Titles don’t matter so much in the startup scene, so keep them short and focus on your responsibilities instead. Write up a short paragraph or bullet points highlighting your main contributions to the business you were part of.
Something as simple as the following could be extremely efficient:
Feb/2015 — present: Software Developer, Telesoft — Seattle, WA
- Led the development and adoption of React for a dashboard web app.
- Full stack development using Node.js, Express, React, and MongoDB.
Nov/2013 — Jan/2015: Web Developer, Plasmid Inc. — Denver, CO
- Part of the front end development team of their AngularJS web app.
- Developed & maintained a reusable components repository.
- Developed & co-founded an online game store, sold to AB Games in 2012.
- Summer intern for Bong working with D3 visualizations, 12 weeks in 2011.
Notice in the example above that only the last 2 positions were described in some detail. If you have a lot of relevant experience in your career and want to mention it all, consider writing about only the latest 2 or 3 positions, listing the others in a “Previous Experience” section at the end.
(special note to new grads and juniors: the world understands if you don’t have much experience. DON’T fake it, and read the next section)
Apply the same principles from the Experience section here. Be brief, be you. Side projects are your chance to shine on the skills and technology stack you chose to use. It’s also a good chance to express entrepreneurship talent or interests.
Many developers think they must have an open source project to have a good resume. That’s not true. You could include personal projects that are not open source if they’re relevant. Just make sure you include things that show your potential and help you build up your case. Example:
Spice: change how a web page looks using voice commands
- User says things like "make background purple" and site styles change
- Chrome extension developed using vanillaJS and Wit.ai
RoboPizza: a slack bot for ordering pizza
- Slack bot developed using Go and Wit.ai
- Speakasso: web-based generative art based on speech or conversation.
- Bubbles.js: open source generator of PNG images of bubbles
Are some of your projects available online? Include links. Make sure they work. Are they open source? Include links if they’re on GitHub, and make sure you’re a significant contributor (please, don’t link to *.zip files or anything that needs to be downloaded).
Include projects because you’re proud of them and not simply to fill up this section. If you don’t have any side projects, that’s fine (provided you show experience). School projects are also relevant if they’re interesting and if you personally contributed significantly to their success. Speaking of which…
There’s no need to be too specific here. Stating the relevant degrees you have, along with the institution and graduation dates, is enough. As a general rule, degrees come in reverse chronological order, and only include what’s relevant. If you have a university degree, for instance, it’s not relevant to mention where you attended High School. Moreover, no one cares that much about your GPA, so don’t include it (unless, of course, the job description explicitly asks for it or if you just graduated and would like to demonstrate you did quite well).
Well known degrees and programs are fairly similar across institutions, so a one liner should be enough to summarize your studies at a high level:
2012 B.Sc. in Computer Science, University of Iowa
I do think you should include further educational details, however, if they are exceptionally interesting or relevant to the position. For instance, if you're applying for a data analyst position and your university thesis was about an innovative data mining technique, consider including a couple lines that describe your thesis, findings, or project.
2012 B.Sc. in Computer Science, University of Iowa
- Conducted a project on comparative analysis of 10 predictive data-mining techniques and authored 2 papers on the topic.
Bear in mind that building a strong case for education doesn’t necessarily mean formal education or university. There are awesome programs, bootcamps, and courses worth mentioning. For technical roles, it’s mostly important to show your Computer Science knowledge and understanding are strong.
Listing technical skills is overrated
We, developers, often think it’s a great idea to list all the technologies we’ve ever worked with or studied (or even heard of, in extreme cases) in a separate section, usually called “Skills” or “Technical Skills.” In most cases, that’s not necessary: there’s no point in listing each and every one of the languages and frameworks you’ve ever come across. Moreover, you should already have demonstrated your technical skills when describing your experience in past roles or projects.
However, I understand you might want to include a “Skills” section. If you feel strongly about it, the best way to list your skills is super simple. Just list them:
- React, Redux, ES6, Express, MongoDB, Sass, Webpack, Gulp, Git
Less is more here, so some tips to shorten your list are:
- Include only skills you are technically strong and knowledgeable in and that are somewhat relevant to the position.
- There’s no need to include redundant skills. For instance, I would expect someone who lists CSS3 to know CSS, so don’t include the latter. I’ve seen many resumes with super redundant lists of skills, like a candidate who included all of the following in a row: “HTML, DHTML, XHTML, HTML5.” I remember doing the same as that candidate when I was first looking for an internship, so I understand how tempting it might seem. In fact, it just creates clutter and makes it look like you’re both too inexperienced and just trying to impress with a long list of words.
- Developers are expected to be quite proficient computer users. Therefore, avoid listing basic computer/software usage skills like “Microsoft Office package,” “Windows/Mac/Linux,” or “Adobe suite.”
Years of experience don't mean anything
IMHO, reporting the number of years of experience in each language or framework is irrelevant, meaningless and hardly accurate.
It’s quite hard to measure usage technologies over time. To me, usually, the number of years simply translates to “how long ago the applicant used that language/framework for the first time,” which doesn’t reflect proficiency or experience.
For instance, I started using PHP when I was 16, and it was one of the main languages I used for my freelancing websites in college. However, I never pursued more experience in PHP later in my career, and my knowledge of its ecosystem is now definitely outdated. Could I then state that I have 10 years of PHP experience? No way. If you just want to demonstrate experience, use your past work and projects to showcase that. Much better. This skills section should, at most, reflect your current professional focus.
Don't ever rate yourself as an expert.
Most people I consider experts in certain things wouldn't explicitly write that they're experts on their resumes. Their experience and projects speak for themselves. They understand learning is a continuous process and they keep learning every day. The word "expert" simply sounds off.
Don’t rate yourself as beginner, either.
Writing “C++ (beginner level)” doesn’t do you any good whatsoever. If that’s your case and you're just starting to learn something, you probably shouldn't be including that item in your list of technical skills just yet (who's never done that? ¯\_(ツ)_/¯). When you feel comfortable enough to work with it, then you can go ahead and tell the world about your new super power.
Forget progress bars.
Progress bars are just so wrong! Having a full progress bar means you know everything there is to know about a subject, which I doubt anyone does.
Having a partially filled bar means you know exactly what's missing for you to know all there is to know about a subject, which I also doubt.
You don't have to try to turn subjective measures into comparative charts. Do not include progress bars on your resumes. Do not include them on your websites. Do not include them anywhere.
If you still want to show you're better in Go than Python:
An at least acceptable way I’ve seen of showing different levels of proficiency involves splitting your list of skills into two categories: Strong and Knowledgeable. That's a bit better: you're not explicitly considering yourself an expert nor including technologies you are not familiar and comfortable with. Keep in mind you should be honest and not consider yourself knowledgeable in technologies you simply read about on Hacker News. A good example would come along these lines:
Strong: React, ES6, Express, Sass, Gulp, Git
Knowledgeable: Redux, MongoDB, Webpack, LESS, Angular
Cover letters are overrated.
Your intent is clear when you apply for a job: you want to get the job. So there's no need to write a letter full of objectives and nice words about yourself. For the most part, it seems like people don't read much of them anyways.
How to introduce yourself instead
If you strongly want to write a about yourself, consider writing a paragraph that describes you at the top of your resume — a short "About" section.
If you still want to write a letter or if the job description requires it
Sometimes job descriptions or automated application systems require us to submit a cover letter. If that's the case, keep it short and try to drop the overly formal language. Just be you. There's no need for "Dear Sir or Madam"s or "To whom it may concern"s.
Show that you’re smart, that you can get things done, that you’re well suited for the job, and that you’ll fit well with the company’s culture.
When I think cover letters are a must
If you're applying for a position that doesn't even exist or isn't publicly open, you should definitely write a cover letter. That's when your intent should be well stated, because you not only need to show the company how your hire would be beneficial to them, but also how the new job you're proposing will bring them great value.
By the way, there’s nothing wrong in applying for positions that aren’t open. If you have the drive and think you’ve got what it takes, do it. Show the problem and propose the solution, which ideally will lead them to tailor a job specifically for you. Probably your chances of getting an interview this way are smaller, but some people really appreciate the bravery.
Your marital status isn’t relevant. Neither is your address. Or your birthday.
In the past, resumes used to include physical attributes, like height, weight, gender, ethnicity, and a bunch of other personal information. We dropped those for a good reason: they’re irrelevant.
However, I often find lots of personal information in resumes I receive — information that adds no value to assessing one’s technical abilities or making a decision on whether to proceed with an interview. Why would I need to know your government issued ID number in order to set up an initial chat and interview? How would your marital status help you build evidence that you're a good developer? And why should you disclose your apartment number? I would recommend removing all of the following pieces of information from your resume:
- Full name (some people have many names: first and last are just fine)
- Age or Birthday
- Marital / relationship status
- Sexual orientation
- Social Security Number
- Driver's license (how does being a driver help you as a developer?)
- Full address (city and state/country are fine if you want to give a general idea)
- Immigration Status
- Languages you speak*
Every word on your resume takes up valuable space, and you shouldn't waste it with things that clearly make no difference at an initial resume assessment. Use common sense and for each word you add, ask yourself: does this piece of information help the employer decide whether or not to call me for an interview?
Immigration status shouldn't be included either
It seems more common than ever for developers to seek work in different countries. Many of my friends are sometimes unsure on whether to disclose their citizenship or specific immigration status in their resume (e.g: valid work permit, permanent resident, green card holder, work visa needed).
On one hand, people who are citizens and/or have the proper authorization to work in the country they live in sometimes report that they feel like their name is "too foreign" and that employers might, therefore, reject them even before interviewing if they think they might need a work visa. Thus, they prefer to include their citizenship or immigration status just to be safe.
On the other hand, developers who are willing to relocate or work remotely wonder if disclosing their immigration status and explicitly mentioning that they'd need a work permit would lower their chances of getting an interview in the first place.
I personally think that developers should not include their immigration status in their resume.
First of all, that information brings no value in terms of assessing technical abilities. Tech companies are usually just interested in finding talent at this initial stage. If your professional skills spark interest and they’d like to ask any questions (including whether you have the authorization to work), they’ll give you a call or invite you for a first interview. That’s exactly what interviews are for — to ask questions and give a chance for both parties to learn more about one another.
Secondly, depending on how you share that information, it might look like the only reason why you're applying for the job is to get a work visa. I've seen some applicants share some very specific and personal details on their resume, like their immigration case numbers or current visa expiration date. Those obviously have absolutely nothing to do with what the focus of the resume should be.
Finally, you could always just mention you’re looking for relocation or remote work without unnecessarily disclosing personal information. Details will certainly be dealt with later at an interview stage if you advance. In the US and Canada, companies will ask whether you have authorization to legally work anyways, and they aren’t legally allowed to ask your nationality, immigration status, or family ancestry during your interviews. So why share them on your resume?
Languages you speak*
There might be some controversy about this, but the truth is that the languages that will matter the most for your job are the local language you will use at work (which you presumably speak fluently if you’re applying for the job) and very frequently English (which most of the developer-focused documentation and resources are written in). If you’re applying for a job in France, listing that you also speak Japanese and Finnish adds very little value to your resume. It’s definitely an interesting fact about you, but you will have other chances of telling your soon-to-be colleagues about this. I can see some exceptions to this advice, but as a rule of thumb, it’s not relevant for developer roles.
Other fun facts and hobbies*
Some people like to include cool fun facts about them and hobbies. While those are definitely super cool points, they are ultimately not necessary. I know, you might be thinking I’m the most boring guy in the room, but bear with me for a bit. No one will invite you to an interview because you like photography, snowboarding, or skydiving.
Special Note*: If you feel very strongly about including these last two points, just be brief. I understand it could bring a human touch and add a bit of personality to your resume. Plus, in case you move forward to an interview, this info could be useful for ice-breaking conversation.
Presentation doesn't matter. Except it does.
Presentation is about content, design, and formatting. As much as I hear some saying that a resume should be free of any formatting, and that presentation doesn’t really matter, I still think that a well-designed document will definitely stand out and give a better first impression.
Should my resume be only one page long?
One page? Two pages? How many pages? Resumes should be as long as they need to be. You should try to be concise, obviously, but if even then your resume uses a couple pages, it's totally fine.
In an attempt to comply with the “one-page rule” I’ve seen many applicants make fonts tiny, margins smaller and remove most of the spacing between lines and paragraphs, squashing all the content into a single page. That’s not the point, and it doesn’t make your resume easier to read or skim. In fact, it does the exact opposite.
Instead, change the content, summarize things and make sure you’re on point. Worry less about the number of pages and more about your content.
Can I add a photo of my face?
This is certainly a controversial topic, but personally speaking, I see no problem with it. Profile photos are everywhere on the web and you probably have them on LinkedIn, Github and a bunch of other sites. I don't see why you shouldn't be supposed to add them to your resume if you want to. Resumes with good-quality photos bring a human connection and empathy that might even give you an advantage.
Some say it's not professional, but I can't see what's so unprofessional about showing your face. Others say hiring managers could judge based on looks. To be honest, I prefer to assume good faith and believe that employers are looking for talent and, especially for developer roles, no one cares about looks. A smile brings people together and doesn't cause any harm IMHO.
Obviously, it's also totally acceptable not to add a photo as well and no job application should require one.
Choose nice fonts
You might not be a professional designer or have a degree on typography, but you should do your best to make your resume readable, clean, nice looking and modern. Commonly used fonts that are outdated like Times New Roman (or worse, Comic Sans) make your resume look super tacky.
Layout and design
As long as your resume is clean, a bit of color and layout creativity is welcome. Just don't overdo it.
Bonus #1: Ultimate resume checklist for developers
(check your next resume against this checklist)
✔ Wrote the truth.
✔ Kept resume concise and easy to skim.
✔ Built strong cases for at least two of the following considering the job position:
→ Side Projects
✔ Kept experience on point, listing only a few recent relevant positions, briefly including roles and skills.
✔ Kept side projects on point, listing only a few important and relevant projects that I contributed heavily to, including my roles and skills.
✔ Briefly noted my educational credentials, without including GPAs.
✔ If technical skills were listed, did not include:
⨯ redundant or irrelevant skills
⨯ skills that I'm not familiar with or knowledgeable in
✔ Did not list my programming skills using:
⨯ progress bars.
⨯ various levels of proficiency.
⨯ years of experience.
✔ Kept it simple, stating only the necessary contact information, and did not exceed a few words if introducing myself.
✔ Did not include any of the following personal information:
⨯ full name if too long
⨯ age or birthday
⨯ marital or relationship status
⨯ sexual orientation
⨯ social security number
⨯ driver's license
⨯ full address
⨯ immigration status
✔ Layout is simple and beautiful.
✔ If there's a picture: it's nice, professional, and good quality. Not required.
✔ There is plenty of white space and the text is not cluttered. It's easy to read my resume. It just flows ?
✔ Used nice and modern fonts.
✔ Used nice and pleasant colors.
Bonus #2: Simple resume template on Google Docs
Thanks for reading this guide. I hope it's helpful and makes you excited about trying to showcase your experience and abilities in the best way possible. If you disagree with any of my suggestions, feel free to reach out to me or leave your response below. I'll be happy to debate ideas, discuss different points of view, and ultimately build a constructive conversation around this topic that may help many many other developers in our large community.
If you'd like to learn some more, read about how my friend and colleague Benny got his job at a tech company.
Finally, if you would like to apply to some of the awesome positions we have at Axiom Zen and think you’re a good fit, we’re hiring and would absolutely love to hear from you. Feel free to apply or get in touch (and let us know you found us from this article on Medium)! It will be super exciting to go through your cool and revamped resume.