Designing software is a bit like fighting a war. There are battles on many fronts, and as the ‘general’ of your army, it’s important to direct your ‘troops’ where they will have the greatest impact, without leaving a gaping hole in your defences through which the enemy can pass.
In software design, the threats are plentiful: bad management decisions, poorly defined requirements, bad technology choices, scope creep, regulatory change, personnel change, budget cuts, overpromising sales people, lack of time, lack of skill and so on…
As the ‘general’ you know that you cannoy possibly fight every threat all at the same time – you’d end up with many ‘overs’ – over-stretched, over-stressed and over-whelmed!
What’s important is to pick your battles – look for the areas in which small changes can deflect immediate threats. Look for the ‘low hanging fruit’ – in other words, the things that you can influence now.
If your project doesn’t have clear requirements, work with the business to get some. If your timescales appear unrealistic, take a step back and re-scope. If your sales people over-promise, take the time to educate them as to what is and what isn’t achievable.
There will always be battles that you cannot really win – the much wider-ranging changes, such as changing regulation, competitors, the economy – and you need to accept that you can only roll with the punches, come what may.
By picking the battles that you can win, your development project will be better prepared to endure and possibly better placed to actually turn these threats into opportunities.