Building AI Systems Incrementally
A minimal end-to-end slice is the smallest unit of work that forms a complete, end-to-end demonstration, and it is the first slice a team should build.
Why Teams Delay Seeing Their System Work
Imagine a team about to build an AI system that will eventually answer customers, check their records, route requests, log results, and handle many kinds of edge cases. The natural instinct is to design every part at once, so that nothing is missing when the system finally goes live. That instinct feels responsible, but it has a cost: it often delays the moment when anyone can see whether the system works at all.
This article answers a different question. Instead of asking what the complete system should look like, it asks: what is the smallest piece of work that can still be called a real demonstration of the whole system? The answer is what the source calls a minimal end-to-end slice, and it is the first slice a team should build.
What a Minimal End-to-End Slice Is
A minimal end-to-end slice is the smallest unit of work that forms a complete, end-to-end demonstration, and it is the first slice a team should build.
The definition contains two ideas that pull in opposite directions, and they must be held together. The slice is minimal, so it is as small as possible. It is also end-to-end, so despite being small it must not be a partial fragment. A component that handles a sliver of processing in isolation is not a slice in this sense, because it does not show the system doing its job from beginning to finish.
The word first matters too. A slice is the first thing built, not a throwaway prototype and not the final product. Once a slice works, the team has a working system with a narrow scope, and every later addition is a widening of that same path rather than a leap into the unknown.
Tracing One Request Through the Slice
The clearest way to see a slice is to follow one request from start to finish. The diagram below shows a single request traveling along one path. Each box stands in for a layer of the eventual production system. Read it from left to right and notice that the request enters at one end and leaves at the other, passing through every stage in between.
The point of the diagram is not the number of boxes. The point is that none of them is skipped. If a layer is left out entirely, the slice no longer demonstrates the full system, and it becomes a demonstration of something smaller. The stages in the diagram are generated for illustration; the source itself only requires that the slice touch every layer the production system will eventually touch.
Touching Every Layer Thinly
The second requirement concerns breadth across the architecture. The slice has to touch every layer that the production system will eventually touch. That sounds like it contradicts the idea of minimality, but the source resolves the tension: this requirement is about breadth of layers, not depth within each layer.
Each layer can be touched thinly, meaning it does only the minimum needed for the request to pass through it. A layer that will eventually perform sophisticated validation might, in the slice, simply accept the input and pass it along. What matters is that the request actually crosses that layer on its way from the customer to the response. The layer exists in the path; its full sophistication can wait.
Read the concept map as a vertical cut. The slice is a single narrow path that runs through every layer of the eventual system. Later work deepens each layer and adds more cases, but it extends a path that already works rather than building a broad set of layers that have never been connected.
One Complete Case Instead of Every Case
The third idea is the one that most often surprises people. A slice does not have to handle every case. It has to handle one case completely. Breadth of cases is deliberately sacrificed, while completeness within a single case is required. The result is a narrow path through the system that works from start to finish, rather than a wide set of partial behaviors that never close a loop.
The comparison shows why the thin complete path is the one that produces a working demonstration. A shallow pass across many cases may touch many parts of the system, but no single request ever closes its loop, so nobody can see the system doing its job. A thin complete path takes one case through the whole system, so the customer's round trip actually finishes.
The two ideas combine usefully. Trading away case coverage keeps the slice small, while requiring full treatment of the chosen case keeps it honest. A team that picks one realistic case and carries it all the way through the system learns more about the system's real behavior than a team that half-handles many cases.
What do you think happens?
Suppose a slice handles only the order-status case, touches every layer, and logs results, but it skips the routing layer entirely because every order-status request goes to the same place. Does this still count as a minimal end-to-end slice?
Reveal answer
No, because a layer was skipped
The source requires the slice to touch every layer the production system will eventually touch. Covering one case is allowed; skipping a layer is not, because the slice would then demonstrate something smaller than the full system. Routing must still be crossed, even if it does only the minimum.
Mistakes When Choosing a Slice
Common mistake Ending the slice at an internal endpoint
What it looks likeA team considers the work done once a record lookup returns a correct value inside the system.
Why it failsThe boundary is defined from the customer's point of view. Without a customer output, the round trip is never complete.
Do this insteadContinue the path until the customer receives a response, then judge the slice by that round trip.
Common mistake Assuming a slice must handle every case
What it looks likeA team delays building anything until all edge cases are designed.
Why it failsThe source states that a slice does not need to handle every case. Requiring full coverage recreates the delay the slice is meant to avoid.
Do this insteadPick one realistic case and complete it from input to output.
Common mistake Skipping a layer to keep the slice small
What it looks likeA team omits the logging stage because it feels optional for the first demo.
Why it failsA slice must touch every layer the production system will eventually touch. Skipping one makes the slice a demonstration of something smaller.
Do this insteadKeep every layer in the path, but reduce each one to its minimum behavior, such as accepting the input and passing it along.
Common mistake Treating thin as incomplete
What it looks likeA validation layer is left as a stub that does nothing at all, so the request never actually flows through it.
Why it failsThinness is about depth within a layer. The request must still genuinely cross each layer on its way to the response.
Do this insteadLet the layer do the minimum real work needed for the request to pass through it.
Checking Whether Proposed Work Qualifies
When a team proposes a piece of work, it can be checked against the requirements in a fixed order. The flowchart below turns the source's requirements into a sequence of yes-or-no questions. A proposal that fails any check is not a minimal end-to-end slice, though it may still be useful work.
Walk a proposal through the checks in order. If it does not start at a customer input, stop there. If it does not end at a customer output, stop there. Only after both boundaries pass should a team ask whether every layer is crossed and whether one case is completed without gaps. Each check narrows the question, so a proposal that fails early is easy to diagnose.
A team proposes this work: build a complete response generator that produces answers for every customer question category, but test it only by calling it directly from an internal test script, with no intake layer and no customer-facing output. Using the checks above, decide whether this proposal is a minimal end-to-end slice, and name the first check it fails.
Hints
- Start with the entry point check: where does the work begin?
- The customer's point of view decides the boundaries, not the engineers' test script.
Summary Practice Takeaways
Work through the following ideas before moving on. Each one restates a requirement from the source in a form you can apply to a real proposal.
At a glance
- A minimal end-to-end slice is the smallest unit of work that forms a complete, end-to-end demonstration, and it is the first slice a team should build.
- A slice must begin at a customer input and end at a customer output; internal endpoints do not count as the finish line.
- A slice must touch every layer the production system will eventually touch, but each layer may be handled very thinly.
- A slice does not need to handle every case; it needs to handle one case completely from start to finish.
- A proposed piece of work qualifies only if it passes the boundary checks first and then confirms every layer is crossed and one case is completed without gaps.