M2H

Writing · 1 September 2026 · updated 3 September 2026 · by

Shipping to twelve platforms on one day

Crash Drive 3 launched on 8 July 2021 on twelve platforms at once, all playing together. What that took, which platform paid for it, and the two I would skip.

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 did not 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 do not know of another game that did that in one go.

You will see nine in older posts, including my own from that week, because that is 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 does not 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 is 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 is a broken game, and every platform you leave out is a slice of your population you do not 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 is 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. 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, does not know which platform it is on, and does not want to. In practice it is 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 is 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 did not 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 did not 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 do not 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 are not the same across platform holders and they are not 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 is running on. That is the kind of thing you cannot 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 are not, everyone else gets a generic one.

The Crash Drive 3 lobby, with an icon next to each player showing which platform they are on

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 did not 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 have never held in configurations you cannot 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 was not a mobile bug, though. Here is 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 in the forest, the level that would come out corrupted on some builds and fine on others

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 did not, build again. It is possible that is still in there.

That never reached players, which is the only part that matters. But it is a fair picture of what shipping to twelve platforms is like. Not heroic engineering. A script that checks 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. If there is a lesson in that, it is that on Switch the launch is the start of the price curve, not the end of it.

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 were not worth it, at least not for the money. Barely any work, very little back. 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 cannot 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 is 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. 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 does not 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 is not a consolation prize: it is the reason the game had a population at launch and still has one now, just under two million unique players in five years. It just was never going to be the money, and I would rather say that than pretend the plan worked.

Where the players came from: Android 57%; Switch 23%; iOS 18%; PC and other consoles 2% Android: about 57%Switch: about 23%iOS: about 18%PC and other consoles: about 2%
Where the players came fromEveryone who ever played, per platform, rounded. Just under two million in total.
  • Android57%
  • Switch23%
  • iOS18%
  • PC and other consoles2%
Where the money came from: Switch 58%; Xbox 14%; PlayStation 13%; iOS 7%; PC 6%; Android 2% Switch: about 58%Xbox: about 14%PlayStation: about 13%iOS: about 7%PC: about 6%Android: about 2%
Where the money came fromNet revenue over five years, rounded. PC is Steam plus the smaller stores.
  • 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

Less than people fear, on one condition: that you do not 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 is not.

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 have not 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 is the part I am most pleased with. Twelve platforms and the ability to change things, as long as you decide up front that the game ships finished and everything after that arrives over the wire.

Would I do it again

Simship is a launch strategy. It is not an update strategy. We knew that going in, which is why Crash Drive 3 is built the way it is, and it is 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 has not changed.

What it does not 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 is the most fun I have ever had making games, and it is only possible when getting a build out costs nothing.

You cannot do that on twelve platforms, and you cannot 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 will not be on twelve platforms, and that is not a retreat. It is choosing which of the two I want: reach on day one, or speed on every day after it. I have 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.

Mike Hergaarden

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.