NERD.
Join usLogin

Why AI Code Generation Succeeds or Fails: The AI Readiness Model

AI code generation succeeds when organizations build systems for experimentation, advocacy, and guardrails that allow these tools to compound, not simply when the tools become good enough.

Kevin Visscher
By Kevin Visscher · April 2026 · 14 min read
Why AI Code Generation Succeeds or Fails: The AI Readiness Model

The AI Readiness Model

Organizational readiness for AI is the ability to reliably translate AI capability into production outcomes. It emerges when three conditions are present and reinforcing:

  • Experimentation: Teams test tools in real workflows and generate early signal
  • Advocacy: Proven wins spread peer-to-peer, driving adoption
  • Guardrails: Quality controls ensure outputs are reliable at scale

If one component is missing, adoption stalls: experimentation without guardrails creates chaos, guardrails without advocacy create inertia, and advocacy without experimentation creates hype without substance.

Why AI Code Generation Fails Early

We started experimenting with AI for code generation at the end of 2024. The timing made sense. Everyone was talking about it. The tools were getting better. Our engineering leadership was curious. So we tried. And it didn't work.

The context windows were too narrow. The models would lose the thread halfway through a problem. They'd generate code that looked plausible but had subtle bugs. We'd watch our developers spend more time debugging AI output than they would have spent writing the code from scratch. The friction was real. People tried it once, maybe twice, then moved back to their usual workflow. We didn't celebrate that early attempt. We also didn't abandon the idea.

We just accepted that the tools weren't ready yet, and we kept paying attention.

This is the part that matters: We stayed curious without being naive. We didn't chase the hype. We also didn't dismiss it. We ran actual experiments, measured the results honestly, and said "not yet, but we'll keep looking." For most companies, this is where the story ends. They either commit too early and build on a shaky foundation, or they write it off entirely and check back in three years.

We did neither. We kept trying.

The question everyone asks us: How did you pull this off?

A year later, something shifted. The tools crossed a line. They actually worked. The context windows got bigger. The instruction following got better. The code quality improved. And because we'd been paying attention the whole time, because we'd built a culture around continuous experimentation, we moved fast.

In seven weeks, we went from low single-digit AI-assisted pull requests to over 60% of our code being written with AI tools. More importantly, our developers' throughput increased between 4x and 10x. Features that used to take four weeks now take two to five days. That's not incremental improvement. That's transformative.

The answer is uncomfortable for most companies: It had nothing to do with the tools being good enough. It had everything to do with us being ready

Kevin Visscher

The Culture That Made This Possible

We're a retail tech company. That means we're building software for an industry that operates on compressed timelines, thin margins, and constant change. Retailers don't plan a quarter out anymore. They plan a week out. Inventory shifts. Competitors move fast. Customer behavior changes. Your software needs to adapt faster than it used to, or you're behind.

We learned a long time ago that you either build an organization that adapts to change, or you get buried under your own technical debt. We call that last thing a Frankenstack: the sprawling mess of legacy systems, third-party tools, and in-house solutions all bolted together, each one calcifying around the last. We've seen it destroy companies from the inside. A system that started clean becomes so intertwined with patches, workarounds, and one-off integrations that nobody can change anything anymore. You're paralyzed.

So "adaptive to change" isn't something we say once in a meeting. It's the reflex we operate on.

This meant three things were already true before AI tools got good enough:

1. Experimentation

We had permission to experiment. We're organized using holocracy, which means individual circles can adopt tools and approaches that help them without needing executive approval or a three-month approval process. This isn't anarchy. Decisions still get made, but they get made closer to the work. If you want to try something, you try it. Information spreads, people learn from it, adoption happens naturally or it doesn't. There's no organizational drag. There's no "let's form a committee to evaluate this." This is crucial. By the time the tools were ready, we'd already tried them. We weren't starting from zero. We weren't in the position of needing a presentation and a business case to give AI a shot. We could just flip the switch and say, "Remember when we tried this? It's actually working now."

2. Advocacy

We were already thinking about it. We weren't ignoring AI at the end of 2024 because it was boring or "not for us yet." We were actively trying it, sharing results, measuring it, and being honest about what wasn't working. This meant we had a baseline. We knew what the friction points were. We had hypotheses about what would need to improve. We weren't coming to this cold.

3. Guardrails

We had a language for why a Frankenstack happens. We understood viscerally that bolting on a half-measures solution creates more problems than it solves. So when AI tools eventually did work, we didn't just throw them at the problem. We thought carefully about how to integrate them. How do we add this tool without creating new technical debt? How do we make sure this doesn't become another layer we have to maintain forever?

This thinking shaped everything that came after.

What Actually Happened: The Adoption Curve

Here's what surprised us: the bottleneck wasn't the tools. The bottleneck was internal advocacy.

Even after the tools got genuinely good, adoption didn't spike immediately. Some developers were using them quietly. Others were skeptical. A few thought they should wait for the technology to stabilize further. Performance metrics were already good. Why rock the boat?

Then something changed. Our team started actively sharing what they were building with AI assistance. People started celebrating the wins, talking about what was working, and showing other developers what was possible. It wasn't mandated. It wasn't a training program. It was just people being excited and talking about it.

That's when adoption went vertical.

Within weeks, we moved from maybe 20% of our developers using AI to over 60%. Not because we mandated it. Not because we forced training or tied it to performance reviews. But because the culture flipped from "some people are quietly experimenting" to "this is normal, this works, and you should try it too."

The velocity gains came directly from there. When you have 60% of your developers using AI tools effectively, the compounding effect is real. But here's what actually mattered: they weren't just coding faster.

They were operating with better context because we'd invested in how they used the tools. They were making fewer mistakes because we'd paired AI development with TDD. They were catching bugs earlier because we'd added AI to the code review process.

All of that happened because we were deliberate about it. Because we didn't just ship tools and hope.

How We Made It Safe: Guardrails Over Hype

This is where the story gets important for anyone worried that AI-generated code is reckless or creates technical debt.

We didn't remove our standards. We strengthened them.

Test-driven development became our guardrail. Write the test first. Define what success looks like. Then let the AI write code that passes it. The tests become the spec. The AI self-adjusts until the lights are green. This isn't a workaround. It's actually more efficient than having the AI guess at what the code should do. It also means you catch misunderstandings immediately. If the AI misunderstood the requirement, the test fails and you course-correct fast.

The interesting thing we discovered is that AI is actually really good at working backwards from test suites. It's like giving it a target to optimize toward. And because the test is always the source of truth, you don't have to worry about "is this code good enough?" The code either passes the test or it doesn't.

We use skills: small, structured instruction sets that encode specific usage conventions and recurring workflows. They live in SKILLS.md and developers invoke them through a CLI.

While much of the industry is investing in Model Context Protocol layers to coordinate tools, we did the opposite. Instead of adding another abstraction, we reduced ambiguity at the interface level. The developer or AI chooses the right skill based on context, the CLI executes it with the right constraints by default, and the AI has a narrow, clear reasoning space. Lighter token overhead. Predictable outputs. Repeatable across the team.

Counterintuitively, this constraint increases capability. Because skills are simple and composable, the AI can combine them freely and integrate with other tools in the workflow. No central protocol boundary dictating what's possible. Keep the primitives simple, and the system stays flexible.

A concrete example: we have a Jira skill that pulls all the context from a ticket, the requirements, the linked issues, the acceptance criteria, the relevant code history. A developer can invoke that skill to have the AI read the full context before writing any code. This sounds like it might slow things down. It doesn't. What it does is prevent the AI from misunderstanding the requirement in the first place. You get better code faster because the AI has the full picture upfront.

For code review, we're using AI to summarize changes and catch structural issues. Before a human developer has to spend 20 minutes wading through a PR, the AI has already identified the key changes, flagged potential issues, and provided context. This doesn't replace human review. It makes human review faster and more effective. Reviewers aren't drowning in boilerplate. They can focus on the logic, the design decisions, the things that actually require human judgment.

We've seen this cut review time in half. Not because the reviews are less thorough. Because the AI handles the grunt work.

All of this is deliberate. Nothing is bolted on. Nothing creates technical debt. Every piece of this approach serves a specific purpose: make the AI better at its job, catch problems earlier, and make sure developers stay in control.

The Throughput Gains Are Real (And They Matter)

Here's the number that makes everything else make sense: 4x to 10x improvement in throughput.

In practice, that looks like this: a feature that used to take four weeks now takes two to five days. A bug fix that used to require a day of investigation and coding now takes an hour. A refactor that would have been scheduled for "someday" gets done in an afternoon.

This isn't magic. It's the compounding effect of:

  • Developers not getting stuck on boilerplate
  • AI generating code that passes tests on the first try more often
  • Code review feedback getting addressed faster
  • Developers being able to hold more context in their head because the AI is handling the mechanical parts

For retail tech, this matters enormously. Retail operates on compressed timelines. A feature request that comes in Monday morning needs to be live by Friday. A competitor ships something new and you need to respond in days, not weeks. If your tech vendor can ship solutions in days while the competitor is still in week 1 of a 4-week cycle, that's a structural advantage.

It's not just faster. It's a different kind of business capability. It's the difference between reactive and adaptive.

What Most Companies Get Wrong

Most retail tech companies will wait. They'll watch you move. They'll see faster shipping, faster iteration, faster response to market changes. Then they'll scramble to catch up, and they'll do it badly.

They'll bolt on AI tools without changing how they work. They'll treat it as a feature, not as a fundamental change to how development happens. They'll add AI to the toolchain without adding TDD. Without thinking about how to integrate it into code review. Without building internal advocacy. And they'll create the next generation of Frankenstacks: tools that don't talk to each other, processes that conflict, teams that are confused about when to use AI and when not to.

The companies that will actually pull ahead are the ones who stay adaptive. The ones who:

  • Build a culture of continuous experimentation, not just one-time adoption
  • Think carefully about integration instead of just buying tools
  • Use guardrails instead of hoping for the best
  • Share wins internally so adoption happens naturally
  • Stay flexible because the tools will keep changing

For a retail company operating on razor-thin margins and compressed timelines, this is the difference between staying competitive and getting left behind.

Why the Timeline Matters

The fact that you tried at the end of 2024 and kept trying matters more than you might think. It means you weren't chasing hype. It means you were thinking about this problem before it was obvious. It means when the tools actually crossed the threshold and became genuinely useful, you didn't have to learn them. You'd already been paying attention.

Your competitors who ignored AI entirely at the end of 2024? They're a year behind. They're just now figuring out that the tools actually work. They're in the panic phase of adoption. They're making mistakes you already learned not to make.

The companies that jumped on AI hype early and built on shaky foundations? They're dealing with the technical debt of early tools. Context windows that don't work. Integration approaches that are already obsolete. They got to move first, but they built on sand.

You stayed patient. You stayed curious. You waited for the tools to actually be good. And when they were, you had the culture in place to move fast.

That's worth something.

The Real Story

Here's what actually happened: We tried too early. The tools weren't ready. We didn't give up. We stayed curious. The tools improved. Our culture was already aligned to adapt fast. So when the moment came, we moved decisively.

This isn't a story about being first. It's a story about being ready.

What to Do Now

If you're thinking about AI for your team, stop waiting for the perfect moment. Start experimenting now, even if the tools aren't quite there yet. Build the habit of continuous learning. Stay curious without being naive. Be honest about what works and what doesn't. When the tools actually work, you'll know it. And you'll be ready to move fast.

Don't wait for executive approval to experiment. Don't treat new tools as one-off bets that need perfect ROI before you try them. Don't just bolt things on and hope they work.

Build a culture where people can try things. Where teams share what they learn. Where you're not afraid to say "this didn't work, let's try something else." Because that's what adaptive actually means.

What to Stop Doing

Stop waiting for consensus before you try something new. Stop building Frankenstacks by bolting on tools without thinking about integration. Stop treating change as something to resist until you're forced to change.

Stop waiting for the perfect tool before you start experimenting. Stop thinking about adoption as a one-time event. Stop letting perfect be the enemy of good.

What to Rethink

Rethink what "adoption" means. It's not about rolling out a tool and measuring how many people use it. It's about culture. It's about permission to experiment. It's about advocacy from peers. It's about tools that fit into your actual workflow instead of working against it.

Rethink what "ready" means. You're not ready when the tool is perfect. You're ready when your organization has the culture to try things, learn from them, and adapt fast.

Rethink what "fast" means. It's not just about code velocity. It's about how quickly you can respond to change. How quickly you can learn what works. How quickly you can move in a new direction.

We didn't adopt AI developer tools because they finally got good enough. We adopted them because we'd been ready all along.

About the author

KV

Kevin Visscher

Software engineer

Kevin Visscher is a Software Engineer at New Black, focused on the stability, performance, and continuous evolution of the EVA platform. He combines deep technical expertise with product ownership, overseeing backend infrastructure, guiding development priorities, and ensuring high-quality releases. Kevin works closely with cross-functional teams and stakeholders to shape the platform’s technological direction while maintaining strong uptime and delivering user-focused improvements.

Related Notes

How to Implement Ship from Store: A Store-Level Execution Guide

How to Implement Ship from Store: A Store-Level Execution Guide

Daniele Nizzero
Daniele Nizzero · 10 min read
The Gesamtkunstwerk of Retail

The Gesamtkunstwerk of Retail

Albert Visser
Albert Visser · 4 min read
The Recognition Ladder: Why Nike, Sephora, and Strava Are Shifting Focus From Points to Recognition

The Recognition Ladder: Why Nike, Sephora, and Strava Are Shifting Focus From Points to Recognition

Sofia Bilbao
Sofia Bilbao · 7 min read
Explore All Insights