Aliens. It all begins with aliens. Rewind to San Francisco, and a game developer named Unknown Worlds. Unknown Worlds is awesome. We're chilled out, but we create wonderful products (featuring aliens). The games we make bring joy to millions of people around the world. The founders, Charlie and Max, are just the coolest and most inspirational blokes.
Before Unknown Worlds, I was at KPMG. A bean-counter, not a programmer. I couldn't tell computers what to do. But now, making games, I was surrounded by people who could.
I was so inspired by Brian Cronin, Dushan Leska, Jonas Bötel, Steve An, and others. They were gods. They would sit in a trance for days, occasionally typing incantations on their keyboards, and eventually show us some amazing new game feature. I was in awe.
Dushan would say to me: 'Just automate something you do every day. It will be hard, you will have to learn a lot, but it will teach you how to write code'. So I did.
At KPMG I spent a lot of time doing battle with Microsoft Excel. There is nothing fundamentally wrong with Excel. The problem is that it is an extremely generalised tool, and the work we were doing was not generalised. Too much time was spent copying and pasting data, sanitising data, shuffling data by hand.
When I arrived at Unknown Worlds, I started monitoring our sales. I channeled my inner KPMG and created glorious spreadsheets with pretty graphs. It was an awfully manual process. So, on Dushan's advice, I started automating it.
The process was agonisingly slow. I would devote time after work, on weekends, at lunches: I had no teacher. Once I got going though, I was hooked. Tasks that used to take us hours at KPMG evaporated in moments in the hands of the machine. I felt like a magician.
With great power comes great responsibility. Soon I was writing code in our games. I thought I was pretty damn clever. Some of the stuff I wrote was super cool, one feature even got me invited to speak at Game Developer's Conference. But damn, most of it was hot garbage.
Working on Subnautica taught me that mediocre programmers are dangerous to the health of large projects. Also dangerous: Reaper Leviathans
There is nothing more dangerous on a big software project than a mediocre programmer. We're like a radioactive prairie dog on heat: Running around contaminating codebases with bugs, indecipherable intent, zero documentation, no testing, and poor security.
Eventually I learned enough to realise I needed to ban myself from our game's codebases. I was desperate to be better: I wanted to be able to contribute to Unknown Worlds games in a sustainable, positive way. One day I read a recommendation: Create a personal project. A project you can sculpt over a long period of time, learning new skills and best practices as you go.
Channeling Dushan again, I decided to start an accounting software project. Accounting software gives me the runs. As I learned more about code, I realised that most accounting software is poo. And it's near impossible to integrate the big accounting software packages into other software.
Piece by piece, after hours, over weekends, and at any time a healthier person would take a holiday, I put together a beast I called Amatino. It was always supposed to be something small. A side project that I would use myself. Haha... ha. Oh dear.
Today Amatino is available to anyone. It's a globally-distributed, high-performance, feature-rich accounting wet dream. You can actually subscribe to Amatino and real money will arrive in my bank account. That's just outrageous!
Even better, I've achieved my original goal. I feel comfortable digging around in code on Unknown Worlds games, and am no longer a dangerous liability to our code quality. I can finally do some of what I saw Max, Charlie, Dushan, Steve, Jonas and Brian doing all those years ago.
Along the way I picked up a few lessons.
Creating your own product is utterly exhilarating and mind expanding. I'm about as artistic as an Ikea bar stool, but I imagine this is how artists feel when they make art. It just feels great.
Alright, maybe quit your day job if it doesn't make you happy. But if you are happy, keep at it. Over the past years I've given Unknown Worlds 100% and more. Unknown Worlds makes me super happy. To build Amatino simultaneously, I had to develop discipline: Every night, every weekend, every holiday, code like hell.
There are many benefits. First, you don't lose contact with your work mates. Charlie, Max, Scott, Brandt, and many others are constant inspirations to me. Second, you don't have to worry about funding, because you have a job. Third, you are kept grounded.
I think if I didn't spend all day making games, Amatino would have sent me insane. I would have lacked direction, and woke up not knowing what to do. Instead, I worked on making games, structured my day around Unknown Worlds, and devoted focused, intense energy to Amatino when possible.
No matter how important a milestone is, or how deep in thought you are, or how good you think your ideas are, you drop everything for your partner. You lift up your partner, you encourage your partner, you support your partner. Every day, without fail, without exception.
This was a hard lesson to learn. It is the most important lesson.
Without Jessica, Amatino would not have happened. And it is precisely because she took me away from Amatino that she helped. The ritual of cooking for her, sharing meals with her, going on dates with her, doing household chores with her, listening attentively to her thoughts, concerns, and dreams. All these things take immense time, time you might wish to devote to your project instead.
You must not make that trade. It is a false economy. Your productivity will suffer, your health and emotional wellbeing will suffer. The energy you devote to your partner instead of your project will come back to you tenfold and more.
Don't bore your partner to death by constantly talking about your project. Most importantly, don't put off big life decisions because you think the time will be right after your project is released.
You all hear this enough elsewhere. You have a day job, a personal project, and perhaps a partner too: You cannot waste time recovering from the ingestion of cognitive impediments. Any social value you get from being drunk is utterly dwarfed by the opportunity cost of brain-cells not functioning at peak efficiency.
Your mates might give you hell for this. Don't worry, they will still love you in the long run.
"I'm building a Dockerized cloud Node app with React-native frontend on GCP powered by the blockchain." Don't be those people. Learn from first principles. Start with abstract design thought, not a list of software for your 'stack'. Don't be afraid to build your own systems.
Reach for third-party dependencies judiciously and only where absolutely necessary. Learn by dabbling in languages where you need to allocate your own memory, while leveraging the speed boost that comes with those in which you don't. Build computers. Tinker with them.
Hot tip: If your elevator pitch contains the brand name of a third party dependency, you are violating Lesson 5.
Maybe some people get ahead in life by being arrogant, self-assured dickheads. In fact, I am sure that is true. If you want to build and release a product, you need to check your ego at the door.
Suck in information from everyone and everything around you. Approach the world with unabridged, unhinged curiosity. Even when you don't agree with someone, give them your undivided attention and listen, don't talk. Consider their advice most especially if it conflicts with your own assumptions.
Are you working on a personal project? Need help figuring out how to push it over the finish line? Curious about how Amatino was built? Something else? Hit me up on twitter, or in the comments below 😊.