On making progress on gnarly projects

Recently, I've had several projects that had very little structure to them, and seemed to drag on forever. It's frustrating for everyone when a story/ticket/etc has been open for days and days, or even weeks and weeks.

For the product owner, it gives them very little visibility into whats going on, and it makes predictability difficult. Product owners and folks in business leadership usually care hugely about predictability. In fact, that is often one of their biggest concerns.

For the developer, it's demoralizing. This story was only 2 points, it was supposed to be easy, and here we are on week 2? What's wrong?

Here are a few strategies I use to turn this problem around:

  1. Define exploration vs building Often times, when the story drags on forever, it's because work we thought was well defined, wasn't. When this happens, I recommend breaking out the spike or exploration work, separate from the implementing. Make the original story an exploration or spike (possibly with no points, depending on how your team thinks about story points), and add a note that you will write up follow up stories once you figure out what they are.

  2. Break out stories As you figure out the different pieces of the work during the spike, add in stories. Flesh them out fully, because your future self won't remember the context of your three word reminder. These stories should be a much smaller piece of the original, too big story.

  3. Break down tasks smaller Once you've added your smaller stories, and you're ready to stop exploring (for now) and start building, break down the steps of your task. By now, having explored, you should have a pretty darn good idea how to build this, so you can get pretty fine grained. Try to make each step something you can accomplish in less than half a day, and ideally more like 2 hours. For my brain, nested lists inside nested lists helps me get to the right granularity.

  4. Find meaningful chunks of work and notice that they're done One of the most demoralizing things about the endless story is that you have no sign of progress and your brain doesn't get the “I finished a thing, hooray!” dopamine hit. Many of us need that, and need an extra dose of it, to keep going. Make sure to stop and notice what got done. Check the box, click done, just breath it in. Notice your progress.

  5. Merge often To the extent possible, aim to commit to main/prod daily, once you get to building. (After you throw away your spike!) This helps with feeling a meaningful sense of progress and accomplishment, and it keeps you and your teammates in sync. It might, sometimes, need feature flags, and that's a worthwhile investment. Smaller change sets are easier to review, and easier to examine if something breaks.

  6. Use an exploration doc for exploring I think more details on this might be an upcoming topic, because I really love my exploration doc format. I write down the question I'm exploring and how I plan to explore it. I take quick notes as I observe things that are interesting. Then I write down the next exploratory question, number it, and repeat, in a running google doc.

I would love feedback on my newsletter, even just a thumbs up, thumbs down. Is this interesting? Would you like to read more about a specific topic? Let me know what you're thinking. You can find me @ctaymor@hachyderm.io or reply to the email.