DEV Community

loading...
Cover image for Lessons from releasing a personal project as a commercial product

Lessons from releasing a personal project as a commercial product

hugh_jeremy profile image Hugh Jeremy ・6 min read

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.


I hold Dushan (mostly) responsible for this mess

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.


How many software startups can you fit in one frame?

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!


Still can't believe this is a real screenshot

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.

Lesson 1: Do it!

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.

Lesson 2: Keep your day job

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.


Spend enough time around Max (L) and Charlie (R), the founders of Unknown Worlds, and you will be inspired to do cool stuff

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.

Lesson 3: Your partner comes first

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.


Don't put off the big decisions!

Lesson 4: Eat well, exercise, and don't get drunk

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.

Lesson 5: Ignore the framework brigade

"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.


You will learn a lot from building, breaking, and upgrading your own computers. This one was maybe me taking it a bit too far

Hot tip: If your elevator pitch contains the brand name of a third party dependency, you are violating Lesson 5.

Lesson 6:

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.

How about you?

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 😊.

//
Check out the Amatino double-entry accounting API at https://amatino.io
Originally published on hughjeremy.com

Discussion (28)

Collapse
kapouer profile image
Jérémy Lal

While i can relate to the fact it's vital to keep your health in good shape, i'm totally not convinced by the "don't get drunk" advice. One has to do some simulated annealing from time to time, to make sure your brain is not just a giant ball of shit ideas intertwined so tightly only you understand them. And the only legal drug to do that is... tada... alcohol ! So you'd better find a good local brewer ;)

Collapse
hugh_jeremy profile image
Hugh Jeremy Author

OMG Jeremy I'm in tears 😂 Simulated annealing... I love it!

Collapse
elmuerte profile image
Michiel Hendriks

There is nothing more dangerous on a big software project than a mediocre programmer. [..] Eventually I learned enough to realise I needed to ban myself from our game's codebases.

A sign of a software developer becoming better:

"One of the best programming skills you can have is knowing when to walk away for awhile." - Oscar Godson

Don't be afraid to build your own systems.

A thing you often hear "Don't reinvent the wheel". The problem with a lot of frameworks is that you cannot just use the wheel, you need to include the driveshaft, suspension, and blinkers. The problem though, is that you actually wanted to make a wheelbarrow.

I think it works better to first create your own (partial) system and then look what frameworks, tools, and libraries can support your desired system.

Collapse
hugh_jeremy profile image
Hugh Jeremy Author

Unf, I love the driveshaft / suspension / blinkers analogy! Going to pass than on for sure Michiel 👍

Collapse
ben profile image
Ben Halpern

I can relate to soooooooo much of this. Lovely read. I wrote a post with some lessons of my own if anyone care's to read:

Collapse
hugh_jeremy profile image
Hugh Jeremy Author

AHH! Ben! I remember reading your Five Keys article when you posted it. I loved it. It was hugely influential on me in shaping Amatino. Also you're my hero and I am fanboi squeeing very hard right now. Please accept this awkward fan hug: 🤗

Collapse
johanzvrskovec profile image
Johan AKZ

This is a great read! Hearing your thoughts about lesson 5 was encouraging. Someone else reaching the same conclusion. I am not insane. Thx!

Collapse
hugh_jeremy profile image
Hugh Jeremy Author

But what if... What if we're BOTH insane?! 😱

Collapse
emma_odia profile image
Emma Odia

Really inspiring article!

Quick question: How long did it take in all to complete this project?

Collapse
hugh_jeremy profile image
Hugh Jeremy Author

Thanks for the kind words Emma! Hmm... tricky question. Since I started writing the first code, it has been about four years. Some periods I pushed harder than others. And now, Amatino is in a '0.0.1 / Alpha' state, I would say there is at least 6 months - year left to get it 'Beta / stable'.

Collapse
emma_odia profile image
Emma Odia

Wow! Hearing this reply makes it all the more inspiring! That is commitment in focus! Wow! I'm amazed at your focus and persistence. Thanks for the reply. Wish you all the best man.

Collapse
dangolant profile image
Daniel Golant

Props for being honest on this. I've noticed entire companies... bending the truth about their age or the age of a project haha. Congrats on getting there :)

Collapse
onekiloparsec profile image
Cédric Foellmi

Thanks a lot. Lessons 3, 4 and 5 are keys, indeed.

Collapse
thobyv profile image
Thoby V ijishakin

Reading this post and then reading the comments and then figuring that Ben wrote his side project story is just amazing. Thank you for sharing, Jeremy. I learnt alot.

Collapse
hugh_jeremy profile image
Hugh Jeremy Author

My pleasure Thoby, glad it was useful for you 😊

Collapse
peaceman profile image
peaceman

Good article, Keep it up 😄

Collapse
hugh_jeremy profile image
Hugh Jeremy Author

Thank you peaceman ☺️

Collapse
hmaal profile image
Hmaal

This article was awesome! Thank you, really needed this!

Collapse
hugh_jeremy profile image
Hugh Jeremy Author

Thank you Hmaal ☺️

Collapse
kylegalbraith profile image
Kyle Galbraith

Great article Hugh! As someone that is in the same boat I really believe you did a great job of sharing your perspective. I think your lessons are spot on as well.

Collapse
fyodorio profile image
Fyodor

Great story, so inspirational, thanks! 👍

Collapse
hugh_jeremy profile image
Hugh Jeremy Author

Thank you Fyodor 😊

Collapse
kspeakman profile image
Kasey Speakman

Fantastic article. Thanks for sharing.

Collapse
hugh_jeremy profile image
Hugh Jeremy Author

Thanks Kasey 😊

Collapse
nebojsac profile image
Nick Cinger

Great lessons, thanks for the write-up! And cheers to Dušan :D

Collapse
jamesrweb profile image
James Robb

Is the project open sourced to contribute towards the roadmap? Cool work thusly.

Collapse
hugh_jeremy profile image
Hugh Jeremy Author

Thanks James! All client libraries are open source (github.com/amatino-code) - Right now I'm slogging through them trying to build as quickly as I can on my own. I'd love to foster contribution, hit me up at hugh@amatino.io / @hugh_jeremy on Twitter / right here in the comments. I'd love to hear more of your ideas and thoughts.

Collapse
abdurrahmaanj profile image
Abdur-Rahmaan Janhangeer

One of my best reads ✔

Forem Open with the Forem app