Diego Pacheco's Software Architecture Library
This repository contains a curated collection of concepts, guidance about Software Architecture by Diego Pacheco.
I wrote this book because I have been doing software architecture for more than 20 years and I want to share my philosophy, practices, and important concepts and patterns with other architects and aspiring architects. This is also an experiment - a living piece of advice that I want to improve over time.
What to Expect
- Honest and direct advice
- Highly opinionated content
- Practical and actionable guidance
What this book is NOT
- Not a tutorial or step-by-step guide
- It's not a panacea for all architecture problems
About the Author
๐จโ๐ป Diego Pacheco Bio Diego Pacheco is a seasoned, experienced ๐ง๐ท Brazilian software architect, author, speaker, technology mentor, and DevOps practitioner with more than 20 years of solid experience. I have been building teams and mentoring people for more than a decade, teaching soft skills and technology daily. Selling projects, hiring, building solutions, running coding dojos, long retrospectives, weekly 1:1s, design sessions, code reviews, and my favorite debate club: architects community of practices and development groups for more than a decade. Living, breathing, and practicing real Agile since 2005, coaching teams, and helping many companies discover better ways to work using Lean and Kanban, Agile principles, and methods like XP and DTA/TTA. I have led complex architecture teams and engineering teams at scale guided by SOA principles, using a variety of open-source languages like Java, Scala, Rust, Go, Python, Groovy, JavaScript, and TypeScript, cloud providers like AWS Cloud and Google GCP, amazing solutions like Akka, ActiveMQ, Netty, Tomcat, and Gatling, NoSQL databases like Cassandra, Redis, Elasticache Redis, Elasticsearch, Opensearch, RabbitMQ, libraries like Spring, Hibernate, and Spring Boot, and also the NetflixOSS Stack: Simian Army, RxJava, Karyon, Dynomite, Eureka, and Ribbon. I have implemented complex security solutions at scale using AWS KMS, S3, Containers (ECS and EKS), Terraform, and Jenkins. Over a decade of experience as a consultant, coding, designing, and training people at big customers in Brazil, London, Barcelona, India, and the USA (Silicon Valley and Midwest). I have a passion for functional programming and distributed systems, NoSQL Databases, a mindset for Observability, and always learning new programming languages.
๐ฑCurrently: Working as a principal Software Architect with AWS public cloud, Kubernetes/EKS, performing complex cloud migrations, library migrations, server and persistence migrations, and security at scale with multi-level envelope encryption solutions using KMS and S3. While still hiring, teaching, mentoring, and growing engineers and architects. During my free time, I love playing with my daughter, playing guitar, gaming, coding POCs, and blogging. Active blogger at http://diego-pacheco.blogspot.com.br/
๐ป Core skills and expertise: Architecture Design and architecture coding for highly scalable systems Delivering distributed systems using SOA and Microservices principles, tools, and techniques Driving and executing complex cloud migrations, library and server migrations at scale Performance tuning, troubleshooting & DevOps engineering Functional Programming and Scala Technology Mentor, agile coach & leader for architecture and engineering teams Consultant on development practices with XP / Kanban Hire, develop, retain, and truly grow talent at scale
๐ Resources
- ๐Blogger
- ๐Substack
- ๐Medium
- ๐Amazon Author
- ๐ขLinkedIn
- ๐ฆX
- ๐ฆBlusky
- ๐บYouTube Tech Channel
๐ Tiny Essays:
๐ฅ Tiny Side Projects
- ๐ง๐พโโ๏ธ Tupi lang: programming language written in Java 23
- ๐ฅซ Jello: vanilla JS, web-apis, trello-like
- ๐ Zim: vim-like written in Zig 0.13
- ๐ป Gorminator: simple and dumb Linux terminal written in Go
- ๐ธ kit: Git-like written in Kotlin
- ๐ฆ Shrust: Compress/Decompress tool written in Rust
- ๐ต๐ฝ Smith: It's a security Agent Written with Scala 3.x
- ๐ ZOS: A very tiny OS written in Zig
- ๐ฎ Tiny Games: Collection of JS games
Table of Contents
- Chapter 0 - Zero
- Chapter 1 - Philosophy
- Why
- Crystal Ball - Think about future changes
- Defensive Programming - Anticipating and handling errors
- Doing Hard Things - Tackling complex problems head-on
- Frontend vs Backend - Design philosophy differences
- Open Source First - Favor open source solutions always
- Service Orientation - Services as first-class citizens
- Protect Your Time - Strategies for architects to safeguard time for deep work
- Chapter 2 - Anti-Patterns
- Why
- Tech Debt Plague - Fighting technical debt constantly
- Ignore Culture - Addressing ignored problems proactively
- Stagnation - Constant learning to avoid stagnation
- Requirements - Challenging and validating decisions
- Chapter 3 - Dilemmas
- Why
- Discovery vs Delivery - Balancing exploration and execution
- Move Fast vs Do it Right - Speed vs Quality
- Build vs Buy - When to build in-house vs buy and integrate
- Decide or Wait - Making timely decisions vs delaying for more info
- Chapter 4 - Properties
- Why
- Anti-Fragility - Systems Thriving on Failure
- State of the Art - Choosing the best and latest solutions
- Scalability - Designing for growth and load
- Observability - Monitoring and understanding system behavior
- Stability - Ensuring stable daily practices.
- Secure - Embedding security in architecture
- Chapter 5 - Practices
- Why
- Attention to Detail - Architect with precision and care
- Architecture Review - Documenting architecture for communication and improvements
- Design First - Think first, act later
- Ownership - Extreme ownership and proactive behavior for architects
- Reading Code - Importance of reading code as an architect
- Monthly Review - See the whole picture.
- Working on Trenches - Hands-on, front-line work with the team.
- Chapter 6 - Concepts
- Why
- ACID - Relational database transaction properties
- Authentication & Authorization - Identity verification and access control
- BASE - NoSQL consistency model
- Idempotency - Safe operation repetition
- Optimistic vs Pessimistic Locking - Concurrency control strategies
- Partition - Data distribution strategies
- Schema Evolution - Forward/backward compatibility for APIs
- Source of Truth - Authoritative data source
- Stateless vs Stateful Services - Service state management
- Chapter 7 - Patterns
- Why
- API Gateway - Single entry point for microservices
- BFF Pattern - Backend for Frontend pattern
- Cache - Data storage for faster access
- Connection Pool - Database connection reuse
- Feature Flags - Runtime configuration and gradual rollouts
- Load Balancer - Traffic distribution across servers
- Message Patterns - Publish/Subscribe, Point-to-Point messaging
- Message Id - Unique identifier for tracing requests
- Pagination - Breaking large datasets into pages
- Queue - Asynchronous message processing
- Retry - Handling transient failures with retry strategies
- Web Hook - Event-driven HTTP callbacks
- Chapter 8 - Tools
- Why
- Diagraming Tools - Visualizing architecture with diagrams
- Writing Tools - Documenting architecture effectively
- Thinking Tools - Tools for structured thinking and exploration.
- Chapter 9 - Epilogue
- Epilogue - Final thoughts and next steps
- Resources - Recommended books and learning materials
- Changelog - Updates and revisions to the book
- References - External blog posts, articles, and technical documentation
- Glossary - Definitions of key terms used in the book
- Index - Complete index of topics covered in the book