Software Engineering vs Software Development

What's the difference between a software engineer and a software developer? That's a post that pops up in Reddit threads every couple of weeks. Whenever I come across a post with that question I start to think more and more about it. This last time I thought so much about it I decided to write a blog post about what I think are the differences between the two titles. But like most titles, they don't always match the job description so these are just some thoughts I have.

I used to think software engineering and software development were the same thing. These days, I approach them from a few different angles. Now, I believe that software engineering is not just about writing code. I see that as being closer to software development. Years ago, I would have been annoyed if someone tried to say they were different things. With AI agents and assisted coding, I can now see a real difference between software engineering, architecture and software development.

Software development is the act of coding preexisting requirements to build a solution. Someone gives you a requirement and as the developer, you build it out. Software engineering takes a higher-level view. It can still include development, but it also covers high level application design, requirements gathering, planning and system design. The difference is that a software engineer puts together the entire application from start to finish before handing off the jobs to other people to assemble the pieces.

A software engineer has knowledge of the domain and software development. They understand the rules, stakeholers, workflows and requirements of the business and can translate that knowledge into technical systems that work within those constraints. A developer, on the other hand, generally builds what they are told. Of course, that is not true on every team, but I am generalizing here.

This distinction is becoming more important with AI-assisted development. AI models are excellent at coding solutions when given concrete plans. So to become a software developer in the age of AI, you should become a good software engineer. If the engineer is good at problem definition and solution design, they can design the system so an AI agent can code it for them. The AI agent will not understand business problems or nuanced requirements unless the engineer explicitly defines them. This is similar to how a junior engineer or a new developer to the company will not understand business rules without guidance.

There is now a greater focus on letting AI systems handle the coding, the process of typing syntax into the IDE, while humans plan what the code should accomplish. With the write documentation and guidance this can be a great way to build software. Designing the system or code that will become your controller, component, or feature is now the most important part. You tell an agent what the end result should be and how to get there, then let the agent write the code.

But has this process really changed in the past 20 years? Yes and no. In my 20-plus years of software engineering, this is how good software is created. Someone - usually an architect or lead engineer - comes up with a detailed plan and overview of the entire system. Based on those plans, aka tech specs, the software developers code the pieces into place. If you were fortunate enough to be on a team that had the time, personelle and resources for all this of course.

I always try to spend a good amount of time on requirements planning and system design. So much of software development and engineering is about defining the problem and the solution. Once you figure out those two things, coding the solution is the easy part. In a sense, that is how it has always been. The difference now is that instead of the engineer or architect passing the requirements down to a junior developer, the architect can have the agent do the building instead of another developer on the team.