Software architecture refers to how an application or system is organized. It includes how each system component relates and communicates with each other. Software designers and developers use design patterns to create reusable solutions to computing problems.