We get some version of the same request often: "we want to add AI to our product." That sentence hides two very different projects, and the difference decides almost everything about how the work goes, from the architecture to the timeline to whether the feature actually works once it ships.

Two different starting points

AI-native means the product's core value depends on the model. The architecture, data flow, and UX were designed around what the model needs to do its job well. Think a research assistant, a drafting tool, or an agent that takes real actions on a user's behalf.

AI bolted on means an existing product gets a chat box or a "summarize this" button added to it. The rest of the system (the data model, the UI patterns, the way state flows through the app) was built with no awareness that an LLM would eventually sit inside it.

Bolted-on AI isn't automatically bad. Plenty of genuinely useful features are exactly this: a well-scoped addition to something that already works. The problem shows up when a team treats an AI-native problem as if it were a bolt-on one, because the underlying architecture can't actually support what the feature needs to do.

Where this goes wrong in practice

The failure pattern looks the same across almost every client engagement where this has been an issue:

The tell
If removing the AI feature from your product would require redesigning core user flows, not just hiding a button, you were building an AI-native product and didn't plan the architecture for it.

How to tell which one you're actually building

A few honest questions usually settle it:

  1. Does the product's core loop depend on the model's output, or just get enhanced by it? If users would consider the product fundamentally broken without the AI part, you're AI-native.
  2. Does the model need context that doesn't cleanly exist in your current data model yet? If you need to build new retrieval, indexing, or memory infrastructure to make the feature work well, that's AI-native architecture work, not a feature bolt-on.
  3. Does the UX need to change to accommodate model behavior? Streaming responses, showing reasoning, handling ambiguity, and letting users correct the model are UI patterns a bolted-on chat widget usually skips. Skipping them is often exactly why the feature feels unfinished.
  4. What happens on a bad response? AI-native products design real failure and correction paths. Bolted-on features often don't, because nobody planned for the model being wrong as a first-class case.

What we actually do differently for each

QuestionAI-native buildAI bolted on
Where we startData and retrieval architecture, before any UIThe existing codebase and its current patterns
What we scope firstWhat context the model needs, and how it gets there reliablyThe narrowest single use case that proves value
UX approachDesigned around model behavior: streaming, correction, ambiguityFits inside existing UI patterns, minimal new surface area
Cost planningModeled before launch, since usage patterns compound quicklyEstimated per-feature, monitored post-launch
Typical timelineLonger discovery phase, since the architecture decisions are foundationalCan often ship in a single sprint once scoped well

Neither path is inherently better. The expensive mistake is using the bolted-on approach's timeline and budget for what turns out to be an AI-native problem, then discovering it three weeks into the build instead of during scoping. That's exactly what our discovery phase exists to catch before any engineering time is committed.