How HexNest Built and Runs Birds of War as a Three Person Team with AccelByte

The short version
HexNest had five weeks between Steam Next Fest and launch to get a three-person team's live PvP backend ready for traffic they couldn't reliably predict. They used AGS Public Cloud for identity, economy and matchmaking, AMS for dedicated servers, and Extend for game-specific Go services. Public Cloud has no platform subscription fee and includes the first 30 CCU, so they could integrate and test before launch without a fixed platform fee. Existing Steam integrations, SDKs and Extend templates reduced the amount they had to build from scratch. AccelByte engineers stayed in the loop through QA and launch, reviewing a risky data reset, using platform logs to trace dropped reward calls, and fixing an upstream Go template issue. Birds of War launched to 5,471 unique players and 13,422 completed matches in its first five days.


Birds of War started as viral AI clips of a game that didn't exist. People wanted to play it, so HexNest Games built it. It's a 3v3v3 aerial PvP game. Nine birds, three nests, and a scoreboard that counts how many eggs you stole and managed to keep. Proximity chat is always on, so the enemy hears you before they see you, and every hit ragdolls. It shipped on Steam on 22 July 2026 at $9.99, built in Unreal Engine 5 by a three-person team alongside the Discord community that asked for it, and currently sits at 87% positive reviews.

What a Live PvP Game Needs Before Anyone Can Play It

Write out the backend requirements for Birds of War and very little of the list is about birds. Players authenticate through Steam and carry one identity across sessions. Matchmaking has to form matches quickly, respect latency, and backfill players into games already in progress, because Birds of War drops you straight into a lobby that visually fills up rather than holding you on a queue screen.

Dedicated servers have to exist in every region where players are, scale with demand, and recycle when matches end. A store reconciles Steam purchases against an in-game wallet, an entitlement system grants rewards without double-granting them, and progression, battle pass state, leaderboards and save data all have to survive a client crash.

None of that is the game, and all of it has to work before the game is playable. For a team of three, building it in-house isn't a sprint. It's a different company.

Architecture
What Birds of War runs on
Birds of War
Unreal Engine 5 client and dedicated server
Steam
 
AccelByte Gaming Services (AGS), Public Cloud
Foundations
Steam auth and accounts
IAM roles and permissions
Login queue
Online
Store, wallet, entitlements
Battle pass, code redemption
Leaderboards, stats, cloud save
Multiplayer
Matchmaking v2 with backfill
Sessions and parties
P2P relay, 16 regions
 
AccelByte Multiplayer Servers (AMS)
Dedicated server orchestration and hosting
11 fleets across 9 regions at launch peak
AccelByte Extend (custom logic, hosted)
Loot box roll with pity logic (Go), challenge suite
Daily and weekly challenges, voice chat routing
Written by HexNest: the Extend apps above, plus progression reward reconciliation on the dedicated server

What HexNest Kept and Handed Off

HexNest didn't hand off the whole backend. The split was between integrating existing services for the common infrastructure and writing the game-specific logic themselves. AccelByte Gaming Services covers identity, the economy and the multiplayer layer. AccelByte Multiplayer Servers runs the dedicated servers, which at launch peak reached 287 across 11 fleets in 9 regions. AccelByte Extend hosts the services they wrote themselves.

Who built what
Where the backend work lived
 
Provided by AccelByte
Steam authentication, accounts, login queue
Matchmaking, backfill, sessions, parties
Dedicated server orchestration, 9 regions
Store, wallet, entitlements, battle pass
Leaderboards, stats, cloud save, code redemption
Hosting and scaling for custom logic (Extend)
P2P relay across 16 regions
 
Written by HexNest
Client-side refresh of wallet and unlock state
Pre-game lobby flow and region selection in the client
Game server build, and its shutdown exit behaviour
Progression reward reconciliation on the dedicated server
Loot box roll and pity logic, written in Go on Extend
Daily and weekly challenge rules, on the Extend suite
Voice chat routing between party and match lobby
HexNest kept the game-specific logic and handed off the infrastructure underneath it.


HexNest's progression and reward logic took several iterations before it was reliable. At match end the dedicated server reads authoritative XP and mastery levels, checks fulfillment history so rewards missed in an earlier match get recovered without duplicating anything, and grants every item on the ladder with a stable order number so retries are safe. The loot box roll with its pity guarantee is a Go service running on Extend, built on AccelByte's loot box template with HexNest's own guarantee logic on top, so the platform routes the entitlement decrement through their app and their app decides what the player gets.

AccelByte didn't remove backend work from the project. It meant more of HexNest's backend work could stay focused on Birds of War itself.

“We wrote the loot box logic, the challenge rules, the progression reconciliation. Writing server allocation and a Steam wallet on top of that wasn’t happening, and none of it is the game itself.”
Matt Didehvar, Lead Developer, HexNest Games

Five Weeks from Demo to Launch

HexNest ran a demo during Steam Next Fest in June 2026. Around 24,000 people downloaded it over the week, it peaked near 300 concurrent players, and the wishlist count passed 100,000. Full release was set for 21 July, which left about five weeks.

Their requirements were short: backend services they didn't have to write, somewhere to run game-specific logic without maintaining a fork of the platform, regional coverage they could expand on request instead of provisioning themselves, and a cost model that didn't punish a game which might peak at 300 players or at 5,000. That last point was not hypothetical. Asked for a launch-day CCU estimate, the honest answer from the studio was somewhere between 3,000 and 10,000, with no real confidence in either end of it. AGS is priced on peak concurrent users, so they didn't have to guess right in advance. Public Cloud also has no platform subscription fee and includes the first 30 CCU, so the team could integrate and test before launch without paying a platform fee just to validate the setup.

HexNest initially asked us for the built-in Challenge service to be switched on, which would have handled what they needed at the time, namely granting an item at 100 kills. The service is on low support and doesn't receive feature work, and HexNest already suspected they would want daily challenges. Rather than switch it on, AccelByte pointed them at the open-source Extend challenge suite. That gave HexNest an existing pattern they could extend for daily and weekly challenges instead of shipping a one-off implementation they would have to replace and migrate later.HexNest weighed that against the added Extend cost, took the recommendation, and shipped daily and weekly challenges in launch build.

They made a similar decision with the loot box system. Pity systems are game-specific by definition, so nothing ships one out of the box. Instead of building the surrounding entitlement flow from scratch, HexNest started from AccelByte's Go loot box template on Extend and added the pity guarantee logic their game needed. Keeping it as a service override left the entitlement flow authoritative on the backend rather than depending on a call sequence completing correctly elsewhere.

What Launch Readiness Actually Looked Like

In the final week, our QA team ran three passes against a private build. The blockers ranged from a fleet-version mismatch that stopped matchmaking allocating a dedicated server at all, to TURN connectivity failures on custom games, to a missing Create Entitlement permission that meant dedicated servers were getting a 403 on every progression grant they attempted. One pass also found a path that flipped the battle pass to Premium without charging any Feathers, then reverted it and granted nothing.

Most of those were integration issues rather than platform defects. HexNest cleared nearly all of them within 48 hours, with AccelByte QA staying in the build loop and rerunning matchmaking, backfill, login queue, commerce and progression flows against each new build.

“There's nobody else on a team this size to check your work. Having someone else run the store and progression flows against every build meant we found things before players did.”
Matt Didehvar, Lead Developer, HexNest Games


HexNest had been developing against their production namespace, which meant the demo's stats, currency and leaderboard positions would carry straight into the live game. Matt wrote a reset script to clear them, and AccelByte engineers reviewed the code before it ran. They found two problems: a deprecated wallet API being called with a currency code where a UUID was expected, and a cloud save read that was missing a nesting level. Once those were corrected, the snapshot phase alone ran for hours, with the reset pass estimated at another four to six on top, against a launch that was already running late.

Running the reset after release introduced a bigger risk. Some player data can be deducted after the fact and some cannot, so a partial reset against a live population can leave accounts in inconsistent states. The alternative was to create fresh stat and cloud save records and point the launch build at those, leaving the demo-era records untouched. HexNest took that route. A small number of demo players carried a level or a cosmetic into launch, which was a considerably safer outcome than inconsistent production state on day one.

Birds of War went live on 23rd July, a day later than planned.

A few smaller issues surfaced during the first week. A US-East queueing report turned out to be the client requesting a region that wasn't deployed, while another connectivity problem was traced to ISP-level UDP filtering in one region. Steam purchases were reaching the backend correctly but weren't refreshing in the client until restart. HexNest fixed the game-side issues, and affected players were routed around the external UDP problem.

Two Production Incidents Worth Learning From

Requests that Never Left the Dedicated Server

After launch, HexNest replaced a deprecated fulfillment call with the supported server SDK method. In testing, roughly a third of each match-end reward burst produced no fulfilment record, while calls immediately before and after them succeeded, and the same rewards went through normally when re-sent in a later match.

Our engineers checked the platform logs first. They showed no failed calls, because there were none to show: the requests never arrived. The Unreal SDK applies its own client-side rate limit, six requests per second by default, and a full back-pay ladder for one player can run to 10 or 20 calls dispatched over a second or two. The excess was being dropped inside the SDK on the dedicated server, surfacing as a network error rather than a 429, which is why it looked transient and unrelated to the payload.

The first instinct was to raise the limit in the engine config, but that would only have moved the bottleneck. The requests would then have left the server and been throttled at the platform instead, returning 429s and consuming more of HexNest's namespace-wide request budget. We recommended pacing the dispatcher instead, to five requests per second per user, which also keeps it under the hard user-level cap. HexNest spaced their grants 200ms apart and added a fulfilment-history recheck as a backstop, so anything still missing gets re-sent without risk of double-granting. That resolved it without increasing backend traffic.

A Signing Key Fetched Once and Never Retried

Five weeks after launch, the crate opening broke in production. The first two visual cracks played normally and then the screen sat on "OPENING..." indefinitely, with no timeout and no error, until the player force-quit. It had been broken for more than a day before anyone reported it. The entitlement decrement endpoint was returning HTTP 500, and nothing was reaching the Extend app's handler at all.

The root cause was in our own Go loot box template. The app validates incoming tokens against IAM's public signing keys, which it fetches once at startup. If that first fetch fails, for example during a brief network problem while the pod is starting, the app carries on running without the keys and never retries, after which it rejects every incoming call and only a restart could clear it. A pod replacement that morning had landed in exactly that window.

Restarting the app restored service that day. We then changed the template so the initial key fetch retries with backoff and logs the failure, the gRPC health check reports NOT_SERVING until token validation is actually ready, and calls arriving before then return UNAVAILABLE rather than PERMISSION_DENIED. In the SDK, the key refresh now keeps running after a failed initial fetch so the app recovers on its own once IAM is reachable again, and startup errors name the step that failed. That fix shipped in our latest go sdk, so the recovery behaviour became the default rather than a one-off patch in HexNest's environment.

The Launch Window

Over the first five days, Birds of War drew 5,471 unique players who completed 13,422 matches.

Birds of War, first five days
5,471
unique players
23 to 27 July 2026
13,422
completed matches
on AMS dedicated servers
287
peak dedicated servers
11 fleets, 9 regions
Source: AccelByte launch summary report, 23 to 27 July 2026. Pending HexNest approval.


Matchmaking took in 37,125 tickets over the first 72 hours and matched 99.97% of the ones players didn't cancel. P99 time to match was around 15 seconds through the main launch window, rising to three or four minutes during thinner off-peak periods on day five. Match success stayed the same during those periods.

Platform behaviour, first 72 hours
99.97%
of tickets matched
excluding player-cancelled tickets
~0.15%
of acquisitions missed
~20 of the server requests, 72h
16
relay regions live
enabled before launch day
Scoped to the launch window, not an ongoing service claim.

Where They Are Heading Next

HexNest wants free-to-play weekends: switch on a Steam demo app ID for a weekend and let demo players share matchmaking, dedicated servers and progression with everyone who owns the full game. That requires one namespace to accept Steam authentication from two app IDs and resolve both to the same player identity, which isn't supported today because of how the commerce and platform integrations are bound to a single app ID. We have scoped the change at one to two weeks of further assessment followed by roughly four to five weeks of implementation and testing which is queued.

Birds of War is still run by the same three people who built it. The backend work didn't disappear when the game went live. It moved: less integration, more progression, content and the game-specific systems they wanted to own in the first place.

Build Your Game Without Building Every Backend System Around It

The parts that make Birds of War Birds of War were written by HexNest. The rest they didn't have to build. There's no platform subscription fee on AGS Public Cloud and the first 30 CCU are included, so you can integrate and test before paying for anything. AMS and Extend each come with a 90-day trial if your game is already live. Not sure which services your game actually needs? Talk it through with our team before you start.

You're almost signed up!

Verify your account by following the instructions sent to .

If you still haven't received an email, please check your spam folder.

Please provide a valid name.

Please provide a valid email address.

Please provide a valid studio name.

You must agree to the policy to continue.

Talk to us

Table of Contents

Bring your first player online today.

Get started for free, and scale as your game grows.