Software engineering is where computer science meets craft - the discipline of turning ideas into reliable, maintainable systems. These notes cover the recurring patterns, architectural decisions, testing strategies, and tooling that shape professional software development.
Design Principles
- Design Patterns
- API Design
- SOLID Principles - the five principles, what each actually prevents, and the common misreadings
- Coupling and Cohesion - the two forces behind every modularity argument
- Dependency Injection and IoC - what injection actually decouples, and Fowler’s own caution about the testability argument
Architecture & Patterns
Testing & Quality
- Testing Strategies
- Code Review
- Code Coverage and Its Limits - what coverage measures, and why a coverage target makes a poor goal
Maintaining a Codebase
Version Control
- Version Control Fundamentals
- Monorepo vs Polyrepo - what each repository strategy optimizes, and the tooling each demands
DevOps & Deployment
- Continuous Integration
- Continuous Delivery and Deployment - the pipeline past CI, and blue-green against canary
- Feature Flags and Trunk-Based Development - decoupling deploy from release, and the debt flags create
- Semantic Versioning
- The Twelve-Factor App - what the twelve factors were written against, and which have aged well
Running Systems in Production
- Observability: Logging, Metrics, Tracing - the three signals, and how observability differs from monitoring
- Incident Postmortems and Blameless Culture - why blame suppresses the information you need most
More coming - containerization. The language-and-tooling half of this area lives in the Languages: Common Concerns cluster: build systems and dependency management and declarative configuration and idempotence. This section keeps the pipeline-and-platform half.
The full file listing follows below, generated automatically by Quartz.