Software architectures are designed to meet the needs of the applications t
hat use them. With conventional architectures this is done by predicting th
e average needs of the majority of the applications they support. In contra
st, a compliant software architecture can accommodate the needs of a partic
ular application. As the application evolves, its requirements change and t
he supporting software components, if compliant, change accordingly to meet
these new requirements.