All projects Standard Life · Product design case study · 2026

PEOPLE

GAMES

COMMUNITY

PROGRESS

Paid is not playable.

PROJECT OVERVIEW

The session product for a shared gaming PC — built around the five facts one status was hiding.

ROLE

Lead Product Designer

TEAM

Design · Club ops · Technical lead · Owner & finance

SCOPE

Research → product model → IA → state model → design system → Stage‑1 build

TIMELINE

6 weeks · Stage‑1 shipped · Almaty

STATE MODEL

1 → 8

The incumbent described a whole session with one word: available. The replacement is eight independent dimensions, each naming what it does not prove.

POLICY CONFLICTS RESOLVED

15

Contradictions between written rules and running code, each traced to its source, consequence and owner. All fifteen resolved — each with a decision on record.

SHIPPED STAGE-1 CORE

1,529

Automated checks in a platform-independent core, guarding states, copy, contrast, grid step and the one rule the product cannot break.

01 / PROBLEM

THREE QUESTIONS. ONE GREEN LIGHT.

A player buys a specific hour on a specific machine. Between that payment and a playable game sit four systems, three companies and one desk — answered by a single status.

PLAYER

“Is this PC actually mine?”

The booking names a number. It is printed on a case under the table, in a room numbered from the other end. Paid time runs either way.

План зала Arbat, 52 места

Arbat hall · 52 seats · the app highlights 22

Observed on a real first visit

BUSINESS

“Can we own the session?”

An incumbent system the owner ruled out replacing for twelve months. Integration only. The player-facing layer was the part we could own.

INCUMBENT SYSTEM

locked for 12 months

integration only

PLAYER-FACING LAYER

ours to design and own

Owner decision · investment boundary

OPERATIONS

“Can we prove it’s clean?”

A locked screen looks finished, so staff skip the reboot at a minute-to-minute handover. Nothing asks whether the last player’s accounts are gone.

LOCKED

STILL SIGNED IN

Game launcher · previous player

Store account · previous player

Browser profile · previous player

Operator practice · lab-reproduced

THE SINGLE ANSWER

“Available.”

Three questions, three owners. The incumbent client answered all of them with the same word — and the word was always the reassuring one.

PLAYER

BUSINESS

OPERATIONS

AVAILABLE

one word, three different truths

Why Stage-1 begins with the state model

A GREEN STATUS IS NOT A FACT. IT IS FIVE FACTS AVERAGED INTO A LIE.

BASELINE

WHAT EXISTEDBEFORE THE WORK

A booking app already shipped. Gaming PCs on a third-party club system with its own client. One reference branch, 52 machines. No in-house developer, four hours of capacity a week.

No product spec for the machine side. No API contract I was ever given in full. The baseline and follow-up figures presented in this case study were supplied by Ayazbi, the TOP Game manager.

Сессионная панель клиента V2

01

Session state

02

Machine · hall

03

Time remaining

04

Paid until

05

Safe actions

V2 · Session panel — the green dot, and the five facts it averaged away.

03 / REFRAME

THE BRIEF SAID ADMINISTRATOR. THE EVIDENCE SAID PLAYER.

SUPERSEDED · H01

Administrator mediates player is served

Supported by inherited synthesis describing existing staff mediation — that it happens, not that it is necessary.

CURRENT DIRECTION · H02

Player completes the lifecycle staff are the exception

Intent, recorded as intent — then counted. After the rollout, 86% of sessions completed without staff assistance.

Экран выбора тарифа в клиенте 1 2 3 4

01

Price is visible

02

Player picks the pass

03

Discounts self-served

04

Player pays, no desk

V2 · Tariffs — the one step that always went through the desk, now finished by the player alone.

04 / STATE MODEL

The computer is not a screen. It is a promise with five signatures.

Once autonomy became the target, every comfortable simplification became a liability.

V2 · Lock screen — the machine names itself and grants nothing until someone is identified.

paid ≠ booked

Money has arrived. It says nothing about which machine, or when.

booked ≠ access granted

A reservation is a claim on time, not a door that opens.

access granted ≠ unlocked

The door can open while the machine still refuses the person in front of it.

unlocked ≠ playable

A desktop is not a game. Updates, launchers and accounts sit in between.

playable ≠ clean

The previous session can still be signed in behind a finished-looking screen.

If no administrator stands between the player and the machine, the interface itself has to be honest about what it knows — including the moments when it knows nothing.

THE SPINE OF THE PRODUCT

PAID BOOKED ACCESS GRANTED UNLOCKED PLAYABLE CLEAN
04 / KEY DECISION

Eight facts behind one plain sentence.

A locked PC can be ready for the next customer. An unlocked PC can be unusable. A disconnected PC may still be running a paid session — so the specification carries eight independent dimensions, and the player sees one sentence and one action.

one sentence · one action

Eight independent dimensions collapse into what the player actually reads.

Экран входа в клиент

A locked PC can be ready

Ready for whoever comes next, and granting nothing at all until someone is identified.

Экран завершения сессии и очистки

An unlocked PC can be unusable

Unlocked and busy: the wipe owns the machine until it can prove the last player is gone.

Экран активной сессии

A paid session outlives the answer

The timer runs on facts the client keeps re-checking, never on one status it decided to trust.

The trade-off I accepted

The specification grew considerably, and every surface now needs a freshness rule instead of a confident countdown. Twelve product invariants had to be written before a single screen was drawn.

In exchange, no screen can claim readiness from a status it never observed — the exact failure that produced sixteen unowned minutes and a compensation nobody was told about.

05 / PRODUCT EXPERIENCE

SHORTEST PATH TO A PLAYABLE GAME.

One dominant action per screen, chosen by state: enter with the app code, pick a package, start the session, choose a game, continue CS2, confirm the added time, finish safely. Balance, loyalty and club offers never compete with it.

LOCK CLAIM TARIFF LIBRARY LAUNCH SESSION END GATE
Экран блокировки со входом по QR

LOCK   The station number is the largest element on screen — larger than the logo, read from a metre away by someone who has just walked in. No number in configuration means no number on screen and no login offer at all.

Главный экран клиента
Библиотека игр

HOME   Session status is persistent chrome, not a fifth destination. Player counts and star ratings were removed: the club has neither the source nor the right to show them.

LIBRARY   Installed and ready is a filter, not a badge. «Game clicked» is not «game ready» — launch carries nine states from requested to playable.

Экран запуска Counter-Strike 2
Экран выбора тарифа

LAUNCH ROUTE   Own account or club account — the consequential difference. Credentials are never stored or shown in TOP Game, on a machine the next stranger will use in an hour.

TARIFF   Price and the resulting end time are both visible before payment. The client displays one authoritative offer; it never calculates a rate, a discount or a refund.

Сессионная панель на весь экран

SESSION   Time is the product’s main object, not a status line. This is its full-screen form; in game, the same four actions live in a compact tray-and-hotkey panel. The always-on-top overlay was tested against anti-cheat, focus and exclusive-fullscreen behaviour on real titles before rollout.

06 / SYSTEM

THREE FORMS. ONE PRODUCT.

FORM 01 · ESC

Secure shell

Full screen, no desktop behind it. Locked machine, unresolved identity, ending and cleanup.

FORM 03 · F9

Quick panel

During a stable game. Time, extend, help, end. Never a shop, never a profile editor.

FORM 02 · ENTER

Full client

Before play, or opened during a session. Home, Games, Club, Profile — status and balance are chrome.

13

screens in the prototype

80

local transitions

9

game-launch states

12

product invariants

One writer per fact

The hardest part was not the interface. It was agreeing who owns each consequential fact once four systems disagree. «The backend decides» is not an answer: a backend cannot prove a physical action happened.

So requested state, last observed state, observation time and entitlement are stored as four different things. The client presents, executes, observes and reports honestly — including result unknown. It never creates an entitlement, adds time, prices anything or declares cleanup done.

Three ways to sign in

01 — A short-lived claim from the mobile app, bound to the visible identity of this machine.

02 — One-time phone verification, or assisted recovery.

03 — Reusable phone and password — parity only, approved by the shared-PC threat review. Its prominence on the lock screen was settled with the design system after the review.

07 / RECOVERY

A bank success is not an hour of play.

Recovery is the product, not an error state bolted onto it. An unknown result never resolves itself into success or failure, and a retry re-checks the original attempt instead of creating a second one that could charge a player twice or end the next player’s session.

01 WRONG PC

02 RESULT UNKNOWN

03 PAID, TIME UNCONFIRMED

04 EXTENSION BLOCKED

05 CLEANUP UNCONFIRMED

06 SAFE TO LEAVE

ENTRY

Three entry layouts were explored in the file. The QR-first layout was declared current after the threat review; the other two are kept as a record.

Экран входа

VOLUNTARY ENDING

The exact remaining time and the approved consequence of giving it up. If the financial consequence is unknown, the action is not offered as final.

Экран завершения сессии

REMOTE ASSISTANCE

Who is asking, what for, and for how long — consent is bounded to ten minutes, the indicator persists, and a stop control stays on screen.

Экран запроса удалённой помощи

A CATEGORICAL REFUSAL

SOME REFUSALS MUST NOT OFFER RETRY.

If the scanned claim belongs to another machine, repeating it cannot help. The screen names the category and points at the right desk instead of inviting a second attempt.

Sixteen lock states are specified, including «verification unavailable — this is not a refusal of your booking», «station not configured» and «machine out of service». The last two offer no login at all.

ENTITLEMENT

Valid — for a different station

ACCESS

Not granted here

NEXT ACTION

Go to your own PC. No retry control is drawn.

09 / ACCESSIBILITY & LANGUAGE

A PHONE IS HELD. THIS SCREEN IS READ STANDING UP.

The type scale, the contrast floor and the keyboard model all follow from one physical fact: the reader is a metre away, has just walked in, and may be looking for a machine rather than at the screen.

TYPE SCALE

14 · 16 · 18 · 20 · 24 · 32 · 48 · 64 · 232

STATION NUMBER

232

232 px — one per screen, read from a metre away

Номер станции на экране блокировки

the same number, at the size it is actually drawn

TYPE FLOOR

14 px, never lower. The 10–13 px sizes carried over from mobile were all lifted; density comes from spacing, not from shrinking text.

SCALE

14 · 16 · 18 · 20 · 24 · 32 · 48 · 64 · 232 — the last one is the station number, one per screen.

CONTRAST

4.5:1 body · 3:1 large · 7:1 over photography. Text on an image always sits on a defined scrim gradient.

KEYBOARD

Every critical flow is operable by keyboard, with a visible 2 px focus ring. The mobile system has no focus colour — a phone has no keyboard — so this token was added and approved for the PC client.

LANGUAGES

Russian, Kazakh and English are equal. Kazakh strings run 10–20% longer, so layouts are checked in all three. Kazakh was proofread by a native speaker before rollout.

STATUS

Nothing is carried by colour alone; every status has text. Reduced motion disables animation, and there is none during a game at all — the frames belong to the game.

10 / DESIGN LANGUAGE

Two oranges. No red.

Two audits turned a screen that looked strong into a screen that could be built. The rules below are what survived them — short enough to be remembered by whoever builds the next screen.

MAIN TYPEFACE

RegularMediumSemiBold

Onest

AaBbCc01234567{(!@#$?&)}

TOP GAME
#E75503 #35D07F #FFC857 #FF5C6C #F7F4F2 #090909

Action fill

#E75503

Every primary action. Its label is near-black at 5.40:1 — no light label passes on solid orange.

Accent text

#FF823F

Every orange word and active state, at 7.93:1 on card. Six oranges found in the file were reduced to these two roles.

Resolved

#35D07F

Used once in the whole flow: the confirmed end of a session.

Attention

#FFB16F

Warnings and refusals share one colour. A refused login is a state with a way out, not an alarm — the system has no red.

The 71.87% discovery

The lock screen carried 8.6 and 12.9 px text, three type families, and a left margin at five different values while the right was clean. Dividing the odd sizes by 0.71865 returned whole numbers: a block designed at another scale had been pasted in and squashed. That one act explained almost every geometric defect.

White text sat on a photograph of lava — 3.5:1 body, 1.4:1 for a highlight label, unfixable by colour. Scrim became a component with a defined gradient and a minimum height. A Kazakh greeting began with a Latin «C» instead of a Cyrillic one: identical to the eye, broken for search, spellcheck and font fallback.

Three surfaces, one palette

The home screen read well and lived in a different design system from the lock screen and the mobile app — cool blue-grey against warm. The audit counted twenty near-whites doing the job of three text roles, thirteen type sizes against nine, and twelve corner radii where four sat side by side, indistinguishable.

A «recently played» badge failed at 2.60:1; white reaches only 3.69 on that orange. The label became near-black at 5.40:1, and the rule generalised into the two-orange system above.

0

type sizes below 14 px after the rebuild

0

foreign fonts remaining

0

elements out of frame

0

text overflows — verified by script, not by eye

11 / THE BUILT PRODUCT

Keeping demo accessexplicit.

The Windows client uses .NET 8 and WPF, with privileges held by the service. The example below documents the demonstration build; it is separate from the integrated player flow described in this case study.

The demo entry model has ten states. None of them grants access to a paid session.

TopGame.Core / Entry / EntryStatus.cs

// Demonstration build: entry status model.
// This example does not grant a paid session.
enum EntryStatus
    NotPresented
    Checking
    RefusedWrongStation
    RefusedNotStarted
    RefusedExpired
    Unverifiable
    NeedsStaff
    ResultUnknown
    ServiceUnavailable
    Offline
// Integrated access depends on the incumbent
// system, not on a locally simulated approval.

In the demonstration build, the demo banner is tied to the authority implementation. A labelled debug control opens the session interface for inspection. This describes demo behaviour, not the live entry flow.

Keep the boundary visible

A demo may show the interface without granting a paid session. The integrated product relies on the incumbent system for entitlement. Keeping these contexts distinct prevents a demonstration from being mistaken for real access.

The same discipline runs through the rest. Publisher artwork is absent by design, so a tile without a licensed file is drawn from the letters of its title and says so. Station identity splits into a machine id and a printed display number: when hardware is replaced, the sticker does not change.

Scope: the client owns the player-facing layer only. Windows lockdown, game launching, payments and the backend stay with the incumbent system and are reached through integration — the client never creates an entitlement. It is per-monitor DPI aware, and the legal wording carried over from iOS was reviewed by a lawyer before rollout.

1,529

automated checks in the platform-independent core

47

QR strings hand-encoded and read back by an independent scanner

76 × 3

localisation keys in RU · KK · EN

11

deterministic failure scenarios on a debug switch

12 / THE PAYOFF

WHAT IS BUILT, WHAT IS MEASURED,

WHAT COMES NEXT.

Ayazbi, the TOP Game manager, supplied the before-and-after figures below. They cover sessions without staff assistance, time to play, staff interventions and repeat payment attempts.

STATUS

BUILT

Designed, built, running

MEASURED

Counted during the Stage-1 rollout

NEXT

Scoped for Stage-2

STAGE-1 PILOT RESULTS

MEASURED

Source: Ayazbi, TOP Game manager. Before-and-after figures for the rollout in Almaty; metric definitions are shown below.

MEASURE

BEFORE

AFTER

HOW IT WAS COUNTED

01

Sessions completed without staff assistance

54%

86%

«Assistance» is any staff action at the desk. A conversation at the counter counts, not only a ticket.

02

Arrival → playable median

8:00

3:10

Clock starts at the door, not at login. Queue time belongs to the metric.

03

Staff interventions per 100 sessions

34

11

Counts only interventions the system could have prevented.

04

Duplicate payment attempts

4.1%

0%

No repeat payment attempts were recorded in the reported after period. This metric tracks attempts, not duplicate charges.

ANTI-GAMING RULE

Autonomy counts only when the session also ends cleanly. A metric you can improve by making the system harder to leave is not worth moving.

01 / BUILT

A designed system and a running Stage-1 client

Eleven screens, a state model, a payment guard and an entry flow that exists as software — not as a slide. Everything a team could pick up on Monday and put in front of a player.

BUILT · VERIFIABLE BY LOOKING AT IT

02 / MEASURED

Four numbers that moved

The reported measures cover independent sessions, time to play, staff interventions and repeat payment attempts. Before-and-after figures were supplied by Ayazbi, the TOP Game manager.

MEASURED · BEFORE AND AFTER

03 / NEXT

Stage-2: the rest of the lifecycle

PC-to-PC transfer is already self-service. Extension across midnight, group bookings and refunds remain staff-assisted and are in scope for Stage-2.

SCOPED · STAGE-2