Craft
AI-assisted development: what it actually means in practice
There's a version of AI-assisted development that produces fast, disposable code. Prompt in, code out, ship it, move on. It works until it doesn't — and when it breaks, nobody knows why, because nobody fully understood what they built.
That's not what we mean when we talk about AI-assisted development. The distinction matters, especially for internal tools that teams are going to rely on every day.
Speed is the benefit, not the goal
The reason AI-assisted development is genuinely valuable isn't that it produces code faster. It's that it frees up cognitive bandwidth for the parts of the job that actually require judgment.
A senior developer using AI assistance isn't outsourcing the thinking. They're outsourcing the typing — and some of the more mechanical problem-solving — so they can focus on architecture, edge cases, and whether the thing being built is actually the right thing.
The speed is real, but it's a side effect of doing the job better, not a shortcut around doing it properly.
The discipline is the same as it's always been
AI-generated code has to be read, understood, and reviewed. Every output needs to be evaluated against the actual requirements — not just "does this compile" but "does this handle the edge case where the data is malformed" and "will a developer unfamiliar with this codebase be able to maintain it in two years."
Developers who skip this step ship fast and break things. The root cause isn't the AI — it's the assumption that generated code is automatically correct code. It isn't.
What changes and what doesn't
What changes: the time it takes to produce a first draft of a component, write a test suite, refactor a data model, or debug an unfamiliar error. These tasks used to take hours. Now they often take minutes. That's a genuine step change.
What doesn't change: the need to understand the problem before writing any code. The need to think carefully about data structures, API boundaries, and failure modes. The need to test things in conditions that approximate real use. The need for code that will be readable to a different developer — or the same developer in six months.
Why it matters for internal tools specifically
Internal tools live or die by their maintainability. Unlike consumer software, there's no large team to keep things running. If something breaks, there usually isn't someone on call. If a feature needs updating six months after launch, whoever does the update needs to understand what's there.
This is why we're careful about how we use AI assistance on client work. The goal isn't to generate the most code in the least time. It's to ship something the client's team can rely on — and, if needed, extend or maintain — without coming back to us for every small change.
That requires the same engineering discipline that's always been required. AI makes it faster to get there. It doesn't change what "there" looks like.