I recently finished my first game - Zuhmbeez - and that has been a huge accomplishment for me. It was not easy and at times I wanted to quit due to either feeling that it was a bad idea, or I was stuck on a problem, or I didn't have the motivation, or that I had something seemingly more interesting to work on, or really just about any possible reason you could think of. Ultimately I managed to stick it out and finish the damn thing and I am incredibly proud of myself for doing so. There are a million things I could change about it, improve on, or add to it but I am happy with where it ended up. I will likely revisit the game for small changes and bug fixes but nothing major.

As I get older and life and other priorities get in the way, the time for side projects becomes less and less. Instead of having hours of free time each night and on the weekends I am usually limited to around 30 minutes or sometimes upwards of an 90 minutes if it is a good night. I no longer have the luxury of casually learning and working. If I want to accomplish something I have to be much more focused in my efforts and learn from my experiences quickly as to not repeat past mistakes and lose valuable time.

I learned an immense amount about myself and the game development process along the way, and in an effort to continue growing I am taking some time to look back and reflect on what I have learned. I will break it down into three main categories to look at what I did well, what I didn't do so well, and what I am going to do moving forward. This is commonly known as a Retrospective in software development and it has incredible benefits. I hope that some of these lessons can help save time and effort for myself and others in the future.

What Went Well?

I actually finished!

This might seem like a very obvious or underrated thing to take note of, but if you have ever started a project and lost motivation only to start another project and lose motivation and then start another project but get too busy to finish it...you realize how quickly a backlog of started but unfinished work can build up. Good or bad, pretty or ugly finishing something can have a huge impact on your confidence and mental wellbeing. It can reduce your stress level and give you satisfaction and should be celebrated accordingly. So good job Matt! Thanks Matt..

Good project management and feature break down

Before starting any coding or actual work on the game I spent a significant amount of time in the design and planning phase. I wrote down the general premise for the game with a brief description and a baseline story for what the game would be. From there I was able to plan out all of the pieces that would help me reach an MVP or Minimum Viable Product, the bare minimum amount of features that would make my game be playable and account for the base features and design of the game. After I had the MVP defined I drew out a high level view of how I wanted the game to play out, the first 10 levels and their design. Once I had all of these things I broke everything down into sizable chunks of work with individual tasks, time estimates, prioritization and deadlines. Taking the first week or two to think through these things and plan them out and actually write them down made the critical difference when I started to lose motivation or couldn't think of what to work on next. This helped dramatically jump start the development process when it was actually time to start working.

What Went Didn't Go Well?

Big dreams, little time

Despite having taken the time to plan everything out and break it down into features, I severely overestimated the amount of time and energy I would have to dedicate to this project. I had defined a minimum set of features for the MVP of the game, but in reality it was too much. Originally I had planned out 3 different zones with 10 levels each, 3 different combat types, and a few other nice to have type features. So for the MVP I figured having 1 zone, 10 levels, and 2 combat types was a nice small subset of the final game. As time began to pass I found myself missing deadlines I set for myself constantly and redefining my MVP as I realized much of what I had planned was unrealistic. Ultimately the final game I released was the original MVP I had defined, which is not good. Originally I aimed to have the MVP completed by March/April, 1 or 2 feature releases during the Summer, and the final release of the game planned for around September. I missed all of these deadlines and only released the MVP by the end of the year.

Long periods of time without working on the game

Due to work, life, motivation, or any other number of reasons I found myself going long periods of time without even opening the project to work on the game. This caused a snowball effect of making it harder and harder to return to working on the game because the act of "getting back into it" kept feeling like a bigger and bigger task.

Scope creep galore

After defining the feature set and MVP I kept adding to it. Some of it was legit because of an oversight in the design and planning phase I had forgotten to account for some necessary things, but a lot of it was things that I could have waited on or were unnecessary to the MVP. Scope creep will likely always happen, but I could have managed it better by referring back to the original plan and design and more thoroughly thinking through the impact of adding something new.

What Am I Going To Do Next Time?

Open the project daily

To avoid losing focus and motivation I will make an effort to at least open the project and look at it every day. Even if I don't end up doing anything it will at least cause me to think about it every day. I would often lose motivation simply because I couldn't be bothered to open Unity or look at the code because it felt like jumping in and remembering what I was working on would take too long, when in reality it would take maybe 30 seconds.

Create a Game Design Document

I will keep up the good work I had done with project management and add to it by creating a Game Design Document. This will help keep all of my ideas centralized and able to be easily referenced. This will also help me better evaluate the core components and MVP features of my game so when it comes time to expand or add a new feature I can more easily see the impact it will have to the core game.

More accurate estimates

A lot of my original time estimates and deadlines were pretty inaccurate. Mostly due to not being realistic with the amount of time I would actually have to work on the game. Next time I will be more prepared to recognize how much time I can spend (daily, weekly, monthly) and how much time certain things will take. I should also account for time spent relaxing and actually enjoying myself. My original estimates were under the assumption that most of my free time would be spent focusing on the game, and no time spent to play games.

Template or package features

Most of the games I have started tend to have a lot of common functionality that can be extracted out into a reusable form to be more easily integrated into another project. I should set some time aside to do this before starting my next project because it will save time from having to dig back through old projects to find useful pieces of code I had already written. Things like a splash screen, screen fading, folder structure, game manager's, start and pause menus, etc.

Testing and sandbox area

Due to the way I implemented some of the things in my game I had to follow a certain flow to be able to test different levels or features of my game. This added an overhead amount of time that could be avoided if I had designed things slightly differently to allow me to drop into different points of the game more easily. I do not have a solution for this right now but before I start my next project I will think through this and do some testing for how to better achieve this