The Project That Outgrew Its Reviewer

Something occurred to me recently while thinking about a particularly ambitious AI-assisted software development project.

The amount of code being produced was extraordinary.

Features that would once have taken weeks of concentrated programming effort were appearing in remarkably short periods of time.

And the project wasn't just a collection of simple functions.

It involved architecture, interfaces, supporting components, integration points, and all the other things that make a substantial application work.

It was impressive.

But as I considered how rapidly something like this could evolve, another thought occurred to me.

There was no realistic way that any one developer was going to personally inspect and understand every line of code in the finished product.

Not once.

And certainly not continuously as the project kept evolving.

That realization bothered me more than I initially expected.

The Way I've Always Thought About Code

I've spent more than forty years developing software.

During that time, I've worked with plenty of complex systems and more than a few large codebases.

I'm accustomed to reading source code when I want to understand how something works.

If a function behaves unexpectedly, I look at the implementation.

If something doesn't make sense, I trace the logic.

If I suspect a problem, I try to determine exactly what the program is doing and why.

That has always been one of the foundations of my confidence as a programmer.

I don't necessarily have to believe what someone tells me the code does.

I can examine the code myself.

Of course, that approach has always had limits.

I've never personally inspected every line of Windows, every library I've used, or every component involved in building one of my applications.

But within my own projects, I've generally felt that I could get my arms around the important parts.

AI is changing the scale of that assumption.

What Exactly Am I Reviewing?

As I've become more involved in AI-assisted development, I've found myself spending less time personally writing individual functions and more time reviewing plans, architectural decisions, implementation reports, test results, and completed features.

That's an important productivity improvement.

But it introduces an uncomfortable question.

When an AI agent reports that it has implemented a feature, compiled the application, and passed all its tests, what exactly have I verified?

I know what the agent says it did.

I may have a list of changed files, a description of the implementation, and a summary of the test results.

But none of those things, by themselves, establish that the implementation is correct.

The agent might have misunderstood the requirements.

It might have written tests that confirm its own misunderstanding.

It might have introduced an unnecessary dependency or duplicated functionality that already existed elsewhere.

It might even have completed the requested feature while creating a problem in another part of the application.

I've seen enough AI-assisted development to know these are realistic concerns.

And the larger the project becomes, the harder it is to rely on personal inspection as the answer to every one of them.

The Problem That Isn't a Bug

One aspect of this has particularly influenced my thinking.

Suppose we've established that a particular capability must be provided by a shared component.

We make that decision because we want consistent behavior, fewer duplicated implementations, and one place to maintain the functionality.

Then an AI agent working on a new feature decides to create its own implementation.

Perhaps it doesn't know the shared component exists.

Perhaps it has incomplete context.

Perhaps writing something new simply appears to be the easiest way to finish its assignment.

The result might work perfectly well.

It might pass every test.

And it would still be the wrong implementation.

That's the part that interests me.

We tend to think of software quality in terms of whether the program works correctly.

But there are important ways for software to be wrong even when the immediate results look right.

An implementation can violate an architectural decision.

It can create unnecessary maintenance obligations.

It can introduce security or consistency risks that won't become apparent until much later.

And an AI agent can report a successful assignment without recognizing any of those problems.

In other words, we can have software that works today while quietly making the application harder to trust tomorrow.

A Different Kind of Review

This has been pushing me toward a different way of thinking about development control.

Rather than expecting AI to remember every rule we've established, I want the important rules to become part of the development process itself.

If a shared component must be used, that should be an enforceable architectural requirement where practical.

If a worker isn't authorized to introduce a new dependency, the build or review process should make that violation visible.

If a feature is supposed to meet specific acceptance criteria, those criteria should exist independently of the implementation that the AI produces.

And if an agent reports that everything passed, I want to know exactly what was tested and what evidence supports that conclusion.

Notice what's happening here.

I'm not abandoning code review.

I'm trying to make sure that code review is no longer the only thing standing between a large AI-assisted project and an unfortunate surprise.

The code still matters.

But so do the rules governing how that code is produced, how components fit together, and how the results are verified.

What I Can and Cannot Claim

There is something else that I think developers need to be careful about.

It's the temptation to claim more confidence than our evidence justifies.

If I haven't personally reviewed an implementation, I shouldn't imply that I have.

If an AI agent performed a test, I should distinguish that from a test I independently designed or observed.

If I have a successful build report, I shouldn't confuse it with proof that the application is ready for production.

And if I don't understand a particular architectural decision, I need to acknowledge that before accepting it.

None of this means that I must personally perform every task.

Quite the opposite.

The whole point of using AI is that I can accomplish more than I could reasonably accomplish alone.

But delegating the work doesn't give me permission to stop asking whether the work was done correctly.

It changes how I have to answer that question.

The Responsibility Is Still Mine

I think we're approaching a point where some experienced developers will find themselves directing software projects that are substantially larger than anything they would previously have attempted on their own.

That's exciting.

It's also a little intimidating.

I can imagine how easy it would be to become so impressed by the speed of development that we stop paying enough attention to the quality of the evidence.

A feature is completed.

The tests pass.

The application looks good.

The next feature is already underway.

And somewhere along the way, we may lose track of whether we actually understand the system we're building.

I don't want that to become my development methodology.

I want to take advantage of what AI makes possible without surrendering the professional judgment I've spent decades developing.

That means becoming more disciplined about specifications, architectural constraints, verification, and acceptance.

Not because AI is inherently incapable of producing good software.

But because it is capable of producing so much software that our old habits of supervision may no longer be sufficient.

The Question I Keep Coming Back To

I used to think that one of the advantages of being an experienced programmer was knowing that, when necessary, I could sit down and work my way through the source code until I understood what was happening.

I still believe that's an important skill.

But I'm beginning to recognize that it can no longer be the foundation of the entire development process.

Not when AI can produce and modify software faster than I can reasonably inspect it.

And not when the complexity of modern applications extends far beyond the individual functions that make them work.

So I've been asking myself a different question.

If I can't personally examine every part of a system, what evidence would convince me that the system is doing what it's supposed to do?

That's not a question I would have expected to become so central to my work after more than forty years of programming.

But here we are.

And I suspect answering it well is going to be one of the most important skills for developers who want to make serious use of AI.

The challenge isn't simply learning how to produce more code.

It's learning how to remain responsible for software that has grown beyond our ability to personally inspect every line.


Related Guide: When No One Can Read All the Code, Who Is Responsible?