Flexibility has been recognized as a desirable quality of software since the earliest days of software engineering. Classic and contemporary software design literature suggest that particular implementations are more flexible than others but stop short of suggesting objective criteria for quantifying such claims. To establish intuitions on flexibility in precise terms, we introduce the notion of evolution complexity and demonstrate how evolution cost metrics can be used to measure and compare the flexibility of programming paradigms, architectural styles, and design patterns. We also demonstrate how evolution complexity can be used to choose the most flexible design policy. We conclude with experimental results corroborating our predictions.