In the world of software creation, the job titles of software engineer and software developer are often used interchangeably. Even the Bureau of Labor Statistics makes no distinction, placing these two roles into the same category in the occupational outlook handbook.
However, for IT industry insiders, these roles are not the same. Just like a doctor would not refer to themselves as a physician's assistant, a software engineer would not use the title software developer.
The difference between these two roles lies in the engineering training required, the scope of the job function, and in many cases, the authority level.
In this post, we’ll explain the subtleties of the software engineer vs. software developer divide.
What’s a Software Engineer?
The key word in this job title is “engineer.” According to Engineer’s Edge, “engineering is the discipline, art, and profession of acquiring and applying scientific, mathematical, economic, social, and practical knowledge to design and build.”
Engineers use engineering principles to build new systems or solutions to a problem. Rather than design a specific solution for a specific customer, an engineer innovates a solution to a problem experienced by the general public or a large number of people. Solutions are designed according to the scientific method, and there must be empirical evidence to support the plan as a viable real-world solution.
When engineers are designing a solution, there can be no ambiguity nor any open questions, otherwise the design is likely to fail--either functionally or in its attempt to solve the intended problem, or both. For example, according to engineering mindset, the equation 6÷2(1+2)=x is too ambiguous to be solved, as the equation lacks the brackets necessary to indicate which specific function to perform first in a situation where the order of operations completely changes the end result.
When it comes to software, an engineer is responsible for the entire product development life cycle. This means the engineer notices a need (or is given a problem) and designs a holistic solution, including all of its interconnected components. Before starting on their design, they consult with stakeholders and gather project requirements. And after their design has been implemented and the new software deployed, the software engineer will likely give demonstrations, monitor the system, and interview users to further optimize the software experience.
To develop the technical expertise needed for this kid of work, software engineers either complete at least a bachelor’s degree in computer science or another engineering discipline, or--as these training programs have become more robust--graduate from coding bootcamps.
There is no book of universal engineering principles that all engineers use in their design. Instead, each engineer may define their own principles and apply them to each software solution in its specific environment.
Many software engineering teams do, however, subscribe to what’s known as the 12 principles of agile development--or some variation of them. These are the original principles as laid out in the Agile Manifesto:
- The highest priority is to satisfy the customer through early and continuous delivery of valuable software.
- Welcome changing requirements. Harness change for the customer’s competitive advantage.
- Deliver software in frequent cycles.
- Stakeholder collaboration, including IT teams and businesses teams, is essential throughout the project.
- Build a culture of trust, motivation, and support to get the job done.
- Face-to-face communication is the most effective way to convey information.
- Working software is the primary measure of progress.
- The development processes should be so efficient it is sustainable indefinitely.
- Continuous attention to technical excellence.
- Simplicity--the art of maximizing the amount of work not done--is essential.
- The best architectures, designs, and requirements emerge from self-organizing teams.
- Reflect regularly as a team on how to be more efficient.
Software Engineer Job Description
Even in job descriptions, the terms software engineer and software developer are sometimes used interchangeably, but a deeper dive into the job description itself should reveal which of these two roles an organization is actually hiring for. Here are some of the skills, qualifications, and responsibilities you may find in a software engineering job description.
Software Engineer Skills and Qualifications
- Experience creating and maintaining IT architectures and databases
- Problem-solving skills
- Pattern design and experience with cloud-based infrastructure
- Embedded development/debugging experience
- Experience on multi-core CPU or SMP
- Knowledge of multiple programming languages including C/C++
- Design, develop, unit-test, and maintain embedded networking software
- Work closely with the QA team in developing test plans
- Liaise with product marketing and customer success teams
- Work across teams to provide technical guidance and support the entire development process of the product
What’s a Software Developer?
Now we know what a software engineer is, but what about software developer?
If a software engineer is the architect, a software developer is the carpenter. They execute plans by programming individual components of the system and ultimately bringing the solution to life.
In general, developers are not responsible for designing the whole system. Instead, they focus only on a single project as part of the whole. To build out a software solution, they rely less on math and science principles and more on informal methods. They do not need to prove the viability of their design with empirical evidence and are given more creative reign in building the software as they see fit.
Whereas engineers design, liaise, oversee, and head-up the project, software developers are getting their hands dirty writing code to bring the project to life.
Software developers must analyze the software requirements given to them and determine how to build specific functions of the system. They should possess a mastery of at least one front-end or back-end programming language and be familiar with agile development practices and test-driven development.
During the build process, software developers will likely work closely with graphic designers, customer representatives, product managers, senior managers, and decision makers. And because building software is an iterative process with changing requirements, developers must have good communication skills and be receptive to feedback from all these team members (and from users).
As their experience grows, a software developer may begin to design pieces of the solution’s architecture and manage multiple parts of the system, thereby taking on the responsibilities of an engineer and eventually moving up the ladder.
Software Developer Job Description
As we’ve discussed, developers usually perform a specific function, such as front-end development or back-end development, within the larger IT system and may specialize in a certain development framework to complete that function. These specialties are reflected in job posts, with companies posting ads for roles like “Back-End Java Developer” or “Front-End React Developer.”
These are some of the skills, qualifications, and responsibilities that may be found within a software developer job description.
Software Developer Skills and Qualifications
- Able to write clean, maintainable code
- Experience building the front end of applications with ES2015+, NodeJS, jQuery, HTML5, and CSS3
- Experience in front-end tooling and workflows with Git, Grunt/Gulp
- Experience in responsive web design
- Understanding of cross-browser compatibility
- Contribute to continual improvements of the UI architecture
- Explore cutting-edge front-end technologies to create new innovative features
- Build tools for improving internal productivity
- Participate in rapid iterative prototyping based on project requirements
- Collaborate with designers, front-end engineers, product managers, and QA engineers to maintain a quality UX
What It All Comes Down To
It all comes down to the background training and the different scope of responsibilities of the two positions. In almost all cases, the role of software engineer includes the skills of a software developer. However, a developer does not necessarily have the technical knowledge and experience to perform the engineering role of design and managing an entire system.
Some IT professionals equate senior software developer with software engineer, while others will insist that these two terms represent a different job function and experience level.
In practice, the terms are used interchangeably, and you won’t make any friends pointing out where someone has used the wrong title. That being said, if you take pride in your expertise, it’s reasonable to have a discussion with your manager or colleagues about your preferred title.
What’s most important is that you grow in your craft and work with a team that loves making software as much as you.
Thinking about a mid-career change? Check out this post on how to build your skills and enter a new job market.