The Evolution of Software Engineering


I have been involved in software development for over 25 years now. When I started, I and others could best be called programmers. The role was heavily focused on writing code and making things “work”. Statements like “FTP the files to the server” were common, and so too was the disgruntled “…it worked on my computer” as alarms sounded. Development practices have come a long way, evolving the role into the more complex “software engineer”. With that in mind I had an experience last week that makes me believe we are on the edge of another big change.

In the last few weeks, my team (along with the whole world) has been experimenting with AI. Within software engineering, there is a regularly used experimental approach called a proof of concept or PoC. A PoC connects a few minimal components to demonstrate a something. This gives us a chance to learn and gain confidence that it’s the right direction. I was reading a document discussing what the team had done, and I realized I had questions. How many runs did we do and what was the variation? In the cases where it varied, was it better or worse? I wanted more details about the approach and more data in general. I was looking for an evaluation framework and this made me realize I was looking for the science.

Prior to working with this team, I had previously worked with a science team, improving health-related algorithms. The staff were applied scientists with problems that required structured tests, datasets, and analysis. The first time I saw a confusion matrix, I knew I was no longer in my engineering comfort zone. When I looked at the PoC write-up, I realized I was missing that scientific design and analysis.

So why does a PoC not work? Much of “programming” has been seeking deterministic outcomes. Think about all the rigid unit tests we like to put in place. Functional programming prides itself on being very math-like. AI and LLMs are a non-deterministic and in these new settings they are being introduced as foundational components of the system. A slight rephrasing of a prompt can have a big impact on the outcome. Multiple runs may not return the same values. The world of engineering is starting to introduce technology that feels almost biological, and now we need to think about the techniques we have grown to handle unpredictability and building with unknowns.

Recognizing this, I think the industry is about to feel something impactful beyond the obvious ways that AI is helping or changing the tools we use. For a long time I have taught growing engineers that good software engineering is not just about coding. Soon I think the engineers that want to excel will also need to include the ability to leverage a scientific mindset as part of their development strategy.