I think this depends on your project's motivation, and how much experience you have. Using myself as an example:
I never start out building a game, I start out building a prototype. A proof of concept. I think about the least-feasible seeming aspect of a game and I make sure that goes in the prototype. When I'm hit with a challenge, I always go 'challenge accepted', and I can spend days pondering over how to achieve something. Once I feel I've proven the concept, I will either expand on what I've got, or start a fresh build, depending on whether I've made any significant mistakes along the way.
As a programmer, I spend half of my time making tools that do half of the work for me. I've started building my own dungeon generator, because I'm terrible at level editing (or rather I don't have the patience for it). This time-optimisation isn't specific to programming though, I know some very skilled artists who have these incredible nuggets of information about the tools they use that saves them a lot of time. Give yourself time to do this.
Maintenance. Whenever any part of the game feels like gruelling work, consider why, and see if there's a better way, cause that's generally a sign that it's a bad system. Sooner or later you will have to redo some of your work to fit a better design. It's a step back in order to be more productive in future.
For me, the biggest killer of a project is feature creep, at least, the feature creep in your head. Set yourself a todo list. Cross out whatever isn't necessary and focus on what is. Whatever you build, build it in a way that you can test it for weaknesses and be able to tinker with it. When I work on an enemy's behaviour, I build a special map just for that enemy. That said, you also need to look after your enthusiasm. I give myself work similar to how I eat my meals: Do you save best till last, or have it first, or mix it in with the rest? This is personal preference.
Log the changes you make, in whatever way is most convenient. I use trello. This is important for 3 reasons (probably more).
- A log is a way to trace back any and all mistakes you make through development. You make mistakes because you think a certain way, and it helps to remind yourself why you thought that way, so you don't fool for it again.
- It gives you a target. Every week, count the number of changes you made, or the number of days you worked on the project. Keep an eye on that number. Whenever it goes down, work out why. Whenever it goes up, work out why. Life puts subtle barriers in your way and you'll only identify them if you're paying attention.
- When you realise you've spent years on something, being able to read through 1000s of lines of logs makes it feel less depressing and more impressive, and you can prove to anyone that you've worked hard.