Skip to content
Project Template4 columns · 3 sample rows· Updated

Pros & Cons Architectural Decision (ADR) Markdown Table Template

A pros-and-cons table is the heart of an Architecture Decision Record: it shows which options were considered for a design question and why one won. Reviewers read it before approving the decision, and engineers read it a year later when they wonder why the system was built this way. In both cases the reader needs the rejected options and their reasons as much as the chosen one.

Edit This Template

Edit cells, add rows, or sort — the Markdown updates live
Row
1
Client-Side In-Browser Processing (Selected)
• 100% user data privacy (0 server logs)
• No network round-trip
• Scalable at near-zero server infrastructure cost
• Constrained by client browser RAM on >50MB files
• Cannot run heavyweight C++ binaries without WASM
Adopted
2
Server-Side Node/Python API
• Can stream gigabyte-sized CSV files
• Capable of running complex OCR libraries
• Serious privacy compliance overhead (GDPR/HIPAA)
• Substantial server hosting cost at high scale
• Network upload latency for users
3
Hybrid WASM Worker
• Near native CPU execution speed in browser
• Keeps 100% data privacy local
• Larger initial JavaScript download footprint (~2MB)
• Slower first-load parsing on mobile connections
Output
| Evaluated Approach                               | Advantages (Pros)                                                                                                         | Tradeoffs (Cons)                                                                                                                            | Final Decision |
| :----------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------ | :------------------------------------------------------------------------------------------------------------------------------------------ | :------------: |
| **Client-Side In-Browser Processing (Selected)** | • 100% user data privacy (0 server logs)<br>• No network round-trip<br>• Scalable at near-zero server infrastructure cost | • Constrained by client browser RAM on >50MB files<br>• Cannot run heavyweight C++ binaries without WASM                                    |  **Adopted**   |
| **Server-Side Node/Python API**                  | • Can stream gigabyte-sized CSV files<br>• Capable of running complex OCR libraries                                       | • Serious privacy compliance overhead (GDPR/HIPAA)<br>• Substantial server hosting cost at high scale<br>• Network upload latency for users |    Rejected    |
| **Hybrid WASM Worker**                           | • Near native CPU execution speed in browser<br>• Keeps 100% data privacy local                                           | • Larger initial JavaScript download footprint (~2MB)<br>• Slower first-load parsing on mobile connections                                  | Phase 3 Review |
3 rows × 4 columns
Rendered Preview
Evaluated ApproachAdvantages (Pros)Tradeoffs (Cons)Final Decision
Client-Side In-Browser Processing (Selected)• 100% user data privacy (0 server logs)
• No network round-trip
• Scalable at near-zero server infrastructure cost
• Constrained by client browser RAM on >50MB files
• Cannot run heavyweight C++ binaries without WASM
Adopted
Server-Side Node/Python API• Can stream gigabyte-sized CSV files
• Capable of running complex OCR libraries
• Serious privacy compliance overhead (GDPR/HIPAA)
• Substantial server hosting cost at high scale
• Network upload latency for users
Rejected
Hybrid WASM Worker• Near native CPU execution speed in browser
• Keeps 100% data privacy local
• Larger initial JavaScript download footprint (~2MB)
• Slower first-load parsing on mobile connections
Phase 3 Review

When to Use This Table

Pros and cons only mean something relative to the decision drivers stated in the ADR’s context section — for example “user files must never leave the browser” or “must handle 200 MB inputs”. A pro that does not serve a driver is decoration, and a con that violates a hard constraint should disqualify the option outright rather than sit in a bullet list. Write the drivers first, then evaluate every option against the same ones.

The difference between an honest table and a rationalisation is symmetry and specificity. Every option is assessed on the same criteria; claims are quantified or testable (“adds roughly 2 MB to first load”) rather than adjectives (“heavier”); and the losing options are described well enough that their advocates would recognise them. Include the status quo or “do nothing” as an option whenever it is viable.

What Goes in Each Column

ColumnAlignmentWhat to put here
Evaluated Approachleft :---A short, distinctive name for each option, bolded, using the same wording as the ADR prose so readers can cross-reference. Mark the chosen option in the name or let the Final Decision column carry it — not both inconsistently.
Advantages (Pros)left :---Two or three bullets tied to decision drivers, separated with <br> and a • character because GFM cells cannot hold real Markdown lists. Prefer measured claims (“no network upload”) over absolutes like “instant” or “zero latency”.
Tradeoffs (Cons)left :---The costs, including ones paid later: operational burden, migration effort, vendor lock-in, hiring difficulty. State thresholds where they exist (“degrades above 50 MB on 4 GB devices”) so the con can be checked later.
Final Decisioncenter :---:A fixed vocabulary, centered and bolded for the winner: Adopted, Rejected, or Deferred. A deferred option should name what would reopen it — a date, a metric, or an event — otherwise “deferred” is a polite rejection.

How to Fill It In

  1. 1Write three to six decision drivers before listing options. Each should be testable: a cost ceiling, a latency budget, a compliance requirement, a team-skill constraint.
  2. 2List the options, including the current state of affairs if it is viable. If you cannot find a credible second option, the decision may not need an ADR at all.
  3. 3Gather evidence for each option: a time-boxed spike, a benchmark, vendor documentation, or a pricing calculation. Link sources in the ADR body rather than packing them into cells.
  4. 4Fill in pros and cons driver by driver. Then read the table column-wise: if privacy appears as a pro for one option, every other option’s row should say how it handles privacy.
  5. 5Ask someone who preferred a losing option to review its row. When they agree it is described fairly, record the decision, the date, and the ADR status (Proposed, Accepted, later Superseded).

Ready-to-Paste Variations

Weighted decision matrix

Use when there are several drivers of different importance. Score each option 1–5 per driver; the weighted total is a conversation starter, not an automatic verdict.

| Driver | Weight | Client-side | Server API | WASM Worker |
| :--- | ---: | ---: | ---: | ---: |
| Data stays on device | 5 | 5 | 1 | 5 |
| Handles 200 MB files | 3 | 2 | 5 | 4 |
| Infrastructure cost | 2 | 5 | 2 | 5 |
| First-load size | 2 | 5 | 5 | 2 |
| **Weighted total** | | **51** | **36** | **51** |

Drivers as rows, options as columns

A transposed layout that makes asymmetric evaluation impossible to hide: every option must answer every driver.

| Driver | Client-side | Server API | WASM Worker |
| :--- | :--- | :--- | :--- |
| Privacy | Files never leave the browser | Uploads require a DPA and retention policy | Files never leave the browser |
| Large inputs | Limited by tab memory | Streams multi-GB files | Better memory control than JS |
| Ops burden | Static hosting only | API servers, scaling, on-call | Static hosting plus a build toolchain |

Compact MADR-style options list

Mirrors the “Pros and Cons of the Options” section of the MADR template in a single table, for short ADRs.

| Option | Good, because | Bad, because | Outcome |
| :--- | :--- | :--- | :---: |
| PostgreSQL full-text search | No new service to run | Weak relevance tuning | **Chosen** |
| Dedicated search engine | Faceting and typo tolerance | Another cluster to operate and sync | Rejected |
| Do nothing (SQL `LIKE`) | Zero effort | Full table scans beyond ~1M rows | Rejected |

Common Mistakes

  • Including a straw-man alternative that nobody would choose, so the preferred option looks good by comparison.

    Only list options someone on the team would seriously defend, and have that person review the row. If there is no serious alternative, say so in the ADR context.

  • Listing different criteria for each option — performance for one, cost for another — so they cannot be compared.

    Evaluate each option against the same drivers. The transposed variation above forces this by making drivers the rows.

  • Absolute marketing claims such as “100% secure”, “instant”, or “infinitely scalable”.

    Replace each with a measurable statement and its condition, for example “no server round-trip; parse time under 200 ms for 5 MB on a mid-range laptop”.

  • Editing an accepted ADR’s table when circumstances change, which erases the reasoning that was valid at the time.

    Write a new ADR that supersedes the old one and link them both ways. The old table remains an accurate record of what was known then.

Browse all 50 templates
FAQ

Pros & Cons Architectural Decision (ADR): Frequently Asked Questions

What is an Architecture Decision Record?

An ADR is a short document capturing one significant design decision: the context and forces, the decision, and its consequences. Michael Nygard’s widely used format has sections for title, status, context, decision, and consequences; a pros-and-cons table usually supports the decision section.

How do I put bullet points inside a Markdown table cell?

GFM table cells hold a single line of inline content, so real Markdown lists are not possible. Use a bullet character such as • at the start of each item and separate items with <br>, which GitHub and GitLab render as a line break.

Where should ADRs live?

Most teams keep them in the repository, for example docs/adr/0007-client-side-parsing.md, numbered sequentially and reviewed through pull requests. Keeping them beside the code means the decision is versioned with the system it describes.

Should I use a weighted score instead of pros and cons?

A weighted matrix helps when there are many drivers of uneven importance, but the weights are judgement calls and can be tuned to produce any winner. Show the pros and cons as well, so readers can see the reasoning and not just a number.