Riffs by Raph: What does Cloud-Native even mean?
“Cloud” is a really popular buzzword these days. And yeah, we are as guilty as anyone of using it. After all, we call our technology “cloud-native.” What the heck does that even mean? (It definitely doesn’t mean streaming video of the game).
First, let’s get real: the cloud is not really new. After all, there used to be a time where we ran software on mainframes remotely, and used a pretty dumb terminal with a thin client to connect to the mainframe. Today, instead of a mainframe, we have remote server clusters with tons of compute power that can launch and shut down a multitude of servers to allow for rapid changes in demand. There’s incredible sophistication in what has changed, but it’s still mostly tech plumbing.
What cloud-native means to us is really a mindset.
Way back when I got started making online worlds, they were made of text. You used a generic client to connect to all the worlds – even the ones running on different server-side game engines. (Back then, we called them “codebases” not “engines,” but whatever).
The fact that the games worked this way meant that designers could change and evolve the games at any time, without worrying about what the player was using to connect. And the player could connect from anywhere, because pretty much any computer had the software needed to log in.
That wasn’t all, either. The fact that there were so many easily usable codebases meant that every one of them was used for hundreds of online worlds. Worlds that swapped ideas, content, and even code.
The result of this was an explosion of creativity. In fact, there are very few features in modern online games which weren’t invented back then. We are still mining those game designs.
That is sure not how online games work today. Just about every MMO writes a new server from scratch, and the gameplay is basically hardcoded in. Game clients are highly customized for the specific game server they connect to. The most popular game engines on the market reach lower concurrency numbers than those old text games did in the mid 1990’s, in part because they’re basically designed for single player or fairly limited multiplayer use-cases.
Most telling: the games industry still thinks of something being “a PC game” or “a mobile game” or “a console game.”
But that’s silly, in today’s world. Games are increasingly persistent. They are increasingly social. They are increasingly connected. Players want crossplay. They want to play on whatever device suits them.
So let’s talk about specific ways in which thinking in a cloud-native way makes a difference.
In 1923, radio was introduced in Australia in a really silly way. The radios didn’t come with a tuning dial. Each one was permanently tuned to just one frequency. If you wanted to listen to two radio stations, you had to buy two radios.
This probably sounds really foolish to you. But it’s actually how online games work too. In fact, we’re so used to it that it gives us huge blind spots. Forgive me this little example...
For the longest time, people pointed at, say, World of Warcraft, and said it was the largest MMO; in 2007, it had around 6.5 million subscribers. Way behind came EverQuest with a few hundred thousand at the time. Everyone agreed this is what the landscape looked like.
Except at that very moment, if you took just North American and European players, Habbo Hotel had 7.5 million monthly players, and Runescape had 5 million, and WoW was actually third. And if I kept going down the top ten list, EverQuest wouldn’t even be on it. Instead, there would be names like Club Penguin and NeoPets and lots of others, all of which had over a million users every month.
The thing all of these games had in common was that they ran on the web, in Flash or similar tech. A lot of gamers were dismissive because the graphics weren’t as good. But the reason these games were able to reach those numbers is because of cloud-based distribution, an advantage of the Flash platform they were built on.
You see, the game was actually entirely hosted on the server. You basically had a generic graphics engine that ran in your browser, and it didn’t care whether you connected to Club Penguin or something else. By 2015, there were half a billion people who had Flash installed, and could play on-demand content streamed down from servers. (And this, too, led to a huge explosion of creativity).
The mental shift to make is that the cloud is the new “console.” Every device with a screen is just a window. And we can do this kind of thing today with graphics that are quite a bit better than Flash. You shouldn’t need to have a giant radio collection in order to tune into varied gameplay.
A while back there was a really cool event in Fortnite. The whole world sat there staring at a countdown and a swirling black hole. Remember that? You know what that was?
Imagine that you want to go buy a new book from your favorite author. You head over to Amazon, knowing today is publication day. It should be up there on the store page, any moment now… and then Amazon goes down, and so does your browser. When it comes back, there’s the book.
Seems silly, right? Amazon doesn’t patch your browser to add a book to its catalog… games shouldn’t either. The fact that we think this way has more to do with how the tech behind games is architected than anything else. It means your game worlds are static, players’ ability to be creative in them is far more limited, and if you really like Call of Duty it might take up your entire console’s hard drive. It limits both developers and players.
And yeah, there are tradeoffs involved in using a more dynamic of architecture. One of the biggest is graphics that are not as high-end. But personally, I’d make those tradeoffs in a heartbeat, because we were promised living persistent virtual worlds right alongside our flying cars – but we have traded away those living worlds in exchange for cardboard worlds with really pretty paint jobs.
How dramatic has that tradeoff been?
Look, I wear an Apple Watch. It has 32GB of storage and 1GB of RAM. It runs a dual core 64 bit CPU running at 1.6Ghz.
When I was leading design on Ultima Online server at launch in 1997, one server machine had 10GB of storage, 256MB of RAM, and ran dual core 300Mhz processors. Yeah, we ran them in clusters called “shards” and it took several machines to run a whole shard. We’d probably need two or three of my watch.
Oh, and by the way, we also now have 2,500 times more bandwidth to the game client.
Where has all that power gone? A text MUD in 1994 could handle 250 concurrent players. A single UO server process in 1997 could handle double to triple that. And just about any one small player-built house in that game had more dynamic and interactive objects than an entire match of something like Battlefield or Apex Legends.
That doesn’t mean that those are bad games or poorly made – they’re not! They’re masterpieces that just happen to chase a different dream. And sure, games have evolved a lot since 1997. But.
When we look at what computers do really well, it comes down to these things:
- Solving smallish problems predictably, with algorithms
- Sharing data quickly and easily, with networking
And this is why an incredibly ambitious lone programmer can get drunk cats to lick their paws and coat taverns in vomit on a desktop machine and yet even with scalable compute power in the cloud, we still don’t have online living worlds. Flying cars not included.
So what happens if you design assuming you do have that power? If you architect to take advantage of what computers and the cloud do well? You land at procedural content that is both more realistic and more interactive than anything handcrafted. You land at worlds that players can affect and take ownership of, instead of just existing in. You throw away the notion of “shards” altogether. And you start to think of ways in which you can break out of oldschool thinking where games don’t interoperate with anything else.
So when we say we are “cloud-native” it means these things:
We design and architect knowing the game is on the server, not baked into the client -- with everything that entails for how the game is distributed, accessed, and played. The game should meet the player where the player is.
We design and architect our servers as citizens of the modern Web, so that they can draw on all that infrastructure, all those APIs, and the vast amount of scalable compute that is available, instead of just putting a LAN server up on cloud hosting.
It’s time to stop saying that richer persistent worlds aren’t possible. They have been possible for years.
And it’s time to stop thinking that players don’t want them. We live in a world where people roleplay schoolbus drivers in Grand Theft Auto Online, where millions follow the stalk market in Animal Crossing. A world where simple .io games with a million players or “Twitch plays” show us that the potential for connected gaming is a heck of a lot broader than what we’ve been doing for the last few decades. Where Minecraft and Roblox are the closest we have gotten to the variety and excitement of those old text-based worlds -- and they are both over a decade old.
It’s time to break away from outdated notions of how people have fun in our worlds, how we build for that fun; time to think instead about the canvas that is available to us.
So nah, the cloud isn’t new, not at all!
Actually using it, though… that’s another story.