back to reflections

The Iceberg Under Every Codebase

We only ever see the surface of the software we use. That illusion of simplicity is why people think AI can solve any software problem — and why developer jobs aren't going anywhere.

When you interact with a piece of software, you see a surface. An API endpoint. A login screen. A dashboard that loads in under a second. Everything looks clean, contained, almost obvious. And because it looks obvious, it's easy to conclude that building it must be straightforward too. This is the illusion. And it's everywhere.

Beneath every polished interface is an iceberg of complexity that you never see. Rate limiting, retry logic, cache invalidation, edge cases in timezone handling, database migrations that took three attempts to get right, a race condition that only surfaces under specific load patterns on a Tuesday. None of this is visible from the outside. But it's what makes the thing actually work.

The problem is that this illusion has gotten dangerously convincing in the age of AI. People look at what LLMs can do — generate code, scaffold projects, wire up APIs — and conclude that practically any software problem is now solvable. Just describe what you want and the machine builds it. Easy.

Not even close.

AI is exceptional at working with the surface. It can generate the parts you can see, describe, and spec out. But the iceberg below the waterline? The subtle interactions between systems, the failure modes that only emerge in production, the bugs that require a very specific observability setup just to detect? AI doesn't know those exist. And you won't know either, until something breaks in a way that no stack trace can explain.

Identifying these problems isn't just about being smart or experienced. It's about having the right setup. The right logging. The right monitoring. The right test infrastructure that can surface issues before they become incidents. Without these, the problems below the waterline are not just difficult to fix. They're impossible to even find.

This is exactly why developer jobs don't disappear in the age of AI. If anything, they become more critical. More code is being written than ever before. Agents churn out pull requests by the hundreds. But more code means more surface area for hidden complexity, more icebergs, more things that can go wrong in ways nobody anticipated.

Someone still needs to understand the system below the waterline. Someone still needs to build the infrastructure that makes invisible problems visible. And someone still needs to look at a production incident and know, from experience, that the real cause is three layers deeper than where the error showed up.

AI writes code. Developers understand systems. Those are not the same thing.