Classify decisions by reversibility, adapt decision speed and rigour accordingly, estimate the cost of reversal and how it grows over time, delay one-way decisions to the last responsible moment, convert one-way doors into two-way doors with seams, flags and pilots, and document exit costs
Decisions differ in how costly they are to undo. A one-way door (Type 1) decision is irreversible or very expensive to reverse — once through, you can't easily come back. A two-way door (Type 2) decision can be reversed cheaply if it turns out wrong. Recognising which kind you face tells you how fast to move and how much analysis and review to invest.
Figure 1 — One-way (TOC) vs two-way (TOC) doors
TOC concept
Definition
One-way doors
Decisions whose reversal requires large migrations, broken contracts, retraining or long lead times — cloud provider, primary database and data model, shard key, public API and event contracts, organisation-wide platforms — which warrant careful analysis, evidence, broad review and explicit ADRs
Two-way doors
Decisions that can be undone cheaply and quickly — internal libraries hidden behind interfaces, configuration, instance sizes, feature-flagged behaviour, internal endpoints — which should be made quickly by the team, tried, measured and adjusted
Table 1 — The two TOC concepts
2Why It Exists
Uniform decision processes are either too slow for small choices or too careless for big ones. Reversibility is the best single signal for how much rigour a decision needs.
Teams make hundreds of decisions a month, and most of them are cheap to undo: a library behind an interface, a cache TTL, a pool size or a flagged UI flow. If those go through the same architecture review as choosing a database or a public API, teams wait weeks for approvals they did not need, and reviewers have less time for the decisions that matter. If a light process is applied to everything, the opposite happens: a shard key or a three-year commitment is chosen in a corridor conversation and becomes a migration project years later. Classifying decisions by reversibility lets an organisation be fast and careful at the same time, matching speed, evidence, reviewers and documentation to the real cost of being wrong.
Figure 2 — How to decide each type
3Core Concepts
3.1 One-way doors
Figure 3 — Classifying decisions
One-way door signal
Example
Data would have to migrate
Aurora → DynamoDB for orders
External parties depend on it
Public REST v1 contract
Many teams build on it
Event backbone, identity provider
Long contracts/commitments
3-year Savings Plans, vendor licences
Organisational change
Team topology, ownership boundaries
Table 2 — Recognising one-way doors
Handling a one-way door
Practice
Evidence
PoCs, benchmarks, references
Review
ARB / design authority
Timing
Last responsible moment
Documentation
Full ADR incl. exit cost
Risk reduction
Pilot, phased rollout
Table 3 — Rigour where it pays
3.2 Two-way doors
Two-way door
How to reverse
JSON library (behind mapper interface)
Swap implementation
Redis TTLs, pool sizes
Config change
Internal endpoint shape
Change both sides together
EKS node types
Karpenter NodePool edit
New UI flow behind flag
Toggle off
Table 4 — Cheap reversals
JAVA
// Two-way door by design: behaviour behind a feature flag (OpenFeature API)public Money shippingFee(Cart cart) { boolean newRules = features.getBooleanValue("shipping.new-fee-rules", false,new ImmutableContext(cart.customerId()));return newRules ? newFeeCalculator.fee(cart) : legacyFeeCalculator.fee(cart);}
4How It Works Internally — The Cost of Reversal
Figure 4 — Cost of reversal over time
Reversal cost component
Grows with
Code to change
Usage sites, coupling
Data to migrate
Volume, history
Consumers to coordinate
Number of teams/partners
Skills and tooling
Investment made
Contracts
Commitment length
Table 5 — What makes reversal expensive
Exit cost estimate (Kafka → another broker)
Effort
Producers/consumers behind messaging port
12 services × 2 days
Schema migration (Avro)
1 week
Replay/history
Not portable → accept loss
Ops tooling
2 weeks
Total
~2 person-months
Table 6 — Documenting exit cost in the ADR
4ADeep Dive — Making Doors Two-Way
Figure 5 — Turning one-way doors into two-way
JAVA
// Seam: domain code depends on a port, not on Kafkapublicinterface OrderEventPublisher {void publish(OrderEvent event);}@Componentclass KafkaOrderEventPublisher implements OrderEventPublisher {privatefinal KafkaTemplate<String, OrderEvent> kafka;publicvoid publish(OrderEvent e) { kafka.send("orders.events.v1", e.orderId(), e); }}// Swapping to EventBridge = new adapter, no domain change
SQL
-- Expand–contract keeps schema changes reversibleALTER TABLE orders ADD COLUMN delivery_slot text; -- expand (reversible)-- deploy code writing both old and new fields; backfill; switch reads-- contract only after weeks of stability:-- ALTER TABLE orders DROP COLUMN legacy_slot_code; -- one-way step, delayed
Figure 6 — Reversibility by decision level
Last responsible moment
Idea
Delay one-way decisions
Until the cost of not deciding exceeds the value of waiting
Gather information meanwhile
Spikes, pilots
Don't delay two-way decisions
Try now, learn
Table 7 — Timing irreversible choices
Figure 7 — Reversibility rules
5APIs / Features / Syntax
Need
Tooling
Flags
OpenFeature, AWS AppConfig, Unleash
Seams
Ports & adapters, Spring interfaces
Schema
Expand–contract with Flyway/Liquibase
Pilots
Canary, cohort routing
Lock-in check
Exit-cost section in ADR
Table 8 — Toolkit
6Practical Examples
6.1 Committee for a two-way door
A team waited five weeks for ARB approval to switch from Spring Retry to Resilience4j inside one service. Classifying decisions by door type moved such choices to the team with a light ADR; ARB agenda time fell by 60% and focused on genuine one-way doors.
6.2 A one-way door handled well
Choosing the orders shard key (customer_id) was treated as one-way: a 3-week evaluation, access-pattern analysis, a pilot on 5% of customers via directory routing, ARB review and an ADR with exit costs. The pilot revealed seller-report scatter queries early, leading to an OpenSearch read model before full rollout.
6.3 Worked example — classify
Public API v1 field removal
One-way
Table 9 — External consumers
6.4 Worked example — classify
Thread pool size
Two-way
Table 10 — Config
6.5 Worked example — mostly one-way
Kafka for internal events
Many producers
Table 11 — Grey zone
6.6 Worked example — seam
Messaging port
Reduces exit cost
Table 12 — Buy reversibility
6.7 Worked example — flag
New pricing engine at 5% cohort
Reversible rollout
Table 13 — Two-way
6.8 Worked example — expand–contract
Drop column after 4 weeks
Delayed one-way step
Table 14 — Schema
6.9 Worked example — parallel run
Old and new tax calc compared
Switch when equal
Table 15 — Reduce risk
6.10 Worked example — pilot
One team adopts new platform first
Learn before commit
Table 16 — Staged commitment
6.11 Worked example — commitment
1-year vs 3-year Savings Plan
Reversibility trade-off
Table 17 — Financial door
6.12 Worked example — exit cost
~2 person-months
Recorded
Table 18 — ADR section
6.13 Worked example — door closing
Library used in 3 → 30 services
Now expensive
Table 19 — Re-evaluate
6.14 Worked example — public events
Schema registry compatibility BACKWARD
Protects consumers
Table 20 — Contract door
6.15 Worked example — managed service
Aurora PostgreSQL (standard SQL)
Lower lock-in than proprietary
Table 21 — Portability
6.16 Worked example — last responsible moment
Region for DR chosen after latency tests
Informed
Table 22 — Timing
6.17 Worked example — bias to action
Try new cache TTL today
Measure tomorrow
Table 23 — Speed
6.18 Worked example — governance
ARB charter: one-way doors only
Focus
Table 24 — Rights
6.19 Worked example — ADR
Decision
Rationale
Classify every decision by door type; route one-way to ARB
Right rigour
Table 25 — Recorded
6.20 Worked example — review checklist
Check
✔
Door type stated
✔
Exit cost for one-way
✔
Seams where cheap
✔
Two-way decided by team
✔
Table 26 — Reversibility review
6.21 Worked example — interview answer
Door
Answer
One-way
Slow, careful, reviewed
Two-way
Fast, team-owned, reversible
Table 27 — Structured answer
7Common Problems & Mistakes
Two-way doors treated as one-way.
Rushing one-way doors under deadline pressure.
No seams, making every choice irreversible.
Contracting too early in expand–contract.
Ignoring how doors close with adoption.
Undocumented exit costs.
These mistakes come from judging decisions by how important they feel rather than by what it would cost to reverse them. Treating two-way doors as one-way is the most common, as the five-week wait for a Resilience4j switch showed: teams lose speed and learn to avoid the review process altogether. Rushing one-way doors under deadline pressure, such as choosing a shard key without access-pattern analysis, creates years of migration work. Without seams such as ports and adapters or feature flags, even small choices become expensive to undo. Contracting too early in expand–contract removes the rollback path before the new schema is proven. Doors also close silently as adoption grows, and if exit costs were never recorded, nobody notices until reversal has become a major programme.
8Performance & Production Considerations
Aspect
Guideline
Classification
Per decision, in ADR
Speed
Fast for two-way
Rigour
Evidence and review for one-way
Reversibility
Seams, flags, pilots
Timing
Last responsible moment
Table 28 — Operational guidelines
9Architecture & Design Considerations
Let reversibility decide process weight.
Invest in seams around volatile choices.
Use pilots and flags to learn before committing.
Revisit doors as adoption grows.
10Interview Questions & Answers
Q1BasicConcept
What is a one-way door?
A one-way door, Jeff Bezos's Type 1 decision, is one that is irreversible or very expensive to reverse: once you walk through, you cannot easily come back. Reversal would require large data migrations, breaking contracts with external consumers, retraining many teams or waiting out long commitments. Typical examples are the cloud provider, the primary database and data model, a shard key, public API and event contracts, and organisation-wide platforms such as an event backbone. Because mistakes are costly, these decisions deserve evidence such as proofs of concept and benchmarks, review by an architecture board, timing at the last responsible moment, and an ADR that records the alternatives and the estimated exit cost.
Q2BasicConcept
What is a two-way door?
A two-way door, or Type 2 decision, is one you can reverse cheaply and quickly if it turns out wrong. Examples include a JSON library hidden behind a mapper interface, Redis TTLs and connection pool sizes, internal endpoint shapes changed on both sides together, EKS node types adjusted in a Karpenter NodePool, and new behaviour behind a feature flag that can be toggled off. Because the cost of being wrong is low, the right process is fast: the owning team decides, tries it, measures the result and reverses if needed, with at most a light ADR. Slowing these decisions down with committees costs more than any mistake the committee could prevent.
Q3IntermediateConcept
Give examples of each.
One-way doors include the primary database and data model, for example moving orders from Aurora to DynamoDB, which would mean a large data migration; a public REST v1 contract, where removing a field breaks external partners; the orders shard key; an event backbone or identity provider that many teams build on; and long financial commitments such as three-year Savings Plans. Two-way doors include a JSON library behind an interface, a thread pool size or cache TTL, an internal endpoint shape, an instance type, and a new pricing engine released to a 5 percent cohort behind a flag. Some sit in a grey zone: Kafka for internal events becomes harder to reverse as producers multiply.
Q4IntermediateTrade-off
Why does it matter?
Because reversibility is the best single signal for how much rigour a decision needs, and rigour is expensive. A uniform process is always wrong for someone: heavy enough for a shard key, it buries teams in committees for library swaps; light enough for a library swap, it lets a public contract or data model be chosen carelessly. Classifying by door type lets you spend evidence, review and documentation only where reversal would be costly, and push everything else to teams to decide quickly. In the note's example, routing only one-way doors to the architecture board cut its agenda time by 60 percent, while the shard key decision got a three-week evaluation and a pilot.
Q5Senior EngineerDesign
How can you make a one-way door two-way?
You buy reversibility by adding mechanisms that lower the cost of undoing a choice. Seams such as ports and adapters keep domain code dependent on an interface like OrderEventPublisher, so replacing Kafka with EventBridge means writing a new adapter rather than touching every caller. Feature flags through OpenFeature or AWS AppConfig let new behaviour be switched off instantly. Expand–contract schema changes add the new column, write both, backfill and switch reads, delaying the irreversible drop for weeks. Pilots and cohort rollouts, such as 5 percent of customers, and parallel runs comparing old and new tax calculations reveal problems before full commitment. Each mechanism has a cost, so use them where volatility justifies it.
Q6Senior EngineerConcept
What is the last responsible moment?
The last responsible moment is the latest point at which you can make an irreversible decision before delaying it starts to cost more than the information you gain by waiting. The idea comes from lean software development. It applies to one-way doors: delay the commitment, but use the time to reduce uncertainty through spikes, pilots, benchmarks and access-pattern analysis, so the decision is made with evidence. ShopNow, for example, chose its disaster-recovery region only after latency tests. It is not an excuse for procrastination, because waiting too long lets a deadline make the decision for you. It also does not apply to two-way doors, which should simply be tried now.
Q7Technical ArchitectTricky
What's the most common mistake?
The most common mistake is not rushing one-way doors, as people expect, but treating two-way doors as one-way. Many organisations send every technical choice through the same heavy review, so a team waits weeks for permission to swap a retry library inside one service, as in the note's five-week Spring Retry to Resilience4j example. The damage is larger than the delay: teams stop experimenting, work around the process, and review boards spend their time on trivia instead of the genuinely irreversible decisions. The fix is to classify each decision, give teams the right to make two-way decisions with a light ADR, and reserve board time for one-way doors.
Q8Solution ArchitectDesign
How would you design governance around reversibility?
I would make reversibility the routing rule for decisions. Every ADR states its door type and, for one-way doors, an estimated exit cost. Teams own two-way doors outright and record them in a light ADR, so they can move quickly. One-way doors go to the architecture review board, whose charter covers only those, and require evidence such as proofs of concept, benchmarks, a pilot or a parallel run, with the decision timed at the last responsible moment. Platform standards provide seams, feature flags and expand–contract migrations so more decisions become two-way. Finally, classifications are reviewed periodically, because doors close as adoption grows, and decision lead time is tracked to prove the process stays fast.
Newsletter
Get new tutorials every week
New ArchitectMind tutorials and interview questions, once a week. No spam, unsubscribe anytime.
Your subscription could not be saved. Please try again.
Almost done! Check your inbox and click the confirmation link to complete your subscription.