Back

AI can write the code, but your company still owns the consequences.

September 7, 2026

Software used to be expensive to produce because writing code took time. AI coding tools have changed that constraint.

A developer can now describe a feature, generate an implementation and see it running within hours. A founder can turn an idea into a prototype over a weekend. A team can produce more code without adding more people.

That speed is real. So is the risk of confusing generated software with engineered software.

AI can produce code that works under the conditions it has been shown. It cannot guarantee that the system will remain secure, reliable and maintainable under the conditions it has not seen.

The organisation deploying the software still owns those consequences.

Generating software is not the same as engineering it

Code generation answers a relatively narrow question:

Can we produce an implementation that performs this task?

Software engineering has to answer a much larger set of questions:

  • How does this implementation fit into the wider system?
  • What happens when a dependency becomes unavailable?
  • Which data can each user or service access?
  • How will the system behave under load?
  • How will failures be detected and resolved?
  • Who will maintain it six months from now?
  • Can the organisation explain and defend the decisions behind it?

An AI coding tool can produce a convincing solution without understanding every constraint surrounding it. It sees the prompt, the context it has been given and perhaps part of the codebase. It does not necessarily see the company’s operational history, security model, contractual obligations or long-term architectural direction.

The generated code may be correct locally and still be wrong for the system.

That distinction becomes more important as generation improves. Poor code is easy to question. Plausible, polished code creates confidence before it has earned it.

What AI-generated code often leaves unresolved

The most dangerous problems are rarely obvious syntax errors. Modern tools are already good at avoiding those.

The real problems sit around the code: in its assumptions, boundaries and behaviour when reality becomes less cooperative than the demonstration.

Hidden architectural assumptions

Generated code often makes reasonable-looking assumptions about how a system should work.

It may introduce a new dependency where an existing internal service should have been used. It may place business logic inside a controller because that is the shortest route to a working result. It may solve a local problem by creating another source of truth.

Each decision can look harmless in isolation. Together, they gradually make the architecture harder to understand, maintain and change.

Missing failure handling

The happy path is easy to generate. Production is mostly everything that happens outside it.

What happens when an API times out halfway through a transaction? When the same event is delivered twice? When a user retries an action? When a background job fails after partially updating the database?

Without deliberate failure handling, working software can produce duplicate records, lost updates and inconsistent states that cannot be recovered automatically.

Weak security boundaries

AI can generate authentication checks and validation logic. That does not mean it understands the organisation’s complete security model.

A route may verify that someone is logged in without confirming whether they are allowed to access a particular account. A service may trust data received from another internal component. Secrets may be handled correctly in one file and exposed through logging in another.

Security depends on consistent boundaries across a system. Local correctness is not enough.

Inconsistent data models

AI-generated features can create fields, states and relationships that make sense for the immediate task but conflict with the rest of the product.

One feature may call a customer “active” after payment. Another may consider them active only after onboarding. A generated migration may add a nullable field even though downstream systems assume it is always present.

These inconsistencies do not always cause immediate failures. They create ambiguity, and ambiguity becomes more expensive as the system grows.

Insufficient testing and documentation

AI can generate tests, but generated tests often confirm the behaviour of the generated implementation rather than challenge its assumptions.

A test suite may cover expected inputs while ignoring permissions, concurrency, malformed data, degraded dependencies and recovery. Documentation may explain what the code does without recording why the design was chosen or where its limits are.

Coverage is not assurance. Documentation is not useful merely because it exists.

“It works” is the beginning of review

A working prototype proves that an idea can be implemented. It does not prove that the implementation belongs in production.

Once the feature works, the more important questions begin.

Does it fit the architecture? Does it preserve the system’s security boundaries? Does it fail safely? Can the team observe its behaviour in production? Can it be rolled back? Can another engineer understand and maintain it? Is there a named owner when something goes wrong?

This is not an argument for slowing AI-assisted development down until it resembles the old way of working. It is an argument for applying scrutiny where it creates the most value.

If code becomes cheaper to generate, organisations will generate more of it. Review, integration and operational assurance therefore become more important, not less.

The bottleneck moves. It does not disappear.

The new role of experienced engineers

When AI handles more implementation work, experienced engineers do not become less necessary. Their value shifts away from producing every line manually and towards directing, evaluating and assuring the system.

Their work increasingly involves defining constraints before generation begins, breaking problems into safe boundaries and identifying assumptions hidden inside plausible solutions.

They review how a change affects the wider system rather than judging an isolated file. They design failure and recovery paths. They protect architectural coherence. They decide what evidence is required before deployment and who will own the result afterwards.

This requires judgement built through experience: recognising the kind of decision that looks efficient today but creates an expensive constraint later.

The strongest engineer in an AI-assisted team may write less code than before. They may also have more influence over the quality of everything that reaches production.

Human assurance makes AI’s speed usable

The answer is not to inspect every generated line with the same intensity. That would turn review into the next bottleneck.

The level of assurance should follow the potential consequence of failure.

A low-impact internal tool does not need the same controls as a payment system. A reversible interface change should not go through the same process as a migration that rewrites customer data. The more sensitive, interconnected or difficult to reverse a change is, the stronger the evidence required before it reaches production.

This is how teams preserve speed without accepting invisible risk.

Architectural rules and secure patterns can be provided before generation begins. Repeatable checks for tests, dependencies, vulnerabilities and policy violations can be automated. High-impact and irreversible decisions can be escalated for experienced human review.

Staged releases, feature flags and production monitoring reduce the cost of unexpected behaviour. Clear ownership ensures responsibility does not disappear somewhere between generation and deployment.

These controls do not work against AI’s speed. They make that speed sustainable.

AI should reduce the cost of implementation. Human judgement should determine whether the result is safe to depend on.

Generation creates speed. Assurance turns that speed into software an organisation can trust.

AI changes who writes the code. It does not change who answers when the code fails.

Build faster without losing control

If your organisation is using AI to build, modernise or scale software, Itsavirus can help you turn rapid development into reliable production systems.

We combine AI-enabled delivery with experienced engineering oversight across architecture, security, deployment and long-term ownership.

Talk to Itsavirus about building software that moves quickly and remains dependable when it matters.

Author

Chairunnisa Irianto

Nisa is a Marketing Manager at Itsavirus, a strategic software development partner working with companies across Europe and Southeast Asia. She writes about AI, application modernisation, and how businesses turn technology into practical results.

Latest insights

A sharp lens on what we’re building and our take on what comes next.

See more
How to build a knowledge base that gets smarter over time with Obsidian and Claude Code
Your AI keeps forgetting. Here's how to stop repeating yourself
OpenClaw is exciting. But, here's what you need to secure before you experiment

Latest insights

A sharp lens on what we’re building and our take on what comes next.

See more
Build, buy, or fine-tune: a simple way to choose the right AI approach
Cheaper tokens, bigger bills: the real economics of AI in software delivery
Making applications AI-ready: data, APIs, and governance requirements

Latest insights

A sharp lens on what we’re building and our take on what comes next.

See more
Choosing an AI model just stopped being simple, and 25 US tech companies are fighting to keep it that way
Claude Fable 5: Launched, praised, then pulled within 3 days
Dashboard showing wildfire anomaly alerts across Indonesia, generated from NASA satellite data by the open-source WildfireDetect system.
We built an open-source wildfire detection system. Here is what we learned.

Latest insights

A sharp lens on what we’re building and our take on what comes next.

See more
Workshop : From Idea to MVP
Webinar: What’s next for NFT’s?
Webinar: finding opportunities in chaos

Latest insights

A sharp lens on what we’re building and our take on what comes next.

See more
How we helped Ecologies to turn survey results into reliable, faster reports using AI
How to deal with 1,000 shiny new tools
Develop AI Integrations with Itsavirus
Is AI-generated code safe to use in production?

AI-generated code can be used in production, but it should not be deployed without review. Teams must validate its architecture, security boundaries, failure handling, tests, observability and maintainability.

Why is working code not necessarily production-ready?

Working code proves that a feature can perform its intended task under certain conditions. Production-ready software must also behave securely and reliably under load, failures, unexpected inputs and changing business requirements.

What is the role of experienced engineers when AI writes the code?

Experienced engineers define constraints, review architectural decisions, identify hidden risks and determine whether generated code is safe to deploy. Their role shifts from writing every line to assuring the quality of the entire system.