"Software Architecture as a Set of Architectural Design Decisions": "Software architectures have high costs for change, are complex, and erode during evolution. We believe these problems are partially due to knowledge vaporization. Currently, almost all the knowledge and information about the design decisions the architecture is based on are implicitly embedded in the architecture, but lack a first-class representation. Consequently, knowledge about these design decisions disappears into the architecture, which leads to the aforementioned problems. In this paper, a new perspective on software architecture is presented, which views software architecture as a composition of a set of explicit design decisions. This perspective makes architectural design decisions an explicit part of a software architecture. Consequently, knowledge vaporization is reduced, thereby alleviating some of the fundamental problems of software architecture."
Tomas Petricek's writings on the subject:
Architecture of Open-Source Applications (books)
"Don't Call It a Platform": "Habitability, in the broadest sense, describes how nice (or not) the experience is for the people who have to live in a system. ... I make the argument that we ignore habitability at our peril. Those of us in a place to shape the lived experiences of our colleagues have a duty of care to ensure that we take their needs to heart."
"DDD, Hexagonal, Onion, Clean, CQRS, … How I put it all together"
"The cloudy layers of modern-day programming"
Platform Engineering Teams Done Right...
The 12-Factor App:
- I. Codebase: One codebase tracked in revision control, many deploys
- II. Dependencies: Explicitly declare and isolate dependencies
- III. Config: Store config in the environment
- IV. Backing services: Treat backing services as attached resources
- V. Build, release, run: Strictly separate build and run stages
- VI. Processes: Execute the app as one or more stateless processes
- VII. Port binding: Export services via port binding
- VIII. Concurrency: Scale out via the process model
- IX. Disposability: Maximize robustness with fast startup and graceful shutdown
- X. Dev/prod parity: Keep development, staging, and production as similar as possible
- XI. Logs: Treat logs as event streams
- XII. Admin processes: Run admin/management tasks as one-off processes
Don't Start with Microservices--Monoliths are your friend
The Nature of Software
Reading
- 10 Most Popular Software Architectural Patterns
- Architectural Patterns (Book)
- Architectural Styles and the Design of Network-based Software Architectures - Roy Thomas Fielding
- "Architecture vs Model": "One of the biggest problems with business software is that architecture gets promoted more than the domain model. Further, most domain models are ordinary, and could be implemented by school students for a lot less cost than the 7-9 figures often spent. Yet, often the software architecture supporting a model—almost certainly anemic—is generally over engineered."
- Best Kept Secrets of Peer Code Review
- Building Secure & Reliable Systems - Heather Adkins, Betsy Beyer, Paul Blankinship, Piotr Lewandowski, Ana Oprea & Adam Stubblefield (PDF)
- Control Flow - The Other Half of Integration Patterns: "When Bobby and I wrote Enterprise Integration Patterns, we naturally spent most of the time on the data flow of messaging systems: how messages are generated, transformed, and routed. Some patterns, especially Endpoint Patterns such as Polling Consumer or Event-Driven Consumer clearly have a ring of control flow to it, but we never actually mention the term in the entire book (funnily there is one occurrence in Recipient List, but it's actually a verb and object: "In order for the Recipient List to control flow of information"). The term gets a few mentions in the blog, although we conclude that "Message-oriented API's steer towards a data flow architecture". So, it's time to make control flow a first-class citizen."
- Domain Driven Design Quickly
- Domain-Driven Design Reference - Eric Evans
- Domain-Driven Design: The First 15 Years. Essays from the DDD community - Domain-Driven Design Europe (HTML, PDF, ePub) (Leanpub account or valid email requested)
- Exploring CQRS and Event Sourcing - Dominic Betts, Julián Domínguez, Grigori Melnik, Mani Subramanian, Fernando Simonazzi (EPUB, PDF - code samples)
- Guide to the Software Engineering Body of Knowledge (email adddress requested)
- How to Design Programs
- How to Write Unmaintainable Code
- Migrating to Cloud-Native Application Architectures (email address requested) (PDF)
- OAuth - The Big Picture (email address requested)
- Practicing Domain-Driven Design - Part 1 - Scott Millett (Leanpub account or valid email requested)
- Serverless apps: Architecture, patterns, and Azure implementation
- Serverless Design Patterns and Best Practices - Brian Zambrano (Packt account required)
- Shape Up - Stop Running in Circles and Ship Work that Matters - Ryan Singer (PDF)
- Site Reliability Engineering
- Six Event-Driven Archicture Patterns: [Part 1]](https://medium.com/wix-engineering/6-event-driven-architecture-patterns-part-1-93758b253f47) Part 2
- Software Architecture Patterns (email address requested, not required)
- Software Engineering for Internet Applications
- Source Making Design Patterns and UML
- Test Driven Development, Extensive Tutorial - Grzegorz Gałęzowski
- "The Case for Event-Driven Architecture with Mediator Topology"
- The Site Reliability Workbook - Betsy Beyer, Niall Richard Murphy, David K. Rensin, Kent Kawahara and Stephen Thorne
- Why a programmer might actually be a good urban planner
- WSO2 Reference Architecture:
Interesting exemplars/templates/links
Detail Pages:
- "Grow Your Own BaaS" In this paper, the concepts of growing your own Backend-as-a-Service (BaaS) platform using vendor agnostic concepts are explored. The proposal is to define, architect, and design a heterogeneous micro-applications based platform.
- "Serverless" The serverless architecture, usually implying smaller atoms of functionality executing on cloud servers.
- AML (Architecture Meta Language) Used to specify the semantics of architecture description languages, ADLs; it is a very primitive language, having declarations for only three constructs: elements, kinds, and relationships.
- Archimate A DSL for generating Archimate diagrams from source.
- Architectural Decision Records (ADR) An Architectural Decision Record captures a single Architectural Decision, such as often done when writing personal notes or meeting minutes; the collection of ADRs created and maintained in a project constitute its decision log. All of these are within the topic of Architectural Knowledge Management.
- Cellular Architecture Utilizing cellular principles in an architecture. (?)
- Clean Architecture Bob Martin's screed on architecture. Captured for pedagogical analysis.
- Cloud Adoption Patterns Collection of patterns for adopting cloud.
- Data, context, and interaction (DCI) A paradigm used in architecture to program systems of communicating objects; it separates the domain model (data) from use cases (context) and roles that objects play (interaction).
- Data-Oriented Design A data-centric design approach, typically guided by low-level performance concerns in game development scenarios.
- Design Docs (Google) How Google does design docs
- Diagrams Build architectural diagrams.
- Diagrams As Code Generate valid diagrams from source code.
- Effective Enterprise Java A collection of topics for effective enterprise systems.
- Entity Component Systems (ECS) A common architecture/design pattern for building games.
- Event-Driven .NET An Event Driven Microservices Platform for .NET.
- Event Sourcing An approach to building storage systems that tracks events rather than "truth".
- FIDO Authentication "The answer to the world's password problem."
- Free Programming Books A collection of free learning resources (books).
- Global Software Architecture Summit (GSAS) Barcelona, Architecture, October.
- Handbook of Software Architecture Grady Booch's "thoughts" site.
- Hexagonal architecture Divides work inside and outside of an app instead of into layers.
- High Scalability (Website) notes Collection of notes from the blog http://highscalability.com/
- Icepanel Bridge the gap between design and reality with collaborative modelling; designed for agile teams.
- Ilograph Diagramming Language (IDL) Ilograph diagrams are defined using a the Ilograph Diagramming Language (IDL). IDL is a powerful, declarative, YAML-based language. Each Ilograph diagram defines its resources and perspectives in IDL.
- JAMStack Javascript, APIs, and Markdown presentation layer
- Kansas City Developer's Conference One of the Midwest's best tech-agnostic conferences.
- Lawrence Livermore National Labs (LLNL) Software portal for projects built at LLNL.
- Mermaid Generation of diagram and flowchart from text in a similar manner as markdown.
- Microservices Reading on microservices architecture.
- Onion Architecture Layers presented as circles, each wrapping around a previous one, forming an "onion".
- Oredev Tech conference in Malmo, Sweden.
- Package by Feature Architecture Capitalizes on cohesion and coupling by moving the layering a level down — to the class level — and focusing on coupling and cohesion at a higher level by keeping all classes related to the same feature in the same package/module.
- Platform Revolution How networked markets are transforming the economy and how to make them work for you.
- Polylith A software architecture that applies functional thinking at the system scale. It helps us build simple, maintainable, testable, and scalable backend systems.
- Project Tye An experimental developer tool that makes developing, testing, and deploying microservices and distributed applications easier.
- QCon InfoQ's conferences
- Reading in software A collection of links and articles on software and development.
- Representational State Transfer (REST) Collection of links and reading and notes on Fielding's dissertation.
- RFD (Request For Discussion) A means by which architectural (and other) decisions can be made collaboratively.
- Semantic Web A model of the web based more around its founder's original intent (hyperlinks and full-state "documents").
- Service Design Patterns Collection of patterns specific to services.
- SOA Design Patterns A collection of patterns specific to service-orientation.
- Steve Yegge Rants Some links/excerpts from Yegge's various rants.
- Structurizr Builds upon "diagrams as code", allowing you to create multiple diagrams from a single model, using a number of tools and programming languages.
- Teach Yourself Computer Science A collection of links for learning CS for those who didn't study it at school.
- VSLive 1105 Media's conference about Microsoft.
- WWW-Architecture Architecture thoughts about the Web itself
- yUML Create and share simple UML diagrams in your wikis, forums and issue trackers.
Last modified 16 December 2024