Branching narrative design
A choice is meaningful when it changes what the player knows, risks, values, or can do. The craft is making those consequences legible while keeping the story small enough to finish and test.
Start with the consequence, not the number of branches
More branches do not automatically create more agency. For each choice, write the immediate action and the consequence you expect the player to notice. The consequence may be a new scene, lost time, changed trust, different information, or a later option that opens or closes.
Example made for this guide: a courier finds a damaged bridge. "Cross now" saves time but risks the package. "Take the river road" protects the package but arrives after the gate closes. "Ask the ferryman" costs a favor that the ferryman can claim later. Each option changes a resource or obligation, not just the next paragraph.
Separate meaningful and cosmetic choices
A meaningful choice changes plot access, state, relationships, or the ending. A cosmetic choice changes expression or role-playing while the underlying route stays the same. Both are useful. The problem is presenting a cosmetic choice as if it has a mechanical consequence.
If "Answer politely" and "Answer coldly" both continue to the same scene, let the following text acknowledge the tone. If the choice is supposed to affect trust, record and use that value later. Do not create state that the story never reads.
Use branch and bottleneck structures deliberately
A branch-and-bottleneck structure lets routes diverge for a specific consequence and meet again at a shared event. Convergence is not a betrayal of choice when the returning scene remembers what happened. Change its text, available options, or starting state based on the route taken.
For the courier, all routes can reach the city checkpoint. The bridge route may arrive early with a damaged package. The river route arrives late with the package intact. The ferryman route carries an unpaid favor. One shared checkpoint scene can respond to all three states.

Choose state variables that describe the fiction
State should answer a later narrative question. Use a boolean for a fact
that is either true or false, a number for a value with meaningful
ranges, and a tag or item for possession or status. Prefer names such as package_damaged, minutes_remaining, and owes_ferryman over vague counters such as choice_score.
Define where each value changes and where it is read. If a value changes in five scenes but never affects text, access, or an ending, remove it. If a condition controls an important scene, write the failure route too.
Use conditional text before duplicating whole scenes
When two routes share the same event, keep one scene and vary the lines that depend on prior state. This reduces duplicated prose and prevents two copies of the same event from drifting apart during revision.
Duplicate a scene when the route changes its dramatic purpose, available actions, or setting enough that one conditional scene becomes harder to understand than two clear scenes. Convergence is a tool, not a rule.
Control pacing across unequal routes
Compare routes by dramatic beats, not only word count. A short dangerous route and a longer investigative route can both feel complete if each has setup, pressure, a decision, and a consequence. Problems appear when one choice receives a full arc and another gets a paragraph before being pushed back to the main path.
Mark the purpose of every scene on the map. If several consecutive scenes only move the player between locations, combine them or add the decision the sequence is missing.
Treat dead ends as design decisions
An ending can be abrupt and still be intentional. An accidental dead end is a scene with no path forward, no ending signal, and no reason for stopping. Label endings in your outline and check every non-ending scene for at least one reachable continuation.
Loops need the same care. A repeatable route should change state, reveal something new, or offer an exit. Otherwise the player can become trapped in repeated text.
Test the narrative as a state machine
Build a small test matrix with these columns:
- route and decisions taken;
- state expected before the scene;
- text and choices expected in the scene;
- state expected after the scene;
- ending or next scene.
Test every condition in both directions. Test values at the threshold, just below it, and just above it. Restart between routes. Then read each route for continuity: characters should not refer to knowledge they did not gain, lost items should not reappear, and a converged scene should not erase a consequence the player was promised.
A practical design review
- Can the player understand the immediate action in every choice?
- Does each important choice change a route, state value, or acknowledged line?
- Does every state value affect something the player can encounter?
- Do converged scenes remember the route that led to them?
- Are all non-ending scenes connected to a continuation?
- Can every ending be reached from a clean start?
- Can the whole route matrix be tested before release?
If the last answer is no, reduce the tree. A smaller branching story with consequences you can verify is stronger than a large map full of routes you cannot finish.