Knowledge in software architecture and software design