The Dark Side of Supporting an Open-Source Project

The Dark Side of Supporting an Open-Source Project


11 min read

Featured on Hashnode

I've been working on my Fantasy Console, Pixel Vision 8, primarily by myself for the past six years. I've poured thousands of hours and hundreds of sleepless nights into it. I've coded at home, on planes, trains, and in hotels around the world. There have been times where I've ignored my friends, my family, and my mental health. There isn't a day I'm not fixing a bug, adding a feature, updating the documentation, or answering a question on Discord. It's been one of the most rewarding passion projects I've ever worked on, but what you see today came at a very high cost.

Gamora and Thanos Avengers Infinity War

We don't talk enough about what it takes to maintain and support an open-source project on your own. For most developers, it's something they can use for free, add it to some project, and move on with their life. Unfortunately, there is a price someone had to pay, so I thought I'd share my experience so others can appreciate the dedication that goes into it.

A Crushing Defeat

I tried for two years to make Pixel Vision 8 a commercial product. I had no expectations that I would make money with it. I originally started it because I wanted a tool to speed up my development during Game Jams. I've built multiple game engines on top of other frameworks, but I wanted something that was my own. I was heavily inspired by Pico 8, and instead of just using that, I went out on a mission to build my own.

Initially, I put PV8 up for pre-sale on once I had enough work that others could use. I was eager to get other people's feedback and, at the time, figured it would be a 6 to 12-month project at most. I had a lot of code I had built on top of Unity already, more on that later, so I continued to push builds while people paid for early access to the fantasy console.

CleanShot 2021-10-22 at 17.29.25@2x.png

I made almost $10k in the first few months. It was a good sign that I was onto something, and I brought on some other people to help me. I hired Pedro Medeiros to do the pixel art and Christer Kaitila to build the music player. When I began, I had a rough idea of what I needed from them, drew up plans, and everyone got to work. It didn't take long before I ran through the initial money I raised and started putting my own money in to keep things going. There were additional costs, like hiring someone to build the website, hardware for testing, and other pixel artists to create art packs. Finally, I ended up redesigning everything with the help of Christina-Antoinette Neofotistou.

Luckily I was doing a lot of LinkedIn Learning courses, which was going by at the time, so I was bringing in additional money to support my efforts to keep PV8 afloat. Eventually, the pressure to sell my fantasy console was too much, so I decided to open-source it. This was a hard decision because I struggled with multiple ways to sell it. I tried making the code free and just charging for "pro tools." I also tried splitting it up and made stand-alone music and pixel art tools. But each attempt to monetize it added a tremendous amount of guilt that what I was offering wasn't good enough, and it drove me deeper into the project.

CleanShot 2021-10-22 at 17.31.31@2x.png

Open-sourcing Pixel Vision 8 was me throwing my hands up in defeat. However, it only made things worse because more people started using it, and with each new user, issue, or question, another stone is added, weighing me down.

Trying to Cut Corners

The first mistake I made was using Unity. I tried to cut corners by building on top of a framework that supported most of my target platforms like desktop, mobile, and Web. I was also creating Unity content for LinkedIn Learning, so it made sense, and a lot of what I was building eventually made its way into my courses. I knew I was painting myself into a corner, and Unity was so unstable it got to the point where I couldn't upgrade the IDE to the latest version because so much changed from release to release that my project wouldn't even work past Unity 5.6.

CleanShot 2021-10-23 at 06.11.12.png

Three years into the project, I didn't want to lose all of my C# work, but Unity was costing me more headaches than I wanted. This put me in a challenging position; there aren't other solutions for running C# games on the Web. I began looking at MonoGame, which was completely open-source but didn't support Web builds. Unity is a black box, and there was no way to fix any of my encountered issues. Eventually, I decided to move away from Unity, which required major refactoring, more time, and alienated many of my users that wanted Web support.

Numerous Refactors

I've worked on many large, high-profile sites, and technical debt is a real thing that could cost companies hundreds of thousands of dollars to try and fix. So much code had to change when I finally decided to move over to MonoGame that fully supporting backward compatibility was out of the question. Everyone, including myself, had to migrate their projects to the new build when I eventually released it eight-plus months later. I thought this MonoGame refactoring would be the only one, but I had to keep refactoring each month to remove all the legacy Unity code, and it dragged on for over a year. I'm still cleaning things up because some core engine parts haven't changed since I initially wrote them six years ago.

CleanShot 2021-10-22 at 18.03.56@2x.png

I thought I had an exit strategy to leave Unity by keeping MonoGame in my back pocket, but I had to rebuild everything from the ground up. The last few refactorings really took the wind out of my sails, but I pushed forward. I'm happy with where things are now, but I just wrapped up another major refactor that I'm afraid to release because it will break more games. There is a particular irony in that my game engine is just as unstable from version to version as Unity had been. It's unavoidable. Moving a project forward will always come at the expense of any previous work.

Drowning in Documentation

I've written numerous game development books, published hundreds of online tutorials, and created over 32 courses for LinkedIn Learning so I figured creating documentation for PV8 would be easy. I was so wrong! Writing documentation for a project that is still in development is incredibly difficult. Every refactor or bug fix had the potential to make all of the documentation useless. Pixel Vision 8 isn't just a game engine, there is an entire OS with a dozen built-in tools that need to be documented. I struggle to keep up with my own changes.

Pixel Vision OS

After I open-sourced Pixel Vision 8, I thought I could move to a model where I monetized premium content and offered the fantasy console for free. I reached out to Podia, and after talking to the CEO, Spencer Fry, I created a site where I could charge a monthly subscription to premium tutorials. I still hadn't launched the other website I spent $6k on because without Web support, having a place for people to share their games was pointless. Luckily, Podia was cheaper, costing less than $1k a year, but trying to move away from was a disaster.

First off, everyone hated that I was moving over to a subscription model. I had given anyone who bought a copy on a free subscription, but that didn't appease most. Also, while Podia markets itself as an online course platform, there were numerous issues around the built-in text editor and lack of support for displaying the code in my tutorials. To Podia's credit, they did help me the best they could, but almost two years passed while they promised me a new text editor before I finally got fed up and shut it all down.

CleanShot 2021-10-22 at 17.44.05@2x.png

At this point, I had given up on trying to sell tutorials, wasted a lot of money trying to keep PV8 afloat, and felt like an utter failure. The more popular PV8 became, the harder it was to support it. When I shut down my Podia site, I migrated everyone over to a substack newsletter, which was even worse. The last time I posted something was seven months ago. It's not that I don't have anything to share, I'm not happy with the state PV8's tools, and I don't want to put more out there until I can fix things. On the outside, it makes the project look like I abandoned it.

It's a never-ending cycle. The best solution ended up just pushing all the docs t o a GitHub Wiki. Even now, the docs are at least a year out of date. And, while I have updated documentation on my computer, you can't version GitHub Wikis, so I have no way to release it without confusing everyone using the stable build. I also built a simple Gatsby site myself and lost all that time and money.

The Personal Cost

The upside of traveling by yourself is that you end up with a lot of time by yourself. While working at Amazon, I was traveling 2-3 weeks out of the month, bouncing between New York where I lived, Seattle, London, and anywhere else an event would be going on. When I'd be on the West Coast, I'd go to sleep at 6 pm and wake up at 1 am to code, essentially getting 8 hours of coding in before I had to be in the office. When I was in Europe, I'd stay up until 4 am coding, sleep, and go into the office at 10 am. Essentially, I was keeping on a New York timezone anywhere I was in the world and getting at best 4-5 hours of sleep a night.

CleanShot 2021-10-23 at 06.29.01.png

I've always had trouble sleeping, and being in a different timezone every other week doesn't help. But, I was waking up constantly with ideas or dread that I wasn't fixing things fast enough. I knew I was in a bad place a couple of years back while hanging out with some friends in London. I would never stay out late or drink so I could get up as early as possible to code. When I was out, I would constantly be obsessing about getting back to my hotel or working through a problem in the back of my head. Then one night, a close friend snapped me out of it.

She called me out for caring more about coding than spending time with people. It wasn't an intervention, more like a demand that I forget about my coding so I could go out with everyone and have fun. It reminded me what I was missing out on and, even worse, how much I ignored my family when I was home. I have always had this problem, but the pressure I put on myself to keep trying to get PV8 to work pushed me deeper into a depression which made me withdraw from the world where only my code mattered.

When my mother-in-law was dying of cancer, and I was balancing work, taking care of the kids, still trying to travel, and doing work on PV8, I almost snapped. Then, last year when New York went into lockdown, protests were happening down the block from our house, and I was not traveling for the first time in my life, it all came crashing down on me. I took almost five months off from working on PV8 and just played games, wrote, and tried to survive like everyone else. It's been hard to get back into coding on it ever since.

A Silverlining

It has taken me years of working on myself to finally stop working on Pixel Vision 8 and walk away from the computer. I taught myself how to meditate to clear my mind before going to sleep at night and mindfulness to be more present with friends and family. I've studied Stoicism for years now to accept the reality that my projects don't define me and that if I'm unable to get a new feature out or fix a bug, it doesn't impact the world around me. Working on Pixel Vision 8 didn't cause these problems. I have always been obsessive. It did, however, highlight how bad these problems had become and that I needed help to get better.

This is fine

It's not all doom and gloom. A lot of really great things have come out of working on Pixel Vision 8. Not only has it pushed me to be a better developer, but it's also helped me understand everything that goes into releasing a product, marketing it, and of course, open-sourcing it for others to use. I've also had to face my fears of failure and self-worth. I've had a very successful career working for some of the world's largest companies, but we all suffer from imposter syndrome no matter how successful we become.

I only had two hours this morning before I needed to start working. While I had all these plans to try and get PV8 running in Unity again so I can build a WebGL player again, I ended up writing this instead. I put in long hours at work, and I make myself available when my wife needs help with the kids, or we go out. My time is very limited these days, so the time I have to work on PV8 isn't as much as I'd like. But seeing how it has grown, allowed me to hire some of the best indie developers and artists I know, and making fun little games I can play with my kids helps me enjoy the times that I do get to work on it.

If you like this post, please leave a šŸ‘ and ā­ļø on Github. I hope this didn't discourage anyone from open-sourcing their work. I think with the right balance, and realistic expectations, sharing your work with others can be incredibly rewarding.