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

https://medium.com/cto-as-a-service/if-adding-more-engineers-doesnt-speed-up-our-development-what-does-4438bd030b4c

  • 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

https://specbranch.com/posts/one-big-server/?utm_source=hackernewsletter&utm_medium=email&utm_term=fav

  • bursty loads cloudy architecture
  • dev velocity

FaaS - differences between AWS Lambda, Azure and GCP Cloud Functions

https://acloudguru.com/blog/engineering/serverless-showdown-aws-lambda-vs-azure-functions-vs-google-cloud-functions#2a

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

https://grski.pl/self-host

  • Install and administer Postgres

Containers vs alternatives

http://www.smashcompany.com/technology/my-final-post-regarding-the-flaws-of-docker-kubernetes-and-their-eco-system

  • 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