
Small software projects rarely fail because nobody made a decision. More often, they become difficult to change because nobody remembers why an important decision was made. A team chooses an integration pattern, data store, authentication approach, or hosting arrangement; months later, a new requirement arrives and the original reasoning is hidden in a meeting, chat thread, or one person’s memory.
An architecture decision record (ADR) is a short document that preserves that context. It is not a full design specification and it does not need a committee. Used well, it gives a small-business team a practical record of the problem, the choice, the trade-offs, and the conditions that would justify revisiting it.
Record decisions that shape the system
Do not create a record for every implementation detail. Focus on decisions that affect how the application behaves, how it connects to other systems, or how difficult it will be to operate and change.
Useful candidates include:
- choosing which system owns a particular piece of data;
- deciding whether an integration runs synchronously or through a queue;
- selecting an authentication boundary for staff or customers;
- choosing a storage model that affects reporting or future migration;
- accepting a manual review step instead of fully automating a risky action;
- setting a constraint, such as supporting an existing export format.
A simple test is to ask: if a new developer or vendor challenged this choice six months from now, would the answer require a conversation with someone who may not be available? If so, the decision is a good candidate.
Start with the context, not the solution
The most valuable part of an ADR is usually the explanation of the problem. State what the business needs, what constraints are real, and what made the decision important at that time. Mention relevant facts such as a required handoff, a small operations team, an existing system, a data sensitivity concern, or a need to keep a manual fallback.
Keep the context specific enough to be useful. “We need a scalable platform” does not explain much. “The application must receive order updates from an existing system, tolerate a short outage, and let an operations lead review exceptions each morning” gives future readers something they can compare with reality.
Context also prevents a common mistake: evaluating an old decision against requirements that did not exist when it was made. A choice can be reasonable for its original constraints even if the business later outgrows it.
Write the decision and the alternatives
State the decision in one or two sentences. Then list the realistic alternatives considered and the most relevant advantages and drawbacks of each. This does not require a lengthy architecture review. A few clear bullets are often enough.
For example, a team deciding how to move records between two systems might compare a direct request, a scheduled synchronization, and a queued event flow. The record should explain which option was selected and why. It might note that a direct request is simpler for immediate confirmation, while a queue offers a better way to absorb temporary outages but adds monitoring and replay work.
Document the trade-off rather than presenting the chosen option as universally best. Future readers need to know what the team gave up. That makes later review faster because they can see which assumption or constraint would have to change before another option becomes attractive.
Include consequences and ownership
Every technical choice creates follow-up work. Record the operational consequences alongside the benefits. A queue may require a retry policy, a dead-letter process, and a way to inspect stuck messages. A new authentication boundary may require onboarding instructions, access reviews, and a recovery path. A decision to keep a manual approval may protect a sensitive workflow while limiting throughput.
Name the owner responsible for keeping the record useful, but do not confuse ownership with permanent approval. The owner can make sure the decision is easy to find, link it to relevant code or diagrams, and identify when a review is warranted. The person may be an engineering lead, operations manager, product owner, or external development partner depending on the project.
Use a small, consistent template
A practical ADR can fit on one page. Use a predictable structure:
- Title: describe the choice, not just the technology.
- Status: proposed, accepted, superseded, or retired.
- Date and owner: show when the decision was made and who maintains the record.
- Context: explain the problem, constraints, and relevant assumptions.
- Decision: state the selected approach.
- Alternatives: summarize the options considered and their trade-offs.
- Consequences: list benefits, costs, risks, and operational work.
- Review trigger: describe what change would make the decision worth revisiting.
Store the records where the people maintaining the application already work, such as a version-controlled documentation directory or a durable project knowledge base. Link from the record to tickets, diagrams, or code when those links add context. Avoid putting credentials, customer data, or sensitive infrastructure details into the document.
Review when the context changes
An ADR is not a promise to keep an old design forever. Review it when a dependency is replaced, a workflow changes, a volume or reliability need becomes materially different, or the team discovers that a stated assumption was false. If the decision changes, leave the original record in place and mark it superseded. Create a new record that explains what changed and why.
This history helps a small team distinguish deliberate evolution from accidental drift. It also makes a handoff more honest: a new maintainer can see which constraints shaped the system and which parts are now open for improvement.
A useful habit for the next project decision
When a decision feels important enough to debate, pause before the conversation ends and write down the context, the selected option, the alternatives, and the trade-off. Ask one person who was not in the room to read the record. If that person can understand the choice without a private explanation, the record is probably doing its job.
Architecture decision records will not replace thoughtful design, testing, or operational review. They provide something smaller and more durable: a shared memory for the choices that shape a custom application. For a small business, that can reduce repeated debates, make vendor handoffs clearer, and keep future improvements grounded in the reasons the system exists.
Next step: Schedule a short consultation to identify the next useful improvement.