HACKER Q&A
📣 bliblablubb2

Software Developer vs. Software Engineer


Hi, what is the difference, really? I feel like everyone is using them at random or making up their own or new job titles...


  👤 StevePerkins Accepted Answer ✓
The "correct" answer is that Margaret Hamilton coined the term "software engineering" while working on the Apollo program back in the 1960's. As a way of declaring that software people can have the same level of rigor and respectability as hardware people. This branding finally caught on in the 2010's.

However, to talk about the "real" answer, let me start by saying that I've been doing this for a little over 20 years now. When I first started out, my job title was "Computer Programmer".

After awhile, my title (and those of all my peers) changed to "Software Developer". After a laughably short period of time, it stretched into "Senior Software Developer".

After I'd been doing that for some years, my job title changed to "Software Architect".

After awhile, the industry decided to stop pretending that most architects do full-time architecture for a living. So my job title changed to "Staff Engineer", and then "Principal Engineer" when I started making too much money.

I don't know that the day-to-day activities of my job have actually changed all that fundamentally. I have a LOT more influence with Product Managers and executive leadership than I did in my early years, and I find myself doing more mentorship and informal leadership. But by and large, I think this industry just changes job titles every so often because: (1) it wants to stay trendy and copy whatever Google is doing, and (2) technology and H.R. play games with each other over salary bands. So I wouldn't meditate too deeply on it.

At least we're not ops or QA. It feels like those poor souls re-brand every six months, chasing after pay parity with the devs.


👤 jstx1
There's no difference. Some people think that engineer is a special word because of industry regulations in some countries - if you don't live in one of those countries, this doesn't concern you at all. Developer and engineer mean the same thing when they have the "software" prefix. The whole "a software developer does x but a software engineer does y" smells of snotty gatekeeping.

👤 johntdaly
What sets the Engineer apart from the Developer for me is:

* the engineer can work with other developers/engineers

* the engineer writes code that is maintainable

* the engineers code has an architecture

* the engineer can find a solution to problems that don’t have a lib or stackoverflow entry

In other words:

A Developer is more likely to work on smaller codebases, most likely alone, that are comprised of known problems. If you are lucky there will be some sort of rough architecture.

An Engineer is more likely to work on larger codebases, most likely in a team, that has a core of problems that are specific to the product or a domain and need to be implemented by the Engineer. The code architecture exists to facilitate maintainability and cooperation between Engineers.


👤 jbreckmckye
The terms are interchangeable.

Now and then I like to use "programmer" in informal conversation, because it feels refreshingly direct, and sometimes I think we forget that whilst developers need non technical skills, the technical stuff is still the critical part!

But for hiring, etc., they're all just synonyms.


👤 jleyank
Remember, some of the best work ever created was done by “members of the technical staff”. It’s not the label it’s the work results that matter unless there are external requirements or definitions. Engineering and science are disciplines, and there are often (legal) definitions of engineer. I am unaware of any such things for scientist although people assume an advanced degree.

Like some others, engineer suggests someone who works in an environment that has rules and constraints while developer operates in a more unrestricted environment or on less defined problems. But then, hacker was the best title and it could NEVER be claimed, merely demonstrated.


👤 foobarbaz33
There is no difference. They made up labels that mean whatever a particular company or person wants them to mean.

👤 not_the_fda
Unfortunately they are interchangeable in the industry.

Ideally engineer would require an engineering degree and encapsulate more engineering skills such as fault analysis, risk analysis / mitigation, requirement capture and traceability, design capture and verification, etc. Things that are done in traditional engineering capacity that is required in a regulated environment.


👤 flamesofphx
I would say one just plays, and builds things in pre-existing frameworks (Software Developer)... And Software Engineer, makes new things or new frameworks from scratch. Both are capable of programming though, it's the level at which they operate. As for the title themselves to HR, I don't think it really matters they think you can create "The Next Facebook" in 5 minutes.

👤 0xbadcafebee
There's no technical difference. Titles are used in corporations to separate pay grades and hierarchy, so a "Software Engineer" might be higher up the food chain, but they do the same work.

I keep saying we need a real engineering discipline in software and not the "arts & crafts" it currently is. A real engineer can tell you whether a steel beam will support a given load; a software developer has no clue what load her software supports.


👤 somehnacct3757
The NSPE do not like random ppl calling themselves engineers.

I went to an engineering school (for computer science) and everyone faculty and students was very particular about this.

Some jurisdictions have legal requirements on calling yourself an engineer.

The correct term is software developer. Some bigcos who are a juicy enough target for NSPE or government agencies have been reached out to, which is why we see the job titles change now and then.


👤 wccrawford
Pro tip: They really are making up their own job titles.

Nobody really cares, so long as you can do the job you claim to. If you say "software engineer" but can't do more than add jQuery plugins to a web form, they're going to politely tell you that the interview is over.

If your resume says "senior software engineer" and you apply for a job that just needs someone to add jQuery to a form, they aren't even going to call you.

So far as I'm concerned, the title only matters on your resume, and is just for getting the right kind of attention.

On a resume, "developer" is going to speak to lower and mid-level developer jobs, and "engineer" is going to be for jobs where you have to spend significant amounts of time designing systems that need to be maintained for a long time. If you think you're up for it, go ahead and use it. If you misrepresent yourself on your resume, you'll either not get the job, or you'll fail at the job when you get it, so it's up to you to get it right.


👤 samwillis
While I don't have an answer to your exact question (I suspect its somewhat arbitrary), it's interesting to note that some countries (I think Germany?) have strict regulations about using the term "Engineer" as a job position title. I believe they require you to have passed specific qualifications and have engineering accreditations.

👤 hakunin
I don't see this answer, so here's my 2c.

I think there is a small distinction in the act of engineering vs. developing, but we all cross that line without noticing. Software engineering is the process of finding the most efficient solution within your constraints by leaning on algorithm/datastruct fundamentals. For example, you don't look at a tool's marketing page, you look at what it's built upon, how it operates, and based on these fundamentals you understand how performance, reliability, and cost will scale. If the fundamentals are too complex, you might have to do some measuring. If you evaluate or build new tools on this basis, you engage in some software engineering. I don't think this has to be some sort of superior gate-kept thing. It's just a kind of work.

We could make a stretch and claim that there's also "fundamental analysis of maintainability", but I firmly believe[1] that maintainability is subjective. We don't call writers "story engineers", and I wouldn't call any immeasurable and subjective work "engineering".

Edit with additional thought: I think there is a perception downside to both: developer and engineer. The "developer" downside is that you're more likely to be perceived as someone who doesn't care about fundamental analysis, and you focus on getting things to work only in the conditions you're familiar with (i.e. on my machine). The "engineer" downside is that you're more likely to be perceived as someone so fixated on the measurable, that you completely ignore the taste and maintainability aspect (falling into the McNamara fallacy). If you can't measure it, it's not worthy of your time.

There are just perceptions, not reality. Naming is hard.

[1]: https://max.engineer/maintainable-code


👤 injb
They're used interchangeably but they probably shouldn't be. What characterizes engineering (in most disciplines) is the practice of modelling. An engineer knows exactly what they're going to build and knows exactly what characteristics it's going to have. At least, they know the ones that are knowable, and they're aware of the ones that aren't.

Do you evaluate solutions quantitatively, like "This solution will require n times more memory, and it'll run m times faster". Or "this is how many nodes we need to guarantee a typical latency of < x milliseconds assuming y active users per minute"

Or do you say "let's try this and see what happens"? The latter approach is very common in the software industry, but (thankfully) not in bridge-building or space exploration. So there ought to be terminology that distinguishes these practices from each other.


👤 FinanceAnon
I once got asked this question by a technical recruiter in a phone call. I said I don't think there is a difference. She started explaining how Software Developer is someone who just codes and that's it, and Software Engineer is someone who understands business requirements and different constraints to come up with the best solution, and how their company is looking for Software Engineers like this. I almost wanted to hang up on the call. I understand the importance of going beyond "just coding", but titles vary by company.

Right now my title is "Software Development Engineer" so I basically have both. My previous contracts stated "Software Developer" or "Software Engineer" in the past, and it was the same job.


👤 peterkelly
To me they mean the same thing.

If there's a difference, I've somehow missed out on learning what it is after >20 years in industry/academia and that lack of knowledge has never been a problem.

I honestly don't care about titles. I don't even know what mine is without looking it up.


👤 TrianguloY
In Spanish, software developer is 'desarrollador de software' and software engineer is 'ingeniero informático'. Probably the translation is not exact, but if it were:

Developer is someone who develops, who makes/transforms things. Software developer is someone who makes/transforms software.

Engineer is someone who studied engineering, a career. Software engineer is someone who studied the software engineering career.

So, at least in Spanish, a software engineer is someone who has a degree in software engineering, no matter what his job is. And a software developer is someone who writes code, no matter what his studies are.

Usually those terms intersect, but not necessarily. I think it's a similar different of a particular teacher vs a professional professor.


👤 davzie
The only difference is in how smart you want to feel when you call yourself one over the other.

👤 pdinny
I see many commenters suggesting that the distinction is a subtle one of ability and scope. This is interesting to observe and definitely not what I had anticipated in the responses.

In my experience the titles are interchangeable in practice. I can see how one might make a spirited argument that there should be a meaningful difference and how that could be useful in hiring.

Taking a look at Google Trends for both terms it is interesting note seeming regional preferences: https://trends.google.com/trends/explore?date=all&q=software...


👤 mindvirus
In some jurisdictions like Canada, engineer is a regulated title. Similar to how you couldn't (I think/hope) call yourself a medical doctor or a lawyer in the states without an actual license.

👤 bkgh
I think another difference is Engineering has a history of rationality and mathematics behinds it. In my opinion computer programming (in most cases) is something like novel writing and includes many creative/non-reproducible problem solving works (art?). I prefer to not refer myself as engineer because of that hidden semantic assumptions that comes with the word. Instead because of popularity of rational thinking many software developers like to categorize themselves as engineers. (more about this: Object Thinking by David West)

👤 jslakro
It doesn't matter. To skip the discussion I prefer programmer or coder, actually. There are of course some labels applied by HR to avoid the problem. But if anyone is interested in go deep into this subject I invite it to read an article (old post in HN):

https://web.archive.org/web/20111025230504/http://www.geocit...


👤 davidhbolton
I worked at British Aerospace and my title was software engineer. Compared to previous programming jobs, this was roughly 70% paper work and 30% developing software. It was quite formal how they developed software using the waterfall method. Everything was documented and signed off before any development happened. Formal specs, design specs, acceptance tests (for afterwards) and so on. It felt more engineered than any other software development job I've had since.

👤 zppln
In my mind the distinction is there, but it's gonna feel arbitrary no matter what. If I had to make an attempt I'd describe the developer as someone who writes code and the engineer as someone who writes the software level spec, sets the overall architecture/design, inputs on interface design and do declaration work (paperwork, really). I would assume most projects have people taking on both roles to certain extent.

👤 jonatron
Depending on who I'm talking to, I'm either a Software developer, Backend API developer, or I fix computers.

👤 secretsatan
My job title says engineer, but I always refer to myself as a developer simply because I don't have a degree

👤 tejohnso
In some jurisdictions "engineer" is a protected term. You can't just go around calling yourself a Software Engineer because you graduated from a 2 month boot camp and feel like that's a nice sounding title. At least, you're not supposed to, and can be reprimanded for it.

👤 dSebastien
I wrote a piece about this a while ago: https://dsebastien.net/blog/2021-08-03-what-is-the-differenc...

👤 lawn
Software engineer, software developer, architect, programmer, code monkey...

People may use them in different ways to make the job sound more or less impressive, but in the end none of them are well defined and in practice they more or less amount to the same thing.


👤 ChrisMarshallNY
I have never particularly cared. They both denote discipline, skill, and end-product focus.

I usually refer to myself as an "engineer," but "developer," in my opinion, works better with less technical folks, and is less alienating.


👤 fron
There's no difference at all, at least in the US. The two job titles are entirely synonymous. Anyone who tries to argue otherwise is just lying to themselves to feel smarter.

👤 rowanajmarshall
In theory there might be a difference. In reality, they're synonyms, and it's random which is used.

👤 Demiurge
In 20 years, I’ve never seen anyone prefer one over the other, except for self advancement.

👤 ravish0007
Google had to invent a role in order to promote those two and you know who! - Not mine.

👤 niahmiah
It’s all psychology… if they call you an engineer will you want the job more? Longer?

👤 meheleventyone
Nothing it's just a name.

👤 gregordv
There are three disciplines that come together in the tech industry: programming, computer science, and software engineering.

Programming is the act of writing programs, and is a skill like any other. Some folks are good at it; some people struggle with it; most people can do some of it if they learn and try hard enough. Programming is what creates value for 95% of the jobs in the tech industry, and if you get good at programming (and programming on a whiteboard) you'll do exceedingly well.

Computer science is the theory of computing; it is a branch of mathematics. Djikstra is famously (wrongly) attributed with saying "Computer Science is no more about computers than astronomy is about telescopes." Many (but not all) amazing computer scientists that I've worked with are terrible programmers and software engineers, but their value has been outsized. Any good programmer can integrate a Raft library into your code for consensus. The computer scientists are the ones that not only apply the correct CDRT theory to your custom-built database, but can prove that it converges consistently.

Software engineering is the practice of delivering the right software on time and on budget; good software architects think in terms of software engineering. In the 1980s, when computers were going in to _everything_, military projects were at the forefront because Reagan ensured that we were spending mad cash there. It was like the dot com boom of the 2000s; you just couldn't go wrong bidding computerized systems. Because they were new, the contracts were cost-plus, and the military-industrial complex screwed the federal government blue with cost overruns. Anything with software on it typically had budget overruns in the 500%+ range. Not wanting to be screwed blue, the Feds reached out to CMU and said "How do we stop this?" So together they built the Software Engineering Institute to put some science and best practices around delivering software. And the SEI screwed them blue, coming up with CMM and a bunch of other bad ideas, but also some good ones along the way.

When thinking about the skill sets of the teams I'm putting together, those are some primary aspects I look at, and the ontology by which I think about them. Of course, there are lots of specialties in each of them, and many people have experience and skills in several of them.

It depends who you're talking to, of course. The goal of language is to create shared understanding, so you need to have shared definitions, whatever they are. Nobody else shares my definitions, so I mostly keep them to myself if I'm not pontificating.

If you're speaking to a recruiter, you are whichever one of them pays the highest. If you're speaking to an academic, you're a computer scientist (perhaps a mediocre one). If you're telling your mom what you do, you're a software engineer because it makes her feel good.


👤 gameswithgo
No official definition of either term and in actual usage they are used interchangeably. People love to pretend otherwise though