Conway’s law shaping architecture
https://registerspill.thorstenball.com/p/the-most-powerful-law-in-software
On future proofing
- Design for flexibility
- don’t architect for excessive scaling, YAGNI most likely
https://cerebralab.com/Stop_future_proofing_software
Presenting architecture
Clear beautiful diagrams
https://terrastruct.com/blog/post/draw-software-architecture-diagrams/
Managing technical debt
Strategies to work with “legacy” codebases
- Respect Legacy Code & Treat it Right
- Forget Technical Debt
- Own the Code in a Senior Way
- Split up the Monolith (in all ways possible)
- Address the Documentation Problem — Intelligently
- Analyze & Fix the Product Development Process
Other side of the coin, technical wealth
https://review.firstround.com/forget-technical-debt-heres-how-to-build-technical-wealth
- Legacy code: code without test coverage and documentation
- Legacy code: It’s all about how difficult that software is to improve
- House metaphors, maintenance needed (putting away dishes, cleaning), remodeling to have a more livable place
- vs rebuilding
CUPID instead of SOLID
https://dannorth.net/2022/02/10/cupid-for-joyful-coding/
- Composable
- Small surface area
- Intention revealing
- Minimal dependencies
- Unix philosophy
- A simple, consistent model
- Single purpose vs. single responsibility
- Predictable
- Behaves as expected
- Deterministic
- Observable
- Idiomatic
- Language idioms
- Local idioms
- Domain-based
- Domain-based language (ex: not generic types but type names that match the domain)
- Domain-based structure
- Domain-based boundaries
Types in different layers
https://montasaurus.com/posts/how-i-build#structure
Types near the edge (like API schemas and database tables) are inherently less flexible
Framework patterns and programming interfaces
http://blog.startifact.com/posts/framework-patterns.html
Documenting architecture
https://matklad.github.io/2021/02/06/ARCHITECTURE.md.html
https://www.innoq.com/en/blog/brief-introduction-to-arc42/#fn:1
Diagrams
https://www.diagrams.net/ https://streamlinehq.com/
use diagrams.net with “Sketch” style and Streamline Icons . We automate the conversion to PNG, SVG and WebP with a little script.
Integration, buy vs build
https://martinfowler.com/articles/cant-buy-integration.html
- put most of your energy into designing clean interfaces
Beyond microservices
- Build-time and deployment-time considerations
- Build DAG, runtime DAG
- Cohesion
- Client libraries for services
Be pragmatic before choosing microservices
https://link.medium.com/rv6PQPdGQzb
From monolith to microservices
https://link.medium.com/xML0dw8bmAb
- Phased approach for billing service at WeTransfer
Cloudy, serverless vs rented server
- bursty loads ⇒ cloudy architecture
- dev velocity
FaaS - differences between AWS Lambda, Azure and GCP Cloud Functions
Database access
Active Record ORMs
https://en.wikipedia.org/wiki/Active_record_pattern
Data Mapper ORM
https://en.wikipedia.org/wiki/Data_mapper_pattern
Database as API
http://kevinmahoney.co.uk/articles/your-database-as-an-api/
Great architecture diagrams
https://notes.portebois.net/2021/03/23.html
- Be explicit about the accuracy in time of the diagram
- Don’t reinvent the language. Use (or build) idioms.
- Avoid ambiguities
- Each connection should have a label.
- Each shape should map to exactly one concept. And each concept should map to exactly one shape.
- The user must be able to immediately understand what each colour means.
- Be mindful of the reader’s cognitive load.
- Don’t try to pack too much in the same diagrams.
- Don’t mix abstraction levels. Higher is ok. Lower is not.
In practice, from simple to complex
Small stack on dedicated servers
- Install and administer Postgres
Containers vs alternatives
- Docker, Kubernetes
- Bare metal servers
- PaaS (Heroku) and transition
- Lambda, need to use lightweight-startup languages (Python, JS, Go)
- Spiky vs constant load
- Costs of cloud when not rearchitecting
- Managing technical debt
Containers at different scale
https://matt-rickard.com/dont-use-kubernetes-yet/
- Fargate, CloudRun
- Managed K8s
- Bare-metal K8s
Scalable web architecture and Distributed systems
http://aosabook.org/en/distsys.html
Architecture of many other SW systems
http://aosabook.org/en/index.html
”This is my architecture” series at AWS
https://aws.amazon.com/architecture/this-is-my-architecture/
Architectures discussed at InfoQ InfoCon
https://www.infoq.com/architecture-design/
“Running in production” podcast
https://runninginproduction.com/
Favorites at “HighScalability”
http://highscalability.com/all-time-favorites/
Systems at big tech companies
https://www.youtube.com/playlist?list=PLkQkbY7JNJuBoTemzQfjym0sqbOHt5fnV