My programming habbits are quite similar, with long periods of doing seemingly nothing, thinking about the game systems and how they should interact. However, no matter how enjoyable this process might be, finishing and releasing something is also very important.
My first relatively successful game was
Curse of War - a rather simple project actually, but I was lucky to get some attention from the Linux community, and some nice people joined to help me make the game better. I've got a good (and maybe surprizing) lesson that even a simple project like that takes quite a lot of extra work after the main programming work is done.
Let me share my thoughts on how to speed up super-projects (if it is possible at all
):
1)
Start with the most important core game mechanics. They must be fun to play, and they should work really really well. Everything what makes the "meat" of the game (e.g. Combat(!), Skills?, Generated contents) must be there as soon as possible. (This is probably my main criticism to URR: while it is an admirable game/art project, and I agree with the author on many things, it is still not clear to me, will it eventually become a game or not; I wish he succeedes).
2)
The engine should not be more complex than is necessary to implement those core features. Of course, it must be flexible enough to permit adding new functionality, but if it is an order of magnitude more complex than the game, I should switch to programming the game itself. (And, btw, game engines as separate projects are no good by themselves, unless they have a dedicated group of people who are using them for making actual games)
3)
Try to find game mechanics that can be easily and efficiently implemented! Probably, it does not sound like very fun, but it may actually turn out to be a great improvement to your game. On the other hand, struggling to implement some dream design feature may become a reason to detest and eventually abandon the project.
4A) The game contents should not hamper the way the game is implemented. I try to generalize the game, and factor out specific details. It takes time to do it right, but at least you would not get stuck at a later stage with some unmaintainnable structure.
4B) On the other hand, avoid unnecessary layers of abstraction. All game components must serve some purpose. OO code tends to look funny, with infamous god classes, and everything is an object kind of thing. As John Carmack said: "Sometimes, the elegant implementation is just a function. Not a method. Not a class. Not a framework. Just a function."
5) Essentially, I think, it is important to make the game grow steadily. When all components are developed simultaneously. Then, you have many things to work on, so you are not getting bored (I remember Dwarf Fortress developers were saying something like that), and you find bad design decisions early on, when you still can change them.
There is nothing new, but I think, it still may be interesting to those people who want to program something big.