I'll bite :)
I have had all those titles, and it makes little to no difference to what I do, and quite a lot of different to how I'm perceived.
First contact with suppliers or customers: it's useful to set an expectation of authority so I'm an Architect - they feel valued and we can get going quicker on working together (or coming to agreed separation).
With team members I will be working with: I introduce myself as the fool responsible for the poor decisions, taking some pressure off them, suggesting that good decisions are made by others and demonstrating the humour necessary for survival in a work environment :) Over time they can decide for themselves on my actual skills!
Would I be offended by being a known as a 'coder'? Nope, quite the opposite: that means someone thinks I can in fact write code, and will understand what I'm looking at (possibly their efforts, possibly my latest PoC mess), a fellow geek, not a weird out-of-touch golf-course decision making 'Architect' in an ivory tower somewhere.
In terms of what I do: architecture is a role on a team, equal valued to other roles, with different focus and outcomes (big picture goals, communication with stakeholders, etc.) it's my T-shaped specialism, other folks enjoy theirs and together we get stuff done. If we're doing it right then mentoring takes place and others get to learn some system and business scale patterns from me while I learn something from them.
Very well said Phil. Like you I follow the 'if its bed, its my mistake. If it's good it was the teams effort."; for the same reason as well, it takes pressure off the other team members and helps keep the focus on the goal.
Same here... Been there done that! Multiple hats same guy!
Architect selects tools, frameworks, paradigms best suited for the job. Example: the person that draws a blueprint has selected the shape and materials for a house.
Engineer solves a real-world problem using software/algorithmic principles and coordinates with stakeholders. Example: a foreman consumes a blueprint but decides in which order things will be done, best practices for assembling components of the house, guides implementation etc.
Developer implements the solution; they are developing the software by bugfixing, refactoring, etc. Example: general laborers hammer in the nails when it is time to frame a house and tear down walls when it is time to remodel.
All of these are not titles but modes of operation that a single person can be working in at any given time. Each person will have varying degrees of proficiency at each important task and so when it comes time to titleize, may prefer a specific title.
Very nice explanations Chris. Creates concret analogies that are easy to understand.
I found the construction analogy rather useful thanks!
Very true and direct. Really like this response because as you say they're modes they are ways we interact with the virtual and real world.
I'm proud to be "just" a developer.
I design my software, I do technical choices, I assume it and I can argue them, but I'm still a developer.
The rest is bullshit.
Thanks for putting this in the debate 😉
From this, I assume you probably work alone or in small teams. The responsibility of design and implementation are all yours, or easily shared between team members.
However, for larger teams to work together, you need some people to specialize to see the big picture, and others to specialize on certain smaller parts. The one responsible for the big picture is the architect, while the engineers and developers usually manage smaller parts.
There is an implicit assumption that the one overseeing the whole thing is more important or more valuable, as if the team were a military hierarchy. In reality, it's mostly just a different job.
Compare it to a football team: the coach is the one making the larger decisions, whereas the players have to turn these larger decisions into actions that actually achieve something. And it's quite clear that (looks up players from PSG, the first French football team I know) Kylian Mbappé and Thiago Silva are the stars of the team, and they're valued more than (looks up coach) Thomas Tuchel.
In Canada you can't call yourself an engineer without an engineering education and passing a union exam. So software engineering in Canada is rare it's architect or developer. An engineer is incharge of making systems that could affect someone's life and require ethics in Desicion making a software engineer would work on the site on hardware that keeps you alive like a heart rate monitor. A developer makes stuff that runs on computers or the internet
"...An engineer is incharge of making systems that could affect someone's life...
Like aircraft control systems, heart-beat (pace) makerts, and traffic control systems? All controlled via software. In Canada are these roles only filled by people w/ union exam certified people?
There is normally at least one on the team to provide the certification stamp.
I'm agreed with the Canada way.
In my country (Brazil), a lot of developers has self-titled as an engineer.
But we have an engineering course that guys need a lot of time and study to get a certificate.
In my opinion, that's not fair with them.
So, I'm just a developer, even though I lead a team.
Being a developer, I can develop systems, software, people, myself, etc...
Just like the comment of Boris Jamot, I'm proud to be a developer. :)
In Canada, you also cannot call yourself an Architect without a license, which requires a test and ongoing certification.
There is no such legal restriction on Developer that I could find.
"...Architects are professionals. The public must be sure that people who call themselves Architects are qualified to practice in their field...." - raic.org/raic/becoming-architect
Love it! Now how to we apply that to software?
I've found that there are nuances between how one organization interprets these titles versus another. But where it really matters is when it comes to deciding pay and fair market value. I'm more likely to stick with "Software Engineer" as a title than "Software Developer" because I can negotiate better compensation with the former. When it comes to dollars and cents, you have to ensure that the job responsibilities are commensurate with the pay you're looking to get at a company. Know your worth.
Interesting! It would be a bigger deal if the field were as regulated as architecture of physical structures for example. Without that, the words may have as many meanings as there are companies with job-boards 😬
I also think that, to be good in any of the three, you need to be good in all of the three.
I guess it also depends on the language. The German translation "Ingenieur" isn't common in the dev-context. Maybe it has to do with the "German Engineering" trope, that already owns the term.
"Architekt" and "Entwickler" (Developer) are used more commonly, though. In conversation with non-tech-people, the term "Programmierer" is usually sufficient.
Agreed, without regulation titles become as worthless as the paper it is written on. Personally I would like to see some certification body take on the task of providing professional accreditation. Not per language mind you. That would be to specific and hard to keep up with. More, general computing concepts, mathematics behind computers, algo's, design patterns, business cases, etc. I doubt it would ever happen but one can hope right?
It would need to be country-based, but yes. I think the most important topic would be ethics and logic, since you're most likely affecting lives, especially in big corps.
I'm going to petition my director to change my title to Senior Entwickler immediately.
In Germany, Ingenieur is a protected title like Doktor, so one needs to go through a very formal education in order to earn that title.
Yes, same with "Architekt", but I'm not sure how it is when you prefix it like "Softwareingeneur" or "-architekt". I guess it's the same as with "Hair-Doktor" or "Handy-Doktor".
I used to be a sound engineer and I was not able to call myself Ingenieur, because there are also Toningenieure.
My guess would be that it's okay for marketing, where there is no risk of misleading a customer, but as a professional title it's not.
let architect = ...
let engineer = ...
let developer = ...
I believe these titles are just an attempt to categorize jobs for management purposes. The actual duties performed will vary based on the needs of the organization and team.
An architect is considered a senior position. You don't typically see companies looking for a Junior Architect. Depending on the organization, an "architect" may be just the most senior engineer/developer.
I agree with these definitions, having taken positions where I could be considered a developer, engineer, or architect. I always considered myself more of an engineer even when recruiters wouldn't touch the title Web Engineer with a cattle prod.
I do see a difference between an Architect, Engineer and Developer in my organization. It is certainly not a label to describe knowledge level of the people. I do see it as the point of view they have on the software they are building or helping to build.
Our architects are flying over the whole technical landscape, they monitor the things we do and build. We discuss all our decisions with them. They are the one with the 'biggest' picture.
Our engineers are designing, thinking on how a problem can be solved. They focus on their domain but take a look around them to see how other teams are doing things. How can fit a solution the best way in our infrastructure?
Our developers are focused on the thing they are programming. They do not have that much interest of the bigger picture but do have interest in building the software they must build in the most effective way possible.
Yes, the labels are just bullsh*t. Why? Because they make you feel less than someone else. But we need all of them, we need every person in the organization. Together, we build great things for our customers. Sometimes I am feeling like an engineer. Sometimes I feel like an architect. And sometimes I feel like a developer.
At the end we all want to make good software, and it depends on our perspective on what we do. We can do our things on all level. But it depends on the interests of the person themself.
The biggest enemy, in my opinion, is the ego, when a developer becomes an architect, it seems as if the desire of coding is removed, when the architect is the first who has to code, since after all, what is sought is that the system be manufactured in less time, easier to debug and higher quality.
Sometimes, an architect is a role that works in tandem with the Project in Chief, but it is not the same. Other times, the architect is the project in chief, and in some slim-team, the architect is the team.
An engineer is a problem-solving person, so it makes sense that every good programmer/developer is also an engineer. It is the reason why scientists/mathematics are mediocre programmers.
Some people think they are engineers because they get a degree and it is bs!. The degree is just a simple sheet.
You don't typically see architects in smaller companies or at least, if you do, their role is not the same as it would be at a larger company. In larger companies, architects tend to work more horizontally across some or all of the teams within the broader engineering organization, not going too deep with any individual team. They work with the developers, managers, and product teams for some subset of services in their wider system to guide development of the system as a whole, helping negotiate tradeoffs between vertically focused teams when necessary.
In these larger engineering orgs, they might not even do any programming, or if they do they'll generally stick with prototypes to understand implications of different patterns, but they aren't usually down in the weeds on product development.
Regarding "engineer", I see all of what we do as engineering, so developers and architects are both engineers. Making a distinction between "engineer" and "developer" seems to be headcanon at best. "Engineer" sounds classier than "developer" but no developer I've worked with that cared about "engineer" vs "developer" in my 15 years in this industry has produced anything better than anyone else from either a short-term or long-term perspective. Seems more ego-driven than anything.
I think i am software developer in some projects and software engineer in others, because sometimes you are required to analyze, design and code. But there are cases in which there is nothing to analyze and you just code
In my experience, it's always been a matter of labelling in order to pay you more/less, or get more money from a client.
As for the difference between an engineer/architect and a developer, I'd say the former creates the boxes, the later fills them with code.
Obviously there are shades of grey.
I don't mean developers can't make design decisions, it's just that in most situations they are not asked to due to team's structures.
From my little experience I can say that when there are many engineers to build a solution, from application to system, many are the ways to approach each of the layers. You need an architect that knows how the system and application need to work together to ensure best end result. You also need an architect to design your software in the best way possible. Building an app that uses a sensor could be difficult if there are many user interactions where the sensor needs to do different things. An engineer would build workaround to his code, an architect would prevent workarounds by designing a good FSM framework. Both of approaches work and reach end result, but what's then easier to maintain? Small companies usually struggle to find this valuable, because of the need to get stuff done.
My question is, what is the term for someone who fits all three roles? Most of my developer roles have involved just being told the requirements and coding features, then passing them to QA. My current job, though, is with a much more agile team, and every "developer" has a hand in every part of the process. We meet and talk with the customers and end users often for feedback and to discuss new features and requirements, like engineers. We do all of the coding, like the developers. We also make all architecture decisions -- our server configurations, our technologies, our libraries, our infrastructure, etc.
We all fill all three of these roles, which one we are filling just depends on the day. Is there are word for this kind of position?
Hi, Alfonse. I have a similar role, where the entire team acts on all levels and interfaces customer & requirements. In my role (owing to the field of work I suppose), I am a so-called intelligent algorithms specialist, to convolute matters even further :D
I'd call that a 'superhero' :D.
They focus on the whole business (instead of individual systems, applications and programs) to determine or give advices about what softwares are to be bought (with or without customizations) and what softwares are to be developed (custom). They also set general guidelines and constraints to be observed when softwares are developed or bought. They choose standards, technologies, frameworks, langages, paradigms, and the tools that has to be followed. Software architects is a role assumed by developers or former experienced developers.
They help guide businesses in improving processes, products, services and software through data analysis. These agile workers straddle the line between IT and the business to help bridge the gap and improve efficiency. They gather requirements (in a document). Business analyst is a role that could be assumed by developers or former experienced developers.
They modelize (design that include implementation-specific and technology-specific details) the systems (databases, applications, services, message brokers, etc.) using the information (if any) provided by the architects (if any), the engineers (if any) and the business analysts (if any). Those detailed specifications are intended to programmers.
They are capable of doing all of what is accomplished by the architects, the engineers, the business analysts and the programmers. When they do, By reducing the "assembly line" and since the developers have more awareness on what they already have in their back store (what they already did and can be re-used) and elsewhere, they can deliver quick/cheap interesting solutions.
They gather and set requirements, propose solutions, design and develop softwares for the chosen solution.
They solve real-world problems using software principles. They write the design documents for the developers. A design is a model (with algorithms) without any implementation-specific or technology-specific details. A model is a design with those details. Engineers also coordinate with stakeholders. Software engineer is a role that could be assumed by developers or former experienced developers.
They create/modify databases and programs, based on detailed specifications provided by the developers.
I am a software engineering manager (another world of titles with similar debate as I am observing on this post), will put in my two cents here. I generally hire SW engineers, SW developers, SW architects, etc for roles in my team and project and it hardly matters what titles they hold in their current job. If they can fit the job requirement and have good design and coding skills they are hired. Titles are generally driven by organization business needs and have a lot to do with what kind of product you are going to develop. So we should not get too much carried away by titles. All of them are good. Disclaimer: I started as a 'software engineer' and after coding for 7-8 years moved to management. If I ever go back to coding I will accept any title that you give me which is related to software development.
The fact that this is an oppionated subject kinda shows the problem.
Developers pick tools all the time, architects come both as application, software, and building designers, engineers work a number of things from hardware to software and cars..
These kind of generic titles are kinda useless without more descriptors imho.
They fail to describe situations where one person covers more roles, being a developer application, systems architect and engineer sounds stupid. But freelancers do it all the time.
I larger companies I’ve worked for (30K+ employees) there’s a strong distinction between Architecture and Engineering/Development. Typically Architects aren’t expected to write code, but are consider to be more as at a Director level or above without direct reports, driving high level decision making, writing RFCs, etc.
As for the other two, it depends on the environment, but typically Engineer is used as you get farther down the stack from the user, things like Systems Engineer, SRE, Build and Release, etc.
Loved your article. Defining terms in a conceptual agreed way is quite a challenge. I agree with <you. I live th<e definition of engineer (try to)....
One suggestion i would give is referencing some academic definition such as software engineering books and some IEEE articles. Th<e academic people usually define terms at the< beginning of any paper to clarify and set the path....
An excellent idea Andres; sadly the terms are so vague even now academics have yet to solidify the boundaries. I know in some countries a person can not use 'engineer' in there title without a professional certification. Computing does not yet have an industry wide organization to administer such constraints.
Seems like according to these definitions, developer is a junior software engineer and engineer is a senior software engineer.
I personally tend to disagree to these definitions. I think that developer in software is someone who mostly develops, which means uses the tool which we call code to build stuff (without saying how well he's doing this), which is the same as software engineer.
Architect is indeed someone who looks primarily in a broader view of the software, and has a future view on how the software as a whole should look like.
I kind of prefer "programmer"
The reality is what you do, not the title you put in your CV.
An hands off architect is usually a better decision maker.
Managers that code often are more realiable managing teams ...
It is common to do multiple tasks and to be a pure architect or engeenier or manager.
I avoid using the titles personally; when I describe what I do to non technical people I’ll typically use the words “design”, “build”, “test”, “fix” and “repeat”. Among our kind I’m still finding my place, but I’ve been slowly moving toward the architecture side of things and appreciate the distinctions you’ve made here.
An exercise in pedantry. Thanks, but we all have dictionaries too and our employers can put on our business cards whatever they would like.
When dealing with complex systems. The person that sits down and decides what design patterns to use, what tools to implement, what protocols to consider, from my experience, is not something many devs can do right. This is where the architect comes in.
The engineer is someone that actually knows the tooling and uses it to build all the many parts of the system according to design specs. I find a lot of devs fall in this place.
A developer, for me, is just a generic term but also can be used to define someone who has no clue what various roles are required to build a system -- someone who might just Google something on how to solve a problem instead of knowing how to solve the problem and Googling the technicality involved in it.
So architects are good at deciding the ecosystem. Engineers are good at the tooling. General dev are good at general coding.
Well done on the research it makes a lot of sense! In the end they are just words, but well defined words allows for better communication!
Architect in software world are like high paid snake oil salesmen. Often know the least, talk the most. And invariably hard to understand. Company which realizes that the true soldiers, are the developers and the engineers, are the ones who will eventually deliver, will do a lot better in the long run.
Perhaps instead of blanket statements you could speak of your own experience?
I've seen "developer" and "engineer" interchanged a lot. I'm not sure if one name (or brand) is better than the other, e.g. "Data Analyst" (Borrrrrrrrrring!) vs "Data Scientist" (OoooOooo Ahhh!!!).
Architects may seem superfluous if you have a single monolithe and an Engineering Manager managing it, but as soon as it involves many systems and even a Data Warehouse, tools choices matter as other systems have to live with those choices in terms of file types, data serialization, conventions, schemas, etc, etc, etc. And that's where an Architect comes in as most Developers/Engineers are trying to do day-to-day stuff (building the apps) and the Architect can help make sure the right POCs are put into the sprints to make sure integrations and systems performance are the best they can be.
If I had to put a demarcation between "Developer" and "Engineer" it would be developer is more tightly coupled to a technology in my experience. e.g. A Ruby web developer or a Django Developer vs a Front-End Engineer or a Back-End Engineer who might know 2 or more frameworks. A Data Engineer would know Spark (framework), Airflow (framework), and perhaps even Flask (framework). Again, this is only my experience, so YMMV elsewhere.
I think of a Software Architect as someone who is more concerned with the infrastructure, a Software Engineer someone who is more concerned with design and integration, a Software Developer someones who is more concerned with implementation.
I always make the analogy with Building constructions.
The Architect is the one who indicates how the building should be indicating the materials it will contain, the finish (colors), the accesses to the building, the architect visualizes how it should be.
The Engineer takes the plans of the Architect and based on his knowledge plans the construction of the building, verifies the lot where it will be built, calculates the estimated time for delivery, calculates how many workers he will need, whether bricklayers, plumbers, electricians .
The Worker (Developer) depending on their abilities will execute the tasks that the Engineer has delegated.
The Auxiliaries (in Mexico Chalanes in Software Development the Jr) are people who are of support for the workers (it depends on which area they require auxiliaries).
Job titles come from HR and the real world has little influence on them.
Separating developers and architects is like going back to the bad old days where the IT guy couldn't code and the developer didn't do any testing and that was OK because it wasn't their job.
The people who want to create narrow job roles like "architect" or "tester" or "programmer" and organize teams around these functional silos rather than the customer value streams they serve/create are typically HR "resource managers". They do this because they want to see people as interchangeable parts in a corporate machine rather than the complex and irreplaceable individuals that they actually are.
The job of a modern developer is to analyze, design, implement, test and deploy as a continuous and fluid cycle. They are regulated directly by customer feedback. In my experience, pure design teams who operate without consideration for a product/customer driven feedback loop (ivory tower architecture), tend to fail in a really slow but sure type of way that is very expensive.
The modern definition for an iterative developer was the answer to this old problem.
Swizec Teller wrote an interesting blog (after doing a data viz project using real salary data) about the how Software Engineers make $13K more on average than Software Developers.
Check it out:
well I will disagree with you on this to some extent
Software Engineer are those who build the big software or tools i.e. (Google chrome ) and frameworks (angular) or library (React).
Software Developer are those who use the tools of Software engineers and provide creative solutions.
I can be wrong on this : what do you say :)
The difference between a software developer and a software engineer...
Think of a developer, he/she could be in charge of the team that would build things, more on a pure software level. Senior software devs have also develop strong personal skills, which allow them to work closely with clients. A higher overview of the entire process.
A software engineer is usually closer to the electrical side, like building interfaces for robots and machines. Thus more focused.
So, according to me and most people I know, that short description you quoted is exactly the wrong way round.
In construction, the Architect draws the picture, the Developer is in charge of organising everything the architect has planned and the engineer is responsible for a very focused job, be it electrical, just a lift, or a bridge.
I'll bite in as well because didn't like the comment from Boris.
In my humble opinion an Engineer is a person who has studied computer sciences for at least 5 years covering from the lowest level binary, assembler, data structures, algorithms, security, networking, database, can understand and code in different programming languages and adapts. An engineer degree is not bs guys. Now I take the engineer with a bit more knowledge of Software Architecture, patterns and practice, abstraction and that is your Architect.
Software developers are the independent guys writing software on demand for smaller clients, often subcontracting parts of the project to (such as graphics) other developers so they could make use of their expertise.
Pfft, made up titles... If what I do on a daily basis defines me, then I am a Sr level III design software user process database recusrionating network help desk lead trainee.
One company's UI Engineer is another's Front End Designer yet the recruiter still says Full Stack but most places don't have an architect. Places that do don't hire architects so I change my title to engineer to find a job when I am looking.
After cache invalidation and naming things, defining a job title is the third hardest thing in Computer Science :-)
Ain't that the truth.
That's only if you don't understand what a noun or a verb is.
The first two terms are used as both a noun and a verb. You cannot compare a verb to a noun, they have different meanings.
I think all 3 terms emphasize different aspects of the same thing. On a given day I might be wearing any of these hats. (I'd like to throw the term "mechanic" in there too)
We could add 'Magician' as well :D
Developer and engineer is one and the same... Engineer is just more formal of the two.
I like the pedantic! I for one have always preferred the Engineer title for the exact reason that you've quote from Jason.
Great post :)
When do these distinctions matter? On any given day, I'll be doing something from any of them, some days, there will be times when I do something from all of them.
So according to your article, a full stack developer is a Software Architect, Engineer and Developer, right? Because he is in charge of all of the tasks that you mentioned for each title.
In a way, yes. End to end, pattern selection, implementation. Yea a Full Stack'er does as all three roles detail.
This is a bit too much... In any case a title makes no real difference.. A good software developer can go deeper than just execution and know more about how and why things work the way they do..
We're a place where coders share, stay up-to-date and grow their careers.
We strive for transparency and don't collect excess data.