The ending is the hardest part

This is how I've felt about every project I've ever done.

Starting

Starting a project is fun. There's infinite possibility. There's no pressure. You haven't messed it all up yet.

Middle

The middle of a project is pretty good, too. The boilerplate stuff is done. There are still some hard little nuggets of problems to work on and find creative solutions to. Some bits are starting to get polished, which is fun. There's no pressure to finish yet.

End

The end is a nightmare. The pressure (internal or external) to ship it increases. There's still a lot to do, and a lot of tiny odds and ends, which are really hard to focus on. There are often still some big questions or pieces of work, that may or may not need to be fixed before it ships; but there's no way to be sure.

The reckoning is coming: one day this thing will ship; and it will be a reflection of everything you've done. It's the opportunity for people to find out that it's not very good; and you, as the developer, have no excuses left. At the start and the middle you can fix stuff "later." At the end, if it's not done, it's not done. And maybe you're done?

Daily productivity crawls too. Going from 0 lines of code to 1000 is a blaze of new functionality and apparent productivity. Who, apart from you, knows what changes when you go from 5000 -> 6000 lines of code?

If the start is the infinite possibility of things you can do, the end is an infinite list of things you didn't do.

Just getting "done" is hard too. The Trello board becomes overwhelming with tiny bugs and huge issues and things you have no intention of fixing but are still there for who knows why? There's so much to do, and so little time. How do you know what to work on? Everything in isolation seems insignificant compared to the full list of other things, so as soon as you try and work on one, everything else seems more important.

How do you even figure out what the most important thing is to work on?

Towards the end - every new bud of an idea on something that's not your main project is a tempting distraction. An idea someone has for something. An idea you have for something. A bug or support request someone has in an open source project of yours, or someone else's. These are all opportunities to show yourself, and everyone else, that you aren't a total screwup. What better way to deal with the slow productivity you're making on project X, when you can make those amazing gains on a, b and c? It's a fallacy of course. But it's a real feeling.

So how do we make it better?

  • Communicate, communicate... Being really clear with coworkers that your main project right now is X, and it's in a really tough phase. And to politely ask that they avoid distracting you with new temptations that aren't critical, and perhaps more importantly, to encourage them to try and guide you away from starting new things that will distract you.

  • ...and then communicate some more. Having open and honest dialog with colleagues about the state of the project; to be really clear with them about what needs to be done and what doesn't. And to get their assurances that even though the productivity towards the end feels slow, they understand and aren't going to be standing there wondering what the heck you are doing.

  • Break it down. Figuring out how to keep on top of that Trello board/issue list/whatever, so that it doesn't become a distracting list of things that are never going to get done. How can you break down big tasks, or group little bug fixes which are too small, in order to keep the list size down?

  • Recognise that it won't all be done in a day. One of my pervasive flaws is looking at the list of things, and thinking "Argghh why isn't this done yet, I need to get this all done today." Which is, of course, totally ridiculous thinking that leads to panic mode. To overcome this challenge, I'm working to get better at actually sitting down and planning out the list of things to do over the course of the iteration so that incremental progress on a daily basis feels like good progress.

And you?

After sharing this with a few other developers I know, it quickly became clear that I'm not the only one who fights with these feelings on software projects. This was a relief to hear, though sadly nobody's handed me a magic bullet yet either. If you have stories, thoughts, or ideas you'd like to share, let me know on twitter -- I'd love to hear them.

You might also enjoy reading: