A fairness layer for CI that saves money by slowing you down just enough.
TL;DR
CI is too fast, engineers are too parallel, and cloud bills are too real.
The CI Arcade introduces a token-gated queue that meters the blast radius of human enthusiasm. One job at a time. Sometimes.
The Pitch
- Cut CI concurrency without saying “we cut CI concurrency”
- Align engineering behavior with finance targets using playful “game” mechanics
- Make throughput feel like a privilege you earn, not a utility you expect
Core Mechanics
You don’t run CI. You buy a turn.
Token lifecycle
- One active token per user. No token, no CI
- Tokens are consumed on job completion
- Forced issuance lets a user eject their currently running job to get a fresh token. Brutal but fair
Golden path flow
1. User requests token generation.
- Check for existing active token.
- If active token exists: Notify user (cannot generate new token).
- If no active token: Generate new token and mark as active.
2. User requests forced token issuance.
- Check for active job.
- If job is running: Terminate job, mark existing token as invalid.
- Generate new token and mark as active.
3. User provides active token to run CI job.
- Check token status.
- If valid: Run CI job, mark token as used upon completion.
- If invalid: Notify user (token no longer valid).
4. Log CI job result and token used.
- Provide feedback to user about job outcome.
Sequence diagram
Token state machine
UI Concepts
No code. Just vibes.
1) Home

- Big “Get Token” button
- “You have an active token” banner with a sad timer that counts up, not down
2) Queue + Force Issue

- Status + position in line
- Nudge/Bump controls
- Destructive Force Issue modal with “I accept the chaos”
3) Leaderboards + Finance

- Least Tokens Used (weekly)
- Finance panel with “Increase Arcade Capacity (Finance only)”
Workflows
“Happy” path
- Developer requests token
- Gets one
- Runs job
- Token is marked used when job completes
Result: Single-flight behavior. Cheap. Calm. Boring. Perfect.
“Panic refactor” path
- Developer spams commits
- Sees “active token exists”
- Tries Force Issue
- Running job is terminated, token invalidated, new token created
- Runs new job
Result: The Arcade discourages thrash with self-inflicted pain. Finance smiles.
“Oops stale token” path
- Developer tries to run a job with an invalid token
- Gets told it’s invalid
- Must request a new token like a normal human
Result: Order restored. Savings continue.
Pricing Theory
- Free tier: soft caps and passive shaming
- Team tier: hard caps, mandatory tokens, audit-grade logs
- Enterprise: quarterly workshops on “Mindful Builds,” SSO, and a concierge to rename “slow” to “thoughtful”
SLOs
- Token issuance P50 under 200 ms
- Queue visibility P95 under 1 s
- Job kill-on-force-issue P99 under 3 s
- Monthly target: CI spend reduced by 30% without anyone admitting why
Governance and Compliance Theater
- Audit log stores:
- user_id
- token_id
- job_id
- action (issued, validated, consumed, invalidated, killed)
- timestamps
- reason (human text, e.g., “panic push”)
- Retention: 13 months so you can draw bad trend lines during budget season
- “Separation of duties”: only Finance can increase concurrency ceilings
Change Management
- RFC 000: Rename “concurrency limit” to “Arcade Capacity”
- RFC 001: Replace “job cancellation” with “graceful prize reclamation”
- RFC 002: Introduce “Happy Hour” where tokens are free from 2–3 a.m. local time
Behavioral Design
- Variable rewards: random “jackpot” tokens drop for people who commit less than 3 times a day
- Social proof: weekly email celebrating the Lowest Token User
- Loss aversion: visible countdown before a Force Issue kill, so you feel it
FAQ
Isn’t this just a mutex for humans?
Yes. That’s the point.
Will engineers be slower?
Yes. Your cloud bill will be smaller. Pick your poison.
What about flaky tests?
Great news. You’ll notice them less often because you run fewer jobs.
How do I bypass this?
You don’t. Arcade Capacity is policy, not preference.
Launch Assets
One-pager diagram
Poster copy
- Headline: “Ship less. Save more.”
- Subhead: “Turns, not threads.”
- Footer: “The CI Arcade. One coin per run.”
Slack announcement
Arcade is live. You get one active token. Force Issue kills your job and gives you a new coin. Jobs without valid tokens are bounced. Leaderboards on Friday. Questions in #arcade-support.
How We “Measure Success”
- CI spend down 25–40%
- PRs linger longer but merges still happen
- Engineers report “less chaos” while privately seething
- Finance approves your next pet project because you “found savings”