A developer's knowledge of a computing system's requirements is necessarily imperfect because organizations change. Many requirements lie in the future and are unknowable at the time the system is designed and built. To avoid burdensome maintenance costs developers must therefore rely on a system's ability to change gracefully-its flexibility. Flexible Software Design: Systems Development for Changing Requirements demonstrates the design principles...