Skip to main content

Decision Tools & Review Checklists

This appendix collects compact tools you can reuse in design reviews, ADRs, RFCs, and architecture workshops.

Rendering Decision Matrix

Use this before choosing CSR, SSR, SSG, streaming, or mixed rendering.

QuestionIf answer is "high"Architectural implication
Is SEO critical for this route?YesFavor SSG, SSR, or streaming SSR
Is above-the-fold content mostly stable?YesFavor SSG or cached SSR
Is interaction immediate and heavy?YesMinimize hydrated surface, consider CSR for deeply interactive regions
Does data change frequently?YesPrefer server orchestration plus explicit freshness strategy
Is client device quality uneven?YesReduce shipped JS and hydration work
Is personalization required on first paint?YesSSR, streaming, or hybrid composition may be necessary

State Ownership Worksheet

For each stateful value, answer these questions in order:

  1. Is the server the source of truth?
  2. Does the user expect the browser back button to restore it?
  3. Is the value purely local UI behavior?
  4. Does more than one route or shell-level surface need it?
  5. What invalidates it?
  6. What happens if it is stale for thirty seconds?

Default mapping:

If the answer is mainly...Put it in...
persisted and backend-ownedserver state / data layer
shareable and navigableURL state
local and ephemeralcomponent or feature-local state
truly cross-cutting runtime statecarefully bounded global state

Module Boundary Review Checklist

Use this when reviewing a codebase or RFC:

  • Does each feature have an obvious owner?
  • Are public APIs explicit?
  • Can one feature import another feature's internals?
  • Is "shared" carrying domain logic that should live elsewhere?
  • Are dependency directions enforced by tools, not only by convention?
  • Can a new engineer predict where new code belongs?
  • Can a feature be refactored without touching unrelated areas?

System Shape Decision Matrix

Use this when choosing between a modular monolith and micro-frontends.

ConstraintModular monolith is usually better when...Micro-frontends become more credible when...
Team countcoordination is still workablerelease coupling is a serious delivery bottleneck
UX consistencyshared experience matters stronglyproduct areas can tolerate looser runtime coupling
Runtime performancebudgets are tight and shared runtime mattersorganizational autonomy outweighs runtime simplicity
Ownership boundariesstill movingstable and durable
Platform maturityguardrails are still emergingcontracts, observability, and versioning are already strong

Security Threat-to-Control Table

ThreatTypical frontend exposureArchitectural controls
XSSuntrusted content, unsafe rendering, third-party codeoutput encoding, safe rendering defaults, CSP, dependency discipline
CSRFauthenticated state-changing requestsserver validation, SameSite cookies, anti-CSRF controls
Token leakageunsafe storage, logs, client bundlesminimize token exposure, prefer secure session patterns, sanitize telemetry
Supply-chain compromisenpm packages, injected scriptsdependency review, pinning, provenance checks, runtime isolation
Permission driftstale client assumptionsserver-side authorization, capability refresh, graceful denial handling

Error Taxonomy Template

Define at least these columns:

CategoryExampleUser message styleLogging levelRecovery path
User errorinvalid form inputdirect and actionablelowcorrect input and retry
Network errortimeout or offlinehonest and recoverablemediumretry or work with cached state
Server error5xx or broken responsecalm with fallbackhighretry, partial rendering, escalation
System errorinvalid client stateconstrained and safehighreset local scope or reload route
Fatal errorapplication cannot continuehigh clarity, preserve trustcriticalfail safely and capture diagnostics

Observability Signal Checklist

Track these at minimum:

  • error rate by route and surface
  • failed recoveries
  • Web Vitals in production
  • long tasks or blocked interaction windows
  • broken journeys at major handoff points
  • accessibility regressions in critical flows
  • version, release, and feature-flag context

Signals without ownership are noise. Every alert and dashboard should have a clear responder.