A meeting on the future of software engineering may reflect current uncertainties, but one thing, in my opinion, is clear: while the foundational principles remain as valid as ever, it is their application in practice that is challenged.
Software was never about the code; it was about the principles. Whenever I encounter unused code, I delete it—it is nothing more than unnecessary cognitive debt. I refuse to comment the code to leave it ‘just in case’ for the future; code is not an asset, it is a liability. Writing code is easy—I can produce plenty in a single afternoon. The value was never in the lines of code itself.
I love to code, but I am a ‘slow’ developer by choice. As I work, I am constantly questioning my approach: Why this way and not another? I am perpetually balancing trade-offs and reassessing my decisions to ensure they align with what came before. To me, coding is like building a narrative. A consistent story should run through the entire codebase—and even when a specific part deviates, the narrative explains exactly why. More importantly, the narrative is not necessarily in the code.
Interestingly, an LLM’s ‘delight’ is a high-quality codebase—the kind top developers have meticulously crafted over years. These models thrive when they encounter the successful translation of software engineering principles into real-world practices. They ‘love’ to trace how modularity and other architectural qualities were actually achieved.
However, this is a form of ‘blind love’—an infatuation with patterns that may or may not reflect the fundamental decisions and trade-offs at play. Consequently, the role of the software engineer is to harness the LLM’s appetite for pattern repetition while ensuring it remains anchored to sound engineering, the what and why of the system.
A profound shift is occurring in the practice of software engineering; however, the foundational principles are more important than ever—and those remain unchanged.