AI · Software development · Architecture · Code

AI writes remarkably good code now. But it still cannot develop software on its own.

AI is transforming programming. Why code generation is still only one part of professional software development.

A developer arranging AI-generated code blocks within a software design

There are tasks for which, a few years ago, I would have opened the documentation, consulted a search engine and then spent twenty minutes experimenting.

Today, I describe the problem to an AI and get a useful approach a few seconds later.

That is impressive.

And sometimes a little unnerving.

Anyone who develops software and ignores AI tools altogether is now giving up quite a lot of productivity. At the same time, I think it is wrong to imagine that software development is therefore becoming little more than automated code production.

Because code was never the product itself.

Writing code has always been only one part

From the outside, software development appears to consist mainly of programming.

That is understandable. Code is the visible, hands-on part of the craft.

In real projects, though, a surprising amount of time is spent on other things.

What is the application actually meant to do?

What does the client really mean by their requirement?

Which pieces of data belong together?

Which failure cases need to be considered?

Which technical decision will cause pain two years from now?

And sometimes the most important question of all:

Do we really need this feature?

AI can help with many of these questions.

That does not mean it gets to make the decisions.

AI is exceptionally good at making plausible suggestions

That is both its strength and its danger.

A good AI answer often looks convincing.

The code is neatly formatted. The variable names make sense. The pattern looks familiar. There may even be an elegant explanation to go with it.

And yet the solution can still be wrong.

Not necessarily syntactically. That would be easy to spot.

It can be wrong in terms of the actual problem.

It may miss a constraint that was never stated explicitly. It may use a library that the project deliberately avoids. It may make a security assumption that does not hold here.

Plausibility is not the same as correctness.

The same was true of answers on forums, by the way. AI simply produces much more plausible text, much faster.

The prompt rarely contains all the context

An established software project holds a great deal of implicit knowledge.

Why was this class structured this way?

Why is an apparently cumbersome method being used?

Why must a particular process not run in parallel?

Perhaps it is recorded in an architecture decision.

Perhaps in a ticket from 2021.

Perhaps only someone who was there at the time still knows.

An AI can only work with the context it is given.

The better that context, the better the result.

This brings about an interesting shift: the ability to describe a problem clearly is becoming more important.

If you do not know exactly what you are trying to achieve, an AI may give you an excellent solution to the wrong problem in no time at all.

Speed changes the kinds of mistakes we make

In the past, implementing an idea sometimes took long enough that you inevitably had to think about it along the way.

Today, a prototype can take shape at astonishing speed.

That is brilliant.

But it also means that bad ideas can acquire a remarkably professional finish much sooner.

Within a day, a technical dead end can be developed far enough to feel like a product emotionally.

That makes a skill which is only indirectly related to programming more important: knowing when to stop early.

Not every idea that works deserves to be developed further.

Where AI really excels

I particularly enjoy using AI where it removes friction from day-to-day development.

Generating boilerplate.

Preparing tests.

Explaining an unfamiliar API.

Analysing existing code.

Comparing alternative implementations.

Drafting documentation.

Collecting hypotheses about a bug.

Or simply getting a second perspective on a technical decision.

These are valuable tasks.

For me, AI replaces less the developer than some of the detours developers have had to take until now.

The most dangerous sentence is: “Looks good.”

Generated code needs to be read.

That sounds obvious. In practice, its speed creates a new temptation.

When an AI produces a hundred lines of code in seconds, taking the time to review those hundred lines properly afterwards can feel slow.

That is exactly what needs to happen.

I want to understand the assumptions behind it.

I want to know how errors are handled.

I want to see which dependencies are introduced.

And, if necessary, I want to be able to continue developing the code without AI.

Otherwise, I may have saved development time, but I have lost understanding.

That is not a particularly good trade.

Software development is also product thinking

An AI can easily programme five versions of a dialogue.

The harder question is: which of them should exist at all?

Should a setting be visible?

Should it be selected automatically?

Does the user need another option, or are we simply creating one more decision?

Code alone cannot answer these questions.

They depend on people, situations and goals.

When developing my own products, I keep noticing just how much time goes not into implementation, but into making these kinds of decisions.

And that is a good thing.

AI will change developers

I do not think much of the question of whether AI will “replace” developers.

It is too crude.

The more interesting question is how the role will change.

When code can be produced faster, more of the value shifts to what comes before and after.

Understanding problems.

Shaping architecture.

Assessing results.

Maintaining quality.

Scoping products sensibly.

Taking responsibility.

That does not mean programming skills are becoming unimportant.

Quite the opposite.

Anyone who wants to judge whether generated code is any good should understand what is happening in it.

Perhaps this will make software development more interesting

On balance, I am optimistic about this development.

Many repetitive tasks can be sped up.

Experimenting becomes cheaper.

Individual developers can build things that would have required considerably more resources in the past.

That opens up possibilities.

But good tools do not replace good decisions.

A cordless screwdriver does not automatically make anyone a carpenter, after all. It simply means that driving screws takes less time.

AI is, admittedly, a rather more impressive cordless screwdriver.

The basic idea is still much the same.

It can help us enormously.

We still have to understand what we build with it.