Writing · 1 September 2026 · updated 3 September 2026 · by Mike Hergaarden
Shipping to twelve platforms on one day
On 8 July 2021 we launched Crash Drive 3 on twelve platforms on the same day, all playing together. Five years later I can say which ones were worth it.
Five years ago I ended an article about performance with a promise: “An article on how we managed to port and simship all these platforms will follow very soon.” It didn’t follow very soon. Here it is.
On 8 July 2021 Crash Drive 3, the multiplayer stunt driving game we make at M2H, came out on twelve platforms on the same day: Steam on Windows, macOS and Linux, Epic, the Windows Store, Switch, PS4, PS5, Xbox One, Xbox Series, iOS and Android. A simultaneous release, a simship, with cross-play between all of them, so everyone could play together regardless of which one they were on. I still don’t know of another game that did that in one go.
You’ll see nine in older posts, including my own from that week, because that’s how we counted the stores. Twelve is the honest number: macOS and Linux are their own testing surface even when they share a Steam page, and Unity doing most of the work doesn’t make the checks go away.
Why all at once
There was a floor to begin with. Crash Drive 2 was already on Steam, Switch, iOS and Android, and a sequel that reaches fewer of its own players than the game before it’s a step back. So the question was never whether to do several platforms, only how many more.
Beyond that there are two reasons, and only one of them is about marketing.
The real one is concurrent players. A multiplayer game with nobody in it’s a broken game, and every platform you leave out is a slice of your population you don’t have. Free-to-play on mobile matters more than its revenue suggests for exactly this reason: it keeps the world populated, so the people who paid on Steam or Switch always have someone to drive into. For the record: a paid game on PC and console, free with ads on mobile, the same content everywhere, and nothing you can buy that makes you faster.
The second reason is that every store is a lottery ticket. Each one is a chance at featuring, at a front page, at an audience that finds you. The odds on any single ticket are low. Buying twelve of them for the price of a bit more engineering is a good trade, and that trade only works if the engineering is cheap.
What made twelve ports cheap
Everything below rests on one thing: the GDT, our Game Development Toolkit. Calling it a platform abstraction layer would undersell it, because it also handles the game talking to our own web servers.
The shape is boring and that’s the point. The game asks for an achievement to be unlocked with one generic call. Underneath, the GDT knows what that means on Steam, on Switch, on PlayStation, on Xbox, on iOS, on Android. It’s the same for saves, for identity, for the store, for everything else each platform insists on doing its own way. The game code, C# in Unity, doesn’t know which platform it’s on, and doesn’t want to. In practice it’s a package every Unity project of ours pulls in, wrapping the native SDKs on one side and our own backend on the other.
It started with Marooners and came into its own on Verdun, when we threw away the first console port and rebuilt it from scratch for the re-release. Every game since has paid into it and drawn from it. By the time Crash Drive 3 needed twelve platforms, most of that work had already been done for something else.
That’s why we did the ports ourselves, nearly all of them. The one exception was Xbox Series. The Xbox One port was as good as ready from the Marooners, Verdun and Tannenberg code, but the new Series hardware wanted things the older code didn’t do. We handed that to a freelancer who had already shipped on Series; he was simply faster at it that month than we would have been.
Pick the date last
Everyone asks how you coordinate one release date across storefronts with wildly different lead times. Nintendo wants you approved weeks ahead. Steam wants a day.
We didn’t coordinate it. We built everything first and only picked the date once it was as good as finished.
That inverts the usual order. By the time only one platform was left, we could see a month ahead with certainty, and that platform was mobile, the one with the shortest lead time. The consoles, with their long approval windows, had been done for months.
If you pick the date first, you spend the last two months negotiating with the platform that has the least flexibility. If you pick it last, you spend those two months finishing the game.
The part certification actually changed
Cross-play across twelve platforms is a technical problem right up until it becomes a certification problem, and then it becomes a strange one.
The technical side is one paragraph. Everyone lands in the same rooms regardless of store. Underneath the store account every player is a GDT account, so a Switch player and a phone player are the same kind of thing to the server. Friends on different stores find each other with a room code, because friend lists don’t cross platforms. And one platform holder requires a setting to opt out of cross-play, so that setting exists everywhere. All of that was already in the GDT from Marooners and Verdun. What was new was certification.
We thought it was fun to show which platform each player was on. It tells you something about the room you are in. But console certification has opinions about that. Sometimes you may display it. Sometimes you may not. The rules aren’t the same across platform holders and they aren’t always the same over time.
So a feature that works perfectly, that nobody would call a bug, that players like, has to behave differently depending on whose machine it’s running on. That’s the kind of thing you can’t design around in advance because you find out during certification. In the end the badge stayed: on the platforms that are allowed to see the others you get the real icons, and on the ones that aren’t, everyone else gets a generic one.

The badge that certification has opinions about.
Certification itself was less dramatic than its reputation. Steam raised nothing at all. The three console platforms always come back with something, but nothing that stopped us. Twelve years of shipping to platform holders, five of them to the consoles, means you have already learned what they will ask for.
Mobile was the hard one
This is the part I didn’t expect and still find funny. Of twelve platforms, the ones people call the simplest were by far the most work.
PC was easiest. PlayStation after that. Mobile was worse than all the consoles put together.
Consoles are bureaucratic, but the bureaucracy is stable. You learn it once. Mobile moves under you twice: the hardware, thousands of devices you’ve never held in configurations you can’t reproduce, and the rules, which change between one release and the next. Every time we go back to mobile, something is different.
The castle in the forest, or the Unity asset bundle bug
The bug I remember most wasn’t a mobile bug, though. Here’s my favorite of the whole project.
Depending on the build, the castle in the forest level would break. Not depending on the device, or the platform, or the settings. Depending on the build. The same source, built again, would come out fine or come out wrong.

The castle. Built twice from the same source, one of the two would be fine.
We assumed it was the model, replaced it, and it kept happening. Then it turned up somewhere else entirely, on a billboard in the desert. So it was never about any particular asset. It was a rare Unity 2019.4 bug in how asset bundles get packed, and it would pick something at random and corrupt it. On some platforms the result merely looked wrong. On others the game crashed.
We never found a fix. What we found was a detection script: build, check whether the thing came out intact, and if it didn’t, build again. It’s possible that’s still in there.
That never reached players, which is the only part that matters. But it’s a fair picture of what shipping to twelve platforms is like. There was nothing heroic about it. We wrote a script that checked whether the castle survived.
What each platform was worth
Switch carried it: well over half of the money, and about a quarter of everyone who has ever played. Not at launch, though. The first months on Switch sold a couple of thousand copies at full price and that was it. What carried it were the sales. In waves that run per region, it kept selling for five years, and the bulk of it in those waves rather than in between. On Switch, launch day turned out to be where the price curve starts.
PlayStation and Xbox each did about a fifth of what Switch did. Steam about a tenth, and on Steam most of the copies were keys from bundles and giveaways rather than sales.
Epic and the Windows Store were the ones that weren’t worth it, at least not for the money. They took barely any work and brought in very little. They were on the list for no better reason than that it was possible, and both were good to work with: a platform holder that knows who you are is worth something later, and you can’t put that in a spreadsheet. But if I had to pick one thing to leave out of a launch, it would be those two, unless there’s a deal that makes it worth it.
Mobile is the clearest version of the other thing, and the one where we were most wrong. We expected more from it than we got. I’d hoped for more, honestly. Over a million installs on Android and a few hundred thousand on iOS earned, with the ads, less than a fifth of what Switch did.
Mobile has been optimized to death. The companies that do well there have a user acquisition machine, monetization tuned to the second decimal, and years of practice at both. A driving game from a small studio doesn’t have a lane in that, however good the game is, and no amount of engineering on our side changes it.
What mobile gave us instead was players. Three-quarters of everyone who has ever played came in on a phone. That’s the reason the game had a population at launch, and still has one, just under two million unique players in five years. It just was never going to be the money, and I’d rather say that than pretend the plan worked.
- Android57%
- Switch23%
- iOS18%
- PC and other consoles2%
- Switch58%
- Xbox14%
- PlayStation13%
- iOS7%
- PC6%
- Android2%
If you only wanted the money, you could have launched on Switch alone. You would also have bet everything on one store’s price curve.
What it costs to keep
It costs less than people fear, as long as you don’t patch.
The big platform holders take care to keep games running. Once a console version is out, it mostly stays out, and it keeps working. The moment you want to patch, every platform is a platform again: every one you are on is one you have to go through again for every update, and one release across twelve of them is work you can plan and be done with in a way that a patch every week across twelve of them isn’t.
Mobile is the exception even then. Roughly every two years you have to go back in: monetization and ads move on, and both Apple and Google will actively remove or hide games that haven’t been updated in a while.
Built not to need patching
We knew all of that before we started, so we built Crash Drive 3 not to need patching. The seasonal calendar runs itself and keeps running: Halloween and Christmas come round every year, on their own, with nobody touching anything. On mobile the store deals rotate by themselves too. On top of that, a good deal of the game is configured remotely from the GDT backend, so we can start an event whenever we feel like it without shipping a binary anywhere.
That’s the part I’m most pleased with. We got twelve platforms and the ability to change things, because we decided up front that the game ships finished and everything after that arrives over the wire.
Would I do it again
Simship works for a launch. It doesn’t work for updates. We knew that going in, which is why Crash Drive 3 is built the way it is, and it’s the part every simship postmortem leaves out, because everybody writes about the launch.
For a launch, mostly yes. Extra platforms are less work than extra games, each one widens the audience, and the GDT keeps the marginal cost small. That part of the calculation hasn’t changed.
What it doesn’t survive is a game whose whole point is that it keeps changing. The co-operative RPG I want to build is exactly that kind of game. I want to update it constantly. In the early Verdun days we shipped several times a day: someone reported a bug or asked for something in the morning, and it was in the game that evening. That’s the most fun I have ever had making games, and it’s only possible when getting a build out costs nothing.
You can’t do that on twelve platforms, and you can’t build your way around it the way we did with Crash Drive 3, because that trick only works for a game whose content stands still. A game that changes every week is nothing but patches. So the next one probably won’t be on twelve platforms. I’d rather pick which of the two I want: reach on day one, or speed on every day after it. I’ve caught myself eyeing the far end of that, too: one platform, or, and I feel slightly guilty typing it, a single-player game.
What I keep coming back to is why we did it in the first place, and it was never the lottery tickets. It was someone on a Switch and someone on a phone and someone on a PC, in the same world at the same time, because they are friends and they wanted to play together and nobody had to buy another machine to make that happen.
That still seems worth the mobile port to me.
Who wrote this
I’m Mike Hergaarden, founder of M2H. I’ve been building multiplayer games since 2004, co-created Photon Unity Networking with Exit Games, and with the M2H team shipped Crash Drive 3 across twelve platforms with everyone playing in one world. The technical side is the part of the job I like most.
More writing
- The backend that runs every game we make, ten years and counting September 2026
- Optimizing performance of Unity games July 2021
- The server side of game development January 2012
Get the next piece by email
This is the writing list: pieces like this one, a few times a year, when there is something worth writing down. Game news is a separate list. No schedule, no filler, and you can leave in one click.
No inbox? Follow along on LinkedIn, put the RSS feed in your reader, or come talk about it on the M2H Discord.