Selecting and designing the right software architecture is a critical step in product development. The wrong approach can lead to big problems such as the inability to add features, maintain the code, ...