This is a chapter from Your First Year in Code, a book of practical how-to and advice for new developers. If you’re considering a career in software, check it out. It’s a free download at https://leanpub.com/firstyearincode.
Are you a coder, programmer, developer, engineer, architect or something else?
My first job was an underage, under-the-table weekend gig at a pizza parlor. I’d show up at the local strip mall early Saturday morning, stash my bike, and clock in. For me, the work was grueling. I would haul 50-pound bags of flour and 10-gallon buckets of water to a giant stand mixer, and once it finished spinning I’d lift armfuls of incredibly heavy dough to a metal table where I’d cut and oil portions weighed for each size of pizza that the shop sold. By noon, I’d be exhausted. I’d clock out and head home. And once a month I’d pick up an envelope with about $100 cash in it. It was an awesome first job.
My official job title was Dough Boy (yes, like the Pillsbury mascot). But “Dough Boy” isn’t very impressive on a resume, so for a while I listed my job title as “Dough Chef.” A teenager’s got to have some dignity, right? In the end, I don’t think anybody cared.
Little did I know, that was the least problematic job title I would ever have.
I became a programmer several years ago. In 21st-century America — especially in the tech sector — job titles are surprisingly fluid. I haven’t had an employer dedicate any real thought to my job title for a long time. In fact, my first employer in the industry told me I could put whatever I wanted on my resume and if anyone called she’d back me up. Naturally, I was tempted to write “Senior Department Lead QA III Technical Architect”, when in fact I was just writing Selenium tests in a cubicle. Go figure.
I’ve often puzzled over the plethora of job titles I now fit under. I write web applications for a startup, so I do something at every level of the stack, from SQL Server at the bottom to CSS at the top. There are a lot of things I could call myself: coder, programmer, engineer, developer, boffin. In keeping with my pizza-infused legacy, I could even call myself a Software Boy. So what am I?
Technical Twitter friends! When someone asks you what you do for a living, what do you say? "I am a ... ___" <fill in the blank> or <other>— Jen Looper (@jenlooper) April 18, 2017
I’ve discovered that I’m far from the only one who has this question. And there are a lot of variables to consider, so it’s not an easy one. In some countries it’s illegal to call yourself an engineer unless you have certain certifications. In some cultures, general words (like “consultant”) may be preferred over technical jargon (like “application developer”). And in the United States, where I live, small differences in a job title can make a significant difference in salary.
This is my attempt to aggregate all the data I can find about the swath of job titles that apply to people who code. I’ve gathered average salary information and definitions for several job titles that might apply (but surely not all of them). If you see a significant omission or error, please highlight it and leave a comment.
I’ve ignored titles like hacker, ninja, and rockstar because they’re frivolous and meaningless. In fact, I’ve only ever seen them used by exceptionally incompetent recruiters.
I’ve got salary information from the U.S. Bureau of Labor Statistics (BLS), Glassdoor, PayScale, and Indeed. Definitions come from the BLS or Wikipedia where available. Where neither has a definition, I’ve searched out the most succinct, authoritative source I can find.
This data is categorized by job title. Job titles are ordered by a subjective estimate of their complexity, from least complex to most complex. Data was gathered in April 2017.
Each entry has a definition, national (USA) median salary data from each source, an average of the salary data points, and a variability assessment (how wide the range of salary estimates is). Where a specific job title or equivalent was not found in a database, “N/D” is used.
Note: PayScale.com uses the words “average” and “median” interchangeably. Do they even math? Glassdoor and Indeed don’t offer a median at all, preferring a much less useful average. In a perfect world everyone would use medians for data sets like this, since they may or may not follow a normal curve.
[A] person who writes computer code; a computer programmer. ~Dictionary.com
Average: N/D. I won’t insult your intelligence by averaging a single data point.
Notes: I’d usually avoid a site with so little street cred as Dictionary.com, but definitions for this word are surprisingly scarce.
Create, modify, and test the code, forms, and script that allow computer applications to run. Work from specifications drawn up by software developers or other individuals.
Variability: Medium. Range of ~$20k.
[A] person or company that develops computer software.
Variability: N/D. Range of ~$15k defined by only two data points.
Notes: Several people have pointed out that the term “developer” could refer to someone in real estate as well as someone in software, so it’s hard to know if these results are meaningful at all.
Front End Developer
A front-end developer is a type of computer programmer that codes and creates the visual front-end elements of a software, application or website. He or she creates computing components/features that are directly viewable and accessible by the end user or client.
Variability: Extreme. Range of ~$35k.
Design, create, and modify Web sites. Analyze user needs to implement Web site content, graphics, performance, and capacity.
Variability: Low. Range of ~$10k.
Full Stack Developer
~George Fekete on SitePoint
Notes: There’s significant doubt as to whether this is an attainable job title, insofar as it refers to being an expert in several different layers of web technology. Given that Indeed is the only site to cough up a salary value, it seems that the industry shies away from it, whether for this reason or another one.
Develop, create, and modify general computer applications software or specialized utility programs. Analyze user needs and develop software solutions.
Variability: Extreme. Range of ~$30k.
A software engineer is a person who applies the principles of software engineering to the design, development, maintenance, testing, and evaluation of the software and systems that make computers or anything containing software work.
Variability: Medium. Range of ~$20k.
Notes: In classic Wikipedia style, this definition is bafflingly circular. However, if you ignore the “principles of software engineering” part, the definition becomes useful.
This concludes a nearly-complete list of job titles that apply to regular devs. However, I’m going to go a bit further and see what “Junior”, “Senior” and “Architect” do to a job title, even though these terms lie outside the mainstream.
Junior Software Developer
An entry-level engineer with limited exposure to development and development practice who will need strong mentoring and support to grow their skills.
~James Turnbull on Kartar.Net
Variability: Very low. Range of <$5k.
Senior Software Developer
…either someone with a deep specialised knowledge beyond their peers or someone who leads or instructs other developers.
~Robert Rees on The Guardian
Variability: Medium. Range of ~$20k.
A software architect is a software expert who makes high-level design choices and dictates technical standards, including software coding standards, tools, and platforms. ~Wikipedia
Variability: Very low. Range of <$5k.
Job titles by salary from lowest to highest are: Junior Software Developer, Web Developer , Programmer , Front End Developer, Developer, Software Developer , Software Engineer, Senior Software Developer, and Software Architect (Coder and Full Stack Developer were lacking data). Since the BLS likely has the largest and least-biased data set, I’ve bolded the titles for which BLS data was available. Incidentally, the ordering of the list holds when BLS data is considered alone.
This data should be taken with a grain of salt for several reasons:
- I don’t have access to the original data sets. I don’t know the size of those data sets or the algorithms used to calculate their average/median. I don’t have access to demographics data, so important variables like race, gender, orientation and class aren’t considered here. A data set of known size and diversity would yield better analysis.
- Glassdoor and Indeed are fundamentally job boards, not public data sets. Their data is based on volunteered information: self-reported salaries and job postings. This makes it prone to non-response bias, among other forms of survey bias.
- PayScale, Glassdoor and Indeed are private companies and their data isn’t open source. Any private company is accountable to its shareholders, not the general public, and may therefore be incentivized to gather and calculate data in a way that increases the value of their product to customers. For example, employers posting jobs on Indeed may prefer the site to report lower average salary data, which would make their salary offers seem more competitive. Indeed could do this by focusing its marketing on regions with low cost of living and low average salary, which would skew its self-reported salary data toward the lower end of the scale. I’m not saying they do this, but it would be legal and profitable for them to do so.
The difference in average salary between a Developer and a Software Developer is about $3k, which probably is not statistically significant. On the other hand, the difference between a Software Developer and a Software Engineer is $6k, which might be meaningful. The biggest leap in salary is from Software Engineer to Senior Software Developer, with a difference of about $15.5k.
There are several more slight variations in wording that I could have looked into. A Senior Software Engineer, for example, probably makes a little bit more than a Senior Software Developer, and a Senior or Chief Software Architect surely makes more than a Software Architect. But this should be enough to provide insight into a general trend.
Enough with the cash: what’s the qualitative difference between these roles?
First of all, some titles to avoid (or at least approach with caution):
- Coder had the lowest Glassdoor salary of any position I looked at, even lower than Junior Software Developer. It’s hard to argue in its favor. First of all, it’s much too brazen — it’s like a construction worker calling himself a Nailer or a doctor calling herself a Scalpeler. “Code” is better as a noun than a verb; it’s a tool you use to achieve a goal. If a candidate for a position at my company billed themself as a Coder, it would give me the impression that they like to be told what to do and how to do it — that is, they’ll write the code, but they won’t make decisions, interact with people, or suggest ways to improve. That sounds like an unfulfilling way to build software. What’s worse, an employer who creates a job posting for a Coder probably isn’t looking for someone who engineers elegant solutions to complex problems — they probably have only a shallow understanding of what software is, and want to hire the cheapest person they can find to “just build a really simple app.”
- (Computer) Programmer is a term that’s gone the way of the dinosaur, along with the stereotype of the shirt-and-tie-wearing geek in an ivory tower. All the word really means is someone who knows a programming language. This used to be a rare skill (and only moderately in demand). But modern software construction demands more than just syntax and vocabulary — the essential domains of “programming” — because modern software is more than just a command-line interface and a set of database files on a floppy disk. Apps have to be beautiful, accessible, user-friendly, fast, and above all, competitive. The word “Programmer” doesn’t evoke any of that.
- Developer is, as previously noted, an unnecessarily ambiguous title. If your job involves building condominiums, you’re reading the wrong article. If your job involves computer code, you should call yourself a Software Developer. Anything built with code is software, so this is more about clarification than qualification. And, according to the internet, it raises your market value by about $2.5k.
The remaining titles differ semantically, but not in ways that necessarily make any of them superior. You should determine which one best describes your career trajectory:
- Software Developer and Software Engineer are, by many accounts, equivalent. Both mean that a person knows the best practices in their field, is comfortable with multiple technologies, and has transferable skills that allow them to recognize and write good code in any language. These titles also indicate the ability to make well-reasoned decisions about software design and implementation, and a willingness to participate in the software lifecycle above and beyond writing code. Developers and engineers are creative, thoughtful, knowledgeable people who deserve a place at the table in every discussion about a product. “Engineer” connotes more seniority and preciseness than “Developer”, so younger developers run the risk of sounding pretentious if they bill themselves as Engineers. Considering that the average salary difference between them is only about $6k, you’re probably okay to go with your gut on this one.
- Junior and Senior are prefixes that make a big difference in salary. Generally speaking, you’re a Junior Developer for your first few years or so in the industry, and you’re not a Senior Developer until several years after that. But most developers agree that graduating from Junior Developer to Developer and from Developer to Senior Developer has less to do with the length of your career and more to do with your humility, leadership, versatility, and experience (especially the number of catastrophic failures under your belt).
- Software Architect is the most highly-paid job title on this list, and with good reason. It represents a high standard and has a stable definition industry-wide. The Software Architect is the ultimate technological resource — the person who’s been there and done that so many times that they can practically see the future. At the company where I work, the Enterprise Architect is equal in status to the CTO. It’s a position of extreme responsibility and respect. You probably already know if this is you.
Embarrassingly enough, my own resume — written long before I began research on this topic — says I’m a Full Stack Developer. I’ll be fixing that right away.
I hope the data I’ve provided is valuable. If you’re still determining your own job title, I wish you the best of luck.
Bibliography & Further Reading
- The role of a Senior Developer, by Matt Briggs. This is an excellent take on the skill metrics that various levels of developers should measure themselves against, rather than composing job titles based on years of experience.
- When should you call yourself a senior developer? on Stack Exchange. A few different takes on what makes a “senior” versus “junior” developer.
- What’s the difference between Entry Level/Jr/Sr developers? on Stack Exchange. Some worthy additions to the above.
- What does it mean to be a senior developer? on The Guardian. What an above-average set of qualifications looks like.
- Programmer, Developer, Engineer: What’s in a name? by Chris Lema. A brief (and fairly representative) interpretation of the three main nouns in development job titles.
- Developer, Programmer or Engineer? on Stack Overflow Talent. Some survey data and well-considered quotes from industry insiders.
- Job Titles in the Web Industry, by Chris Coyier on CSS-Tricks. I think the distinctions here may be a little too rigid, but to ignore Coyier’s take on the subject would be a significant omission. At the very least, this is a good reference on what various titles should mean.
- What Does a Software Architect Do? by Yegor Bugayenko. This article proposes that being a software architect isn’t just about smarts or experience, it’s about accountability and responsibility.
- The Role of Software Architect, by Bredemeyer Consulting. Frames the architect as part technologist, part business strategist — meaning that the sharpest dev in the company may or may not be a good fit for the job.