A development process for building adaptive software architectures