What Will You Learn?

  • What is software architecture?
  • Why is software architecture important?
  • What are the use cases for software architecture?
  • What are the less suitable use cases for software architecture?
  • What are the most common types of diagrams?
  • What are architectural constraints?
  • What are the most common types of technology architecture?
  • Where can I learn more about software architecture?

The Basics

Let’s review technology-oriented architectures with a focus on software architecture.

An introduction to software architecture often begins with a flawed application. After fighting with tools and languages, software developers eventually learn that neglecting architecture leads to scalability issues and poor user experiences.

Intentional software architecture implementation helps you plan for the future, but don’t outrun your headlights design for the present while preparing for change.

What is Software Architecture?

Software architecture is the process of designing and planning a software solution.

Why is Software Architecture Important?

Software architecture helps you understand how a software system behaves and interacts with other systems. It saves time and money by reducing the number of bugs and software development hours.

Primary Use Cases

Frequently, people need help understanding why and how to use software architecture. Let’s start with use cases to help convey its value.

  • Optimizing software cost.
  • Simplifying off-the-shelf product usage
  • Increasing the longevity of software
  • Maximizing the quality and maintainability of software
  • Minimizing code duplication

Less Suitable Use Cases

  • A silver bullet
  • A replacement for high-quality and disciplined software development
  • Small or throwaway projects like prototypes or proof of concepts
  • Projects with unclear requirements

Diagrams

No matter which architecture you’re modeling, diagrams are vital. When building diagrams, we model the real world. The closer diagrams match reality, the better.

Diagrams facilitate discussions by focusing our topics with visual precision. Discussions often churn without pictures conveying what an architect or software developer means when describing a system or process.

Fun Fact❗

Some people, like me, can’t create images with their mind’s eye. A little-known condition called Aphantasia will hobble your discussions if you assume everyone is visualizing identically.

UML

When learning software architecture, it is fundamental to learn UML. The Unified Modeling Language helps convey architectural designs with a neutral language that can keep design discussions out of the weeds. Use it to reduce discussion churn and increase clarity.

UML Example 🔎

classDiagram class Animal { +name: string +makeSound(): void } class Dog { +breed: string +bark(): void } class Cat { +color: string +meow(): void } Animal <|-- Dog Animal <|-- Cat

C4 Model

The C4 Model is a diagram framework that helps you communicate software architecture. It was created in 2011 by Simon Brown, who wrote Software Architecture for Developers.

The C4 Model intends to simplify diagrams and efficiently facilitate conversations between software developers and architects.

C4 Example 🔎

C4Context title System Context diagram for Internet Banking System Enterprise_Boundary(b0, "BankBoundary0") { Person(customerA, "Banking Customer A", "A customer of the bank, with personal bank accounts.") System(InternetBankingSystem, "Internet Banking System", "Allows customers to view information about their bank accounts, and make payments.") Enterprise_Boundary(b1, "BankBoundary1") { SystemDb_Ext(BankingSystem, "Banking System", "Stores all of the core banking information about customers, accounts, transactions, etc.") System_Ext(EmailSystem, "E-mail system", "The internal Microsoft Exchange e-mail system.") } Boundary(b2, "External System") { Person(customerA, "Banking Customer A", "A customer of the bank, with personal bank accounts.") } } BiRel(customerA, InternetBankingSystem, "Uses") BiRel(InternetBankingSystem, BankingSystem, "Uses") Rel(InternetBankingSystem, EmailSystem, "Sends e-mails", "SMTP") Rel(EmailSystem, customerA, "Initiates e-mails to") UpdateElementStyle(customerA, $offsetX="10", $offsetY="10") UpdateLayoutConfig($c4ShapeInRow="2", $c4BoundaryInRow="1")

Architectural Constraints

Architectural constraints apply to all architectural disciplines. Immediately defining constraints limits choices and narrows the path to a solution.

Our lives are constrained. We can’t sleep at work, drive while watching Netflix, or buy a yacht unless we’re a billionaire like Jeff Bezos.

Determining a budget for a project is a great place to start setting constraints. Time to market, risk tolerance, and system resources are typical and immediate constraints to consider.

Increase your solution delivery success rate by interviewing your stakeholders early and often.

Constraint Example 🔎

Scalability is a common constraint. If you’re building a system serving millions of users, you must consider vertical and horizontal scaling, databases, caching, statelessness, elasticity, and many other topics.

Constraints are good, so I recommend embracing them. They’ll help you focus on core problems and avoid analysis paralysis.

Types Of Technology Architecture

Technology architecture is a broad term that encompasses many disciplines. Let’s review the most common types of technology architecture.

Software Architecture

When you create software architecture, planning is essential to ensure your application can reliably service customers. This means designing software to scale from one to many servers on demand.

Software Architecture History 🏛️

Software developers compared civil architecture and software architecture in the late 1960s. Software architecture wasn’t taken very seriously until 1996 when Software Architecture: Perspectives on an Emerging Discipline was released.

Software architecture has become increasingly important. For companies that use microservices, it is essential to have a secure and well-defined architectural foundation. This involves accounting for external dependencies, realizing business capabilities, and ensuring high-quality solutions while providing value.

Solution Architecture

Solution Architecture includes business architecture, information architecture, application architecture, and technology architecture operating at a tactical level and focusing on a specific business problem scope and span.

Solution Architecture History 🏛️

Solution architecture has been around for as long as software. John von Neumann architected most of the computers we use today way back in 1946. We are still using the ENVAC (Electronic Discrete Variable Automatic Computer) architecture he contributed to in virtually every computer.

Solution Architecture Frameworks

Domain-Driven Design

Domain-Driven Design (DDD) is a software development approach that focuses on the domain of problems. Solution architects use it to model complex environments and create software that reflects the domain.

Enterprise Architecture

Enterprise architecture helps organizations align their business and technology strategies. It’s a holistic approach to managing a complex organization’s IT infrastructure. It enables you to design, build, and manage complex infrastructure. As previously mentioned, solution architecture operates at the tactical level, while enterprise architecture operates at the strategic level.

Enterprise Architecture History 🏛️

In 1989, John A. Zachman mentioned enterprise architecture for the first time in a publication. John A. Zachman, who worked for IBM, was an early enterprise architecture pioneer who developed the Zachman Framework. It provides a structured approach to organizing and describing an enterprise’s architecture and the relationships between different aspects of the enterprise, targeting people like business owners and software developers.

Enterprise Architecture Frameworks

TOGAF

The Open Group Architecture Framework (TOGAF) is the most used framework for enterprise architecture. TOGAF is a method for creating and managing enterprise technology architecture. It covers everything from planning to implementation to governance. Essentially, it’s a way to design software intentionally.

Conclusion

Software architecture is a broad topic. It’s a discipline that requires a lot of learning and practice. However, your knowledge will result in a well-designed software system that meets your customer’s needs. It will also help you grow as a software developer.

I hope this article enables you to continue learning, earning, and growing and you find value in these resources.

Learn Software Architecture - Beyond the Basics


Other Learning