Software organisations have traditionally treated implementation capacity as a primary constraint. Roadmaps were limited by the number of engineers available to translate requirements into code. More capacity generally meant more output.
AI-assisted development changes that equation. It does not make engineering free, and it does not remove the cost of owning software. It does make plausible implementation available much more quickly. The constraint moves downstream.
The scarce resource is increasingly the ability to decide what should exist, preserve a coherent model as it grows and establish that important behaviour is actually correct.
Producing code and creating controlled change are not the same activity
Code is only one intermediate representation in a longer chain. A useful change begins with an understood problem, modifies a system with existing obligations and ends with behaviour that the business can operate safely.
Faster implementation helps, but it can also conceal unresolved work:
- ambiguous business rules become multiple locally reasonable implementations;
- generated components introduce overlapping concepts and inconsistent boundaries;
- tests prove examples while leaving system-level invariants unstated;
- integrations are added faster than failure and recovery behaviour can be modelled;
- documentation describes intention while runtime behaviour continues evolving;
- code volume grows faster than any person can review in context.
The organisation may appear faster while becoming less able to predict the consequences of change.
Implementation throughput is valuable. It becomes dangerous only when it is mistaken for decision throughput.
The new bottleneck is coherence
A coherent system does not require one grand design or a perfectly uniform codebase. It requires important concepts to have stable meaning.
Where is customer balance authoritative? What constitutes final completion of a transaction? Which service owns a lifecycle transition? What does “active” mean across product, billing and access control? Which event can be replayed safely, and which represents an irreversible economic action?
These questions are not answered by generating more code. They require explicit choices, cross-system reasoning and evidence from the running system.
As implementation becomes easier, the cost of ambiguity rises. Two teams can now produce competing solutions more quickly. A temporary workaround can acquire ten dependants before anyone recognises it as architecture. A vague domain term can spread through schemas, prompts, dashboards and contracts in days.
Coherence is therefore not aesthetic consistency. It is the organisation’s ability to preserve shared meaning under change.
Architecture becomes a form of compression
Good architecture reduces the number of independent facts that people must remember. A clear boundary says where a decision belongs. An invariant rules out entire classes of invalid behaviour. A stable contract allows one team to change implementation without forcing every other team to understand it.
This is why architecture matters more, not less, when code is abundant. Without effective compression, every new capability expands the amount of context required to make the next safe change.
The useful architectural questions are practical:
- Which concepts need one authoritative definition?
- Which operations must remain atomic from a business perspective, even if technically distributed?
- Where should variability be allowed, and where would it create uncontrolled combinations?
- What must be observable to distinguish delay, failure and partial completion?
- Which dependencies need an explicit replacement or migration path?
Answers create constraints. Those constraints are not bureaucracy; they are what allow high velocity without unbounded interpretation.
Verification does not scale automatically with generation
AI can produce tests as quickly as it produces implementation. That improves coverage, but it does not guarantee that the right properties are being tested.
A generated test often confirms the local behaviour implied by the generated code. It may reproduce the same mistaken assumption. It may exercise normal examples without challenging concurrency, ordering, partial failure, historical migration or cross-service consistency.
Verification therefore needs a different source of authority. Critical properties should come from the domain and the operating model:
- economic effects occur once, even when requests are retried;
- balances reconcile across authoritative records;
- permission changes cannot be bypassed through an older path;
- a lifecycle cannot enter an impossible combination of states;
- every irreversible action has sufficient evidence and auditability;
- recovery restores business correctness, not merely process execution.
These properties guide tests, monitoring, reconciliation and incident analysis. They are a product of judgement, not code volume.
Senior engineering work moves toward selecting and constraining
When implementation was slow, senior engineers often spent a large part of their time producing difficult code. That remains necessary in some domains. But the leverage increasingly comes from work that shapes many future implementations:
- defining domain and system boundaries;
- making critical invariants explicit;
- selecting where generated code is appropriate and where stronger control is required;
- designing migration and rollback paths;
- reviewing assumptions that cut across components;
- deciding which complexity should not be introduced;
- building evidence that allows the organisation to trust runtime behaviour.
The highest-value contribution may be a decision that prevents five plausible but incompatible implementations from entering the codebase.
Metrics should follow the changed constraint
Lines of code, ticket completion and feature count become even weaker management signals when production is accelerated. They reward visible output while ignoring the growth of future coordination cost.
More useful questions include:
- How quickly can the team establish the impact of a proposed change?
- How many critical behaviours have explicit owners and invariants?
- Can failures be diagnosed from system evidence rather than individual memory?
- How much work is required to replace a vendor, migrate a data model or change a core rule?
- Does delivery increase or reduce the set of feasible future options?
These are harder to count, but they describe the organisation’s ability to keep moving after the easy functionality has been produced.
Code still has a carrying cost
Saying that code is less scarce does not mean code is cheap to own. Every line can create maintenance, security, migration and comprehension obligations. Rapid generation can lower the cost of acquisition while increasing the inventory that must be governed.
The rational response is not to slow all development. It is to become more selective about what enters the permanent system. Some code should remain experimental. Some should be replaced once the learning is complete. Some critical paths deserve deliberately narrow designs, even when broader functionality is easy to generate.
The decision that matters
The advantage of AI-assisted engineering is real: more hypotheses can be tested, smaller teams can build more and implementation no longer dominates every schedule.
The corresponding management challenge is also real. When code is abundant, judgement becomes the limiting factor. The organisations that benefit most will not be those that generate the largest codebases. They will be those that turn faster implementation into controlled learning and preserve a system that can still be understood, challenged and changed.
The appropriate conclusion follows the system, the evidence and the decision — not a pre-packaged diagnosis.
Start with the problem →