How can I successfully finish a hobby game project in my free time?
How do I motivate myself to keep it up and drive right through to the finish without losing interest or motivation along the way?
Game Development Stack Exchange is a question and answer site for professional and independent game developers. It only takes a minute to sign up.Sign up to join this community
These tips apply to any hobby software project, and not just games. Keep in mind that some could be contradictory, and that's ok because we're not all motivated by the same things.
Start by planning You can do that by writing a Game Design Document (GDD), a Technical Design Document (TDD), and a Feature Backlog.
Scale yourself back. Whatever your grand vision is, try and figure out what the smallest achievable portion is and do that. Making an RPG? Start with one quest and no NPCs. Making a platformer? Start with one level and no enemies.
Start by creating a game that is stupidly simple And get it finished and published online somewhere. Remember that even something seemingly simple like pong could turn out to be quite complex if you're new game development, and starting with a simple game will show you whether you have the patience to take on a bigger project.
Set tiny milestones. Having a goal like "item system works in my RPG game" is all well and good, but that implies a whole lot of under-specified functionality that you probably didn't even know you needed. What about "graphics environment set up"? Or, "A sprite is displayed on the screen."
Set deadlines for your milestones. Keep them realistic and feel free to adjust them when you notice you over- or underestimated your capabilities. But don't just let them pass.
Break that down again "Implement Leaderboard View" is not a sufficient task. What does that involve? Break it down -
Create background artwork for leaderboard view
Create class methods that fetch score data
Create class methods that post score data
Create a view controller which will display a back button, reload button, and a table view
Implement the table view to load in the data from the model
Seeing the picture in finer detail will reduce your chances of missing a key element of your implementation and will provide you motivation as you tick off each task.
Prototype early. Before you sink a bunch of your hard-earned hobby hours into a game, figure out if it'd be fun first. There's nothing so dispiriting as working your ass off on something for dozens of hours only to find that the basic concept sucks.
Develop something iterable. My favorite hobby software projects are the ones where the basic concept allows for later tinkering. Is your game like that? Can you ship something and then revisit it later and add cool stuff?
Don't build an engine or a framework. You don't want an engine, you want a game. Don't worry about the framework-y, reusable bits until after your game is shipping. Once you start on the second game, then you can go back to your first and see if there's anything you could bring over. That's not to say that you shouldn't use sound software development praxis, but don't start by writing a Sprite class until you know what you need your sprites to do -- you'd be surprised how little it'll turn out to be. Start with a Hero class, then a Monster class, and then -- oh look! -- there's some common stuff!
Organize and track your ideas You can use a physical notepad, a corkboard, whiteboard with sticky notes, a "To-do" Application (e.g. Things for Mac and ToDoList (free) for Windows.. Alternatively, you can jump onto sourceforge.net or codeproject.com to grab a to-do application.) You will have a lot of sketches, ideas, design information that really needs to be aggregated into one spot. Having an central location with your feature list will help you stay focused.
Let your friends and family know about it You might be starting off your project and you could need a lot of focus for some time, letting people close to you know that you're busy and why might help them not be mad at you if you're not as available as you could.
Shipping is a feature. You're never going to finish your game, you're only going to abandon it. What is the minimum amount you can do before you're not completely embarrassed to show your game to someone else? Chances are, you can do less than that and still have a game to be proud of. Don't get caught up in constant revisit->reimplement->repeat cycles.
Use a "game jam" approach at the beginning Get something playable as soon as possible. Forget what it looks like (the code too, I know, it's hard). If the game play is not immediately interesting or fun for you, drop it, take some notes on why you think it sucks/isn't fun, and move on.
Do a little bit each day. Marathon sessions are great and all, but you're trying to squeeze a long-term commitment into an already crowded life. If you do a little bit each day you are making measurable progress and establishing a structure within which you can achieve your milestones.
Get something on the screen. you may be surprised on how big of a jolt to your motivation it will be. I tend to focus on getting artwork early. In addition I also am able to work with a musician who starts showing me stuff relatively early as well.
Track your progress. You can use a version file (or better yet, a version control tool) to log the features that you've added. Seeing the list of what you've completed will help highlight the progress that you've done so far.
Keep the project in a state that works. You'll be able to share it and show it at any time, and you'll be able to test any aspect of it at any moment.
Playtest. Start getting early feedback on your game. I'm talking about right after you finish your initial prototype. Let some of your friends mess around with what you have, get feedback, take notes, and revise your plan if needed. Be sure to test outside of your realm of comfort and cast a net that includes other game developers. Sometimes friends and loved ones are just not critical people.
Take a Break If your mind isn't into the project at a specific time don't try and force it. Get up and go for a walk or take a quick nap. That is the luxury of being an independent. In the end you'll create a better product for doing so.
Disconnect from the Internet (workstation, mobile device) from time to time. If there's something you need online, write it down to look up later.
It helps to have things like your engine's API reference available available offline, if possible.
An option is to add some particularly distracting sites to your
hosts file so you just can't access them.
Remember that you're working for yourself and your own entertainment. Don't let your project be hijacked by others expectations and desires, particularly when your interests change over time.
Have fun If you're slaving over your save state system all of this week be sure to follow it up next week with something that is fun. One of my fun moments was redesigning the animation system for my user interface.
Collaborate You don't technically need to start adding people to your team, but talk to other people about what you are doing. Jump over to gamedev.net and start networking.
Start a Blog Talking about what you're doing allows you to build a brand for yourself. This is priceless when it comes time to shipping your product. Just look at what Wolfire is doing. They are absolutely pure win at building a brand for themselves.
Read other (game dev) blogs For some people, whenever they read another indie game developer's blog post about their updates, they immediately open their IDE and start working.
Here is a quick list:
Share your excitement Get a few other developers who can share your excitement about the game. Excitement can be contagious! Set up a mailing list (Google groups are easy to set up), and post to it often to keep momentum going.