Hoozpic turns the pictures on your phone into a party game. A host starts a round, friends upload photos, and everyone races to guess who is who. AppMakers USA built the whole thing, and the real-time engine that keeps every round in sync.
Hoozpic works for friends, families, office teams and parties, in the same room or over a video call. The flow is deliberately effortless, which is exactly what makes the timing underneath it hard.
A host picks a theme, sets a photo prompt, and opens the game to a group.
Players drop in a photo and a caption, all hidden until the guessing starts.
Photos appear one by one, and everyone races to match each one to a player.
Scores tally into a live leaderboard, and the sharpest guesser takes the crown.
Screens show the app with illustrative sample data (players, names and results are placeholders, not real people).
It feels effortless to play. That is the hard part. Underneath every round is a clock, and thousands of games all ticking at once.
A Hoozpic game is a small state machine. It opens for submissions, locks, runs the live guessing window, then reveals results. The interesting question is not the states, it is how you move millions of them forward on time without a timer for each one.
A scheduler pings one plain endpoint every ten minutes. That single tick sweeps every game to its next state in a handful of bulk database queries. No per-game timers, no dangling jobs, nothing to lose on a restart. That pink pulse is the tick moving the whole board at once.
The obvious build schedules a timer when each game is created. It also falls apart the moment you run more than one server: clocks drift, restarts drop jobs, and you are left babysitting thousands of dangling timers.
So we made the state changes stateless and idempotent. Every scheduler tick runs a few updateMany queries keyed on dates: any number of games that are due move forward in a single query. The job is safe to run twice, and a missed run simply heals itself on the next tick. There is no per-game state to lose.
Players get "one hour left" style reminders, but a job that runs every ten minutes will happily send that three times. We keep one small row per game-and-reminder, so each pass sends only what has never been sent. Two queries, no locks, no double pings, even if the scheduler retries.
Game chat is bursty and only matters for a few live minutes, so sticky websockets across autoscaling servers were the wrong tool. A short poll asks for anything newer than the last message id. Because those ids sort by time, the id itself is the cursor, which means no extra indexes and a trivially cheap deploy.
Have a social or multiplayer idea that has to feel simple?
Get a Free Project Estimate →Multiplayer looks simple on the screen and hides all of its work underneath. We have shipped enough of these to know where they break, and every one taught us something Hoozpic inherited.
A live cross-platform game where we hardened the realtime layer against dropped connections, and generated room codes with a deterministic sequence instead of the random-guess-and-retry approach that collapses under load.
Read the case study →At scale, its realtime system started leaking game events between unrelated matches. We tightened event scoping around game and session ids so every player only ever hears their own game, the same discipline Hoozpic needs.
Read the case study →On another party game we built, the real engineering lived in orchestration: synchronized sessions, voting, timed reveals and live state across many players. The lesson stuck. Simple-looking rounds hide the hardest work, so we plan the timing first.
A pattern, not a one-offA ground-up build live on iOS and Android, still shipping: the latest release added in-game chat and new game modes.
The whole game clock runs on stateless bulk sweeps, so it scales across servers for free and recovers on its own after a restart or a missed tick.
Short-poll chat and a notification ledger deliver the live feel without sticky sockets or dedicated realtime servers, keeping running costs low.
That effortless feel is an engineering problem. We have shipped real-time games and social products across iOS and Android, and we know exactly where they break.