This is a topic I see crop a lot on various forums, and being a full-time employee, as well as a husband and father, I know full well how difficult it can be to find the time to work on your game projects. Here are some of my thoughts and tips on how you can maximize your time, avoid common pitfalls and ultimately finish your passion project.
I started writing games at the age of 10, on a 486dx2 PC running DOS. Firing up QBASIC and working on little text adventures and later graphical games was exhilarating. As I grew into my teens I spent less time socialising and more time in front of my computer, there wasn't any pressure to make money, just the thrill of learning something new. Once I grew older, got married, had a kid, I suddenly felt like all the projects I worked on needed to bring in an income. Some of those simple fun game ideas got discarded because I felt like they had no commercial appeal. I felt the pressure to scrutinise each feature and ensure that what I was working on stood the best chance of making it amidst the 'indiepocalypse' that was happening. This absolutely stifled my creativity. I no longer felt the joy of creating something I wanted to create. This led to me getting bogged down and burnt out on projects that I no longer felt passionate about. I had lost the joy of coding, the exhilarating feeling that I felt as a child.
Making games is hard. Dealing with game logic, AI, UI, sound, physics and making all of them work cohesively is an immense challenge. Add marketing and promotion on top of that, in an already extremely crowded market makes it even more difficult. I actually found it extremely liberating to realise that the chances of my game being a commercial success was slim. That can be discouraging, but actually, I had a full-time job, I don't need my games to be a success. It would be nice, but it's not a requirement. Coming to this realisation removed a lot of the pressure and enabled me to get back into working on projects I found interesting, not projects that I thought would be commercially viable.
Games development is time-consuming, you iterate on features really quickly, cut scope, fix bugs and obsess over the smallest mechanics. Developers are nearly always, awful at estimating. A year down the line, you're still working on that game that you were sure was only going to take 3 months to ship. Finding time when you work full time, is hard.
The single best thing you can do is wake up earlier. This is rather obvious but often overlooked. I would wake up around 8am, get my kid ready for school, make coffee and be ready to start my job at 9am. Then I would maybe grab some time in the evening to work on my game if I wasn't completely burnt out after a full day coding. If I was able to work on my game, my mental capacity to solve hard problems was almost completely exhausted. Not ideal.
I started waking up at 6:30am and grabbing a coffee, I would sit in the quiet of the morning, with a fresh mind and spend a few hours on my game. This took a bit of discipline at first, and some mornings I really didn't want to get up, but I persevered and now I wake up usually a few minutes before my alarm. The added benefit I found was that those first few hours of work were extremely productive. Previously I would sit at my desk at 9am, fighting to wake up and engage my brain. Now I'm ready to go, I've already solved some problems, written some code and got my brain warmed up. I make more progress on my game daily and it's had a positive impact on my full-time job, bonus!
Discipline vs Motivation
One topic that regularly crops up on game dev communities is that of motivation. What do you do when you no longer feel passionate about your game? How do you push through that last 20% and actually complete? This scenario (which everyone goes through) is where discipline trumps motivation. Starting a new project is exciting, you're brimming with ideas, seeing new features implemented every hour, it's all coming together faster than you thought. Then you iterate, fix bugs, cut scope, add sound, update UI, work on a build system, start marketing and churn churn churn. Suddenly it's just not fun anymore. You fire up your code editor, stare for a while, not sure where to begin and then close it. Days pass without you working on the game, then weeks, then months. A new idea pops into your head, and the whole process starts again.
Sound familiar? Don't beat yourself up, this happens to almost everyone. The common trait that those who regularly ship games have is discipline. Simply put, motivation is doing something when you feel like it, whereas discipline is doing something even when you don't feel like. If you want to break the cycle of not shipping, you need to learn discipline and start building healthy, consistent habits.
Do a least one small thing every day The single best habit I developed, which helped with my discipline, was doing one thing on my game every day. It didn't matter how big or small that was, I had to at least do one thing. There have been times when that meant writing a procedural map generator, using simplex noise, generating temperature, rain-fall and biomes. Other times, that was simply scribbling down a game mechanic just before I got into bed.
Many times I sat in front of my code, frustrated with zero motivation to start fixing some mechanic. I would force myself to do something, anything. I would set a goal of 10 minutes of coding before I could make a coffee for myself. Often that 10 minutes would lead to 30 minutes or an hour. I would look at the clock, surprised with how much time had gone. Sometimes just getting started is the biggest hurdle*.
*Tip: Leave your code in a forced broken state before finishing for the day. You'll know where to exactly where to pick up from next time.
Avoid Feature Creep
Time is a precious resource when working a full-time job, so it's necessary to avoid getting bogged down in mechanics that you just don't need. Try to focus solely on the core game mechanics and loop. This should be a small vertical slice that really drills into what is actually fun about the game. Feature creep will add extra load and distract you from the important tasks.
I actively maintain an 'ice box' list of features that are nice-to-haves but not important for the first version. This helps me to focus on the core game mechanics and loop, with time to polish them before shipping. I can always revisit my list of nice-to-have features post-launch.
Practice (game jams)
One of the most vital skills to learn and habit to get into is actually finishing a game and shipping it. The smaller the game, the better. The skills you learn from each of these projects will sustain you when finally tackling something larger. My advice to every aspiring indie developer has always been to start really small and just ship. Gradually increase the complexity as you feel comfortable, but build upon your previous learnings. This approach builds discipline and confidence, knowing you can actually see projects through to the end.
Participating in game jams can be a really good way to flex your creativity and finish a game that people will play. Having a fixed deadline is a great motivator and forces you to cut scope and focus purely on the core gameplay. All skills that are vital when tackling a larger project.