Home » How can I effectively manage a hobby game project?

How can I effectively manage a hobby game project?


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.

Planning your project

  • 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.

Working on your project

  • 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.

Maintaining your work/life balance

  • 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.

Become a part of the game development community

  • 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 tigsource.com or 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:

    • Jay Pavlina (Super Mario Crossover)
    • Markus Persson (Minecraft)
    • Petri Purho (Crayon Physics Deluxe)
    • Jonathan Blow (Braid)
    • 2D Boy (World of Goo)
    • Phil Fish (Fez)
    • Wolfire Games (Overgrowth)
    • Jamie Fristrom (Schizoid)
    • Terry Cavanagh (VVVVVV)
    • Tale of Tales (The Path)
    • Jason Rohrer (Passage)
  • 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.

Further Reading

  • Read this blog post It covers some points that are already listed here. As a quick summary:

    1. Code something you like
    2. Surround yourself with inspiration
    3. Keep a log of what you did each day.
    4. Do some shiny
    5. Hard lessons in money
    6. Stay aware how high the bar is (know your competition)
    7. Take short breaks.
  • The 5,1,1 Routine and why it’s important to have a system when approaching development.

Related Solutions

How to delete a non-empty directory in Terminal?

Use the below command : rm -rf lampp It deletes all files and folders contained in the lampp directory. In case user doesn't have the permission to delete the folder: Add sudo at the beginning of the command : sudo rm -rf folderName Otherwise, without sudo you...

mysql: Show GRANTs for all users

Nothing built-in. You have two options though: Use common_schema's sql_show_grants view. For example, you can query: SELECT sql_grants FROM common_schema.sql_show_grants; Or you can query for particular users, for example: SELECT sql_grants FROM...

Configurable values to MDB annotations

You can externalise the annotations into the ejb-jar.xml that you deploy in the META-INF of your jar file as follows: <?xml version="1.0" encoding="UTF-8"?> <ejb-jar version="3.0"> <enterprise-beans> <message-driven>...

How do I select which Apache MPM to use?

There are a number of MPM modules (Multi-Processing Modules), but by far the most widely used (at least on *nix platforms) are the three main ones: prefork, worker, and event. Essentially, they represent the evolution of the Apache web server, and the different...

Using var self = this or .bind(this)? [closed]

Things that would favor var self = this; bind isn't supported in IE8 and Safari5. If you aim to build a library or code that supports legacy browsers, then var self = this would be more cross-browser friendly. Sometimes, callbacks are bound to a certain context...

What is the difference between SSL vs SSH? Which is more secure?

SSL and SSH both provide the cryptographic elements to build a tunnel for confidential data transport with checked integrity. For that part, they use similar techniques, and may suffer from the same kind of attacks, so they should provide similar security (i.e....

How can I stop applications and services from running?

First Things First You may have some misconceptions about how Android works and what's really happening when a service is running or an app is in the background. See also: Do I really need to install a task manager? Most apps (e.g., ones you launch manually)...

How do I reset a lost administrative password?

By default the first user's account is an administrative account, so if the UI is prompting you for a password it's probably that person's user password. If the user doesn't remember their password you need to reset it. To do this you need to boot into recovery...

How can I use environment variables in Nginx.conf

From the official Nginx docker file: Using environment variables in nginx configuration: Out-of-the-box, Nginx doesn't support using environment variables inside most configuration blocks. But envsubst may be used as a workaround if you need to generate your...

Difference between .bashrc and .bash_profile

Traditionally, when you log into a Unix system, the system would start one program for you. That program is a shell, i.e., a program designed to start other programs. It's a command line shell: you start another program by typing its name. The default shell, a...

Custom query with Castle ActiveRecord

In this case what you want is HqlBasedQuery. Your query will be a projection, so what you'll get back will be an ArrayList of tuples containing the results (the content of each element of the ArrayList will depend on the query, but for more than one value will...

What is the “You have new mail” message in Linux/UNIX?

Where is this mail? It's likely to be in the spool file: /var/mail/$USER or /var/spool/mail/$USER are the most common locations on Linux and BSD. (Other locations are possible – check if $MAIL is set – but by default, the system only informs you about...

How can I find the implementations of Linux kernel system calls?

System calls aren't handled like regular function calls. It takes special code to make the transition from user space to kernel space, basically a bit of inline assembly code injected into your program at the call site. The kernel side code that "catches" the...

Is a composite index also good for queries on the first field?

It certainly is. We discussed that in great detail under this related question: Working of indexes in PostgreSQL Space is allocated in multiples of MAXALIGN, which is typically 8 bytes on a 64-bit OS or (much less common) 4 bytes on a 32-bit OS. If you are not...