What are your tips and tricks to successfully finish a hobby game project in your freetime? How do you motivate yourself to keep it up and drive right through to the finish without losing interest or motivation along the way?
These tips apply to any hobby software project, and not just games.
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."
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.
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.
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!
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.
I actually just wrote a blog about how I approached the design and development for my latest iPhone project. You might find value in reading it.
A few thoughts to leave here are
I use Things for Mac and ToDoList (free) for Windows.. Alternatively, you can jump onto sourceforge.net or codeproject.com to grab a to-do application. I like ToDoList. You will have a lot of sketches, ideas, design information that really needs to be aggregated into one spot. Having an application like this with your feature list will help you stay focused.
"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.
Keep the Scope Small
Don't try to build Starcraft III if it is just you, scruffy, and purrdoodle. It's just not feasible. Lower your expectations and find something you would still enjoy building.
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.
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.
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.
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.
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.
My #1 biggest tip: Disconnect your network cable!
I have a ritual of disconnecting my network cable before I go to bed. The next morning - I'm not online, so I have no sites to visit, no emails to read, no people to chat to, etc. So I naturally get straight to work on my game.
I don't connect again until I absolutely have to. If there's something I need online - I write it down to look up later, or use my iPhone's browser.
It helps to have things like MSDN downloaded and available offline.
The biggest problem with hobby projects is not having a well defined scope. Many people start by wanting to make the best game ever with hours of gameplay and all the cool ideas they have. Instead, you should try to scale down your idea to something manageable and then come up with a reasonable schedule. It's true that deadlines are at odds with the game being a hobby project and not a full time job, but they are good for staying motivated and breaking down big tasks into small manageable ones.
You can also keep a version history file that is updated every time you add something to the game. Better yet, you should use version control and use the commit history for that. It's a good way of measuring your progress and staying motivated later (by looking at all the stuff you already did).
The creator of Grauioutous Space Battles game, a lone indie developer, summed up some handy tips about making your own game in a blog post. Some of them can be motivating even for hobby projects.
- Code something you like
- Surround yourself with inspiration
- Keep a log of what you did each day.
- Do some shiny
- Hard lessons in money
- Stay aware how high the bar is (know your competition)
- Take short breaks.
I've recently noticed that whenever I read another indie game developer's blog post about his updates, I immediately open my IDE and start working. So, my advice for keeping you motivated is: read other (game dev) blogs ;)
Here is a quick list:
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.
I worked on Snapshot (www.retroaffect.com) in addition to my full time job for almost 8 months before turning it into my full time job. I would work all day, then come home and work on Snapshot until I fell asleep. Sometimes it was a little too much, but other times (most of the time) it was awesome.
I'd definitely suggest reading over this: http://positech.co.uk/cliffsblog/?p=753
Also remember that if it is something you are just doing for fun, remember to keep it that... fun. If you burn yourself out then your project with either never be finished or it will show in the final product.
Based on my own experience it's easier to stay motivated if you've got others working with you. So:
- 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.
- Start by getting something simple that works. When I was working on Trosnoth (side-scrolling platformer), the starting point was just a single stick figure who moved left and right and jumped. From there, we slowly all added bits and pieces until it did just about everything.
Certainly my key tips would be share your excitement and keep the project in a state that works.
I have been working on my hobby project now for around 2-3 months. That means evening or two every now and then plus weekends occasionally. The project is maybe 2/3 done for a proper first release. It is maybe too early to call it success but here are the things that have kept me going so far:
- I had a pretty clear idea what is the game going to be about. Pretty simple but offers many extension points for version 2 and 3.
- I have been blogging and tweeting about.
- I picked an area that interest me (JS + HTML5 Canvas + FB integration) and is different enough from my day job (CMS, J2EE, GWT/GXT)
- The selected technology allows easy and quick tweaks, no compiling etc.
- Everything is done just because it is fun. The game might work as reference one day but that is not the reason for working with it.
- I have been kind with my friends, not asking feedback after each change.
- My gf understands me :-)
1. Buy a notepad for keeping every idea you'll get. You don't have to actually put them in your game but you can use them for further inspiration.
2. I'm also trying to hold everything I still have to do on a corkboard or a blackboard so I always can look for my next targets to finish.
3. Don't try to implement things the best way on the first attempt. Try to get things running and make them nice in a later step.
So you could have different features on different states of niceness:
- End of Day1:
- Feature1:Bad but running
- End of Day2:
- Feature1:Made the solution better
- Feature2:Bad but running
- End of Day3:
- Feature1:Acceptable state of niceness
- Feature2:Acceptable state of niceness
It helps a lot in motivation if you get things running first before considering making them nice and smooth. The downside of this method is, that you will be coding more code that you'll put in the trash in the end.
4. Dont implement too much features parallel. Try to conentrate on <=3 features at once. So you have some place to switch to if you stall at one feature but not that much features that you are overwhelmed by the ammount of work to do.
The short answer: Iterate, iterate, iterate. Start small, and get something running before trying to implement the whole system. It's still important to do some top-level design and planning, but being able to see what you're working with and playtest parts as you go is incredibly important to staying motivated; it's hard for me (and most any other programmer I know) to work day in and day out on something that doesn't actually show them visible results.
I have a good imagination, but poor organising skills. On the creative side, I have found it helpful in my case to use a tool to help me keep track of everything, and impose some overall structure. I use Writer's Café, which is flexible enough to be adapted for game design. I'm sure there are other tools available. Most important, I think, is to set milestones. That keeps you focussed, will allow you to measure progress, and should give you a sense of achievement when you reach them.
Another tiny tip. - Assemble a team - Communicate with your team on a regular basis (skype, live, email, etc.)
All the tips mentioned by other are good. If you create a team, the team members can support each others. Also, by having regular meetings, it encourage you to work on your project to show progress or reach your deadline.
Other people can be your greatest resource.
That's how I assembled my game studio. We are three partners working on the game for the last two years as a weekend hobby. We are seeing the light at the end of the tunnel now.
Have fun with it.
I use collabtive for my projects, and this allows me to setup tasks and milestones. When I work on a project with multiple people it also allows me to chat with them and assign them specific tasks. On top of the project management software (which is open source), I also use Subversion to help allow multiple people to work on the code at one time. Both of these programs run on a small linux server, and I have honestly not had one issue with this setup yet! :)
To manage a hobby game project you need a few things: motivation and the proper tools.
My answer is going to focus on using the proper tools, as if you're serious about making a game in your free time, you hopefully already have the motivation down. :)
I'd recommend using some form of version control for your game. Sites such as Github or Bitbucket provide hosting for git and mercurial (bitbucket support mercurial, not github). This is your first step to organizing your code and assets.
Next is being able to well define a backlog of tasks and features that need to get done. The best process for this is up to you, the developer. Some options include creating a Game Design Document (GDD), a Technical Design Document (TDD), and a Feature Backlog. A good sample for a GDD can be found here: http://www.runawaystudios.com/articles/chris_taylor_gdd.asp For the TDD, model it similarly to the GDD, but focus it more around the technical detail of programming. So what language you are going to use, framework, engine, and other technical specifics. Both the GDD and TDD will help you better understand the scope of the project and figure out what the list of to-do is. You can do this in the middle of the project if you've already started it, as it's always important to rescope and know what exactly your goals and features are.
Once you've got that done, you should be set to start developing. I've written a blog post on how to use github to effectively develop a game, including using their wiki features, issues for bug tracking, and just managing your project. You can find that here: Using Git and Github for Game Development
Defining soft deadline for your project may or may not help push you to stay on track. Every individual is different, and only you will know how to motivate yourself. Try out different techniques and see what works for you. Game development (and software development) typically take much longer than people initially estimate. So don't get discouraged and stick with it.
If you need more examples of GDDs and TDDs, I have mine in Google Doc's, and I wouldn't mind sharing them!