This is an early version of 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 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 âž° (@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.
Sources
I’ve got salary information from the Bureau of Labor Statistics, 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
- 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.
This post was originally published on medium.com
Top comments (8)
For me, I'm less interested in the title than the job, but I've never been entirely comfortable with calling myself an "engineer" without the education/certification requirements that someone such as a "civil engineer" or "electrical engineer" would typically have. Therefore, even though my current job title is Software Engineer, as a self-taught programmer with no relevant degree or certification, I call myself a Software Developer, unless I'm specifically referring to my job title for some reason. As always, IMHO, and your mileage may vary.
That's a reasonable viewpoint and one I've heard a few times. It seems like most people see the difference between developer and engineer as trivial. The market value is similar, too. So I doubt you'll ever have reason to regret not calling yourself an engineer.
But putting all that aside, I don't think there's any need for you to devalue yourself permanently because you don't have a college degree; once you've got a few years of experience and done some heavy reading in your field, your knowledge gaps are no more significant than anyone's. I'm sure you've interacted with a few certified and degree-bearing developers who are totally clueless.
It can be an awkward thing to explain, though. Once at a family get-together, when I mentioned that I was working as a programmer, my aunt looked at me funny and said, "But you're just making that up, aren't you? You're not really a programmer?" She knew that I didn't have a CS degree, so I guess her natural assumption was that I was pulling a Frank Abagnale and bluffing my way into the field. No, I'm not making it up, I'm rather competent. But people tend to see Computer Science as something far more scholastic than it really is.
Don't worry, I've been in the IT industry in one capacity or another for decades now, though only in the last several years as a full-time software developer|engineer|programmer, so I'm coping just fine. I even have a college degree -- but it's a bachelor of fine arts in music education, so go figure. :)
I call myself a programmer. It's what I do in my profession. There's nothing wrong with this title. It's honest and direct.
Software Developer is just wrong, since there are many people involved in development of a software. It says nothing of the role you are actually playing.
I appreciate your perspective. Insofar as all job titles are reductionist, "programmer" isn't too far out.
I disagree about Software Developer being "wrong," though. I do a whole lot more than write code--in fact, there are days when I don't write any code at all. I'm in meetings discussing features, design, sometimes even low-level business strategy. My VP of Product likes to remind us devs that our job isn't to write code, it's to develop software. And since developing software ultimately requires writing code, I see the term as both justified and accurate. It covers the complete scope of what I do in a way that "programmer" doesn't. Besides, most people today understand that a "developer" is someone whose job includes writing code.
Related: Don't Call Yourself A Programmer, And Other Career Advice by Patrick McKenzie.
For my non tech friends I usually tell that I work with computers. I sometimes find it too difficult to explain what a programmer has to do.
Tariq Ali had a tangentially related post that could make for additional reading dev.to/tra/defining-the-industry