Flexible systems are needed because we cannot predict the future. Because organizations change over time, complete knowledge of a system’s requirements, in the traditional sense, is necessarily imperfect. Some requirements lie in the future, and they are unknowable at the time the software system is designed or being built. The traditional objective of system design is functional accuracy, but when designers do not look beyond the current requirements, the result is often inflexible software. Acceptance of the reality of imperfect knowledge of requirements adds a new and fundamental objective — adaptability to functional change. That adaptability is essential to good system design.