Citybound: delivering on the failed promises of Sim City

Hello, who are you and what are you working on?

Hi, I'm Anselm. I was brought up as a tinkerer and became a self-taught anti-disciplinary programmer and designer.

For already roughly 5 years, I've been working on Citybound, an open source city simulation engine, and city building game.

Why did you start Citybound?

The inspiration was the release of SimCity (2013). Having followed the series since my early childhood (SC2000 back then), this version promised a paradigm shift: they wanted to simulate and show the player every individual and company in their city. The city life would arise from their fates and interactions, not from some simplistic statistical models like before. This was extremely compelling to me since I am very interested in complex systems with emergent and chaotic behaviors.

Unfortunately, the final result fell very short of their promise: due to performance problems, they had to severely limit city sizes and individuality of your cities' inhabitants. They ended up being modeled more like characterless water particles, flowing from homes to workplaces to shops.

This missed potential annoyed me so much that, for fun, I started to experiment with what I perceived to be the most performance-intensive part of that vision: simulating individual cars, each on their own route through a complex road network, reacting realistically in every moment to all the cars around it. In research, this is called micro-traffic simulation.

Soon enough, I had some prototypes of just that traffic part of a city and seeing it work convincingly in front of my own eyes, with acceptable performance, it hit me: why don't I try and create my own city building game.

Citybound traffic simulation

What were the early days like?

Pretty soon thereafter I had a rough plan of what I wanted my perfect city building game to be like, based on that new micro-simulation vision. And even though I was missing many pieces on how to actually build that, I formulated and published my plan on a new blog for Citybound, just shortly after I settled on that name.

This was still quite recently after the release of SimCity (2013), so I decided to post my plan on the SimCity subreddit.

The reaction blew me away; I was far from the only one frustrated by this missed potential, and I seemed to promise just the right things for the upset masses, and with a minimum of proof (videos from my prototypes) to show that I'm at least a little more than a smooth-talker. The post took off. I got very lucky with timing and rode this wave of frustration.

What additionally accelerated the growth of this first post on Reddit, though, was my decision to reply immediately to every single comment, question or concern that viewers voiced. This meant that I spent all my waking time of an entire weekend, and then some, answering questions, formulating my plans and ideas further and discussing them.

This further backed up that I'm for real, but more importantly, it set the tone for all interaction with my community thereafter: a true dialogue, full transparency, collaborative exploration of ideas and potential solutions. This is a level of authenticity that the big companies will never be able to fabricate. And this is why it resonates.

How have you grown Citybound's usage?

Starting with the experience of this first post, it was clear to me that the only way to grow a community is to find existing relevant communities, humbly introduce yourself there and show that you are truly one-of-them. For me, this was the aforementioned SimCity subreddit, the Simtropolis forum, the TIGSource forums and, surprisingly, the Something Awful forums. I created my own Citybound subreddit but made sure to always cross-post all updates to all of these destinations - with a "comments" link below each blog post to all of the destinations, hoping to cause some cross-pollination and channeling towards my subreddit as the main site of discourse.

This worked really well and some of the posting destinations turned out more fruitful than others. As most of the discussion moved to my subreddit, though, I slowly stopped crossposting completely and had a really coherent, amazing community in one place.

Another really important tool was my newsletter. Since day one I had a newsletter sign-up form on my blog, which ended up serving as the central news-notification mechanism across all the different communities. This also was a great way to reach people after a longer period of little newsworthy updates.

With this community, I have experimented with many different kinds of interaction. I had regular update videos at the beginning where a lot happened at once, but these became very time-consuming to make over time. What I really loved are programming and Q&A livestreams because they give such an intimate feeling of what it's like to actually build the thing. But these are also very energy consuming (ever tried to talk and program at the same time for 3 hours?). Later I found a more lightweight version of that, which were basically pure Q&A livestreams but going really in-depth on some interesting topics. I should try to do that again soon. The hardest part with all of this is consistency and justifying the time spent versus just building the thing - but it is super rewarding when you do it.

A big step was to decide to open-source Citybound (it wasn't planned initially) and to start a Patreon for it. This caught the attention of a whole new group of people interested exactly because it is open source - and it gave particularly devoted fans a way to help me sustain this project with monthly payments. I soon reached a steady $600 per month, which I still receive to this day. It is far from enough to live on but does make a difference and still does not create super-high expectations - keep in mind that each individual person typically donates amounts like $1-$10 per month.

How have you managed the workload as a solo maintainer?

This is my weakest point. I run Citybound like an open-ended research project with few deadlines and little pressure for concrete deliverables. This made it possible to re-architect the basics of the simulation several times until they are what they really need to be now - again something that no big company or commercially interested indie developer could afford to do - but this means that we still have only the very first hints of something like a game (a playable prototype with a lot missing and a lot broken).

I touched on balancing programming work with community interaction above - but the hardest part is really to decide when to implement which part of such a multifaceted project.

Also, what really made things difficult for me was my uncompromising approach to almost every aspect of Citybound - almost never did I accept a simplification of reality for the programmer's convenience sake - and there are some topics where "doing it right" meant implementing cutting-edge research, or even worse, having to invent something new that could be cutting-edge research. I have probably spent 1.5 years so far just on geometry problems related to free-form road laying and zoning. The biggest issue is that these kinds of unexpectedly hard things are hard to communicate and hard to set expectations around. It's like most of my work on Citybound so far is still invisible.

Citybound software architecture

How much time do you devote to Citybound?

For most of the beginning, I was doing Citybound on the side of a day job, but very passionately. Then I managed to do Citybound full-time for quite a while, with the support of my fans and my savings. Then I switched to more consultant-like freelancing gigs to earn money and since then had times of intense professional work interspersed with times of intense work on Citybound. More recently, I am becoming increasingly convinced that Citybound has to have this research nature and should not be pressured by commercial interests at all. I just have to live with the fact that I have to make money some other way.

What are your hopes for the future of Citybound?

My biggest hope is that soon I will reach a point where a lot of the good but still hidden work comes together and really makes the quite vivid vision that I've built in my head over the years come to life. And that I will have something else that interests me more than my jobs so far and pays well enough that I can keep doing Citybound as the fun thing that it is for me.

What advice do you have for other open source projects and maintainers?

I would say the most important thing is that your project is not just open source by name, but that it is prepared for open source: the main thing I struggle with is writing code that can easily be understood by others. This means avoiding custom idiosyncrasies wherever possible (even if I really like that weird way of doing things), choosing widely known technologies and if you do depart from the beaten path explain really well why and how you did so. I'm not a fan of obvious code comments, but you really need the "why this has to be so complicated" kinds of comments. After that, having clear and reproducible build instructions and guides to set up the development environment for your project is key. Because I do a lot of custom things, I created a bunch of scripts that guide people through the set-up process.

Editor's note: Citybound is an incredibly interesting and ambitious project to be taken on by a single developer. It would be a great triumph of independent research and game publishing for Anselm to reach his goals with it and improve upon Sim City. You can view his work and writings on his website, look at the code on GitHub, or join the community on Reddit. Recently, Citybound was accepted into the GitHub sponsorship program, where Microsoft matches supporter donations for one year. Instead of Patreon, please consider donating on Anselm's GitHub Sponsor page to make your contribution count twice! It would really make a difference if he can one day devote all of his time to it.