Skip to content

Software Architecture #176

@anitsh

Description

@anitsh

image

Business goals are the foundation on which software systems are justified, analyzed, and built. Software systems are constructed to realize business or mission goals. Software architecture is the bridge between the business goals and the realized system. Those claims about business goals underlie many methods for designing and analyzing software architectures. However, precisely eliciting and characterizing business goals has always been problematic. Business goals come in many forms and at many levels of abstraction, and the stakeholders of the system are usually not accustomed to making goals explicit.

The quality and longevity of a software-reliant system is largely determined by its architecture.

What Is an Architecture?
Informally, an architecture is the blueprint describing the structure of a system.
Formal Definition - “The software architecture of a computing system is the set of structures needed to reason about the system, which comprise software components, relations among them and properties of both.”

image

"Architecture represents the significant design decisions that shape a system, where significant is measured by cost of change." - Grady Booch

"Every software-intensive system has an architecture. In some cases that architecture is intentional, while in others it is accidental. Most of the time it is both, born of the consequences of a myriad of design decisions made by its architects and its developers over the lifetime of a system" - Grady Booch

"Check capabilities, not ingredients." - Gregor Hophe

“Architecture is selling options.”- Gregor Hophe

"An architecture picture without lines or an architecture defined by a bill of material, raise your hand and proclaim that this isn't an architecture discussion at all" - Gregor Hophe

Good Architecture Starts With Modularity
It is generally a good architectural practice to make the code base more modular, more manageable. Start with the data and pay close attention to how they’re being accessed. Make sure each module/service owns and controls access to its own data, and that data access only happens through clearly defined API contracts.

Start #344 #192 #439 #462

Remember YAGNI!

image
image
image
image
image

The pattern-analysis scoring for some of the architecture patterns. This summary will
help you determine which pattern might be best for your situation.
For example, if your primary architectural concern is scalability, you
can look across this chart and see that the event-driven pattern,
microservices pattern, and space-based pattern are probably good
architecture pattern choices. Similarly, if you choose the layered
architecture pattern for your application, you can refer to the chart
to see that deployment, performance, and scalability might be risk
areas in your architecture.

image

While this chart will help guide you in choosing the right pattern, there is much more to consider when choosing an architecture pattern. You must analyze all aspects of your environment, including infrastructure support, developer skill set, project budget, project deadlines, and application size (to name a few). Choosing the right architecture pattern is critical, because once an architecture is in place, it is very hard (and expensive) to change. -
Mark Richards, Software Architecture Patterns

Architecture Decision Template
image

Look for code and data that are often changed and deployed together to determine features or functionalities that are more tightly coupled. Use these as natural groupings for what can be iterated on and deployed independently from other areas.

Resource

Architectural Paradigms

Architecture Decision Records

Metadata

Metadata

Assignees

No one assigned

    Labels

    architectureSoftware architecturebasicsBasic concepts, fundaments principles, could be about anything.designSystem designsystemSystemwipWork In Progress, On Going, Doing

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions