Phases
Phase 1 — Project Setup & Foundation · 2 weeks
Phase 1 — Project Setup & Foundation · 2 weeks
Goal
Produce a bootable Unity project with the full Clean Architecture folder structure, all assembly definitions, a wired VContainer DI container, a passing CI pipeline, and placeholder scenes. Nothing gameplay yet — just a solid foundation that every subsequent phase builds on.Key Tasks
Dependencies
None — Phase 1 is the starting point.Definition of Done
- All 7 assembly definitions compile with zero errors
- VContainer DI container resolves at least one binding in the Bootstrap scene
- Placeholder scenes load on Android without crashing
- CI pipeline runs and is green (format check + analyzer + empty test suite)
-
ILocalSaveServiceround-trips a settings object to disk and back
Phase 2 — Core Domain & Gameplay · 3 weeks
Phase 2 — Core Domain & Gameplay · 3 weeks
Goal
Implement every domain entity, value object, and service that makes SET playable as logic:Card, Deck, Board, SetValidator, Player, and GameRules. This layer must be pure C# — no Unity, no Nakama — and must be exhaustively unit-tested. It is the shared truth used by the client, the AI, and (as a ported reference) the Nakama server.Key Tasks
Dependencies
Phase 1 complete (compilable project, asmdef structure in place).Definition of Done
-
SET.Domainassembly has zerousing UnityEngine;statements -
SetValidator.Validatereturns correct results for every valid and invalid combination of the 81-card deck -
Deckshuffle is reproducible given the same seed -
Board.AnySetExists()correctly returnsfalseon a board with no valid Set - All unit tests pass in CI
Phase 3 — Application Layer & State Machine · 2 weeks
Phase 3 — Application Layer & State Machine · 2 weeks
Goal
Build theGameSession orchestrator that drives a match from start to end-game using a finite state machine. Wire in command handling, reactive state streams, and penalty logic. After this phase a complete game loop — no UI, no network — can be driven by feeding commands into GameSession and reading back GameStateSnapshot objects.Key Tasks
Dependencies
Phase 2 complete.Definition of Done
-
SET.Applicationhas zerousing UnityEngine;orusing Nakama;statements - All valid state transitions covered by unit tests; all invalid commands silently discarded in the wrong state
-
GameStateSnapshotis an immutable record — no mutable properties - A console-driven test can play a full match (deal → select → claim → refill → … → end-game) without UI
Phase 4 — Single Player + AI · 3 weeks
Phase 4 — Single Player + AI · 3 weeks
Goal
Implement all four AI difficulty tiers (Easy, Medium, Hard, Expert) viaAIScanner, plus Practice Mode, Campaign Mode, and Daily Challenge. After this phase the game is fully playable in single-player without any UI beyond a thin test harness.Key Tasks
Dependencies
Phase 3 complete.Definition of Done
- AI claims Sets within the configured reaction window ± 10% on a fixed seed (verified by unit test)
- AI miss rate matches configured value ± 5% over 1 000 simulated rounds
-
DailyChallengeproduces identical board state on two differentGameSessioninstances given the same date seed - All three single-player modes (
Practice,Campaign,DailyChallenge) reach end-game without error
Phase 5 — Pass & Play · 1 week
Phase 5 — Pass & Play · 1 week
Goal
ExtendGameSession to support 2–8 human local players on a single device. Implement both claim input modes — colour-coded Tap Zones and sequential Turn Assist.Key Tasks
Dependencies
Phase 3 complete.Definition of Done
- Pass & Play session with 4 players reaches end-game with correct per-player scores
- Simultaneous tap from two zones within the same frame attributes the claim to the first arrival only
- Turn Assist correctly blocks input from all players except the active one
Phase 6 — Nakama Backend · 4 weeks
Phase 6 — Nakama Backend · 4 weeks
Goal
Stand up a fully operational Nakama server with an authoritative match handler that mirrors the domain logic, a 20 Hz tick loop, matchmaking (Ranked, Quick Match, Private Room, Tournament), leaderboards, and cloud save. This phase is the longest external dependency in the project — start it early and run it concurrently with Phases 4–5.Key Tasks
Dependencies
Phase 1 (project infrastructure), Phase 2 (domain logic used as authoritative reference for the server port).Definition of Done
- Bot clients can play a full match end-to-end against the Nakama server
- Two clients submitting a claim in the same tick are resolved in a deterministic order by server timestamp
- Leaderboard entries update correctly after a match concludes
- Cloud save round-trips player progress through a server restart
Phase 7 — Client Multiplayer Integration · 3 weeks
Phase 7 — Client Multiplayer Integration · 3 weeks
Goal
Connect the Unity client to the Nakama server. The client sends intent commands; the server sends back authoritative state. Implement matchmaking UI flow, disconnect/reconnect with a 30-second grace window, and full-state sync on rejoin.Key Tasks
Dependencies
Phase 3 (GameSession and command handling), Phase 6 (operational Nakama server).Definition of Done
- Client completes a full online match against a second client; scores match the server’s authoritative record
- Client disconnecting for < 30 seconds reconnects and resumes the match with no state divergence
-
NakamaMultiplayerServiceis the only class withusing Nakama;in the client codebase
Phase 8 — UI Framework & Core Screens · 4 weeks
Phase 8 — UI Framework & Core Screens · 4 weeks
Goal
Build every menu screen defined in the UI Layout Specification, wire them to reactiveViewModel classes, and establish the UINavigator screen stack used by all subsequent UI work. This phase does not include the game board HUD (that is Phase 9) but it must be complete before Phase 9 can begin.Key Tasks
Dependencies
Phase 3 (state machine andIGameStateProvider interface must exist).Definition of Done
- Full menu navigation flow is traversable end-to-end: Splash → Main Menu → Mode Select → any game-mode setup screen → back
- All screens are visually consistent (shared theme, no hard-coded colours)
- Colourblind mode applies texture overlays to card colour attributes and passes a contrast checker
- All
ViewModelsubscriptions are stored inCompositeDisposableand disposed on screen exit
Phase 9 — Game Board HUD & Feedback · 3 weeks
Phase 9 — Game Board HUD & Feedback · 3 weeks
Goal
Build the in-match UI: the 3D card grid, HUD, all card visual states, toast feedback, touch input routing, and the pause overlay. After this phase a real human can play a complete match through the Unity UI.Key Tasks
Dependencies
Phase 8 (UI framework and navigation), art assets for card prefabs and table textures.Definition of Done
- A complete match in all three modes (Single Player, Pass & Play, Online) is playable from the board screen
- All card visual states play the correct animation and return to idle without lingering coroutines
- Touch input is correctly discarded during animation lock states (no ghost selections)
- The board expands to 15 cards when
AnySetExists()returnsfalse— visually and logically
Phase 10 — Store, Settings, Profile & Stats · 1 week
Phase 10 — Store, Settings, Profile & Stats · 1 week
Goal
Wire the non-game screens from Phase 8 to real data sources: Google Play Billing for IAPs,ILocalSaveService for settings, and local/cloud save for profile stats.Key Tasks
Dependencies
Phase 8 (screen shells must exist).Definition of Done
- IAP purchase flow completes end-to-end in Google Play sandbox
- Settings changes persist across app restart
- Profile screen displays correct values from a seeded save state
Phase 11 — Tutorial & Onboarding · 1 week
Phase 11 — Tutorial & Onboarding · 1 week
Goal
Build the interactive tutorial that teaches the Set rules through forced card selections, and wire it into the first-launch flow.Key Tasks
Dependencies
Phase 9 (the tutorial runs on the game board screen).Definition of Done
- A new player who has never seen SET can complete the tutorial and then win a practice match without external help
- Tutorial completion is flagged in save data and the tutorial does not re-run on the next launch
- How-to-Play is reachable from the Main Menu in ≤ 2 taps
Phase 12 — Testing, Polish & Optimization · 4 weeks
Phase 12 — Testing, Polish & Optimization · 4 weeks
Goal
Produce a release candidate. Fix all bugs found during functional testing, hit 60 fps on the target device, pass the accessibility audit, and prepare all store assets.Key Tasks
Dependencies
All phases complete.Definition of Done
- Zero P0 or P1 bugs open
- Stable 60 fps on Snapdragon 665 across a 10-minute play session
- Nakama round-trip p95 ≤ 150 ms under stress test
- All acceptance criteria from the Project Vision doc are satisfied
- App store listing approved and release build uploaded to internal test track
Phase 13 — Launch Preparation · 1 week
Phase 13 — Launch Preparation · 1 week
Goal
Ship to Google Play. Run final QA smoke tests, configure production IAPs, and prepare launch-day monitoring on the Nakama server.Key Tasks
Dependencies
Phase 12 release candidate build approved.Definition of Done
- App is live in the Google Play internal test track and installable by test accounts
- All IAPs purchase and restore correctly in the production environment
- Nakama server handles production traffic without errors; all match flows verified end-to-end on the live instance