Software engineer, developer and a scientist walk into a bar.

Unravelling the roles: Software Engineer, Developer, Scientist

The skills required for the creation of software is one that anyone can gain. Literally, you, your parents, your friends, your children, anyone can learn. It is not a magical skill set, and can be self-taught with little more than an internet connection and the desire to solve problems. Whilst universities and boot camps are a great way to have a dedicated environment to learn, they are not required for either a software engineer or developer. But there is a distinct difference between an Engineer and a Developer. Some of my favourite sources to learn at my pace have been Pluralsight, edX, dedicated YouTube channels, and Microsoft Learn.

In a more traditional engineering sense, there is a clear demarcation of what an engineer is, compared to a designer. For example, in Mechanical Engineering, the engineer typically has a bachelor’s degree and is recognised by the engineering body. But there are also mechanical designers (sometimes called mechanical drafters). Mechanical engineers and designers have a lot of overlap, and for a number of projects you could go to either and get a fantastic result. But when your project has a broader scope, higher levels of complexity, or more guarantees around the solution you need the overview of an engineer.

But software is a new industry with few bodies that overlook and set standards that must be followed. And it can be confusing when someone says that they are a software engineer, but they do not take on complex projects and apply cookie cutter designs to all projects. I have a set of clarifications that distinguish between engineers, developers, and software scientists. This set of classifications aids in determining the tasks to give to my team, and the composition of the teams to achieve the optimal results for my clients.

In a broad sense, it is the skill sets that the individuals in the team have, how well they understand the entire problem space, their technical ability, and one of the most important, understanding the context.

Skills

Software Engineers are equipped with a broad set of skills that allow them to design, develop, and test entire computer systems and application software. They are often well-versed in various programming languages, system data, and algorithms. Their skills extend beyond coding to include project management, system design, and software architecture.

Software Developers possess a more specialized skill set, focusing on designing and building specific computer systems or application software. They are adept at coding, debugging, and testing within a specific programming language or platform.

Software Scientists, on the other hand, are primarily researchers. They focus on the very specific aspects of software and computing, such as algorithms, data structures, programming languages, and software development methodologies. They often have strong mathematical and analytical skills. Often, they are presented with a niche problem that needs dedicated research to solve.

Understanding of the Problem

Software Engineers typically work on a larger scale, tackling complex problems that involve multiple systems and software components. They are adept at understanding and solving intricate issues, often requiring a comprehensive view of the system.

Software Developers however, often work on more specific problems related to application development. They excel at understanding user needs and translating them into functional software.

Software Scientists are concerned with abstract problems and the development of new theories and methods. They gain a very deep knowledge within the niche problem space.

Technical Ability

Software Engineers are expected to have a robust technical ability, including a deep understanding of how different software technologies can be used together to create a system. They are often responsible for choosing the right technologies for the project.

Software Developers while also technically proficient, focus more on the application of these technologies. They use their technical skills to create, refine, and optimize applications.

Software Scientists, meanwhile, often work on the cutting edge of technology, developing new algorithms, data structures, and techniques. They need a deep understanding of the theoretical underpinnings of computer science.

Understanding of the Context

Software Engineers need to understand the broader context of the project, including the system’s interaction with other systems, its users, and its business or organisational impact.

Software Developers in contrast, need to understand the context of the application they are developing, such as its functionality, its users, and how it fits into the larger system.

Software Scientists need to understand the broader context of the field of computer science, including current research trends, theoretical developments, and practical applications.

Example Projects

To demonstrate how each of these would be utilised on a project, below are some examples of where they undertake a project by themselves, or tasks within a larger project.

Distributed System for Machine Learning

A system that needs to process large volumes of data and present results to the end users in a near real-time manner is one where all three types of software development are required. The Software Engineer would design the overall system architecture, ensuring that it can handle the data volume and deliver results quickly. The Software Developer and the Software Engineer would implement the services required. The Software Scientist would research the best machine learning techniques to use, and possibly develop new ones, to get the most accurate results from the data.

Website Customisation

If you have a WordPress site that needs to have some customisation such as a custom theme, or a tweak to a plugin, this is well suited for a Software Developer. Sometimes they are called Web Developers. They would understand the specific requirements of the website, design the custom theme or modify the plugin accordingly, and implement it using their coding skills.

Machine Vision AI Model

If you have a large collection of images that you want to explore the possibility of deriving value from the collection of images, this is a great example of where a Software Scientist would be a great fit. They would research the latest techniques in machine vision, possibly developing new algorithms, to extract the most value from the images. The Software Engineer and Software Developer could then take these algorithms and incorporate them into a larger system or application.