The pattern language of software architecture