Skip to main content
This page is the day-to-day reference for what to build and when it is done. Each phase has a stated goal, the concrete tasks required to meet it, its upstream dependencies, and a Definition of Done (DoD) — the measurable criteria that must be true before the team moves on. If a DoD item is not met, the phase is not complete, regardless of calendar time.
Durations are engineering weeks (40 hours/week). They assume moderate-to-high proficiency in Unity, C#, and — from Phase 6 onward — Nakama. Your actual velocity may differ; adjust sprint plans accordingly but never skip a DoD item.
The dependency graph below shows which phases must be complete before another can begin. Phases connected in parallel (e.g., Phases 3–5 and Phase 6) can be staffed concurrently by separate team members.

Phases

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)
  • ILocalSaveService round-trips a settings object to disk and back

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.Domain assembly has zero using UnityEngine; statements
  • SetValidator.Validate returns correct results for every valid and invalid combination of the 81-card deck
  • Deck shuffle is reproducible given the same seed
  • Board.AnySetExists() correctly returns false on a board with no valid Set
  • All unit tests pass in CI

Goal

Build the GameSession 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.Application has zero using UnityEngine; or using Nakama; statements
  • All valid state transitions covered by unit tests; all invalid commands silently discarded in the wrong state
  • GameStateSnapshot is an immutable record — no mutable properties
  • A console-driven test can play a full match (deal → select → claim → refill → … → end-game) without UI

Goal

Implement all four AI difficulty tiers (Easy, Medium, Hard, Expert) via AIScanner, 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
  • DailyChallenge produces identical board state on two different GameSession instances given the same date seed
  • All three single-player modes (Practice, Campaign, DailyChallenge) reach end-game without error

Goal

Extend GameSession 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

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

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
  • NakamaMultiplayerService is the only class with using Nakama; in the client codebase

Goal

Build every menu screen defined in the UI Layout Specification, wire them to reactive ViewModel 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 and IGameStateProvider 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 ViewModel subscriptions are stored in CompositeDisposable and disposed on screen exit

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() returns false — visually and logically

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

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

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

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

Roadmap Overview

High-level timeline table, critical path, risk register, and success criteria.

PR Checklist

The Definition of Done checklist that every pull request must pass before merge.

Coding Conventions

Naming, formatting, and class design rules applied across every phase.

Testing Standards

Unit test setup, coverage targets, and CI integration requirements.