Skip to main content
Back to Blog
Architecture

The Architecture Decision Nobody Writes Down

December 20, 20259 min read
ArchitectureDocumentationADRDecision MakingBest Practices

The Architecture Decision Nobody Writes Down

Six months ago, I chose Supabase over Firebase for Nexural. I had good reasons — PostgreSQL, row-level security, self-hostable. But I almost forgot those reasons. The only thing that saved me from re-evaluating the same decision (and wasting a week) was a markdown file I wrote in 15 minutes.

The Problem

Every engineering team has this conversation:

"Why do we use RabbitMQ instead of Kafka?" "I think Dave chose it. Dave left 8 months ago." "..." "Should we switch to Kafka?"

And now you're spending a sprint re-evaluating a decision that was already evaluated. The institutional knowledge walked out the door.

Architecture Decision Records (ADRs)

An ADR is a short document that captures a significant decision. Mine are dead simple:

```markdown

ADR-003: Use Supabase over Firebase for Nexural

Status

Accepted (2024-06-15)

Context

Need a database and auth solution for the Nexural trading platform. Requirements: PostgreSQL (for complex queries), row-level security, real-time subscriptions, self-hostable (for future enterprise clients).

Decision

Use Supabase.

Alternatives Considered

  • Firebase: NoSQL limits complex trading queries. No RLS. Vendor lock-in with no self-host option.
  • Raw PostgreSQL on RDS: No built-in auth, real-time, or admin dashboard. Would need to build all of that.
  • PlanetScale: MySQL-based. No PostgreSQL features we need (materialized views, RLS, jsonb).

Consequences

  • Positive: Native PostgreSQL, RLS for multi-tenancy, built-in auth
  • Negative: Smaller ecosystem than Firebase, fewer tutorials
  • Risk: Supabase is younger and could pivot/shut down (mitigated by PostgreSQL portability — we can migrate to raw Postgres)

Revisit When

  • We need real-time collaborative editing (Firebase CRDT support is better)
  • We need to serve 100K+ concurrent connections (unknown Supabase limits) ```

That took 15 minutes. It will save me hours every time I (or anyone else) questions the choice.

What Gets an ADR

Not every decision needs one. My rule: if the decision would take more than 30 minutes to reverse, write an ADR.

Things that deserve ADRs:

  • Database choice
  • Auth strategy
  • API architecture (REST vs GraphQL)
  • Hosting platform
  • State management approach
  • Major library choices (ORM, testing framework)
  • Billing/payment provider
  • CI/CD platform

Things that don't:

  • Which CSS class naming convention
  • Tabs vs spaces (actually, this probably does)
  • Which icon library
  • File naming conventions

Where I Store Them

``` docs/ adr/ 001-use-nextjs-for-frontend.md 002-use-stripe-for-billing.md 003-use-supabase-over-firebase.md 004-monolith-over-microservices.md 005-raw-sql-for-dashboards.md ```

Numbered. In the repo. Version controlled. Searchable.

When someone asks "why do we use X?" the answer is `docs/adr/`. Not "I think I remember" or "ask the person who left."

The Superpower Nobody Talks About

ADRs aren't just documentation. They're a thinking tool. The act of writing down "Alternatives Considered" forces you to actually consider alternatives. I've changed my mind mid-ADR at least three times because writing it out made me realize my original choice was wrong.

The 15 minutes you spend writing an ADR is the most undervalued engineering practice I know.

Want to see this in action?

Check out the projects and case studies behind these articles.