Decision Model

Choose a stack by constraints, not familiarity. A familiar stack that fights platform policy, distribution, or native APIs is not the simple option.

The Seven Questions

QuestionWhy it mattersExample signal
What is the product shape?Prevents framework-first thinkingStatic report, PWA, native app, CLI, backend, AI tool
Which platform APIs are core?Determines when native winsSMS, Bluetooth, file watching, notifications, widgets
Where does data live?Avoids premature servers and syncSQLite, files, IndexedDB, backend DB
How will users get it?Distribution is product workURL, Play Store, Microsoft Store, installer, package manager
What quality gate proves done?Dev server success is not release readinessRelease build on device, packaged desktop app, offline PWA test
What can one person maintain?Solo-dev scope beats theoretical eleganceOne repo, one CI path, one runtime
What will AI get wrong?Agent productivity depends on guardrailsUWP APIs in WinUI 3, stale Android examples, unsafe Electron defaults

Cost Of Wrongness

Some wrong choices are cheap to reverse. Others create release and data traps.

ChoiceCheap to reverseExpensive to reverse
Static web vs SSRUsually cheap if routing/data model is cleanExpensive if auth/session assumptions spread everywhere
PWA vs native mobileCheap for early prototypesExpensive after users depend on offline/native permissions
Expo vs nativeUsually manageable with development builds or prebuildExpensive if custom native code dominates from day one
Tauri vs ElectronModerate if UI is plain webExpensive if Node APIs or Chromium-specific behavior define UX
Local-first vs backendCheap while data is local/exportableExpensive after sync/account models ship
AI tools without sandboxLooks cheap initiallyExpensive after untrusted tools touch user workspaces

Minimum Decision Record

Use this before implementation:

Product shape:
Default stack:
Why this rung:
Avoided stacks:
Native/platform APIs required:
Data boundary:
Distribution path:
Quality gate:
Known traps:
Escape hatch:

Gotcha: “AI can generate it” is not a decision signal. AI can generate broken release paths, stale platform APIs, and unsafe tool execution just as quickly as good code.