Software Architecture

Anything is possible without architecture! The sky's the limit!

You can build a bridge out of spaghetti! Use ramen noodles instead of rebar! Pour the foundation with asphalt instead of concrete! Hang sheet rock before installing the sprinkler system! Order 400 yards of 10" copper pipe for sewage!

These examples may seem silly and unrealistic, but you have not seen the shit that I have seen.

The purpose of architecture is to save time, money and sanity by constraining a particular solution space to fit the needs of a project's stakeholders. A family wants a 3 bedroom craftsman home with a fireplace in a residential neighborhood. An architect takes those stakeholder concerns and codifies them as constraints. If fireplaces are not allowed on new homes in the area, it is the architect's duty to communicate those risks to the stakeholder. Architects work directly with stakeholders to interpret and clarify their desires and translate those into engineering requirements.

Whether you're building a bridge or a house or a microservice or a software platform, there are a core set of principles that translate across disciplines and industries. Software architects concern themselves largely with diagrams, components, connectors and modeling languages but those are all just artifacts of the rigorous application of principled contextual domain knowledge; a practice common to all forms of architecture.

Some aspects of software architecture are standardized by the IEEE in:

These standards use architecture diagrams to communicate relationships between architectural concepts. Definitely worth a read if you can find a copy. The tools we use as architects may not always be the same and the decisions we make may not always be in agreement, but standards like these provide us a shared language to communicate effectively.

The books below provide excellent foundational knowledge in alignment with these standards and I'd recommend anyone interested in software architecture study at least one of them.

Software Architecture: Foundations, Theory, and Practice

Software architecture is foundational to the development of large, practical software-intensive applications. This text covers all facets of software architecture and how it serves as the intellectual centerpiece of software development and evolution. Critically, this text focuses on supporting creation of real implemented systems. Hence the text details not only modeling techniques, but design, implementation, deployment, and system adaptation -- as well as a host of other topics -- putting the elements in context and comparing and contrasting them with one another. Rather than focusing on one method, notation, tool, or process, this text/reference widely surveys software architecture techniques, enabling the instructor and practitioner to choose the right tool for the job at hand. Software Architecture is intended for upper-division undergraduate and graduate courses in software architecture, software design, component-based software engineering, and distributed systems

Just Enough Software Architecture: A Risk-Driven Approach

This is a practical guide for software developers, and different than other software architecture books. It teaches risk-driven architecting. There is no need for meticulous designs when risks are small, nor any excuse for sloppy designs when risks threaten your success. This book describes a way to do just enough architecture. It avoids the one-size-fits-all process tar pit with advice on how to tune your design effort based on the risks you face.

Software Systems Architecture: Working With Stakeholders Using Viewpoints and Perspectives

A practitioner-oriented guide to designing and implementing effective architectures for information systems. It is both a readily accessible introduction to software architecture and an invaluable handbook of well-established best practices. It shows why the role of the architect is central to any successful information-systems development project, and, by presenting a set of architectural viewpoints and perspectives, provides specific direction for improving your own and your organization's approach to software systems architecture.

Designing Software Architectures: A Practical Approach

This book introduces a practical methodology for architecture design that any professional software engineer can use, provides structured methods supported by reusable chunks of design knowledge, and includes rich case studies that demonstrate how to use the methods. Using realistic examples, you’ll master the powerful new version of the proven Attribute-Driven Design (ADD) 3.0 method and will learn how to use it to address key drivers, including quality attributes, such as modifiability, usability, and availability, along with functional requirements and architectural concerns.

97 Things Every Software Architect Should Know: Collective Wisdom from the Experts

In this truly unique technical book, today's leading software architects present valuable principles on key development issues that go way beyond technology. More than four dozen architects -- including Neal Ford, Michael Nygard, and Bill de hOra -- offer advice for communicating with stakeholders, eliminating complexity, empowering developers, and many more practical lessons they've learned from years of experience.