Planning software projects is hard. There are myriad complexities in the business process to consider, rules that need to be enforced, stakeholders to keep happy, and milestones to reach. This is not to mention challenges with the technical, financial and time constraints that every project comes with. We as an industry have too many examples of projects that have failed, and not nearly enough that succeeded.
In sticking with an agile philosophy, we try to plan our projects diligently, but not too much at the beginning. Our primary goal in planning is to know what the path to success looks like, without analyzing every brick before we lay the first one. Here is how we create a project plan that embody our development philosophies.
STEP 1 - UNDERSTAND
The first step to building a great system is to gain an understanding of what the software actually needs to do. There are typically hundreds of tasks that even a small system needs to track. Getting all this information from stakeholders can be difficult, because its often hard for people to recall all the intricacies and edge cases of every task they deal with - its just too much to think about about once.
The key to pulling all this information out is to walk through every phase of business with your customer. Grab the nearest vase, pen, or whatever else is close at hand, and pretend that it is going through the process, step by step. Everything said out loud is written down on a sticky note (bring lots of sticky notes!) and put it on the wall. Everything. It doesn’t matter how small of a detail something seems, or if it might be a duplicate of another note, just write it down and put it up.
The power of “why” is key to getting all the information out of your customers head. We find ourselves asking “why” constantly (we call this “popping the why stack”). Its amazing how often we all do things without thinking about the reasons for doing them. Forcing the customer to think about this for each step is invaluable.
When it was all said and done, our team spent an entire day on this step alone. The walls were literally covered in sticky notes, and everyone was exhausted. After looking over the notes, our client made the comment that he didn’t realize how many details are involved in running his business.
STEP 2 - ORGANIZE
Once all the thoughts are out and on paper, its time to start organizing them into related groups. The groups will probably vary from project to project, but as they are put together, the relationships start to become apparent on their own. For our project, each group represented the actions that happen to our fictitious item during each phase of the process.
As the groups form and evolve, each note gets picked up and put down several times. Having a piece of paper that can be moved, scribbled on or tossed out makes this process flow really well. We’ve tried to record these ideas in a lot of way, some electronic and some analog, but sticky notes are what we keep coming back too.
The final part of organizing notes is to begin filtering. Since we wrote down literally everything said in step one, we found ourselves with quite a few duplicate concepts. We also began combining and clarifying our notes, so that looking at each group, every member of the team had a good understanding of all the notes.
STEP 3 - PRIORITIZE
At this point, we had laid out the system in front of us. Next is to turn the groups of ideas into a set of tasks that that system needs to incorporate. We pulled down the original notes and replaced them with notes of a more task-centered nature.
Working with a limited amount of time, and a limited budget, we had to also think about prioritizing some tasks over others. We worked with our client to set priority, and placed each card into the horizontal row for its priority, with the following understanding (the photo at the top of this post is a partial representation of this):
Row 1: We cannot launch unless all of these are finished Row 2: We’d like to get as many of these done as we can Row 3+: Nice to have, but probably won’t happen right now
Once this was finalized, we put all the notes onto our Kanban board, labeled according to priority. Having defined our system this way has made it really easy for us to determine how to approach building the system. Its really easy to identify the risky tasks we need to conquer upfront, and we have a steady flow of items to work on without having to think about which should be next.
Have you tried something similar to this?