Who is the Spy

2025

Who is the Spy is a social deduction party game for iOS that lets friends gather around one device and challenge each other to uncover the spy in their midst. Players receive secret roles, take turns describing their words, and vote out suspicious players until the spy is found — or wins by staying hidden. I designed the app to be fast, intuitive, and easy to pick up even for first-time players. The app features smooth animations, a dark/light theme, customizable game settings, and random role assignment to keep each round fresh. It’s perfect for parties, hangouts, and ice-breaking events.

Available now on the App Store

Click the play button to download and try it out with your friends!



The problem

The classic "Who is the Spy" game is simple, but most apps we tried had two issues:

• Rules didn't match how we wanted to play, so the flow felt awkward.

• UI friction slowed down the fun — too many taps, confusing screens, and people got stuck mid-round.


I built this app to make the game fast, intuitive, and host-friendly, so a group can start in seconds and keep the energy going without interruptions.


Audience & context

• Primary audience: young people in gatherings (hangouts, parties, travel, ice-breakers)

• Languages: English + Chinese localization

• Learning goal: players should understand what to do in ~5 seconds through interface cues; hosts can rely on an in-app handbook anytime if they forget the flow.


Product principles (design constraints I committed to)

1. Zero learning curve: no onboarding burden; "see it once, you can play it."

2. Low device barrier: one phone supports up to 16 players — no installs, no accounts.

3. Keep the room moving: the UI should never become the reason the game pauses.


Key design decisions

1) Host-led flow to prevent chaos

This party game can get messy if the app expects everyone to understand the flow. I intentionally designed it around a host-led control model (the host can also play), with a built-in handbook that helps the host guide:

• when to pass the phone

• when to vote

• how to resolve disputes and keep pace

2) Anti-cheat mechanics for single-device play

Fairness matters when everyone is sharing one phone. I designed the reveal flow so that:

• Before and after each reveal, the secret word is not visible during phone passing.

• The reveal flow is non-reversible (no going back).

• Each reveal is tied to a specific player name in sequence; if someone tries to peek ahead, the next player will immediately notice the name/sequence mismatch.


Result: even in a casual party setting, cheating becomes hard and obvious, without adding annoying security steps.

3) Voting page iterated for clarity + speed

The voting page was the most iterated screen. The challenge was balancing:

• complete information (who is still alive, elimination order, vote state)

• clean layout (avoid visual overload)

• host speed (no stuck moments, no "what do I press next?")


I kept refining information hierarchy until the host could run the round smoothly without explaining the UI.

4) Feedback & pacing through micro-interactions

To reduce confusion between stages, I added:

• Full-screen stage separators so players always understand what phase comes next.

• Haptic feedback on key actions to confirm input and keep interaction "felt," not just seen.

5) Light/Dark mode that fits real usage

The app supports light/dark theme (and syncs with system) because party contexts change:

• Night use: dark mode reduces glare

• Day use: light mode maximizes clarity


Engineering implementation (iOS)

Tech stack

• SwiftUI for UI and interaction flow

• SwiftData for local persistence (fast, offline, simple)

• Firebase database for crowd-sourced ratings on played word sets (users can rate topics; ratings are uploaded and stored)

Architecture

• MVVM for maintainability and iteration speed (UI stays clean, logic stays testable and evolvable)

Localization

• English + Chinese localization wasn't "direct translation." Many game terms are culturally different.

Example: "blank role" in English vs Chinese user mental model (e.g. "whiteboard" wording expectations). I treated localization as a product UX problem, not a string replacement task, and manually proofread/adjusted phrasing for clarity.

Release quality mindset

I take update stability seriously because crash rate affects App Store performance and reviews. I follow a release routine (bug fixes + new features) that prioritizes stability before shipping.


Results

• 1.5k+ downloads

• Shipped multiple iterations focused on clarity, flow speed, and seasonal replay value.


Recent iterations

• Seasonal packs: Christmas Edition (limited-time themed word packs to keep content fresh)

• History record page: track games and outcomes, so hosts and players can review roles and eliminations afterward


What's next (roadmap)

1. Multi-device mode

Each player reveals on their own phone + anonymous voting + optional timer

→ increases fairness, scalability, and makes big groups smoother.

2. Custom packs + community sharing

Create and share word pairs; expand topic library with community creativity

→ increases replayability and builds long-term value.

Prioritization approach

• User needs first, balanced against technical cost (effort points)

• New/novel features validated via small-group testing or quick surveys before full release



project

Who is the Spy

year

2025

timeframe

1 month + updates

tools

Swift

category

App develop

roles

Product Designer + iOS Developer

Paxton Wang,

a product designer with focus on

user centre design3d modelling

Paxton Wang 2026 | All rights reserved.

Paxton Wang,

a product designer with focus on

user centre design3d modelling

Paxton Wang 2026 | All rights reserved.

Paxton Wang,

a product designer with focus on

user centre design3d modelling

Paxton Wang 2026 | All rights reserved.