That's it, I did the thing. January 15th was my last day as a back-end developer, leaving behind 6 years of employment to gamble it all as a one-person indie game developer.
About me
My name is Andreas, I am 27 years old, and have been programming since I was 11. I spent my youth building game engines in C++ and OpenGL, went to university doing software engineering, graduated, moved to the big city (Tromsø, population: 70 000), and started working as a back-end engineer for a government entity.
Why leave?
The good parts
Being a full-time government employee in Norway is an extremely safe and stress-free position. You are in practice guaranteed lifelong employment regardless of how much work you actually do. The only tool your employer have if they want to get rid of you is not prioritizing you in the annual salary negotiations, causing you to gradually fall behind your peers.
I was lucky to end up in a place where I was granted a high amount of creative freedom, with loose deadlines. If you wanted to create something, or improve something you were generally allowed to do it and allotted the necessary time to do it.
Although the salaries were lower than what you could expect from a private company, you could generally negotiate other privileges that would make up for it. E.G I said that I wanted one day a week for personal development, which I used to research technologies and work on open-source. We were also allowed to go to 2-3 international conferences each year, which allowed me to visit many European cities.
I personally believe that if you work for a private company, you should have ownership of that company (though stocks
etc). There's no reason to work hard if all that means is that some shareholder somewhere increases his profit.
Working for the government means my customer is the Norwegian people, my boss is making a fixed salary each year, and
every extra hour of work I put in all goes directly to benefiting people.
I might not make more money by working harder, or less money by working less, but since I am providing a public service
I feel I can justify working hard anyway.
The bad parts
I have risen through the ranks at my company, achieving the highest position a single-contributor can become without taking on project management or managerial responsibilities, and stagnated. There is no more upwards movement, I make about the same as my colleagues 10-15 years senior, and can expect cost of living increases for the rest of my life.
On the opposite end the Norwegian state is overflowing with money, and there is so much waste I got sick of it. Every year we got allotted an absurd amount of extra budgets, which we were forced to spend before the year-end, but were not allowed to spend on more internal developers; So in practice we had to throw money at IT consulting firms just to make the money go away. Sometimes you got good independent developers, most of the time bad ones that required a lot of follow up and quality control. This took away resources from internal development, and when the year was over you had N amount of new services of dubious quality that were to be maintained internally in perpetuity.
Professional development
As I was going through university I always thought I would end up doing network engineering or something similar. I was afraid that doing my hobby (programming) professionally would cause me to stop treating it as a hobby. Luckily that did not happen, however something more sinister happened instead.
After starting my job, I have basically stopped doing non-work related development. The problem is not that I don't program as a hobby anymore, but rather that my projects have shifted focus. Every hour that before would have been spent on game development, is instead spent on professional development within my field.
- "We are using React at the front-end and are talking about moving to Next, I should check it out to be able to contribute to the discussion."
- "I should try out different back-end frameworks, to compare their speed and ergonomics, to see how it compares to our current one"
- "The front-end developers are raving about Svelte, I should test it out to see how it compares to React and Next"
- "We are talking about going to kubernetes, I should set up a cluster and move my applications there to see what that is all about"
- "If only we had a solr library that was not in PHP we would be able to modernize our stack"
If I was more disciplined, I would have been able to do both game development in my free time and, work during work hours, but I get too engrossed about work to do it. There is always something I want to research or a tool/library that would be handy at work.
On the flip-side, if I had not put in the after-hours work-adjacent programming projects, I would not have risen as fast internally, and earned respect and a reputation as a good developer.
Hobbies
I have never understood people who are bored. I have a million hobbies, and there's never enough time to achieve them all, everything from drawing, to playing the piano, keeping up with the current tv-series/books etc. By moving game development from a hobby into my profession, I am hoping to free up more time in the evenings for non-programming related hobbies.
Why now?
AI
In March 2023 I started using GitHub Copilot for code completion; not vibe-coding, only code completion. It has increased my productivity massively. However, I hate it. I love writing code; but using code completion is less writing code, and more like pair-programming with a generally competent developer, that doesn't actually understand what he writes. This comes back to bite you later; the amount of logic errors goes through the roof and the quality of the written code goes down.
The productivity improvements make it a no-brainer, there is no professional reason to not use it. In the coming years it will probably become more ubiquitous, and not using it will cause a serious productivity loss for that person.
I made the decision that I'm not using AI anymore, and since I can not justify not using it when working for a company, I have to work solo. I have no doubt that in 10 years time, when programming has been completely changed, and most code is written by coding agents I will be looked upon as a relic, but that's just how it is.
Age
No one gets younger, and as you get older your responsibilities increase. I realized that if I was ever to become a game developer the best time would be now, not later. I have the required 5 years of experience to be able to go back as a senior/principal engineer if it does not pan out, and the economic situation is looking good for now. I have a couple of years of runway, even if I don't get any government subsidies.
Rust
In 2022 my life changed forever when I found Rust. I don't know what it is about Rust, but I just get indescribably happy from using it. I no longer want to use any other language. I used to have a hierarchy of what language to use depending on the situation:
- Performance: C++
- Structural soundness1: C#
- Quick and dirty: Python
Now it looks like:
- Performance: Rust
- Structural soundness: Rust
- Quick and dirty: Rust and Python
If you have not yet given Rust a try, I can definitely recommend it. If you have the same values as me, e.g. you want as much as possible solved before deployment, edge cases handled, and want to be able to refactor without worrying about the soundness of the program, there really is no other alternative out there. I never really cared about the talk about memory safety, it is the semantics of the language that force you to handle all errors before the program will even run that attracts me.
I was able to write limited Rust at my previous job, however every time I had to return to Python, even though we had all the static checking possible enabled, I still did not like how unsafe everything felt. The other thing that they don't tell you is that if you want to use C or Rust modules to speed up parts of your code, you have to throw whatever few safeties Python has out of the window. Your nice dataclasses with field validation, you better convert that to a dict so that your C or Rust extension modules can use it. Keeping adequate performance without giving up the safety of classes proved really hard. Inspecting the type annotations to make sure that the guarantees held was a nightmare. I am happy that I no longer have to maintain a 100k line Python project, because if your Python project exceed 200 lines you are doing something fundementally wrong.
The Game
Following conventional wisdom, my first game will be a small one, as simple as I can get away with. I have calculated 500 hours of development time, so we'll see how that holds up. I don't expect any sales outside my immediate circle of friends, so anything exceeding that would be great.
It is going to be a multiplayer (RIP simplicity) shooter. My gaming with friends usually have us playing games that can be completed in one evening, so that is what I'm aiming for. A game you can play N amount of times with each run taking 2-4 hours, allowing you to get better at it every time, making you get further, with some small meta-progressions included.
I have long since realized that 3D modeling and animation is an extremely time-consuming activity, so it will use simple 2D graphics. Music composing is also something I have very little experience with, so I will need to learn it from scratch.
I am also trying out rollback-based networking. Which means that the clients communicate peer to peer, anticipates what the other clients are going to do next, and rolls back and resimulates if the prediction turns out to be wrong. This somewhat limits the scope of the simulation, as you need to run the game loop multiple times per frame, so that is going to be an interesting problem to solve.
Conclusion
So that is my rant, we'll see how this pans out. Will I hit it big, or will I be forced back into conventional employment, time will tell.
Footnotes
-
General back-end development, where making something robust is more important than something fast. Garbage collection keeps mistakes from happening even for long-running services. ↩