We’re talking with Victor Zhou about the explosion of the .io game genre. We talked through all the details around building and running one of these games, the details behind Victor’s super popular game called Generals — which he eventually sold, and we also covered the economics behind creating and selling one of these games.
GoCD + Kubernetes – With GoCD running on Kubernetes, you define your build workflow and let GoCD provision and scale build infrastructure on the fly. GoCD installs as a Kubernetes native application. Scale your build infrastructure elastically. Learn more at gocd.org/kubernetes
Fastly – Our bandwidth partner. Fastly powers fast, secure, and scalable digital experiences. Move beyond your content delivery network to their powerful edge cloud platform. Learn more at fastly.com.
When Agar.io came out in 2015, it inspired a new .io game genre that has since exploded in popularity. I experienced the rise of .io games firsthand: I’ve built and sold 2 .io games in the past 3 years.
- How to build a multiplayer (.io) web game - part 1
- How to build a multiplayer (.io) web game - part 2
- How I Became a Programmer - My unlikely origin story
- “kingz.io” was discussed but no longer has a web presence
- Socket.io plays a crucial role in .io games
Play the audio to listen along while you enjoy the transcript. 🎧
Victor, we’re here to talk about your multiplayer .io web games, but first let me give a little background on how this show came together. You’ve been really killing it on the writing front lately; I just wanna compliment you on the writing that you’ve been doing.
The first thing we logged on Changelog News that you wrote was “Why I replaced Disqus and you should, too.” Or Disqus, if you’re into pronouncing it that way… I don’t know how you pronounce it, but I think it’s Disqus, because–
Yeah, I think I say Disqus…
Do you? Adam, were you the one that says Disqus?
That’s because somebody else called it Disqus, and they forced me to say it… So I just felt like I had to. But it’s Disqus, it actually is Disqus.
I actually don’t know which one’s correct. I think Disqus makes more sense for the platform.
I fell like Disqus makes sense.
Well, I think this was in the day of Flickr not having the “e” with the “er”, so I think it was cool to call it not Disqus, which would be obvious…
It was back in those Web 2 days, basically…
Yeah. Anyways, you wrote about how you were replacing Disqus on your site, and then you wrote how decision trees are trained… Some deep dives into machine learning for beginners, random forests for complete beginners… Tons of really cool stuff. So we’ve been logging pretty much all your submissions to Changelog News.
By the way, listeners, if you’re writing interesting stuff and you want us to help share it around, we have a Submit form on Changelog.com/submit. You can submit your things there, and we’re happy to cover especially awesome written things like what Victor’s been doing… And then just last week you submitted a post called “How to build a multiplayer .io web game”, and I actually did decline this one; I was about to decline it because we don’t really do straight up tutorials very much. Explainers, deep dives etc, but “How to do this” just isn’t all that interesting for us. So I did decline that one, but I clicked through to it, because you’ve written so many good things that I thought I’d check it out… And I was intrigued because I didn’t know what an .io web game was. You referenced a few things I had never heard of, video games are cool, and then you mentioned that you’ve actually created and sold a couple of these while in college. You are graduating soon from Princeton.
So you’ve been up to a lot of stuff here. I thought “Wow, that’s interesting topic.” We talk about video games a lot, but we don’t talk about actually building games very much on the Changelog, so that’s why we have you here.
[04:05] So maybe before we dive into the gaming side of it, tell us about your writing while you’re going to school; you’re writing about things – I suppose you’re learning them there and writing about them. What’s up with your writing, and maybe with the motivation for you doing that?
Yeah, sure. I kind of started writing pretty recently. I believe it was February of this year, so I’m right up around three months of doing this. Basically, I just write about stuff that – it’s pretty much like you said; I’ve learned it maybe recently. There are a lot of things that I think are explained maybe in a really complicated manner, and sometimes I feel like I have a way that is a little bit simpler to approach some of these things, so a lot of my writing is kind of like that - how to do X for beginners, or X explained for a beginner.
I think it’s fun, it’s a nice challenge to write those, because it’s harder than you think… Writing for someone who has basically no background on this. You have to throw away all the assumptions that you have. You personally might understand it, but it’s a whole other story to be able to explain it to someone who has maybe never seen this before, or never even heard of anything like this. So that’s fun.
And then some of the other stuff I do is just random things like the Disqus post… Or Disqus, whatever we decided about that. So that’s just something I did, and I thought it was interesting, and I felt like I could share. Basically, I’m just doing this because I – honestly, in the beginning I just wanted to work on writing more. I think that’s something I don’t really get to do much. I’m a computer science major, I do a lot of coding here at school, so I don’t really get to write that much, and I really like writing about tech stuff… So that’s basically how this blog of mine got started.
It started in February too, so was this like a new year’s resolution thing, or what was it? Was it by your own accord, or did you read somebody, or hear from somebody saying “Hey, you should write to better yourself”?
Actually, it was not exactly a new year’s resolution kind of thing, but it was actually something that I’d been thinking about for a while. It’d been in the back of my head. And then what happened was right around the end of January – the way Princeton’s semesters work is that we have this week-long break, because our spring semester starts in February, so we have a week-long break right at the end of January, pushing into February, where we just don’t have to do anything. I think we call it intersession.
People will sign up for classes, they’ll be like “Oh, I wanna learn how to bartend” or “Oh, I wanna learn how to code” or whatever… And during that period I was like “Hey, I’ve got a week right now, I don’t really have much going on. Why don’t I just do that thing I’ve always been thinking about doing? There’s no better time to start it than now.” So I just did, I just dove in. That’s how that got started, basically.
So how did you find us, in terms of submitting that to Changelog News? Because we’ve covered a lot of your stuff, and it’s not too far from February, so maybe you’ve just posted all of your posts here. I’m curious how you knew to go about doing that.
Right, yeah… So my first post that kind of blew up was I wrote this introduction to neural networks. I think it was like “Simple neural networks”, or something. Basically, it walks through what a neural network is, and then it implements one from scratch in Python. We only use NumPy, it’s not just like importing another library, or something; we kind of bare-bones it… And I believe someone posted that post of mine to Changelog, and I got the email about it. I was like “What is this email?” I clicked through it, and then I kind of did this deep dive, rabbit hole dive into Changelog. I was looking through all the podcasts, looking through all the histories and stuff, and I was like “This is really interesting.” That’s basically how I found Changelog and why I started posting there.
[08:18] Look at that, it’s the one I logged - “Machine learning for beginners”, back in March 6th.
Did you rename it, or…?
No, I think I just forgot what I called it.
Well, we do sometimes adjust the names, just for context. Sometimes we’ll give it a slightly different name if we don’t enjoy the name or we wanna provide more context.
Well, the longer version of it is “Machine learning for beginners” and then “An introduction to neural networks.”
Yeah, that sounds about right.
And yeah, sometimes we’ll just shorten it for “Short and sweet” or something like that; just to keep it more minimal, so to speak. But that’s a good sign, Jerod, because that’s our growth hacks…
That’s one of our little growth hacks.
I love that. It makes the effort worth it when we do that, because I love that – just for those listening, when we log news, we can attribute it to somebody, and that means they get an email when it goes live/gets published, so it’s a way of us alerting you or somebody else, you being the proverbial you if you submit, or if we find it and submit it on your behalf. That’s pretty cool, because then you can sort of discover us, because you may not have been aware, like Victor, to what we’re doing here.
Yeah. It works. It’s a grassroots little effort. But as a random stranger who also writes things on the internet, I think if I wrote something and we covered it and I had never heard of us, I think I’d be interested in knowing that. So we try to stay classy and not do things that we wouldn’t want ourselves, but one little notification saying “Hey, you’ve been featured on Changelog News. Check it out” I think is–
Yeah, that’s a good point to add on too, because it’s in good spirits to do that.
Not just simply like spamming Victor… It’s meant to be in good spirits. Good point.
Yeah, yeah. I appreciated the email. It was cool. It was nice to see.
Cool. Well, we’ve now got you on the Changelog, so…
There you go.
[unintelligible 00:10:07.05] Let’s talk about what we’re here to talk about… Or before we get to that, I did wanna ask you - do you have plans upon graduation? Because you’re graduating real soon, a new phase of life… What are you thinking? Do you have a job lined up, or do you have prospects?
Yeah, I do. After I graduate, I’m gonna do a little bit of traveling for a couple months, and then in August I’m gonna head to California; I’m working for Facebook as a software engineer.
Oh, wow. Congrats!
Well, let’s dive into these web games. You mentioned when agar.io came out in 2015, it inspired a new .io game genre, that has since exploded in popularity.
This is a genre that has missed my radar. I went to agar.io and I was like “What the heck is this?” There’s another one, Slither.io; I actually had seen that one, so I’m kind of aware, tangentially, what’s going on here, but I wasn’t aware that this is a genre, and tons of people are playing these games… So tell us about that whole little niche.
Sure, yeah. I actually call it agar.io… I’m not sure how people say it; anyways, I’m gonna say it agar.io.
Go ahead, yeah.
So when that one came out, it was actually (I believe) developed by this one nineteen-year-old dude, off somewhere by himself. He launched it, and then it just went viral; it blew up, everyone started playing it. Basically, I think it’s because of how simple it is. In general, this genre of .io games, the game is – you go to a website, like agar.io, you show up, and there’s a Play button for you, and there’s maybe like a username input field. And you can just click Play and jump into a game with 50 other people immediately.
[11:58] There’s very little friction to start playing the game. You can do it anywhere. It’s great to play in class, or at work, or wherever you want… And so people started playing this game a lot. Then game developers realized “This is a game model that works, and people really like to play these games”, and so people started making similar games, but just with different game mechanics.
I think the next one that came after that was probably Slither.io, like you mentioned. That one is kind of like – you play as this snake, you go around eating food, and then if some other snake crashes into your snake body, they die. It’s very simple, there’s no learning curve. Anyone can play, you just jump in. You can play with your friends. There’s a leaderboard for people to climb, people who wanna top that…
And then after Slither.io, there’s a big one that’s called diep.io. That one is basically you jump in, you control this little tank-like thing, and you can shoot other people. You can shoot these NPCs, and just shooting stuff in general gives you experience, and you level up your ship. You can upgrade certain things, you can choose a class… It feels like an RPG almost.
After those three – there’s just tons and tons of .io games out there. And there are also these .io game sites that will basically collect all of the .io games that are out there and present them nice and neatly to players that want to play different .io games. There’s one that’s really big called ioGames.space, I believe. That’s the main one out there. People will just play these games at school, or to procrastinate studying, things like that… Yeah, that’s about it.
I just went to ioGames.space, and you’re right, there are literally hundreds of these.
Yeah, there’s so many. And just new ones every single day, too. That’s absurd.
Slither did ring a bell, and this is gonna date me quite a bit, and maybe Adam as well, because it reminds me so much of Nibbles. Adam, did you use to play Nibbles? I played Nibbles on my TI-86 calculator when I was in high school.
I played Snake.
Snake, Nibbles - yeah, pretty much the same thing. Only that was one player. But you’d eventually run into your own tail and die.
Yes. And that was the fun part, because gosh, man… That’s when you get [unintelligible 00:14:32.08]
It just gets longer and longer, until you kill it yourself.
So this is the same idea, applied in kind of a massive multiplayer way, where you’re eating other people’s snakes.
So nothing new under the sun. That being said, this is way more fun playing with other people than just playing by yourself. But if you’re sitting there in class, it’s better than listening, I guess.
Just for terminology’s sake, and those who may not be ultra-gamers, NPC means what?
NPC means Non-Player Character. Kind of just like some other object in the game that’s controlled by the game, basically.
Gotcha. And then you also mentioned just the fact that there’s very little friction to get into a game. Does that tend to lead to not very much investment, like “Oh, I’m not very tied to it because I don’t have to invest a lot to get into it, so I don’t feel very tied to it”? Or are they pretty addicting.
I think they are pretty addicting. I think honestly what makes them addicting is the leaderboard. People basically will join into these games; maybe they don’t even know how to play the game, and you kind of figure out how to play as you play, and you gain score along the way. And eventually, if you go long enough without dying – let’s say you’re in this game for five minutes. You go long enough without dying and you start seeing yourself on the leaderboard, and you realize that if you die, you lose all the progress you’ve made over the past five minutes. So it’s kind of like you wanna keep playing because you wanna keep increasing that score, and you really don’t wanna die because it feels like you’ve invested so much already; you have to keep going.
[16:06] So the ease of getting in leads to potentially deep investment, which keeps you in.
Exactly, yeah. I’ve seen people have an hour and a half long games, and they just can’t seem to die, and they’ll have other things they need to get done, or other things they need to go to, and they just can’t do it. They have to keep playing. If you’re in a game for an hour and a half, you don’t wanna give that up, right?
Not a one-to-one, but it reminds me of Portlandia, the episode when they couldn’t stop watching the sitcom, because they were just binge-watching it; it’s almost like binge-playing.
So they’ve definitely gotten more advanced… I just hopped into RoboStorm.io. And by the way, the rest of this show might be a waste, because I’m gonna be partially be playing games and partially talking to you guys; no offense. [laughter] But this looks amazing. It almost looks like I’m in a [unintelligible 00:16:56.01] 2D space, with a map… I mean, people put some work into these things, for sure.
Definitely, yeah. They’ve gotten a lot better since the early days.
So that got you into building a couple of your own. Tell us that history, because as I said, one of the things that was interesting is you built and sold two of these in the past three years. So just the fact that selling them is a thing I thought was intriguing, but why did you start building them? We’ll get into how you built them probably here soon, but let’s talk about some of the economics around it.
Sure, yeah. The reason I started building them… The very first game I’d built was this one called Generals.io. It’s still live, it’s still running to this date, it’s still somewhat popular, I believe. And how that started is I believe my sophomore year of college we had a break, we had a week-long break in the fall semester, and I was just hanging out on campus with some of my friends. We didn’t really have much going on; we were honestly just kind of messing around all day, not really doing much… And one day we were sitting in this room together and we go to this site, iogames.space, like I’d just mentioned. And we were looking through .io games, because we were just playing these casual games together for fun, and we happened upon this game called kingz.io.
The way kingz.io works is you’re on this 2D board, and you control this one square that’s called your king. And every square that you own will slowly generate army units for you. Maybe you can think about it like Risk; you control territory, the territory generates army strength, and you can move that army strength around the map to conquer other territories, and ultimately other player’s kings. So the way you beat someone else in this game is you take an army to someone else’s king, and you attack their king with a stronger army. If you conquer anyone’s king, you become the new owner, the new ruler of all of their territory.
The game starts with usually 8, 9, 10 people, and slowly it goes down to 4 people. Then at the very end you have these two massive empires, battling each other, both trying to find the other person’s king.
It was a fun game. I played it a lot with a couple of my friends. We got really high up on the leaderboard. We were starting to figure out what the best tactics were for this game, and stuff. But the game wasn’t too popular, and we felt like there were a couple pain points about the game. One of them was that the game pace was way, way too slow. I think the way they had it set up was that one move took two seconds, I believe… And you can think about that, you can imagine making a move and then waiting two seconds for it to happen; and you can only make 30 moves minute.
[20:05] For young people like us who are used to playing these super fast-paced action games, like first-person shooters, whatever, it feels way too slow. We get impatient. So that was kind of an annoyance.
There were some other things that happened, like there were some bugs in the game that I don’t really remember, but… You can imagine - bugs in the game, it’s a little bit annoying to play. Sometimes you would spawn in a location that would basically be impossible to win from, which is annoying, because it’s like “Why?” This could be controlled. With a little bit better map design, you could make it a little more fair for everyone. In their defense, it’s pretty hard, because all the maps are randomly generated…
So there were some pain points like the ones I’ve mentioned, and basically at dinner one day someone jokingly mentioned that I should build a better version of Kingz. And everyone was like “Hah-ha… Yeah, that would be cool, right? Imagine if…” And then I started thinking about it more seriously, and I was like “You know, this game isn’t that complicated.” I have the engineering background to do this, I already know how I would implement this, and it would be a fun thing to do, and I have a lot of game development background. I’ve been making games since I was basically 13. I would imagine that’s how a lot of people get into software engineering.
I also had the free time to do it, because again, this happened to be during that break from school, in our fall semester, so I just decided one day to do it. In three days I built a version – okay, so that’s where the name Generals.io comes from. It’s kind of a tribute to the original Kingz.io game. And then in the first three days I built a simple version that was similar to Kingz, but was a lot more fast-paced, and fixed some of the issues that we’ve been talking about… And I kind of just threw it up on some sites. I think I sent out a couple emails maybe, I probably posted it on Facebook, and it got a little bit of traction in those early days. But I was just working on it; I kept on working on it. I would implement new features, implement new game modes… For example, I added replay, so you can go back after a game and replay the entire game, and share replay links with your friends, and see exactly what other people did, things like that.
Eventually, one day - I wanna say it was the January after that fall semester - someone found my game (Generals.io) and posted it on Hacker News, and it blew up. It was the number one post on Hacker News for like probably that entire day. I woke up that morning and my friends were texting me like “Yo, Generals is really slow right now. Can you check the servers?” and I was like “Yes, of course.” So I go in and I check the servers and I’m trying to figure out what’s wrong, and eventually I realize that there’s nothing wrong; it’s just that there are like 50,000 people playing on this $5 server that I’ve rented…
So that was a crazy, crazy day for me. I remember it was a Saturday. Luckily, it was a Saturday, otherwise I might have been doing other stuff… But I spent that entire day just putting out fires, moving the game to beefier servers, like handling support questions, and stuff… People telling me that their games were crashing, or whatever. There was a ton of stuff to do that day, and I still – it was a good time, it was a fun time, and I learned a lot that day.
[24:00] From that day on, a bunch of people – I mean, that’s what happens if you’re the top post on Hacker News; the game stayed really popular. I kept on building more features, I kept on adding onto it, because I was not motivated. I had a real player base. There were a lot of people playing this game. You go to the game at like 4 AM on a Tuesday night and there’s people queuing up with you to play, which is just crazy to me, because I’ve never had a game be that popular before.
So I worked on this game, probably almost full-time. Yeah, I’m a student, but I was spending at least 30 hours a week just developing this game, because I’m the only guy running the show. If I don’t do it, it’s not gonna get done. So in the year after that Hacker News post I basically worked full-time on this game while studying at Princeton, I guess, and I implemented a bunch of stuff. There was a lot of growth in the game over that year.
Then eventually I think I just got tired, I guess… There were some other things that I wanted to do, and I felt like there wasn’t so much more for me to do with Generals. It kind of felt like it reached a natural ending point… So I had actually been looking for kind of a way out. I felt like I couldn’t just quit on the game. I obviously wasn’t gonna shut it down, because it was making me a good amount of money from ad revenue, and stuff, but I had already kind of started thinking about looking for a way to exit, looking for a way to maybe hand it off to someone else… And then I get an email out of the blue; it’s this guy who runs this small gaming company, who’s interested in buying out Generals from me. We talk, and then two months later, that’s it. I sold Generals to him. That company is still the company running Generals to this day.
Help us understand the kind of dollars behind this. You said you were running ads, then you got this offer from someone else to buy it, and then eventually you sold it… So break down the figures for us. What’s in this?
Sure, yeah. There are two main ways I was making money from this game. One of them, the big cash cow was ads. People waiting in queue to queue up with other people would see an ad, and people would click those ads all the time. So there’s that.
Then the second way was Generals had this kind of supporter feature, where you could basically donate some money, and you would get a supporter tag on your profile for X amount of months, and being a supporter kind of unlocked some special benefits for you. Kind of cosmetics, basically. But that one didn’t contribute so much monetarily.
[28:04] But let’s see - at peak, I was making… I’m trying to think about the numbers again; it’s been a while. So the month that I topped Hacker News, Generals made me probably $3,000 or $4,000. Then after that of course the traffic is gonna decline, but it kind of leveled off to around $1,000 a month. Then eventually when I was contacted to sell the game, I sold it for kind of like mid-five-figures range.
Yeah, and it’s just basically a multiple of how much revenue it’s making.
Yeah. Which makes sense, because it has very little or very low expenses, so your overhead wasn’t really much, so you could in theory give a valuation based on simply revenue.
Yeah. The overhead was basically zero. I think more than 99% of the revenue is profit.
When you think about advertising in this space, you say that when someone would try to enter the game, there would be a pause or a queue essentially, and an opportunity to display an ad. What kind of – you mentioned Hacker News, 50k in one day… What’s sort of like an on day or active user count, rough daily?
An average day back in those days was probably 10,000 active users in a day.
So we’re talking about 10,000 impressions likely, potentially.
I think it ended up being more than that, because a Generals game mainly lasted a couple minutes. People would play – oh, man… There were times when I would play 50 games back-to-back. Just me.
And I made this game, so… I played this game a lot.
It’s pretty addicting. So were you just running ad-sense, or did you have specific ad partners you were working with?
No, nothing fancy. Just AdSense.
Nice. So it’s been a little bit since then… Are you happy that you sold it? Are you wishing it was still yours? We talk about buyer’s remorse – some people have seller’s remorse; do you have any of that going on, or are you just fat and happy, as the saying goes?
I would say that there are definitely some days here and there where I have a bit of that. I have a twinge of seller’s remorse, but I think by and large I’m happy with that decision. I’ve had a lot more free time since then because of it, and I’ve done a lot of interesting stuff, so I’m glad that I closed that chapter.
So that’s Generals, but your post says you’ve built and sold two .io games in the past three years.
I assume you’ve got another story queued up for us here.
I do, yeah. This one’s probably a little shorter. Actually, I think earlier I said that Generals was the first .io game I made, and that’s wrong; I’m gonna have to correct myself. Generals was actually the second one. It actually came after my other one.
The other one I made was called GeoArena.online. So not actually the .io TLD, but later – it’s now GeoArena.io, but anyways, that’s unrelated. Originally, when I launched it, it was called GeoArena.online. Basically, that was a game that – I think I started it freshman year; that was a game that I had been thinking about for a while in high school, and I thought would be cool to try to implement as a web game, because that was the time when I was getting into it a little bit. I was kind of trying to learn more about web development, and I have always liked making games.
[31:59] That game is actually sort of similar to diep.io. That’s the tank game that I mentioned earlier. Some people like to refer to GeoArena as like diep.io, but 1v1. Diep.io - you get into this big arena, you’re playing with 50 other players, you’re kind of just one ship in a sea of many ships… But in GeoArena is much more personal. You customize a ship, and then you enter into a queue, and the game will match-make you with another player based on your skill level, basically.
You have this in-game rating system called – I believe it’s called GeoCrystals. But anyways, it’s just like an [unintelligible 00:32:44.25] rating system. So the game matches you with another player, and then it’s just the two of you in this arena, Diep.io style, battling it up. It’s last one standing wins. You move around, you can fight the other player, you can find the non-player characters if you wanna level up, things like that. You can upgrade. There are a bunch of different strategies that you can use. Ultimately, at the end of the day, it’s kind of just this 1v1 skills test.
I made that game, and it launched; it got a little bit of traction… It never really blew up so much as Generals did that one day, but it kind of grew in player base over the course of the first couple months, and then after that it was a little bit steady, kind of flatlined for a while. I pretty much put it on the back-burner. I basically put it on the back-burner to build Generals. And while Generals was happening, I didn’t really work on GeoArena as much, because its player base just couldn’t justify the kind of investment that I should have been using on Generals instead. But after I sold Generals, I kind of went back to GeoArena for a bit, with a lot of the lessons that I learned from building and selling and scaling Generals, and I applied those to GeoArena.
It’s fun to go back and look at code you wrote three years ago and be like “Wow! This is terrible!” [laughs] I’m sure you guys know what I’m talking about.
So I had some fun refactoring the codebase, I had some fun implementing a couple new features… For example, I also brought replays to GeoArena, where you can go back after a game and share a replay link and rewatch the game happen… Because that was definitely one of Generals’ big, big features. People always ask “How did you beat out Kingz.io?” Kingz was the original game, Kingz was the incumbent in the market. After the first two months, Generals stole all of Kingz’ players and they quickly shut down the site… And I think a big part of it was that Generals’ features were just a lot better, and people really liked being able to share replay links with each other. It’s a social experience.
Actually, to this day, literally two hours ago, one of my friends just sent me a replay link to Generals of a game he just played against one of my other friends, because the two of them have just recently discovered Generals, so they’ve been playing it a lot… Which is actually really cool to see, because I haven’t been involved in Generals for over a year now. But people are still fighting it to this day, and it’s just as fun and addicting as it was before.
Well, the cool thing about those replays too is it seems like they’re an opportunity for more pageviews. It sounds like it could be viewed by anybody, right? So you’re actually attracting potentially non-game-players.
Yeah, you’re definitely right.
Like friends and family, or your Instagram followers, or whatever.
Instagram followers… [laughs] You need pretty dedicated friends, to be like “Watch someone else’s replay if you don’t play the game yourself, or understand it.”
So one thing they have going on right now - because I am checking it out while you talk - is like a 1v1 tournament going on. Is that new features they’ve built beyond, or did you have that going when you sold it?
[36:14] That’s definitely a new thing that they wanted to do. We actually talked about that. I talked about that with the buyer when we were making the transaction. That’s a thing that they’ve started running kind of recently. People like to have these tournaments, and there are a lot of really competitive Generals players out there… Surprisingly. Even though it’s a really simple game. But it actually goes deeper than you would think.
I think they run these 1v1 tournaments every ten weeks, something like that. And I know that at least the last time I checked in on them, they were somewhat popular. It’s definitely a fun thing that you can do as a community.
Yeah. I would be curious just of the logistics of selling a game. I assume there’s a domain transfer that has to happen. I would assume there’s code that has to change hands… Is there an escrow scenario? I mean, you’ve got the money offer… How do you know they’re good for it? How do they know you’re actually gonna do the thing? Did you get a third-party involved? I would love to hear just the details of how you go about even mechanically selling one of these games.
We felt like this was a small enough transaction where we didn’t want to get a third-party or escrow or anything like that involved. We had been talking for a while, we’d been video-chatting each other; we felt like we got to know the other person relatively well, and there was at least a baseline level of trust we’d established.
I believe what happened was they paid half the money upfront, just so I knew they were good for their word, and then we started the transaction process. There’s actually a lot that goes on. There’s the domain, like you said; there’s all these accounts that are linked to the game - Facebook, Twitter, Reddit, Cloudflare even… All of these accounts that I’d set up over the years, and I had to go back and remember all those passwords, change all those passwords; it was a whole deal.
Then we had to transfer over the codebase - that’s not so bad - and then the big part was transferring the game, the live running game from my servers to their servers, basically… Because I couldn’t just give them my servers. There was some kind of complexity that was working behind the scenes there. But that was a big day. I think we had probably like a two-hour maintenance that day. I think we posted it on the website and we told people – and then we tried to do it in the middle of the night… I’m pretty sure it happened at 3 AM, or something like that.
So the live transfer was a big deal, and then there was also the live transfer of the AWS replays bucket. Replays are stored as compressed files in an AWS S3 bucket, and we had to migrate all of those replays from my AWS account over to their AWS account. So replays also had to go down for a little bit.
So there were definitely technical challenges, but at the end of the day I think I probably took about two weeks total, just because we kind of did it in small, incremental steps. So there was definitely that two-week transactional period. Then at the end of that I got the rest of the money. And then that was pretty much it.
And you rode off into the sunset.
Yeah. Lived happily ever after.
Paid down some of them student loans. [laughter] Very cool. Well, I mean, even though it happened a while ago, I’ve just gotta say congratulations. That’s a heck of an accomplishment, I think.
Thank you. I appreciate it.
[40:05] So this all started with your post “How to build a multiplayer (.io) web game”, and we haven’t talked about that yet… I’m sure that some of the hackers in our audience out there are thinking “Hm, I might try my hand at this because I like games, I’m a good developer, and maybe (just maybe) there’s some success and some money at the end of this rainbow.” So you have this big, long post – actually, it’s a two-part post, which we’ll link up both of those, just for people that wanna read… But I would love to heard the breakdown maybe on the high-level, what all goes into these games, how they work…
If we want the nitty-gritty, I think we can keep that into your written form, because it’s much easier to consume that way, versus a conversation… But maybe just high-level, help us understand what they’re built with and how they work. We know they’re web games, so web technologies are involved somehow… But give us a breakdown.
A big problem with these games is that you can’t use UDP on the web. Everything is TCP, everything is reliable, everything is ordered, but the issue with that is you’re gonna have head-of-line blocking sometimes. So if one game update doesn’t show up to a player, the entire game is gonna freeze for a little bit, as the internet figures out what it’s doing. And then the rest of the game updates are gonna flood in at the same time. There’s just no way around that right now, and there’s a lot that goes into making sure that the client-side experience is as smooth as possible, even though latency is gonna be weird; you’re gonna have weird ping spikes… You might be a player in Brazil, playing on the New York server. I definitely spent a lot of time doing that… So having shared code makes that a lot easier, and helps you get the development done and helps you push the game out faster.
Other than that, you’re gonna probably have a database of some sort if you keep players’ stats, which you might not necessarily do… For example, Generals has this kind of rating system, so you need a database to do that. That’s nothing special; you just have something running. You can store player information in that.
And then also I’ve been talking about this replay feature that I had with my other two games - I believe some other games have it, but I don’t think it’s so common right now… But the way that I’ve been implementing that is just, like I said, storing those replays in an AWS bucket, and then downloading those when I need them.
The thing with games that I always get tripped up on is when I start to think of the actual visual interaction with the end user; maybe the sprites, or the graphics.
I’m looking at some of these games and I get immediate – I don’t think “impostor syndrome” is the right word… Inadequacy? There’s no way I could create these kinds of things, because they’re amazing, or they’re beautiful, or–
Yeah, exactly, self-doubt. Just because the artistic skill isn’t there, but also, I don’t know how to interact with the world like that in the browser. So maybe not from the graphics side, but could you speak to how – I guess with Generals it’s kind of a board game style from what I’m seeing…
I’m just curious how you actually go about building that part of the interactions. Collision detection, and all these kinds of things.
Yeah, like you said, Generals is a board games style, so that’s gonna be a little different. I actually used React.js for Generals, but for most games it’s gonna be – GeoArena is a more stereotypical game, and for most of those games they’re gonna use an HTML5 canvas as the drawing board… And you basically just draw your sprites to that canvas. That’s how you paint the game.
As far as collision detection and anything else like that goes - all of that is probably gonna be done on the server side, and then just rendered and maybe smoothed out a little bit on the client side to make it look a little bit better. For example, any explosion or whatever cool particle effects - that’s just gonna be put in client-time, during rendering. Pretty much everything is running on HTML5 canvas nowadays.
Sorry, I’m just over here playing GeoArena. [laughter] This is a cool game. So far I was camping out on Generals, so now I’m checking out GeoArena. It definitely has, like you said, the canvas, and it definitely has the collision detection, and the other stuff that I would feel inadequacy… So is there libraries beyond socket, beyond Node, Express - kind of the typical underpinnings… Are there actually application-layer libraries where you can say “Hey, I need a thing that already provides all the interactions, and I just call collision” or whatever these higher-level function calls that I’m sure somebody else has thought through, that I haven’t? Do you use those? Are they out there? What’s your thoughts on that?
Yeah, they’re definitely out there, but I personally have not used them. I believe there’s one that’s called Phaser.js… I think that’s a popular one that some people are using… But I just personally have not been using those, because I’m the type of guy who wants to be able to control every single little part of it, maybe to a fault sometimes.
I really wanted to be able to write everything myself, and be able to customize any little tiny thing that I want, and that’s something that you sacrifice a bit if you’re gonna use a library like Phaser.js.
[48:01] So I have basically had to write all of those things that I might have gotten from one of those libraries myself. Like you said, the collision detection and everything like that, I implemented myself. I have to optimize myself, and I’m in charge of it myself, for better or for worse.
Well, beyond libraries, what about platform? IoGames.space – I know you’ve got a couple of your games here; is this a platform where you can go and build your game on their existing platform, and skip this coding part, or is there a way to by-pass some of the things that Jerod has issues with, like being intimidated by the graphics portion of it? Just sort of by-passing the things that you don’t do so well, or don’t wanna do at all.
I don’t believe there are… At least me personally, I don’t know about anything like that.
So you host it yourself with ioGames?
Yeah, so ioGames.space is actually just an iFrame. They basically just list the games and then they iFrame out to them, and that’s their whole site, basically.
I mean, it works…
I’m just wondering if the next level of this is if it’s so popular, create a platform where you can build these without having to have all the skills.
Right, yeah. Unfortunately, I think you just have to have all the skills for now.
So you sold two games… Are you one-and-done? No, that doesn’t make sense… Are you two-and-done? Are you kicking up a new .io game? Have you got any fresh ideas? What are your ambitions here with regards to these games? Is it just teaching other people how to do it, so you can play even more cool games? What are you thinking?
Yeah, I think I’m two-and-done. I think I’ve done what I wanted to do here, I’ve learned what I wanted to learn… And honestly, I think a big part of it is I’m kind of out of ideas for good games. Maybe in the future if something strikes me, if I get inspired maybe I’ll jump back to it. But for the near future, I’m pretty good with what I’ve done.
I could be pro-Victor here, but I would feel like it seems like you’ve only scratched your surface.
Maybe I’m just really pro-Victor here, I don’t know. Call me wrong if you have to.
I don’t know, there’s a lot of other stuff I’m interested in. I don’t wanna narrow myself too much.
What about trends in gaming? Is there anything else that’s up and coming that people might find interesting? Or do you have any .io games that you would think are top notch, great games that people should play? If not, try to build…
I think I see .io games sticking around for at least another five years. I don’t think they’re gonna go anywhere. I don’t think this is just a fast trend. I think there’s actual demand for this, and people will keep playing these kinds of games.
[51:53] As far as specific games go, I don’t really have any right now, because I haven’t been playing .io games for a while. I think it kind of happened after I finished the sales, and I kind of moved on into other things. I’ve been out of the .io game for a while. But just check out ioGames.space. There’s a lot of good stuff there.
As far as the rest of video games, I don’t know. There’s that new trend with all the Fortnite-type games, right?
Right. Battle royale.
That’s kind of recent; that’s sort of like the new thing… Battle royale, yeah.
Is it beyond Fortnite, or is it just Fortnite?
There’s Fortnite, there’s PUBG (PlayerUnknown’s Battlegrounds). There’s also that new game that just launched. I’m struggling to remember what it’s called, but it’s very similar. There’s another big game; I forget what it’s called. But there are definitely games coming out in this arena.
I’m personally excited for Super Mario Maker 2. I just hang out in the console space, life-long Nintendo player. I did have Playstation 2, so I dipped my toe in those waters. Playstation 3 maybe even as well, but Nintendo for life. And now that I have kids that are reaching gaming age - oh, man; Nintendo all day, Nintendo all night.
That’s an interesting perspective. Have there been any .io-related games that have gone from an .io game to console, or transcended simply just the web space?
Yeah, actually one that comes to mind is called paper.io. It was kind of big in the web space when it launched, and then they launched these iOS and Android apps, and those were super-popular, I believe. I think I saw paper.io at the top of the App Store one day. And I think they might be on consoles. I might be wrong about that though. I haven’t actually seen it myself, but… I know that paper.io is doing really well; they’re kind of spreading their wings, they’re everywhere now. That’s a good game, too.
Are most of these games optimized to be used on mobile? I know that they’re not apps, and they are based on the web… Or at least with protocols, and stuff. So are they generally playable on a mobile phone?
Yeah, a lot of them are, honestly. Paper.io is really simple, and you basically only need to have – you can just swipe to control the direction you’re going, and that’s it. It’s very simple. I think Slither.io is the same kind of deal, where you can just play on your phone, control the snake… There’s not that much that you need to do.
Early in the call we’ve mentioned that you’re going to Facebook, and Jerod just asked you about one-and-done/two-and-done; you said you’re out of ideas, I said you’re simply scratching the surface, because I’m such a believer in your, but… [laughter] I’m thinking, “Why would you go”– and this is just maybe the entrepreneur in me that’s hopeful for others to be entrepreneurs as well. And you’ve already been there, so it’s not that you’re not; it’s just a matter of your choice seems to be to go to work for somebody else, rather than be your own boss, and I’m curious why you make that choice.
Yeah, I mean, for now… I thought about that a lot myself, and it was something I struggled with when I was making this decision. For now I think I want to go to Facebook to just learn more, grow more, grow quickly. Maybe make some friends, make some mentors, find people to look up to… Because I think that there’s a lot that goes on at Facebook that is really valuable. I’ve actually internet at Facebook before; I’ve interned there twice, and those two summers I spent at Facebook, I learned an unbelievable amount.
Part of it is just I’m really young, I’m kind of inexperienced, I don’t know so much about the tech world yet, so I think there’s a lot for me to do there still, and I think coming out of college – yeah, it’s a little bit of a safe move; get a nice paycheck, whatever… But I think part of it is also just being at a big company for these next few years is gonna be a good way for me to grow.
[56:14] Let me just say that’s a wise response to that, I would say. It seems like you’ve put a lot of thought into it; it’s not just like “Hey, Facebook’s big. Hope for the best.” I think that makes sense. You’re gonna level up your skillset, you’re gonna level up your network, which is very smart moves; it’s playing to your future, which makes sense.
Yeah. It’s not to say that I won’t ever go off and do something entrepreneurial. I think I have it in me.
I think the reason why I have the position I have for the question was that when you’re at your age, you tend to be able to absorb more risk.
Yeah, that’s true.
So this generally is when people make more risky moves.
Yeah, but Adam, if he goes to Facebook for three years, he’s only 25 then.
Yeah, it’s true.
Still footloose and fancy-free, man.
Yeah, it’s true.
You’ve got time.
Well, the good thing too is there’s somebody out there that’s two steps behind you, that’s listening, that’s gonna make this choice 2-3 years from now for themselves, and they may take your words, Victor, as “Wow, man… I listened to The Changelog that one time and my life changed because of what Victor said, and that wisdom he shared.” That’s how it plays out.
We’re putting a lot of pressure on you here, Victor.
A little bit, yeah.
You’re about to change someone’s life with what you say.
Go ahead, say it.
Choose your words wisely… [laughter] This is a fun space though. I never really imagined this .io games space being like it is. It seems like it’s for fun, and it seems like it’s for profit, and it seems like there’s some ringleaders out there who have really killed it and have cornered the market. Clearly, ioGames.space has made a place where you can go and find plenty of the games, and they’ve even attached their own ability to make money off of your own game by serving their own ads, and stuff like that, so that’s a really…
It’s a little ecosystem.
Yeah. I mean, it’s just this layered onion of the web, Jerod… It reminds me of the old web, but it’s not…
…you know, in the fact that it’s web-based… And this revival, this renewal of love for the web.
The move from a good idea to an implementation, especially once you have a how-to tutorial that you can just follow step-by-step and tweak it to remix for yourself - that’s the spirit of the web right there. No permission from idea to live, in a couple of days if you’ve got free time and the ambition.
And not just live, but blowing up. Viral.
Given you’ve got $15/month for – not a five-dollar Linode, but maybe a fifteen-dollar Linode. [laughter]
Maybe it’s late in the game, but if someone was following in these footsteps, what are some of the core steps you would take to build one of these games? Core tech… Is there any resources you can recommend? Obviously, you’ve gotten the part one and part two Jerod mentioned here… Is that the extent of it? What would you suggest?
[01:00:10.25] I would say that part one and part two I wrote are pretty in-depth, they cover a lot of it, but a lot of what you’re gonna be missing from those is sysadmin-type stuff, like “How do I actually deploy my own .io game?” For example, “How do I get HTTPS? How do I get SSL running?” A lot of that is just gonna come from experimenting with it. If you wanna do this, just go and do it, and there are tons and tons of good resources out there on the internet that you can just find and you can just read, follow in their footsteps, do it like they did it, and see how it works for you.
It’s really easy today to just get a server, pay $5 for it, and put up your game; and buy a domain for a year for $5, and have people start playing it… And then just learn as you go. There’s no reason to not just jump in.
What about first steps once you’ve launched to tell the world? Is it “Hey, tweet about it” or drop a post on medium? What are the ways that you would go about making your thing known?
I think the number one thing you’ve gotta do here is you’ve gotta go to ioGames.space and you’ve gotta register your game. That’s the number one thing.
Are you sure you don’t work for them?
I’m sure. [laughs]
I’m just kidding… [laughs]
Call me crazy too on this front, but I kind of feel like – you know, you’ve got these two blog posts out there, but I kind of feel like you’ve got more in you. I kind of feel like how hard would it be to create a mini-course that is a one-stop destination for those coming to this space to build their next big thing.
I think I could do it, yeah. I could do it, but I think the reason I wanted to keep it short is because I’m not sure there’s that much demand for it. But I don’t know. If someone were to convince me otherwise, I’d definitely be willing.
I feel like this just turned into a pep rally where Adam convinces you to be an entrepreneur. He’s like, “You could get a course, and sell it.”
[laughs] A little bit.
[laughs] I believe in you, Victor.
Yeah… “Don’t go to Facebook!”
Well, let’s talk about machine learning a little bit - a hard right here - because this is what you’ve been writing about… We happened to hop on this multiplayer .io game post of yours, but mostly what you’ve been writing about is random forests, decision trees, machine learning… First of all, are these things that you’re gonna be able to apply in your new life at Facebook? And secondly, what is it about these things that excites you etc.?
You’re doing deep dives; I know you’re probably having to do some of this stuff for your school work, but no one’s making you go with all these diagrams, and stuff, on your decision trees ones specifically, or your random forests posts. Obviously, you really enjoy these topics.
[01:03:05.19] Actually, I’m not probably going to be able to do much in my new role at Facebook with this kind of stuff, and that’s by design. I think I have this on my blog, it’s my one-liner about myself… It’s basically like “I’m interested in machine learning and web development. Those were kind of the two things I really do.” So my job is gonna be more like full-stack web type stuff. I’m probably not gonna do much machine learning.
I think machine learning is interesting, I think it’s gonna be around for a while. There’s a lot more than we haven’t done with it as a human society. It’s gonna change our world definitely in the next decade or two… So it’s just something fun for me to – it’s kind of like a hobby, I guess. It’s fun to learn about, it’s fun to experiment with, and it’s especially fun to try to explain to other people… Because I think there’s sort of this aura around machine learning where people are like “Oh, it’s so complicated. It’s this new magical thing. It’s how we made self-driving cars”, but in reality, if you really wanted to get into it, a lot of it can be explained very simply to people with very little background in this kind of stuff.
That’s kind of what I’ve been challenging myself to do, and that’s where a lot of these blog posts have been coming from. It’s from the person in me who’s like “I know I can explain this. I bet there’s a better way to explain this. I bet I can make someone understand this.” And that’s what I get out of it.
So for those in the audience that are sort of tracking you on Changelog, and reading what we’ve been linking out for you, what’s upcoming for you, written-wise? We know you’re going to Facebook, we have already tried to sway you against that… I’m just kidding. I think you’re making a pretty great move. But we know kind of what’s coming up in your near future in terms of your employment, but what about your writing? What’s coming up for you that you can tease here?
Yeah, I’ve definitely got some stuff in the works right now. I want to build on some of the success of my previous – like the neural network post, for example. I have a post coming up about convolutional neural networks. It kind of builds on top of that one; we go into CNNs, it’s kind of like a deep dive. We do some image classification.
I’m also gonna do some stuff with RNNs (recurrent neural networks), do some text classification, maybe some sentiment analysis - hot topics in natural language processing right now. Then once I have that base starting point established, where I can be like “Hey, you should read these introductory tutorials”, then I can start to maybe get into some more intermediate to advanced topics.
One of the ones I was thinking about was visual question answering. That’s really interesting. I give you an image, I give you a one-line question about it. Can you answer that question? It seems really hard from a surface level; it seems impossible. Like, how do you even begin to do that? But in reality, there are simple steps you can follow. It’s not as complicated as you think.
So I think there are some fun applications out there that I would love to write about, maybe throw up some example code for, and just play with.
Cool. Well, Victor, thank you so much for schooling us, and bringing some nostalgia back to these old fools here that joined you today… [laughter] They love the old web and like this new stuff; it’s pretty cool.
Yeah, no problem. It was fun.
I never knew about this world at all, and I feel so old saying that, and I shouldn’t even admit that, because it’s just terrible… But it’s been fun to talk to you. Thank you for sharing your time with us.
Yeah, thank you for having me.
Our transcripts are open source on GitHub. Improvements are welcome. 💚