How AI will change software engineering (Engineering)
I watched an interesting interview with Martin Fowler about what LLMs and coding agents are actually changing for engineers and team leads. Gergely Orosz interviewed him for the Pragmatic Engineer podcast. It was a packed conversation (just right for watching at 2x speed). Here are the main points.
🤖 AI is the biggest shift in software development since high-level languages Fowler puts the current wave of AI on a par with the move from assembly language to Fortran/C: it is a new way of working with code, rather than “another tool in the IDE.”
🎲 Code generation becomes nondeterministic: think in terms of tolerances An LLM does not guarantee the same output for the same request. Fowler suggests borrowing the ideas of tolerances and safety margins from traditional engineering: decide in advance where variation is acceptable and where you need strict determinism and additional checks, especially for security.
👩💻 Tests matter more than ever Tests now provide a safety net for both people and the model. Any LLM-generated code should go through the same automated tests, static analysis and quality checks as other code—or, better still, stricter ones. Without that, the “speedup” from AI becomes technical debt you will have to deal with later. On this topic, I recommend AI Engineering, particularly the chapters “Evaluation Methodology” and “Evaluate AI Systems,” which I covered in my podcast review of the book.
🤖 AI + deterministic tools > AI alone One key pattern is to have the LLM draft the code, then use predictable tools for safe changes at scale: migrations, refactoring and formatting.
👾 LLMs are especially useful for legacy code and refactoring AI delivers excellent results when refactoring old monoliths: it can make sense of odd dependencies and draft refactorings and migrations, for example, for a move to a new framework or architectural pattern. But people still decide where to take the system and what counts as an acceptable target design.
💯 Vibe coding is for prototypes, not production Vibe coding means building a solution mostly by talking to an agent or IDE, while barely reading the resulting code. It can make prototypes and one-off projects incredibly fast to build. But shipping that code to production without review and tests is a sure route to bugs, vulnerabilities and maintenance problems.
📚 An engineer’s core skills have not changed Despite the AI hype, Fowler argues that the same skills still matter: understanding the domain, designing abstractions and architecture, making considered trade-offs, and communicating with the business and the team. LLMs make strong engineers more effective; they do not replace those skills.
🔁 Agile is still about feedback and learning; the cycle is just faster Agile’s basic principles—short iterations, collaboration with the customer and continuous learning—still hold. LLM tools simply speed up the “think → sketch → check → rewrite” cycle. They do not replace direct feedback, pair programming or retrospectives.
🧠 AI does not remove the need to learn programming yourself Fowler stresses that software development is always a learning process. If you constantly outsource your thinking to AI, you never build an internal model of the system. The team soon hits a maintenance cliff: the code exists, but the understanding does not. Tools can help you move faster, but they cannot do the learning for you.
🚀 Advice for team leads: start with low-risk uses Start adopting AI for documentation, tests, snippets, migrations and legacy code, rather than critical business workflows. Invest in automated tests, observability and engineering culture at the same time, so the benefits go beyond a one-off impressive demo.
🌱 Advice for junior developers: do not become mere “prompt operators” AI can be a great tutor for beginners: ask it to explain unfamiliar code, show alternative solutions or come up with exercises. But if you only write prompts and never work out what is happening under the hood, you will not progress to a mid-level or senior role. You need to make your own attempts, mistakes and refactorings.
#Architecture #Software #AI #Engineering #ML #Data #SystemDesign