A Game Developer's Approach to Building Productivity Software

Alan McCosh - DonutJS October 2017


Hi. I'm Alan. I'll bend my knees a little bit for this talk. As I mentioned, I run a solo studio in Portland called While Software. And I want to believe that software can have both utility and entertainment value. If we draw a spectrum, and on the left, we have utility, and I can spell... And on the right, we have entertainment, you could sort of classify a lot of different bits of software as falling somewhere on the spectrum. If we were to think of Microsoft Word, it would probably show up about here. nginx, similarly very high utility, not a ton of entertainment. If you thought of a video game, like let's say Mario Kart, it's probably gonna fall on the right end of this entertainment spectrum. And that's all well and good. But the premise of this talk is basically: What about this space in the middle? And I think one good example might be Snapchat. A piece of software that has both utility, for its ability to communication with somebody, but also like a latent or native entertainment value. I can think of using the Snapchat filters and putting dog-ears on myself or my little girl. And I have a really good time doing that.

And so my idea is: Let's try to leverage the best of game development, both technology and approaches, to try to make more software that falls somewhere in the middle of that spectrum. So taking a step back, I make a lot of games. Most of these games are made at game jams. And as they mentioned, these are 48-hour experiences, where 7 p.m. on a Friday, someone will announce a theme. And by 7 p.m. on Sunday, everyone who is participating will create a new piece of software from scratch that attempts to have a high entertainment value. So it's this time-constrained format. And that experience is really valuable. Valuable in a lot of ways, but most importantly, I think, learning to manage your time, manage your scope, find the fun, and we'll talk a lot about that. Learn to deal with constraints... How much space do I have? Not much left. And finally, to finish. The trick, of course, is at 7:00 on Sunday, you're done! It doesn't matter what you do on Monday, because you have to show your work on Sunday. And so this experience sort of teaches you all these tricks.

Show of hands... How many people have made a piece of software and spent more than a week on it, only to later abandon it, never to see the light of day? Right. How about one month spent, writing a piece of software that never sees the light of day? How about one year? That's what we're talking about. That's what we want to avoid. So going back to the original premise, we want to build software that entertains. That's what I'm doing here with this piece of software, Collaborate. It's a visual communications platform that tries to be fun. At this point, I want to invite anyone who's curious to load up this URL. I'm gonna go to...


Oh, thank you. And so what you're looking at is... It's a JavaScript application. It's built on Angular. And 3js and Autobahn. It's got a Node.js backend. And if we were to draw a system diagram, it would probably look something like... We've got our clients that are connected via the internet, lots of these clients, to a crossbar instance. To which are also connected a Node.js backend. And as you are drawing on your screen, that stroke -- this little bottom left guy, if I draw that stroke there, that stroke is being translated into a time series that is then streamed up to the cloud, to this crossbar instance, and back down to all connected users. And of course, there's this Node.js element, which isn't terribly obvious in the system that you're seeing here today. But at the end of the day, it allows me to record information, sort to a database, recall things, and bring it back.

I'm glad that you guys are having fun. Lowering some of my anxiety. And so I built the software for my daughter. She's two and a half years old. And she loves to draw. I wanted to be able to draw with her when I'm traveling. So I thought what better way than this shared interactive whiteboard. I built the first pass and I was pretty excited by it. But as I added more and more features, I discovered it was becoming less fun. What started as a novel means of sharing was quickly converging on a web-enabled MS Paint. So I looked back on my experience making games and thought about the experience in game jams. I knew I needed to manage my scope. The scope was getting out of hand. I needed to focus on the elements that were fun. And it might be useful to apply some constraints, to get that result.

And basically what you're seeing here... Oh, boy. We've got a crash on my end. Is... Let's see. I have a magic button to clear all of your stuff. What you're working with is the constrained version of this application. Instead of adding more and more features, I threw away all of those features, and said... What if the strokes disappear after five seconds? So this time constraint on the actual rendered output of your input creates a novel system, where you actually get a lot of new things for free. For instance, if I wanted to have a conversation with somebody, I could say... Hi! And they have to be present for that. And a moment later, they can say... Hello! With some beautiful script. And it creates this nice back and forth. There's something that I think is kind of magical, about how the pivot away from features and towards this simpler version of itself... Oh, boy. Somebody is doing something really fun there... Where am I? It provides this rhythm and creates something of a sense of urgency.

It almost reduces the inhibition to draw something on the screen. And when I started with this app, and you made a single stroke, and it stayed there forever... It was really daunting, to make that first pen to paper movement. But when it disappears, you realize... Oh, well, I could just do it again. And this time I can make an even better line. This one can have squigglies in it. And something about that really paid off. So if you find yourself slaving away on a project that has ceased to inspire you, I just suggest that maybe consider a pivot. Consider a new constraint. And think about where your system falls in the line between utility and entertainment. And try to move a little bit towards the middle and maybe you'll find some magic. Thanks!

Live captioning by Mirabai Knight

← October 2017