← All articles
AI

Engineering Methodology in the LLM Era: Why Your Abstractions Are Now Technical Debt

Mar 20, 2026 · 4 min read
Engineering Methodology in the LLM Era: Why Your Abstractions Are Now Technical Debt

For 40 years, we built software to compensate for human frailty.

We created deep inheritance trees, complex ORMs, and "Clean Architecture" layers not because the computer needed them, but because humans couldn't keep 20 files in their heads at once. We built abstractions as "organizational buckets" to help us navigate complexity.

In 2026, that era may be over. LLMs have fundamentally shifted the cost-benefit analysis of software design. If an AI can instantly find, understand, and update 20 call sites perfectly, the "human cognitive load" argument for abstraction collapses.

Here are the 4 principles for engineering in the LLM era:

1. The "Small Procedural Program" is King

We used to fear "duplicate code". Now, we should fear "hidden intent". The strongest design pattern today is the oldest: small, procedural programs where control flow is visible from top to bottom. Instead of a 4-layer repository pattern, write a function that opens a connection, validates the input, and executes the SQL.

Why? An LLM reads and understands a top-to-bottom script immediately. It can struggle to reconstruct a "dispatch chain" across multiple levels of indirection.

The Rule: Abstraction is not justified when it merely organizes code for human navigation. If the LLM handles the comprehension, those layers are just overhead.

2. Abstraction is for Contracts, Not Organization

Does this mean we stop using objects? No. But we change why we use them. Abstraction is justified only when it encodes a semantic contract or enforces a constraint. A struct that validates a name or email address is still vital — not because it's "cleaner," but because it represents a truth about what a valid User is.

3. Proof > "It Seems to Work"

"It seems to work" was never an engineering statement, but with LLMs generating code, it's a dangerous liability. An LLM might update 19 files correctly and get the 20th subtly wrong.

The Fix: Working code isn't code that compiled; it's code you can prove.

The Requirement: Every function must be testable under known conditions, including failure paths. Without tests, "the LLM handled it" is not an engineering statement.

4. Intent is a First-Class Artifact

In the past, we hid the "Why" inside documentation that lived in a separate silo. Now, Intent must live in the code.

A comment explaining why a customer with a pending order cannot be deleted is now more valuable than the code performing the deletion. Why? Because when you migrate from one database dialect to another — a task LLMs have made trivial — the AI needs to know the regulatory rules, not just the syntax.

The Bottom Line

We should be moving away from "Sophisticated Complexity" toward "Rigorous Simplicity".

Don't build for the developer who can't find the file; build for the LLM that can find everything but needs to be told exactly what the boundaries are.

Complexity is not sophistication. The simplest code that correctly encodes the contract is the right code.