-
Notifications
You must be signed in to change notification settings - Fork 11
Description
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.”
"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.
Remember YAGNI!
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.
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
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
- http://systemarchitect.mit.edu
- https://martinfowler.com/architecture
- http://fundamentalsofsoftwarearchitecture.com
- http://www.lix.polytechnique.fr/~golden/systems_architecture.html
- https://trello.com/c/M0G4wGXB/111-software-architecture
- https://www.ruthmalan.com
- https://chrisrichardson.net/post/architecture/2019/07/23/who-does-architecture.html
- https://dev.to/simonbrown/software-architecture-isn-t-about-big-design-up-front-4hol
- https://medium.com/nick-tune-tech-strategy-blog/self-documenting-architecture-80c8c2429cb8
- https://en.wikipedia.org/wiki/Systems_architecture
- https://en.wikipedia.org/wiki/Software_architecture
- https://en.wikipedia.org/wiki/Systems_architect
- https://en.wikipedia.org/wiki/Architecture_framework
- https://en.wikipedia.org/wiki/Department_of_Defense_Architecture_Framework
- https://en.wikipedia.org/wiki/Architectural_pattern
- https://www.developertoarchitect.com/downloads/worksheets.html
- https://www.ibm.com/developerworks/rational/library/feb06/eeles/index.html
- http://files.catwell.info/misc/mirror/2003-martin-fowler-who-needs-an-architect.pdf
- https://developertoarchitect.com
- http://evolutionaryarchitecture.com
- https://www.slideshare.net/TechWellPresentations/modern-evolutionary-software-architectures
- https://herbertograca.com/2017/07/03/the-software-architecture-chronicles
- https://www.visual-paradigm.com/guide/enterprise-architecture/enterprise-architects-vs-solution-architects-vs-domain-architects
- https://subscription.packtpub.com/book/application_development/9781786468529/1/ch01lvl1sec07/defining-software-architecture
- https://architectelevator.com/architecture/architects-zoom
- https://martinfowler.com/tags/application%20architecture.html
- https://docs.microsoft.com/en-us/dotnet/architecture/modern-web-apps-azure/
- https://jimmybogard.com/vertical-slice-architecture/
- https://vaadin.com/learn/tutorials/ddd/ddd_and_hexagonal
- https://herbertograca.com/2017/11/16/explicit-architecture-01-ddd-hexagonal-onion-clean-cqrs-how-i-put-it-all-together
- https://axoniq.io/resources/cqrs
- https://www.educba.com/security-architecture
- https://www.codeproject.com/articles/20467/software-architecture-review-guidelines
- https://resources.sei.cmu.edu/library/asset-view.cfm?assetid=513908
- https://riskstorming.com
- http://swarchitectonics.blogspot.com/2016/08/a-toolbox-of-software-architecture.html
- https://link.springer.com/content/pdf/10.1007/978-0-387-35563-4_26.pdf Structural Analysis of the Software Architecture - A Maintenance Assessment Case Study
- https://twitter.com/ruthmalan/status/1298215743809556482
- https://twitter.com/Grady_Booch/status/1301810362119905285
- Could be a good resource for architectural decision making : https://www.infoq.com/presentations/150-infrastructures
- Why Google stores billions of lines of code in a single repository
- https://medium.com/the-innovation/emergent-architecture-architecture-in-the-age-of-agile-9f21ba654845
- https://www.linkedin.com/pulse/revisiting-how-people-prioritise-software-work-eoin-woods
- https://handbookofsoftwarearchitecture.com/books
- https://medium.com/swlh/software-architect-path-4-architectural-drivers-46b27af869f9
- Patterns in System Architecture Decisions - MIT Abstract- This paper proposes a set of six canonical classes of architectural decisions derived from the tasks described
in the system architecture body of knowledge and from real system architecture problems. These patterns
can be useful in modeling architectural decisions in a wide range of complex engineering systems. They
lead to intelligible problem formulations with simple constraint structures and facilitate the extraction of
relevant architectural features for the application of data mining and knowledge discovery techniques. For
each pattern, we provide a description, a few examples of its application, and briefly discuss quantitative
and qualitative insights and heuristics. A few important theoretical properties of the corresponding set of
patterns are discussed, such as completeness, degradedness, and computational complexity, as well as some
practical guidance to be taken into account when applying them to real-life architecture problems. These
patterns are intended to be a useful tool for researchers, practitioners and educators alike by: facilitating
instruction and communication among system architects and with researchers from other fields such as
combinatorics, computer science and operations research; and fostering reuse of domain-independent
knowledge necessary to develop architecture decision support tools (and thus development time and cost
reductions for such tools). - The Architecture of Complex Systems: Do Core-periphery Structures Dominate? - Harvard Business School
- The Architecture of Platforms: A Unified View - Harvard Business School
- http://weblog.tetradian.com/2015/01/15/declaring-the-assumptions
- https://www.oreilly.com/content/topics/software-architecture
- https://www.sciencedirect.com/topics/computer-science/architectural-tactic
- https://www.enterpriseintegrationpatterns.com/ramblings/86_isthisarchitecture.html Gregor Hope
- https://www.linkedin.com/pulse/dont-check-ingredients-abilities-gregor-hohpe
- https://www.linkedin.com/pulse/boxes-lines-budgets-gregor-hohpe
- https://open.spotify.com/episode/4gRhjFeMAw7mz0fTRi5fBF Mark Richards on Software Architecture
- https://www.linkedin.com/pulse/decisions-ruth-malan/, https://www.linkedin.com/pulse/architecture-decisions-ruth-malan, https://www.linkedin.com/pulse/architecture-clues-heuristics-part-i-scars-ruth-malan/, https://www.linkedin.com/pulse/architecture-clues-heuristics-part-ii-decisions-change-ruth-malan/
- https://cognitect.com/blog/2011/11/15/documenting-architecture-decisions
- https://resources.sei.cmu.edu/library/asset-view.cfm?assetID=513908
Architectural Paradigms
- https://en.wikipedia.org/wiki/Search-oriented_architecture
- https://en.wikipedia.org/wiki/Resource-oriented_architecture
- https://en.wikipedia.org/wiki/Service-oriented_architecture
- https://en.wikipedia.org/wiki/Event-driven_architecture