What does a software engineer do? The simple answer is that he or she is involved in software engineering, in the process of applying engineering principles to software products.
However, there’s really a wealth of detail and nuance in describing what software engineers do in the software world. We’ll get into some of that as we look at “a day in the life” of a software engineer working to create all of the great digital stuff that we use every day. (To learn more about the role from someone in the field, check out How I Got Here: 12 Questions with Writer and Software Engineer David Auerbach.)
The Software Development Life Cycle
In order to understand the role of the software engineer, it’s helpful to know about the software development life cycle (SDLC).
The software development life cycle involves various key phases, often described as requirements planning, design, coding, testing, implementation and delivery (give or take a few steps according to proprietary processes).
“Software starts with the problem we are trying to solve,” says John Quigley at Value Transformation LLC, describing the conventional software development life cycle by starting out with some of what goes on at the beginning of the process. “This will be articulated in some form of document, and is the result of interviews with customers or people that are suffering under the problem … The document will describe what the problem looks like which will help generate ideas to be compared to this for solution. This will be the objective for this work, establishing what we are trying to accomplish.”
In the requirements phase, he says, engineers set forth the specific technical description of the product, both hardware (if there is such) and software.
Then there’s coding: “The software engineers will write the specific statements in code that will produce the desired product that meets the specific requirements,” Quigley says of the coding phase.
After that, he says, is testing, and then another set of steps that brings the software solidly toward a production environment. Toward the end of the process, there is room for diverse ideas about implementation and deployment. Quigley also adds that a new “agile” model for SDLC works a bit differently.
“In the agile world, things look much [the same] but the iterations are smaller and closer together,” Quigley says. “The requirement may be handled via user stories, less technical in nature and more written to understand the application so the software engineers can make inferences and deduce key attributes needed based upon the actual use.”
The Varied Role of the Software Engineer
Since the software development life cycle has diverse phases and operations, it makes sense that the work of the software engineer varies, too.
“A Software Engineer has a broader role than most in the creation of software solution,” writes Samuel Malachowsky, a professor at the Rochester Institute of Technology. “Each element of the SDLC has specialists: REs and sales for initial steps, architects for the design phase, coders/programmers for the build, QA for verification/testing, IT for deployment/maintenance, and project managers for the movement and management of each team member/phase, but Software Engineers are expected to apply themselves broadly to the entire process. Given this viewpoint, a better question might be to ask what a Software Engineer doesn’t do.”
Here’s another interesting point Malachowsky makes about the difference between IT and software engineering that reveals a lot about what the average software engineer’s job is like:
“IT is operational and repetitive, whereas engineering revolves around new problems to be solved as unique projects,” he says. “IT personnel are much more likely to seek individual tool-based certifications because of this repetition. Contrasting with something like Computer Engineering looks where the requirements are fulfilled – CEs tend to focus on solving the problem with hardware, with software supporting it. SEs solve the problem with software, with hardware providing support.”
The Software Engineer and Project Teams
In many companies, software engineers are grouped and delegated roles according to their part in the complex process.
Brennan Meagher describes an example from TeleTracking, a company making headlines in healthcare innovation at Fierce Healthcare, American College of Emergency Physicians, Health Data Management, Healthcare IT News and elsewhere.
“At TeleTracking, software engineers are responsible for coding and testing of all modules and applications that are part of the TeleTracking platform,” Meagher says. “They also assist in the development of software solutions and productions. This includes researching, designing, documenting and developing new software. In short, our software engineers create the software solutions that align with TeleTracking's technical vision for improving access to patients.”
You can picture these professionals at a corporate campus, first drafting, then tweaking the model, then testing, in teams, carefully shepherding a project along to completion.
“An example of something that software engineers are regularly responsible for may include: writing, debugging, unit testing and performance test codes in all applications layers,” Meaghan says. “This includes the front end (web), middle layer (web services) and data access layers.”
The bottom line is that software engineers have varying, specialized jobs. They all need to understand some of the basics of coding, but some of them need to delve into the specifics of testing, or the transparency of design requirements, or in some cases, the world of agile development.
Then the DevOps model came along, and merged a lot of the iterative processes that were very specifically outlined and categorical in the conventional model. So the role of software engineer is changing. (To learn more about DevOps, see DevOps Managers Explain What They Do.)
This gives you a little to go on when you set out to learn more about the work of these central professionals in software production. The software engineer has been described as the “Swiss Army knife” of design and software creation – and can end up wearing many hats in a busy company.