From the course: .NET Microservices for Azure Developers

The importance of software architecture - Azure Tutorial

From the course: .NET Microservices for Azure Developers

The importance of software architecture

- [Instructor] Before we discuss microservices, let me tell you that there are just one type of software architecture. It may not be suitable for every project. The architecture of a system significantly influences its quality and longevity as its serves as a core structure of the software. While there's no universally accepted definition, we can take the one Bass, Clements, and Kazman described in their book, "Software Architecture in Practice," which states the following. "The software architecture of a program or computing system is the structure or structures of the system, which comprise software elements, the externally visible properties of those elements and the relationships among them." All software, regardless of its type and size, has an architecture. Therefore, if you don't explicitly design it, you'll get one anyway and probably won't like what you get. We take for granted that software architecture design is only one part of a sequence of activities, and that it must be completed after obtaining an understanding the complete systems requirements just before development and implementation. The truth is that software architecture starts during the requirements analysis, gets greater emphasis during the design and continues throughout the implementation. We even keep polishing it during the tests and later during the deployment. So as you can see, software architecture is an activity present throughout the entire lifecycle of software. Software architecture aims to ensure certain minimum quality levels based on the actual requirements of the system, which are derived from business objectives. The term quality attributes refers to the traits of the products used by decision makers to judge their quality. Some of these attributes are performance modifiability, usability, extensibility, scalability, security, resilience, stability, et cetera. Software architecture can't have all quality attributes since many of them contradict each other. Therefore, you must identify which attributes have the highest priority in your system and work hard to achieve that without worrying about the rest. What you do have to worry about is technical debt. It refers to decisions that seem convenient and timely at the time, but on the other hand, cause increase in the complexity and cost of the software in the long term. Just as quality attributes represent the positive aspects we aim for in the architecture, technical debt represents the potential pitfalls we must actively work to avoid. This term was coined by Ward Cunningham, one of the signers of the Agile Manifesto in 1992. There could be different reasons that can result in this degradation of software quality, but generally speaking, it's a result of implementing features in a system where its architecture is not fully known or where the architecture is deficient from the beginning. I invite you to at all times be aware of the technical decisions you make in your software projects.

Contents