Those who have known me for a long time have seen me flit from project to project, prioritising learning a technology or technique over seeing something through to the end.

Those who have stuck around with me may have seen a change in approach, focusing more on features that can take months to complete but seeing them through to completion, and staying with a single project over the course of years.

In this post I talk about what has worked for me to keep my motivation going.

Creativity in software development

Software engineering is an intensely creative process. If you do not have the space to be creative, you are relying on your existing experience to solve problems and may not come to the best solution. I find the best creativity to work out the more complex tasks comes to me when I go through a iterative cycle between gaining knowledge of the domain and letting my mind wander to work through a problem in peace.

Maybe I need to figure out how to get the most out of my computer in the depths of a game engine? How to rearchitect an old area of code to new technologies now that our relational database is being out-scaled? I do a lot of research around the problem - often switching between ChatGPT and a my IDE for possibilities against reality.

Then, I take our dog for a walk, or go for a run, or contemplate taking up ironing again (I don't think it'll ever happen). Find an activity away from your phone, social media, or your TV that fills your brain with white noise. I use ChatGPT on my phone in conversation mode, speaking into it rather that typing, when I need more information on a subject while I'm out of the house.

Avoiding too many projects

Like having too many projects on at work splits your focus, having too many side projects splits your motivation. Try and treat the projects like technical prototypes - write for a few days or weeks, evaluate the outcome and your learnings, and then move on.

Although the joy and adrenaline of chasing the next best thing is addictive, running through a project to completion can be more rewarding - it gives you an ongoing sense of achievement for sticking at it.

Setting expectations

Having a child has been a mixed blessing to my software development career. I've had to adjust my expectations around what I can do, how much energy I have, and where I spend that energy. No longer can I get up early, program, and work in to the evening after work. I get maybe 20 minutes a day, so having something I can focus on and come back to when I have time is a joy to me. It also means I can keep up with the changes in C# and .Net, and really challenge myself in different ways to the challenges of my work day.

A pitfall I have fallen in to quite a few times is trying to start a side project for the purpose of making money. Motivation through making money if you are not a particularly money-driven person is quite fragile, even if you have the initial buzz when you start. Try and find something that you love (for me it's a mythical city builder game from 2000) and do something related to it, or try and replicate it.

Lastly, making software is only half the battle of delivering software. There's some pretty crappy software out there that is incredibly successful off the back of their marketing and sales. And unless you are releasing your source code, no end user is going to care about your technology choices or how it was architected.

Doing something else

You don't have energy to program? Write up some TODO comments in code with your current thoughts, or more information into some issues in your favourite issue tracker. Those comments will be useful later if you have some energy but don't necessarily have the brain space to reason through the solution.

No motivation at the moment? Don't stress too much and use up more energy, find something else to help you recover for the next few days. Here are some ideas, not in any particular order:

  • Play a game - I like the ones that you can play for 15 minutes and put down; roguelikes especially
  • Read a book
  • Spend time with loved ones

For me, apart from spending time with my loved ones, my favourite activity is:

Writing about it

Writing up, even if you aren't going to publish it, is the best way to force you to understand the problem domain and crystalise your thought processes. It also focuses your communication style and ups your confidence. Who cares if no one is going to read it? The process and the result is incredibly enjoyable - do it for yourself.

If you encountered a real challenge in your last PR, get a post together for it. Managed to get a test under-coverage check into your CI? Awesome. Managed to bend Tasks to your will (upcoming post)? Cool! Done some nice profiling around multithreading? Write it up (this is a reminder to myself).