Factor
All stories
article

AI Didn’t Make Software Engineering Easier. It Made Bad Engineering Faster.

The bottleneck in software engineering is no longer moving from an idea to working code. The bottleneck is knowing what deserves to be built—and anticipating how it will inevitably break.

NNijelOct 8, 20266 min read3 reads

AI Didn’t Make Software Engineering Easier. It Made Bad Engineering Faster.

The bottleneck in software engineering is no longer moving from an idea to working code. The bottleneck is knowing what deserves to be built—and anticipating how it will inevitably break.

Gemini Generated Image dqyg7kdqyg7kdqyg

AI is changing where engineering effort goes: from producing code toward defining intent, making decisions, and verifying outcomes.


For the last two decades, the software industry has been singularly obsessed with reducing the friction of implementation. We adopted Agile to tighten feedback loops. We built robust CI/CD pipelines to automate deployments. We standardized around opinionated frameworks and invested heavily in internal developer platforms (IDPs) to remove operational overhead.

Through all of these paradigm shifts, the fundamental constraint remained untouched: engineers still had to manually translate business logic into syntax.

Today, that constraint is collapsing.

Large Language Models and coding agents like Claude, Cursor, and Copilot have commoditized the act of writing syntax. An engineer can feed a well-scoped problem into an agent and receive a working, reasonably idiomatic implementation in minutes.

On the surface, this looks like the ultimate productivity triumph. In reality, it is triggering the Jevons Paradox in software architecture:

As the cost of producing code approaches zero, the volume of code—and the corresponding system complexity—will explode.

AI hasn't eliminated the hard parts of software engineering; it has simply shifted the cognitive load from producing code to understanding, verifying, and maintaining it. If writing code is no longer the primary differentiator of a great engineering team, the value shifts entirely to a different axis: engineering judgment.


📉 The Economics of Code Generation

Historically, the sheer time it took to write code acted as a natural governor on system complexity. A poorly conceived requirement might take a developer two weeks to architect, write, test, and deploy. That two-week implementation phase provided a buffer—a window where edge cases were discovered, architectural boundaries were debated, and bad ideas were occasionally abandoned.

AI compresses that process. We can now generate a flawed implementation before lunch.

The problem we face today isn't that AI writes bad code. The more insidious danger is that AI is highly capable of writing perfectly reasonable code for the wrong problem. If you feed an agent ambiguous requirements, conflicting domain logic, and a lack of systemic guardrails, it will dutifully convert that confusion into thousands of lines of syntactically correct liability.

An agent can instantly spin up a microservice with ten REST endpoints. But the agent cannot answer the critical questions:

  • Do these ten endpoints represent the correct architectural boundary?
  • Who owns the underlying data?
  • What are the cascading failure modes when a downstream dependency times out?
  • How will the schema evolve six months from now when a parallel team needs to consume it?

The cost of implementation is plummeting, but the cost of understanding a system remains exactly the same.


🧠 From Programmer to Systems Orchestrator

We are not moving toward a future where engineers stop writing code. There will always be mission-critical paths, novel algorithms, and deeply optimized system layers that require human precision. However, the median daily workflow is shifting away from "I need to write this module" toward "I need to orchestrate this outcome."

This shift mimics the transition from an individual contributor to a technical lead. The engineer now sits above the implementation loop. Their primary responsibilities have moved up the abstraction stack:

  1. Defining Intent and Constraints: Structuring the problem domain clearly, defining strict inputs/outputs, and explicitly stating what the system should not do.
  2. Context Curation: Providing the agent with the exact architectural patterns, existing interfaces, and domain context required to generate coherent code.
  3. Failure Mode Analysis: Reviewing the generated output specifically for edge cases, race conditions, and unhandled exceptions that statistical models frequently gloss over.
  4. Boundary Verification: Ensuring the generated code respects the separation of concerns and doesn't leak domain logic across service boundaries.

The irony of AI coding assistants is that while they dramatically lower the barrier to entry for junior developers, they simultaneously raise the bar for what constitutes a competent engineer.


🛡️ Architecting Systems for Imperfect AI

As an engineering leader, the most dangerous response to this shift is treating AI as a simple throughput multiplier and telling your team to "review the PRs more carefully."

Human review does not scale linearly with machine generation. Asking a senior engineer to manually parse ten times the volume of code they used to review is a recipe for alert fatigue and systemic failure.

We must cage the AI in rigorous, automated systems:

  • Contract-Driven Development: API boundaries and data schemas must be strictly defined and automatically enforced. If an AI generates an implementation that violates the OpenAPI spec, the build fails.
  • Aggressive Static Analysis: The baseline for code quality and security vulnerabilities (SAST/DAST) must be enforced by the CI pipeline, not by human reviewers.
  • Comprehensive Test Suites: The value of unit and integration testing has never been higher. AI is excellent at writing tests, but engineers must define the behavior being tested.
  • Deep Observability: When generated code behaves unpredictably in production, telemetry is the only way to unravel the execution path.

The guiding principle for modern engineering platforms must be: Let the AI move fast, but make the system around it mathematically hard to break.


📝 The Specification is the New Source Code

We are currently suffering through an industry obsession with "prompt engineering." For production software, prompt engineering is a misnomer; what we are actually doing is writing engineering specifications.

There is a vast difference between prompting an agent to "Build a payment service" and specifying:

"Build a payment service that supports Stripe and PayPal, guarantees idempotency via an Idempotency-Key header, implements exponential backoff for downstream timeouts, emits state changes to Kafka, and strictly obfuscates PII in the application logs."

The latter requires an engineer who deeply understands distributed systems. The AI is given the room to execute the syntax, but it is given absolutely no room to redefine the architecture.


🚀 The Next 10x Engineer

If we measure engineering productivity by lines of code, pull request counts, or Jira ticket velocity, AI will make every team look like a group of savants. But a team can generate a staggering amount of software while actively degrading the core product.

Engineering leadership must forcefully pivot how we measure success to focus on leverage and outcomes:

  • Did we meaningfully solve the customer's problem?
  • Did we introduce unwarranted complexity, or did we reduce it?
  • Can the team safely maintain and extend this codebase six months from now?

The historical "10x engineer" was often characterized by their typing speed. The new 10x engineer is defined entirely by leverage.

They use AI to automate the boilerplate, freeing up their cognitive capacity to design bulletproof architectures. They recognize when a feature shouldn't be built at all. And most importantly, they are the engineers who can look at 5,000 lines of perfectly formatted, thoroughly commented, AI-generated code, and have the judgment to say:

"This solves the wrong problem. Delete it."

AI is democratizing the ability to create software, but it is not democratizing engineering judgment. Code is becoming cheap. Deep technical wisdom is becoming invaluable.

N

Written by

Nijel

3 stories on 10x Factor

Discussion

No comments yet

Sign in as a member to join the discussion.

Keep reading

All stories