Posted on 16 mins read

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?

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 let me know.

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.

Sources

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.

Data

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.

Coder

[A] person who writes computer code; a computer programmer. ~Dictionary.com

BLS: N/D
Glassdoor: $40,000
Indeed: N/D
PayScale: N/D

Average: N/D. I won’t insult your intelligence by averaging a single data point.
Variability: N/D.

Notes: I’d usually avoid a site with so little street cred as Dictionary.com, but definitions for this word are surprisingly scarce.

Programmer

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

BLS: $79,840
Glassdoor: $65,806
Indeed: $74,832
PayScale: $60,842

Average: $70,330
Variability: Medium. Range of ~$20k.

Developer

[A] person or company that develops computer software.
~Merriam-Webster

BLS: N/D
Glassdoor: $75,441
Indeed: $91,730
PayScale: N/D

Average: $83,585.50
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.
~Techopedia

BLS: N/D
Glassdoor: $70,000
Indeed: $102,258
PayScale: $67,743

Average: $80,000.33
Variability: Extreme. Range of ~$35k.

Web Developer

Design, create, and modify Web sites. Analyze user needs to implement Web site content, graphics, performance, and capacity.
~BLS

BLS: $66,130
Glassdoor: $66,238
Indeed: $77,812
PayScale: $57,702

Average: $66,970.50
Variability: Low. Range of ~$10k.

Full Stack Developer

The term full-stack means developers who are comfortable working with both back-end and front-end technologies. To be more specific, it means that the developer can work with databases, PHP, HTML, CSS, JavaScript and everything in between, also, venturing as far as converting Photoshop designs to front-end code.
~George Fekete on SitePoint

BLS: N/D
Glassdoor: N/D
Indeed: $110,796
PayScale: N/D

Average: N/D.
Variability: N/D.

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.

Software Developer

Develop, create, and modify general computer applications software or specialized utility programs. Analyze user needs and develop software solutions.
~BLS

BLS: $100,080
Glassdoor: $85,000
Indeed: $90,056
PayScale: $69,083

Average: $86,054.75
Variability: Extreme. Range of ~$30k.

Software Engineer

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

BLS: N/D
Glassdoor: $95,195
Indeed: $100,532
PayScale: $80,825

Average: $92,184
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

BLS: N/D
Glassdoor: $60,000
Indeed: $65,540
PayScale: $57,607

Average: $61,049
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

BLS: N/D
Glassdoor: $120,000
Indeed: $103,594
PayScale: $99,935

Average: $107,843
Variability: Medium. Range of ~$20k.

Software Architect

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

BLS: N/D
Glassdoor: $118,593
Indeed: $120,513
PayScale: $120,053

Average: $119,719.67
Variability: Very low. Range of <$5k.

Analysis

Salary

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.

Definition

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.”
  • Full Stack Developer seems to beg the question, “but what are you good at?” As I’ve mentioned, people tend to be incredulous of a candidate who claims to be an expert at every level of the stack. There’s simply no way a normal person can keep up with everything. And knowing a single technology at each layer (say, JavaScript, REST, ASP.NET and SQL Server) probably doesn’t cut it. Sure, those are the technologies in your stack, but someone else’s stack may consist of Dart, Falcor, Python and Couchbase. You’re not a Full Stack Developer where they’re concerned. At best you’re a regular Developer who’s willing to learn some new tech.
  • (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.
  • Front End Developer is a very volatile title. Not only does it have the highest salary variability of all the job titles researched, but anecdotally I’ve heard it defined in contradictory ways. For some people, Front End Developer refers to a person who knows HTML and CSS but not JavaScript; for others, a Front End Developer is someone who has a deep knowledge of JavaScript and its most popular frameworks and libraries. The solution, in my mind, is to call yourself a JavaScript Developer if that’s where your expertise lies, and to not call yourself anything if all you know is HTML and CSS. Seriously, go learn a programming language.

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.
  • Web Developer is a title that flirts with ambiguity, if less dangerously than Front End Developer. I’ve seen the term used to mean “a person who builds web applications, including the server side” or just “a person who knows JavaScript.” But as unclear as it is to industry insiders, it may be perfect for freelancers who cater to a “just make me a website” clientele. Most individuals and small business owners don’t understand the complexities of front-end and back-end; if they hire a developer, it’s to create an attractive single-purpose site that will show up in Google results. I suspect that Web Developer is exactly what they’re looking for. If you’re not a contractor, Software Developer may describe you more efficiently (and give you a nearly $20k bump in average salary).
  • 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.
  • One more title I didn’t investigate in depth is x Developer or x Engineer, where x is a specific language, framework or technology. For example, I could call myself a JavaScript Developer, an AngularJS Developer, or a .NET Engineer, and this would remove the ambiguity about what I’m primarily good at. I would choose one of the above based on my career goals, or combine two of them, e.g. AngularJS/.NET Developer. To look at every kind of x Developer would have increased the scope of this article far beyond its original purpose, but in my opinion it’s the most useful job title there is for someone who codes. Of course, if you don’t feel comfortable associating yourself with a specific technology, Software Developer is a totally acceptable alternative.

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