decisionshared last reviewed 2026-05-21

Don't build past v1 of any feature/phase without one real user

Context

Aspire's portfolio of in-house products grew faster than user adoption. Multiple projects (notably the wifi-portal predecessor of Alby Studio) shipped Phases 1-4 with zero real users on the system. By the time a real user showed up, the v4 surface required rework because v1/v2/v3 assumptions were wrong.

Pattern observed: AI-assisted dev accelerates iteration โ†’ easy to ship more features than the actual user base demands. Result: dead code, deferred deletion, and accumulated rework debt.

Detail

Decision

One real user must be using v1 of a feature/phase before v2 of THAT feature/phase begins.

Rationale

Practical heuristics

ScenarioApply rule?
First customer in beta, asking for a specific v2 featureYES โ€” they're a real user. Build it.
Internal Aspire usage (Kom + 1 team member)YES โ€” count as 1 real user (low bar)
Hypothetical "users will want X"NO โ€” don't build it
Engineering polish that doesn't add user-facing capability (refactor, perf, security hardening)NOT BLOCKED โ€” these are infra hygiene, not features
Existing v1 has obvious bugNOT BLOCKED โ€” fixing bugs is not v2

Generalizes to "don't deploy infra until client #1 signs"

The same principle applies one level up: don't stand up customer-facing infrastructure (e.g., a multi-tenant deploy) for products that don't have a first client lined up. This is already in MEMORY.md as a separate cross-cutting rule (e.g., the Aspire Social Media Service won't have infra until client #1 signs).

Anti-patterns this prevents

Constraints we accepted

Revisit trigger

Actions

Related

๐Ÿ”— Relationships

graph LR no_v2_without_v1_user["no-v2-without-v1-user"]:::self no_v2_without_v1_user --> knowledge_os_stage_1["knowledge-os-stage-1"] no_v2_without_v1_user --> aios_workflow["aios-workflow"] classDef self fill:#715EE3,color:#fff,stroke:#291F50;