See also the link collection for this site related to programming.
Although the following links are divided into topics, many of them could be placed in multiple categories; architecture is a crazy, sprawling, many-tentacled thing..
What is Architecture?
A few links which address the question of what architecture actually is..
- [video] Dave Farley/Continuous Delivery: Softwrae Architecture Tips I Wish I Knew Sooner
- [video] Simon Brown: Five Things Every Developer Should Know about Software Architecture - what is architecture, and how much should you do up front?
A few links to architectural patterns (other than ones which have dedicated sections below)..
- STOSA: Single Team Oriented Service Architecture - organising teams for autonomy
- [video] Greg Young: CQRS and Event Sourcing - intro to the basic concepts
- [video] Michael Nygard: Architecture Without an End State - evolutionary architecture, patterns for long-term enterprise-scale architecture
- [video] Nick Tune: Domain-driven Design: Hidden Lessons from the Big Blue Book - covers a range of architecture topics, including modelling, heuristics, and team structures - and DDD just “in passing”.
- [video] Stefan Tilkov: Good Enough Architecture - a consultant talks about problematic architecture designs he has seen (anti-patterns)
- [video] Rebecca Parsons: Building Evolutionary Architectures (2022) - nice point (paraphrased): “you don’t know what framework you’ll be using in 12 months so how do you do a good job as an architect?”. Also (paraphrased) “horizontally partitioned systems protect against technical changes, vertically partitioned systems protect against business changes”.
- [video] Ian Cooper: The Clean Architecture (2019) - an excellent discussion of options for software layering within a code-base
- The Data Mesh - proposal for “data-driven organisations”, breaking the “monolithic data lake”
- Mark Richards: Is SOA Dead? - provides the best definition of Service Oriented Architecture that I’m aware of. SOA is somewhat out of fashion these days, but it’s useful to know what it is. See also Mark Richard’s free book Microservices vs SOA
- SCS Architecture: Self Contained Systems - proposed terminology for a coarse-grained service architecture similar to microservices
- Christian Posta: When Not To Do Microservices
- Google Cloud Architecture Center: Microservices Series
- NGINX: Microservices Series
- AppDynamics: How Anti-Patterns Can Stifle Microservice Adoption
- Daniel Westheide/InnoQ: Restful communication between microservices - looks into the topic of sync vs async communication between microservices. I don’t agree with everything here, but it’s an interesting viewpoint.
- Martin Fowler: How to break a Monolith into Microservices
- microservices.io: Adopt the Microservice Architecture
- Ben Morris: Microservices, Rest and the Distributed Big Ball of Mud
- Ben Stopford/Confluent: Build Services on a Backbone of Events - see “Query by Event Carried State Transfer”
- Sam Newman’s Blog
- Oscar uit de Bos: The Event-Carried State Transfer Pattern
- [video] Sam Newman: Principles of Microservices
- [video] Jonathan Tower: Don’t Build a Distributed Monolith - highly recommended viewing before trying first microservice project!
- [video] Axel Fontaine: Majestic Modular Monoliths
- [video] Jimmy Bogart: Avoiding Microservice Megadisasters - the story of a microservice project with very poor scalability and uptime, and how to do things otherwise.
- [video] Chris Richardson : Not Just Events - Developing Asynchronous Microservices
- [video] Chris Richardson: Developing Microservices with Aggregates - a good review of DDD aggregates, and how they help microservices
- [video] Charity Majors: Test in Production
- Zalando Rules of Play - Zalando’s arch guidelines for microservices
- Fowler: Testing Strategies in a Microservice Architecture - nothing surprising here, but a good overview
- [video] R. Meschenberg: Microservices at Netflix Scale
- [video] Rodrigue Schaefer: From Monolith to Microservices at Zalando - covers more than just microservices.
- [video] Kevin Goldsmith: Microservices at Spotify - not so interesting as the presentations from Netflix and Zalando.
- [video] A Netflix Guide to Architecture
- [video] Skelton & Pais: Team Cognitive Load - “Limit the size of software services/products to the cognitive load that the team can handle”. See also the authors’ work on team topologies.
- [video] An Awkward MicroServices Conversation - funny but true, eg “Microservices were supposed to be the answer. Yet one request now takes 500ms because every service has to be asked something.”
- [video] Daniel Bryant: The Seven (More) Deadly Sins of Microservices
- [video] David Leitner: Rethinking Reactive Architectures (2021) - has some interesting discussions on the “entity service antipattern” and distributed monoliths at around minute 21, and some interesting discussions on distributed read models around minute 24.
- [video] Matt Ranney: What Comes After Microservices (2016) - covers what topics become important after you have successfully achieved a microservice architecture
- [video] Ben Stopford: Rethinking Microservices with Stateful Streams (2017) - partly about Kafka stream processing, but lots of other excellent insights too
- [video] Dave Farley/Continuous Delivery: How Well Designed is your Microservice (2022) - a very nice description of the point of microservices, and API compatibility preservation.
- [video] Neal Ford: Granularity and Communication Tradeoffs in Microservices (2021) - points out that coarse-grained services can be better than fine-grained ones
- [video] CodeOpinion: Rest APIs for Microservices? Beware! - discusses issues related to synchronous calls (which the architecture in this article reduces or eliminates)
- [video] CodeOpinion: Event Carried State Transfer
- [video] Nick Tune: The Art of Discovering Bounded Contexts
- [video] Jimmy Bogard: Domain Driven Design: The Good Parts - an excellent report of DDD in the real world (though I’m not convinced by the final conclusions).
- Domain Driven Design Community - some useful resources, but site seems dead: last “post” from 2014 and copyright last updated 2018.
- [video] Eric Evans: DDD and Microservices - at last some boundaries - about how the boundaries of multiple contexts in a monolithic system tend to get broken over time, and how using microservices more strongly “enforces” boundaries. Plus some other very interesting stuff on the role of context-maps.
- [video] Michael Bryzek: Design Microservices the Right Way - I don’t agree with all points made, but it is an interesting report from a successfull company..
- [video] Andrew Schofield: Creating event-driven microservices - see minute 25:00 where replication of data via “snapshots” is discussed.
- [video] Mauro Servienti: All our aggregates are wrong - points out that what seems initially like one aggregate might be better modelled as multiple, in particular when that aggregate starts containing data which crosses contexts.
Event Driven Systems
- [video] Duana Stanley: Core Decisions in Event-Driven Architecture (2019)
- [video] Dave Farley: Reactive Systems (2019)
- [video course] Confluent: Designing Events and Event Streams
- [video] Confluent: Streaming Databases
- [video] Confluent: Data Mesh
- Confluent Developer Site
Teams and Processes
- Christian Posta: The Real Success Story of Microservice Architectures - looks at the benefits of small cross-functional teams
- [video] Dan North: Patterns of Effective Teams - superb presentation!
- [video] Aino Corry: You’re Probably Getting Agile Wrong - emphasises the core agile concepts over specific methodologies such as Scrum.
- [video] Joakim Sunden: Agile Transformations Using the Spotify Model - content is a little more managament-level than software architecture level, but useful to be aware of.
- [video] Allen Holub: How we can correct the mistakes made with Agile - a rant about “the agile industrial complex”; promotes the concepts of Agile but is very critical about some of the “standards” that have grown up around it, eg Scrum.
- Allan Holub’s Recommended Reading List - references related to Agile processes
- [video] Philippe De Ryck: Getting API security right - stuff to think about when designing your server’s API
Articles by Christian Posta
Christian Posta has written so many excellent articles on microservices and related topics that it’s worth a dedicated section. Here are the articles I found most interesting, though it is worth checking out everything he has written. I’ve ordered these posts in the sequence that makes the most sense to me (not in publishing date):
- When Not To Do Microservices
- The Real Success Story of Microservices
- DevOps and the Myth of Efficiency
- Prefer Verticals Not Layers
- Why Microservices Should Be Event Driven
- The Hardest Part About Microservices: Your Data - also available as a video on youtube
- The Hardest Part About Microservices: Calling Your Services
- Being a Better Enterprise Architect
Generally Useful Resources
- SQUER company blog
- Structurizr - C4 model for drawing architecture diagrams
- CNCF Landscape - a table of the most significant cloud-related open-source projects
- [video] Lee Mills: Backstage - presenting a tool for creating “developer portals”
- [videos] Thoughtworks Youtube channel
- State of DevOps Report - annual report summarizing topics in development and deployment processes and technologies. See also Dave Farley’s review of the 2022 report.
- [videos] CodeOpinion Youtube Channel - a bunch of useful stuff
Other Interesting Stuff
- [video] Dan North: Simplicity - a very short presentation on not overcomplicating
- [video] Kevlin Henney: Old is the New New - how many new ideas are actually old ones (with 1968 being a particularly productive year..)
- Shopify: Under Deconstruction: The State of Shopify’s Monolith - how one company is modularising a monolithic codebase
- [video] Simon Brown: Modular Monoliths - How should you allocate code to modules in a large monolithic codebase? How can architectural abstractions be reflected in the codebase? How can the model-code gap be minimised? How can architectural decisions be enforced?
- Top 8 diagramming tools for software architecture - diagrams.net, lucidchart, excalidraw, tldraw (open source), gliffy, miro, cloudskew.
- Roy Fielding: Architectural Styles and the Design of Network-based Software Architectures - Fielding’s PHD thesis from 2000 in which REST was first defined.
- [video] Edson Yanaga: Micrating to Microservice Databases - mostly about managing DB schema upgrades with zero-downtime upgrades (not limited to microservices)
- Redhat Free Computing Books - does require a (free) redhat developer account.
- Goodhart’s Law - “When a measure becomes a target, it ceases to be a good measure”
A nice rewording of Conway’s Law:
If the architecture of the system and the architecture of the organization are at odds, the architecture of the organisation wins. – Ruth Malan, 2008
Two nice quotes related to the importance of in-house technical experts in creating new ideas - related to both the ideas of agile empowered teams and to domain-driven design (via Joakim Sunden):
.. a strong tech-powered product company would no sooner outsource their engineers than they would outsource their CEO – Marty Cagan
We need teams of missionaries, not teams of mercenaries. – John Doerr
There are things that can be measured. There are things that are worth measuring. But what can be measured is not always what is worth measuring; what gets measured may have no relation to what we really want to know. The costs of measuring may be greater than the benefits. The things that get measured may draw effort away from the things we really care about. And measurement may provide us with distorted knowledge - knowledge that seems solid but is actually deceptive.
From Mark Richards’ Report on Microservices vs Service Oriented Architecture:
SOA is built on the concept of a share-as-much-as-possible whereas microservices is built on the concept of share-as-little-as-possible.
An amusing but on-target quote from (supposedly ai-driven tool) Architect Clippy (twitter/@architectclippy):
I see you have a poorly structured monolith. Would you like me to convert it into a poorly structured set of microservices?