Monthly Archives: September 2024

How to Plan Effectively in the Face of Uncertainty

In a recent post, I explained why weโ€™re inherently bad at estimating, which is a major reason software projects often run late. But that doesnโ€™t mean we canโ€™t plan ahead for the longer term and manage expectations. Here are some techniques Iโ€™ve found effective for longer-term planning, even in the face of uncertainty:

๐—ฃ๐—ฟ๐—ผ๐˜ƒ๐—ถ๐—ฑ๐—ฒ ๐—ฅ๐—ฎ๐—ป๐—ด๐—ฒ๐—ฑ ๐—™๐—ผ๐—ฟ๐—ฒ๐—ฐ๐—ฎ๐˜€๐˜๐˜€ ๐ŸŒฆ, ๐—ก๐—ผ๐˜ ๐—™๐—ถ๐˜…๐—ฒ๐—ฑ ๐—˜๐˜€๐˜๐—ถ๐—บ๐—ฎ๐˜๐—ฒ๐˜€

Over any reasonable period of time, providing likely delivery dates as a range rather than a fixed date is better. Doing so embraces the inherent variability and help stakeholders better appreciate uncertainty. Giving a fixed date, even when you all know itโ€™s just an estimate, sets false expectations.

๐——๐—ผ๐—ปโ€™๐˜ ๐—ท๐˜‚๐˜€๐˜ ๐—ฒ๐˜€๐˜๐—ถ๐—บ๐—ฎ๐˜๐—ฒ ๐˜๐—ถ๐—บ๐—ฒ โฑ, ๐—ฒ๐˜€๐˜๐—ถ๐—บ๐—ฎ๐˜๐—ฒ ๐—ฐ๐—ผ๐—ป๐—ณ๐—ถ๐—ฑ๐—ฒ๐—ป๐—ฐ๐—ฒ ๐Ÿ’ช

Along with estimating how long a task might take, assess how confident you are in that estimate. Is it something weโ€™ve done before and know well? High confidence. Is it new, complex, or something weโ€™ve never tackled before? Medium or Low confidence.Multiply time by confidence. For example, a โ€œSmallโ€ task (e.g. 1-3 days) with “Low” confidence can be re-forecast as 1-7 days.

๐—Ÿ๐—ผ๐—ป๐—ด๐—ฒ๐—ฟ ๐—ง๐—ฒ๐—ฟ๐—บ ๐—ฃ๐—น๐—ฎ๐—ป๐—ป๐—ถ๐—ป๐—ด ๐—ฎ๐˜€ ๐—ฅ๐—ถ๐˜€๐—ธ ๐— ๐—ฎ๐—ป๐—ฎ๐—ด๐—ฒ๐—บ๐—ฒ๐—ป๐˜ ๐Ÿšจ

Effective planning isnโ€™t just about setting expectations on delivery, but managing risks over the project lifecycle. All those estimates which have come in as Large or with Medium-Low confidence? Those are your biggest risks and represent the most uncertainty. Identify risks early, identify potential mitigations, highlight those risks to stakeholders.

๐—”๐—ฐ๐—ฐ๐—ผ๐˜‚๐—ป๐˜ ๐—ณ๐—ผ๐—ฟ ๐—ข๐—ฝ๐˜๐—ถ๐—บ๐—ถ๐˜€๐—บ ๐—•๐—ถ๐—ฎ๐˜€ ๐ŸŒˆ

Whilst you canโ€™t completely mitigate against this, there are things you can do to be a bit less vulnerable. Involve the entire team in estimates, account for full end to end delivery (not just developer time) and factor in holidays, sickness and other factors that could impact delivery.Also, those ranged forecasts which provide a cumulative lowest range for all the work? Highly unlikely due to optimism bias! Itโ€™s probably best not to present the most optimistic forecast for this reason.

๐—ก๐—ผ ๐—ฆ๐—ถ๐—น๐˜ƒ๐—ฒ๐—ฟ ๐—•๐˜‚๐—น๐—น๐—ฒ๐˜, ๐—•๐˜‚๐˜ ๐—ฎ ๐—•๐—ฒ๐˜๐˜๐—ฒ๐—ฟ ๐—”๐—ฝ๐—ฝ๐—ฟ๐—ผ๐—ฎ๐—ฐ๐—ต

These practices wonโ€™t eliminate uncertainty or guarantee perfect outcomes – there’s no silver bullet in longer term planning. However, Iโ€™ve found they help organisations plan more realistically, reducing the stress and frustration that often come with missed deadlines, and enabling more effective, adaptable strategies in the face of uncertainty.

Deal with performance issues quickly

Addressing performance issues is something many shy away from, often putting it off or hoping it will go away.

The sooner you do so, the more likely there’ll be a positive outcome for very everyone.

The longer you wait, the more difficult it becomes.

If itโ€™s clear things aren’t working out then you need to act decisively. Don’t let it drag on.

Itโ€™s not only about the individual; it’s letting the whole team down and sets the standard for the level of performance considered acceptable.

Typing is not the bottleneck

โ€œ๐˜ž๐˜ฆ ๐˜ฏ๐˜ฆ๐˜ฆ๐˜ฅ ๐˜ฐ๐˜ถ๐˜ณ ๐˜ฅ๐˜ฆ๐˜ท๐˜ฆ๐˜ญ๐˜ฐ๐˜ฑ๐˜ฆ๐˜ณ๐˜ด ๐˜ต๐˜ฐ ๐˜ฃ๐˜ฆ ๐˜ฃ๐˜ถ๐˜ด๐˜บ ๐˜ค๐˜ฐ๐˜ฅ๐˜ช๐˜ฏ๐˜จโ€

I still regularly come across this mindset. Not with any ill-intention. Developers arenโ€™t cheap, so naturally you want them to be productive.

Whenever I do, Iโ€™m reminded of this meme (image created by Sebastian Hermida).

So this is a reminder that with software development…

๐—ง๐˜†๐—ฝ๐—ถ๐—ป๐—ด ๐—ถ๐˜€ ๐—ป๐—ผ๐˜ ๐˜๐—ต๐—ฒ ๐—ฏ๐—ผ๐˜๐˜๐—น๐—ฒ๐—ป๐—ฒ๐—ฐ๐—ธ ๐ŸตโŒจ

Development is about a lot more than just being heads down hammering out code – itโ€™s about problem-solving, understanding user needs, designing scalable solutions, and ensuring that whatโ€™s built is truly valuable. Rushing to code without seeing the bigger picture leads to missed requirements & re-work, technical debt and buggy software.

It actually slows things down more than it speeds them up ๐ŸŒ ๐Ÿšง

Developers should be involved in the full end-to-end delivery process, not just the coding bit:

๐Ÿ” Understanding what we need to deliver, and why

๐Ÿงช Quality Assurance (you mean you didnโ€™t test it before you threw it over the wall to QA?)

๐Ÿš€ Shipping! Getting things out to customers before picking up new work

๐Ÿค Collaborating with each other and other disciplines

Collaboration is a key one. When developers pair with each other or folks from other disciplines, it speeds up the process by reducing feedback loops and capturing issues early, and fosters shared understanding and ultimately, better solutions.

Having developers engaged more widely might seem counterintuitive if youโ€™re focused on keeping them โ€œbusyโ€ with coding, but itโ€™s the best way to get the most out of their time.

The estimation trap: why software projects miss deadlines

Why are so many software projects late? Estimation (and how we use it) is often at the heart of it.

Humans are naturally optimistic. We overestimate how well things will go and underestimate the time required. It’s a well documented phenomenon:

๐Ÿคžย Optimism Bias: Our tendency to believe things will go better than they likely will.

๐Ÿ—“๏ธ Planning Fallacy: Underestimating time required, even when past experience tells us otherwise.

Secondly, even with careful planning, we can only account for what we know. As well as software development being inherently complex, as time progresses, unexpected factors always emerge: shifting priorities, new challenges, team changes โ€“ the “known unknowns” as Donald Rumsfeld infamously put it.

๐—–๐—ฎ๐—ป ๐˜†๐—ผ๐˜‚ ๐—ด๐—ฒ๐˜ ๐—ฏ๐—ฒ๐˜๐˜๐—ฒ๐—ฟ ๐—ฎ๐˜ ๐—ฒ๐˜€๐˜๐—ถ๐—บ๐—ฎ๐˜๐—ถ๐—ป๐—ด?
Yes, we can avoid common pitfalls and improve our estimation practices. But they are still likely to be optimistic because of the reasons above.

“It always takes longer than you expect, even when you take into account Hofstadter’s Law.”

– Hofstadter’s Law


๐——๐—ผ๐—ฒ๐˜€ ๐—”๐—ด๐—ถ๐—น๐—ฒ ๐˜€๐—ผ๐—น๐˜ƒ๐—ฒ ๐˜๐—ต๐—ถ๐˜€?
Agile embraces uncertainty, such as breaking down work into the smallest possible pieces and delivering value early and often. But it doesnโ€™t eliminate the challenge of longer-term planning.


๐——๐—ผ๐—ปโ€™๐˜ ๐—ฏ๐—ผ๐˜๐—ต๐—ฒ๐—ฟ ๐—ฝ๐—น๐—ฎ๐—ป๐—ป๐—ถ๐—ป๐—ด ๐˜๐—ต๐—ฒ๐—ป?
Not at all. Organisations need to plan. Without long-term planning, you canโ€™t set realistic budgets, allocate resources & people, or prioritise efforts. The trick is learning how to plan effectively, even in the face of uncertainty.

In my next post, I’ll share how Iโ€™ve approached longer-term planning successfully.