Some would say the differences are semantic, some say pedantic, some say titles are a waste of time, I say it matters, and there is a difference. Here is why I think so.
Word Etymology and Meaning
Architect
ar·chi·tect/ˈärkəˌtekt/noun
- 1.a person who designs buildings and in many cases also supervises their construction.synonyms:designer, planner, builder, building consultant, draughtsman"the great Norman architect of Durham Cathedral"
verb COMPUTING
- 1.design and make."few software packages were architected with Ethernet access in mind"
Engineer
en·gi·neer/ˌenjəˈnir/noun
- 1.a person who designs, builds, or maintains engines, machines, or public works.synonyms:designer, planner, builder, architect, producer, fabricator, developer, creator; inventor, originator, deviser, contriver, mastermind"the structural engineer's drawings"
verb
- 1.design and build (a machine or structure)."the men who engineered the tunnel"
Developer
de·vel·op·er/dəˈveləpər/noun
- a person or thing that develops something."a property developer"
- a person who grows or matures at a specified time or rate."I was a slow developer"
- a chemical agent used for treating photographic film to make a visible image.
So we have Architect (computing) that means to 'design or make', an Engineer who 'design and build', and finally a developer who grows or matures at a specific time/rate. 'Developer' describes the person's state, whereas the other two describe the person's actions.
Lets append 'software' to each term and see what the mighty Wikipedia gives us:
A software architect is a software developer expert who makes high-level design choices and dictates technical standards, including software coding standards, tools, and platforms.Software architect - Wikipedia
https://en.wikipedia.org/wiki/Software_architect
A software engineer is a person who applies the principles of software engineering to the design, development, maintenance, testing, and evaluation of computer software. Prior to the mid-1970s, software practitioners called themselves computer programmers or software developers, regardless of their actual jobs.Software engineer - Wikipedia
https://en.wikipedia.org/wiki/Software_engineer
A software developer is a person concerned with facets of the software development process, including the research, design, programming, and testing of computer software. Other job titles which are often used with similar meanings are programmer, software analyst, and software engineer.Software developer - Wikipedia
https://en.wikipedia.org/wiki/Software_developer
So according to Wikipedia the architect makes high-level design choices, sets standards, and picks the tools. Where as engineer and developer are closely related. We now have two examples of how the architect is distinct from engineer and developer so let's clarify the differences between those two next.
Engineer VS Developer
Software Engineer Insider has a great (but short) article discussing the differences. To paraphrase an developer focuses on the coding in a narrow scope. An Engineer understand the 'big picture' and 'client requirements'. Following the entire SDLC of the product. From client request to final deployment.
Jason McCreary puts it short as well:
Developer
A developer executes. Their talents often focused to a single area. Without need for the “big picture”.
Engineer
An engineer designs and plans. Always aware of the “big picture”. With talents in many areas. An engineer can assume the developer role. But an engineer's core focus lies with architecture.
Conclusion
With the above and many other conversations and much research my opinion is formed based on the knowledge and consensus available: Architect, high level choices and tool selection. Engineer, build applying scientific mentality and methodical process. Developers, write the computer code to make it do a thing.
What do think. Am I being overly pedantic? Do you not care either way? Are you an architect and feel insulted when someone calls you a coder? Lets discuss in the comments below.
Originally posted on my blog.
Latest comments (73)
Developer and engineer is one and the same... Engineer is just more formal of the two.
Software / Architect
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.
Software / Business Analyst
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.
Software / 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.
Software / Engineer
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.
Software / Programmer
They create/modify databases and programs, based on detailed specifications provided by the developers.
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 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
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.
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 :)
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.
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.
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.