On planning, part 3: forwards and backwards planning

This is the third post in my series about planning in the context of agile teams.

In this post, I will explore what I call forwards and backwards planning.

As I wrote previously, before I can begin planning in earnest, I need to determine my current position and my goal (what ‘done’ looks like), and it is helpful to reflect on the means I have at my disposal to reach my goal. For the purposes of this blog post, I will assume I have done this groundwork already.

Planning forwards and backwards

I typically use this kind of planning for projects with deadlines because it helps me think about the dependencies between tasks and ensures that there are no gaps at the beginning and end of my plan. (See my previous post on why this is important.)

Planning forwards and backwards consists of three steps: planning forwards, planning backwards, and matching up both ends of the plan. Whether I start with planning forwards or planning backwards does not really matter, but matching comes last, obviously.

Planning forwards

Planning forwards, I think about what I can do right now that will bring me closer to my goal. I list possible steps to take immediately, then steps I can take afterwards, and so on. I write the steps down as a simple list, in the order in which they need to be done, taking care not to leave any gaps. Each step must depend only on steps appearing before it in the list. If there are any intermediate tasks[1] to be done before the next step can be taken, these also go onto the list.

If steps can be done in parallel because they are independent of one another, I make a note of this to be considered later on, but I don't usually draw up a dependency graph or a Gantt chart or anything remotely complicated at this stage.

If progress depends on a 3rd party X to do or deliver something, this is also a step. The only difference is that I won't be the one doing it, and thus I will treat it as a black box and not iteratively refine it as I will do with other steps. However, I still need to think about the necessary preconditions for X to actually do their thing! Waiting for X while being unaware that X needs something from us before they can start is a failure mode I have seen time and time again. Because of this, whenever I add such a ‘3rd party step’ to my list, I try to put myself into their shoes and think about what I would need to get started in their place. If there is anything they might need from me (some artifact, information, or maybe just a trigger), I make sure to add it to my plan before the ‘3rd party step’.

If something needs to be done at a certain point in time, or cannot be done before a certain point in time, I note this when adding the step to my list. This is critical information because it constrains how I can move steps around later when trying to fit the plan to the timeline. All preceding steps must be finished before this step is due, and none of the following steps can start before this point in time.

Planning backwards

Planning backwards, I start with the desired end state and ask myself what needs to have happened so that we can say, ‘Yep, we are truly done now.’ This is the last step. And then I ask myself what needs to have happened so that we can take this last step. This becomes the next to last step. In this fashion I work backwards from the goal, always thinking about the preconditions that need to be true for the current step to be taken and the steps necessary to establish those preconditions, kind of like traveling backwards in time.

Often, there is more than one precondition or thing that has to be done first. This is OK. I write all of them down and pick one to continue the time travel, usually the one that seems most important to me. But I make sure to come back to the others later and deal with each of them. After all, they all are necessary to reach my goal.

After planning forwards and backwards for a while, possibly alternating between the two perspectives, each of the two plans will probably have developed several branches like this.

A diagram showing two directed acyclic graphs, one beginning at a node labeled ‘start’ and branching out via several hops to three leaf nodes at the right, one beginning with two nodes and ending with a single leaf node labeled ‘goal’ at the right. The graphs are not connected.
Planning forwards and backwards, two plans emerge, each with possibly multiple branches of linked action steps.

If the project is complex enough for the dependencies to be non-obvious, I might actually draw a diagram like this, otherwise, I'll make do with a linear list and keep the dependencies as notes (or sometimes in my head).

Matching up

At some point, the forwards plan and the backwards plan will begin to overlap, and it is time to match up the plans by connecting the branches of the forwards plan to the branches of the backwards plan. While doing this, several scenarios can appear:

A diagram showing the same graphs as above, and the merge actions performed on them. One leaf node of the left graph has been cut off; the task it represents has been moved out of the project because it does not contribute directly to the goal. The leaf nodes labelled ‘implement API’ (present in both graphs) have been merged. One non-leaf node on the left has been connected directly to a leaf node on the right because it is a direct prerequisite. One intermediate step has been drawn in between another leaf node on the left and a node on the right so they are now connected. All nodes are connected now.
The forwards plan and the backwards plan are now linked to form one plan. It contains all necessary steps and no unnecessary steps.

When I have matched up my forwards and backwards plans, I can be reasonably sure I have not forgotten anything important. At this point, I have a complete end to end plan, but I have not put it onto a timeline yet.

Timing it

For projects with deadlines, I put those down first, along with any other known time constraints such as the earliest possible start date or availability periods of critical resources. Then I try to distribute the steps of my plan around those ‘fixed points’ in a way that fits these and any other constraints (like ordering) I have identified during planning.

Once the initial timeline is complete, I do a plausibility check: is it realistic that we can do all this between now and the deadline? To do this, I need to estimate the duration of each task[3]. If at all possible, I do this together with the people who are going to do the work.

And now?

Unless our schedule is very relaxed, the first naïve attempt at laying out my plan on the timeline will probably not look so good. If it does, all the better. If it doesn't fit, I continue by examining the critical path … critically. More about this in my next post.


Footnotes

  1. I'm going to use ‘step’ and ‘task’ interchangeably. ↩︎

  2. Which might be right at the start ↩︎

  3. Note that estimating the duration is different from estimating effort. In practice, I have often found it easier to answer a question like, ‘Can we do this in a week?’, than a question like, ‘How many hours is this going to take?’ However, you have to take wait times into consideration. For example, if one of the steps is a review of a design document, you have to account for roundtrip times and the possibility of multiple rounds of review. ↩︎