← Blog

AI-native vs. AI-bolted-on — a developer's take

The difference isn't a chatbot button. It's whether the product was designed assuming an AI agent would be a primary user. Most "AI features" still aren't. Here's how to tell, and why it matters.

Every consumer app is shipping AI features now. Most of them are doing the same thing: stuff a chatbot into a sidebar, hook it up to OpenAI or Claude, ship a press release.

That’s “AI-bolted-on.” It’s not the same thing as building AI-native software, and the gap is going to widen quickly over the next two to three years.

The test: who’s the primary user?

Look at how the product was built. What was the development team optimizing for?

AI-bolted-on treats the existing UI as the primary user surface. The AI is a feature inside that UI — a chatbot, a “summarize” button, an autocomplete widget. The product structure didn’t change. The data model didn’t change. The auth layer didn’t change. There’s just a new button.

AI-native assumes from day one that an AI agent will be a primary user of the product. Not the only user — humans still log in and use the UI. But the agent is treated as a first-class citizen with its own access path, its own permission model, its own quality bar for the data it consumes.

The difference shows up in dozens of small decisions, but a few are diagnostic.

Five places it shows up

1. Read API quality.

AI-bolted-on apps have minimal read APIs. Reads are mostly internal-only, scoped to feed the UI. When the chatbot needs data, the team patches together one-off endpoints.

AI-native apps have rich, well-documented, well-shaped read APIs because the agent is going to call them. The data shapes were thought about with an LLM consumer in mind. Field names are descriptive. Provenance and metadata are exposed.

2. OAuth flow polish.

AI-bolted-on apps have OAuth flows built for “developer onboarding” — long, technical, full of dropdowns. Acceptable when the audience is integration partners with a 10-step setup doc.

AI-native apps have OAuth flows built for end users to complete inside a chat conversation. Three steps. Mobile-friendly. Visible scopes. No jargon. The whole flow is a product surface, not a setup screen.

3. Idempotency.

AI-bolted-on apps don’t think about retries because their UI flows are linear and human-paced. Retries are a developer concern.

AI-native apps build idempotency in from the start because LLM agents retry constantly — on timeouts, on ambiguous responses, on planner second-guesses. Every write endpoint takes a clientRequestId or equivalent. Duplicates are physically impossible at the schema level.

4. Tool naming and descriptions.

AI-bolted-on apps expose API names like /api/v1/items/create and assume the integration code translates that into something the model can use.

AI-native apps treat tool names and descriptions as product copy. Each tool has a single, clear purpose. The description is one or two sentences that tell the model what the tool does without instructing it how to use it. The names match user intent more than internal architecture.

5. Provenance and explainability.

AI-bolted-on apps return data and let the agent figure out what it means. When an agent paraphrases that data to a user, errors appear and the user has no way to verify.

AI-native apps return data with provenance built in — source, version, confidence level, citation URL. The agent can pass that through, and the user can verify. This is the part most teams haven’t internalized yet, but it’ll be obvious in retrospect.

Why the difference matters more over time

For a while, AI-bolted-on will look indistinguishable from AI-native to users. Both have chatbots. Both can answer questions. Both can do simple tasks.

The gap shows up when:

Users start expecting agents to handle multi-step workflows. AI-bolted-on apps break here because the UI was the primary access path; the agent surface is a thin layer that can’t sustain multi-step state.

Agents become the discovery layer. Today users find apps via the App Store and Google. In two years, a meaningful share of new app discovery will be agent-mediated — “Claude, find me a tool that can do X.” The apps that show up well in that frame are the ones whose tool descriptions read well, whose OAuth completes smoothly, whose data the agent actually understands.

Power users move workflows entirely into chat. The “I need to log a meal” use case doesn’t need an app — it needs an MCP-compatible tool. AI-native apps capture this surface; AI-bolted-on apps lose it.

What this looks like to build

Pragmatically, building AI-native means:

  • Spend the time on a real read API, not just enough to feed the UI
  • Build OAuth correctly the first time — PKCE, public clients, well-known metadata
  • Idempotency keys on every write
  • Tool names and descriptions that read like product copy
  • Provenance built in from day one — a “where did this come from” field on every meaningful row
  • Don’t bolt the agent surface onto an existing API; design them together

Most of this is just better engineering hygiene. The reason it’s missing from AI-bolted-on apps isn’t that it’s hard — it’s that the team prioritized shipping a chatbot button instead of getting the underlying surface right.

What I’d watch for, as a user

If you’re picking between two apps that both claim “AI features”:

  • Does the OAuth flow take more than three steps?
  • Can you tell where the data came from? Is there a citation, or just a number?
  • Does the agent feel grafted on, or does it feel like the app is the agent?

The chatbot button is a bad signal. The OAuth flow and the data shapes are better signals.

We’ve had a few decades of “every app should have a website.” We’re now in the early years of “every app should have an MCP server.” The way that frame plays out is going to look familiar — the apps that did it well early are going to look obviously correct in retrospect, and the rest are going to look like they’re trying to hold onto a model that no longer fits.

Pick the right side of the shift while it’s still cheap.