Original Post
Here's something that's helped me overcome Programmer's Block in the past. I thought I'd share with you. Sometimes, especially when dealing with a large hobbyyist project, (and I'm sure proffesional projects as well) you get stuck trying to implement a feature, or your program/code-base is in a state of funtionality but not completeness - and you're unsure of what to implement next, or perhaps even how to go about implementing it. Then you hit stasis! For the past couple months I've been working on a pretty substantial project, with its own scripting engine, file-format for level storage, graphics routines, the whole pizazz. I spent a lot of time thinking about how to implement things, in an effor to ensure as much reusability as possible. Even so, there are significant design pitfalls, and things that I would like to change if I rewrite my codebase. Now, with this project, I recently found myself spending more time scanning the code, and chromeplating what I already had, instead of focusing on improving the functionality of the codebase, and the game being made with it. Because the intended feature list is pretty large, it can be very difficult to determine what to do next, especially when there's a feature you're looking to implement, right now!. Usually when I hit this state with a project, one of two things happens: I Give Up Obviously not ideal, but it happens. External time constraints / social lives prevent projects from being completed. Hack a Feature In This moves the project ahead, and gets more (apparent) functionality into your codebase. The only problem now, is mantinaing the code. This often leads impossible to decipher spaghetti code. So what's the solution? It's something my mom always told me to do, but I never listened, and now my chance to benefit from her wisdom is gone. But I still have this little peice of information, that I carry around in my back pocket. MAKE A LIST! Now, whether or not you have a design document, making a list can still be an excellent way to relieve coder's block. Say you're writing a game, and you need it improve it by adding a significant feature - say, gameplay! Write it down! My List - Add Gameplay Now, Itemize what has to be done to add gameplay! My List - Add Gameplay - Add structure to store global gameplay variables - Add Player Interaction - Add Enemies - Add Shooting Now, itemize the following, until you've got it down to an easily digested set of small, individual tasks. My List - Add Gameplay - Add structure to store global gameplay variables - Add Player Interaction - Get Input (Handled By Engine, Code Exists!) - Use Input to modify player states - create structure to store player states - Add Enemies - Create Enemy Object(s) - define enemy behaviour ... - Create Enemy Managing Functions (e.g. STL list) - Add Shooting And etc. This gives you now a list of small, easily managable tasks, instead of the big doom-filled scary task of "Adding Gameplay" This has helped me so many times in the past to get on making software. I hope it helps you.