Designing a software architecture from scratch for a project with some level of complexity can be a challenging task. However, software architects have a number of tools at their disposal when designing an architecture.
The design issues facing a project may have already been solved by others, and rather than reinventing the wheel, those solutions can be leveraged in your architecture design. These architecture design principles and solutions, which are sometimes referred to as design concepts, are building blocks used to design a software architecture.