Digital Garden
This is my digital garden — a sort of personal knowledgebase, a curated collection of notes and reference materials for all sorts of topics within the field of computer science.
Read more about the concept of the digital garden.
Legend
- 🌱 Seedling. Early draft.
- 🌿 Budding. Needs attention.
- 🌳 Evergreen. Mature document.
- 🍂 Decaying. No longer maintained.
Contents
Hub pages
The following topics are broad, umbrella subjects. Each links out to a cluster of narrower, related topics. These are good starting points for exploring the rest of the digital garden.
- Artificial intelligence (AI) 🌳
- Computer science 🌱
- Culture and folklore 🌱
- Data engineering 🌱
- Databases 🌱
- Design patterns 🌳
- Developer tooling 🌱
- Distributed systems mechanisms 🌱
- Hardware 🌿
- Laws and principles 🌱
- Modeling notations and methods 🌱
- Network protocols 🌿
- Quality attributes 🌿
- Requirements and product management 🌱
- Security 🌱
- Software architecture 🌳
- Software delivery and operations 🌱
- Testing 🌳
- Ways of working 🌿
All topics
0-9
A
- A/B testing 🌱
- Abstraction 🌿
- Abstractness 🌿
- Acceptance criteria 🌱
- Acceptance testing 🌱
- Access patterns 🌱
- Accessibility testing 🌱
- ACID principles 🌱
- Active-active 🌱
- Adapter pattern 🌱
- Adaptive software development 🌿
- Agent 🌱
- Agent2Agent (A2A) 🌱
- Agent handoff 🌱
- Agent harness 🌱
- Agent loop 🌱
- Agent memory 🌱
- Agile software development 🌳
- Agent orchestration 🌱
- Agent skills 🌱
- Agentic engineering 🌱
- AI assistant 🌱
- AI bias 🌱
- AI coding assistant 🌱
- AI constitutionalism 🌱
- AI regulation 🌱
- Alerting 🌳
- Algorithms 🌳
- Alpha testing 🌿
- Alpha version 🌿
- Analytical databases 🌱
- Anti-pattern 🌿
- API-first design 🌱
- API gateway 🌱
- Application performance management (APM) 🌿
- ArchiMate 🌿
- Architectural knowledge management (AKM) 🌳
- Architectural pattern 🌱
- Arrange, act, assert 🌱
- Association 🌱
- Artificial general intelligence (AGI) 🌿
- Artificial intelligence (AI) 🌳
- Asynchronous communication 🌱
- Asynchronous processing 🌱
- Asynchronous programming 🌱
- Atomic operation 🌳
- Atwood’s law 🌱
- Authentication 🌳
- Authorization 🌳
- Auto-scaling 🌿
- Automated testing 🌳
- Availability 🌱
- Availability zone 🌱
- Away-from-keyboard (AFK) 🌳
B
- Backwards compatibility 🌳
- Bash 🌳
- Batch processing 🌳
- Behavior-driven development (BDD) 🌿
- Behavioral testing 🌳
- Beta testing 🌿
- Beta version 🌿
- Big ball of mud 🌱
- Big bang 🌱
- Big data 🌱
- Big design up-front 🌿
- Big O notation 🌿
- Bike shedding 🌱
- The Bitter Lesson 🌱
- Blackboard 🌱
- Black-box testing 🌿
- Block storage 🌱
- Bloom filter 🌿
- Blue-green deployment 🌱
- Boy scout rule 🌱
- Booch method 🌱
- Border Gateway Protocol (BGP) 🌿
- Bounded context 🌱
- Bottom-up design 🌱
- Brooks’s law 🌱
- Business Process Model and Notation (BPMN) 🌿
- Bulk synchronous parallel 🌿
- Bulkhead 🌿
- Bus factor 🌱
C
- C4 model 🌿
- Caching 🌱
- Canary deployment 🌱
- CAP theorem 🌱
- Capability Maturity Model 🌱
- Capacity 🌱
- Cargo-culting 🌱
- The Cathedral and the Bazaar 🌿
- Cell-based architecture 🌿
- Change data capture 🌱
- Chaos engineering 🌿
- Checksum 🌱
- CI/CD 🌱
- CIDR (Classless Inter-Domain Routing) 🌱
- Circuit breaker 🌱
- Clean architecture 🌿
- Clean code 🌿
- Cleanroom 🌿
- Client-server architecture 🌿
- Cloud computing 🌿
- Cloud networking 🌿
- Cloud service providers 🌱
- Clustering 🌿
- Code conventions 🌿
- Code for the maintainer 🌱
- Code kata 🌱
- Code freeze 🌿
- Code reuse 🌿
- Cohesion 🌿
- Combinator 🌿
- Command Query Responsibility Segregation (CQRS) 🌱
- Command query separation 🌱
- Commit early, commit often 🌱
- Communication patterns 🌱
- Complexity 🌿
- Compliance 🌱
- Compliance testing 🌱
- Composition 🌿
- Computer-Aided Software Engineering (CASE) 🌿
- Change data capture (CDC) 🌱
- Computer science 🌱
- Computer vision 🌿
- Concatenative language 🌱
- Conceptual integrity 🌱
- Concurrency 🌿
- Configuration management 🌿
- Consensus algorithms 🌱
- Consistency 🌱
- Consistent hashing 🌱
- Container 🌱
- Container orchestration 🌳
- Containerization 🌳
- Content delivery networks 🌱
- Context engineering 🌿
- Continuous delivery 🌱
- Continuous deployment 🌱
- Continuous integration 🌱
- Conway’s law 🌳
- Connascence 🌿
- Coupling 🌳
- Crash-only 🌿
- Crash program 🌱
- Class-Responsibility-Collaboration (CRC) card 🌱
- Critical path analysis 🌱
- Cross-cutting concern 🌿
- Cross-functional teams 🌳
- Cross-site scripting 🌳
- Cryptography 🌿
- Crystal Clear 🌿
- Culture and folklore 🌱
- Cunningham’s law 🌱
- Curly’s law 🌱
- Cynefin framework 🌿
D
- DACI framework 🌱
- Data-driven programming 🌿
- Data engineering 🌱
- Data integrity 🌳
- Data mesh 🌳
- Data modeling 🌳
- Data-oriented architecture 🌳
- Data-oriented design 🌳
- Data retention 🌿
- Data structures 🌳
- Database branching 🌱
- Databases 🌱
- Database indexes 🌳
- Database query optimization 🌳
- Dead letter queue 🌿
- Deadlock 🌳
- Debugger 🌳
- Decomposition 🌳
- Decoupling 🌳
- Denormalization 🌳
- Dependency injection 🌳
- Dependency inversion 🌳
- Deployment pipeline 🌱
- Deployment strategies 🌿
- Design patterns 🌳
- Design principles 🌿
- Developer Certificate of Origin (DCO) 🌱
- Developer experience (DX) 🌱
- Developer tooling 🌱
- DevOps 🌿
- DHCP 🌱
- Diagramming 🌱
- Diagrams-as-code 🌱
- Directed acyclic graph (DAG) 🌱
- Disaster recovery 🌿
- Discovery 🌱
- Distributed caching 🌿
- Distributed databases 🌿
- Distributed file systems 🌿
- Distributed locking 🌿
- Distributed systems mechanisms 🌱
- Distributed system 🌱
- Distributed transaction 🌱
- DNS 🌱
- Do the simplest thing that could possibly work 🌱
- Do what I mean (DWIM) 🌱
- Docker 🌱
- Doerr’s law 🌱
- Document-oriented databases 🌿
- Document search 🌿
- Domain 🌱
- Domain-driven design 🌿
- Domain experts 🌱
- Domain engineering 🌱
- Domain model 🌱
- Domain-specific language (DSL) 🌱
- Downtime 🌱
- DRY – Don’t Repeat Yourself 🌱
- DSDM 🌱
- Durability 🌱
E
- ECMAScript 🌱
- Edge proxy 🌱
- Efficiency 🌱
- Egoless programming 🌱
- Elastic stack 🌱
- Encapsulate what changes 🌱
- Encapsulation 🌱
- Encryption 🌱
- End-user development (EUD) 🌳
- Enterprise application software (EAS) 🌿
- Enterprise architecture (EA) 🌿
- Enterprise resource planning (ERP) 🌿
- Entity Component System (ECS) 🌱
- Entity-Relationship Diagram (ERD) 🌳
- Envelope encryption 🌿
- ETL – Extract, Transform, Load 🌿
- Event bus 🌿
- Event-based systems 🌱
- Event-driven architecture 🌱
- Event sourcing 🌳
- Event storming 🌱
- Event stream 🌳
- Eventual consistency 🌳
- Evolvability 🌱
- Execution model 🌱
- Execution orchestrator 🌿
- Exploratory testing 🌿
- Extensibility 🌿
- Extreme Programming (XP) 🌿
F
- Factory 🌿
- Fail-fast 🌿
- Failover 🌿
- Fanout 🌿
- Fault tolerance 🌱
- Feature creep
- Feature-driven development 🌿
- Feature factory 🌱
- Feature flags 🌱
- File storage 🌿
- Firewalls 🌿
- FIRST principles of testing 🌱
- Fitness function 🌿
- Fitts’s law 🌱
- Flaccid agile 🌱
- Floating point arithmetic 🌿
- Forcing function 🌱
- Foreign keys 🌿
- Formal methods 🌿
- FTP 🌿
- Function-as-a-Service (FaaS) 🌿
- Functional requirements 🌳
- Functional testing 🌿
G
- Gall’s law 🌱
- Garage startup 🌱
- Generative AI 🌱
- Geohashing 🌿
- Gherkin 🌿
- Goodhart’s law 🌱
- Google Cloud Platform 🌱
- Gossip Protocol 🌿
- Governance 🌱
- Graceful degradation 🌱
- Graph databases 🌿
- GraphML 🌱
- Graph Modelling Language (GML) 🌱
- GraphQL 🌱
- GRASP 🌿
- Gray-box testing 🌱
- Greenspun’s tenth rule 🌱
- gRPC 🌱
- Grug-brained developer 🌱
H
- Hardware 🌿
- Hashing 🌿
- Heartbeat 🌱
- Hexagonal architecture 🌱
- High integrity 🌿
- High-level design 🌱
- High-performance computing (HPC) 🌿
- Hock principle 🌱
- Hofstadter’s law 🌱
- Horizontal scaling 🌱
- HTTP 🌱
- HTTP API 🌿
- Hyrum’s law 🌱
- Hypervisor 🌱
I
- ICMP 🌱
- ICONIX 🌱
- Idempotent 🌿
- Inception 🌱
- Information hiding 🌿
- Inheritance 🌱
- In-memory databases 🌳
- Infrastructure as code 🌿
- Input validation 🌳
- Installation testing 🌿
- Integrated development environments 🌱
- Integration testing 🌳
- Inter-process communication 🌱
- Interface definition language (IDL) 🌳
- Interface segregation principle 🌳
- Interfaces 🌳
- Internet Protocol (IP) 🌳
- Internet Protocol (IP) address 🌱
- Inversion of control 🌱
- Isolation 🌱
- Iterative and incremental development 🌳
J
K
- Kafka 🌳
- Kanban 🌿
- Kerckhoffs’s principle 🌱
- Kernighan’s law 🌱
- Key-value cache (KV cache) 🌱
- Key-value stores 🌳
- KISS principle 🌿
- Knowledge graph 🌱
- Kubernetes 🌿
L
- Language Server Protocol 🌱
- Lady Lovelace’s objection 🌱
- Large language model (LLM) 🌳
- Latency 🌳
- Law of Demeter 🌿
- Laws and principles 🌱
- Laws of software evolution 🌿
- Layered architecture 🌱
- Lazy loading 🌱
- Leaky abstractions 🌱
- Lean software development 🌿
- Leetspeak 🌱
- Lightweight text markup languages 🌱
- Lindy’s law 🌱
- Linting 🌱
- Linus’s law 🌱
- Linux 🌱
- Liskov substitution principle 🌿
- Literate programming 🌿
- Little’s law 🌱
- Load 🌿
- Load balancer 🌱
- Load balancing 🌿
- Load testing 🌿
- Local-first software 🌿
- Locking 🌿
- Logging 🌿
- Logic table 🌱
- Long polling 🌿
- Loop engineering 🌿
- Low-level design 🌱
M
- Machine learning 🌱
- Maker’s schedule 🌱
- Managed hosting 🌱
- Management information systems (MIS) 🌱
- Manual testing 🌿
- MapReduce 🌱
- Mashup 🌱
- Materialized view 🌿
- Mechanical sympathy 🌱
- Memoization 🌱
- Memory allocation 🌿
- Message broker 🌿
- Message-driven architecture 🌱
- Message queues 🌱
- Messaging protocols 🌿
- Metcalfe’s Law 🌱
- Metrics 🌱
- Micro front-end 🌿
- Microservices 🌳
- MIPS (Million Instructions per Second) 🌱
- Mob programming 🌿
- Model access layer 🌿
- Model Context Protocol 🌿
- Model-driven architecture (MDA) 🌿
- Model-driven development 🌿
- Modeling 🌿
- Modeling notations and methods 🌱
- Modular design 🌿
- Modular monolith 🌱
- Monitoring 🌿
- Monolith 🌱
- Moore’s law 🌱
- Multimodal AI 🌱
- Multi-tenant 🌿
- Mutation testing 🌱
- The Mythical Man-Month 🌱
N
- Nanoservices 🌿
- Natural language processing (NLP) 🌱
- Network protocols 🌿
- Ninety-ninety rule 🌱
- Non-functional requirements 🌳
- Nonce 🌿
- Normalization 🌿
- Norvig’s law 🌱
- NoSQL databases 🌿
- Not invented here! 🌱
O
- Object-oriented programming (OOP) 🌿
- Object storage 🌱
- On-call 🌱
- Observability 🌱
- Observer pattern 🌿
- Onion architecture 🌿
- Ontology 🌱
- Open-closed principle 🌳
- Open-weight model 🌿
- Optimize for deletion 🌱
- Orthogonality 🌱
- OSI model 🌿
- OWASP – Open Worldwide Application Security Project 🌿
P
- PACELC theorem 🌿
- Pagination 🌿
- Pair programming 🌿
- Parallelism 🌿
- Pareto principle 🌿
- Parkinson’s law 🌿
- Partition tolerance 🌱
- Peer-to-peer (P2P) architecture 🌳
- Penetration testing 🌳
- Performance 🌱
- Performance testing 🌱
- Persona 🌿
- Peter principle 🌿
- PERT chart 🌱
- Phased commit (2PC, 3PC) 🌱
- Pipe-and-filter 🌳
- Platform-as-a-service (PaaS) 🌱
- Platform engineering 🌿
- Polymorphism 🌿
- Ports and adapters 🌱
- POSIX 🌱
- Premature optimization 🌿
- Preprocessing 🌿
- Principle of least astonishment 🌿
- Privacy 🌿
- Problem space 🌱
- Processor architectures 🌿
- Product requirements document (PRD) 🌱
- Profiling 🌿
- Prompt engineering 🌱
- Programming paradigm 🌱
- Project paradox 🌱
- Prototyping 🌱
- Protocol Buffers 🌿
- Proxy server 🌿
- Publish-subscribe (pubsub) pattern 🌱
- Pull architecture 🌿
- Push architecture 🌿
Q
R
- RAAML - Risk Analysis and Assessment Modeling language 🌱
- RabbitMQ 🌱
- RAD 🌿
- Rainbow table 🌿
- Rate limiting 🌳
- Rational Unified Process 🌱
- Reactive programming 🌳
- Reactive systems 🌿
- Recovery testing 🌱
- Recursive self-improvement (RSI) 🌱
- Redis 🌱
- Redundancy 🌿
- Refactoring 🌿
- Referential integrity 🌱
- Regression testing 🌿
- Relational database management systems (RDBMS) 🌿
- Release early, release often 🌿
- Release model 🌿
- Remote procedure call (RPC) 🌱
- Replay attack 🌱
- Replication 🌱
- Request-response communication 🌿
- Requirements 🌿
- Requirements engineering 🌿
- Requirements and product management 🌱
- Resilience 🌿
- Resource-oriented architecture 🌳
- REpresentational state transfer (REST) 🌳
- Result cache 🌳
- Retry 🌿
- Reverse engineering 🌳
- Reverse proxy 🌳
- Ring zero escalation 🌿
- Robustness principle 🌿
- Role-based access controls 🌳
- Rollback 🌳
- Rolling deployments 🌳
- Rolling release 🌿
- Round-trip time (RTT) 🌳
- Rubber ducking 🌿
- Rule of least power 🌳
- Runbook 🌱
S
- Safety-critical system 🌳
- Saga 🌱
- Salt 🌱
- Sandbox 🌱
- Scaffolding 🌱
- Scalability 🌱
- Scaling laws 🌱
- Scatter-and-gather 🌱
- Scope creep 🌳
- Scrum 🌱
- Security 🌱
- Security headers 🌱
- Security testing 🌿
- Secure by design 🌱
- Self-contained system 🌱
- Semantic diffusion 🌱
- SEMAT 🌱
- Separation of concerns 🌱
- Serverless architecture 🌳
- Serverless computing 🌳
- Service discovery 🌿
- Service level agreement (SLA) 🌱
- Service mesh 🌿
- Server-Sent Events (SSE) 🌱
- Service-oriented architecture 🌱
- Sharding 🌱
- Shell 🌱
- Shift left 🌱
- Shirky principle 🌱
- Shrinkwrap software 🌱
- Structure and Interpretation of Computer Programs 🌱
- Silver bullet 🌱
- Single point of failure (SPOF) 🌱
- Single responsibility principle 🌱
- Single source of truth 🌳
- Singleton 🌳
- Site reliability engineering (SRE) 🌳
- Smoke testing 🌿
- SMTP 🌿
- Snapshot tests 🌱
- Software architecture 🌱
- Software-as-a-service (SaaS) 🌱
- Software assurance 🌿
- Software bloat 🌳
- Software craftsmanship 🌳
- Software delivery and operations 🌱
- Software design 🌳
- Software quality 🌿
- Software rot 🌿
- SOLID 🌿
- Spatial databases 🌱
- Spec-driven development (SDD) 🌿
- Specification by example 🌿
- Spiral model 🌿
- Spoofing 🌱
- Spring Framework 🌱
- SQL 🌿
- SQL injection 🌿
- SSADM 🌿
- SSRF (Server-Side Request Forgery) 🌿
- Stable abstractions 🌱
- Stack language 🌱
- Stamp coupling 🌿
- Stand-in 🌱
- State 🌱
- Stateful design 🌱
- Stateless 🌱
- Static analysis 🌱
- Stepwise refinement 🌱
- Story-driven modeling 🌱
- Strangler fig pattern 🌱
- Strategy pattern 🌱
- Stream processing systems 🌱
- Stress testing 🌱
- Structured data 🌱
- Structured programming 🌱
- Surgical team 🌱
- SWEBOK 🌱
- Synchronization 🌱
- Synchronous communication 🌱
- Systems Modeling Language (SysML) 🌱
- System design 🌿
- System requirements specification (SRS) 🌿
- System health checks 🌱
- System testing (aka end-to-end or e2e testing) 🌳
T
- Task queue 🌿
- TCP 🌱
- Technical debt 🌳
- Telemetry 🌿
- Tesler’s law 🌿
- Test-driven development 🌳
- Test harness 🌱
- Testing 🌳
- Thread safety 🌿
- Throughput (aka. bandwidth) 🌱
- Time series databases 🌳
- Time-share computing 🌿
- TOGAF – The Open Group Architecture Framework 🌿
- Top-down design 🌱
- Traceability 🌿
- Tracing 🌱
- Transactional databases 🌳
- Transaction 🌿
- Transformer architecture 🌱
- Trivial Graph Format (TGF) 🌱
- TPS report 🌱
- Trunk-based development 🌱
- TypeScript 🌱
U
- Ubiquitous language 🌱
- UDP 🌱
- Unified Modeling Language (UML) 🌳
- Unified Process 🌿
- Uniform access principle 🌿
- Unit testing 🌿
- Unix 🌱
- Unix philosophy 🌳
- Uptime 🌱
- Usability testing 🌱
- Use case 🌿
- User-centered design 🌿
- User story 🌳
V
- Value stream management 🌱
- Vector database 🌿
- Vega 🌱
- Version control 🌱
- Vertical scaling 🌿
- Vertical-slice architecture 🌱
- Vibe coding 🌱
- Virtual machine 🌱
- Virtualization 🌱
- Visibility 🌿
- Voice-to-text 🌱
- Vulnerability databases 🌱
W
- Walking skeleton 🌱
- Waterfall (aka. stepwise) model 🌿
- Ways of working 🌿
- Web-oriented architecture 🌿
- Webhook 🌱
- WebSockets 🌱
- WebRTC (Web Real-Time Communication) 🌱
- White-box testing 🌿
- Wicked problem 🌱
- Wide-column stores 🌿
- Wirth’s law 🌱
- Worse is better 🌿