In Scenarios, Stories, Use Cases: Through the Systems Development Life-Cycle, Ian F. Alexander and Neil Maiden mention periodic design refactoring:
A variant of the Incremental model appears to be the ‘Extreme Programing (XP)’ approach put forward in Beck (2000) in which integrity of the system architecture across all increments is maintained by periodic design ‘refactoring.’
While I’m not a fan of Big Design Up Front, I am a fan leveraging the following techniques up front to help reduce risk:
- System stories up front (where system stories include the ‘ilities and quality attributes, such as performance, security, reliability, … etc.)
- Architectural spikes (time-boxed exploration to do some focused, end-to-end tests around high-risk areas)
- Candidate architectures
- Tests for success
I think these lightweight techniques help avoid dead-ends and help you figure out what you know, don’t know, and need to know next.