← Back to Software Engineering

Software Engineering Glossary

Key terms from the Software Engineering course, linked to the lesson that introduces each one.

5,412 terms.

#

A

AA
(mid-range), and **AAA** (highest).
Lesson 584WCAG Compliance in Testing
AAA pattern
organizes every unit test into three distinct sections:
Lesson 432The AAA Pattern: Arrange, Act, Assert
ABAC
excels when decisions depend on context: time of day, location, device type, or resource attributes.
Lesson 1031Choosing and Evolving Authorization Models
Abbreviated approval chains
A designated "break glass" authority (often a senior engineer or on-call lead) can greenlight the release without full stakeholder sign-off
Lesson 1549Emergency Release Procedures
Abbreviated testing
– Focus on the specific fix and immediate blast radius, skip unrelated test suites
Lesson 1569The Hotfix Process and Risk Management
Absolute Timeout
sets a maximum session lifespan regardless of activity—perhaps 8 hours.
Lesson 1009Session Lifecycle and Expiration
Abstract classes
mix method declarations with actual implementation.
Lesson 219ISP and Language Features: Abstract Classes vs Interfaces
Abstract Factory
creates *families of related objects* that are designed to work together.
Lesson 238Abstract Factory vs Factory Method
Abstract Factory + Builder
An Abstract Factory can return Builders configured for a specific product family.
Lesson 254Combining Creational Patterns
Abstract Factory Interface
Declares methods for creating each type of product (`createButton()`, `createCheckbox()`)
Lesson 237Abstract Factory Pattern: Intent and Structure
Abstract Factory pattern
provides an interface for creating *families* of related objects without your code needing to know the concrete classes.
Lesson 237Abstract Factory Pattern: Intent and Structure
Abstract Product Interfaces
Define what each product type can do (`Button`, `Checkbox`)
Lesson 237Abstract Factory Pattern: Intent and Structure
Abstraction and Information Hiding
when you hide implementation details behind a single interface, you naturally avoid duplication.
Lesson 168Don't Repeat Yourself (DRY)Lesson 172Program to an Interface, Not an ImplementationLesson 188Stable Interfaces and Implementation Flexibility
Abstraction hierarchy
Different remote types (basic remote, smart remote, voice remote)
Lesson 260The Bridge Pattern: Separating Abstraction from Implementation
Abstractions
interfaces and abstract classes—are the key tools that make this possible.
Lesson 190Extensibility Through AbstractionsLesson 260The Bridge Pattern: Separating Abstraction from Implementation
Accept reduced coding time
You won't write as much production code.
Lesson 1789Balancing Coding and Leadership
Accept the request
and quickly return a response ("We'll process that!
Lesson 1385Asynchronous Processing and Message Queues
Accept when
The reviewer raises valid concerns about bugs, readability, maintainability, or team standards you missed.
Lesson 1619Receiving Code Review Feedback
Acceptance Criteria
and **Definition of Done**.
Lesson 149Acceptance Criteria vs Definition of Done
Accepted
The team has agreed and implementation is underway or complete
Lesson 1703ADR Status and Lifecycle
Access
them in your code like any environment variable
Lesson 642Environment Variables and Secrets
Access control changes
A user requests elevated permissions, but only an administrator can grant them
Lesson 1037Separation of Duties
Access Control List (ACL)
is a straightforward authorization model that attaches a list of permissions directly to each resource.
Lesson 1026Access Control Lists (ACLs)
Access it from anywhere
(different devices)
Lesson 73What Are Remote Repositories
Access methods
Whether it's using an index or scanning the entire table
Lesson 879Understanding Query Execution Plans
access token
(expires in 15 minutes) and a **refresh token** (expires in 7 days)
Lesson 1013Token Refresh and RotationLesson 1017OAuth2 Fundamentals and the Delegation Problem
Access tokens
are short-lived credentials that grant access to protected resources—think of them as temporary visitor badges.
Lesson 1021Access Tokens, Refresh Tokens, and Token Lifetime
Accessibility debt
Will skipping WCAG compliance now lock out users for years?
Lesson 1933Long-term Thinking and Digital Stewardship
Accessibility requirements
ensure your software can be used by people with disabilities—including visual, hearing, motor, or cognitive impairments.
Lesson 130Usability and Accessibility Requirements
Accessible
in wikis, READMEs, or onboarding materials
Lesson 1831Codifying and Evolving Principles
Accidentally exposed
when you commit code to version control
Lesson 740What Are Secrets and Why They Matter
Accountability vanishes
You can't audit who did what and when
Lesson 1119Why Logging Matters
Achieves 1NF
Separate rows for each phone number, or a separate `StudentPhones` table.
Lesson 861The Normal Forms (1NF, 2NF, 3NF)
Achieves 2NF
Move `StudentName` to a separate `Students` table.
Lesson 861The Normal Forms (1NF, 2NF, 3NF)
Achieves 3NF
Create a separate `ZipCodes` table linking zip codes to cities.
Lesson 861The Normal Forms (1NF, 2NF, 3NF)
ACID guarantees
across your entire system.
Lesson 1289Benefits of Modular Monoliths
Acknowledge data limitations
Not everything is quantifiable.
Lesson 1829Data-Driven Decision Making
Acknowledge quickly
Even if you can't review immediately, comment "Will review this afternoon" so the author knows it's on your radar.
Lesson 1622Review Timing and Response Expectations
Acknowledge the situation explicitly
"We've had a thorough discussion, but we need to move forward.
Lesson 1816Making Decisions When Consensus Fails
Acknowledge valid points
explicitly: "Good catch!
Lesson 96Responding to Review Feedback
Acknowledgment matters
Escalation stops when someone confirms they're handling it
Lesson 1161Alert Routing and Escalation Policies
ACLs
work well for document-sharing systems where ownership is clear and permissions are straightforward (think: Google Docs).
Lesson 1031Choosing and Evolving Authorization Models
Across partitions
no ordering guarantee exists.
Lesson 1362Message Ordering and Partitioning
Act
steps (from the AAA pattern), your **Assert** section should verify one logical outcome.
Lesson 433Testing One Thing at a TimeLesson 446Arrange-Act-Assert Pattern
Action items
Concrete improvements with owners and deadlines
Lesson 1742Learning from Production Incidents
Action-focused
Describe behavior, not implementation details
Lesson 444Naming Test Methods Clearly
Action-oriented
Should produce decisions or plans, not just discussion
Lesson 1600What Are Agile Ceremonies?
Actionable
(specific enough to guide decisions)
Lesson 1621Review Checklists and Standards
actions
(verbs like "getUser," "createOrder," "calculateShipping").
Lesson 798What is RPC and How It Differs from RESTLesson 804When to Choose RPC Over REST
Active
"The scheduler calls the function.
Lesson 1691Clear and Concise Technical Writing
Active support phase
Full feature backports, bug fixes, and security patches
Lesson 1571Long-Term Support (LTS) Fundamentals
Active Use
– Applications authenticate using the secret
Lesson 745Secret Rotation and Lifecycle Management
Acyclic
You can't follow the arrows in a circle back to where you started
Lesson 65Understanding Git History as a DAG
Adapt the Product Backlog
based on new insights or market changes
Lesson 1589Sprint Review
Adapt to changes
in technology (new operating systems, security requirements, hardware)
Lesson 4Time: Maintenance Over Initial Development
Adaptation
– Make adjustments based on what you learn
Lesson 1600What Are Agile Ceremonies?
Adapter + Bridge
Adapt third-party APIs while keeping your abstraction separate from implementation details
Lesson 285Combining Multiple Structural Patterns
Adapters
are like specialized bridges or mechanisms that connect those ports to the outside world.
Lesson 1264The Ports and Adapters PatternLesson 1279Testing in Clean Architecture
Add columns
with default values or as nullable
Lesson 717Database Schema Deployment
Add it back
to handle traffic
Lesson 711Rolling Deployments
Add maintenance overhead
– when real implementations change, your doubles need updating
Lesson 473The Cost-Benefit Trade-offs of Test Doubles
Add minimum duration thresholds
require a condition to persist for 2-5 minutes before alerting.
Lesson 1158Alert Fatigue: Reducing False Positives
Add new implementations freely
Create new classes that fulfill the contract without touching existing code
Lesson 190Extensibility Through Abstractions
Add new operations easily
Create a new visitor class instead of modifying existing element classes
Lesson 318Visitor Pattern: Operations on Object Structures
Add performance characterization tests
when optimization matters.
Lesson 519Performance-Critical Code
Add performance tests
If speed matters, write tests that measure it
Lesson 506TDD and Performance Optimization
Add retry logic
for transient failures
Lesson 576Handling External Services
Added complexity
More code means more to test, debug, and maintain
Lesson 170You Aren't Gonna Need It (YAGNI)
Adding details
Flesh out acceptance criteria and clarify requirements for upcoming work
Lesson 157Backlog Management
Adding forgotten files
to the staging area
Lesson 113Amending and Fixing Work-in-Progress Commits
Adding new endpoints
– existing clients ignore them
Lesson 847Breaking vs Non-Breaking Changes
Adding new response fields
– well-behaved clients ignore unknown fields
Lesson 847Breaking vs Non-Breaking Changes
Adding new states
is likely (system will evolve)
Lesson 311State Pattern vs Conditional Logic
Adding optional parameters
– older requests still work
Lesson 847Breaking vs Non-Breaking Changes
Adding required parameters
– requests missing the new mandatory field are rejected
Lesson 847Breaking vs Non-Breaking Changes
Additional Method Calls
A Decorator wraps another object, forwarding each method call.
Lesson 282Performance Overhead of Structural Patterns
Additional Pointers
Links to more detailed documentation (like API references, architecture docs, or user guides you've created), contribution guidelines, license information, and contact/support channels.
Lesson 1683README Files
Additive changes only
Add new fields or endpoints without removing old ones
Lesson 552Contract Versioning and Evolution
Address concerns
Anticipate questions each stakeholder will ask
Lesson 1252Communicating Architecture to Stakeholders
Address feedback point-by-point
Don't ignore comments or respond defensively
Lesson 1619Receiving Code Review Feedback
Address systemic issues
If testing is always slow, invest in test automation or additional tooling.
Lesson 1597Identifying and Resolving Bottlenecks
Addresses one logical change
one feature, one bug fix, one refactoring
Lesson 92Pull Request Size and Scope
Adjust direction
based on real feedback before investing heavily
Lesson 1661Vertical Slicing
Adjust minimally
Only adjust for genuinely unique factors with evidence
Lesson 1653Reference Class Forecasting
Adjust thresholds
that are too sensitive or too permissive
Lesson 1162Alert Evaluation: Regular Review and Refinement
Adoption metrics
How many teams/services have migrated to the new architecture?
Lesson 1810Measuring Progress Toward Vision
Advance Notice Period
Announce deprecation well before shutdown—commonly 6-12 months for public APIs, sometimes longer for enterprise contracts.
Lesson 849Deprecation Policies and Timelines
Advantage
You can adapt any class that shares the same interface (or even multiple different classes).
Lesson 257Class vs Object Adapters
Advocating in promotion discussions
"Sarah should be promoted—here's the impact she's had on our architecture migration.
Lesson 1801Sponsorship and Career Development
Affected Scope
Include labels or tags showing which instances, regions, or customers are impacted.
Lesson 1160Alert Context: Including Diagnostic Information
Affinity mapping
to group similar-sized stories
Lesson 1610Planning Poker and Estimation Techniques
After applying DIP
, something remarkable happens:
Lesson 224The Dependency Flow vs Control Flow
After coding (Test-After Development)
You implement features first, then add tests.
Lesson 401When to Write Tests: Before, During, or After
After deployment
Run smoke tests to verify the deployment succeeded
Lesson 561E2E Test Execution StrategyLesson 965Cache Warming and Preloading
After each change
Run tests immediately
Lesson 332The Refactoring Safety Net
After infrastructure changes
(new database, caching layer, scaling strategy)
Lesson 1212Introduction to Load Testing
After inversion
`ReportGenerator` depends on an `IDatabase` interface it defines.
Lesson 223Inverting Dependencies with Interfaces
After writing to disk
Slower, but survives crashes
Lesson 1360Message Durability and Persistence
Agent-based tools
like Puppet and Chef run agents on each node that regularly check in and report differences.
Lesson 1492Configuration Drift Detection
Agentless tools
like Ansible can schedule drift detection jobs that SSH in and verify configuration.
Lesson 1492Configuration Drift Detection
Aggregate early
Collect summary statistics instead of individual records when possible
Lesson 1901Data Minimization Principle
Aggregation
Consider storing summarized metrics instead of raw logs for long-term trend analysis.
Lesson 1126Log Retention and StorageLesson 1129What is Structured Logging
Aggregation and Statistics
Compute meaningful metrics:
Lesson 1135Querying and Analyzing Structured Logs
Aggregations happen frequently
Storing pre-calculated totals (like `order_total` alongside order items) avoids re-summing every time
Lesson 865Strategic Denormalization
Aggressive approach
Update everything frequently to avoid falling too far behind, but invest heavily in automated testing.
Lesson 677Dependency Updates and Semantic Versioning
Agile Manifesto
four core values and twelve principles that prioritized adaptability, customer collaboration, and delivering value quickly.
Lesson 1574The Birth of Agile: Context and History
Agile's
daily collaboration and quick decisions.
Lesson 16Choosing an SDLC Model for Your Project
Agility and Change
Paradoxically, spending time on architecture *speeds you up* long-term.
Lesson 1224Why Architecture Matters
Alert on metrics
(error rate exceeds 5%)
Lesson 1136Metrics vs Logs vs Traces
Alert or block
deployments that fail regression checks
Lesson 1211Baseline Metrics and Regression Detection
Alerting on transient issues
that self-heal before anyone can respond
Lesson 1158Alert Fatigue: Reducing False Positives
Algorithms with clear invariants
When you can state rules that should *always* hold (like "sorting should preserve all elements" or "encoding then decoding returns the original"), property-based testing can verify these across thousands of generated inputs you'd never think to ma...
Lesson 612When Property-Based Testing Shines
Aliases
let you rename fields in the response.
Lesson 810Aliases and Fragments
Align expectations
– everyone agrees on "done" before work starts
Lesson 147What are Acceptance Criteria?
Alignment
across teams on how to solve technical problems
Lesson 1803Defining Technical Vision
All branches
(though you'll start on the default branch)
Lesson 54Cloning Existing Repositories
All files
in the project's working directory
Lesson 54Cloning Existing Repositories
Allocation frequency
How often allocations occur
Lesson 1197Memory Profiling and Heap Analysis
Allocation sites
Which code locations create objects
Lesson 1197Memory Profiling and Heap Analysis
Allocation sizes
How much memory each allocation consumes
Lesson 1197Memory Profiling and Heap Analysis
Allow all printable characters
including spaces to support passphrases.
Lesson 1004Password Strength Requirements and Policies
ALLOW-FROM uri
Can be framed only by specified URI (deprecated, poorly supported)
Lesson 1073X-Frame-Options and Frame Ancestors
Almost never
Most applications naturally avoid multi-valued dependencies through proper domain modeling.
Lesson 863Higher Normal Forms (4NF, 5NF)
Alternative implementations
Compare against a simpler, trusted reference
Lesson 608The Test Oracle Problem
Alternative service
Try a backup data source or service
Lesson 1100The Fallback Pattern
Alternatives
What else was considered and why it wasn't chosen
Lesson 1698What Are Architecture Decision Records (ADRs)?
Alternatives considered
Other approaches you evaluated and why you rejected them
Lesson 1686Design Documents and RFCs
Always clean up
Use setup/teardown methods to ensure temporary files disappear even when tests fail
Lesson 535Testing File System Operations
Always in sync
with your API—regenerate whenever the spec changes
Lesson 856Auto-Generated vs Hand-Written SDKs
Always-on profiling
at 1-5% overhead using continuous sampling
Lesson 1199Profiling in Production vs Development
Ambiguity
GPL v2 left questions about network services (SaaS loophole) and patent rights.
Lesson 1866The GNU GPL Family
Amend recent mistakes
Use `git commit --amend` to fix typos or incomplete work
Lesson 114Commit Hygiene Before Push
Amplification
means repeating or crediting ideas from underrepresented colleagues when they're overlooked.
Lesson 1854Allyship and Advocacy in Engineering
Analytics Context
subscribes, updates reports
Lesson 1285Domain Events for Context Integration
Analyze alert frequency
Which alerts fire most often?
Lesson 1162Alert Evaluation: Regular Review and Refinement
Analyze the distribution
Look at the range—what was typical?
Lesson 1653Reference Class Forecasting
Anchor your estimate
Use the historical median or a conservative percentile (e.
Lesson 1653Reference Class Forecasting
Anchoring
Early estimates (even wild guesses) influence later thinking
Lesson 1648Why Estimation is HardLesson 1650Planning Poker and Consensus Estimation
Annotated tags
are full Git objects that store the tagger's name, email, date, and a message.
Lesson 1556Version Tagging in Git
Annotations
are also key-value pairs, but they're for storing non-identifying metadata that you *don't* query on.
Lesson 1445Labels, Selectors, and Annotations
Announce early and clearly
Communicate the sunset timeline through documentation, deprecation headers, emails to registered API consumers, and changelog updates.
Lesson 853API Sunset and End-of-Life
Announce the change
and set a deprecation timeline
Lesson 552Contract Versioning and Evolution
Anomaly detection
spotting unusual patterns that static rules miss
Lesson 1157Threshold Selection: Static vs. Dynamic Baselines
Anonymization
irreversibly removes all identifying information so that individuals cannot be re-identified, even with additional data.
Lesson 1904Anonymization and Pseudonymization
Anonymized resume screening
removes names, graduation years, and other identifiers that trigger bias before you've even met the candidate.
Lesson 1853Inclusive Hiring and Onboarding Practices
Another example
The Classpath Exception in OpenJDK allows linking GPL Java libraries into non-GPL applications, solving a major compatibility problem.
Lesson 1876Dual Licensing and License Exceptions
Ansible Vault
encrypt entire files or individual variables.
Lesson 1493Secrets Management in Configuration Tools
Anticipating Change vs. Over-Engineering
(lesson 187)?
Lesson 188Stable Interfaces and Implementation Flexibility
Any phase → Process
Retrospectives help teams refine *how* they work
Lesson 17Feedback Loops Across the SDLC
AP system
(Availability + Partition tolerance), the system remains operational and responsive during network partitions, even if that means different nodes temporarily return different data.
Lesson 1409AP Systems: Choosing Availability Over Consistency
AP systems
Social media feeds, analytics dashboards (serve stale data rather than error)
Lesson 1406The CAP Theorem: Consistency, Availability, and Partition Tolerance
Apache 2.0
→ **GPL v2** (patent clause incompatibility)
Lesson 1873GPL License Compatibility Rules
Apache 2.0 License
(permissive with patent grants)
Lesson 1871What is License Compatibility
Apache Kafka
High-throughput, event streaming platform
Lesson 1316Message Queues for Async Communication
API changes
Method signatures, new endpoints, deprecated functions
Lesson 1708Documentation Review in Code Review
API clients
Ensuring only authorized systems can call your API
Lesson 996Certificate-Based Authentication
API compatibility vigilance
Never backport fixes that require API changes.
Lesson 1572Backporting Fixes to LTS Versions
API Composition
Aggregates responses from multiple services into a single response, reducing the number of round trips clients must make.
Lesson 1327API Gateway Pattern
API contracts
Does Module A call Module B's methods with the right parameters?
Lesson 525Testing Cross-Module Communication
API Gateway
is a server that acts as a single entry point for all external clients (web apps, mobile apps, third- party systems) into your microservices ecosystem.
Lesson 1327API Gateway Pattern
API Gateway/Edge Layer
The first line of defense.
Lesson 1030Implementing Authorization in Applications
API or service boundaries
Existing interfaces where calls enter/exit components
Lesson 1775Identifying Strangulation Boundaries
API version 1.x
→ **SDK version 1.
Lesson 852Client Library Versioning
API version 2.x
→ **SDK version 2.
Lesson 852Client Library Versioning
APIs
for instrumenting your code (creating spans, recording metrics)
Lesson 1152OpenTelemetry and Tracing Standards
Application defaults
(hardcoded fallbacks)
Lesson 729Default Values and Configuration Hierarchies
Application packages
JARs, WARs, or static binaries with bundled dependencies
Lesson 1475Building Immutable Artifacts
Application Performance Index (Apdex)
converts response time measurements into a user satisfaction score between 0 and 1.
Lesson 1210Apdex and User-Centric Metrics
Application servers
are immutable containers or instances that hold no local state
Lesson 1477Handling State in Immutable Systems
Application startup
Load top products, user profiles, or configuration data
Lesson 965Cache Warming and Preloading
Application startup warming
Run a script that queries common endpoints or data during deployment, populating caches before traffic arrives.
Lesson 989Cache Warming and Preloading
Application state mismatch
Your application code might have already processed data using the new schema.
Lesson 889Forward-Only Migration Philosophy
Application-layer caching
Your application stores computed results or query responses in memory (like Redis or Memcached).
Lesson 1384Caching to Reduce Load
Application-level rules
Custom validations your code implements
Lesson 898The Consistency Property
Application/Business Logic Layer
This is where fine-grained authorization lives.
Lesson 1030Implementing Authorization in Applications
Applications in production
Often pin everything (combined with lock files) for maximum stability and predictability
Lesson 673Pinning vs Flexible Versioning
Applications requiring instant revocation
since you control the session store directly
Lesson 1016Sessions vs Tokens: Choosing the Right Approach
Apply each event
to the state using your aggregates or projections
Lesson 1349Rebuilding State from Events
Approval is required
One or more teammates must approve before merging
Lesson 90What is a Pull Request?
Approval Testing
(also called characterization testing) is powerful for complex legacy systems.
Lesson 1756Preserving Behavior While Changing StructureLesson 1762Approval Testing for Complex Outputs
Approve/Reject
Decision-makers accept, defer, or deny
Lesson 162Change Request Processes
Approximate reporting
where exact precision isn't critical (dashboard counts, analytics)
Lesson 905Read Uncommitted Isolation
Architect
archetypes operate across multiple teams or domains, focusing on technical design and system coherence.
Lesson 1819The Four Staff Archetypes
Architectural impact
Where do you encrypt?
Lesson 1243Security as a Quality Attribute
Architectural mistake
Weeks to months (restructure multiple systems)
Lesson 1225The Cost of Architectural Mistakes
Architectural Strategy
Microservices with independent deployment pipelines, feature flags, automated testing
Lesson 1233Business Goals and Architecture Alignment
Architectural Tests
Write automated tests that verify dependencies.
Lesson 1291Enforcing Module Independence
Architecturally Significant Requirements (ASRs)
are those that have profound impact on your system's structure, technology choices, or ability to meet quality attributes.
Lesson 1234Identifying Architecturally Significant Requirements
architecture
determines the overall layout—where rooms go, how floors connect, structural support, electrical and plumbing systems.
Lesson 1219Defining Software ArchitectureLesson 1223Architecture vs. Design
Architecture alignment
means translating these goals into technical decisions that make them achievable.
Lesson 1233Business Goals and Architecture Alignment
Architecture diagrams
show how systems, services, and components connect.
Lesson 1693Visual Aids and Diagrams
Architecture Discussions
Ideas from louder voices or more senior engineers often receive disproportionate weight, even when quieter team members propose equivalent or superior solutions.
Lesson 1850Unconscious Bias in Technical Decisions
Architecture governance
is the framework of processes, policies, and practices that ensure technical decisions align with organizational goals and standards.
Lesson 1251Architecture Governance and Standards
Architecture tests
Automated checks that fail if a layer imports from the wrong place
Lesson 1257Layer Responsibilities and Boundaries
ArgoCD
provides a more feature-rich experience with a web UI, multi-cluster support, and sophisticated sync policies.
Lesson 1498GitOps Tools and Operators
Arguments
let you pass parameters directly into fields to filter, specify, or modify what you get back.
Lesson 809Arguments and VariablesLesson 811Resolvers: The Execution Layer
ARIA labels
`role="button" aria-label="Submit form"` – semantic and accessibility-friendly
Lesson 563Locator Strategies and Best Practices
Arrange
and **Act** steps (from the AAA pattern), your **Assert** section should verify one logical outcome.
Lesson 433Testing One Thing at a TimeLesson 446Arrange-Act-Assert Pattern
Arrange-Act-Assert (AAA)
pattern is a testing structure that organizes your test into three distinct sections, each with a specific purpose.
Lesson 446Arrange-Act-Assert Pattern
Array to Container
→ use more sophisticated data structures
Lesson 500The Transformation Priority Premise
As a
identifies the persona or role (e.
Lesson 144The User Story Format
Ask the right person
Identify who to consult about specific code
Lesson 118Git Blame: Tracing Code Origins
Asking about pain points
What frustrates them today?
Lesson 126User Requirements
Asking questions
No one knows everything; great engineers ask for help when stuck
Lesson 3The Human Element: Teams and Communication
Aspect-Oriented Programming (AOP)
Apply concerns as "wrappers" around layer operations, keeping the core layer code clean.
Lesson 1260Cross-Cutting Concerns in Layers
Assess concurrency needs
How many users/processes will access the same data simultaneously?
Lesson 910Choosing the Right Isolation Level
Assess impact
Estimate effort, timeline changes, and dependencies
Lesson 158Scope Creep and Change Control
Assess severity
Confirm the issue truly warrants bypassing normal processes
Lesson 1568What are Hotfixes and When to Use Them
Assign weights
percentages that total 100% (e.
Lesson 155Weighted Scoring Models
Assignable
to a single developer or pair
Lesson 1660Decomposing Features into Tasks
Assigning stretch opportunities
Deliberately choosing someone for a challenging project that will build their credibility.
Lesson 1801Sponsorship and Career Development
Association mapping patterns
bridge this gap, defining how your ORM handles the different types of relationships between entities.
Lesson 943Association Mapping Patterns
Assuming authorization state persists
across multiple actions
Lesson 1036Complete Mediation
Assumptions
are beliefs you're taking as true—things you *expect* to be the case, but haven't fully verified yet.
Lesson 132Constraints and AssumptionsLesson 1684Code Comments and Inline Documentation
Async patterns
Don't block waiting for responses.
Lesson 1113Fallacy 2: Latency is Zero
Asynchronous (Event-Based)
Service A sends a message or event and continues working without waiting.
Lesson 1313Synchronous vs Asynchronous Communication
Asynchronous and distributed systems
make debugging nearly impossible.
Lesson 1735Debugger Limitations and When to Use Alternative Tools
Asynchronous logging
queues log messages in memory and writes them on a separate thread.
Lesson 1127Logging Performance Considerations
Asynchronous processing
means separating the *acceptance* of work from its *execution*.
Lesson 1385Asynchronous Processing and Message QueuesLesson 1388What is Load Balancing?
Asynchronous replication
The leader acknowledges writes immediately without waiting for followers.
Lesson 1402Leader-Follower Replication
Asynchronous updates
Use written documentation so people can catch up on their schedule
Lesson 25Communication Channels and Stakeholder Management
At API endpoints
Catch all exceptions at the controller/handler level.
Lesson 1092Error Handling at System Boundaries
Atomic changes
Update a shared library and all consumers in one commit
Lesson 684Monorepo Dependency Management
Atomic commits
Should a distributed transaction commit or abort across all services?
Lesson 1414The Distributed Consensus Problem
Atomic Operations
Use database-level operations like `UPDATE accounts SET balance = balance + 50` instead of read-modify-write sequences.
Lesson 911Lost Update Problem
Atomicity
requires tracking transaction state and maintaining the ability to rollback, which means extra logging and coordination work.
Lesson 901ACID Trade-offs and Performance
Attack surface
refers to the sum total of all possible entry points an attacker could use to compromise your system.
Lesson 1038Minimize Attack Surface
Attempt all operations
(potentially in parallel)
Lesson 1110Partial Response Strategies
Attribute-Based Access Control (ABAC)
evaluates multiple attributes to determine access.
Lesson 1028Attribute-Based Access Control (ABAC)
Audit changes
with full history of who changed what and when
Lesson 1561Feature Flag Management Systems
Audit logs
record every access attempt—successful or failed.
Lesson 746Access Control and Audit Logging for Secrets
Audit regularly
Scan all direct and transitive dependencies for their licenses.
Lesson 683Dependency License Compliance
Audit trail
Complete history for compliance and retrospectives
Lesson 163Version Control for RequirementsLesson 1349Rebuilding State from Events
Audit unused flags
flags never queried in production logs
Lesson 1566Flag Debt and Cleanup Strategies
Auditability
When investigating an incident, you can rebuild old versions and know you're testing the *exact* code that was deployed.
Lesson 691Benefits and Trade-offsLesson 1040Security Logging and Auditability
Auditable
Event streams provide a history of what changed and when
Lesson 980Event-Driven InvalidationLesson 1453Declarative Configuration with YAML
Auditing
You know exactly what code ran at any point in history
Lesson 671Lock Files and ReproducibilityLesson 681Dependency Pruning and Auditing
authentication
is proving you're a guest (showing your ID at check-in), while **authorization** is determining which room you can enter (your key card only opens *your* room, not others).
Lesson 1025Authorization Fundamentals: Who Can Do WhatLesson 1035Security by Design, Not ObscurityLesson 1115Fallacy 4: The Network is Secure
Authentication bypass
Lesson 1044A03: Injection
Authentication Setup
How to obtain credentials (API keys, tokens, OAuth flows)
Lesson 835Getting Started Guides
Authentication/Authorization
Verifying tokens and basic permissions
Lesson 1328Gateway Responsibilities and Trade-offs
Author filter
`git log --author="Jane"` shows commits by a specific person
Lesson 117Reading Git Log: Understanding Commit History
authorization
is determining which room you can enter (your key card only opens *your* room, not others).
Lesson 1025Authorization Fundamentals: Who Can Do WhatLesson 1035Security by Design, Not ObscurityLesson 1115Fallacy 4: The Network is Secure
Authorization Server
"Yes, give this app limited access" (You approve on Google's login page)
Lesson 1018OAuth2 Roles and Authorization Flow
Auto-generated code
Framework scaffolding, build artifacts, or code produced by tools shouldn't count against you.
Lesson 597Excluding Code from Coverage
Auto-generated SDKs
Use tools to create SDKs directly from your OpenAPI specification or schema
Lesson 856Auto-Generated vs Hand-Written SDKs
Auto-merge policies
(patch versions pass tests → merge)
Lesson 685Automating Dependency Updates
Auto-scaling
New instances appear automatically
Lesson 1323Service Discovery Fundamentals
Automate
Use tools like Certbot or ACME clients to handle renewal automatically
Lesson 1077Certificate Management and Mixed Content
Automate alerts
when untagged resources appear
Lesson 1536Cost Allocation and Tagging Strategies
Automate checks
Integrate license scanning into your CI pipeline to catch violations before they reach production or customers.
Lesson 683Dependency License Compliance
Automated audits
that report flag age and usage
Lesson 1566Flag Debt and Cleanup Strategies
Automated Decision
When metrics breach predefined thresholds for a sustained period (e.
Lesson 722Monitoring and Automated Rollback Triggers
Automated Detection
Sync agents (like ArgoCD or Flux) continuously poll both the Git repository and the live infrastructure, comparing them.
Lesson 1497The GitOps Workflow
Automated Reconciliation
The agent automatically applies the Git-declared configuration to the infrastructure, bringing it back into alignment with the desired state.
Lesson 1497The GitOps Workflow
Automated Refactorings
are your safest bet.
Lesson 1756Preserving Behavior While Changing Structure
Automated rollback capability
pre-tested and ready
Lesson 1549Emergency Release Procedures
Automated scheduling
Decides which machine runs each container based on resources
Lesson 1442What is Kubernetes and Why Use It
Automated Security Test Suites
integrate security checks into your regular testing pipeline.
Lesson 421Security Tests: Finding Vulnerabilities
Automated Testing
Your CI pipeline runs tests against the proposed change
Lesson 685Automating Dependency Updates
Automated tooling
Generate client SDKs, server stubs, and tests directly from the schema
Lesson 841Benefits of Schema-First Development
Automatic instrumentation
uses libraries or agents that intercept common operations (HTTP requests, database calls, RPC invocations) and create spans for you without modifying your code.
Lesson 1149Instrumenting Code for TracingLesson 1152OpenTelemetry and Tracing Standards
Automatic optimization
If `compile` is already up-to-date, the tool can skip it.
Lesson 663Task Dependencies and Ordering
Automatic restarts
When a container crashes, the orchestrator (like Kubernetes) automatically spins up a replacement.
Lesson 1508Designing for Failure and Self-Healing
Automatic scaling
From zero to thousands without configuration
Lesson 1519What is Serverless and Function as a Service
Automating quality checks
in your development environment and CI pipeline, so feedback is instant
Lesson 1835Building Quality In
Automation is critical
manual renewal is error-prone.
Lesson 1077Certificate Management and Mixed Content
Automation works
CI pipelines can validate formatting, check broken links, or deploy docs automatically
Lesson 1706Documentation as Code
Autonomy
Teams can change schemas, upgrade database technology, or optimize queries without coordinating with other teams.
Lesson 1307Database Per Service PatternLesson 1309Data Duplication vs Data Coupling Trade-offs
Availability (A)
Every request receives a response (success or failure), without guarantee that it contains the most recent data.
Lesson 1406The CAP Theorem: Consistency, Availability, and Partition ToleranceLesson 1411The PACELC Extension to CAP
Availability of patches
(can you upgrade safely?
Lesson 679Dependency Vulnerability Scanning
Availability risk
One service down affects others
Lesson 1309Data Duplication vs Data Coupling Trade-offs
Availability vs Consistency
Distributed systems famously face this trade-off.
Lesson 1247Quality Attribute Trade-offs
Available but unreliable
The machine is always powered on and accepts your money (high availability), but occasionally gives you the wrong snack or wrong change (low reliability).
Lesson 1241Availability and Reliability
Available hours
Account for holidays, time off, meetings, and on-call duties
Lesson 1602Effective Sprint Planning Practices
Average velocity: ~40 points/sprint
Lesson 1656Velocity and Capacity Planning
Avoid alert storms
Group related alerts to prevent waking the entire chain for correlated failures
Lesson 1161Alert Routing and Escalation Policies
Avoid bias
Don't ask "Don't you agree our new feature would be amazing?
Lesson 139Questionnaires and Surveys
Avoid Facade
if your subsystem only has three simple methods—direct calls are clearer
Lesson 283When Structural Patterns are Overkill
Avoid GPL
if you want maximum adoption in commercial products—many companies prohibit GPL dependencies due to copyleft obligations.
Lesson 1866The GNU GPL Family
Avoid implementation details
Don't say "When the database query returns results.
Lesson 148Writing Clear Acceptance CriteriaLesson 563Locator Strategies and Best Practices
Avoid local file storage
Don't write user files to the server's disk
Lesson 1393Stateless Application Design
Avoid over-engineering
Simple tests prevent you from building unnecessary complexity
Lesson 497Starting with the Simplest Test
Avoid shared mutable state
Global variables or singleton patterns that hold state between tests are dangerous.
Lesson 440Avoiding Test Interdependence
Avoid shell execution entirely
Use language-native APIs instead (like file system libraries rather than `ls` commands)
Lesson 1057Command Injection and OS Command Execution
Avoid tunnel vision
by systematically exploring multiple attack scenarios
Lesson 1082Attack Trees and Risk Prioritization
Avoiding fragility
Deep inheritance chains break easily when parent classes change.
Lesson 173Favor Composition Over Inheritance
Avoiding interruptions
that derail the stakeholder's train of thought
Lesson 134Interview Techniques for Requirements
Avoiding new bugs
Multiple simultaneous changes can accidentally introduce new issues while fixing old ones.
Lesson 1716Making One Change at a Time
Avoiding over-engineering
Complexity often stems from solving hypothetical future problems.
Lesson 1825Simplicity Over Complexity
Avoids race conditions
Multiple concurrent updates won't leave inconsistent cached values
Lesson 979Cache-Aside Invalidation Pattern
AWS CloudFormation
and **Azure Resource Manager (ARM) templates**.
Lesson 1485Introduction to CloudFormation and ARM Templates
AWS KMS
, **Azure Key Vault**, and **Google Cloud KMS** manage encryption keys with hardware-level security.
Lesson 1516Managed Identity and Security Services
AWS SQS/SNS
Managed simplicity, cloud-native, but vendor lock-in.
Lesson 1365Choosing a Message Broker: RabbitMQ, Kafka, and Others
Azure Pipelines
(tight Microsoft ecosystem integration), **Bitbucket Pipelines** (Atlassian ecosystem), and **TeamCity** (JetBrains' enterprise offering).
Lesson 637Popular CI Platforms

B

Backend
Include your real application server and business logic.
Lesson 556E2E Test Scope and Boundaries
Background Refresh
Asynchronously fetch fresh data from the database before expiration
Lesson 971Refresh-Ahead Caching
Background workers
pull tasks from the queue and process them independently
Lesson 1385Asynchronous Processing and Message Queues
backing service
is any service your application consumes over the network—databases, message queues, email services, caching systems, or third-party APIs.
Lesson 750Backing Services and Build-Release-Run FactorsLesson 751Processes and Port Binding Factors
Backlog
– ideas and tasks waiting to be prioritized
Lesson 1593The Kanban Board
Backport
Merge the fix back into your main development branch
Lesson 1568What are Hotfixes and When to Use Them
Backport systematically
– Merge the fix into `main` and open branches afterward to prevent regression
Lesson 1569The Hotfix Process and Risk Management
Backup and disaster recovery
from day one
Lesson 1509Cloud-Native Data Management
Backward compatibility
means new API versions still work with old client code.
Lesson 790Why API Versioning MattersLesson 1553Version Compatibility and Breaking Changes
Backward compatible
New consumers can read old messages (add optional fields)
Lesson 1364Message Schemas and Evolution
Backward recovery
means abandoning the original goal and executing compensating transactions for all previously completed steps.
Lesson 1369Forward Recovery vs Backward Recovery
Backward-compatible changes
Ensure new contracts still support old consumer expectations
Lesson 552Contract Versioning and Evolution
Bad SDK design
forces everyone to use the same style:
Lesson 855SDK Design Principles
Balance coverage
You don't need integration tests for every scenario—use them for critical paths and error conditions, rely on unit tests for edge cases.
Lesson 538Performance Considerations with Real Dependencies
Bandwidth
Smaller payloads—just IDs instead of full query strings
Lesson 821Persisted Queries and Query Whitelisting
Bandwidth controls
Apply network rate limits to prevent one tenant from monopolizing network throughput during large data transfers.
Lesson 1532Resource Allocation and Noisy Neighbors
Bandwidth is infinite
Network capacity is limited and often shared with competing traffic.
Lesson 1111Introduction to the Fallacies of Distributed Computing
Bandwidth savings
Your origin servers transfer less data
Lesson 1386Content Delivery Networks and Edge Caching
Banking transactions
that check balances and update accounts
Lesson 906Read Committed Isolation
Base (Bottom): Unit Tests
The widest layer.
Lesson 407The Testing Pyramid Concept
Baseline creation
Run tests and capture screenshots of your UI in a known-good state
Lesson 570Screenshot and Visual Regression Tools
Baseline management
Store and version approved UI states
Lesson 580Implementing Visual Testing Tools
Baseline Update
Approved changes become the new baseline for future tests
Lesson 580Implementing Visual Testing Tools
Basic request/response transformation
Format conversions
Lesson 1328Gateway Responsibilities and Trade-offs
Batch Fetching
is a lazy loading optimization—it loads related data in chunks as accessed.
Lesson 945Eager Loading and Fetch Strategies
Batch function
One efficient query fetches all needed data at once
Lesson 816DataLoader Pattern for Batching and Caching
Batch small feedback
Don't nitpick in five separate rounds.
Lesson 1622Review Timing and Response Expectations
bcrypt
(1999) was the first widely-adopted algorithm designed specifically for password hashing.
Lesson 1002Password Hashing Algorithms: bcrypt, scrypt, and Argon2Lesson 1003Work Factors and Adaptive Hashing
Be empathetic
Remember when you were learning—or when you've made similar mistakes.
Lesson 97Review Etiquette and Collaboration
Be honest about limitations
in your knowledge or the system's capabilities
Lesson 1897Product Quality and Professional Competence
Be idiomatic
Use naming conventions, error handling, and patterns native to each language
Lesson 855SDK Design Principles
Be responsive and timely
Whether you're reviewing or responding to feedback, delays hurt team momentum.
Lesson 97Review Etiquette and Collaboration
Be specific
Use exact commands, not vague descriptions
Lesson 1685Runbooks and Operational Documentation
Be specific and solution-oriented
Instead of "This code is terrible," say "The authentication module lacks rate limiting, exposing users to credential stuffing attacks.
Lesson 1920Speaking Up: When and How to Raise Concerns
Be Specific, Not Wildcard
Never use `Access-Control-Allow-Origin: *` for APIs requiring authentication.
Lesson 1068Cross-Origin Resource Sharing (CORS) Security
Before architectural changes
("Moving from monolith to microservices—how does this affect our trust boundaries?
Lesson 1083Integrating Threat Modeling into Development
Before asking
, document what you've tried (following your debugging process notes).
Lesson 1719Knowing When to Ask for Help
Before coding (Test-Driven Development)
You write a failing test first, then write just enough code to make it pass.
Lesson 401When to Write Tests: Before, During, or After
Before inversion
Your `ReportGenerator` class directly depends on a `MySQLDatabase` class.
Lesson 223Inverting Dependencies with Interfaces
Before major releases
to validate performance hasn't regressed
Lesson 1212Introduction to Load Testing
Before measuring
If you haven't profiled your system or identified real performance problems through metrics, you're optimizing blind.
Lesson 1190Premature Optimization is the Root of All Evil
Before pushing
Only amend commits that haven't been pushed to a remote repository yet
Lesson 113Amending and Fixing Work-in-Progress Commits
behavior
in a single object that represents a row in a database table.
Lesson 935Active Record PatternLesson 1643Giving Constructive Feedback
Behavior changes
Different error handling, altered business logic
Lesson 1708Documentation Review in Code Review
Behavior is reused
– the same fake database is useful across many tests
Lesson 478Mock Frameworks and Hand-Rolled Doubles
Behavior verification
is different: it tests *how* your code interacts with its dependencies, not just *what* it produces.
Lesson 483Behavior Verification: Testing InteractionsLesson 487Test Maintainability and Verification Style
Behavior-focused tests
organize around user-facing features and observable outcomes—tests describe scenarios, group by capability, and verify results without caring about internal mechanics.
Lesson 449Organizing Tests by Behavior vs Implementation
Behavioral patterns
Notice callback mechanisms or responsibility chains (Observer, Strategy, Command)
Lesson 1781Identifying Design Patterns in Existing Code
Behavioral profiling
Building psychological profiles from browsing patterns, emotional states, or engagement metrics
Lesson 1909Surveillance and Tracking Ethics
Benefit
Saves resources when you don't need related data.
Lesson 940Lazy Loading vs Eager Loading
Best when
the outer table is small and the inner table has an index on the join key.
Lesson 882Join Order and Join Algorithms
Better collaboration
Your teammates can pull your latest changes without wading through incomplete work.
Lesson 645The Practice of Small CommitsLesson 841Benefits of Schema-First Development
Better decisions
When testers sit with developers, they catch issues before code is even written
Lesson 24Cross-Functional Teams
Better design
emerges from immediate discussion.
Lesson 1626Benefits and Trade-offs of Pair Programming
Better documentation
Each test name describes a single, specific behavior your code guarantees.
Lesson 433Testing One Thing at a Time
Better estimates
Small pieces are easier to estimate accurately than monoliths (remember Breaking Down for Better Estimates?
Lesson 1658Work Breakdown Structures (WBS)
Better international compatibility
Lesson 1866The GNU GPL Family
Better minimization
The framework can explore the entire space of simpler inputs more systematically
Lesson 619Integrated Shrinking
Better naming
and intuitive API surface
Lesson 856Auto-Generated vs Hand-Written SDKs
Better partition tolerance
The system continues working during network splits
Lesson 922Understanding Eventual Consistency
Better performance
Write throughput isn't bottlenecked by a single leader
Lesson 1403Multi-Leader and Leaderless Replication
Better signal
Failures point directly to integration problems, not unrelated issues
Lesson 526Narrow Integration Tests
Better testability
Loosely coupled modules can be tested in isolation without dragging in dependencies
Lesson 177Understanding Coupling: How Components Depend on Each Other
Better testing
You test against interfaces, not internal mechanics
Lesson 167Abstraction and Information Hiding
Better visibility
The coordinator tracks progress, making debugging and monitoring straightforward
Lesson 1375Trade-offs: Coupling and Visibility
Biased Training Data
If your machine learning model learns from historical data that reflects past discrimination (like biased hiring records or racially disproportionate policing data), it will replicate and codify those patterns.
Lesson 1910What is Algorithmic Bias
Billing Service
listens for "OrderPlaced" and creates an invoice
Lesson 1374Choreography: Decentralized Collaboration
Biometric data
(fingerprints, facial recognition, DNA)
Lesson 1900Personal Data and Sensitive Information
Biometric monitoring
Facial recognition, emotion detection, or gaze tracking
Lesson 1909Surveillance and Tracking Ethics
Biometrics
Fingerprint scanners or facial recognition provide the "something you are" factor, though they're typically paired with passwords or PINs.
Lesson 994Multi-Factor Authentication (MFA)
Bitbucket Pipelines
(Atlassian ecosystem), and **TeamCity** (JetBrains' enterprise offering).
Lesson 637Popular CI Platforms
Black Duck
, **Snyk**, and **licensee** automatically scan your dependency tree and identify license conflicts.
Lesson 1877Verifying License Compatibility in Practice
Blobs (Binary Large Objects)
These store your actual file contents.
Lesson 50Understanding Git Objects: Blobs, Trees, and Commits
Block operations
until the partition heals or consensus is restored
Lesson 1408CP Systems: Choosing Consistency Over Availability
Blocked Items
Work stopped due to dependencies or issues.
Lesson 1599Continuous Improvement with Kanban
Blockers hide
Issues lurk undetected until late in the task
Lesson 1662Task Sizing and the Two-Day Rule
Blue is live
serving production traffic
Lesson 709Blue-Green Deployment
Blue-Green Deployment
(which switches all traffic at once), canary releases limit your blast radius.
Lesson 710Canary ReleasesLesson 713Shadow DeploymentLesson 1476Blue-Green and Rolling Deployments
blue-green deployments
, you verify the green environment before switching the router.
Lesson 715Deployment Health ChecksLesson 1476Blue-Green and Rolling Deployments
Body text
Wrap lines at 72 characters
Lesson 110The 50/72 Rule and Message Formatting
Bold text
highlights critical terms and concepts without requiring readers to parse full sentences.
Lesson 1696Writing for Scannability
Booking systems
(flights, hotels, events) similarly can't double-book limited resources.
Lesson 902When ACID Guarantees Are Critical
Both sides stay aligned
Changes breaking the contract fail tests immediately
Lesson 1321Contract Testing for Service Integration
Bottom (Context)
Edge cases, historical reasons, alternative approaches
Lesson 1690The Inverted Pyramid Structure
Boundary mocking
keeps tests focused on outcomes.
Lesson 475Mocking at the Boundary
Boundary-heavy logic
When your code has many conditionals and edge cases (date handling, string processing, number ranges), property tests find the corner cases you didn't anticipate.
Lesson 612When Property-Based Testing Shines
bounded context
a specific area of your business domain with its own model and language.
Lesson 1290Defining Module BoundariesLesson 1306Domain-Driven Design Bounded Contexts
Bounded wait
Wait up to X seconds.
Lesson 918Lock Timeouts and Wait Strategies
Boxes
are stacked to show which function called which
Lesson 1196CPU Profiling and Flame Graphs
Boy Scout Rule examples
"The checkout module is now 30% more maintainable after Jake's refactoring"
Lesson 1839Celebrating Quality Wins
Branch by Abstraction
and **Seams**, you introduce the new architecture alongside the old.
Lesson 1770Incremental Architecture Migration
Branch from main
Create a descriptively-named feature branch (e.
Lesson 85GitHub Flow: Simplified Branch-and-Merge
Branch from production
Create a hotfix branch from the current production tag (using your Version Tagging in Git practices)
Lesson 1568What are Hotfixes and When to Use Them
Branch strategies
(one PR per dependency or batched)
Lesson 685Automating Dependency Updates
Branch-per-environment
`main` branch for production, `staging` branch for staging.
Lesson 1499Repository Structure for GitOps
Branches
are just movable pointers to commits in the graph
Lesson 65Understanding Git History as a DAG
Breach notification
Report breaches to authorities within 72 hours
Lesson 1908Privacy Regulations (GDPR, CCPA)
Breadcrumbs
Show users where they are in the documentation hierarchy
Lesson 1694Documentation Structure and Navigation
breadth
multiple contributing factors that might interact to create systemic issues.
Lesson 1744Fishbone Diagrams for Systemic IssuesLesson 1823The Staff Engineer Promotion Path
Breaking
(for incompatible changes) are optional but valuable additions.
Lesson 1554Writing Effective Changelogs
breaking change
any modification that makes existing client code stop working.
Lesson 790Why API Versioning MattersLesson 1553Version Compatibility and Breaking Changes
Breakpoint actions
(also called "logpoints" or "tracepoints") let you configure breakpoints to log variable values or messages without halting the program.
Lesson 1730Conditional Breakpoints and Breakpoint Actions
Breakpoints
are markers you place on specific lines of code.
Lesson 1728Debugger Fundamentals: Breakpoints and Execution Control
Breaks in linear flow
Early returns buried deep, continue/break statements that jump unexpectedly
Lesson 384Cognitive Complexity
Bridge
solves a problem *by design*: you anticipate that abstractions and implementations will evolve independently, so you separate them from the start.
Lesson 262Adapter vs Bridge: Understanding the DistinctionLesson 263Real-World Examples: UI Frameworks and Device DriversLesson 286Pattern Selection CriteriaLesson 1428Container Networking Basics
Bridge communication
Translate between engineers, product managers, and stakeholders
Lesson 1786What is a Tech Lead?
Brief enough
to remember (aim for one sentence each)
Lesson 1831Codifying and Evolving Principles
Brittle tests
When you rename a method or reorder operations and tests fail despite correct output, that's a red flag.
Lesson 480Avoiding Over-Mocking
Brittleness
Small changes in one area break seemingly unrelated features.
Lesson 1749Defining Legacy Code
Broadcast Communication
One change triggers notifications to multiple interested parties automatically.
Lesson 304The Observer Pattern: Definition and Intent
Broadcasting
domain events to multiple listeners
Lesson 1357Message Brokers vs Event Buses: Core Concepts
Brute force attacks
Attackers can guess passwords systematically
Lesson 992Username and Password Authentication
Brute-force attacks
Attackers can try billions of password guesses per second using modern GPUs
Lesson 1000Cryptographic Hash Functions for Password Storage
Buddy systems
pair new hires with someone other than their manager for day-to-day questions, creating psychological safety to ask "basic" questions without judgment.
Lesson 1853Inclusive Hiring and Onboarding Practices
Budget depleted
Freeze feature work, focus on reliability improvements, implement stricter change controls
Lesson 1175The Error Budget Concept
Budget exhausted
Freeze risky changes, focus exclusively on reliability improvements, defer feature work until health improves
Lesson 1176Calculating and Tracking Error Budgets
Budget limits
$50K ceiling for cloud infrastructure
Lesson 1232Constraints: Technical and Organizational
Budget overruns
(unexpected features cost money)
Lesson 158Scope Creep and Change Control
Budget remaining
Green light for risky deployments, experiments, or feature velocity
Lesson 1175The Error Budget ConceptLesson 1176Calculating and Tracking Error Budgets
Buffer Overflows
When parsing input without proper bounds checking, attackers can overflow buffers to overwrite adjacent memory.
Lesson 624Detecting Security Vulnerabilities
Bug-catching power
(what failures it prevents)
Lesson 406Balancing Testing Investment
Bugs in production
are exponentially more expensive than bugs caught during development.
Lesson 426The Cost of Not Testing
Build and Test Time
Well-refactored code often compiles and tests faster due to reduced dependencies and better modularity.
Lesson 1773Measuring Refactoring Progress and Success
Build artifacts
are the outputs of your build process (compiled binaries, test results, packaged applications), while **caching** saves dependencies and intermediate files so they don't need to be recreated from scratch every time.
Lesson 641Build Artifacts and Caching
Build buffers
Estimate timelines with wiggle room for the unexpected
Lesson 7Uncertainty and Risk Management
Build Duration
measures how long from commit to verified result.
Lesson 635Measuring CI EffectivenessLesson 657Build Health Metrics and Visibility
Build Frequency
tracks how often code is integrated.
Lesson 635Measuring CI Effectiveness
Build influence
through credibility, communication, and results—not authority
Lesson 1818What is a Staff Engineer?
Build momentum
Small wins create confidence
Lesson 497Starting with the Simplest Test
Build result
(success, failure, or unstable)
Lesson 643Build Notifications and Reporting
Build scripts
are simple executable files (shell scripts, batch files, Python scripts) you write to automate tasks like compiling code, running tests, or packaging applications.
Lesson 659Build Scripts vs Build Tools
Build servers
fail mysteriously because libraries are missing
Lesson 667Declaring Dependencies Explicitly
Build Stage
– Compile code, run unit tests, produce artifacts
Lesson 693The Deployment Pipeline ConceptLesson 703Artifact Management in Pipelines
Build success rate
tells you what percentage of builds pass.
Lesson 657Build Health Metrics and Visibility
Build the new microservice
alongside the monolith
Lesson 1336Migrating from Monolith to Microservices
Build time
is critical—if builds take 30 minutes, developers stop running them frequently.
Lesson 650CI Metrics and VisibilityLesson 691Benefits and Trade-offs
Build tools
(like Make, Maven, Gradle, npm scripts with task runners) are specialized programs designed specifically for building software.
Lesson 659Build Scripts vs Build Tools
Build trust proactively
Engineers who deliver consistently and communicate well earn credibility for when they need to push back hard.
Lesson 1922Balancing Business Pressure with Professional Standards
Build verification
Confirm that the code actually compiles or runs without errors
Lesson 98Automated Checks and CI Integration
Building credibility
Consistently delivering quality work, demonstrating deep technical knowledge, and showing good judgment over time.
Lesson 1794Influence Without Authority
Building quality in
reverses this: you integrate quality practices into every activity from the very start.
Lesson 1835Building Quality In
Built into GitLab
Offers the tightest integration between source control, CI/CD, and deployment in a single platform.
Lesson 637Popular CI Platforms
Built-in practices
Code review, automated testing, and monitoring are non-negotiable defaults, not optional extras
Lesson 1832Defining Quality Culture
Bulk operations
skip the ORM's object tracking entirely, issuing optimized SQL directly.
Lesson 948Write Performance and Batch OperationsLesson 951When to Drop Down to SQL
Bullet points
break information into digestible chunks:
Lesson 1696Writing for Scannability
Burnout
emotional exhaustion, cynicism, reduced efficacy
Lesson 1855The Cost of Overwork
Bursty or unpredictable traffic
patterns mean you only pay when functions run.
Lesson 1527When Serverless is and Isn't Appropriate
Bus factor protection
The team isn't vulnerable if someone leaves
Lesson 1833Collective Code Ownership
Business
Budget is $50,000, launch date is March 1st, only three developers available.
Lesson 132Constraints and AssumptionsLesson 1130Key-Value Pairs and Log Fields
Business alignment
Connecting technical wins to company objectives
Lesson 1823The Staff Engineer Promotion Path
Business Capability Focus
Each microservice owns a complete business function (e.
Lesson 1294Defining Microservices
Business Context
What business problem or opportunity drove this?
Lesson 1701Writing Effective Context Sections
Business evolution
A company grows, pivots, or enters new markets.
Lesson 1237Evolving Drivers Over Time
Business Goal
"Reduce time-to-market for new features by 50%"
Lesson 1233Business Goals and Architecture Alignment
Business goals
are strategic objectives like increasing revenue, reducing time-to-market, entering new markets, or improving customer retention.
Lesson 1233Business Goals and Architecture Alignment
Business Logic Layer
Contains the core rules and workflows of your application
Lesson 1255What is Layered Architecture
Business logic-driven
You design what "undo" means.
Lesson 1367Compensating Transactions
Business Owners
Those whose company depends on the software's success
Lesson 19Who Are Stakeholders?
Business rules
When code enforces a specific policy ("customers over 65 get automatic discounts"), document it.
Lesson 380Inline Documentation for Complex Logic
Business rules or constraints
"VAT calculation uses 19% per EU Directive 2006/112/EC"
Lesson 374When to Write Comments
Business value
Which features drive revenue or critical outcomes?
Lesson 152The Need for PrioritizationLesson 402What to Test: Risk-Based Testing
Business value delivery stops
during the rewrite
Lesson 1757When to Rewrite vs Refactor
Business volatility
Pricing logic, tax calculations, shipping methods—anything tied to business rules that shift frequently or vary by region/customer.
Lesson 206When to Apply OCP
Business-critical periods
Month-end financial closes, tax season, annual audits
Lesson 1548Release Windows and Blackout Periods
Business-focused
Represent real-world business concepts and constraints
Lesson 1274Entities: Enterprise Business Rules
Business/Application Layer
Execute business rules, orchestrate workflows, enforce domain logic
Lesson 1257Layer Responsibilities and Boundaries
BY
(Attribution): Credit must be given to the creator
Lesson 1869Creative Commons and Non-Code Licenses
By priority
(Urgent, Normal, Low)
Lesson 1593The Kanban Board
By team or service
(Frontend, Backend, Infrastructure)
Lesson 1593The Kanban Board
By work type
(Features, Bugs, Tech Debt)
Lesson 1593The Kanban Board
Bypass the ORM
for imports, migrations, or anything processing thousands+ rows where object behavior isn't needed
Lesson 948Write Performance and Batch Operations
Bypassing the ORM
means writing raw SQL for specific operations.
Lesson 948Write Performance and Batch Operations

C

Cache behavior
Your microbenchmark runs the same code repeatedly in a tight loop, keeping everything hot in CPU cache.
Lesson 1201Microbenchmarks and Their Limitations
Cache responses
Record real responses for faster repeated runs
Lesson 533Testing with Real External APIsLesson 576Handling External Services
Cache tags
are labels you attach to cache entries when storing them.
Lesson 981Tagging and Bulk Invalidation
Cache warming
(also called **pre-population**) means deliberately loading frequently accessed data into your cache *before* users request it.
Lesson 970Cache Warming and Pre-population
Cache-Aside
pattern loads data into the cache only when requested, keeping your cache lean and responsive.
Lesson 966Cache-Aside (Lazy Loading)Lesson 967Read-Through CachingLesson 1384Caching to Reduce Load
Cacheability
(responses explicitly indicate if they can be cached)
Lesson 755What REST Is and Why It Matters
cacheability constraint
requires that every response from a server must explicitly label itself as either **cacheable** or **non-cacheable**.
Lesson 758Cacheability ConstraintLesson 824When to Choose REST
Cached Data
Serve slightly stale data from cache when the live source fails.
Lesson 1090Error Recovery and Graceful DegradationLesson 1100The Fallback Pattern
Caching authorization decisions
in sessions or application memory
Lesson 1036Complete Mediation
Caching complications
Dynamic links can reduce cache effectiveness
Lesson 797HATEOAS Trade-offs and Maturity Models
Caching layers
Use Redis or Memcached to reduce database load
Lesson 1509Cloud-Native Data Management
Caching proxies
storing frequently-requested resources closer to clients
Lesson 763Layered System Architecture
Calculate
multiply each score by its weight, then sum for a total
Lesson 155Weighted Scoring Models
Calculate consumption rate
`(bad events / total events) × 100%`
Lesson 1176Calculating and Tracking Error Budgets
Call graphs
Which functions call which?
Lesson 1752Reading and Understanding Legacy Code
Callout boxes
isolate important information:
Lesson 1696Writing for Scannability
CalVer
embeds dates directly into version numbers.
Lesson 1552Calendar Versioning and Alternative Schemes
Can you combine patterns
Sometimes your problem requires both a Facade to simplify *and* an Adapter to integrate legacy code.
Lesson 286Pattern Selection Criteria
Canary or limited rollout
– Deploy to a small percentage first, even if briefly
Lesson 1569The Hotfix Process and Risk Management
canary releases
(where some users get the new version) or **blue-green deployment** (where you switch all traffic at once).
Lesson 713Shadow DeploymentLesson 715Deployment Health Checks
Canceling or abandoning
the operation if time expires
Lesson 1094The Timeout Pattern
cannot
efficiently support queries filtering only on `B`, only on `C`, or `B` and `C` together.
Lesson 873Composite Indexes and Column OrderLesson 1500Managing Secrets in GitOpsLesson 1871What is License Compatibility
Capacity
is theoretical—how much work your team *could* do.
Lesson 1656Velocity and Capacity Planning
Capture
Your E2E tests trigger the tool to take screenshots at key moments
Lesson 580Implementing Visual Testing ToolsLesson 1762Approval Testing for Complex Outputs
Capture new screenshots
Run the same tests and take new screenshots
Lesson 579Visual Regression Testing Fundamentals
Cardinality
refers to the number of distinct values in a column.
Lesson 875Index Selectivity and CardinalityLesson 885Statistics and Query Planning
Cardinality explosion
happens when you add labels with unbounded or extremely high-cardinality values—like user IDs, request IDs, email addresses, or IP addresses—to your metrics.
Lesson 1142Cardinality Explosion
Cardinality matters
Each unique label *combination* creates a new time series.
Lesson 1140Metric Naming and Labels
Career goals
An engineer aiming for architecture roles needs different guidance than one focused on deep technical specialization or moving toward management.
Lesson 1798Tailoring Mentorship Styles
Caretaker
– manages the mementos (stores them, requests them) but never examines their contents
Lesson 301The Memento Pattern: Capturing Object State
Case sensitivity
Unix file systems typically distinguish between `File.
Lesson 666Cross-Platform Build Considerations
Cassandra
prioritizes availability and partition tolerance, offering eventual consistency and tunable consistency levels rather than strict ACID
Lesson 903ACID in Different Database SystemsLesson 1421Quorum-Based Consensus
Catalog Context
Product as searchable items with descriptions
Lesson 1306Domain-Driven Design Bounded Contexts
Catch embarrassing mistakes
Find that debug print statement or commented-out code before others do
Lesson 101Self-Reviewing Before Submission
Catch mistakes early
Testing reveals design flaws before deployment
Lesson 17Feedback Loops Across the SDLC
Catch regressions early
A code change might reintroduce a parser bug that fuzzing previously found.
Lesson 625Integrating Fuzzing into CI/CD
Catches integration bugs
Problems between components only surface in full flows
Lesson 565Component Testing vs Full Page Testing
Category of change
Added, Changed, Deprecated, Removed, Fixed, Security
Lesson 1687Changelog and Release Notes
Causal consistency
Operations that are causally related are seen in order by all nodes
Lesson 1410Consistency Models and the Spectrum
Causes
What broke internally (high CPU, disk full, service restart)
Lesson 1154Alert Fundamentals: Symptoms vs. Causes
Celebrate good practices
Recognize small commits, quick fixes, and proactive test additions publicly
Lesson 651Building a CI Culture
Celebrate good work
Reviews aren't just for finding problems.
Lesson 97Review Etiquette and Collaboration
Celebrating Quality Wins
(lesson 1839), you reinforce that growth matters.
Lesson 1840Creating a Culture of Continuous Learning
Centralize logs
using the correlation ID to reconstruct the complete execution timeline across services.
Lesson 1372Monitoring and Observability for Sagas
Centralized control logic
Complex interaction rules live in one place (the mediator), not scattered across many objects.
Lesson 298The Mediator Pattern: Centralizing Communication
Centralized defaults
Change default test data in one place
Lesson 451Object Mother Pattern
Centralized management
One place to update common object templates
Lesson 249Prototype Registry and Object Pools
Centralized undo/logging
Commands already support undo; the chain provides structure for validation or logging layers
Lesson 294Combining Chain and Command Patterns
Centralizes object creation decisions
, making changes easier
Lesson 236Implementing Factory Methods
CERN Open Hardware License
or **TAPR** may apply.
Lesson 1869Creative Commons and Non-Code Licenses
Certificate Authorities (CAs)
, installing them correctly, monitoring expiration dates, and renewing them before they expire.
Lesson 1077Certificate Management and Mixed Content
Certifications and external training
completed
Lesson 1847Measuring and Rewarding Learning
Chain of Responsibility
pattern passes requests along a chain of handlers, while the **Command** pattern encapsulates requests as objects.
Lesson 294Combining Chain and Command Patterns
Challenge acknowledgment
Admitting when projects are struggling or behind schedule
Lesson 1828Transparency and Open Communication
Change anxiety
Every modification risks breaking something unexpected
Lesson 337Bloaters: Large Class and God Object
Change freeze calendars
Published months ahead so teams can plan accordingly
Lesson 1548Release Windows and Blackout Periods
Change impact
How many files need modification for common feature requests?
Lesson 1242Maintainability and Modifiability
Change impact analysis
(you learned this last lesson—assessing cost, risk, schedule effects)
Lesson 162Change Request Processes
Change implementation freely
knowing the tests define what "correct" means
Lesson 405Enabling Refactoring with Tests
Change patterns
If only 1-2 methods change together repeatedly while others never do, the class lacks cohesion
Lesson 183Measuring Coupling and Cohesion in Practice
Change Resistance
Modifying functionality becomes slow and risky.
Lesson 179The Cost of Tight Coupling
Change ripple effect
If modifying one class forces changes in 3+ other classes, coupling is too tight
Lesson 183Measuring Coupling and Cohesion in Practice
Change visibility
Team members see what changed and when
Lesson 163Version Control for Requirements
Changes are atomic
Update the code *and* the docs in the same commit or pull request
Lesson 1706Documentation as Code
Changes are isolated
Updating the database doesn't force you to touch UI code
Lesson 166Separation of Concerns
Changes ripple everywhere
Adding one feature requires modifying the Observer, Mediator, and Command objects when a direct method call would suffice.
Lesson 322When Patterns Become Obstacles
Changing field types
– `"age": "25"` becomes `"age": 25` breaks clients expecting strings
Lesson 847Breaking vs Non-Breaking Changes
Changing HTTP status codes
– clients expecting `200` may not handle `201` properly
Lesson 847Breaking vs Non-Breaking Changes
Character variety
(uppercase, lowercase, numbers, symbols)
Lesson 1004Password Strength Requirements and Policies
Characterization Tests
Before changing anything, write tests that describe what the code *currently does*, even if it's buggy.
Lesson 515Legacy Code Without TestsLesson 1758What Are Characterization Tests
Chat integrations
(like Slack, Microsoft Teams, or Discord) post build status directly into team channels.
Lesson 643Build Notifications and Reporting
Chatty behavior
Many small operations instead of fewer large batches (N+1 query problems)
Lesson 1198I/O and Network Profiling
Chatty services
Services that constantly communicate with the same few neighbors might belong together.
Lesson 1312Getting Service Granularity Right
Cheaper
lower development and maintenance costs
Lesson 186Why Software Must Be Designed for Change
Check against your description
Does your PR description match what actually changed?
Lesson 101Self-Reviewing Before Submission
Check application compatibility
with the new schema
Lesson 895Testing and Reversibility
Check cache first
Look up the data by its cache key
Lesson 966Cache-Aside (Lazy Loading)
Check commit messages
Ensure they follow the 50/72 rule and explain *why*, not just *what*
Lesson 114Commit Hygiene Before Push
Check compatibility
Ensure your chosen licenses work together.
Lesson 683Dependency License Compliance
Check for common mistakes
(forgotten debug statements, merge conflicts markers)
Lesson 393Pre-commit Hooks and Git Hooks
Check response patterns
When an alert fires, do responders take meaningful action, or do they immediately close it?
Lesson 1162Alert Evaluation: Regular Review and Refinement
Check span metadata
Labels and tags (like HTTP status codes, cache hits/misses, or query parameters) help explain *why* certain spans are slow.
Lesson 1151Analyzing Traces for Performance Issues
Check uniqueness
Fuzzers often find the same bug through different inputs.
Lesson 626Triaging and Reproducing Fuzzer Findings
Checked exceptions provide safety
through compiler enforcement.
Lesson 1087Checked vs Unchecked Exceptions
Checking permissions once
at the beginning of a long-running operation
Lesson 1036Complete Mediation
Checklists
help reviewers verify those standards are met during review.
Lesson 1621Review Checklists and Standards
Checkout Team
→ owns the Checkout Service
Lesson 1300Organizational Alignment
Checks code complexity
against defined thresholds
Lesson 394CI-Based Quality Gates
Checks out the code
to a clean environment
Lesson 636What is a CI Server
Checks outgoing responses
match the documented structure
Lesson 843Request and Response Validation
Checks resource availability
(memory, disk space)
Lesson 715Deployment Health Checks
Checksum-based
More sophisticated tools compute a hash (like SHA-256) of each file's content.
Lesson 664Incremental Builds
Cherry-picking with modification
Start by identifying the minimal commit that fixes the issue.
Lesson 1572Backporting Fixes to LTS Versions
Child process inheritance
When your application spawns subprocesses, they typically inherit all environment variables, widening the exposure surface.
Lesson 742Secrets in Environment Variables
Children's data
(any information about minors)
Lesson 1900Personal Data and Sensitive Information
Choose criteria
value, cost, risk, complexity, alignment with strategy
Lesson 155Weighted Scoring Models
Choose interaction-based testing when
Lesson 477Interaction-Based vs State-Based Testing
Choose kebab-case for URLs
URLs are case-sensitive in REST (though domains aren't), and kebab-case (`/customer-orders`) is more readable than camelCase (`/customerOrders`) or snake_case (`/customer_orders`).
Lesson 778Naming Conventions for Resources
Choose mobbing
when the problem touches multiple areas of the codebase, requires diverse expertise, or when you want the entire team aligned on critical architecture decisions.
Lesson 1630When to Use Pairing vs Mobbing
Choose pairing
when two people have the right expertise and the problem scope is manageable.
Lesson 1630When to Use Pairing vs Mobbing
Chronological timeline
Present events in the order they happened, with timestamps.
Lesson 1183Writing Effective Incident Narratives
CI culture
means the entire team shares ownership of build health, treats broken builds as urgent, and integrates frequently without being reminded.
Lesson 651Building a CI Culture
CI pipeline checks
Reject pushes that contain secrets
Lesson 743Secret Scanning and Prevention
CI server
(also called a build server or automation server) is a dedicated tool that automatically monitors your code repository, detects changes, and runs your build and test processes without human intervention.
Lesson 636What is a CI ServerLesson 640Build Agents and Executors
CI/CD checks
that warn or fail when flags exceed lifespan thresholds
Lesson 1566Flag Debt and Cleanup Strategies
CI/CD setup
, and **release notes quality**.
Lesson 1878Evaluating Open Source Dependencies
Circuit Breaker
After repeated failures, stop trying for a period to avoid cascading problems, then gradually test if recovery is possible.
Lesson 1090Error Recovery and Graceful DegradationLesson 1319Circuit Breakers in Distributed Systems
Circuit breaking
to isolate failing services
Lesson 1318Service Mesh and Communication Infrastructure
Clarify requirements
Ask questions, resolve ambiguity, confirm acceptance criteria.
Lesson 1607Backlog Refinement Sessions
Class Adapter
– uses inheritance to adapt one interface to another
Lesson 257Class vs Object Adapters
Class Table Inheritance
creates one table per class in the hierarchy.
Lesson 932Inheritance and Relational Mapping Strategies
Classes of Service
(CoS) are categories that define how different types of work should be handled, especially based on urgency and business value.
Lesson 1598Policies and Classes of Service
Classification systems
Marking confidential documents/code
Lesson 1889Trade Secrets: Definition and Protection
Classify severity
(crash, memory corruption, logic error, performance issue)
Lesson 626Triaging and Reproducing Fuzzer Findings
Clean environments
Fresh checkout vs incremental builds
Lesson 690Verifying Build Reproducibility
Clean separation
Configuration stays separate from code (you've seen this with environment variables!
Lesson 748Introduction to the Twelve-Factor App Methodology
Clean up after itself
Delete created data, reset state, or restore the environment
Lesson 574Isolating Tests from Each Other
Clean up properly
Reset shared state, databases, or files after each test.
Lesson 440Avoiding Test Interdependence
Cleaning
After (or before) each test, remove or reset data to prevent pollution.
Lesson 559E2E Test Data Management
Clear assignments
Each work package has a natural owner
Lesson 1658Work Breakdown Structures (WBS)
Clear banners
at the top: " This guide covers Version 2.
Lesson 1710Deprecation and Archival Strategies
Clear boundaries
Components with well-defined inputs and outputs
Lesson 1244Testability and ObservabilityLesson 1258Dependency Direction in Layers
Clear coding standards
everyone follows
Lesson 1833Collective Code Ownership
Clear communication
Complex technical ideas distilled for different audiences
Lesson 1820Operating at Staff+ Scale
Clear contracts
Changes require schema updates, making breaking changes explicit and reviewable
Lesson 841Benefits of Schema-First Development
Clear customization points
Subclasses know exactly which steps they can override
Lesson 315Template Method Pattern: Skeleton Algorithms
Clear enough
that any team member understands what "done" means
Lesson 1660Decomposing Features into Tasks
Clear Error Contracts
When something fails, return appropriate HTTP status codes (404 for not found, 400 for bad requests, 500 for internal errors) with structured error bodies that help the calling service understand what went wrong and whether retrying makes sense.
Lesson 1314RESTful Inter-Service Communication
Clear errors
Return meaningful error messages that guide developers
Lesson 855SDK Design Principles
Clear escalation paths
Know when to email versus when to call an urgent meeting
Lesson 25Communication Channels and Stakeholder Management
Clear failure points
When something breaks, the orchestrator knows immediately and can compensate
Lesson 1375Trade-offs: Coupling and Visibility
Clear Goal Statements
Start by telling users what they'll achieve.
Lesson 1681User Guides and Tutorials
Clear intent
Overrides highlight what's special about each environment
Lesson 729Default Values and Configuration Hierarchies
Clear Language
Avoid legal jargon.
Lesson 1902Informed Consent and User Control
Clear ownership
When a service fails, everyone knows which team owns it
Lesson 1333Team Size and Conway's Law
Clear steps
What to check, in what order
Lesson 1168Runbooks and Playbooks
Clear trigger criteria
defining what qualifies as an emergency (e.
Lesson 1549Emergency Release Procedures
Clearer debugging
Status indicators help identify which dependency failed
Lesson 1110Partial Response Strategies
Clearer relationships
"Has-a" is often more honest than forcing "is-a" relationships.
Lesson 173Favor Composition Over Inheritance
Clicks
Simulate mouse clicks on buttons, links, or any clickable element.
Lesson 567Testing User Interactions
Client and Employer
– Act in the best interests of client and employer, consistent with the public interest
Lesson 1894The IEEE-CS/ACM Software Engineering Code of Ethics
Client burden
Clients must update all endpoint URLs when migrating
Lesson 791URI Versioning (Path-Based)
Client complexity
Clients must parse and follow links instead of hardcoding paths
Lesson 797HATEOAS Trade-offs and Maturity Models
Client Credentials Grant
is for **machine-to-machine** communication where no user is involved.
Lesson 1020Implicit and Client Credentials Grants
Client needs
Do most clients need everything together?
Lesson 782Resource Granularity Trade-offs
Client SDK
(Software Development Kit) is a library or package that wraps your API, providing language- specific functions, classes, and utilities that developers use instead of making raw HTTP requests directly.
Lesson 854The Role of Client SDKs
Client-centric thinking (role interfaces)
"My invoice generator only needs printing, so give it an `IPrinter` interface.
Lesson 218Role Interfaces and Interface Segregation
Client-server decoupling is critical
Server can restructure URLs without breaking clients
Lesson 797HATEOAS Trade-offs and Maturity Models
Client-side
You check the host stand's seating chart yourself, pick an available table, and walk directly there.
Lesson 1324Client-Side vs Server-Side Discovery
Client-side caching
Browsers cache static assets and API responses using HTTP headers.
Lesson 1384Caching to Reduce Load
Client-Side Discovery
The client queries a service registry (like Consul or Eureka) directly, receives a list of available service instances, and chooses one to call.
Lesson 1324Client-Side vs Server-Side Discovery
Client-side impact counts too
Heavy JavaScript bundles drain mobile batteries faster, requiring more frequent charging.
Lesson 1931Environmental Impact of Software Systems
Clock skew
Timeout settings may trigger false partition detection
Lesson 1407Network Partitions in Practice
Cloning
is how you download an entire repository—complete with all its history, branches, and files—from a remote location (like GitHub, GitLab, or a company server) to your local machine.
Lesson 54Cloning Existing RepositoriesLesson 247The Prototype Pattern: Cloning Objects
Close connections cleanly
(database connections, file handles)
Lesson 1506Health Checks and Graceful Shutdown
Closed → Open
Triggered when failure rate crosses threshold
Lesson 1097Circuit Breaker States and Transitions
Closed questions
confirm specifics: "Does this process run daily?
Lesson 134Interview Techniques for Requirements
Cloud-based, integrated with GitHub
If your code lives on GitHub, Actions provides seamless integration with built-in secrets management and marketplace workflows.
Lesson 637Popular CI Platforms
Cloud-specific services
offer enormous productivity benefits—managed scaling, built-in monitoring, reduced operational burden, and often better cost optimization.
Lesson 1510Cloud Portability and Vendor Lock-in Trade-offs
Code archaeology
"Who originally created this module and what was its original purpose?
Lesson 122Understanding File History with Git Log --follow
Code clarity
Can developers quickly understand what the code does?
Lesson 1242Maintainability and Modifiability
Code Complexity
Track cyclomatic complexity (the number of independent paths through code) and cognitive complexity (how hard code is to understand).
Lesson 1773Measuring Refactoring Progress and Success
Code deployment
One engineer writes code, another reviews it, a third approves production deployment
Lesson 1037Separation of Duties
Code generators
can automatically create client libraries in multiple languages
Lesson 837Introduction to OpenAPI Specification
Code Injection
Programming language code inserted into evaluated strings
Lesson 1053What Are Injection Attacks
Code Level
If a null pointer caused the crash, add validation at system boundaries.
Lesson 1748Preventing Recurrence with Systemic Fixes
Code organization
means structuring your source files and directories in a way that reflects what your program *does* and how its parts relate to each other.
Lesson 373Code Organization and File Structure
Code quality metrics
"No high-severity linting errors"
Lesson 704Pipeline Gates and Approvals
Code quality suffers
when developers are exhausted.
Lesson 1856Sustainable Pace and the 40-Hour Week
Code Review as Mentorship
(lesson 1799) turns everyday activities into teaching moments.
Lesson 1840Creating a Culture of Continuous Learning
Code review culture
where peers validate changes
Lesson 1833Collective Code Ownership
Code Review Discussions
(building on our earlier mentorship concepts) become teaching moments when reviewers explain the "why" behind suggestions.
Lesson 1843Knowledge Sharing Mechanisms
Code review quality
(rubber-stamping replaces careful analysis)
Lesson 1855The Cost of Overwork
Code review tools
that display metrics alongside changed code
Lesson 390Using Complexity Metrics in Practice
Code reviews
Team members read each other's work, catch mistakes, and share knowledge
Lesson 3The Human Element: Teams and CommunicationLesson 1257Layer Responsibilities and Boundaries
Code sections
Testing whether a bug occurs before or after a certain line
Lesson 1713Binary Search for Bug Location
code smell
is a surface-level symptom in your code that suggests something might be wrong underneath—like how a weird smell in your kitchen might indicate spoiled food hidden in the back of the fridge.
Lesson 335What Are Code Smells?Lesson 479Partial Mocking and Spying on Real Objects
Code structure and patterns
indicate the prevailing best practices when written.
Lesson 1780Reading Legacy Code as Historical Documentation
CODE_OF_CONDUCT.md
Expected behavior standards to maintain a respectful community
Lesson 1882Starting an Open Source Project
Code-first
= Builders construct the house based on experience, *then* create blueprints documenting what was built
Lesson 840Schema-First vs Code-First Design
Code-first design
flips this around.
Lesson 840Schema-First vs Code-First Design
Code-First with Generation
If you write code first, use tools that automatically generate OpenAPI specs from your implementation (annotations, decorators, or reflection).
Lesson 845Maintaining OpenAPI Specs Over Time
Code-to-docs tools
parse specially formatted comments (like JSDoc, Javadoc, or Python docstrings) and generate API references.
Lesson 1707Automated Documentation Generation
Cognitive Accessibility
Users with dyslexia, ADHD, or cognitive differences benefit from clear language, predictable navigation, and error prevention.
Lesson 1929Designing for Diverse Abilities
Cognitive Complexity
measures the mental burden on someone reading your code.
Lesson 384Cognitive Complexity
Cognitive Load
Every pattern requires the reader to recognize it, recall its structure, and understand why it's there.
Lesson 323The Cost of Pattern Overhead
Cognitive performance degrades
sharply after 40-50 hours per week.
Lesson 1856Sustainable Pace and the 40-Hour Week
Coherence
means ensuring all cache layers reflect a consistent view of your data.
Lesson 988Multi-Layer Cache Coordination
Cohesion
measures how closely the responsibilities within a single module (like a class, function, or file) relate to each other.
Lesson 180Understanding Cohesion: What Belongs TogetherLesson 197Cohesion and SRPLesson 349Move Method and Move Field
Cold or warm start
– The platform either reuses an existing execution environment (warm) or provisions a new one (cold start)
Lesson 1520Serverless Event-Driven Execution Model
Cold storage (compliance/historical)
For regulatory requirements, you might archive logs for years in the cheapest storage tier (like S3 Glacier).
Lesson 1126Log Retention and Storage
Collaboration
Use branches and pull requests for requirements reviews
Lesson 163Version Control for RequirementsLesson 1600What Are Agile Ceremonies?
Collaboration improves
Engineers use familiar tools (Git, GitHub, text editors) instead of context-switching to specialized documentation platforms
Lesson 1706Documentation as Code
Collaboration Over Silos
means actively breaking down these barriers.
Lesson 1830Collaboration Over SilosLesson 1840Creating a Culture of Continuous Learning
Collaborative
Active participation from relevant team members
Lesson 1600What Are Agile Ceremonies?
Collapse layers
when they consistently provide no value.
Lesson 1261When Layers Become Too Thin
Collapsible endpoint listings
organized by resource
Lesson 836Interactive Documentation Tools
Colleagues
– Be fair to and supportive of colleagues
Lesson 1894The IEEE-CS/ACM Software Engineering Code of Ethics
Collect
all resolved values into the response structure
Lesson 812The GraphQL Execution Model
Collection resources
represent a group of items (like `/users`, `/products`, `/orders`)
Lesson 777Singleton vs Collection Resources
Collections
that group those entities (list of Users, list of Orders)
Lesson 775Identifying Resources from Domain Models
Color Contrast
Users with color blindness or low vision need sufficient contrast between text and backgrounds (WCAG requires 4.
Lesson 1929Designing for Diverse Abilities
Column match
Whether the query's `WHERE`, `JOIN`, or `ORDER BY` clauses align with indexed columns
Lesson 880Index Selection and Coverage
Combinatorial explosion
makes writing tests prohibitively expensive
Lesson 589Path Coverage
Combinators
Compose simple generators into complex ones ("pairs of username and email where email contains the username")
Lesson 614Input Generation StrategiesLesson 615Generators and Combinators
Combine roles
when multiple user types need the exact same thing
Lesson 144The User Story Format
Combine them
use a Builder to carefully construct a complex "master" object once, register it as a prototype, then clone and tweak copies as needed.
Lesson 250Combining Builder and Prototype Patterns
Command Injection
happens when you pass user input to system commands:
Lesson 1044A03: InjectionLesson 1053What Are Injection Attacks
Command Interface
– Declares an `execute()` method that all concrete commands must implement
Lesson 291Implementing the Command Pattern
Command pattern
lets you encapsulate actions as objects and the **Memento pattern** captures object state, combining them creates robust undo functionality that's both flexible and safe.
Lesson 302Implementing Undo with Memento and Command
Command Query Responsibility Segregation
.
Lesson 1350CQRS Pattern Overview
Commands
change the state of your system but return nothing (or return `void`)
Lesson 175Command-Query Separation
Commands are obvious
when you see one, you know state is changing
Lesson 175Command-Query Separation
Comments, especially old ones
, often explain constraints that no longer exist but shaped permanent decisions.
Lesson 1780Reading Legacy Code as Historical Documentation
Commercial rights
Can they profit from it?
Lesson 1862Copyright, Licensing, and Distribution
Commit Changes to Git
Developers or operators push infrastructure changes (Kubernetes manifests, Terraform configs, etc.
Lesson 1497The GitOps Workflow
Commit collectively
, not individually
Lesson 1602Effective Sprint Planning Practices
Commit fully
Once decided, support it with resources and conviction
Lesson 1816Making Decisions When Consensus Fails
Commit history
Testing the midpoint between a known-good and known-bad commit
Lesson 1713Binary Search for Bug Location
Commit metadata
like author and timestamp
Lesson 1555Automating Changelog Generation
Commit Phase
Coordinator sends the final "commit" message, and participants commit
Lesson 1417Three-Phase Commit (3PC)
Commit regularly
Make commits as you work, pushing to the remote frequently
Lesson 85GitHub Flow: Simplified Branch-and-Merge
Commit/Push triggers
Build runs whenever code is pushed to a branch
Lesson 639Build Triggers and Webhooks
Commitment
Team members personally commit to achieving team goals
Lesson 1581Scrum Framework Overview
Commits
These are the snapshots you create with `git commit`.
Lesson 50Understanding Git Objects: Blobs, Trees, and Commits
Common parallel opportunities
Lesson 1664Parallel vs Sequential Work
Common pattern
GPL + Commercial license
Lesson 1876Dual Licensing and License Exceptions
Common patterns
– How to implement pagination, filtering, sorting consistently across all APIs
Lesson 858API Style Guides
Common terminology
(what we mean by "service," "layer," "boundary")
Lesson 1226Architecture as Communication
Communicate constantly
Check in with stakeholders frequently to catch misunderstandings early
Lesson 7Uncertainty and Risk Management
Communicate scope upfront
prefix PR titles like `[Large]` or estimate review time to set expectations.
Lesson 1620Review Size and Scope Trade-offs
Communicate the issue
clearly to colleagues or online communities
Lesson 1721Creating Minimal Reproduction Cases
Communicate threats
clearly to both technical and non-technical stakeholders
Lesson 1082Attack Trees and Risk Prioritization
Communication needs
P0 requires immediate customer communication, status pages, and stakeholder updates.
Lesson 1164Incident Severity Levels
Communication norms
Set team expectations about async communication; not everything needs immediate response
Lesson 1859Remote Work and Disconnecting
Community of Practice
(CoP) is a voluntary group of engineers from different teams who share a common technical interest or domain—like frontend development, security, databases, or infrastructure.
Lesson 1846Building Technical Communities of Practice
Commutative Updates
Design operations so order doesn't matter (e.
Lesson 1371Handling Saga Isolation Anomalies
Company-wide channels
(all-hands meetings, wiki homepages)
Lesson 1185Building a Learning Culture from Incidents
Compare against baselines
– New results are compared to previous runs or thresholds
Lesson 1203Continuous Performance Testing
Compare images
The tool highlights visual differences between baseline and current
Lesson 579Visual Regression Testing Fundamentals
Compare metrics
using statistical thresholds (e.
Lesson 1211Baseline Metrics and Regression Detection
Compare similar traces
Look at traces for the same endpoint.
Lesson 1151Analyzing Traces for Performance Issues
Compare to budget
Have you used 10%, 50%, or 90% of your allowed failures?
Lesson 1176Calculating and Tracking Error Budgets
Comparison
On subsequent runs, capture new screenshots and compare pixel-by-pixel
Lesson 570Screenshot and Visual Regression Tools
Compatible licenses
allow their code to be relicensed under GPL terms:
Lesson 1873GPL License Compatibility Rules
Compensating
Payment service releases funds
Lesson 1420Distributed Transactions with Saga Pattern
compensating transactions
to undo the changes made by previous steps.
Lesson 1366What is the Saga PatternLesson 1367Compensating Transactions
Compensation
On-call work deserves compensation—whether financial bonuses, additional PTO, or time-in-lieu after incidents.
Lesson 1857On-Call and After-Hours Work
Competent Work
You must deliver quality work using your best professional judgment.
Lesson 1896Client and Employer Obligations
Compiler and tool versions
Specify exact versions of compilers (`gcc 11.
Lesson 689Controlling the Build Environment
Compilers catch type errors
before you run code
Lesson 371Avoiding Encodings and Hungarian Notation
Complete audit trail
Every state change is recorded with context—who did what, when, and why.
Lesson 1347Event Sourcing Fundamentals
Complete commit history
(everything you'd see with `git log`)
Lesson 54Cloning Existing Repositories
Complete in-flight requests
(respect a reasonable timeout)
Lesson 1506Health Checks and Graceful Shutdown
Complete Mediation
you grant minimal necessary access and enforce checks at every step.
Lesson 1037Separation of DutiesLesson 1045A04: Insecure DesignLesson 1062Cross-Site Scripting (XSS) Overview
Complex aggregations and reports
Multi-table JOINs with window functions, subqueries, and complex GROUP BY clauses often generate inefficient ORM queries or simply aren't expressible in the abstraction.
Lesson 951When to Drop Down to SQL
Complex calculations
(scientific computing, rendering) might demand batch processing or specialized compute architectures
Lesson 1230Functional Requirements as Drivers
Complex conflict resolution
The system must decide which write "wins" or merge changes
Lesson 1403Multi-Leader and Leaderless Replication
Complex data graphs
are where GraphQL truly excels.
Lesson 826When to Choose GraphQL
Complex interaction verification
– tracking call counts, argument matching, call order
Lesson 478Mock Frameworks and Hand-Rolled Doubles
Complex mock setup
If arranging your mocks takes more lines than the actual code being tested, you might be mocking too much detail.
Lesson 480Avoiding Over-Mocking
Complex object creation
Constructors with 10 parameters → Consider Builder
Lesson 326Refactoring Toward and Away from Patterns
Complex problems
requiring deep thinking and multiple perspectives
Lesson 1630When to Use Pairing vs Mobbing
Complex queries become slow
Fetching a simple customer order might require joining 8+ tables
Lesson 864The Cost of Over-Normalization
Complex XPath
`/html/body/div[3]/form/div[2]/button` – breaks if structure shifts
Lesson 563Locator Strategies and Best Practices
Complex, coordinated interactions
When components need to perform intricate workflows together, and you want that logic centralized in one place
Lesson 299Mediator vs Observer: Choosing the Right Pattern
Complex, realistic test data
obscures what's actually being tested.
Lesson 450The Problem with Test Data
Complexity matters too
a gnarly conditional loop with multiple edge cases deserves higher coverage than straightforward CRUD operations.
Lesson 596Setting Meaningful Coverage Thresholds
Complexity showcase
Technical problems only you could solve given organizational context
Lesson 1823The Staff Engineer Promotion Path
Complexity Tolerance
Cache-aside is straightforward—your application controls everything explicitly.
Lesson 975Pattern Selection Trade-offs
Compliance becomes easier
Many regulations require demonstrable access controls
Lesson 1033Principle of Least Privilege
Compliance requirements
HIPAA, GDPR, PCI-DSS mandates specific controls
Lesson 1232Constraints: Technical and Organizational
Compliance Violations
Industry regulations (like PCI-DSS, HIPAA, SOC 2) explicitly forbid storing secrets in source code.
Lesson 741The Dangers of Hardcoding SecretsLesson 1568What are Hotfixes and When to Use Them
Compliance-regulated
domains with legal consequences
Lesson 1837Zero-Defect Mindset
Component
The common interface or abstract class that defines operations for both simple and complex objects
Lesson 265Implementing Composite: Components, Leaves, and Composites
Component Overview
Identify major subsystems (authentication service, data pipeline, API gateway) and their responsibilities.
Lesson 1682Architecture Documentation
Component relationships
Which modules depend on others?
Lesson 1752Reading and Understanding Legacy Code
Component testing
isolates individual UI elements (buttons, forms, modals, navigation bars) and tests them independently.
Lesson 565Component Testing vs Full Page Testing
Components
should handle distinct parts of your system (like user interface separate from data storage)
Lesson 166Separation of ConcernsLesson 1220Architecture as Structure
Composability
Queries can be built up piece by piece
Lesson 941Query Object Pattern
Composable patterns
Use structured formats like `entity:id:version` or `query:table:filter:params`.
Lesson 961Cache Keys and Lookup Mechanisms
Composite
A container that holds children (other Composites or Leaves) and implements operations by delegating to its children
Lesson 265Implementing Composite: Components, Leaves, and CompositesLesson 286Pattern Selection Criteria
Composite + Decorator
A file system (Composite) where files can be compressed or encrypted (Decorator)
Lesson 285Combining Multiple Structural Patterns
Composition
means building objects by combining smaller, independent components—essentially "has-a" relationships.
Lesson 173Favor Composition Over InheritanceLesson 205The Strategy Pattern and OCP
Comprehensive coverage
Test edge cases and states that are hard to trigger in full flows
Lesson 565Component Testing vs Full Page TestingLesson 856Auto-Generated vs Hand-Written SDKs
Comprehensive testing
to catch regressions
Lesson 1833Collective Code Ownership
Compromised maintainer accounts
allow attackers to inject malicious code into legitimate packages.
Lesson 1885Open Source Security and Supply Chain Risks
Compromised permanently
because once exposed, they can't be "un-exposed"
Lesson 740What Are Secrets and Why They Matter
Compute
Priced by instance type (CPU/memory) and runtime duration, typically per hour or per second.
Lesson 1535Understanding Cloud Cost Models
Compute limits
Set CPU and memory quotas per tenant, similar to Kubernetes resource requests and limits.
Lesson 1532Resource Allocation and Noisy Neighbors
Computed Columns
store the result of a calculation directly in the table.
Lesson 866Denormalization Patterns
Concise
One line describing the change
Lesson 48Committing Changes with 'git commit'
Concrete Commands
– Specific implementations that know which receiver to call and what action to perform
Lesson 291Implementing the Command Pattern
Concrete Creators
subclasses that override the factory method to instantiate specific classes
Lesson 234Factory Method Pattern: Intent and Structure
Concrete Factories
Implement the interface, creating products for a specific family (`DarkThemeFactory`, `LightThemeFactory`)
Lesson 237Abstract Factory Pattern: Intent and Structure
Concrete handler classes
that inherit from the base and implement specific handling logic
Lesson 288Implementing Chain of Responsibility
Concrete Handlers
Implement the logic to either handle specific requests or forward them to the next handler in line.
Lesson 287Chain of Responsibility Pattern: Core Concept
Concrete strategies
– each class implements one specific algorithm
Lesson 312Strategy Pattern: Encapsulating Algorithms
Concrete Table Inheritance
gives each concrete (instantiable) class its own complete table.
Lesson 932Inheritance and Relational Mapping Strategies
ConcreteState classes
implement the State interface, each encapsulating the behavior for one specific state.
Lesson 309State Pattern Structure: Context and State Objects
concurrency
(multiple transactions can read and work simultaneously without blocking each other).
Lesson 909Snapshot Isolation ExplainedLesson 1207Request Rate and ConcurrencyLesson 1722Controlling Environmental Variables
Concurrent operations
Multiple nodes might try to make decisions simultaneously
Lesson 1414The Distributed Consensus Problem
Concurrent system chaos
In distributed systems with multiple servers, some instances might still be running code that expects the new schema while the database is being rolled back.
Lesson 889Forward-Only Migration Philosophy
Conditional breakpoints
solve this by pausing execution only when a specified condition evaluates to true.
Lesson 1730Conditional Breakpoints and Breakpoint Actions
Conditional explosions
Giant if-else chains → Consider State or Strategy
Lesson 326Refactoring Toward and Away from Patterns
Conditional logic
(like `if` or `switch`) inside the factory to decide which concrete class to instantiate
Lesson 241Simple Factory Pattern
cone of uncertainty
illustrates that early project estimates can be off by 4x or more, narrowing as you learn.
Lesson 1615Dealing with Estimation UncertaintyLesson 1654Breaking Down for Better Estimates
Confidence to continue
Green tests mean you can safely move forward
Lesson 629The Feedback Loop: Speed and Confidence
Confidentiality with Limits
Respect proprietary information and trade secrets, but this duty has boundaries.
Lesson 1896Client and Employer Obligations
Config file defaults
(shared across all environments)
Lesson 729Default Values and Configuration Hierarchies
ConfigMaps
store configuration data as key-value pairs or entire files that Pods can consume.
Lesson 1448ConfigMaps and SecretsLesson 1458ConfigMaps and Secrets
Configurable test counts
(usually 100-1000 runs)
Lesson 613Property Testing Tools and Frameworks
Configuration
tells the system which plugins to load
Lesson 192Plugin Architectures and Extension Points
Configuration and wiring
Are dependencies correctly injected and connected?
Lesson 416Integration Tests: Testing Module Interactions
Configuration and wiring bugs
include:
Lesson 527Testing Configuration and Wiring
configuration changes
(security settings modified), and **security exceptions** (injection attempts, rate limit violations).
Lesson 1040Security Logging and AuditabilityLesson 1708Documentation Review in Code Review
Configuration isolation
Each tenant can have custom settings
Lesson 1528What is Multi-Tenancy
Configuration settings
Environment variables or config files set to test values
Lesson 540What Are Test Fixtures
Configuration Updates
Support runtime configuration changes.
Lesson 1116Fallacy 5: Topology Doesn't Change
Configure
their behavior (what they return when called)
Lesson 471Test Double Libraries and Frameworks
Configure diff thresholds
Set tolerance levels (like 0.
Lesson 581Managing Visual Test Stability
Configure percentage rollouts
(gradually expose a feature to 5%, then 25%, then 100% of users)
Lesson 1561Feature Flag Management Systems
Confirmation Sessions
involve presenting requirements back to specific stakeholders—sometimes individually, sometimes in small groups—to verify understanding.
Lesson 142Validating Elicited Requirements
Conflict resolution
Retry logic, merge strategies, or user notification
Lesson 919Optimistic Locking with Versioning
Confusing contracts
Implementing empty or exception-throwing methods just to satisfy an interface
Lesson 215Interface Segregation Principle: No Client Should Depend on Unused Methods
Congestion
Network saturation causes packet drops that look like failures
Lesson 1407Network Partitions in Practice
Connect to business impact
Tie technical decisions to outcomes they care about: revenue, customer satisfaction, competitive advantage, risk.
Lesson 35Communicating Trade-offs to Stakeholders
Connected to examples
showing real application
Lesson 1831Codifying and Evolving Principles
Connection limits
Databases can only handle a finite number of simultaneous connections.
Lesson 1383Database Scaling Challenges
Connection overhead
Each WebSocket connection requires memory.
Lesson 822Subscription Scalability Challenges
Connection pooling
reuses database connections across requests instead of opening new ones constantly, reducing overhead and staying within connection limits.
Lesson 1383Database Scaling ChallengesLesson 1395Connection Pooling and Keep-Alive
Consequences
Expected outcomes, trade-offs, and risks
Lesson 1698What Are Architecture Decision Records (ADRs)?
Conservative approach
Only update PATCH versions automatically.
Lesson 677Dependency Updates and Semantic Versioning
Consider
Does your team understand the N+1 query problem?
Lesson 956Team and Project Considerations
Consider data transfer costs
In cloud environments, bandwidth often has direct monetary costs—both for data transfer and for the time clients spend waiting.
Lesson 1114Fallacy 3: Bandwidth is Infinite
Consider database defaults
Some databases (PostgreSQL) default to Read Committed; others (MySQL InnoDB) to Repeatable Read.
Lesson 910Choosing the Right Isolation Level
Consider default values
If most calls use the same value, make it a default rather than forcing callers to specify it every time.
Lesson 388Managing Function Parameters
Consider downstream consequences
Who will use this?
Lesson 1919The Engineer's Duty to Public Safety and Welfare
Consider lazy loading selectively
For some collections, lazy loading might be preferable to cartesian explosion.
Lesson 947Cartesian Product Explosion
Consider trade-offs carefully
Highly optimized code is often less readable, harder to maintain, and more coupled to specific implementations.
Lesson 519Performance-Critical Code
Consistency and Fairness
Apply the same standards to everyone, including senior engineers.
Lesson 1617Creating a Constructive Review Environment
Consistency challenges
Remember *at-least-once* and *exactly-once* delivery semantics?
Lesson 1346Benefits and Trade-offs of Event-Driven Architecture
Consistency guarantee
The next read always gets truth from the database
Lesson 979Cache-Aside Invalidation Pattern
Consistency Needs
If you need strong consistency (financial transactions, inventory counts), write-through ensures cache and database stay in sync.
Lesson 975Pattern Selection Trade-offs
Consistent fast response times
for hot paths
Lesson 971Refresh-Ahead Caching
Consistent Quality Work
Your code, designs, and technical recommendations must reliably meet high standards.
Lesson 1795Building Technical Credibility
Consistent resource identification
Resources are identified by URLs (`/users/123`)
Lesson 759Uniform Interface Principle
Consistently applied
across decisions large and small
Lesson 1824What Are Engineering Principles?
Console output
Logs printed directly to your terminal where you can see them immediately
Lesson 1128Logging in Local Development
Consolidating test builders
or object mothers when setup gets complex
Lesson 502Refactoring Test Code
Constant to Variable
→ replace the literal with a variable
Lesson 500The Transformation Priority Premise
Constraints limit options
Legacy system integration requirements might prevent the most secure solution
Lesson 1235Driver Conflicts and Trade-offs
Construction is complex
The factory encapsulates multi-step setup logic
Lesson 235Factory Method vs Direct Instantiation
Construction steps
A builder object lets you set properties step-by-step, clearly naming each choice
Lesson 243The Builder Pattern: Separating Construction from Representation
Constructor bloat
Classes requiring many dependencies signal potential coupling issues
Lesson 183Measuring Coupling and Cohesion in Practice
Constructor Injection
Dependencies passed when object is created (most common)
Lesson 225DIP and Dependency InjectionLesson 314Implementing Strategy with Composition
consumer
tests that it sends requests and handles responses correctly according to the contract.
Lesson 422Contract Tests: Testing API BoundariesLesson 548What is Contract TestingLesson 549Provider and Consumer Contracts
Consumer creates contract
Service A declares "I call `/users/123` and expect `{ "userId": 123, "name": "string" }`"
Lesson 1321Contract Testing for Service Integration
Consumer team
writes tests defining needed interactions
Lesson 551Contract Testing Tools and Frameworks
Consumer-Driven Contract Testing (CDC)
reverses this dynamic: consumers explicitly state what they *need* from the provider, and those needs become contractual obligations the provider must satisfy.
Lesson 550Consumer-Driven Contract Testing
Consumers
are components that listen for specific events and react accordingly.
Lesson 1340Event Producers and Consumers
container runtime
is the low-level software responsible for *actually running* containers.
Lesson 1426The Container RuntimeLesson 1443Kubernetes Architecture Overview
Containerization
Services run in containers (as you've learned with Docker and Kubernetes), ensuring consistency across environments.
Lesson 1502What is Cloud-Native Architecture
Containerized
Essential when you need production database features (triggers, stored procedures, specific SQL dialects)
Lesson 531Setting Up Test Databases
Containers
share the host operating system's kernel and isolate processes using OS-level features.
Lesson 1424Containers vs Virtual Machines
Content Delivery Network (CDN)
is a geographically distributed network of servers that cache and deliver your content from locations closer to your users.
Lesson 985CDN and Edge Caching
Content negotiation
is elegant but harder to debug.
Lesson 848API Versioning Strategies
Contention
– Multiple threads writing logs simultaneously may compete for shared resources (file handles, buffers), causing blocking and slowdowns.
Lesson 1127Logging Performance Considerations
Context changes
A variable named `user` now holds multiple users
Lesson 348Rename Method and Rename Variable
Context grows
The task accumulates complexity, making handoffs or help harder
Lesson 1662Task Sizing and the Two-Day Rule
Context identifier
(which aggregate changed)
Lesson 1285Domain Events for Context Integration
Context is fresh
You remember exactly what you changed and why
Lesson 629The Feedback Loop: Speed and Confidence
Context loss
The original author moves on.
Lesson 1705Why Documentation Becomes Outdated
Context matters
criminal justice may demand different fairness criteria than college admissions
Lesson 1913The Impossibility of Fairness
Context propagation
means attaching identifying information (typically a **correlation ID** or **request ID**) to every log statement related to the same logical operation.
Lesson 1132Context Propagation in LogsLesson 1133Structured Logging Libraries and APIsLesson 1147Traces, Spans, and Context PropagationLesson 1152OpenTelemetry and Tracing Standards
Context-appropriate
`isEligibleForDiscount` instead of `flag`
Lesson 365Intention-Revealing Names
Context-controlled transitions
The Context object knows about all possible states and decides when to switch.
Lesson 310State Transitions and Encapsulation
Contextual clues
– Function names hint at what operation was attempted
Lesson 1714Reading Error Messages and Stack Traces
Continuous Experimentation
View each sprint as an experiment.
Lesson 1606Sprint Retrospective: Continuous Improvement
Continuous Integration (CI)
is a system that automatically runs these checks whenever code is pushed.
Lesson 98Automated Checks and CI IntegrationLesson 627What is Continuous Integration?
Continuous learning
isn't optional—it's an ethical requirement in a rapidly evolving field
Lesson 1897Product Quality and Professional Competence
Continuous monitoring
ensures you catch slow queries before they impact users.
Lesson 887Query Performance Testing and Monitoring
Contract is shared
(Git, artifact repository, or Pact Broker)
Lesson 551Contract Testing Tools and Frameworks
Contract mismatches
One module sends a date as a string, another expects an object
Lesson 522What Are Module Boundaries
Contract stored centrally
Usually in a contract broker or repository
Lesson 1321Contract Testing for Service Integration
Contracts
Explicit agreements about inputs, outputs, and behavior that won't break without notice
Lesson 1290Defining Module Boundaries
Contributing factors
List what made things worse or allowed the root cause to occur.
Lesson 1183Writing Effective Incident NarrativesLesson 1746Contributing Factors vs. Root Causes
CONTRIBUTING.md
Guidelines for how others can help — coding standards, pull request process, and communication channels
Lesson 1882Starting an Open Source Project
Control
You can simulate specific scenarios (errors, edge cases, timeouts) that would be hard to trigger with real dependencies.
Lesson 464What are Test Doubles and Why Use ThemLesson 1512Managed DatabasesLesson 1518Evaluating Managed Service Trade-offs
Control Allowed Methods
Only enable HTTP methods your API actually needs:
Lesson 1068Cross-Origin Resource Sharing (CORS) Security
Control concurrency
Use synchronous execution or fixed thread patterns during debugging
Lesson 1722Controlling Environmental Variables
Control difficult scenarios
like network failures or edge cases
Lesson 473The Cost-Benefit Trade-offs of Test Doubles
Control flow
is the path your program takes when it runs—which function calls which, where data moves at runtime.
Lesson 224The Dependency Flow vs Control Flow
Control redundancy
Only duplicate data where measured performance gains justify it
Lesson 865Strategic Denormalization
Control test conditions
Force specific scenarios (success, failure, edge cases) without depending on external systems
Lesson 466Stubs: Providing Canned Responses
Controlled dependencies
Ability to substitute test doubles for external services
Lesson 1244Testability and Observability
Controller Manager
– Runs multiple controllers that continuously monitor the cluster's state.
Lesson 1443Kubernetes Architecture Overview
Conventional Commits
to create release notes programmatically.
Lesson 1555Automating Changelog Generation
Converge
Repeat until estimates cluster around a consensus value
Lesson 1650Planning Poker and Consensus Estimation
Cookies
can be configured with security flags that localStorage/sessionStorage cannot match:
Lesson 1015Securing Tokens in the BrowserLesson 1382Stateless Application Design for Scalability
Coordinate
data flow between the outer world (UI, database, APIs) and the core business logic
Lesson 1275Use Cases: Application Business Rules
Coordinate teams
so everyone knows what phase the project is in
Lesson 9What is the Software Development Lifecycle (SDLC)?
Coordination needs
More parallel work requires clearer task boundaries
Lesson 1665Balancing Granularity
Copy-on-write
Share a single object until someone tries to modify it, then create a private copy
Lesson 279Smart Proxies and Reference Counting
Copy-Paste Programming
Duplicated logic everywhere
Lesson 1781Identifying Design Patterns in Existing Code
Core business entities
(User, Order, Product, Invoice)
Lesson 775Identifying Resources from Domain Models
Core infrastructure
supporting thousands of dependent systems
Lesson 1837Zero-Defect Mindset
Core needs
The fundamental problems you're solving (e.
Lesson 165Building Flexibility into Requirements
Corporate CLA
authorizing contributions.
Lesson 1881Corporate Contributor Agreements
Corpus management
Store discovered inputs in version control or artifact storage, so future fuzzing builds on past discoveries.
Lesson 625Integrating Fuzzing into CI/CD
Corrective Actions
What immediate fixes did you apply?
Lesson 1747Documenting RCA Findings
Correlate alerts
by underlying cause—one database outage shouldn't generate 50 separate alerts.
Lesson 1158Alert Fatigue: Reducing False Positives
Correlation
Link related events across services using request IDs
Lesson 1129What is Structured LoggingLesson 1135Querying and Analyzing Structured Logs
Correlation patterns
(how traffic spikes affect latency and errors)
Lesson 1218Production Traffic Analysis for Planning
Cost constraints
– What level of reliability can you afford to build and maintain?
Lesson 1178Setting Realistic and Achievable SLOs
Cost estimates
I/O operations, memory usage, and CPU processing time
Lesson 880Index Selection and Coverage
Cost metrics
Relative numbers showing how expensive each operation is.
Lesson 878Using Query Execution Plans to Validate Indexes
cost of delay
is the financial impact of *not* shipping a feature or product on time.
Lesson 34The Cost of Delay and Opportunity CostLesson 42Balancing Debt and Delivery
Cost of failure
Missing an SLA means refunds, credits, or even contract termination.
Lesson 1177Service Level Agreements (SLAs): Legal Commitments
Cost optimization
through negotiation leverage matters
Lesson 1541Evaluating Lock-in vs Time-to-Market Trade-offs
Cost-aware architectures
that minimize unnecessary data movement
Lesson 1117Fallacy 6-8: Administration, Cost, and Homogeneity
Cost-sensitive
Patents cost $15,000-$30,000+ to file and maintain
Lesson 1890Trade Secrets vs Patents: Choosing a Strategy
Cost-to-fix ratio
Small changes with big impact should come first
Lesson 1772Managing Technical Debt During Refactoring
Costs
Relative expense of each operation (not real time, but proportional)
Lesson 879Understanding Query Execution Plans
Count bad events
Failed requests, slow responses beyond threshold, or downtime minutes
Lesson 1176Calculating and Tracking Error Budgets
Coupling data
(sharing or calling across services) gives you:
Lesson 1309Data Duplication vs Data Coupling Trade-offs
Courage
Teams have the courage to do the right thing and tackle tough problems
Lesson 1581Scrum Framework Overview
Cover for teammates
Build knowledge redundancy so no one is irreplaceable.
Lesson 1860Vacation and Time Off
Coverage
Teams might split by time zones (follow-the-sun), weekdays versus weekends, or business hours versus after-hours.
Lesson 1163The On-Call Rotation
Coverage-guided fuzzing
is smarter: it monitors which parts of your code each input reaches, then evolves inputs that discover *new* code paths.
Lesson 622Coverage-Guided Fuzzing
covering index
(also called a **covering composite index**) is an index that includes *every column* referenced in a query—not just the columns in the `WHERE` clause, but also those in the `SELECT` list and any `ORDER BY` or `GROUP BY` clauses.
Lesson 874Covering IndexesLesson 880Index Selection and Coverage
CPU Caches (L1/L2/L3)
sit closest to the processor cores.
Lesson 960Cache Memory Hierarchies
CPU limits
Restrict CPU shares or cores (e.
Lesson 1438Container Resource Limits and Health Checks
CPU saturation
(computation limits)
Lesson 1217Scalability Testing and Limits
CPU-bound
when the processor is the limiting factor.
Lesson 1193Common Performance Bottlenecks
CPU-bound bottlenecks
occur when your application spends most of its time processing data.
Lesson 1380Identifying Scalability Bottlenecks
CQRS
Separate read and write data models for optimized scaling
Lesson 1509Cloud-Native Data Management
Create
doubles quickly (usually mocks or spies)
Lesson 471Test Double Libraries and Frameworks
Create a branch
for your changes (never work on `main`)
Lesson 1880Contributing to Open Source Projects
Create a code challenge
hash the verifier using SHA-256, then base64url-encode it
Lesson 1019Authorization Code Grant with PKCE
Create a Mediator interface
with methods for handling widget events (e.
Lesson 300Implementing a Dialog or Form Mediator
Create a new class
to hold that responsibility
Lesson 198Refactoring to SRP: Extracting Classes
Create a Safe Environment
Team members must feel comfortable sharing honest feedback without fear of blame.
Lesson 1606Sprint Retrospective: Continuous Improvement
Create false confidence
– tests pass with doubles but fail with real dependencies
Lesson 473The Cost-Benefit Trade-offs of Test Doubles
Create new tables
instead of modifying existing ones
Lesson 717Database Schema Deployment
Create psychological safety
Explicitly invite dissenting views: "What concerns haven't we addressed?
Lesson 1813Facilitating Technical Discussions
Create reusable teaching examples
Document particularly instructive code sections as case studies your team can reference later.
Lesson 1785Teaching Others Through Legacy Code Reviews
Create rituals
End-of-day shutdown routines (closing laptop, changing clothes, walking around the block) signal your brain that work is over
Lesson 1859Remote Work and Disconnecting
Create safety nets
Write tests, use version control, and maintain backups
Lesson 7Uncertainty and Risk Management
Create shared ownership
by involving team leads in shaping the strategy
Lesson 1821Technical Strategy and Vision
Create, Read, Update, Delete
operations on well-defined entities.
Lesson 952Scenarios Where ORMs Shine
Creates isolated environments
using Linux kernel features like namespaces (process, network, filesystem isolation) and cgroups (CPU, memory, I/O limits)
Lesson 1426The Container Runtime
Creating coalitions
Rather than going it alone, find allies who support your technical direction.
Lesson 1794Influence Without Authority
Creating descriptive variables
to clarify test data meaning
Lesson 502Refactoring Test Code
Creating tight feedback loops
(days or weeks, not quarters)
Lesson 1827Bias for Action and Iteration
Creating visibility
Ensuring their work is seen by decision-makers, perhaps by having them present to leadership or represent the team externally.
Lesson 1801Sponsorship and Career Development
Creation is trivial
– A simple constructor call with no logic is clear and direct
Lesson 242Factory Pattern Trade-offs
Creation logic changes frequently
– The "how" of building objects evolves, and you want to isolate those changes
Lesson 242Factory Pattern Trade-offs
Creational patterns
Look for object creation logic separated from usage (Factory, Builder, Singleton)
Lesson 1781Identifying Design Patterns in Existing Code
Creativity requires rest
Breakthrough solutions often emerge during downtime, not during the 14th hour at your desk.
Lesson 1856Sustainable Pace and the 40-Hour Week
Creator
(abstract or interface): declares the factory method that returns an object
Lesson 234Factory Method Pattern: Intent and Structure
Credential Leaks
Every developer, contractor, or third-party vendor who accesses your codebase now has your production database password.
Lesson 741The Dangers of Hardcoding Secrets
Credential stuffing vulnerabilities
Systems that don't detect or prevent attackers from testing thousands of leaked username/password pairs from other breaches.
Lesson 1048A07: Identification and Authentication Failures
Credit attribution
In async threads, explicitly acknowledge who raised ideas first—visibility matters for career growth.
Lesson 1851Inclusive Communication and Collaboration
CRI-O
Designed specifically for Kubernetes
Lesson 1426The Container Runtime
Critical
System-wide impact or user-facing service down.
Lesson 1156Alert Severity Levels and Response Expectations
Critical interactions
that define your contract (like "did we save to the database?
Lesson 485Over-Specification with Behavior Verification
critical path
is the longest chain of dependent tasks—the minimum time your project will take even with infinite engineers.
Lesson 1664Parallel vs Sequential WorkLesson 1666What Are Project DependenciesLesson 1669Critical Path and Slack Time
Critical-path freshness
Cache aggressively for reads, but always read-through for writes or transactions to avoid acting on stale state.
Lesson 982Dealing with Stale Data
Critical/security code
should have even lower limits (5–7)
Lesson 390Using Complexity Metrics in Practice
Criticality
Life-support medical software demands near-total test coverage.
Lesson 427Finding the Testing Sweet Spot
CronJob
creates Jobs on a schedule, using familiar cron syntax (like `0 2 * * *` for "2 AM daily").
Lesson 1462Jobs and CronJobs for Batch Work
Cross-browser support
Test visual consistency across Chrome, Firefox, Safari, etc.
Lesson 580Implementing Visual Testing Tools
cross-cutting concerns
because they literally cut across all your carefully drawn layer boundaries.
Lesson 1260Cross-Cutting Concerns in LayersLesson 1327API Gateway Pattern
Cross-domain scenarios
where cookies don't travel well
Lesson 1016Sessions vs Tokens: Choosing the Right Approach
Cross-service state changes
Events
Lesson 1322Communication Protocol Trade-offs
Cross-Site Request Forgery (CSRF)
attacks by controlling when browsers send cookies with cross-origin requests.
Lesson 1010Cookie Security: HttpOnly, Secure, and SameSite
Cross-team collaboration
on unfamiliar systems
Lesson 1847Measuring and Rewarding Learning
Cross-team comparison
Comparing Team A's velocity of 40 to Team B's velocity of 25 is like comparing someone's shoe size to someone else's shirt size—the numbers mean nothing together.
Lesson 1613The Dangers of Velocity Misuse
Cross-team forums
where similar systems exist
Lesson 1185Building a Learning Culture from Incidents
CRUD-heavy applications
with minimal business rules often don't benefit—the abstraction overhead outweighs the flexibility gains.
Lesson 1271When to Use Hexagonal Architecture
Cryptic abbreviations
`calcTtlPrc` instead of `calculateTotalPrice`
Lesson 348Rename Method and Rename Variable
CSS Context
Even CSS can be exploited, so user data in stylesheets needs CSS-specific encoding.
Lesson 1064Preventing XSS Through Output Encoding
CSV
works well for simple tabular data, like lists of users or products, that you'll load into database tables.
Lesson 544Fixture Files and Data Formats
Culture
where people feel safe making judgment calls
Lesson 1802Scaling Your Impact Through Others
Culture erosion
"hero culture" replaces sustainable practices
Lesson 1855The Cost of Overwork
Current challenges
Someone struggling with confidence needs encouragement and quick wins; someone plateauing needs stretch assignments.
Lesson 1798Tailoring Mentorship Styles
Current state
"Currently 2 replicas are running"
Lesson 1455ReplicaSets and Ensuring Desired State
Customer collaboration
means treating your stakeholders as ongoing partners throughout development, not just at the contract-signing and delivery phases.
Lesson 1578Customer Collaboration Over Contract Negotiation
Customer diversity
Different clients have different upgrade timelines
Lesson 1571Long-Term Support (LTS) Fundamentals
Customer empathy
The team viscerally understands how quality affects real users
Lesson 1832Defining Quality Culture
Customer expectations
– What level of reliability do users actually need to trust your service?
Lesson 1178Setting Realistic and Achievable SLOs
Customer impact was significant
Even brief outages affecting many users or critical users deserve analysis
Lesson 1181When to Conduct a Postmortem
Customer trust erodes
with each production failure.
Lesson 426The Cost of Not Testing
Customers
require clear communication about what's changing, especially breaking changes or downtime windows.
Lesson 1546Coordinating with Stakeholders
Customers/Clients
Those paying for the software (sometimes different from users!
Lesson 19Who Are Stakeholders?

D

Daily Scrum
(also called the "daily stand-up") is a short, timeboxed meeting held every day during a sprint.
Lesson 1588Daily Scrum
Danger
The **N+1 query problem**.
Lesson 940Lazy Loading vs Eager Loading
Dark launches
take this further: you deploy new functionality but route zero user traffic to it initially.
Lesson 695Separating Deployment from Release
Dashboard Links
Include direct links to pre-filtered dashboards showing the relevant metrics.
Lesson 1160Alert Context: Including Diagnostic Information
Dashboards
Automatically visualize trends from structured data
Lesson 1129What is Structured LoggingLesson 1153Tracing Infrastructure and Tools
Data Access Layer
Manages communication with databases or external systems
Lesson 1255What is Layered Architecture
Data breaches
(reading sensitive records)
Lesson 1044A03: Injection
Data compatibility
Ensure database changes support both versions during rollback windows
Lesson 720Rollback Strategies and Mechanisms
Data correctness is critical
financial transactions, inventory counts, user account balances
Lesson 1408CP Systems: Choosing Consistency Over Availability
Data Coupling
means Service A directly queries Service B (or its database) for that data.
Lesson 1309Data Duplication vs Data Coupling Trade-offs
Data Duplication
means Service A stores its own copy of data that originates in Service B.
Lesson 1309Data Duplication vs Data Coupling Trade-offs
Data flow
with numbered arrows (1 → 2→ 3)
Lesson 1637Explaining Complex Systems Simply
Data flow coverage
helps when tracking how data moves through transformations is critical—think financial calculations or data pipelines.
Lesson 605Choosing the Right Coverage Metric
Data flow diagrams
How does information move?
Lesson 1752Reading and Understanding Legacy Code
Data formats
Storing data in vendor-specific formats or schemas
Lesson 1539What is Vendor Lock-in
Data hiding
means restricting direct access to that data from outside code.
Lesson 171Encapsulation and Data Hiding
Data in Context
If multiple states share data (like a counter or user input), store it in the Context and pass it to State methods.
Lesson 310State Transitions and Encapsulation
Data in State objects
If data is truly specific to one state, encapsulate it within that State class.
Lesson 310State Transitions and Encapsulation
Data inconsistencies
Edge cases in production data you never encountered
Lesson 719Deployment Risk and the Need for Rollback
Data inconsistency
Related changes get partially applied
Lesson 896What Are Transactions and Why They Matter
Data isolation
Tenant A cannot access Tenant B's data
Lesson 1528What is Multi-TenancyLesson 1531Data Isolation Strategies
Data Layer
Persist and retrieve data, manage transactions, handle database-specific concerns
Lesson 1257Layer Responsibilities and Boundaries
Data locality
to minimize cross-region latency
Lesson 1509Cloud-Native Data Management
Data loss risk
Reversing migrations often requires dropping columns or tables.
Lesson 889Forward-Only Migration Philosophy
Data management
Schema conventions, data ownership, privacy compliance
Lesson 1251Architecture Governance and Standards
Data manipulation
(updating or deleting data)
Lesson 1044A03: Injection
Data Mapper
or **Repository**, working hand-in-hand with the **Unit of Work** to track changes to these unique instances.
Lesson 939Identity Map Pattern
Data Mapper Pattern
separates your domain objects (your business logic classes) from persistence concerns by creating a mapper layer that handles all database interactions.
Lesson 936Data Mapper PatternLesson 938Unit of Work PatternLesson 955ORMs in Domain- Driven Design
Data Minimization Principle
states that you should collect, process, and store only the personal data that is directly necessary to accomplish your specific purpose.
Lesson 1901Data Minimization Principle
Data Ownership
Each microservice typically manages its own database or data store.
Lesson 1294Defining Microservices
Data ownership lines
Where different parts of the system manage distinct data models
Lesson 1775Identifying Strangulation Boundaries
Data partitioning
(also called **sharding**) solves this by dividing your dataset across multiple databases or storage nodes.
Lesson 1396Why Partition Data?
Data permanence
What happens to user data if the company pivots or fails?
Lesson 1933Long-term Thinking and Digital Stewardship
Data requirements
Database schemas, data formats, validation rules
Lesson 127System Requirements
Data size
How big is each resource representation?
Lesson 782Resource Granularity Trade-offs
Data Transfer Object
is a simple, flat data structure with no business logic — just fields and basic getters/setters.
Lesson 1278Crossing Boundaries with DTOs
Data transformations
Operations like compression, encryption, filtering, or mapping often have reversibility or preservation properties.
Lesson 612When Property-Based Testing Shines
Data types
Column type validation
Lesson 898The Consistency Property
Data-Driven Decision Making
because collaborative environments produce shared context and evidence.
Lesson 1830Collaboration Over Silos
Data-driven scenarios
If a dropdown only appears when "Other" is selected, your test must first trigger that selection, then verify the conditional element's presence.
Lesson 566Handling Dynamic and Conditional UI
Database caching
The database itself caches query results and indexes.
Lesson 1384Caching to Reduce Load
Database calls
Even in-memory databases add overhead
Lesson 441Fast Feedback: Keeping Tests Quick
Database changes
One DBA prepares a migration script, another executes it in production
Lesson 1037Separation of Duties
Database connection limits
or query performance collapse
Lesson 1217Scalability Testing and Limits
Database Initialization
involves creating tenant-specific schemas, tables, or database instances depending on your data isolation strategy.
Lesson 1533Tenant Onboarding and Provisioning
Database interactions
Can you actually save and retrieve data as expected?
Lesson 416Integration Tests: Testing Module Interactions
Database optimizer struggles
More joins mean more possible execution paths to evaluate
Lesson 864The Cost of Over-Normalization
Database Per Service Pattern
means each service manages its own dedicated database that no other service can access directly.
Lesson 1307Database Per Service Pattern
Database records
A set of users, products, or orders loaded into your test database
Lesson 540What Are Test Fixtures
Database Schema
Ensure your data layer can support requirements from all active versions
Lesson 851Managing Multiple API Versions
Database sprawl
A single service owning 50+ database tables likely contains multiple bounded contexts.
Lesson 1312Getting Service Granularity Right
Database systems
(PostgreSQL, MongoDB, Redis)
Lesson 1277Frameworks and Drivers Layer
Database transactions
Rollback points capture state before changes
Lesson 301The Memento Pattern: Capturing Object State
Database-per-service
Each microservice owns its data store, preventing tight coupling
Lesson 1509Cloud-Native Data Management
Database-specific features
CTEs (Common Table Expressions), full-text search, or vendor-specific optimizations like PostgreSQL's `DISTINCT ON` don't map cleanly to ORM abstractions.
Lesson 951When to Drop Down to SQL
Date ranges
`git log --since="2 weeks ago"` or `git log --until="2024-01-01"`
Lesson 117Reading Git Log: Understanding Commit History
Date stamps
"Last updated: Jan 2021.
Lesson 1710Deprecation and Archival Strategies
De-risking complex features
("Is this third-party API actually usable?
Lesson 1844Proof of Concepts and Spike Solutions
Dead Letter Queue
a special queue for messages that couldn't be processed.
Lesson 1363Dead Letter Queues and Error Handling
Deadlock-free protocols
Use timestamp-ordering or wound-wait schemes where transactions have priorities, preventing circular dependencies by design.
Lesson 917Deadlock Detection and Prevention
Debug and logging statements
Development-only code paths that don't affect business logic.
Lesson 597Excluding Code from Coverage
Debug with logs
(what caused request ID xyz to fail)
Lesson 1136Metrics vs Logs vs Traces
Debugging
When something breaks, you can use `git log` to pinpoint exactly which logical change caused the problem.
Lesson 108Atomic Commits: One Logical ChangeLesson 671Lock Files and ReproducibilityLesson 686What is a Reproducible Build?
Debugging becomes archaeology
You're piecing together clues from user reports and guessing what happened
Lesson 1119Why Logging Matters
Debugging becomes painful
A failure in Test A breaks Tests B, C, and D
Lesson 440Avoiding Test Interdependence
Debugging Confidence
If you can't reproduce a build, you can't truly know what's running in production.
Lesson 691Benefits and Trade-offs
Debugging nightmares
Tracing a flow across multiple asynchronous event handlers is exponentially harder than following a synchronous call stack.
Lesson 1346Benefits and Trade-offs of Event-Driven Architecture
Debugging superpowers
Reproduce bugs by replaying the exact sequence of events that caused them.
Lesson 1347Event Sourcing Fundamentals
Debugging time explodes
without tests.
Lesson 426The Cost of Not Testing
Debugging value
Logs lose usefulness over time—a bug from six months ago is rarely investigated.
Lesson 1126Log Retention and Storage
Decision authority
Fixing the issue requires taking a major service offline, which needs management approval
Lesson 1169Escalation Paths
Decision rationale
(why things are structured this way)
Lesson 1226Architecture as Communication
Decision records
explain why certain fairness definitions or thresholds were chosen
Lesson 1917Explainability and Accountability
Decision trees
If X, do Y; if Z, escalate
Lesson 1168Runbooks and Playbooks
Decision visibility
Sharing the reasoning behind technical choices, not just the conclusions
Lesson 1828Transparency and Open Communication
Decision-making criteria
when evaluating tools or approaches
Lesson 1803Defining Technical Vision
Declarative APIs
Infrastructure and configuration are defined declaratively (IaC, GitOps principles) rather than through manual steps.
Lesson 1502What is Cloud-Native Architecture
Declarative provisioning
is like ordering from a menu: "I want lasagna.
Lesson 1480Declarative vs Imperative Provisioning
Declarative setup
Use configuration files, not manual steps
Lesson 748Introduction to the Twelve-Factor App Methodology
Decompose Conditional
means extracting both the conditional expression and its resulting actions into separate, well- named methods.
Lesson 355Decompose Conditional
Decompose large stories
Break down epics or oversized stories into smaller, sprint-sized pieces.
Lesson 1607Backlog Refinement Sessions
Decorator
is more **flexible**—infinite combinations without new classes.
Lesson 271Decorator vs. Inheritance: Flexibility and ComplexityLesson 286Pattern Selection Criteria
Decouple Deployment from Release
You can deploy new code to production while keeping features hidden until you're ready to announce them.
Lesson 1558What Are Feature Flags and Why Use Them
Decoupled request processing
Handlers don't know about each other or the command's origin
Lesson 294Combining Chain and Command Patterns
Decoupling producers and consumers
Services don't need to know about each other
Lesson 1317Event Streaming with Kafka
Dedicated Learning Time
Many teams allocate 10-20% of sprint capacity for learning—reading, experimentation, or skill development.
Lesson 1840Creating a Culture of Continuous Learning
Dedicated persistent storage
Each pod can have its own PersistentVolumeClaim that persists across pod restarts
Lesson 1460StatefulSets for Stateful Applications
Dedicated test directories
give each test suite its own sandbox folder.
Lesson 535Testing File System Operations
Deduplication
Identical requests within that batch are combined
Lesson 816DataLoader Pattern for Batching and Caching
Deep checks
"Can it handle real work?
Lesson 1391Health Checks and Failover
Deep mocking
couples your tests to internal implementation details.
Lesson 475Mocking at the Boundary
Default configurations
Fallback settings that disable security features
Lesson 1034Fail Securely
Default to optional
Make fields optional unless absolutely required
Lesson 1901Data Minimization Principle
Default value
What happens if this isn't set?
Lesson 731Documentation and Configuration Schemas
Default Values
Return sensible defaults instead of crashing—show a generic profile picture if the image service is down.
Lesson 1090Error Recovery and Graceful DegradationLesson 1100The Fallback Pattern
Defect Escape Rate
captures bugs that slip through review into production.
Lesson 1623Measuring and Improving Review Culture
Defense
Use LDAP escaping functions to neutralize special characters like `*`, `(`, `)`, and `\` before inserting user input into filters.
Lesson 1058LDAP and XML Injection
Defensive Patents
Companies build patent portfolios not to sue others, but to deter lawsuits.
Lesson 1888Patent Risks in Software Development
Defensive purposes
Building a patent portfolio to deter litigation or enable cross-licensing
Lesson 1890Trade Secrets vs Patents: Choosing a Strategy
Define a tagging policy
before creating resources
Lesson 1536Cost Allocation and Tagging Strategies
Define baseline metrics
– Establish what "good" performance looks like (e.
Lesson 1203Continuous Performance Testing
Define criteria
What matters most for this project?
Lesson 30Trade-off Analysis and Decision Making
Define desired state
You describe how servers *should* be configured
Lesson 1488Introduction to Configuration Management
Define interfaces
(ports) for data access or external services, letting adapters implement them
Lesson 1275Use Cases: Application Business Rules
Define scope boundaries
– what's in and what's out
Lesson 147What are Acceptance Criteria?
Define success metrics upfront
What does "better" mean?
Lesson 1829Data-Driven Decision Making
Define technical strategy
that guides multiple teams for months or years
Lesson 1818What is a Staff Engineer?
Define the contract
Create an interface or abstract class that declares what operations are available
Lesson 190Extensibility Through Abstractions
Define the goal upfront
Are you deciding between two architectures?
Lesson 1636Running Technical Discussions
Define the question clearly
"Can we process 10,000 records/second with library X?
Lesson 1663Identifying Unknowns and Spikes
Define your target level
Typically AA for most public-facing applications
Lesson 584WCAG Compliance in Testing
Defined success/failure criteria
Know what you're learning before you start
Lesson 1841Safe-to-Fail Experiments and Innovation Time
Defining clear acceptance criteria
before coding starts, so everyone knows what "done" means
Lesson 1835Building Quality In
Defining mitigations
Which security controls (from your security engineering toolkit) address each threat?
Lesson 1078What is Threat Modeling
Defining requirements
what features the product needs
Lesson 21The Product Owner and Business Stakeholders
Definitions (def)
Where a variable gets a value assigned
Lesson 603Data Flow Coverage
Degraded functionality
Offer limited features instead of none
Lesson 1100The Fallback Pattern
Degree Matters
CAP presents binary choices, but reality offers gradients.
Lesson 1413Beyond CAP: Practical Considerations
Delayed value
Resources spent on speculative features delay delivering what users actually need now
Lesson 170You Aren't Gonna Need It (YAGNI)
DELETE
Idempotent but *not* safe.
Lesson 765Safe and Idempotent Methods
Delete outdated comments
If you extract logic to a new method, remove comments that no longer apply to the original location
Lesson 381Maintaining Comments During Refactoring
Delete related data
in analytics systems, caches, and third-party services
Lesson 1903Data Retention and Deletion
DELETE requests
typically return:
Lesson 773Matching Verbs to Status Codes
Deleted objects
to `DELETE`
Lesson 938Unit of Work Pattern
Deleted tests
Did removing old code also remove its tests appropriately?
Lesson 595Coverage in Code Review
Deliver incremental value
that stakeholders can see and use
Lesson 1661Vertical Slicing
Deliver working software frequently
, from weeks to months
Lesson 1580The Twelve Principles Behind the Agile Manifesto
Deliverables
are the tangible outputs you produce: working features, documentation, deployed systems, or test reports.
Lesson 1659Identifying Milestones and Deliverables
Delivery guarantees
describe what promises your messaging infrastructure makes about whether events arrive at consumers.
Lesson 1344At-Least-Once vs Exactly-Once Delivery
Demographic parity
requires equal approval rates across groups (e.
Lesson 1913The Impossibility of Fairness
Demonstrate working software
that meets the Definition of Done
Lesson 1589Sprint Review
Demonstrated Expertise
Show depth in areas that matter to your team.
Lesson 1795Building Technical Credibility
Denial of Service
Inputs that cause crashes, infinite loops, or excessive resource consumption are security issues.
Lesson 624Detecting Security Vulnerabilities
Denormalize strategically
If a complex join runs thousands of times per second and causes bottlenecks, consider denormalization—but only for that specific case.
Lesson 868Balancing Normalization and Performance
DENY
Cannot be framed at all, anywhere
Lesson 1073X-Frame-Options and Frame Ancestors
Depend on the abstraction
Write your code to use the interface, not concrete implementations
Lesson 190Extensibility Through Abstractions
Dependabot
(GitHub's native solution) and **Renovate** automatically monitor your dependencies, create pull requests when updates are available, and even suggest which updates are safe based on semantic versioning rules.
Lesson 685Automating Dependency UpdatesLesson 1879Managing Open Source Dependencies
Dependencies and imports
reveal the technology landscape at different times.
Lesson 1780Reading Legacy Code as Historical Documentation
Dependencies cascade unpredictably
A single data change might invalidate dozens of cached results.
Lesson 976The Two Hard Things in Computer Science
Dependencies have cascading failures
(one problem triggers many)
Lesson 1093Introduction to Resilience Patterns
Dependencies update
Libraries and frameworks your code relies on move forward
Lesson 41Code Evolution and Entropy
Dependency conflicts
Version mismatches discovered only in production
Lesson 719Deployment Risk and the Need for Rollback
Dependency confusion attacks
trick package managers into downloading malicious packages with similar names.
Lesson 1885Open Source Security and Supply Chain Risks
Dependency direction
refers to which components depend on which others.
Lesson 189Dependency Direction and Stability
Dependency flow
is about which modules or files know about (depend on) other modules at compile-time.
Lesson 224The Dependency Flow vs Control Flow
Dependency Injection
Pass cross-cutting services (like loggers or validators) into layers from outside, so each layer uses a shared interface without knowing implementation details.
Lesson 1260Cross-Cutting Concerns in LayersLesson 1269Testing Hexagonal Applications
Dependency Injection (DI)
is a technique where objects receive their dependencies from external sources rather than creating them internally.
Lesson 231Alternatives to Singleton: Dependency Injection
dependency inversion
pass it down as a parameter or callback rather than reaching upward.
Lesson 1257Layer Responsibilities and BoundariesLesson 1273The Dependency RuleLesson 1288What is a Modular Monolith
Dependency Inversion Principle
the class depends on a concrete implementation (the Singleton) rather than an abstraction.
Lesson 230The Singleton Anti-Pattern Debate
Dependency Inversion Principle (DIP)
states that high-level modules (which contain important business logic) should not depend on low-level modules (which handle detailed operations).
Lesson 221What is the Dependency Inversion Principle
Dependency registers
are living documents (spreadsheets, project management tools, or wikis) that list each dependency, its owner, expected completion date, and current health status.
Lesson 1672Tracking and Communicating Dependency Status
Dependency Rule
ensures that your business logic (Entities and Use Cases) doesn't know about databases, UI frameworks, or any external tools.
Lesson 1279Testing in Clean Architecture
Dependency unavailability
means an external service you rely on is either:
Lesson 1108Handling Dependency Unavailability
Deploy
Roll out application code that writes to both old and new structures
Lesson 698Database Changes in CDLesson 717Database Schema Deployment
Deploy 1
Add `user_email` column, write to both columns
Lesson 721Database Rollbacks and Schema Compatibility
Deploy 2
Migrate old data, read from `user_email`
Lesson 721Database Rollbacks and Schema Compatibility
Deploy immediately
Main is always deployable; merging triggers automatic deployment
Lesson 85GitHub Flow: Simplified Branch-and-MergeLesson 1568What are Hotfixes and When to Use Them
Deploy to a subset
Route a small percentage of traffic to the new version
Lesson 710Canary Releases
Deployability
measures how smoothly and quickly you can release your system to production or other environments.
Lesson 1246Portability and Deployability
Deployable
The code can be packaged, deployed, and run in production-like environments.
Lesson 694Production-Ready Definition
Deployment → Implementation
Performance issues in production inform code optimizations
Lesson 17Feedback Loops Across the SDLC
Deployment Automation
Strong CI/CD pipelines enable simpler strategies.
Lesson 88Choosing a Strategy for Your Team
Deployment bottlenecks
If you can't deploy one feature without coordinating five others within the same service, it's too coarse.
Lesson 1312Getting Service Granularity RightLesson 1336Migrating from Monolith to Microservices
Deployment Coordination
Decide whether versions deploy together or independently
Lesson 851Managing Multiple API Versions
Deployment health checks
prevent this nightmare by verifying the application is actually healthy before traffic arrives.
Lesson 715Deployment Health Checks
Deployment independence
You must deploy parts of the system without touching others
Lesson 1330Microservices Are Not a Goal
Deployment is safer
rolling updates without session loss
Lesson 1382Stateless Application Design for Scalability
Deployment practices
CI/CD pipelines, infrastructure-as-code templates
Lesson 1251Architecture Governance and Standards
Deployment Runbooks
walk through release procedures: pre-deployment checks, rollout steps, smoke tests, and rollback procedures.
Lesson 1685Runbooks and Operational Documentation
Deprecation
is the formal process of announcing that a feature, function, or version is scheduled for removal or no longer recommended.
Lesson 676Deprecation and Version LifecycleLesson 745Secret Rotation and Lifecycle Management
Deprecation warnings
Mark features as deprecated in documentation, release notes, and ideally in code (like log warnings).
Lesson 676Deprecation and Version Lifecycle
Depth
Solving critical technical problems others couldn't
Lesson 1823The Staff Engineer Promotion Path
Descriptive
Use clear names like `photos:upload` not just `photos`
Lesson 1022OAuth2 Scopes and Consent
Descriptive Message
– A human-readable explanation of what went wrong
Lesson 1714Reading Error Messages and Stack Traces
Design Choices
Even with "neutral" data, the features engineers choose to include or exclude introduce bias.
Lesson 1910What is Algorithmic Bias
Design defensively
Assume misuse, anticipate edge cases, and build safeguards
Lesson 1919The Engineer's Duty to Public Safety and Welfare
Design Document
(or **RFC** — Request for Comments) is a formal written proposal that describes a planned change to a system.
Lesson 1686Design Documents and RFCs
Design flaw
Days to weeks (refactor a module)
Lesson 1225The Cost of Architectural Mistakes
Design for Failure
Assume components will fail.
Lesson 1502What is Cloud-Native Architecture
Design quality
Revealing poor separation of concerns or hidden coupling
Lesson 335What Are Code Smells?
Design-Around
When aware of a patent, teams may intentionally implement alternative approaches that achieve the same goal without infringing.
Lesson 1888Patent Risks in Software Development
Designated responders
with authority to invoke the procedure
Lesson 1549Emergency Release Procedures
Designing for Longevity
reduces e-waste.
Lesson 1932Sustainable Software Engineering Practices
Detached objects
lose their session connection.
Lesson 950Session and Transaction Management
Detailed design
specifies door styles, cabinet layouts, and fixture choices.
Lesson 1219Defining Software Architecture
Detecting anomalies
Unusual access patterns may signal compromise
Lesson 746Access Control and Audit Logging for Secrets
Detection
The tool regularly checks your dependency manifest and lock file against package registries
Lesson 685Automating Dependency UpdatesLesson 1165Incident Response Workflow
Determinism
Tests produce the same results every time, avoiding flakiness from external factors.
Lesson 464What are Test Doubles and Why Use Them
Deterministic behavior
Same inputs reliably produce same outputs
Lesson 1244Testability and Observability
Deterministic generation
Identical requests must produce identical keys.
Lesson 961Cache Keys and Lookup Mechanisms
Developer Experience
Auto-completion, inline documentation, and idiomatic code patterns make integration faster and less error-prone.
Lesson 854The Role of Client SDKs
Developer identifiers
`feature/alice/dashboard-redesign` (useful in some workflows)
Lesson 89Branch Naming Conventions and Policies
Development dependencies
Slightly flexible ranges work well—you want linter and tooling updates
Lesson 673Pinning vs Flexible Versioning
Development Speed
Tests slow down initial development but speed up changes later.
Lesson 427Finding the Testing Sweet Spot
Development velocity
Having room to innovate, deploy changes, and occasionally fail
Lesson 1174Service Level Objectives (SLOs): Setting Reliability Targets
Device drivers
and hardware interfaces
Lesson 1277Frameworks and Drivers Layer
Diagnose with traces
(why checkout takes 3 seconds)
Lesson 1136Metrics vs Logs vs Traces
Diagnostic information
Context when things go wrong
Lesson 1244Testability and Observability
Dialog Mediator
acts as a central coordinator.
Lesson 300Implementing a Dialog or Form Mediator
Did my request succeed
Network issues might prevent you from receiving a confirmation, even though the operation completed.
Lesson 1103What Are Partial Failures?
Different client needs
Mobile apps might prefer GraphQL (reduce data transfer), while server-to-server integrations use gRPC (performance)
Lesson 827Mixing API Styles in Practice
Different environments
may have different versions installed, causing subtle bugs
Lesson 667Declaring Dependencies Explicitly
Different machines
Developer laptop vs CI server vs cloud instance
Lesson 690Verifying Build Reproducibility
Different ports
for any network services
Lesson 462Parallelizing Test Execution
Different times
Build today, build tomorrow
Lesson 690Verifying Build Reproducibility
Different users
Different accounts or home directories
Lesson 690Verifying Build Reproducibility
Difficult testing
You must accommodate methods you never call
Lesson 215Interface Segregation Principle: No Client Should Depend on Unused Methods
Difficult to reverse-engineer
Algorithms running server-side, proprietary data processing methods
Lesson 1890Trade Secrets vs Patents: Choosing a Strategy
Difficult to test
Testing one giant method means testing everything it does at once.
Lesson 336Bloaters: Long MethodLesson 337Bloaters: Large Class and God Object
Digital stewardship
means recognizing that your code doesn't just serve this sprint's goals—it shapes infrastructure, behaviors, and ecosystems that may outlive your tenure at the company.
Lesson 1933Long-term Thinking and Digital Stewardship
Diminishing returns
For simple CRUD APIs or internal services, Level 2 is often sufficient
Lesson 797HATEOAS Trade-offs and Maturity ModelsLesson 1816Making Decisions When Consensus Fails
Direct conversation
with the person or team involved (often resolves 80% of issues)
Lesson 1920Speaking Up: When and How to Raise Concerns
Direct Instantiation
means calling a constructor yourself:
Lesson 235Factory Method vs Direct Instantiation
Direct Object References
A user changes a URL from `/invoice/123` to `/invoice/124` and suddenly sees someone else's invoice — because the code never verified ownership.
Lesson 1042A01: Broken Access Control
Direct ownership
Resources where individual users or small groups "own" specific items—think shared documents or project folders.
Lesson 1026Access Control Lists (ACLs)
Directed
The connections have arrows—they point from one node to another
Lesson 65Understanding Git History as a DAG
Directed Acyclic Graph
sounds complex, but break it down:
Lesson 65Understanding Git History as a DAG
Director
class manages the step-by-step construction process, letting you reuse complex building algorithms across different builders.
Lesson 245Director Pattern and Construction Algorithms
Directory-per-environment
Single branch with `/environments/dev`, `/environments/staging`, `/environments/prod` folders.
Lesson 1499Repository Structure for GitOps
Dirty reads
Reading uncommitted data from another transaction that might get rolled back
Lesson 899The Isolation PropertyLesson 904What Isolation Levels Protect AgainstLesson 905Read Uncommitted Isolation
Disable animations
CSS animations and transitions can be caught mid-motion, causing flaky comparisons.
Lesson 581Managing Visual Test Stability
Disable notifications
After-hours Slack messages can wait until morning
Lesson 1859Remote Work and Disconnecting
Disaster recovery
If your CI server crashes, you rebuild pipelines from files, not memory
Lesson 708Pipeline as Code
Discard the prototype code
Resist the urge to "clean it up"
Lesson 520Uncertain Requirements and Prototypes
Discipline
means actually doing these things *every time*, even when you're tired, rushed, or convinced "this small change doesn't need tests.
Lesson 6Process and Discipline
Disclose
the conflict to stakeholders or management
Lesson 1926Conflicts of Interest and Professional Independence
Discover conflicts early
when they're easier to resolve
Lesson 649Integrating Before Starting New Work
Discover integration issues immediately
rather than in a painful "integration phase"
Lesson 1661Vertical Slicing
Discover their concerns
before they become objections
Lesson 1812Identifying and Engaging Stakeholders
Discoverable
Less to learn and understand
Lesson 508Designing Testable Interfaces
Discovery work
The time spent understanding a problem is itself hard to estimate
Lesson 1648Why Estimation is Hard
Discuss acceptance criteria
for each story
Lesson 1602Effective Sprint Planning Practices
Discussion happens
Reviewers can comment on specific lines of code, ask questions, and suggest improvements
Lesson 90What is a Pull Request?
Disk-Based Caches
(SSDs or HDDs) provide even more space at the cost of milliseconds per access.
Lesson 960Cache Memory Hierarchies
Disparate impact
occurs when a neutral-seeming policy has disproportionate negative effects on protected groups (e.
Lesson 1915Evaluating Models for Bias
Disparate treatment
means explicitly using protected attributes in decisions—easier to spot but often hidden in proxy variables (ZIP code correlating with race, for example).
Lesson 1915Evaluating Models for Bias
Distant methods
If methods in a class never call each other or share data, they probably shouldn't coexist
Lesson 183Measuring Coupling and Cohesion in Practice
Distinguish urgent from important
Not every fire needs you.
Lesson 1858Setting Boundaries and Saying No
Distributed failures
Failures are harder to detect because no central observer exists
Lesson 1375Trade-offs: Coupling and Visibility
Distributed systems
where shared session storage becomes a bottleneck
Lesson 1016Sessions vs Tokens: Choosing the Right Approach
Distributed Teams
When different teams own different services, contracts serve as explicit agreements.
Lesson 553When to Use Contract Tests
Distribution rights
Can they share the original or modified versions?
Lesson 1862Copyright, Licensing, and Distribution
Divergent Change
occurs when *one class needs to be modified for many different reasons*.
Lesson 340Change Preventers: Divergent Change and Shotgun Surgery
Diverse client needs
are GraphQL's primary strength.
Lesson 826When to Choose GraphQL
Diverse interview panels
reduce individual bias.
Lesson 1853Inclusive Hiring and Onboarding Practices
DNS-Based Discovery
uses DNS SRV records, which map service names to IP addresses and ports.
Lesson 1329DNS-Based and Kubernetes Service Discovery
Docker secrets
for passwords, tokens, and certificates in production.
Lesson 1436Environment Variables and Configuration
Document and quantify risks
Instead of saying "this is bad practice," explain: "Skipping input validation creates a SQL injection risk that could expose customer data (GDPR violation, potential €20M fine).
Lesson 1922Balancing Business Pressure with Professional Standards
Document as you go
Capture alternatives, trade-offs, and the reasoning behind decisions.
Lesson 1813Facilitating Technical Discussions
Document as you understand
Create ADRs explaining decisions you uncover
Lesson 1784Extracting Reusable Knowledge from Legacy Systems
Document conformance gaps
Track which criteria pass, fail, or aren't applicable
Lesson 584WCAG Compliance in Testing
Document decision rationale
– Record why you skipped certain gates
Lesson 1569The Hotfix Process and Risk Management
Document decisions
Record why certain trade-offs were chosen for future reference
Lesson 26Conflicting Stakeholder InterestsLesson 156Stakeholder-Driven Prioritization
Document dissent
Record alternative viewpoints for future learning
Lesson 1816Making Decisions When Consensus Fails
Document everything
Keep clear records of what you observed, when you raised it, and the responses received.
Lesson 1920Speaking Up: When and How to Raise Concerns
Document everything clearly
Write down each conflicting requirement with its source stakeholder.
Lesson 141Handling Conflicting Stakeholder Needs
Document licenses
Record each component's license (check `LICENSE` files, package metadata)
Lesson 1877Verifying License Compatibility in Practice
Document Non-Obvious Behavior
Lesson 376Writing Effective Comments
Document the context
Record the exact command, environment, and input that reproduces the issue so teammates can investigate independently.
Lesson 626Triaging and Reproducing Fuzzer Findings
Document the decision
Know *why* you're breaking normal forms
Lesson 865Strategic DenormalizationLesson 1235Driver Conflicts and Trade-offs
Document the precedence
Make it crystal clear in your API docs that filters apply before sorting, and sorting happens before pagination.
Lesson 789Combining Pagination, Filtering, and Sorting
Document the proposed change
clearly
Lesson 161Change Impact Analysis
Document the request
Write down what's being asked and why
Lesson 158Scope Creep and Change Control
Document what you did
and why
Lesson 1741Emergency Production Fixes
Document your reasoning
Why did you choose option A over B?
Lesson 30Trade-off Analysis and Decision Making
Documentation and configuration schemas
mean creating clear, structured descriptions of every setting your application accepts.
Lesson 731Documentation and Configuration Schemas
Documentation and tracking
Clearly mark which fixes have been backported to which LTS versions.
Lesson 1572Backporting Fixes to LTS Versions
Documentation as Code
means storing your documentation files (often Markdown, AsciiDoc, or similar formats) directly in your project's version control repository alongside your source code.
Lesson 1706Documentation as Code
Documentation generators
are tools that automatically extract specially-formatted comments from your code and transform them into beautiful HTML pages, PDFs, or interactive websites.
Lesson 379Documentation Tools and Standards
Documentation lives elsewhere
When docs are in a separate wiki or repository, they're easy to forget.
Lesson 1705Why Documentation Becomes Outdated
Documentation tools
(like the interactive ones you learned about previously) can generate beautiful, browsable docs
Lesson 837Introduction to OpenAPI Specification
Dodd-Frank Act
(securities violations with SEC reporting)
Lesson 1921Whistleblowing and Legal Protections
Does NOT protect against
Phantom reads (new rows matching your query)
Lesson 907Repeatable Read Isolation
Doesn't prevent
direct access to subsystem classes when needed
Lesson 272Facade Pattern: Simplifying Complex Subsystems
Domain alignment
The boundary follows natural divisions in your business domain, not technical convenience
Lesson 1290Defining Module Boundaries
Domain Boundaries
Your user-facing API might be REST (stable, well-documented), while your real-time notification system uses GraphQL subscriptions or gRPC streaming for live updates.
Lesson 827Mixing API Styles in Practice
Domain concepts
clients need to query or manipulate (ShoppingCart, CustomerProfile)
Lesson 775Identifying Resources from Domain ModelsLesson 1782Understanding Business Logic from Implementation
Domain Events
Services publish events when their data changes.
Lesson 1310Managing Cross-Service Data Consistency
Domain shaping
Narrow or expand ranges to focus on boundaries
Lesson 616Controlling Input Distribution
Domain terminology
The exact words professionals use, so your requirements match their mental models
Lesson 140Domain Research and Competitive Analysis
Don't problem-solve in standup
When someone mentions a blocker, note it and move on.
Lesson 1604Making Standups Work
Don't reach for Composite
when you're certain you'll never have hierarchies—a flat list suffices
Lesson 283When Structural Patterns are Overkill
Don't skip this
good observations prevent wild goose chases.
Lesson 1711The Scientific Method in Debugging
Don't use Adapter
if you control both interfaces—just make them compatible directly
Lesson 283When Structural Patterns are Overkill
Don't use these patterns
if you're building a simple CRUD application, your team lacks distributed systems experience, or you can't justify the infrastructure overhead.
Lesson 1356When to Use Event Sourcing and CQRS
Done
– completed and deployed
Lesson 1593The Kanban Board
Double-Checked Locking
Check if the instance exists, lock only if it doesn't, then check again inside the lock before creating.
Lesson 229Implementing Singleton: Thread Safety Concerns
Down migrations
should be written alongside up migrations
Lesson 895Testing and Reversibility
Downcasting
does the reverse—converting newer events to older schemas for legacy consumers that haven't upgraded yet.
Lesson 1355Event Schema Evolution
Download the screenshot
to see the exact UI state at failure
Lesson 578Screenshot and Video Debugging
Downside
Clock skew between servers can make timestamps unreliable, and you permanently lose the "losing" update—even if it contained valuable changes.
Lesson 924Conflict Resolution Strategies
Drag-and-Drop
Simulate clicking and holding an element, moving it to a new position, and releasing.
Lesson 567Testing User Interactions
Draw a graph
your goal is the root; broken dependencies are child nodes
Lesson 1755The Mikado Method
Drawer A (High Cohesion)
Contains only silverware—forks, knives, spoons.
Lesson 180Understanding Cohesion: What Belongs Together
Drawer B (Low Cohesion)
Contains silverware, batteries, a screwdriver, rubber bands, and takeout menus.
Lesson 180Understanding Cohesion: What Belongs Together
Drift correction
Re-applying brings infrastructure back to the desired state
Lesson 1467Idempotency in Infrastructure Provisioning
drift detection
– the tool can reconcile its recorded state against actual cloud resources and warn you: "Hey, someone changed this manually!
Lesson 1469State Management in IaCLesson 1497The GitOps Workflow
Drift risk
SDK and API can get out of sync
Lesson 856Auto-Generated vs Hand-Written SDKs
Drive toward closure
Summarize what you've heard, confirm consensus (or lack thereof), and define clear next steps.
Lesson 1813Facilitating Technical Discussions
driver
and **navigator** roles frequently—typically every 15-30 minutes.
Lesson 1627Effective Pairing PracticesLesson 1629Running Effective Mob Sessions
Drop unnecessary capabilities
Containers inherit Linux capabilities they rarely need
Lesson 1440Docker Security Best Practices
Dual employment
Working for a competitor in your spare time or building a side project using your employer's resources
Lesson 1926Conflicts of Interest and Professional Independence
Dual licensing
means offering the *same code* under two (or more) different licenses simultaneously.
Lesson 1876Dual Licensing and License Exceptions
Dual-write pattern
updates both systems in the same transaction, but risks partial failures requiring compensating transactions.
Lesson 1778Data Migration and Synchronization
Dummies
are perfect when you need to satisfy a function signature but the parameter isn't actually used in your test scenario.
Lesson 472When to Use Each Type of Test Double
Duplicate Code
, and even helps with **Large Class** by breaking responsibilities into smaller pieces.
Lesson 346Extract MethodLesson 791URI Versioning (Path-Based)
Duplicated Data
means copying information from one table into another to avoid joins.
Lesson 866Denormalization Patterns
Duplicated effort
Multiple teams solving the same problem differently
Lesson 1251Architecture Governance and Standards
Durability
forces the database to write changes to persistent storage (disk) before confirming success, which is orders of magnitude slower than in-memory operations.
Lesson 901ACID Trade-offs and PerformanceLesson 1514Managed Storage ServicesLesson 1823The Staff Engineer Promotion Path
Duration
Rolling deployments take longer than instant switches like blue-green, but they require fewer total resources since you're not running duplicate infrastructure.
Lesson 711Rolling DeploymentsLesson 1138RED and USE MethodsLesson 1163The On-Call Rotation
During capacity planning
to determine hardware needs
Lesson 1212Introduction to Load Testing
During coding (Test-Alongside Development)
You alternate between writing a bit of production code and its corresponding tests.
Lesson 401When to Write Tests: Before, During, or After
During design reviews
for new features ("This new file upload feature—what STRIDE threats does it introduce?
Lesson 1083Integrating Threat Modeling into Development
During development
Check in when questions arise or discoveries happen
Lesson 151Conversations and Collaboration
During examination
Examiners search for prior art to reject unpatentable claims
Lesson 1887The Patent Process and Prior Art
During litigation
Defendants use prior art to invalidate patents asserted against them
Lesson 1887The Patent Process and Prior Art
During planning
Discuss edge cases, technical constraints, and assumptions
Lesson 151Conversations and Collaboration
During refactoring
You restructure code
Lesson 332The Refactoring Safety Net
During review
Demo working software and gather feedback
Lesson 151Conversations and Collaboration
During security incidents
("We just patched a vulnerability—should we update our attack trees?
Lesson 1083Integrating Threat Modeling into Development
Dynamic baselines
adapt to normal patterns over time.
Lesson 1157Threshold Selection: Static vs. Dynamic Baselines
Dynamic content
(personalized pages, API responses) is trickier but still benefits.
Lesson 985CDN and Edge Caching
Dynamic linking
from proprietary applications (using `.
Lesson 1874LGPL and Weak Copyleft Compatibility
Dynamic Orchestration
Systems like Kubernetes automatically manage container placement, scaling, and recovery.
Lesson 1502What is Cloud-Native Architecture
Dynamic pipeline configuration
Add, remove, or reorder handlers at runtime
Lesson 294Combining Chain and Command Patterns
Dynamic Relationships
Observers can attach or detach at runtime, making the system flexible.
Lesson 304The Observer Pattern: Definition and Intent
Dynamic subscriptions
When observers frequently come and go at runtime
Lesson 299Mediator vs Observer: Choosing the Right Pattern
Dynamic Testing
runs your application and actively probes it with malicious inputs.
Lesson 1061Testing for Injection Vulnerabilities
DynamoDB
provides ACID transactions, but they're opt-in and more expensive than standard operations
Lesson 903ACID in Different Database SystemsLesson 1421Quorum-Based Consensus

E

E2E tests
are expensive: slow, brittle, require full environments, and failures are hard to diagnose.
Lesson 407The Testing Pyramid ConceptLesson 554What is End-to-End Testing
Eager Initialization
Create the instance when the class loads, before any thread accesses it.
Lesson 229Implementing Singleton: Thread Safety Concerns
Eager loading
fetches related data upfront, typically using SQL JOINs or batched queries.
Lesson 940Lazy Loading vs Eager LoadingLesson 944The N+1 Query Problem
Early and continuous delivery
of valuable software satisfies customers
Lesson 1580The Twelve Principles Behind the Agile Manifesto
Early roadmap planning
When you need to size dozens of ideas quickly to prioritize them.
Lesson 1651T-Shirt Sizing for Coarse Estimates
Early wins
Begin with configuration management (Factor III) and dependency management (Factor II)— these are low-hanging fruit that prevent common production issues
Lesson 754Applying Twelve-Factor Principles in Practice
Easier changes
Modifying one component doesn't create a ripple effect requiring updates across your entire codebase
Lesson 177Understanding Coupling: How Components Depend on Each Other
Easier debugging
Small scope means fewer variables to investigate
Lesson 526Narrow Integration TestsLesson 645The Practice of Small Commits
Easier maintenance
When interaction patterns change, you modify the mediator, not every participating object.
Lesson 298The Mediator Pattern: Centralizing CommunicationLesson 433Testing One Thing at a Time
Easier onboarding
Developers can run with defaults immediately
Lesson 729Default Values and Configuration Hierarchies
Easier refactoring
UI changes isolated to page objects
Lesson 562Page Object Pattern
Easier to understand
(one clear purpose)
Lesson 194What is the Single Responsibility Principle
Easy horizontal scaling
– spin up new instances instantly
Lesson 1504Stateless Application Design
Easy setup
Fewer dependencies means simpler test data requirements
Lesson 565Component Testing vs Full Page Testing
Easy to confuse
Similar types (multiple strings or numbers) increase the chance of passing arguments in the wrong order
Lesson 338Bloaters: Long Parameter List
Easy to implement
No special headers or parsing logic needed
Lesson 791URI Versioning (Path-Based)
Easy to reverse-engineer
Innovation visible in compiled code or user interfaces
Lesson 1890Trade Secrets vs Patents: Choosing a Strategy
Easy Withdrawal
Users must be able to revoke consent as easily as they granted it.
Lesson 1902Informed Consent and User Control
Eavesdropping
Passive monitoring of unencrypted traffic
Lesson 1115Fallacy 4: The Network is Secure
Economic sense
You get maximum coverage per dollar/hour invested
Lesson 408Why Pyramid Shape Matters
Edge cases
Red lines in boundary checks, null handling, or empty collection logic indicate missing edge case tests.
Lesson 594Reading Coverage ReportsLesson 604Boundary Value and Edge Case CoverageLesson 833Providing Meaningful Examples
Edge locations
are data centers positioned strategically around the world.
Lesson 985CDN and Edge Caching
Efficient
Only changed layers need to be downloaded or stored
Lesson 1425Container Images and Layers
Efficient Code
means choosing algorithms and data structures wisely.
Lesson 1932Sustainable Software Engineering Practices
Effort required
(timeline, team capacity)
Lesson 1634Presenting Technical Decisions
Either
types that explicitly wrap success or failure, combining explicit contracts with type safety.
Lesson 1085Error Handling Philosophies: Return Codes vs Exceptions
Elevation of Privilege
A regular user discovers they can access `/admin/users` simply by typing the URL, because the backend only checked roles on the login page, not on every request.
Lesson 1042A01: Broken Access Control
Eliminate blockers quickly
Items stuck in "Blocked" or "Waiting for Review" inflate cycle time.
Lesson 1595Managing Flow and Cycle Time
Eliminate forced expiration
unless breach suspected — it causes more harm than good.
Lesson 1004Password Strength Requirements and Policies
Eliminates cache misses
for popular data
Lesson 971Refresh-Ahead Caching
Eliminating bottlenecks
Changes don't wait for one person's availability
Lesson 1833Collective Code Ownership
Else (E)
, choose between **Latency (L)** and **Consistency (C)**
Lesson 1411The PACELC Extension to CAP
Email notifications
are the traditional approach—send build results to individuals or team lists.
Lesson 643Build Notifications and Reporting
Emergency procedures
Defined criteria and approval chains for urgent releases during blackouts
Lesson 1548Release Windows and Blackout Periods
Emergent design
means starting with minimal structure and letting better patterns reveal themselves through the red-green-refactor cycle.
Lesson 512Emergent Design vs. Upfront Design
Emit metrics
like active saga count, completion rate, and compensation frequency
Lesson 1372Monitoring and Observability for Sagas
Employee training
Clear policies about what's confidential
Lesson 1889Trade Secrets: Definition and Protection
Enable IDE autocomplete
and type checking
Lesson 731Documentation and Configuration Schemas
Enable Progressive Rollouts
Turn features on for 5% of users, monitor behavior, then gradually expand to 100%.
Lesson 1558What Are Feature Flags and Why Use Them
Enable targeted logging
Wrap verbose logging statements behind a flag, then activate it only for the user experiencing issues.
Lesson 1740Feature Flags for Production Debugging
Enable testability
– QA knows exactly what to verify
Lesson 147What are Acceptance Criteria?
Enabler value
Some refactorings unlock future work (like breaking entangled dependencies)
Lesson 1772Managing Technical Debt During Refactoring
Enables change
You can refactor internals without affecting users
Lesson 171Encapsulation and Data Hiding
Enables gradual cutover
by letting you shift functionality piece by piece
Lesson 1776Implementing the Facade Layer
Enables Reuse
Once extracted, that method becomes available for other parts of your code that need the same logic.
Lesson 346Extract MethodLesson 353Introduce Parameter Object
Enabling
they give you confidence to refactor fearlessly
Lesson 415Unit Tests: Testing in Isolation
Encapsulates creation logic
in one place
Lesson 236Implementing Factory Methods
Encode/escape
for the context where data will be used
Lesson 1039Trust Boundaries and Input Validation
Encryption
using public algorithms (AES, RSA) that remain secure despite being fully documented
Lesson 1035Security by Design, Not ObscurityLesson 1115Fallacy 4: The Network is Secure
End of subject line
`Fix login validation (#42)`
Lesson 115Referencing Issues and Tickets
End-of-life (EOL)
No further updates; users must upgrade
Lesson 1571Long-Term Support (LTS) Fundamentals
End-to-end testing
verifies your entire application from the user's perspective, testing the complete flow from start to finish.
Lesson 554What is End-to-End Testing
End-to-end tests
are expensive—they can take minutes to run, require full system setup, and break whenever UI or workflows change.
Lesson 409The Cost-Confidence Trade-offLesson 412The Testing Trophy Alternative
End-user products
Users care about "is it recent?
Lesson 1552Calendar Versioning and Alternative Schemes
Endpoint name and path
at the top
Lesson 831Reference Documentation Structure
Endpoint patterns
– URL structure standards you've learned (resources as nouns, consistent hierarchies)
Lesson 858API Style Guides
Enforce consistency
The tool continuously checks and corrects drift
Lesson 1488Introduction to Configuration Management
Enforce formatting
before code enters version control
Lesson 393Pre-commit Hooks and Git Hooks
Enforce tags
through IaC templates and policies
Lesson 1536Cost Allocation and Tagging Strategies
Enforces consistency
All subclasses follow the same algorithm structure
Lesson 315Template Method Pattern: Skeleton Algorithms
Enforces resource constraints
to prevent one container from consuming excessive CPU or memory
Lesson 1426The Container Runtime
Engineering leadership
– balance technical debt, team growth, strategic alignment
Lesson 1812Identifying and Engaging Stakeholders
Engineering newsletters
highlighting key learnings
Lesson 1185Building a Learning Culture from Incidents
Engineering Team
needs time for quality work, testing, and manageable complexity.
Lesson 26Conflicting Stakeholder Interests
Engineers
benefit from daily stand-ups and shared documentation.
Lesson 25Communication Channels and Stakeholder Management
Engineers and architects
Full technical detail, code patterns, architecture decisions
Lesson 1676Communication Strategies for Different Stakeholders
Engineers on your team
– care about maintainability, learning opportunities, day-to-day workflow
Lesson 1812Identifying and Engaging Stakeholders
Entropy analysis
Detecting high-randomness strings that look like generated tokens
Lesson 743Secret Scanning and Prevention
Entry and exit points
of suspicious functions to confirm they're being called
Lesson 1715Adding Strategic Print Statements and Logging
Enumerating threats
What attacks could exploit each boundary?
Lesson 1078What is Threat Modeling
Environment differences
Production behaves differently than staging
Lesson 719Deployment Risk and the Need for Rollback
Environment retained briefly
– The execution context may stay "warm" for subsequent invocations
Lesson 1520Serverless Event-Driven Execution Model
Environment separation
You can create `dev`, `staging`, and `prod` namespaces within a single cluster, isolating different stages of your deployment pipeline.
Lesson 1446Namespaces for Resource Isolation
Environment-specific overrides
(development, staging, production)
Lesson 729Default Values and Configuration Hierarchies
Environment-specific tags
Some teams use `myapp:dev`, `myapp:staging`, `myapp:prod`, though this can create ambiguity about which actual version is deployed.
Lesson 1433Image Tagging and Versioning Strategies
Environmental
Users have slow internet connections, system must work offline, data cannot leave the EU.
Lesson 132Constraints and Assumptions
Environmental attributes
time of day, IP address, device type, risk score
Lesson 1028Attribute-Based Access Control (ABAC)
Environmental factors
Changing priorities, availability of team members, infrastructure issues
Lesson 1648Why Estimation is Hard
Environmental footprint
Will this architecture choice consume exponentially more energy as we scale?
Lesson 1933Long-term Thinking and Digital Stewardship
Environmental impact
Considering resource consumption and sustainability
Lesson 1895Public Interest and Social Responsibility
Environments
Cloud storage in production vs.
Lesson 1270Multiple Adapters for One Port
EOL timelines
Announce end-of-life dates well in advance (e.
Lesson 676Deprecation and Version Lifecycle
Ephemeral by design
Accepts data loss on restart
Lesson 974Cache-as-SoR (System of Record)
Ephemeral Volumes
attach to a pod's lifecycle.
Lesson 1449Volumes and Persistent Storage
Equal trade-offs
Multiple options are genuinely equivalent, but paralysis persists
Lesson 1816Making Decisions When Consensus Fails
Equalized odds
requires equal false positive and false negative rates across groups
Lesson 1913The Impossibility of Fairness
Error budget alignment
Does this help you meet your SLOs?
Lesson 1184Identifying Actionable Improvements
Error examples
what 400, 404, 500 responses look like
Lesson 831Reference Documentation Structure
Error handling gaps
Untested `catch` blocks, error callbacks, or validation paths are red flags.
Lesson 594Reading Coverage Reports
Error Rate Thresholds
Monitor the percentage of requests that result in errors.
Lesson 722Monitoring and Automated Rollback Triggers
Error rates
to catch degradation
Lesson 1189Performance Measurement Basics
Error recovery
means detecting a problem and automatically correcting it, allowing the system to return to normal operation.
Lesson 1090Error Recovery and Graceful Degradation
Error Type/Class
– What kind of problem occurred (e.
Lesson 1714Reading Error Messages and Stack Traces
Error-prone changes
If that number appears in 10 places, you might miss one when updating
Lesson 352Replace Magic Numbers with Constants
Escalate when necessary
Some conflicts require a decision-maker with authority to make the final call based on business strategy.
Lesson 141Handling Conflicting Stakeholder Needs
Escalation paths
P0/P1 incidents automatically page managers and trigger war rooms.
Lesson 1164Incident Severity LevelsLesson 1677Handling Conflicting Stakeholder Priorities
Escape shell metacharacters
Though risky and error-prone
Lesson 1057Command Injection and OS Command Execution
Establish baselines
Run tests and save screenshots of your UI in its correct state
Lesson 579Visual Regression Testing Fundamentals
Establish baselines first
Before optimizing, measure current performance.
Lesson 1829Data-Driven Decision Making
Establish your testing infrastructure
Verify your test framework and setup work
Lesson 497Starting with the Simplest Test
Established patterns
How things are "normally done" in your field
Lesson 140Domain Research and Competitive Analysis
Estimate work
Apply story points or t-shirt sizes so the team understands relative complexity.
Lesson 1607Backlog Refinement Sessions
Estimating
Add size or complexity estimates to help with sprint planning
Lesson 157Backlog Management
Ethical violations
conflict with professional codes or harm public welfare
Lesson 1920Speaking Up: When and How to Raise Concerns
Evaluate
Analyze impact (cost, time, dependencies)
Lesson 162Change Request Processes
Evaluate expressions
in that frame's context
Lesson 1731Navigating the Call Stack and Stack Frames
Evaluate options
How does each choice affect your constraints and criteria?
Lesson 30Trade-off Analysis and Decision Making
Evaluating new technologies
("Can this database handle our query patterns?
Lesson 1844Proof of Concepts and Spike Solutions
Event Channel
The infrastructure (message queue, event stream) that routes events from producers to consumers
Lesson 1338What is Event-Driven Architecture
Event Consumers
Components that listen for specific events and react accordingly
Lesson 1338What is Event-Driven Architecture
Event distribution
When a mutation triggers a subscription event (like a new message), the server must identify *which* of those 10,000 connections care about *that specific message* (perhaps only users in one chat room) and fan out updates efficiently.
Lesson 822Subscription Scalability Challenges
Event occurs
– An HTTP request arrives, a file uploads to storage, a message lands in a queue, or a scheduled timer fires
Lesson 1520Serverless Event-Driven Execution Model
Event Producers
Components that detect state changes and emit events
Lesson 1338What is Event-Driven Architecture
event streaming
treats data as a continuous flow of events that multiple services can consume independently and at their own pace.
Lesson 1317Event Streaming with KafkaLesson 1357Message Brokers vs Event Buses: Core Concepts
Event Streams
(like AWS Kinesis, Azure Event Hubs, or managed Kafka) preserve messages in an ordered log that **multiple consumers** can read independently.
Lesson 1513Managed Message Queues and Event Streams
Event type/name
What happened?
Lesson 1343Event Schemas and Contracts
Event-based sync
uses message queues or event streams.
Lesson 1778Data Migration and Synchronization
Event-driven execution
Functions respond to triggers, not long-running processes
Lesson 1519What is Serverless and Function as a Service
Event-driven workloads
are serverless's sweet spot.
Lesson 1527When Serverless is and Isn't Appropriate
Events (Publish-Subscribe)
When something significant happens in Module A, it publishes a domain event.
Lesson 1292Inter-Module Communication Patterns
Every endpoint is clickable
Developers can expand sections to see details about paths, parameters, and schemas
Lesson 844Interactive API Documentation
Everyone monitors the build
Team members should notice build failures quickly, whether through notifications, dashboard displays, or checking before their next commit.
Lesson 648The Team's Responsibility for CI
Evidence from reality
Your current implementation reveals flaws in the original vision's assumptions.
Lesson 1808Evolving Vision Over Time
Evolutionary Architecture
embraces this uncertainty by designing systems that can adapt and evolve as needs change.
Lesson 1227Evolutionary Architecture
Evolve with needs
as users request new features or changes to existing ones
Lesson 4Time: Maintenance Over Initial Development
Evolved thoughtfully
as the organization learns
Lesson 1824What Are Engineering Principles?
Evolving Business Needs
Companies don't operate in a vacuum.
Lesson 160Why Requirements Change
exactly
what broke it—the change you just made 10 seconds ago.
Lesson 361Running Tests During RefactoringLesson 404Testing as Documentation
Examination
A patent examiner reviews the application to determine if it meets patentability requirements: novelty (is it new?
Lesson 1887The Patent Process and Prior Art
Examine the critical path
Trace the sequence of spans from start to finish.
Lesson 1151Analyzing Traces for Performance Issues
Example analogy
Think of it like a secret recipe.
Lesson 1889Trade Secrets: Definition and Protection
Example boundary
Instead of calling a database directly, your code calls an `OrderRepository` interface.
Lesson 516External Dependencies and Infrastructure
Example CoS rule
"Expedite items may exceed WIP limits but only one Expedite item is allowed at a time.
Lesson 1598Policies and Classes of Service
Example policy
"To move from 'In Progress' to 'Review', code must pass all unit tests, have no critical security warnings, and include updated documentation.
Lesson 1598Policies and Classes of Service
Example responses
Pre-populated with the examples you defined in your OpenAPI document
Lesson 844Interactive API Documentation
Example situation
Your code expects `processPayment(amount, cardNumber)`, but the library uses `charge(creditCard, price, currency)`.
Lesson 258When to Use the Adapter Pattern
Example SLI
`(successful_requests / total_requests) × 100`
Lesson 1173Common SLI Metrics: Availability, Latency, and Throughput
Example thinking
"reversing [1, 2, 3] gives [3, 2, 1]"
Lesson 607Properties vs Examples
Example workflow
Create a branch named `add-redis-cache` to provision a new Redis instance.
Lesson 1470Version Control for Infrastructure Code
Example-based
You test `sort([3,1,2])` equals `[1,2,3]` and `sort([5,5,5])` equals `[5,5,5]`
Lesson 606What is Property-Based Testing
Example: Renaming a column
Lesson 698Database Changes in CD
Exception messages leaking information
Detailed error messages revealing database schemas, file paths, or internal logic
Lesson 1034Fail Securely
Excessive data transfer
Retrieving entire datasets when only a subset is needed
Lesson 1198I/O and Network Profiling
Excessive indirection
You need to jump through 5 classes just to understand where a simple value comes from.
Lesson 322When Patterns Become Obstacles
Excessive methods
The class scrolls for pages and pages
Lesson 337Bloaters: Large Class and God Object
Exchange the code
by sending the original verifier along with the authorization code
Lesson 1019Authorization Code Grant with PKCE
Exclusive + Exclusive
Incompatible (writer must wait for writer)
Lesson 915Shared and Exclusive Locks
Exec Command
Run a command inside the container and check its exit code
Lesson 1450Health Checks: Liveness and Readiness Probes
Execute bottom-up
complete leaf nodes first, working toward your goal
Lesson 1767The Mikado Method for Large Refactorings
Execute your code
Run the function being tested
Lesson 483Behavior Verification: Testing Interactions
Executes
the business logic on the domain model
Lesson 1351Command Side Design
Execution flow
Checking intermediate states in a long process
Lesson 1713Binary Search for Bug Location
Execution order
Plans typically execute from innermost/bottom operations upward
Lesson 879Understanding Query Execution Plans
Execution order matters
Test B might fail after Test A but pass when run alone
Lesson 458Avoiding Shared Mutable State
Execution steps
The exact SQL or migration command
Lesson 895Testing and Reversibility
Executive sponsors
Monthly dashboards, exception-based alerts for blockers
Lesson 1676Communication Strategies for Different Stakeholders
EXISTS
stops searching as soon as it finds *one* match per row (short-circuits)
Lesson 884Query Rewriting for Performance
Exit
`git bisect reset` to return to your original branch
Lesson 119Finding Bugs with Git Bisect
Exit procedures
Returning materials, disabling access
Lesson 1889Trade Secrets: Definition and Protection
Expand-contract migrations
include built-in reversibility
Lesson 895Testing and Reversibility
Expand-Contract Pattern
(also called **Parallel Change**) gives you a safe, gradual path forward.
Lesson 892The Expand-Contract Pattern
Expandable sections
Use collapsible UI elements (like `<details>` tags in web docs) labeled "Advanced Options" or "Deep Dive: How This Works Internally.
Lesson 1695Progressive Disclosure
Expected Estimate
= (3 + 4×6 + 15) / 6 = (3 + 24 + 15) / 6 = **7 days**
Lesson 1652Three-Point Estimation
Expected Outcomes
After critical steps, show users what they should see.
Lesson 1681User Guides and Tutorials
Expedite
(critical emergencies, like production outages)
Lesson 1598Policies and Classes of Service
Expedited review
– One or two senior engineers review synchronously, not the full team asynchronously
Lesson 1569The Hotfix Process and Risk Management
Expedited testing
Test the specific fix, not the entire release
Lesson 1568What are Hotfixes and When to Use Them
Expensive operations
Fields requiring heavy computation or external API calls
Lesson 817Query Complexity Analysis and Limits
Experience level
A junior developer might need more structured guidance and explicit examples, while a senior engineer benefits from thought-provoking questions that help them discover solutions independently.
Lesson 1798Tailoring Mentorship Styles
Experimentation safety
Want to try a new database technology or language?
Lesson 1335Technology Heterogeneity and Experimentation
Experiments and prototypes
Testing an idea that might be thrown away anyway
Lesson 42Balancing Debt and Delivery
Expiration periods
(force changes every 90 days)
Lesson 1004Password Strength Requirements and Policies
Explain Intent and Rationale
Lesson 376Writing Effective Comments
Explain the choice
Why this option best serves our drivers
Lesson 1252Communicating Architecture to Stakeholders
Explain why you're escalating
"Need assistance from payments team to investigate transaction queue backlog"
Lesson 1169Escalation Paths
Explain your reasoning
when you disagree, but stay open: "I chose this approach because X, but I'm happy to change it if you think Y is better for reason Z.
Lesson 96Responding to Review Feedback
Explicit decision-making
State clearly whether you're brainstorming, debating, or deciding.
Lesson 1851Inclusive Communication and Collaboration
Explicit documentation
of unwritten rules helps everyone.
Lesson 1853Inclusive Hiring and Onboarding Practices
Explicit Locking
Use `SELECT .
Lesson 911Lost Update Problem
Explicit messaging
"New items may take a moment to appear"
Lesson 1353Eventual Consistency in CQRS
Explicit Ordering
Create fixtures in dependency order—users first, then orders, then line items.
Lesson 546Managing Fixture Dependencies
Explicit versioning
embeds a version identifier in each event (e.
Lesson 1355Event Schema EvolutionLesson 1364Message Schemas and Evolution
Explicit waits
repeatedly check a condition until it's true or a timeout expires.
Lesson 564Waiting Strategies and Timing
Exploitability
(is it actually reachable in your code?
Lesson 679Dependency Vulnerability Scanning
Explore alternatives
Quickly compare different approaches before committing
Lesson 138Prototyping for Requirements Discovery
Exploring unfamiliar domains
("How does OAuth actually work in practice?
Lesson 1844Proof of Concepts and Spike Solutions
exponential backoff
increases the wait time with each failure—first 1 second, then 2, then 4, then 8.
Lesson 1095The Retry PatternLesson 1363Dead Letter Queues and Error Handling
Exporters
that send data to different backends (Jaeger, Zipkin, Prometheus, commercial tools)
Lesson 1152OpenTelemetry and Tracing Standards
Expose debugging endpoints
Create special API endpoints that return internal state or metrics, protected by a flag.
Lesson 1740Feature Flags for Production Debugging
Exposed session identifiers
Putting session tokens in URLs where they can be logged, cached, or shared.
Lesson 1048A07: Identification and Authentication Failures
Exposure through process listings
On many systems, environment variables are visible to other processes.
Lesson 742Secrets in Environment Variables
Expression to Function
→ extract into separate functions
Lesson 500The Transformation Priority Premise
Extensibility
Add new behaviors without modifying existing code (Decorator, Composite)
Lesson 281Complexity vs Flexibility Trade-off
Extension points
work the same way in software: they're predefined places in your code where new functionality can be "plugged in" later.
Lesson 192Plugin Architectures and Extension Points
external
when clients need fine-grained control over traversal or must coordinate multiple iterations simultaneously.
Lesson 296Implementing Internal vs External IteratorsLesson 313Strategy vs State Pattern
External API calls
(third-party services with latency)
Lesson 964Determining What to Cache
External API Dependencies
When you consume third-party APIs, consumer contracts let you test against your expectations without hitting real endpoints.
Lesson 553When to Use Contract Tests
External APIs
and third-party libraries
Lesson 1277Frameworks and Drivers Layer
External dependencies
Payment processors, notification services, data sources—things you don't control that might change or need alternatives.
Lesson 206When to Apply OCPLesson 1548Release Windows and Blackout Periods
External dependencies become pluggable
swap databases or web frameworks with minimal disruption
Lesson 1265Defining Application Boundaries
External fragmentation
Logical order doesn't match physical order on disk, causing inefficient reads
Lesson 877Index Maintenance and Statistics
External iterators
give the *client* explicit control.
Lesson 296Implementing Internal vs External Iterators
External partners
Milestone completion, dependency changes only
Lesson 1676Communication Strategies for Different Stakeholders
External processes
Shelling out to other programs
Lesson 441Fast Feedback: Keeping Tests Quick
External reporting
(whistleblowing) only as a last resort when internal channels fail
Lesson 1920Speaking Up: When and How to Raise Concerns
External Research
Industry case studies, academic papers, competitor analysis, or open-source project experiences.
Lesson 1814Using Data and Evidence
External service calls
service name, operation, success/failure
Lesson 1124Logging at System Boundaries
External service connections
Does your payment gateway integration work with the real (or test) API?
Lesson 416Integration Tests: Testing Module Interactions
External service state
A message queue with specific messages, or cache with known entries
Lesson 540What Are Test Fixtures
External Services
This is where boundaries get fuzzy.
Lesson 556E2E Test Scope and Boundaries
External stakeholders
exist *outside* your organization.
Lesson 20Internal vs External Stakeholders
External system interaction
Does it actually connect to the database?
Lesson 524Testing Adapter Layers
Externalizing state
means moving session and transient data out of your application servers into shared, dedicated systems that all servers can access:
Lesson 1394Externalizing StateLesson 1509Cloud-Native Data Management
Externally independent
(low coupling) - minimal reliance on other modules
Lesson 182The Relationship Between Coupling and Cohesion
Extract and Override
Pull the dependency into a method you can override in a test subclass.
Lesson 1754Breaking Dependencies to Enable Testing
Extract Class
When a class handles multiple unrelated responsibilities, pull out one responsibility into a new, dedicated class.
Lesson 185Refactoring to Increase CohesionLesson 350Extract Class and Inline Class
Extract Method Refactoring
Identify chunks of code that serve a distinct purpose—even if it's just 3-4 lines—and move them into their own function with a descriptive name.
Lesson 385Breaking Down Complex Functions
Extract patterns
Identify reusable design patterns worth preserving
Lesson 1784Extracting Reusable Knowledge from Legacy Systems
Extract reusable learnings
Did you discover edge cases or constraints?
Lesson 520Uncertain Requirements and Prototypes
Extract ruthlessly
When you see a chunk of code that serves a distinct purpose — even just 3-4 lines — give it a name by extracting it into its own function.
Lesson 372Function Structure and Length
Extracting helper methods
for repeated setup logic or complex assertions
Lesson 502Refactoring Test Code

F

Facade
to simplify the interface, and **Proxy** to control access—all working together.
Lesson 285Combining Multiple Structural PatternsLesson 286Pattern Selection Criteria
Facade + Proxy
Simplify a subsystem while also controlling when expensive resources are loaded
Lesson 285Combining Multiple Structural Patterns
Facade pattern
provides a unified, simplified interface to a complex set of subsystem classes.
Lesson 272Facade Pattern: Simplifying Complex Subsystems
Face-to-face conversation
is the most efficient communication method
Lesson 1580The Twelve Principles Behind the Agile Manifesto
Facilitate communication
Help stakeholders understand each other's constraints through clear **communication channels**
Lesson 26Conflicting Stakeholder Interests
Facilitate direct conversation
Bring conflicting stakeholders together.
Lesson 141Handling Conflicting Stakeholder Needs
Facilitate negotiation
– Help stakeholders understand each other's constraints and goals
Lesson 156Stakeholder-Driven Prioritization
Facilitate Trunk-Based Development
Teams can commit partially complete features to main without breaking production, as long as the flag defaults to "off.
Lesson 1558What Are Feature Flags and Why Use Them
Factor in operational cost
That extra nine (99.
Lesson 1178Setting Realistic and Achievable SLOs
Factory + Builder
Use a Factory to decide *which* Builder to use based on context, then let the Builder handle the complex construction steps.
Lesson 254Combining Creational Patterns
Factory Functions
Use builder functions that automatically create parent fixtures if they don't exist.
Lesson 546Managing Fixture Dependencies
Fail builds that regress
– If performance drops significantly, the build fails, blocking the merge
Lesson 1203Continuous Performance Testing
Fail themselves
, causing *their* dependents to experience the same problems
Lesson 1104Cascading Failures
Fail-fast policies
Configure your pipeline to block merges if fuzzing discovers new crashes or security issues.
Lesson 625Integrating Fuzzing into CI/CD
Failing securely
means ensuring that any error condition defaults to denying access, hiding sensitive data, and maintaining security boundaries rather than accidentally opening them.
Lesson 1034Fail Securely
Failover
If a service instance becomes unavailable, traffic routes to healthy replicas.
Lesson 1508Designing for Failure and Self-Healing
Failures
are catastrophic, unrecoverable problems that compromise system integrity.
Lesson 1084Errors vs Exceptions vs Failures
Failures are graceful
just route the next request elsewhere
Lesson 1382Stateless Application Design for Scalability
Fair credit and recognition
Acknowledging others' contributions honestly, avoiding credit theft or misrepresentation
Lesson 1898Collegiality and Fair Treatment
Fair scheduling
Use weighted or priority-based scheduling algorithms to ensure all tenants get their fair share of resources, even under contention.
Lesson 1532Resource Allocation and Noisy Neighbors
Fairness
Avoiding bias that harms marginalized groups
Lesson 1895Public Interest and Social Responsibility
fake
is a test double that actually works—it's a real, functioning implementation, just simpler than the production version.
Lesson 467Fakes: Working Implementations for TestingLesson 470Distinguishing Between Mock Types
Fallback
to cached data or a default response (graceful degradation)
Lesson 1094The Timeout Pattern
Fallback behavior
provides degraded functionality when dependencies fail.
Lesson 1320Handling Partial Failures and Timeouts
Fallback to Alternative
If one payment gateway fails, try another.
Lesson 1090Error Recovery and Graceful Degradation
False confidence
Tests might pass while hiding real integration issues
Lesson 479Partial Mocking and Spying on Real ObjectsLesson 599The Danger of Coverage Theater
Fan-out
patterns where one event triggers many reactions
Lesson 1357Message Brokers vs Event Buses: Core Concepts
Fast + Cheap
→ Poor quality (rushed work with minimal resources creates technical debt)
Lesson 31Good-Fast-Cheap: Pick Two
Fast debugging
No hunting through multiple assertions or behaviors to find the culprit.
Lesson 433Testing One Thing at a Time
Fast execution
No need to load full pages or wait for navigation
Lesson 565Component Testing vs Full Page Testing
Fast failure
instead of waiting for timeouts
Lesson 1319Circuit Breakers in Distributed Systems
Fast failure isolation
You immediately know which boundary broke
Lesson 526Narrow Integration Tests
Fast feedback is sacred
The team actively works to keep build times under 10 minutes, because speed enables the frequent integration you need
Lesson 651Building a CI Culture
Fast feedback loops
mean organizing your pipeline stages so the quickest checks run first.
Lesson 702Fast Feedback LoopsLesson 704Pipeline Gates and Approvals
Fast startup
Containers typically start in seconds, not minutes
Lesson 1423What Are Containers and Why Use Them
Fast to produce
for multiple languages
Lesson 856Auto-Generated vs Hand-Written SDKs
Fast-forward merges
happen when one branch's commit is a direct ancestor of another—you just move the pointer forward along the same path
Lesson 65Understanding Git History as a DAG
Fast-moving technology
By the time a patent issues (2-5 years), your innovation may be obsolete
Lesson 1890Trade Secrets vs Patents: Choosing a Strategy
Faster
less time understanding and testing
Lesson 186Why Software Must Be Designed for Change
Faster execution
Fewer real components means less setup overhead
Lesson 526Narrow Integration Tests
Faster feedback
Problems surface immediately instead of weeks later
Lesson 24Cross-Functional TeamsLesson 645The Practice of Small Commits
Faster feedback loop
Catch issues in seconds, not minutes or hours
Lesson 395Editor Integration and IDE Support
Faster iteration
Anyone can implement fixes or features
Lesson 1833Collective Code Ownership
Faster perceived performance
Don't wait for slow/failing services
Lesson 1110Partial Response Strategies
Faster recovery
– crashed instances don't lose critical session data
Lesson 1504Stateless Application Design
Faster results
No need to generate large inputs and then whittle them down
Lesson 619Integrated Shrinking
Fault tolerance
requirements define how the system handles failures—does it degrade gracefully, fail safely, or maintain full operation with redundant components?
Lesson 131Reliability and Availability RequirementsLesson 1405Combining Partitioning and Replication
Fear of Change
Teams avoid touching it.
Lesson 1749Defining Legacy Code
Feature baselines
What users expect because competitors already offer it
Lesson 140Domain Research and Competitive Analysis
Feature branches
let developers work in isolation without breaking the integration branch
Lesson 84Git Flow: Feature, Develop, Release, and Hotfix Branches
Feature branching
means developers create separate branches for each feature, merging back to main only when complete—sometimes after days or weeks.
Lesson 646Working on the Trunk vs Feature Branches
Feature commit
"Add holiday discount calculation"
Lesson 362Committing Refactorings Separately
Feature commits
introduce new functionality or fix bugs—they change *what* the system does.
Lesson 105Avoiding Mixing Refactoring with Feature Work
Feature dependencies
Which features must ship together?
Lesson 1542What is Release Planning
Feature Flags
Since incomplete features get merged into trunk, teams use feature flags (toggles) to hide work-in- progress from users.
Lesson 83Trunk-Based DevelopmentLesson 695Separating Deployment from ReleaseLesson 794Managing Multiple API Versions
Feature Grouping
Identify which methods and data naturally belong together.
Lesson 185Refactoring to Increase Cohesion
Feature lead
You're deeply hands-on, writing significant code while coordinating with 2-3 engineers.
Lesson 1793The Tech Lead's Scope
Feature Toggles
Disable non-critical features (recommendations, personalization) while keeping core functionality (checkout, login) working.
Lesson 1090Error Recovery and Graceful Degradation
Features
get listed under "Added"
Lesson 1555Automating Changelog Generation
Federation
(popularized by Apollo) takes a more sophisticated approach.
Lesson 820Schema Stitching and Federation
feedback loop
is when you use information discovered in a later phase to inform and improve decisions made in earlier phases.
Lesson 17Feedback Loops Across the SDLCLesson 629The Feedback Loop: Speed and Confidence
Fetch the changes
`git fetch origin` downloads the new commits without modifying your working files
Lesson 80Handling Push Rejections
Fetching
rows from the database and converting them into domain objects
Lesson 936Data Mapper Pattern
Fewer defects
make it to production because you have real-time code review built in.
Lesson 1626Benefits and Trade-offs of Pair Programming
Fibonacci-like abstractions
Small/Medium/Large/Huge (mapping roughly to 1/3/5/13)
Lesson 1614T-Shirt Sizing and Alternative Scales
Field Addition
APIs let you attach key-value pairs directly:
Lesson 1133Structured Logging Libraries and APIs
Field depth
How many levels of nesting
Lesson 817Query Complexity Analysis and Limits
Field types
String, integer, boolean, nested objects, etc.
Lesson 1343Event Schemas and Contracts
Fifth Normal Form (5NF)
address more subtle types of redundancy that can occur even in BCNF-compliant schemas.
Lesson 863Higher Normal Forms (4NF, 5NF)
File paths
– Which module or component failed
Lesson 1714Reading Error Messages and Stack Traces
File storage
uses external object stores (S3, Azure Blob) rather than local disks
Lesson 1477Handling State in Immutable Systems
File system access
`file:///etc/passwd` on some implementations
Lesson 1051A10: Server-Side Request Forgery (SSRF)
File system operations
Time spent reading/writing files, how many operations, and their sizes
Lesson 1198I/O and Network Profiling
File system reads/writes
(disk I/O is notoriously slow)
Lesson 461Test Speed and the Fast Test Pattern
File system state
Specific files created in known locations with predictable content
Lesson 540What Are Test Fixtures
File systems
vary between machines and CI environments
Lesson 516External Dependencies and Infrastructure
Filter first
Narrow down the data set based on criteria
Lesson 789Combining Pagination, Filtering, and Sorting
Final representation
The actual object you want, created only when all steps are complete
Lesson 243The Builder Pattern: Separating Construction from Representation
Final shutdown
After the deadline, return `410 Gone` status codes indicating the resource is permanently unavailable, with links to migration documentation.
Lesson 853API Sunset and End-of-Life
Finance
wants low cloud costs (resource constraints)
Lesson 1229Stakeholder Concerns as Drivers
Financial
Owning stock in a vendor you're evaluating, or recommending a library maintained by a company that pays you consulting fees
Lesson 1926Conflicts of Interest and Professional Independence
Financial data
(credit card numbers, bank accounts, salary information)
Lesson 1900Personal Data and Sensitive Information
Financial transactions
One person initiates a payment, another authorizes it
Lesson 1037Separation of DutiesLesson 1837Zero-Defect Mindset
Find potential allies
who share your goals
Lesson 1812Identifying and Engaging Stakeholders
Find the lowest level
where that behavior exists (a function, class, or module)
Lesson 414Moving Tests Down the Pyramid
Find the real disagreement
Often what sounds like "microservices vs monolith" is actually "how do we handle our deployment complexity?
Lesson 1815Managing Disagreement Constructively
Finding Seams
Look for constructor parameters, method arguments, or protected methods you can override in a test subclass.
Lesson 515Legacy Code Without Tests
First Declared Wins
Use whichever constraint appears first in your config
Lesson 672Version Constraints and Conflicts
First dispatch
The runtime determines which `accept` method to call based on the `element`'s actual type (e.
Lesson 319Double Dispatch in Visitor Pattern
First Request
A simple, working example that returns real data
Lesson 835Getting Started Guides
Fitness functions
These are automated checks that protect important architectural characteristics during evolution.
Lesson 1227Evolutionary Architecture
Fix
Extract responsibilities into separate classes.
Lesson 200Common SRP Violations and Fixes
Fix bugs
that users discover in real-world conditions
Lesson 4Time: Maintenance Over Initial Development
Fix deliberately
by assigning ownership and setting deadlines
Lesson 577Quarantining and Flaky Test Management
Fixed Date
(deadlines that can't move, like regulatory compliance)
Lesson 1598Policies and Classes of Service
Fixes are fast
You remember the context of your recent work, making debugging straightforward.
Lesson 628The Core CI Principle: Integrate Early and Often
Fixture Cleanup
Teardown must happen in reverse dependency order—delete line items before orders, orders before users—to avoid constraint violations.
Lesson 546Managing Fixture Dependencies
Fixtures
For shared setup across many tests, use test framework fixtures (like `beforeEach` hooks).
Lesson 439Handling Test Setup Complexity
Flag conflicts
Identify GPL + proprietary combinations or incompatible copyleft licenses
Lesson 1877Verifying License Compatibility in Practice
Flag debt
is the accumulation of obsolete or stale feature flags in your codebase—similar to technical debt.
Lesson 1566Flag Debt and Cleanup Strategies
Flags mismatches
in development/testing before they reach production
Lesson 843Request and Response Validation
Flaky test rate
tracks how often tests fail inconsistently.
Lesson 657Build Health Metrics and Visibility
Flaky tests
Network delays and race conditions cause false failures
Lesson 410The Ice Cream Cone Anti-pattern
Flexible ranges
(`>=`, `~`, `^`) allow updates but risk breaking changes sneaking in
Lesson 688Pinning Dependencies
Flowcharts
map decision points and process sequences—ideal for explaining algorithms, request lifecycles, or error handling paths.
Lesson 1693Visual Aids and Diagrams
Flux
is a lightweight, Kubernetes-native operator that monitors Git repositories and Helm releases.
Lesson 1498GitOps Tools and Operators
Flyweight
When many similar objects consume too much memory
Lesson 286Pattern Selection Criteria
Focus
Everyone focuses on the Sprint's work and team goals
Lesson 1581Scrum Framework Overview
Focus on Action
Retrospectives aren't venting sessions.
Lesson 1606Sprint Retrospective: Continuous Improvement
Focus on risk
Zero coverage in a critical authentication module matters far more than zero coverage in generated boilerplate
Lesson 593Coverage as a Diagnostic Tool, Not a Goal
Focused
Only the methods that are actually needed
Lesson 508Designing Testable Interfaces
Follow code style
using any provided linters or formatters
Lesson 1880Contributing to Open Source Projects
Follow-the-sun
Global teams can pass on-call responsibilities across time zones, reducing after-hours burden.
Lesson 1857On-Call and After-Hours Work
Followers apply changes
Each follower applies the log entries to stay synchronized
Lesson 1402Leader-Follower Replication
Following Through
When you identify technical problems, propose solutions *and* help implement them.
Lesson 1795Building Technical Credibility
Follows DIP
Depend on abstractions, not concrete Singletons
Lesson 231Alternatives to Singleton: Dependency Injection
For 401 errors
"Refresh your authentication token and retry the request"
Lesson 834Documenting Error Responses
For 422 validation errors
"Check the `errors` field for specific validation failures"
Lesson 834Documenting Error Responses
For 429 rate limits
"Wait 60 seconds before retrying, or check the `Retry-After` header"
Lesson 834Documenting Error Responses
For availability
Implement redundancy, failover mechanisms, health checks
Lesson 1241Availability and Reliability
For behaviors
Describe what happens, including side effects.
Lesson 832Writing Clear Descriptions
For clients
The same tools generate SDKs in various languages (JavaScript, Python, Java, etc.
Lesson 842Generating Server Stubs and Client SDKs
For code review
Reviewers can verify your refactoring commit made zero behavioral changes by checking that tests still pass.
Lesson 362Committing Refactorings Separately
For debugging
When tracking down when a bug was introduced, isolated commits make it obvious whether the problem came from restructuring or new functionality.
Lesson 362Committing Refactorings Separately
For fields
State the data type, what it contains, and any constraints.
Lesson 832Writing Clear Descriptions
For large features
, use staged delivery:
Lesson 1620Review Size and Scope Trade-offs
For reliability
Add data validation, checksums, idempotency, thorough testing
Lesson 1241Availability and Reliability
For resources
Explain what the resource represents in the real world and its purpose.
Lesson 832Writing Clear Descriptions
For rollback
If your new feature causes production issues, you can revert just that commit while preserving the cleaner structure from your refactoring.
Lesson 362Committing Refactorings Separately
For servers
Tools like `openapi-generator` or `swagger-codegen` read your OpenAPI spec and create:
Lesson 842Generating Server Stubs and Client SDKs
Forced irrelevant implementations
Classes implementing the fat interface must write stub code for methods they don't need—often throwing exceptions or returning dummy values.
Lesson 216Fat Interfaces and Their Problems
Forced writes
The database ensures these log entries are physically written to disk (not just sitting in memory buffers)
Lesson 900The Durability Property
Fork and clone
the repository to your machine
Lesson 1880Contributing to Open Source Projects
Form hypotheses
"If we add WIP limits to our review column, bottlenecks will decrease"
Lesson 1599Continuous Improvement with Kanban
Form Input
Type text into input fields, select dropdown options, check boxes, or toggle switches.
Lesson 567Testing User Interactions
Formal processes
work better for regulated industries, large enterprises, or safety-critical systems.
Lesson 162Change Request Processes
Format String Bugs
If user input reaches format string functions, attackers can read or write arbitrary memory.
Lesson 624Detecting Security Vulnerabilities
Formatting
(converting data for display, reports, or APIs)
Lesson 195Identifying Multiple Responsibilities
Forward compatibility
means old versions can handle artifacts from newer versions gracefully.
Lesson 1553Version Compatibility and Breaking Changes
Forward compatible
Old consumers can read new messages (never remove required fields)
Lesson 1364Message Schemas and Evolution
Forward recovery
means persisting through the failure by retrying the failed step, possibly with exponential backoff or adjusted parameters.
Lesson 1369Forward Recovery vs Backward Recovery
FOSSA
, **Black Duck**, **Snyk**, and **licensee** automatically scan your dependency tree and identify license conflicts.
Lesson 1877Verifying License Compatibility in Practice
Found
Git identifies the exact commit that introduced the bug
Lesson 119Finding Bugs with Git Bisect
four golden signals
that tell you almost everything about your system's health:
Lesson 1137The Four Golden SignalsLesson 1144Dashboard Design Principles
Fourth Normal Form (4NF)
and **Fifth Normal Form (5NF)** address more subtle types of redundancy that can occur even in BCNF-compliant schemas.
Lesson 863Higher Normal Forms (4NF, 5NF)
Fragile locators
break easily when developers change styling or layout:
Lesson 563Locator Strategies and Best Practices
Fragile tests
You're mixing real and fake behavior, making it harder to reason about what's actually being tested
Lesson 479Partial Mocking and Spying on Real Objects
Fragility
Change one component, and others break unexpectedly.
Lesson 179The Cost of Tight CouplingLesson 406Balancing Testing Investment
Fragments
let you define a reusable set of fields, like a template:
Lesson 810Aliases and Fragments
Frame disagreement as collaboration
When someone challenges your architectural decision, respond with curiosity: "Tell me more about your concerns.
Lesson 1852Psychological Safety for Innovation
Framework migrations
become less painful
Lesson 1277Frameworks and Drivers Layer
Framework or library code
you don't own shouldn't be tested by you.
Lesson 403When Not to Test: Diminishing Returns
Frameworks
for making consistent decisions
Lesson 1802Scaling Your Impact Through Others
Frameworks and Drivers Layer
is the most external circle in Clean Architecture.
Lesson 1277Frameworks and Drivers Layer
Freedom to improve
Modify and share your improvements publicly
Lesson 1861What is Open Source Software?
Freedom to share
Redistribute copies to help others
Lesson 1861What is Open Source Software?
Freedom to study
Examine how it works and adapt it to your needs
Lesson 1861What is Open Source Software?
Freedom to use
Run the software for any purpose
Lesson 1861What is Open Source Software?
Frequency adjustments
Generate edge cases more often than typical values
Lesson 616Controlling Input Distribution
Frequent infrastructure changes
When you anticipate migrating databases, swapping third-party APIs, or testing different cloud providers, secondary adapters make these transitions surgical rather than surgical.
Lesson 1271When to Use Hexagonal Architecture
Frequent Integration
Developers integrate their code into the trunk multiple times per day.
Lesson 83Trunk-Based Development
Frequently-used code
Logic that runs on every request or user action
Lesson 428Test ROI and Prioritization
Freshness
for responsiveness (cached data may be slightly stale)
Lesson 958What is Caching and Why It Matters
Front-end-only checks
without server-side validation on each API call
Lesson 1036Complete Mediation
Frontend
Always include your actual UI—the buttons, forms, and pages users interact with.
Lesson 556E2E Test Scope and Boundaries
Frustrated
Response time > 4T (zero score)
Lesson 1210Apdex and User-Centric Metrics
Full compatibility
Both directions work—the gold standard for resilient systems
Lesson 1364Message Schemas and Evolution
Full page testing
(often synonymous with E2E testing at the UI layer) exercises complete user journeys through integrated pages, exactly as real users would experience your application.
Lesson 565Component Testing vs Full Page Testing
Full production testing
before going live
Lesson 709Blue-Green Deployment
Full rollout or rollback
Complete the deployment or revert if issues arise
Lesson 710Canary Releases
Function coverage
Which functions were called
Lesson 585What Code Coverage Measures
Function executes
– Your code runs with the event data as input
Lesson 1520Serverless Event-Driven Execution Model
Functional
"The car must accelerate when the driver presses the gas pedal" or "The car must stop when the brake is applied"
Lesson 124Functional vs Non-Functional Requirements
Functional requirements
describe *what* the system should do—the specific behaviors, features, and functions users need.
Lesson 124Functional vs Non-Functional Requirements
Functions
should do one clear task, not ten unrelated things
Lesson 166Separation of Concerns
Fundamental architectural error
May require complete system rewrite
Lesson 1225The Cost of Architectural Mistakes
Fundamental architecture problems
When the seams are impossible to find or dependencies too tangled.
Lesson 1765The Economics of Legacy Refactoring

G

Game state management
Save/load functionality
Lesson 301The Memento Pattern: Capturing Object State
Gates
are decision points between stages.
Lesson 700Anatomy of a Deployment Pipeline
Gather actual outcomes
Collect real duration, effort, or cost data from those projects
Lesson 1653Reference Class Forecasting
Gather diverse perspectives
early through technical discussions and stakeholder engagement
Lesson 1821Technical Strategy and Vision
Gather feedback
from stakeholders on whether the increment meets their needs
Lesson 1589Sprint Review
Generate a code verifier
a random cryptographic string (43-128 characters)
Lesson 1019Authorization Code Grant with PKCE
Generate checksums
for integrity verification
Lesson 665Build Artifacts and Output
Generate documentation
from the schema itself
Lesson 731Documentation and Configuration Schemas
Generated code
from tools you trust is another low-value target.
Lesson 403When Not to Test: Diminishing Returns
Generation-based
Uses knowledge of input formats (like file headers or protocol structures) to create semi-valid inputs
Lesson 621Introduction to Fuzzing
generator
knows how to create random instances of a type.
Lesson 610Generators and Input DomainsLesson 615Generators and Combinators
generators
specialized functions that produce random values within a defined **input domain**.
Lesson 610Generators and Input DomainsLesson 613Property Testing Tools and FrameworksLesson 614Input Generation Strategies
Generic, clunky interfaces
often feel machine-like
Lesson 856Auto-Generated vs Hand-Written SDKs
Geographic variation matters
Many states (like California) severely limit or ban non-competes, while others enforce them strictly.
Lesson 1891Employee Agreements and Intellectual Property
GET
Both safe *and* idempotent.
Lesson 765Safe and Idempotent Methods
Get approval
Stakeholders formally agree to trade-offs (add this, delay that)
Lesson 158Scope Creep and Change Control
Get immediate feedback
See the red-green-refactor cycle work right away
Lesson 497Starting with the Simplest Test
Get instant feedback
when you accidentally break something
Lesson 405Enabling Refactoring with Tests
Gets merged faster
because reviewers can act quickly
Lesson 92Pull Request Size and Scope
Gifts and favors
Accepting expensive gifts from vendors hoping to win your company's contract
Lesson 1926Conflicts of Interest and Professional Independence
Git
is a *distributed* version control system created by Linus Torvalds in 2005.
Lesson 43What is Version Control and Why Git?
Git commit SHA
Tag images with their exact source code commit (e.
Lesson 1433Image Tagging and Versioning Strategies
Git configuration
tracking the original location as "origin"
Lesson 54Cloning Existing Repositories
Git Grep
searches the *current* working directory or a specific commit, like a turbo-charged "Find" function.
Lesson 121Searching History with Git Grep and Pickaxe
Git hooks
to automate these checks—scripts that Git runs at specific moments in your workflow.
Lesson 647Pre-Commit and Pre-Push Checks
Git Log with Pickaxe
(`-S` and `-G` flags) searches through *all commits* to find when specific text was added or removed:
Lesson 121Searching History with Git Grep and Pickaxe
GitOps
, deployment credentials never leave your cluster.
Lesson 1501GitOps vs Traditional CD
Glad, Sad, Mad
Emotional check-in on experiences during the sprint
Lesson 1606Sprint Retrospective: Continuous Improvement
Global configuration objects
shared across tests
Lesson 458Avoiding Shared Mutable State
Global reads
Read all events (often by event type) for projections or analytics
Lesson 1348Event Store Design
Global scalability
Handle traffic spikes across regions without provisioning infrastructure everywhere
Lesson 1386Content Delivery Networks and Edge Caching
Glue code and adapters
can often accept lower thresholds if covered by integration tests, since their job is simply connecting components.
Lesson 596Setting Meaningful Coverage Thresholds
Goals and non-goals
What's in scope and what isn't?
Lesson 1686Design Documents and RFCs
God Object
) is a class that has grown so big it's doing far too many things.
Lesson 337Bloaters: Large Class and God Object
Golden Hammer
One pattern applied inappropriately everywhere
Lesson 1781Identifying Design Patterns in Existing Code
Good + Cheap
→ Slow (small team working carefully takes time)
Lesson 31Good-Fast-Cheap: Pick Two
Good + Fast
→ Expensive (hire more senior developers, pay for overtime)
Lesson 31Good-Fast-Cheap: Pick Two
Good comment (explains why)
Lesson 374When to Write Comments
Good SDK design
respects language conventions:
Lesson 855SDK Design Principles
Google Cloud KMS
manage encryption keys with hardware-level security.
Lesson 1516Managed Identity and Security Services
GPL
LGPL code can be relicensed as GPL if needed
Lesson 1874LGPL and Weak Copyleft Compatibility
GPL v2
(patent clause incompatibility)
Lesson 1873GPL License Compatibility Rules
GPL v2-only
→ **GPL v3** (version mismatch)
Lesson 1873GPL License Compatibility Rules
Grace period
Allow sufficient time (often 6-12 months minimum) between announcing sunset and the actual shutdown.
Lesson 853API Sunset and End-of-Life
Grace Period Monitoring
Track which clients still use deprecated endpoints so you can reach out directly before the cutoff.
Lesson 849Deprecation Policies and Timelines
Grace periods
Both old and new secrets work simultaneously during transition
Lesson 745Secret Rotation and Lifecycle Management
Graceful Node Failures
Design for nodes disappearing without warning.
Lesson 1116Fallacy 5: Topology Doesn't Change
Graceful shutdown
ensures your app finishes processing requests cleanly before terminating, preventing dropped connections and data loss.
Lesson 1506Health Checks and Graceful Shutdown
Gradle
dominate the Java world.
Lesson 660Common Build Tools Overview
Gradual expansion
If healthy, increase to 10%, then 25%, 50%, etc.
Lesson 710Canary Releases
Gradual migration
Legacy applications can adopt factors incrementally, perhaps moving stateless first (Factor VI) before tackling disposability (Factor IX)
Lesson 754Applying Twelve-Factor Principles in Practice
Gradual risk exposure
If the new version has problems, only a portion of users are affected initially.
Lesson 711Rolling Deployments
Graduated complexity
Start your tutorial with the simplest working code, then add optional sections like "Customization," "Error Handling," and "Production Patterns.
Lesson 1695Progressive Disclosure
Grant or Abandonment
After several rounds, the patent is either granted (giving exclusive rights for ~20 years) or the application is abandoned.
Lesson 1887The Patent Process and Prior Art
Granular Control
Let users choose what to share.
Lesson 1902Informed Consent and User Control
Graph
A collection of nodes (points) connected by edges (lines)
Lesson 65Understanding Git History as a DAG
GraphQL
solves over-fetching and under-fetching when clients need flexible queries.
Lesson 1322Communication Protocol Trade-offs
Green Build Contract
you learned previously isn't optional—it's the foundation of CI.
Lesson 653Fixing Broken Builds Immediately
Green Hosting
means selecting cloud providers powered by renewable energy.
Lesson 1932Sustainable Software Engineering Practices
Groovy
scripts (`Jenkinsfile`) for more complex logic.
Lesson 638Build Configuration Files
Gross mismanagement or waste
(especially in government contracts)
Lesson 1921Whistleblowing and Legal Protections
Group related metrics
Put latency percentiles (p50, p95, p99) together, not scattered
Lesson 1144Dashboard Design Principles
Grouping rules
(minor updates together, major updates separate)
Lesson 685Automating Dependency Updates
Grow the team
Mentor engineers and share knowledge from their dual vantage point
Lesson 1786What is a Tech Lead?
Growing systems
traffic doubles yearly; yesterday's "high" is today's normal
Lesson 1157Threshold Selection: Static vs. Dynamic Baselines
Growth trends
(month-over-month increases)
Lesson 1218Production Traffic Analysis for Planning
Guard Clauses
Handle edge cases early with separate functions, keeping the main logic clean and linear.
Lesson 385Breaking Down Complex Functions
Guided incremental change
Architecture evolves through small, controlled modifications rather than massive rewrites.
Lesson 1227Evolutionary Architecture

H

Half-Open → Closed
Triggered when test requests succeed
Lesson 1097Circuit Breaker States and Transitions
Half-Open → Open
Triggered when test requests fail
Lesson 1097Circuit Breaker States and Transitions
Hand-written SDKs
Manually code libraries with custom design and abstractions
Lesson 856Auto-Generated vs Hand-Written SDKs
Handle change
systematically rather than chaotically
Lesson 9What is the Software Development Lifecycle (SDLC)?
Handle Credentials Carefully
If using cookies or authentication, set `Access-Control-Allow-Credentials: true` and specify exact origins (not wildcards).
Lesson 1068Cross-Origin Resource Sharing (CORS) Security
Handler Interface
Defines how requests are received and optionally passed to the next handler.
Lesson 287Chain of Responsibility Pattern: Core Concept
Handles technology-specific concerns
(connection management, error handling, serialization)
Lesson 1267Implementing Adapters
Handling the timeout
as a known failure scenario
Lesson 1094The Timeout Pattern
Handoff
Document what happened, create follow-up tasks, schedule a post-incident review (postmortem), and ensure the next on-call engineer knows the context if the shift changes.
Lesson 1165Incident Response Workflow
Hard delete
records from all databases, including backups and replicas
Lesson 1903Data Retention and Deletion
Hard limits
disk space at 95%, memory exhausted
Lesson 1157Threshold Selection: Static vs. Dynamic Baselines
Hard to debug
Failures seem random and disappear when you isolate the test
Lesson 458Avoiding Shared Mutable State
Hard to extend
Adding new behavior requires modifying existing code everywhere → Consider Strategy or State
Lesson 326Refactoring Toward and Away from Patterns
Hard to name
You resort to vague names like `Manager`, `Controller`, or `Helper`
Lesson 337Bloaters: Large Class and God Object
Hard to set up
(require test databases, migrations, network connections)
Lesson 1279Testing in Clean Architecture
Hard to understand
When you open a 200-line method, you need to keep track of many variables, conditions, and operations all at once.
Lesson 336Bloaters: Long MethodLesson 337Bloaters: Large Class and God Object
Hard-coded defaults
(in your application code)
Lesson 736Precedence and Overriding
Hard-to-test code
– When you can't easily swap out components for testing (like replacing a real database with a test double), it's often because dependencies point the wrong direction.
Lesson 227Recognizing DIP Violations
Hardcoded test data
scatters magic values everywhere.
Lesson 450The Problem with Test Data
harder to maintain
, and **harder to understand** for other developers.
Lesson 253Avoiding Pattern OveruseLesson 336Bloaters: Long Method
Hardware fails
Network switches, routers, and cables break
Lesson 1407Network Partitions in Practice
Hardware Interface Access
When your code interfaces with physical hardware (printer, scanner, GPU), the hardware itself enforces singularity.
Lesson 232When Singleton is Appropriate
Hardware Tokens
Physical devices like YubiKeys plug into USB ports or use NFC.
Lesson 994Multi-Factor Authentication (MFA)
Harm potential
Could this data be weaponized against vulnerable users?
Lesson 1909Surveillance and Tracking Ethics
Header
Specifies the algorithm (like HS256 or RS256)
Lesson 1011Stateless Authentication with JWTs
Header-based
keeps URLs stable for caching.
Lesson 848API Versioning Strategies
Health information
(medical records, prescriptions, fitness data)
Lesson 1900Personal Data and Sensitive Information
Health issues
sleep deprivation, stress-related illness
Lesson 1855The Cost of Overwork
Health-Aware Routing
Don't just know where services are—know which instances are healthy.
Lesson 1116Fallacy 5: Topology Doesn't Change
Healthcare systems
managing patient records, prescriptions, or medical device control require consistency.
Lesson 902When ACID Guarantees Are Critical
Heavy computations
(report generation, analytics)
Lesson 964Determining What to Cache
Height
represents call stack depth (bottom = entry points, top = leaf functions)
Lesson 1196CPU Profiling and Flame Graphs
Helper Methods
Extract common setup into private functions with descriptive names.
Lesson 439Handling Test Setup Complexity
Here's the reality
You cannot build everything at once.
Lesson 152The Need for Prioritization
Hidden Dependencies
Can't instantiate your class without a database connection or configuration file?
Lesson 507TDD as a Design Tool
Hide complexity
Abstract away HTTP details, authentication, retries, and pagination
Lesson 855SDK Design Principles
Hides concrete class names
from calling code
Lesson 236Implementing Factory Methods
Hierarchical
`admin:all` might imply all other scopes
Lesson 1022OAuth2 Scopes and Consent
High change frequency
areas are risky because they're constantly being modified.
Lesson 402What to Test: Risk-Based TestingLesson 1765The Economics of Legacy Refactoring
High collective ownership
→ knowledge sharing, no bottlenecks, resilience
Lesson 1834Individual Ownership and Accountability
High individual accountability
→ clear responsibility, domain expertise, quality standards
Lesson 1834Individual Ownership and Accountability
High maintenance
UI changes break dozens of tests
Lesson 410The Ice Cream Cone Anti-pattern
High maintenance cost
manual updates for every API change
Lesson 856Auto-Generated vs Hand-Written SDKs
High Power, High Interest
Your key players (e.
Lesson 1673Identifying and Mapping Stakeholders
High Power, Low Interest
Keep satisfied (e.
Lesson 1673Identifying and Mapping Stakeholders
High testability requirements
For systems where fast, comprehensive automated testing is critical, hexagonal architecture enables testing business logic in isolation without spinning up databases or external services.
Lesson 1271When to Use Hexagonal Architecture
High throughput
Millions of events per second across distributed services
Lesson 1317Event Streaming with Kafka
High throughput approach
The kitchen batches orders, cooking multiple steaks simultaneously.
Lesson 1204Latency vs Throughput
High-cost operations
like table scans on large tables are red flags.
Lesson 879Understanding Query Execution Plans
High-level components
contain core business logic and policies—the essential "what" of your system.
Lesson 189Dependency Direction and Stability
High-priority tests
typically cover:
Lesson 428Test ROI and Prioritization
High-risk changes
to core systems or security-sensitive code
Lesson 1630When to Use Pairing vs Mobbing
High-risk code
(authentication, payment processing, data validation) might warrant 90-100% coverage.
Lesson 596Setting Meaningful Coverage Thresholds
High-risk paths
Features where bugs cause serious harm (data loss, security breaches, financial errors)
Lesson 428Test ROI and Prioritization
High-throughput sustained workloads
become expensive with per-invocation pricing.
Lesson 1527When Serverless is and Isn't Appropriate
High-value paths
Core user journeys that drive business value (checkout, signup, critical workflows)
Lesson 428Test ROI and Prioritization
High-value targets
include business logic, security-critical code, payment processing, data integrity, and complex algorithms.
Lesson 406Balancing Testing Investment
Higher availability
Systems remain responsive even when some nodes are unreachable
Lesson 922Understanding Eventual ConsistencyLesson 1403Multi-Leader and Leaderless Replication
Higher coupling
Services depend on the orchestrator; it knows about all participants
Lesson 1375Trade-offs: Coupling and Visibility
Higher maintenance burden
E2E tests are fragile.
Lesson 555The Value and Cost of E2E Tests
Higher storage costs
– you're charged for storing deployment artifacts
Lesson 1524Managing Dependencies and Package Size
Higher throughput
Your web servers handle more requests per second
Lesson 1385Asynchronous Processing and Message Queues
Highest confidence
E2E tests prove your system works from the user's perspective, catching issues that slip through lower-level tests.
Lesson 417End-to-End Tests: Testing Complete User Flows
Highly dynamic data
(stock prices, live sports scores): Short TTL (seconds to minutes)
Lesson 962Time-to-Live and Expiration Policies
Highly visible
Anyone reading the URL knows exactly which version they're hitting
Lesson 791URI Versioning (Path-Based)
Hiring
Candidates who match the "culture fit" of existing teams (often meaning similar backgrounds or communication styles) may advance over equally qualified candidates with different experiences.
Lesson 1850Unconscious Bias in Technical Decisions
Historical inequality
If you train a hiring model on 20 years of resume data from a company that predominantly hired men for engineering roles, the model learns that "good engineers" look like men.
Lesson 1914Bias in Training Data
Historical velocity
Use past sprint data as a baseline, not a commitment
Lesson 1602Effective Sprint Planning Practices
History is preserved
You can see why decisions were made and how docs evolved
Lesson 1706Documentation as Code
History rules
(can't reuse last 5 passwords)
Lesson 1004Password Strength Requirements and Policies
Holiday seasons
Black Friday, Cyber Monday, Christmas shopping
Lesson 1548Release Windows and Blackout Periods
Honesty
Accurately representing capabilities and limitations
Lesson 1895Public Interest and Social Responsibility
Honesty and Transparency
You should provide accurate assessments of project feasibility, timelines, and risks.
Lesson 1896Client and Employer Obligations
Hook methods
are those optional steps—they provide default (often empty) behavior that subclasses can choose to customize.
Lesson 316Hook Methods in Template Method
Horizontal axis
How much effort (time, complexity, resources) will this take?
Lesson 154Value vs. Effort Quadrants
Horizontal scaling
provides theoretically unlimited growth by adding more nodes.
Lesson 1240Scalability: Horizontal and VerticalLesson 1442What is Kubernetes and Why Use It
Horizontal scaling (scale out)
Add more machines.
Lesson 1217Scalability Testing and Limits
Horizontal Scaling (Scaling Out)
Adding more machines to distribute the workload.
Lesson 1240Scalability: Horizontal and Vertical
Host-mounted
Directories from the host machine mapped into the container
Lesson 1429Container Storage and Volumes
Hot storage (recent logs)
Keep the last 7-30 days in fast, searchable systems for active debugging and monitoring.
Lesson 1126Log Retention and Storage
How deeply nested
your logic is
Lesson 382What is Code Complexity?
How do components interact
Integration tests show real usage patterns
Lesson 404Testing as Documentation
How many dependencies
different parts have on each other
Lesson 382What is Code Complexity?
How many paths
exist through your code (branches, loops, conditionals)
Lesson 382What is Code Complexity?
how often
your system fails and **how it handles failures** are critical performance dimensions.
Lesson 1209Error Rate and Success MetricsLesson 1322Communication Protocol Trade-offs
HSTS Preload List
, which browsers ship with.
Lesson 1071HTTP Strict Transport Security (HSTS)
HTML Context
When inserting user data into HTML body or attributes, encode special characters like `<`, `>`, `&`, `"`, and `'` into HTML entities:
Lesson 1064Preventing XSS Through Output Encoding
HTTP GET
Send a request to a specific endpoint (e.
Lesson 1450Health Checks: Liveness and Readiness Probes
HTTP method usage
– When to use GET, POST, PUT, PATCH, DELETE based on your earlier training
Lesson 858API Style Guides
HTTP Strict Transport Security
is a security header your server sends that instructs browsers: "For the next X seconds, *only* communicate with me over HTTPS, even if the user types `http://` or clicks an HTTP link.
Lesson 1071HTTP Strict Transport Security (HSTS)
HTTP/2
, enabling features like bidirectional streaming and multiplexing.
Lesson 799RPC Protocols: XML-RPC, JSON-RPC, and gRPC
HttpOnly, Secure, SameSite cookies
.
Lesson 1015Securing Tokens in the Browser
Human-readable vs. hashed keys
`user:123:profile` is debuggable; `sha256("user:123:profile")` is uniform-length but opaque.
Lesson 961Cache Keys and Lookup Mechanisms
Hungarian Notation
, where you'd prefix variables like `strName`, `iCount`, or `bIsActive` to show their types (string, integer, boolean).
Lesson 371Avoiding Encodings and Hungarian Notation
hybrid approach
retry forward a limited number of times, then roll back if retries are exhausted.
Lesson 1369Forward Recovery vs Backward RecoveryLesson 1510Cloud Portability and Vendor Lock- in Trade-offs
hybrid approaches
strong ACID for critical operations (payments) and relaxed guarantees for less critical ones (caching, metrics).
Lesson 901ACID Trade-offs and PerformanceLesson 923The Consistency-Availability Trade-offLesson 1378Hybrid Approaches
Hypothesis
(Python) is the most feature-rich modern implementation.
Lesson 613Property Testing Tools and Frameworks
Hypothetical questions
test understanding: "What would happen if this system were unavailable for an hour?
Lesson 134Interview Techniques for Requirements

I

I want
describes the specific capability or action (e.
Lesson 144The User Story Format
I/O bottlenecks
show up as slow database queries, disk writes, or file operations.
Lesson 1380Identifying Scalability Bottlenecks
I/O overhead
– Writing to disk or network is thousands of times slower than memory operations.
Lesson 1127Logging Performance Considerations
I/O throughput ceilings
(disk or network bandwidth)
Lesson 1217Scalability Testing and Limits
I/O-bound
bottlenecks occur when your system spends most of its time waiting for disk reads/writes.
Lesson 1193Common Performance Bottlenecks
Ice Cream Cone anti-pattern
, where teams write too many slow end-to-end tests and too few fast unit tests—the opposite of what the Testing Pyramid recommends.
Lesson 410The Ice Cream Cone Anti-pattern
ID token
, a JSON Web Token (JWT) that contains claims about the authenticated user's identity.
Lesson 1023OpenID Connect (OIDC) and ID Tokens
IDE plugins
that highlight complex functions as you write them
Lesson 390Using Complexity Metrics in Practice
Ideal PR size
depends on your team, but research suggests **200-400 lines changed** as a sweet spot for catching defects.
Lesson 1620Review Size and Scope Trade-offs
Ideal scenario
Throughput increases linearly while latency stays constant
Lesson 1387Measuring Scalability: Throughput and Latency
Idempotence
means applying an operation multiple times has the same effect as applying it once.
Lesson 609Common Property Patterns
Idempotency required
Since messages might be retried, compensating actions should be safe to execute multiple times.
Lesson 1367Compensating Transactions
Idempotency tests
Run configuration twice; second run should change nothing
Lesson 1494Testing Configuration Code
Idempotent methods
can be called multiple times with the same outcome.
Lesson 765Safe and Idempotent Methods
Identification and Authentication Failures
occur when weaknesses in how systems verify user identity allow attackers to bypass authentication, take over accounts, or impersonate others.
Lesson 1048A07: Identification and Authentication Failures
Identifiers
`user_id`, `session_id`, `request_id`, `transaction_id`
Lesson 1130Key-Value Pairs and Log Fields
Identify a bounded context
(lesson 1281) that's well-defined and relatively independent
Lesson 1336Migrating from Monolith to Microservices
Identify affected components
(features, tests, data structures)
Lesson 161Change Impact Analysis
Identify all callsites
where the flag is checked
Lesson 1566Flag Debt and Cleanup Strategies
Identify and communicate risks
when quality is compromised by deadlines or resources
Lesson 1897Product Quality and Professional Competence
Identify blind spots
Run your coverage report and look for untested code paths—especially error handlers, edge cases, and conditional branches
Lesson 593Coverage as a Diagnostic Tool, Not a Goal
Identify conflicts
(healthy places are often slower and pricier)
Lesson 30Trade-off Analysis and Decision Making
Identify constraints
What are your limits?
Lesson 30Trade-off Analysis and Decision Making
Identify critical operations
Which transactions absolutely must see consistent data?
Lesson 910Choosing the Right Isolation Level
Identify critical paths
attackers are most likely to exploit
Lesson 1082Attack Trees and Risk Prioritization
Identify distinct responsibilities
in your bloated class (you learned this in "Identifying Multiple Responsibilities")
Lesson 198Refactoring to SRP: Extracting Classes
Identify keeper patterns
What insights did you gain?
Lesson 520Uncertain Requirements and Prototypes
Identify potential problems
before they cascade through the system
Lesson 1220Architecture as Structure
Identify root cause
Look for null pointers, corrupted data, or unexpected states
Lesson 1734Post-Mortem Debugging with Core Dumps and Crash Reports
Identify the actual behavior
being tested—what business rule or logic is really being verified?
Lesson 414Moving Tests Down the Pyramid
Identify the reference class
Find 5-10 completed projects similar to yours in scope, technology, team size, or complexity
Lesson 1653Reference Class Forecasting
Identify their success metrics
(what makes this work for them?
Lesson 1812Identifying and Engaging Stakeholders
Identify two states
Find a known-good version (no bug) and a known-bad version (bug present)
Lesson 1724Binary Search for Bug Localization
Identify visual anomalies
like unexpected popups, loading states, or styling issues
Lesson 578Screenshot and Video Debugging
Identifying actionable improvements
means translating your root cause analysis into specific, measurable tasks that close the gaps revealed by the incident.
Lesson 1184Identifying Actionable Improvements
Identifying assets
What data or functionality must be protected?
Lesson 1078What is Threat Modeling
Identifying hot data
Determine which data is accessed most frequently (user profiles, product catalogs, homepage content)
Lesson 989Cache Warming and Preloading
Identity Map
(objects keyed by ID) and a **Unit of Work** (pending changes), bridging your object-oriented code and SQL transactions.
Lesson 950Session and Transaction Management
Identity Map Pattern
maintains a cache of all objects loaded from the database during a session (often tied to a **Unit of Work**).
Lesson 939Identity Map Pattern
IDEs show types instantly
when you hover over a variable
Lesson 371Avoiding Encodings and Hungarian Notation
Idiomatic code
that feels natural in each language
Lesson 856Auto-Generated vs Hand-Written SDKs
Idle Timeout
measures inactivity.
Lesson 1009Session Lifecycle and Expiration
If it fails
, execute the fallback logic
Lesson 1100The Fallback Pattern
If tests fail
You accidentally changed something—fix it now while the change is fresh
Lesson 332The Refactoring Safety Net
If tests still pass
Your refactoring preserved behavior
Lesson 332The Refactoring Safety Net
If you agree
Make the requested change, commit it, and reply confirming what you did.
Lesson 106Responding Constructively to Review Feedback
If you disagree
Respectfully explain why with technical reasons, not emotions.
Lesson 106Responding Constructively to Review Feedback
Immediate failure
(no wait): Fail fast if the lock is held.
Lesson 918Lock Timeouts and Wait Strategies
Immediate feedback
Run tests every minute or two, catching issues instantly
Lesson 493Taking Small Steps in TDD
Immediately
(before disk write): Fast, but risky
Lesson 1360Message Durability and Persistence
Immutability
is important (build once, never change)
Lesson 246Builder vs Constructor: When to Use Each
Immutable
Once created, they never change
Lesson 1425Container Images and Layers
Immutable infrastructure
takes the opposite approach: servers are never modified after deployment.
Lesson 1473Immutable vs Mutable Infrastructure
Impact Assessment
Who was affected?
Lesson 1747Documenting RCA Findings
Impact metrics
Measurable improvements in productivity, reliability, or revenue
Lesson 1823The Staff Engineer Promotion Path
Impact scope
(does it affect production?
Lesson 679Dependency Vulnerability Scanning
Impediments raised, not solved
Deep problem-solving happens afterward with relevant people only
Lesson 1603Daily Standup: Goals and Format
Imperative configuration
is like giving turn-by-turn directions: "Go straight, turn left at the light, then right after the bridge.
Lesson 1489Declarative vs Imperative Configuration
Imperative provisioning
is like giving step-by-step cooking instructions: "First, preheat the oven to 350°F.
Lesson 1480Declarative vs Imperative Provisioning
Implement hysteresis
if you alert at 90% CPU, don't clear the alert until it drops below 80%.
Lesson 1158Alert Fatigue: Reducing False Positives
Implement the concrete mediator
holding references to all form widgets
Lesson 300Implementing a Dialog or Form Mediator
Implement the new approach
Build your new implementation behind the same abstraction
Lesson 1768Branch by Abstraction
Implement timeouts
so slow services don't hang your suite
Lesson 576Handling External Services
Implementation details
Specific solutions that might evolve (e.
Lesson 165Building Flexibility into Requirements
Implementation hierarchy
Different TV technologies (LCD, OLED, Plasma)
Lesson 260The Bridge Pattern: Separating Abstraction from Implementation
Implementation pattern
Track which writes a user session has made (often via version numbers or timestamps), and route that user's reads to replicas that have caught up to at least those writes.
Lesson 925Read-Your-Writes and Monotonic Reads
Implementation-focused tests
mirror your code structure—one test file per class, tests named after methods, assertions checking internal state changes.
Lesson 449Organizing Tests by Behavior vs Implementation
Implements a port interface
defined by your application
Lesson 1267Implementing Adapters
Implicit Grant
was designed for browser-based JavaScript applications that couldn't keep secrets.
Lesson 1020Implicit and Client Credentials Grants
Implicit vs explicit transactions
Some ORMs auto-commit, others require explicit `commit()` calls.
Lesson 950Session and Transaction Management
Import/dependency lists
Long lists of imports suggest a class knows too much about others
Lesson 183Measuring Coupling and Cohesion in Practice
Impossible states
Data violates your business rules temporarily or permanently
Lesson 896What Are Transactions and Why They Matter
Improve context
for alerts that confuse responders
Lesson 1162Alert Evaluation: Regular Review and Refinement
Improve continuously
Each iteration teaches you something for the next cycle
Lesson 17Feedback Loops Across the SDLC
Improve query performance
The database can scan a smaller, more focused index with higher selectivity
Lesson 876Partial and Filtered Indexes
Improve your own skills
You learn to spot patterns and bad habits
Lesson 101Self-Reviewing Before Submission
Improved responsiveness
Users get instant feedback instead of waiting for slow operations
Lesson 1385Asynchronous Processing and Message Queues
Improved understanding
Developers can focus on one component at a time without needing to understand everything it touches
Lesson 177Understanding Coupling: How Components Depend on Each Other
Improves clarity
Clear boundaries show what's public vs.
Lesson 171Encapsulation and Data Hiding
Improves Readability
A method named `calculateTotalWithTax()` tells you immediately what it does.
Lesson 346Extract Method
Improves scalability
(servers handle more concurrent requests with less memory per request)
Lesson 783Why Pagination Matters
Improving documentation
or error messages
Lesson 847Breaking vs Non-Breaking Changes
IN
loads all matching values into memory first, then checks each row
Lesson 884Query Rewriting for Performance
In Progress
– actively being worked on
Lesson 1593The Kanban Board
In the body
`Closes #123` or `Fixes #456`
Lesson 115Referencing Issues and Tickets
In user interfaces
Never show raw exceptions.
Lesson 1092Error Handling at System Boundaries
In-memory
Perfect for fast feedback when testing basic SQL operations
Lesson 531Setting Up Test DatabasesLesson 1382Stateless Application Design for Scalability
In-memory filesystems
simulate file operations without touching the disk at all — everything happens in RAM.
Lesson 535Testing File System Operations
In-memory only
Messages exist solely in RAM.
Lesson 1360Message Durability and Persistence
Inbound (driving) ports
Interfaces that let external systems call your business logic (e.
Lesson 1264The Ports and Adapters Pattern
Incident Response Runbooks
define who to notify, communication templates, investigation procedures, and post-incident review requirements.
Lesson 1685Runbooks and Operational Documentation
Incident Thresholds
Not everything warrants a 3 AM page.
Lesson 1857On-Call and After-Hours Work
Incident tracking
begun immediately, even if details come later
Lesson 1549Emergency Release Procedures
Include decision trees
"If X, then do Y; otherwise do Z"
Lesson 1685Runbooks and Operational Documentation
Incoming responses
status code, response time, error messages
Lesson 1124Logging at System Boundaries
Incompatible licenses
impose restrictions that conflict with GPL requirements:
Lesson 1873GPL License Compatibility Rules
Incomplete
Missing critical security events
Lesson 1050A09: Security Logging and Monitoring Failures
Incomplete setups
occur when security features exist but aren't enabled.
Lesson 1046A05: Security Misconfiguration
Incomplete transactions
A user update fails halfway through, leaving elevated privileges in place
Lesson 1034Fail Securely
Incomplete understanding
You might not fully understand what the original code was doing or why it was written that way.
Lesson 202Why Modification is Risky
Inconsistencies grow
Different parts of the system solve similar problems differently
Lesson 41Code Evolution and Entropy
Increase test complexity
– more setup code, more mocking logic to understand
Lesson 473The Cost-Benefit Trade-offs of Test Doubles
Increased Abstraction
Patterns add layers between your intent and implementation.
Lesson 323The Cost of Pattern Overhead
Increased Complexity
Achieving reproducibility requires pinning dependencies, controlling build environments, standardizing timestamps, and managing many other details.
Lesson 691Benefits and Trade-offsLesson 1403Multi-Leader and Leaderless ReplicationLesson 1478Benefits and Challenges of Immutability
Increased operational complexity
You now manage message brokers, monitoring distributed flows, and potential event ordering issues across services.
Lesson 1346Benefits and Trade-offs of Event-Driven Architecture
Increased response size
Every response carries navigation links
Lesson 797HATEOAS Trade-offs and Maturity Models
Increased Risk
Rolling back changes becomes dangerous because you don't know what the "working" state actually was.
Lesson 1474Configuration Drift and Its Problems
Increased user trust
People appreciate when you respect their privacy
Lesson 1901Data Minimization Principle
Increases load
on your backends (you're doing extra work)
Lesson 1109Request Hedging and Redundancy
Increasing cycle time
If tasks suddenly take longer to complete, measure time spent in *each* stage.
Lesson 1597Identifying and Resolving Bottlenecks
Incremental build
30 seconds
Lesson 664Incremental Builds
Incremental Safety
Start with the parts you need to change.
Lesson 515Legacy Code Without Tests
Independence
Service A runs even if Service B is down
Lesson 1309Data Duplication vs Data Coupling Trade-offs
Independent change
You can rewrite Module B's internals without breaking Module A
Lesson 167Abstraction and Information Hiding
Independent Deployment
You can update, deploy, and scale one service without touching others.
Lesson 1294Defining MicroservicesLesson 1333Team Size and Conway's Law
Independent in-memory data structures
Lesson 462Parallelizing Test Execution
Independent research
or exploration phases
Lesson 1630When to Use Pairing vs Mobbing
Independent Scaling
A high-traffic service can scale its database separately.
Lesson 1307Database Per Service PatternLesson 1385Asynchronous Processing and Message Queues
Index high-cardinality columns
used in WHERE clauses, especially for exact matches
Lesson 875Index Selectivity and Cardinality
Industry standards
Common data formats, protocols, or workflows everyone expects (like HTTPS for web apps)
Lesson 140Domain Research and Competitive Analysis
Inefficient index usage
Scans instead of seeks, or using only part of a composite index (wrong column order from lesson 873)
Lesson 878Using Query Execution Plans to Validate Indexes
Influence
How much power do they have?
Lesson 133Stakeholder Identification and Analysis
Influence demonstrations
How you shaped technical direction without direct authority
Lesson 1823The Staff Engineer Promotion Path
Informal check-ins
matter too: brief pulse-checks during standups ("How are we feeling about this sprint?
Lesson 1645Creating Feedback Loops in Teams
Information hiding
means keeping implementation details private, so other parts of your system don't depend on them.
Lesson 167Abstraction and Information Hiding
Infrastructure as Code
is the practice of managing and provisioning computing infrastructure through machine-readable configuration files rather than manual processes or interactive configuration tools.
Lesson 1464What is Infrastructure as Code
Infrastructure costs
(shared compute, storage, network)
Lesson 1528What is Multi-Tenancy
Infrastructure issues
Network problems, resource exhaustion, configuration drift
Lesson 719Deployment Risk and the Need for Rollback
Infrastructure provisioning tools
(like Terraform, CloudFormation, or Pulumi) excel at creating and destroying cloud resources.
Lesson 1495Configuration Management vs Infrastructure Provisioning
Ingress
is a Kubernetes resource that defines rules for routing external HTTP/S traffic to internal Services.
Lesson 1463Ingress Controllers and HTTP Routing
Ingress Controller
is the actual component that implements these rules.
Lesson 1463Ingress Controllers and HTTP Routing
Inheritance
means creating a parent-child relationship where the child "is-a" type of parent and inherits all its behaviors.
Lesson 173Favor Composition Over InheritanceLesson 271Decorator vs. Inheritance: Flexibility and Complexity
Inherited systems
impose constraints too:
Lesson 33Technical Constraints and Platform Limitations
INI
files are the simplest: flat `key=value` pairs under `[sections]`.
Lesson 735Configuration File Formats and Parsing
Initial Slowdown
New TDD practitioners write tests more slowly.
Lesson 521Team Adoption and Learning Curve
Initial state
Alice and Bob are both on-call.
Lesson 912Write Skew and Serialization Anomalies
Injection Flaws
SQL injection, command injection, and script injection happen when untrusted input is incorporated into queries or commands.
Lesson 624Detecting Security Vulnerabilities
Inline Class
is the reverse: when a class is doing so little that it doesn't justify existing separately, you fold its responsibilities back into another class.
Lesson 350Extract Class and Inline Class
Innovation
Different perspectives challenge assumptions and spark creative solutions
Lesson 1848The Business and Ethical Case for Diversity
Innovation time
formalizes this exploration by allocating dedicated hours (like "20% time" or regular hackathons) for engineers to pursue learning and experimentation.
Lesson 1841Safe-to-Fail Experiments and Innovation Time
Input parameters
(sanitized of sensitive data)
Lesson 1091Error Context and Propagation
Input validation
that protects against injection attacks even when attackers understand your tech stack
Lesson 1035Security by Design, Not ObscurityLesson 1060Input Validation and SanitizationLesson 1115Fallacy 4: The Network is Secure
Input variables
Parameters that customize the module's behavior
Lesson 1484Terraform Modules and Reusability
Insecure CI/CD pipelines
allow attackers to inject malicious code during the build and deployment process.
Lesson 1049A08: Software and Data Integrity Failures
Insertion and Deletion Anomalies
Poor design can make it impossible to store certain data without creating fake entries, or cause unintended data loss when deleting records.
Lesson 860What is Normalization?
Inside conditional branches
to verify which path executes
Lesson 1715Adding Strategic Print Statements and Logging
Insider threats
A malicious employee can abuse their complete access
Lesson 1037Separation of Duties
Insider threats are contained
Malicious actors can only harm what they can reach
Lesson 1033Principle of Least Privilege
Inspect progress
toward the overall product goal
Lesson 1589Sprint Review
Inspect variables
Examine the values that led to the failure
Lesson 1734Post-Mortem Debugging with Core Dumps and Crash Reports
Inspection
– Regularly examine the product, process, and team dynamics
Lesson 1600What Are Agile Ceremonies?
Install
Configure your web server to use the certificate and private key
Lesson 1077Certificate Management and Mixed Content
Installation/Setup Instructions
Step-by-step commands or procedures to get the software running locally.
Lesson 1683README Files
Instant rollback
if issues arise
Lesson 709Blue-Green Deployment
Instrumentation profilers
work like installing speed cameras at every intersection.
Lesson 1195Types of Profilers: Sampling vs Instrumentation
Insufficient Randomness
Using predictable values for tokens, IVs (initialization vectors), or salts.
Lesson 1043A02: Cryptographic Failures
Insufficient workflow validation
An e-commerce system lets users modify their cart, but never validates that users can only purchase items they actually added.
Lesson 1045A04: Insecure Design
Intangible
(technical debt, improvements with delayed value)
Lesson 1598Policies and Classes of Service
Integrate them
Use `git pull` (which fetches and merges) or manually merge/rebase the remote branch into yours
Lesson 80Handling Push Rejections
Integrated
The code successfully integrates with the rest of the system.
Lesson 694Production-Ready Definition
Integration allowed
→ you can build commercial products using MPL libraries
Lesson 1868The Mozilla Public License
Integration confidence
Verifies components work together correctly
Lesson 565Component Testing vs Full Page Testing
Integration failures
Both modules work individually but fail when connected
Lesson 522What Are Module Boundaries
Integration issues
Third-party services fail or return unexpected data
Lesson 719Deployment Risk and the Need for Rollback
Integration nightmares
Systems that can't easily talk to each other
Lesson 1251Architecture Governance and Standards
Integration patterns
How services communicate (REST, gRPC, events)
Lesson 1251Architecture Governance and Standards
Integration points
How the system connects to external services
Lesson 127System RequirementsLesson 524Testing Adapter Layers
Integration requirements
Must use the existing Oracle database
Lesson 1232Constraints: Technical and Organizational
Intent locks
are lightweight locks placed at higher levels of a hierarchy (like tables or pages) to signal that finer-grained locks (like row locks) exist or are needed below.
Lesson 920Intent Locks and Lock Hierarchies
Interaction quality
Whether components work together correctly beyond just executing
Lesson 592Limitations of Coverage Metrics
Interaction-based testing
checks the *process* of an operation.
Lesson 477Interaction-Based vs State-Based Testing
Interactions and Boundaries
Show how components communicate—REST APIs, message queues, shared databases.
Lesson 1682Architecture Documentation
Interactive rebase
(`git rebase -i`) takes this further—it opens an editor where you can *rewrite* history by reordering, combining, editing, or removing commits entirely.
Lesson 68Interactive Rebase for History CleanupLesson 114Commit Hygiene Before Push
interest
the longer technical debt sits in your codebase, the more expensive it becomes.
Lesson 36What is Technical DebtLesson 133Stakeholder Identification and Analysis
Interface Adapters Layer
sits between your use cases and these external agencies, performing the crucial job of converting data back and forth.
Lesson 1276Interface Adapters Layer
Interface contracts
Define explicit APIs between layers
Lesson 1257Layer Responsibilities and Boundaries
Interface Definition Language
(IDL) is a specification format that describes the interface of a service—what methods it offers, what parameters they accept, and what they return—in a language-agnostic way.
Lesson 800Interface Definition Languages (IDLs)
Interface Segregation Principle
you just learned.
Lesson 216Fat Interfaces and Their Problems
Interface specifications
How components communicate (APIs, protocols)
Lesson 127System Requirements
Interfaces
specify the contract plugins must follow
Lesson 192Plugin Architectures and Extension Points
Interfaces (Contracts)
Module A depends on an abstract interface, and Module B implements it.
Lesson 1292Inter-Module Communication Patterns
Interfaces and Classes
Document the purpose and responsibility of each public interface or class.
Lesson 1680API Reference Documentation
Internal fragmentation
Pages are only partially filled, wasting space
Lesson 877Index Maintenance and Statistics
Internal high-frequency calls
gRPC
Lesson 1322Communication Protocol Trade-offs
Internal network access
`http://localhost:6379/` might hit your Redis server
Lesson 1051A10: Server-Side Request Forgery (SSRF)
Internal stakeholders
work *within* your organization.
Lesson 20Internal vs External Stakeholders
Internal Wikis
serve as living documentation repositories.
Lesson 1843Knowledge Sharing Mechanisms
Internally strong
(high cohesion) - everything inside works toward the same goal
Lesson 182The Relationship Between Coupling and Cohesion
Intervention
means addressing exclusionary behavior in the moment.
Lesson 1854Allyship and Advocacy in Engineering
Interviews
are your most powerful tool for depth.
Lesson 1674Understanding Stakeholder Needs and Concerns
Introduce Interfaces
Create an interface for the dependency (like `IEmailSender`) so you can provide a fake implementation during tests that doesn't actually send emails.
Lesson 1754Breaking Dependencies to Enable Testing
Introduce Parameter Object
means creating a new class or struct to hold related parameters, then passing that single object instead.
Lesson 353Introduce Parameter Object
Introduce the abstraction
Create an interface or wrapper around the code you want to replace
Lesson 1768Branch by Abstraction
Invalidate
Delete the cache key immediately after
Lesson 979Cache-Aside Invalidation Pattern
Invalidate old tokens immediately
when a new reset is requested or password changes successfully.
Lesson 1005Password Reset Flows and Security Tokens
Inventory dependencies
List all direct and transitive dependencies
Lesson 1877Verifying License Compatibility in Practice
Inventory management systems
need ACID to prevent overselling.
Lesson 902When ACID Guarantees Are Critical
Inventory Service
listens for "OrderPlaced" and reserves stock
Lesson 1374Choreography: Decentralized Collaboration
Inventory systems
where occasional staleness is acceptable
Lesson 906Read Committed Isolation
Inventory Team
→ owns the Inventory Service
Lesson 1300Organizational Alignment
Inverse relationships
describe operations that undo each other.
Lesson 609Common Property Patterns
INVEST
criteria—six qualities that make stories easier to work with and more likely to deliver real value.
Lesson 145Writing Effective User Stories
Investor requirements
Some investors want patent protection as proof of IP value
Lesson 1890Trade Secrets vs Patents: Choosing a Strategy
Invoker
– Triggers commands without knowing what they do (holds and calls `execute()`)
Lesson 291Implementing the Command Pattern
Involve stakeholders
let them weigh priorities with full information
Lesson 1235Driver Conflicts and Trade-offs
IoT devices
Embedded systems with certificates burned into hardware
Lesson 996Certificate-Based Authentication
IPC (inter-process communication)
Efficient local communication
Lesson 1444Pods: The Atomic Unit of Deployment
IPC namespace
Isolated inter-process communication resources
Lesson 1427Namespaces and Control Groups
Iron Triangle
meeting strict performance requirements often means higher cost or reduced scope.
Lesson 32Non-Functional Requirements as ConstraintsLesson 36What is Technical Debt
Irreconcilable values
Stakeholders prioritize fundamentally different outcomes (e.
Lesson 1816Making Decisions When Consensus Fails
Isolate code paths
When you suspect a specific feature or algorithm is causing problems, put both the old and new implementations behind flags.
Lesson 1740Feature Flags for Production Debugging
Isolate external calls
to specific test scenarios you can skip independently
Lesson 576Handling External Services
Isolate test data
Each test should create its own data in the "Arrange" phase, not rely on data from previous tests.
Lesson 440Avoiding Test Interdependence
Isolate the root cause
more quickly
Lesson 1721Creating Minimal Reproduction Cases
Isolated fix branch
– Branch from the production release tag, not `main`
Lesson 1569The Hotfix Process and Risk Management
Isolating the problem domain
means systematically determining which layer or component is responsible for the failure.
Lesson 1723Isolating the Problem Domain
Issue tracker references
automatically linked (e.
Lesson 1555Automating Changelog Generation
It affects multiple components
the choice ripples through your codebase
Lesson 1221Architecture as Decisions
It constrains future options
you're committing to certain paths and closing others
Lesson 1221Architecture as Decisions
It derives economic value
from not being generally known
Lesson 1889Trade Secrets: Definition and Protection
It duplicates coverage
Two tests verify the exact same behavior with trivial variations
Lesson 503When to Delete or Merge Tests
IT efficiency
Centralized user management and access control
Lesson 995Single Sign-On (SSO) Fundamentals
It performs no transformation
Just passes data structures unchanged
Lesson 1261When Layers Become Too Thin
It tests implementation details
The test broke during valid refactoring because it was too tightly coupled
Lesson 503When to Delete or Merge Tests
It's easier to change
Modifications affect one clear area of responsibility
Lesson 180Understanding Cohesion: What Belongs Together
It's easier to test
Fewer unrelated concerns means simpler, focused tests
Lesson 180Understanding Cohesion: What Belongs Together
It's easier to understand
You grasp its purpose quickly because it does one thing well
Lesson 180Understanding Cohesion: What Belongs Together
It's more reusable
A focused module can be used elsewhere without dragging along unrelated baggage
Lesson 180Understanding Cohesion: What Belongs Together
Iterate on your board
If certain columns consistently cause delays, investigate why.
Lesson 1595Managing Flow and Cycle Time
Iterative
models to coordinate effectively.
Lesson 16Choosing an SDLC Model for Your Project
Iterative and Incremental Models
take a different approach: they break the project into smaller cycles called *iterations*.
Lesson 13Iterative and Incremental Models
Iterative Models
repeat cycles to gradually improve?
Lesson 14Agile SDLC: Adaptive and Collaborative
Iterative/Incremental approach
Build one livable room first, move in, then add rooms one at a time based on what you learned
Lesson 13Iterative and Incremental Models
Its own network namespace
a private networking environment with its own network interfaces, routing tables, and IP addresses
Lesson 1428Container Networking Basics
IX (Intent Exclusive)
Indicates exclusive locks exist at lower levels
Lesson 920Intent Locks and Lock Hierarchies

J

Jaeger
and **Zipkin** are two popular open-source tracing backends.
Lesson 1153Tracing Infrastructure and Tools
JavaScript Context
When placing data inside JavaScript strings, use JavaScript escaping to neutralize special characters like quotes and backslashes.
Lesson 1064Preventing XSS Through Output Encoding
Jitter
introduces randomness to retry delays.
Lesson 1095The Retry Pattern
Job
creates one or more Pods to run a task to completion, then terminates.
Lesson 1462Jobs and CronJobs for Batch Work
Join Fetching
loads everything in a single query using SQL JOINs.
Lesson 945Eager Loading and Fetch Strategies
Join order
Which table should be processed first in multi-table queries
Lesson 885Statistics and Query Planning
JSON encoding
(much lighter than XML) over **HTTP or other transports**.
Lesson 799RPC Protocols: XML-RPC, JSON-RPC, and gRPC
JSON over HTTP/1.1
human-readable text transferred one request at a time.
Lesson 803RPC Performance: Binary Protocols and HTTP/2
JSON Web Token (JWT)
flips this model: instead of storing session data server-side, all the authentication information travels *with* the request itself, cryptographically signed so it can't be tampered with.
Lesson 1011Stateless Authentication with JWTs
Judgment
– Maintain integrity and independence in professional judgment
Lesson 1894The IEEE-CS/ACM Software Engineering Code of Ethics
Just right
`calculate(itemPrice: 100, discountPercent: 10)` — Clear, focused, sufficient
Lesson 438Test Data: Realistic vs. MinimalLesson 1665Balancing Granularity

K

Kanban board
is a visual tool that makes work visible and tracks progress through defined stages.
Lesson 1593The Kanban Board
Keep a Changelog
format solves this by grouping changes into predictable categories.
Lesson 1554Writing Effective Changelogs
Keep artifacts separate
from source code (add output directories to `.
Lesson 665Build Artifacts and Output
Keep Blue as rollback
in case you need to revert
Lesson 709Blue-Green Deployment
Keep functions small
Fewer dependencies = faster initialization
Lesson 1521Cold Starts and Warm Instances
Keep functions warm
Schedule periodic "ping" invocations (wasteful but sometimes necessary for latency-critical paths)
Lesson 1521Cold Starts and Warm Instances
Keep it current
As your system evolves, old problems disappear and new ones emerge.
Lesson 1688FAQ and Troubleshooting Guides
Keep it focused
Ask only what you need.
Lesson 139Questionnaires and Surveys
Keep it timeboxed
Respect the 15-minute limit ruthlessly.
Lesson 1604Making Standups Work
Keep one high-level test
as a "smoke test" to ensure integration still works
Lesson 414Moving Tests Down the Pyramid
Keep parameter counts low
(ideally 0-3 parameters).
Lesson 388Managing Function Parameters
Keep parameters independent
Changing the sort order shouldn't require different pagination parameters.
Lesson 789Combining Pagination, Filtering, and Sorting
Keep related operations together
All export logic lives in `ExportVisitor`, all size calculation in `SizeVisitor`
Lesson 318Visitor Pattern: Operations on Object Structures
Keep selectors simple
– shorter selectors are easier to maintain
Lesson 563Locator Strategies and Best Practices
Keep them accessible
Responders need them under pressure
Lesson 1685Runbooks and Operational Documentation
Keep-Alive
(also called persistent connections) is the HTTP-level mechanism that signals "don't close this connection yet.
Lesson 1395Connection Pooling and Keep-Alive
Keeping logic in services
preserves independence but may lead to duplication of common patterns.
Lesson 1328Gateway Responsibilities and Trade-offs
Keeping skills current
Technology evolves rapidly.
Lesson 1924Maintaining Competence and Continuous Learning
Key
The combination of entity type and primary key (e.
Lesson 939Identity Map Pattern
Key Architectural Decisions
Record the "why" behind critical choices using Architecture Decision Records (ADRs).
Lesson 1682Architecture Documentation
Key benefits
(speed, cost, reliability)
Lesson 1634Presenting Technical Decisions
Key drawbacks
(complexity, learning curve, vendor lock-in)
Lesson 1634Presenting Technical Decisions
Key length
Some caches (like Redis) handle long keys fine, but network transfer costs matter.
Lesson 961Cache Keys and Lookup Mechanisms
Keyboard Navigation
Simulate pressing keys like Tab, Enter, Escape, or arrow keys.
Lesson 567Testing User InteractionsLesson 1929Designing for Diverse Abilities
Keyset pagination
uses the last seen value as a filter instead of counting rows:
Lesson 886Pagination and Large Result Sets
Keystroke logging
Recording typing patterns, deleted text, or hesitation
Lesson 1909Surveillance and Tracking Ethics
KISS
(Keep It Simple, Stupid) and helps prevent violating **DRY** (Don't Repeat Yourself) through premature abstractions.
Lesson 170You Aren't Gonna Need It (YAGNI)
Know your limits
and seek help or defer to specialists when needed
Lesson 1897Product Quality and Professional Competence
Know your non-negotiables
Some things (user safety, legal compliance, data protection) aren't trade-offs.
Lesson 1922Balancing Business Pressure with Professional Standards
Knowledge Barriers
New team members struggle to understand the system because everything is interconnected.
Lesson 179The Cost of Tight Coupling
Knowledge boundaries
You've exhausted your troubleshooting steps and need a database specialist
Lesson 1169Escalation Paths
Knowledge distribution
Multiple people understand each area
Lesson 1833Collective Code Ownership
Knowledge Sharing Rituals
Regular tech talks, lunch-and-learns, or "demo days" where engineers showcase what they've learned normalize teaching as part of the job.
Lesson 1840Creating a Culture of Continuous Learning
Knowledge sharing sessions delivered
(tech talks, workshops, documentation)
Lesson 1847Measuring and Rewarding Learning
Known acceptable failure rates
(e.
Lesson 1837Zero-Defect Mindset
Known commands
Copy-pasteable queries, scripts, or API calls
Lesson 1168Runbooks and Playbooks
Known knowns
Features you understand well (low uncertainty)
Lesson 1615Dealing with Estimation Uncertainty
Known secret formats
Checking against databases of how different services format their keys
Lesson 743Secret Scanning and Prevention
Known short-term needs
A feature needed for one event, then retired
Lesson 42Balancing Debt and Delivery
Known unknowns
Questions you know you need to answer (medium uncertainty)
Lesson 1615Dealing with Estimation Uncertainty
Known variations
Multiple report formats, different authentication methods, various algorithm implementations— when you already know multiple versions exist or will exist.
Lesson 206When to Apply OCP
Kubelet
– An agent that ensures containers are running as specified.
Lesson 1443Kubernetes Architecture Overview
Kubernetes Service Discovery
is more sophisticated.
Lesson 1329DNS-Based and Kubernetes Service Discovery

L

L1 (Level 1)
In-process cache living in your application's memory (lightning fast, limited capacity, process- local)
Lesson 972Multi-Level Caching
L2 (Level 2)
Distributed cache like Redis or Memcached (slower than L1 but still fast, shared across instances, much larger capacity)
Lesson 972Multi-Level Caching
Labeling bias
Human annotators bring their own biases when labeling data.
Lesson 1914Bias in Training Data
Lack of modularity
makes it impossible to deploy features independently
Lesson 1225The Cost of Architectural Mistakes
Lack of Test Coverage
The defining trait.
Lesson 1749Defining Legacy Code
Lagging
Overall system latency after migration
Lesson 1810Measuring Progress Toward Vision
Language familiarity
Use what your team knows (Python → Locust, JavaScript → k6)
Lesson 1213Load Testing Tools and Frameworks
Large Class
(sometimes called a **God Object**) is a class that has grown so big it's doing far too many things.
Lesson 337Bloaters: Large Class and God ObjectLesson 346Extract Method
Large dataset transformations
Lesson 964Determining What to Cache
Large reviews
If a PR is unusually big, communicate expected delay upfront.
Lesson 1622Review Timing and Response Expectations
Larger systems
have thousands or millions of lines of code that interact in complex ways
Lesson 2Programming vs Engineering: Scale and Complexity
Largest Contentful Paint (LCP)
, and custom satisfaction thresholds tailored to specific user workflows.
Lesson 1210Apdex and User-Centric Metrics
Latency (L)
and **Consistency (C)**
Lesson 1411The PACELC Extension to CAP
Latency is zero
Every network call takes measurable time; remote isn't the same as local.
Lesson 1111Introduction to the Fallacies of Distributed Computing
Latency percentiles
(p50, p95, p99) over averages—outliers matter
Lesson 1189Performance Measurement Basics
Latency SLI
"95% of API requests completed in under 200ms"
Lesson 1171Understanding Service Level Indicators (SLIs)
Latency-sensitive applications
suffer from cold starts.
Lesson 1527When Serverless is and Isn't Appropriate
Latest Compatible Version
Pick the newest version that satisfies all constraints, if one exists
Lesson 672Version Constraints and Conflicts
Latest tag
Points to the most recent build.
Lesson 1433Image Tagging and Versioning Strategies
Law of Demeter
(principle of least knowledge): an object should only talk to its immediate friends, not friends-of- friends-of-friends.
Lesson 344Couplers: Message Chains and Middle Man
Lawful basis
You need a legitimate reason (consent, contract, legal obligation, etc.
Lesson 1908Privacy Regulations (GDPR, CCPA)
Layer 1
Network firewall blocks unauthorized IP ranges
Lesson 1032Defense in Depth
Layer 2
HTTPS encrypts data in transit
Lesson 1032Defense in Depth
Layer 3
Authentication verifies user identity (username/password + MFA)
Lesson 1032Defense in Depth
Layer 4
Authorization checks permissions using RBAC or ABAC
Lesson 1032Defense in Depth
Layer 4 (Transport Layer)
load balancers make routing decisions based on network information like IP addresses and TCP/UDP ports.
Lesson 1390Layer 4 vs Layer 7 Load Balancing
Layer 5
Input validation prevents injection attacks
Lesson 1032Defense in Depth
Layer 6
Database access controls limit what the application can query
Lesson 1032Defense in Depth
Layer 7
Rate limiting prevents brute-force attacks
Lesson 1032Defense in Depth
Layer 7 (Application Layer)
load balancers peek inside the HTTP request itself.
Lesson 1390Layer 4 vs Layer 7 Load Balancing
Layer 8
Audit logging detects suspicious patterns
Lesson 1032Defense in Depth
Layer 9
Automated monitoring alerts on anomalies
Lesson 1032Defense in Depth
Layered facades
Create multiple facades at different abstraction levels
Lesson 273Implementing Facades: Design Decisions
Layered links
Keep the main flow simple, but hyperlink to separate pages for "Performance Considerations," "Security Implications," or "Historical Context.
Lesson 1695Progressive Disclosure
Layered System Architecture
means you can add intermediate servers between the client and the origin server without either side knowing or caring.
Lesson 763Layered System Architecture
Layers of abstraction
show architectural migrations.
Lesson 1780Reading Legacy Code as Historical Documentation
Lazy initialization
Delay creating expensive objects until actually needed
Lesson 277Proxy Pattern: Controlling Access to ObjectsLesson 547Fixture Performance and Test Speed
Lazy vs. Eager
Object references feel instant, but if backed by a database, following `order.
Lesson 931Association Mismatch: References vs. Foreign Keys
LDAP injection
and **XML injection** exploit user input that gets directly embedded into queries or documents without proper validation.
Lesson 1058LDAP and XML Injection
LDAP/XML/NoSQL Injection
Protocol-specific command manipulation
Lesson 1053What Are Injection Attacks
leader
handles all write operations, then propagates those changes to one or more **follower** nodes.
Lesson 1402Leader-Follower ReplicationLesson 1419The Raft Consensus Algorithm
Leader election
designates one instance to perform a critical task, with automatic failover if it dies.
Lesson 921Application-Level Locking PatternsLesson 1414The Distributed Consensus Problem
Leader propagates changes
The leader forwards changes to followers through a replication log
Lesson 1402Leader-Follower Replication
Leader-follower replication
(also called master-slave or primary-replica) is a pattern where one node—the **leader**— handles all write operations, then propagates those changes to one or more **follower** nodes.
Lesson 1402Leader-Follower ReplicationLesson 1403Multi-Leader and Leaderless Replication
Leaderless replication
goes further: *any* node can accept writes directly.
Lesson 1403Multi-Leader and Leaderless Replication
Leading
Percentage of services using the new API standard
Lesson 1810Measuring Progress Toward Vision
Leaf
The basic building block with no children; represents individual objects at the end of branches
Lesson 265Implementing Composite: Components, Leaves, and Composites
Leaked in logs
if an error message prints connection strings
Lesson 740What Are Secrets and Why They Matter
Learn from history
See how code evolved over time
Lesson 118Git Blame: Tracing Code Origins
Learned experience
Production incidents reveal that "99% availability" was optimistic—you now need 99.
Lesson 1237Evolving Drivers Over Time
Learning aid
Seeing violations immediately helps you internalize coding standards
Lesson 395Editor Integration and IDE Support
Learning from failures
If a single change doesn't help, you've learned something valuable about what *doesn't* cause the bug—narrowing your search space.
Lesson 1716Making One Change at a Time
Learning From Work
Post-mortems teach system thinking.
Lesson 1840Creating a Culture of Continuous Learning
Learning style
Some engineers learn by doing (give them a task and coach through it), others by observing (pair programming works best), and still others by reading and discussing (architecture documents and whiteboard sessions).
Lesson 1798Tailoring Mentorship Styles
Learning Through Building
Here's the paradox: you can't fully understand the problem until you start solving it.
Lesson 160Why Requirements Change
Learning-Focused Feedback
Frame comments as learning opportunities.
Lesson 1617Creating a Constructive Review Environment
Lease-based locks
use time-limited ownership with automatic expiration—preventing deadlocks if a service crashes while holding a lock.
Lesson 921Application-Level Locking Patterns
Leaves
, and managers (who have direct reports) are **Composites**.
Lesson 265Implementing Composite: Components, Leaves, and Composites
Legacy code compatibility
requires temporary workarounds during gradual migration
Lesson 397Balancing Automation with Flexibility
Legacy system integration
Gradually introduce GraphQL alongside existing REST endpoints during migration
Lesson 827Mixing API Styles in Practice
Legal and regulatory requirements
Laws you *must* follow (GDPR for user data, HIPAA for healthcare)
Lesson 140Domain Research and Competitive Analysis
Legal or regulatory issues
expose the organization to liability
Lesson 1920Speaking Up: When and How to Raise Concerns
Legal or regulatory requirements
"Retention period mandated by GDPR Article 17"
Lesson 375Self-Documenting Code vs Comments
Length
Aim for functions that are **5-20 lines** when possible.
Lesson 372Function Structure and Length
Length beats complexity
A 16-character passphrase like `correct-horse-battery-staple` is exponentially harder to crack than `P@ssw0rd!
Lesson 993Password Policies and Requirements
Length over complexity
A 16-character passphrase like `correct-horse-battery-staple` is exponentially stronger than `P@ssw0rd!
Lesson 1004Password Strength Requirements and Policies
Less code
You don't write custom shrinking functions—the generation strategy *is* the shrinking strategy
Lesson 619Integrated Shrinking
Lesser GPL (LGPL)
introduces "weak copyleft"—a middle ground between permissive licenses and the GPL.
Lesson 1867The LGPL and Weak Copyleft
Let details emerge
through testing: The exact shape of classes, method signatures, and internal structure should evolve as tests expose what works and what doesn't.
Lesson 512Emergent Design vs. Upfront Design
Let it fail
to see what the actual output is
Lesson 1758What Are Characterization Tests
Level 0
Single URI, single HTTP verb (basically RPC over HTTP)
Lesson 797HATEOAS Trade-offs and Maturity Models
Level 4
(under Cart API): Create Cart Endpoint, Add Item Endpoint, Update Quantity Endpoint.
Lesson 1658Work Breakdown Structures (WBS)
Level A
The minimum level of accessibility.
Lesson 1928WCAG Guidelines and Compliance Standards
Level AA
The recommended target for most organizations.
Lesson 1928WCAG Guidelines and Compliance Standards
Level AAA
The highest level, though not always achievable for all content.
Lesson 1928WCAG Guidelines and Compliance Standards
LGPL
→ GPL (weaker copyleft can be upgraded to stronger)
Lesson 1873GPL License Compatibility Rules
Libraries you publish
Use flexible ranges so downstream users aren't forced into version conflicts
Lesson 673Pinning vs Flexible Versioning
LICENSE
The legal foundation you've chosen
Lesson 1882Starting an Open Source Project
Lighthouse
excel at finding technical violations (missing alt text, color contrast failures, improper ARIA attributes), but they can't evaluate whether your interface makes *sense* to someone using a screen reader or navigating by keyboard alone.
Lesson 1930Automated and Manual Accessibility Testing
Lightweight
Containers share the host OS kernel, using far fewer resources than full virtual machines
Lesson 1423What Are Containers and Why Use Them
Lightweight processes
suit agile teams and smaller projects.
Lesson 162Change Request Processes
Lightweight tags
are simple pointers to a commit—just a name.
Lesson 1556Version Tagging in Git
Likelihood
How easy/probable is this attack?
Lesson 1082Attack Trees and Risk Prioritization
Limit charts per dashboard
5–10 is often enough.
Lesson 1144Dashboard Design Principles
Limit eager loading scope
Only eagerly load what you truly need.
Lesson 947Cartesian Product Explosion
Limit exposed endpoints
Don't expose administrative interfaces to the public internet.
Lesson 1038Minimize Attack Surface
Limit Exposed Headers
Don't leak sensitive information through `Access-Control-Expose-Headers`.
Lesson 1068Cross-Origin Resource Sharing (CORS) Security
Limit scope ruthlessly
– Fix *only* the critical issue; refactoring waits
Lesson 1569The Hotfix Process and Risk Management
Limit the output
`git log -5` shows only the last 5 commits
Lesson 117Reading Git Log: Understanding Commit History
Limit token lifetime aggressively
One hour maximum.
Lesson 1005Password Reset Flows and Security Tokens
Limit traversal depth
Design your queries to stop at logical boundaries.
Lesson 949The Object Graph Problem
Limitation
Many languages (like Java) don't support multiple inheritance, so if you need to implement an interface *and* extend a class simultaneously, you may face constraints.
Lesson 257Class vs Object AdaptersLesson 1912Fairness Definitions and Metrics
Limited access control
You can't easily restrict which parts of your application can read which environment variables.
Lesson 742Secrets in Environment Variables
Limited blast radius
If it fails, only the experiment is affected, not customers
Lesson 1841Safe-to-Fail Experiments and Innovation Time
Limited visibility
No single place shows the complete workflow state
Lesson 1375Trade-offs: Coupling and Visibility
Line endings
Windows uses `\r\n` (CRLF), Unix uses `\n` (LF).
Lesson 666Cross-Platform Build Considerations
Line numbers
– Exactly where to look in your files
Lesson 1714Reading Error Messages and Stack Traces
Link seams
Where you can swap implementations at link/load time.
Lesson 1753Finding Seams in Legacy Code
Link to related documentation
Connect to architecture docs and troubleshooting guides
Lesson 1685Runbooks and Operational Documentation
Links to replacements
Always direct readers to current documentation
Lesson 1710Deprecation and Archival Strategies
Linters
Check code style, formatting, and common programming mistakes (like unused variables or inconsistent indentation)
Lesson 98Automated Checks and CI IntegrationLesson 391Linters and Static Analysis Tools
Linting rules
that detect flag references
Lesson 1566Flag Debt and Cleanup Strategies
Linux
Use your package manager (e.
Lesson 44Installing and Configuring Git
List sizes
Fields returning collections multiply cost (e.
Lesson 817Query Complexity Analysis and Limits
List what matters
(speed, health, cost)
Lesson 30Trade-off Analysis and Decision Making
List who's impacted
by your proposed change
Lesson 1812Identifying and Engaging Stakeholders
Live validation
The interface checks inputs against your schemas before sending requests
Lesson 844Interactive API Documentation
Liveness check
Is the service process running?
Lesson 1326Health Checks and Registration
Liveness checks
answer "Is the service running at all?
Lesson 1101The Health Check Pattern
Living documentation
The schema *is* the documentation—always accurate, never stale
Lesson 841Benefits of Schema-First Development
Living documents
(updated based on retrospective findings)
Lesson 1621Review Checklists and Standards
Load balancers
distributing requests across multiple servers
Lesson 763Layered System Architecture
Load Leveling
Queues absorb traffic spikes.
Lesson 1359Message Queues and Point-to-Point Messaging
Load problems
Code works fine in testing but breaks under real traffic
Lesson 719Deployment Risk and the Need for Rollback
Load testing
uses expected, normal traffic patterns.
Lesson 1212Introduction to Load Testing
Load tests
simulate multiple users or high traffic volumes to verify the system behaves correctly under stress.
Lesson 420Performance and Load Tests: Testing Under Stress
Loads
the current state (often by replaying events from the event store)
Lesson 1351Command Side Design
Local emulation
for initial testing (though production behavior differs)
Lesson 1525Serverless Observability and Debugging
Localized
modifications affect fewer components
Lesson 186Why Software Must Be Designed for Change
Location tracking
Continuous GPS monitoring, even when unnecessary for core features
Lesson 1909Surveillance and Tracking Ethics
lock file
is an automatically generated file that records the *exact* version of every dependency (direct and transitive) that was installed at a specific moment.
Lesson 671Lock Files and ReproducibilityLesson 672Version Constraints and ConflictsLesson 688Pinning Dependencies
Lock granularity
refers to the size of the resource being locked—from an entire table down to individual rows or even smaller units.
Lesson 916Row-Level vs Table-Level Locking
Lock ordering
Acquire locks in a consistent order across all transactions.
Lesson 917Deadlock Detection and Prevention
Lock-based
Acquiring locks on all data read and written
Lesson 908Serializable Isolation
Locking/Mutex Pattern
When a cache miss occurs, the first request acquires a lock to rebuild the cache.
Lesson 983Cache Stampede and Thundering Herd
Log aggregation pipeline
that collects, parses, and enriches log data
Lesson 1125Centralized Logging
Log shippers
running on each service/instance (like Fluentd, Filebeat, or native SDKs)
Lesson 1125Centralized Logging
Log state transitions
(started, step-completed, compensating, completed, failed) at the saga coordinator level
Lesson 1372Monitoring and Observability for Sagas
Logging agents
(collecting logs from each node)
Lesson 1461DaemonSets and Node-Level Workloads
Logging and error reports
Applications often dump environment variables into logs, crash reports, or debugging output— accidentally exposing secrets.
Lesson 742Secrets in Environment Variables
Logging Systems
A single logger ensures all log entries are written consistently to the same destination without file conflicts or resource contention.
Lesson 232When Singleton is Appropriate
Logging with correlation IDs
and **observability tools** let you reconstruct events after they happen.
Lesson 1735Debugger Limitations and When to Use Alternative Tools
Logging/monitoring
Track how and when an object is accessed
Lesson 277Proxy Pattern: Controlling Access to Objects
Logical operators chaining
Long chains of `&&` and `||` that require careful mental parsing
Lesson 384Cognitive Complexity
Login
User submits credentials (username + password hash comparison on server)
Lesson 1007Session-Based Authentication Fundamentals
Login Attempt
User submits credentials
Lesson 992Username and Password Authentication
Logout/Expiration
Session is destroyed server-side, and the cookie is cleared
Lesson 1007Session-Based Authentication Fundamentals
Logs to files
Not every organization has centralized logging infrastructure initially, so streaming logs (Factor XI) gets deferred
Lesson 754Applying Twelve-Factor Principles in Practice
Long Method
is a code smell where a single method or function becomes bloated with too many lines of code and too many responsibilities.
Lesson 336Bloaters: Long MethodLesson 346Extract Method
Long Parameter List
occurs when a method accepts many parameters (often more than 3-4), making it difficult to understand, call correctly, and maintain.
Lesson 338Bloaters: Long Parameter List
Long-lived APIs
Evolvability over years matters more than initial simplicity
Lesson 797HATEOAS Trade-offs and Maturity Models
Long-running processes
hit execution time limits (typically 15 minutes max).
Lesson 1527When Serverless is and Isn't Appropriate
Long-running workflows
Message queues
Lesson 1322Communication Protocol Trade-offs
Long-term strategic importance
(core business logic, competitive differentiators)
Lesson 1541Evaluating Lock-in vs Time-to-Market Trade-offs
Long-term value
Coca-Cola's formula has been secret for over a century—longer than any patent
Lesson 1890Trade Secrets vs Patents: Choosing a Strategy
Longer cold starts
– more bytes to download and unpack
Lesson 1524Managing Dependencies and Package Size
Longer deployment times
Building entire immutable artifacts takes longer than pushing a configuration file change.
Lesson 1478Benefits and Challenges of Immutability
Longer timescales
mean you'll forget why you made certain decisions
Lesson 2Programming vs Engineering: Scale and Complexity
Look for common issues
Unused imports, console logs, formatting inconsistencies, incomplete error handling
Lesson 101Self-Reviewing Before Submission
Look for long spans
Sort spans by duration.
Lesson 1151Analyzing Traces for Performance Issues
Look for natural seams
you discovered earlier in your legacy exploration:
Lesson 1775Identifying Strangulation Boundaries
Look for patterns
Consistently untested code paths might indicate design problems or insufficient branch coverage strategies
Lesson 593Coverage as a Diagnostic Tool, Not a Goal
Loop boundaries
to check iteration counts and conditions
Lesson 1715Adding Strategic Print Statements and Logging
Loops create infinite paths
(loop 0 times, 1 time, 2 times.
Lesson 589Path Coverage
Loss of Reproducibility
You can't recreate your production environment for testing or disaster recovery.
Lesson 1474Configuration Drift and Its Problems
Lost updates
One operation overwrites another's work
Lesson 896What Are Transactions and Why They Matter
Low confidence
Teams ignore test results, defeating their purpose
Lesson 410The Ice Cream Cone Anti-pattern
Low coupling
means your modules depend on each other as little as possible.
Lesson 182The Relationship Between Coupling and Cohesion
Low latency approach
Each customer gets their meal prepared immediately, start to finish.
Lesson 1204Latency vs Throughput
Low maintenance burden
automation handles updates
Lesson 856Auto-Generated vs Hand-Written SDKs
Low Power, High Interest
Keep informed (e.
Lesson 1673Identifying and Mapping Stakeholders
Low-impact areas
Code that rarely changes or isn't performance-critical
Lesson 42Balancing Debt and Delivery
Low-impact changes
If modifications are rare, localized, and easy to test, the cost of abstraction may exceed its benefit.
Lesson 206When to Apply OCP
Low-impact features
where occasional bugs cause minor inconvenience
Lesson 1837Zero-Defect Mindset
Low-level components
handle implementation details—databases, UI frameworks, file systems—the "how.
Lesson 189Dependency Direction and Stability
Low-maintenance operations
matter when team size is limited.
Lesson 1527When Serverless is and Isn't Appropriate
Lower cognitive load
You're only thinking about one tiny problem at a time
Lesson 493Taking Small Steps in TDD
Lower compliance burden
Fewer regulations apply to data you don't collect
Lesson 1901Data Minimization Principle
Lower cost
Fixing a bug caught in 5 minutes costs far less than one found in production
Lesson 629The Feedback Loop: Speed and Confidence
Lower coupling
Services only know about events they care about, not other services
Lesson 1375Trade-offs: Coupling and Visibility
Lower integration risk
Merging 10 small commits throughout the week is far safer than merging one giant commit on Friday.
Lesson 645The Practice of Small Commits
Lower memory usage
Smaller indexes are easier to cache in memory
Lesson 876Partial and Filtered Indexes
Lower origin load
Static assets account for most web traffic; offloading them frees your servers to handle dynamic requests
Lesson 1386Content Delivery Networks and Edge Caching
Lower thresholds
Set your minimum log level to `DEBUG` or even `TRACE` to see everything
Lesson 1128Logging in Local Development
Lower upstream WIP limits
Prevent new work from entering until the bottleneck clears—starving upstream stages is better than clogging the whole system.
Lesson 1597Identifying and Resolving Bottlenecks
Lower-priority tests
include:
Lesson 428Test ROI and Prioritization
Lower-value targets
include trivial getters/setters, simple formatting functions, or UI tweaks that change frequently.
Lesson 406Balancing Testing Investment
Lunch-and-Learns
combine learning with social time—informal sessions during lunch where someone demonstrates a tool, discusses a recent project, or walks through a problem they solved.
Lesson 1843Knowledge Sharing Mechanisms

M

Mac
Install via Homebrew (`brew install git`) or download from git-scm.
Lesson 44Installing and Configuring Git
Machine images
(AMIs, VM images): Complete operating system snapshots with your application pre-installed
Lesson 1475Building Immutable Artifacts
Macro recording
Combine multiple commands into one composite command
Lesson 290Command Pattern: Encapsulating Requests
Maintain backward compatibility
Never remove required fields or change their meaning
Lesson 1343Event Schemas and Contracts
Maintain consistency
Use triggers, application logic, or background jobs to keep denormalized data in sync
Lesson 865Strategic DenormalizationLesson 1092Error Handling at System Boundaries
Maintain element stability
Your core object structure remains unchanged
Lesson 318Visitor Pattern: Operations on Object Structures
Maintain quality
Ensure the team's output meets technical and business requirements
Lesson 1786What is a Tech Lead?
Maintain records
Document which dependencies you use, their versions, and their licenses.
Lesson 683Dependency License Compliance
Maintain technical depth strategically
Stay current in your system's critical areas.
Lesson 1789Balancing Coding and Leadership
Maintainable
Changes to one implementation don't ripple through your codebase
Lesson 172Program to an Interface, Not an ImplementationLesson 1273The Dependency Rule
Maintenance → Requirements
User complaints show that original requirements missed important needs
Lesson 17Feedback Loops Across the SDLC
Maintenance Budget
Every test you write needs future maintenance.
Lesson 427Finding the Testing Sweet Spot
Maintenance burden
These tests still need updating when code changes, but provide no value
Lesson 599The Danger of Coverage TheaterLesson 691Benefits and Trade-offsLesson 1825Simplicity Over Complexity
Maintenance Over Initial Development
most of a software system's life is spent being maintained, and technical debt makes maintenance increasingly painful and expensive.
Lesson 36What is Technical Debt
Maintenance phase
Security patches and critical bug fixes only
Lesson 1571Long-Term Support (LTS) Fundamentals
Major version
(the first number): Incremented when you make **breaking changes** that require consumers to modify their code.
Lesson 846Semantic Versioning for APIs
Make
is the grandfather of build tools, dating back to Unix systems.
Lesson 660Common Build Tools Overview
Make a decision
and explain your reasoning
Lesson 30Trade-off Analysis and Decision Making
Make code changes
Update your application code
Lesson 579Visual Regression Testing Fundamentals
Make common tasks easy
Optimize for the 80% use case
Lesson 855SDK Design Principles
Make focused changes
that address one issue
Lesson 1880Contributing to Open Source Projects
Make informed decisions
about where new features belong
Lesson 1220Architecture as Structure
Make invisible concerns visible
Ask probing questions: "What keeps you up at night about this approach?
Lesson 1813Facilitating Technical Discussions
Make it searchable
Use clear headings, keywords, and consider adding a search function or table of contents for longer guides.
Lesson 1688FAQ and Troubleshooting Guides
Make tests deterministic
Get the same result every time, not random data from real services
Lesson 466Stubs: Providing Canned Responses
Make the changes
promptly, then comment that you've addressed the feedback.
Lesson 96Responding to Review Feedback
Make tokens unpredictable
A token based on `userId + timestamp` can be guessed.
Lesson 1005Password Reset Flows and Security Tokens
Make trade-offs transparent
– Clearly explain *why* you chose Feature A over Feature B (e.
Lesson 156Stakeholder-Driven Prioritization
Make trade-offs visible
Show what you gain and lose with each choice (remember: no perfect solutions!
Lesson 26Conflicting Stakeholder Interests
Makes relationships explicit
bundled parameters clearly belong together
Lesson 353Introduce Parameter Object
Making small corrections
that logically belong with the previous commit
Lesson 113Amending and Fixing Work-in-Progress Commits
Making strategic introductions
Connecting them with influential people who can accelerate their growth.
Lesson 1801Sponsorship and Career Development
Making trade-offs
choosing between competing needs when resources are limited
Lesson 21The Product Owner and Business Stakeholders
man-in-the-middle attacks
where attackers eavesdrop on unencrypted network traffic.
Lesson 1010Cookie Security: HttpOnly, Secure, and SameSiteLesson 1115Fallacy 4: The Network is Secure
Manage risk
by catching problems early (during planning or design, not after launch)
Lesson 9What is the Software Development Lifecycle (SDLC)?
Managed database
AWS RDS handles backups, patches, replication, and scaling
Lesson 1511What Are Managed Services
Managed services
are like the restaurant: the cloud provider handles the infrastructure, maintenance, patching, scaling, and operations of a service (like a database or message queue), while you simply use it.
Lesson 1511What Are Managed ServicesLesson 1539What is Vendor Lock-in
Management
– Subscribe to and promote an ethical approach to software development and maintenance
Lesson 1894The IEEE-CS/ACM Software Engineering Code of Ethics
Manages container lifecycle
(create, run, pause, unpause, stop, delete)
Lesson 1426The Container Runtime
Managing
all SQL queries and database interactions
Lesson 936Data Mapper Pattern
Managing contract changes
means deciding how to signal and implement changes.
Lesson 552Contract Versioning and Evolution
Manual instrumentation
means you explicitly add code to create spans around important business logic or custom operations.
Lesson 1149Instrumenting Code for Tracing
Manual triggers
Someone clicks a button or runs a command
Lesson 639Build Triggers and Webhooks
Many-to-Many
Objects can hold collections of references (`student.
Lesson 931Association Mismatch: References vs. Foreign Keys
Map compatibility
Cross-reference licenses using compatibility matrices
Lesson 1877Verifying License Compatibility in Practice
Mapping trust boundaries
Where does untrusted input enter your system?
Lesson 1078What is Threat Modeling
Mark
them explicitly with tags like `@Flaky` or move them to a separate test suite
Lesson 577Quarantining and Flaky Test Management
Mark conversations as resolved
(if your platform supports it) after addressing them, keeping the review organized.
Lesson 96Responding to Review Feedback
Mark sensitive values
as secrets (encrypted, hidden from logs)
Lesson 642Environment Variables and Secrets
Mark the bad commit
`git bisect bad` (usually HEAD, where the bug exists)
Lesson 119Finding Bugs with Git Bisect
Market reach
Teams that reflect user diversity build products that serve broader audiences
Lesson 1848The Business and Ethical Case for Diversity
Market Shifts
External forces—economic changes, new regulations, competitor innovations, or sudden events (like a pandemic)—force businesses to adapt.
Lesson 160Why Requirements ChangeLesson 1808Evolving Vision Over Time
Market timing
Can your architecture support the speed-to-market the business requires, or will perfection arrive too late?
Lesson 1805Aligning Vision with Business Goals
Marketing preferences
Until user withdrawal or account deletion
Lesson 1903Data Retention and Deletion
Marketing Teams
need feature highlights, benefits, and timing to create campaigns, blog posts, and social media content that coincide with your release.
Lesson 1546Coordinating with Stakeholders
Masked variables
The platform stores secrets encrypted and injects them as environment variables at runtime, automatically hiding their values in logs (showing `***` instead)
Lesson 747Secrets in CI/CD Pipelines
Massive payload sizes
consume excessive bandwidth and slow down network transfers
Lesson 783Why Pagination Matters
Materialized Views
are precomputed query results stored as physical tables.
Lesson 866Denormalization Patterns
Mathematical operations
Code involving calculations, geometry, or statistics benefits enormously.
Lesson 612When Property-Based Testing Shines
Maven
and **Gradle** dominate the Java world.
Lesson 660Common Build Tools Overview
MC/DC
goes further by requiring that each condition independently affects the decision's outcome.
Lesson 601Condition and Modified Condition Coverage
Measurable impact
Quantify what users experienced.
Lesson 1183Writing Effective Incident Narratives
Measure
The quantifiable success criteria (e.
Lesson 1248Quality Attribute Scenarios
Measure regularly
Track your metrics weekly or bi-weekly
Lesson 1599Continuous Improvement with Kanban
Measure time-to-resolution
How long does it take to resolve issues after an alert?
Lesson 1162Alert Evaluation: Regular Review and Refinement
Mediator
acts like a **traffic controller** at a busy intersection.
Lesson 299Mediator vs Observer: Choosing the Right Pattern
Mediator pattern
introduces a central coordinator object.
Lesson 298The Mediator Pattern: Centralizing Communication
Mediators (Message Passing)
A central coordinator receives requests from modules and routes them appropriately.
Lesson 1292Inter-Module Communication Patterns
Meetings and discussions
Aligning on goals, solving problems together, and making decisions as a group
Lesson 3The Human Element: Teams and Communication
Memento
pattern solves this by introducing a "snapshot" object that stores another object's state.
Lesson 301The Memento Pattern: Capturing Object StateLesson 302Implementing Undo with Memento and Command
Memento pattern
captures object state, combining them creates robust undo functionality that's both flexible and safe.
Lesson 302Implementing Undo with Memento and Command
Memory bottlenecks
manifest as excessive garbage collection, swapping, or out-of-memory errors.
Lesson 1380Identifying Scalability Bottlenecks
Memory Corruption
Fuzzing finds buffer overflows, use-after-free bugs, and out-of-bounds access by feeding oversized or specially crafted inputs that cause your program to write or read memory incorrectly.
Lesson 624Detecting Security Vulnerabilities
Memory exhaustion
(heap or connection pools)
Lesson 1217Scalability Testing and Limits
Memory limits
Cap the maximum RAM a container can use (e.
Lesson 1438Container Resource Limits and Health Checks
Memory pressure
spikes on both server (generating the response) and client (parsing it)
Lesson 783Why Pagination Matters
Memory profilers
and **heap analyzers** track allocation patterns and object lifetimes.
Lesson 1735Debugger Limitations and When to Use Alternative Tools
Mentor and multiply
by raising the technical bar across many engineers
Lesson 1818What is a Staff Engineer?
Mentorship at Scale
Junior developers learn from seeing senior patterns.
Lesson 1616The Purpose and Value of Code Review
Mentorship obligations
Experienced engineers have a duty to help others grow, sharing knowledge rather than hoarding it
Lesson 1898Collegiality and Fair Treatment
Mentorship relationships
and their outcomes
Lesson 1847Measuring and Rewarding Learning
Merge
when contexts have high coupling, shared team ownership, and aligned evolution patterns.
Lesson 1287Evolving Bounded Contexts
Merge conflicts
occur when different paths modified the same content differently
Lesson 65Understanding Git History as a DAGLesson 337Bloaters: Large Class and God Object
Merge or Postpone
Safe updates merge automatically or manually; problematic ones get investigated
Lesson 685Automating Dependency Updates
Merge to main
Once approved, merge the branch into main
Lesson 85GitHub Flow: Simplified Branch-and-Merge
Merging
preserves the complete history of both branches.
Lesson 62Merge vs Rebase
Message formats
If modules communicate via events or messages, are they using the same structure and field names?
Lesson 525Testing Cross-Module Communication
Message headers
in asynchronous systems
Lesson 1530Tenant Identification and Context
Messaging/Events
(queues, Kafka) decouple services temporally and enable asynchronous workflows.
Lesson 1322Communication Protocol Trade-offs
Metadata Manipulation
Changing `userId=42` in a POST request body to access another user's account.
Lesson 1042A01: Broken Access Control
Metamorphic properties
relate different inputs to each other.
Lesson 609Common Property Patterns
Method Injection
Dependencies passed to individual methods
Lesson 225DIP and Dependency Injection
Methods and Functions
For each callable entity, include:
Lesson 1680API Reference Documentation
Microservices architectures
where multiple services need to verify identity without constant database lookups
Lesson 1016Sessions vs Tokens: Choosing the Right Approach
Microservices over Monoliths
Applications are decomposed into small, independently deployable services rather than single large codebases.
Lesson 1502What is Cloud-Native Architecture
Microservices with Multiple Consumers
When one service (provider) is consumed by several different services, contract testing prevents breaking changes from impacting any consumer.
Lesson 553When to Use Contract Tests
Middle (Important)
Common use cases, parameters, examples
Lesson 1690The Inverted Pyramid Structure
Middle: Integration Tests
Fewer tests that check how multiple components work together (database connections, API calls, module interactions).
Lesson 407The Testing Pyramid Concept
Middleware/Interceptors
In web applications, handle concerns like authentication and logging in a pipeline before requests reach specific layers.
Lesson 1260Cross-Cutting Concerns in Layers
Migration
Gradually replacing an old system with a new one
Lesson 1270Multiple Adapters for One Port
Migration Guide
Explain *exactly* what changed and how to upgrade.
Lesson 849Deprecation Policies and Timelines
Migration or rollout plan
How you'll safely implement the change
Lesson 1686Design Documents and RFCs
Migration paths
Tell users exactly how to upgrade.
Lesson 676Deprecation and Version Lifecycle
Migration script quality
Rollback scripts are rarely tested as thoroughly as forward migrations.
Lesson 889Forward-Only Migration Philosophy
Migrations
– Scripts that define your database schema (tables, columns, constraints).
Lesson 543Database Fixtures and Test Data
Mikado Method
gives you a disciplined way to handle this: instead of fixing everything at once (and getting lost), you map out *what needs to change first*, revert your breaking change, then tackle prerequisites one by one until the path is clear.
Lesson 1755The Mikado Method
Milestones
are significant points in your project timeline that mark the completion of major phases or achievements.
Lesson 1659Identifying Milestones and Deliverables
Minimal abstractions
no higher-level patterns or helper functions
Lesson 856Auto-Generated vs Hand-Written SDKs
Minimal change
Fix *only* the critical issue—no scope creep
Lesson 1568What are Hotfixes and When to Use Them
Minimal cross-team coordination
Teams communicate through well-defined service contracts, not constant meetings
Lesson 1333Team Size and Conway's Law
Minimal data
strips everything down to what's actually needed for the specific test—perhaps just an ID or a single required field.
Lesson 438Test Data: Realistic vs. Minimal
Minimal divergence
Development environments should mirror production
Lesson 748Introduction to the Twelve-Factor App Methodology
Minimal documentation upfront
Deploy first, complete paperwork after
Lesson 1549Emergency Release Procedures
Minimal input
The most basic valid input (empty collection, zero, single item)
Lesson 497Starting with the Simplest Test
Minimal manual steps
in the deployment pipeline
Lesson 1549Emergency Release Procedures
Minimal, targeted changes
feature flags to disable problematic paths, not exploratory debugging
Lesson 1736Production vs Development Debugging Constraints
Minimize dependencies
every package is risk.
Lesson 1885Open Source Security and Supply Chain Risks
Minimize test scope
Use narrow integration tests that exercise only the boundaries you need to verify, not entire workflows.
Lesson 538Performance Considerations with Real Dependencies
Minimize the input
to the smallest case that still triggers the problem
Lesson 626Triaging and Reproducing Fuzzer Findings
Minimum 8-12 characters
, but encourage longer passphrases without arbitrary maximum limits.
Lesson 1004Password Strength Requirements and Policies
Minor version
(the middle number): Incremented when you add **new features** in a backward-compatible manner.
Lesson 846Semantic Versioning for APIs
Misleading names
The name suggests one thing but does another
Lesson 348Rename Method and Rename Variable
Missed branches
Look for conditional statements (`if`, `switch`, ternary operators) marked yellow.
Lesson 594Reading Coverage Reports
Missed deadlines
(more work takes more time)
Lesson 158Scope Creep and Change Control
Missed deadlines compound
when teams spend their "saved" time fighting fires instead of building features.
Lesson 426The Cost of Not Testing
Missing abstraction
The parameters often represent data that should logically be grouped
Lesson 338Bloaters: Long Parameter List
Missing Encryption in Transit
Sending data over HTTP instead of HTTPS means attackers can intercept it (man-in-the-middle attacks).
Lesson 1043A02: Cryptographic Failures
Missing Function-Level Checks
The UI hides admin buttons from regular users, but the API endpoints behind those buttons accept requests from anyone.
Lesson 1042A01: Broken Access Control
Missing indexes
Sequential scans on large tables in WHERE or JOIN clauses
Lesson 878Using Query Execution Plans to Validate Indexes
Missing or broken MFA
Not requiring multi-factor authentication for sensitive accounts, or implementing it with bypassable logic flaws.
Lesson 1048A07: Identification and Authentication Failures
Missing rate limiting
Your password reset feature works perfectly, but there's no limit on attempts.
Lesson 1045A04: Insecure DesignLesson 1048A07: Identification and Authentication Failures
Mistake ownership
Openly discussing failures and lessons learned
Lesson 1828Transparency and Open Communication
Mistakes have smaller impact
A developer with read-only database access can't accidentally `DROP TABLE` in production
Lesson 1033Principle of Least Privilege
Mistakes to avoid
Where others failed or received negative feedback
Lesson 140Domain Research and Competitive Analysis
Mitigation
Register exact redirect URIs with your authorization server—no wildcards.
Lesson 1024Common OAuth2/OIDC Vulnerabilities and MitigationsLesson 1165Incident Response Workflow
Mix question types
Use multiple-choice for easy analysis ("How often do you use feature X?
Lesson 139Questionnaires and Surveys
Mixed concerns
A service handling both payment processing and inventory management violates Single Responsibility.
Lesson 1312Getting Service Granularity Right
Mixed content
occurs when an HTTPS page loads resources (images, scripts, stylesheets) over insecure HTTP.
Lesson 1077Certificate Management and Mixed Content
Mobile applications and SPAs
where stateless authentication simplifies scaling
Lesson 1016Sessions vs Tokens: Choosing the Right Approach
Mock servers
can simulate your API before you've finished building it
Lesson 837Introduction to OpenAPI Specification
Mock the clock
Use deterministic time sources or freeze time in tests
Lesson 1722Controlling Environmental Variables
Mockable
Easy to replace with test doubles
Lesson 508Designing Testable Interfaces
Mocked dependencies
use test doubles (stubs, fakes, or mocks) to simulate external systems.
Lesson 530Real vs Mocked Dependencies in Integration Tests
Mocking frameworks
are specialized libraries that let you create test doubles on-the-fly using a simple API, rather than writing full classes.
Lesson 471Test Double Libraries and Frameworks
Mocking internal collaborators
If you're mocking private methods or internal helper functions, you're testing implementation instead of observable behavior.
Lesson 480Avoiding Over-Mocking
Model cards
describe intended use, training data, performance across groups, and known limitations
Lesson 1917Explainability and Accountability
Model interpretability techniques
like feature importance analysis, decision trees, or SHAP values reveal which inputs drive predictions.
Lesson 1917Explainability and Accountability
Moderate approach
Auto-update PATCH and MINOR within your version range (e.
Lesson 677Dependency Updates and Semantic Versioning
Moderately stable data
(user profiles, product details): Medium TTL (minutes to hours)
Lesson 962Time-to-Live and Expiration Policies
Modifiability
focuses on how smoothly you can add features, adapt to new requirements, or respond to changing business needs.
Lesson 1242Maintainability and Modifiability
Modification rights
Can they change it?
Lesson 1862Copyright, Licensing, and Distribution
Modified Condition/Decision Coverage (MC/DC)
come in.
Lesson 601Condition and Modified Condition Coverage
Modified MPL files
→ must remain MPL and open source
Lesson 1868The Mozilla Public License
Modified objects
to `UPDATE`
Lesson 938Unit of Work Pattern
Modularity
Are components loosely coupled, so changes to one don't ripple everywhere?
Lesson 1242Maintainability and ModifiabilityLesson 1258Dependency Direction in Layers
Module-to-module communication
Does your user service correctly call your email service?
Lesson 416Integration Tests: Testing Module Interactions
Molecule
is specifically designed for testing Ansible roles.
Lesson 1494Testing Configuration Code
Momentum stalls
Completing nothing for days feels demoralizing
Lesson 1662Task Sizing and the Two-Day Rule
MongoDB
offers ACID transactions within a single document by default, but multi-document transactions (added later) come with performance costs
Lesson 903ACID in Different Database Systems
Monitor
Track expiration dates (certificates typically last 90 days to 1 year)
Lesson 1077Certificate Management and Mixed ContentLesson 1777Migrating Functionality Incrementally
Monitor Access
Track which cache entries are being hit frequently ("hot" data)
Lesson 971Refresh-Ahead Caching
Monitor actively
after deployment
Lesson 1741Emergency Production Fixes
Monitor and measure
Track payload sizes and bandwidth usage to identify optimization opportunities before they become bottlenecks.
Lesson 1114Fallacy 3: Bandwidth is Infinite
Monitor carefully
Track whether the performance gain persists as data grows
Lesson 865Strategic Denormalization
Monitor closely
Watch error rates, latency, business metrics
Lesson 710Canary Releases
Monitor consumer usage
to know when it's safe to remove the old version
Lesson 552Contract Versioning and Evolution
Monitor evaluation patterns
if a flag has returned the same value for all users for weeks, it's likely stale
Lesson 1566Flag Debt and Cleanup Strategies
Monitor for deprecation warnings
before major versions drop
Lesson 682Dealing with Breaking Changes
Monitor Green
ensure everything works
Lesson 709Blue-Green Deployment
Monitor quotas
Track how many API calls your test suite makes
Lesson 533Testing with Real External APIs
Monitor usage
Track which clients still use the deprecated version.
Lesson 853API Sunset and End-of-Life
Monitoring
Track metrics per version (error rates, latency, usage) to understand adoption and quality
Lesson 851Managing Multiple API VersionsLesson 1115Fallacy 4: The Network is Secure
Monitoring agents
(gathering metrics from node resources)
Lesson 1461DaemonSets and Node-Level Workloads
Monitoring intensification
– Watch dashboards actively during and after deployment
Lesson 1569The Hotfix Process and Risk Management
Monitoring queries
that shouldn't block production workloads
Lesson 905Read Uncommitted Isolation
Monitoring Runbooks
explain what metrics to watch, how to interpret dashboards, and when to escalate.
Lesson 1685Runbooks and Operational Documentation
Monitoring standards
Logging formats, metrics naming, tracing instrumentation
Lesson 1251Architecture Governance and Standards
Monolithic Applications
Within a single codebase, compile-time type checking and standard integration tests are usually sufficient.
Lesson 553When to Use Contract Tests
Monotonic reads
ensures that once a user reads a certain state of data, subsequent reads will never show an *older* state—time doesn't move backwards for that user.
Lesson 925Read-Your-Writes and Monotonic Reads
Month 0
Announce deprecation, publish migration guide
Lesson 849Deprecation Policies and Timelines
Month 12
Sunset—old version returns HTTP 410 Gone
Lesson 849Deprecation Policies and Timelines
Month 9
Final warning, escalate to direct outreach
Lesson 849Deprecation Policies and Timelines
More mental load
for developers reading the code
Lesson 383Cyclomatic Complexity
More paths to test
(harder to achieve complete test coverage)
Lesson 383Cyclomatic Complexity
More readable tests
Business language instead of technical selectors
Lesson 562Page Object Pattern
More reusable
(single-purpose components)
Lesson 194What is the Single Responsibility Principle
MoSCoW Method
is a prioritization technique that sorts requirements into four categories based on necessity.
Lesson 153MoSCoW Method
Most brittle
UI changes, network issues, or timing problems can cause failures unrelated to actual bugs.
Lesson 417End-to-End Tests: Testing Complete User Flows
Most Likely
6 days (some edge cases emerge)
Lesson 1652Three-Point Estimation
Most Likely (M)
Realistic middle ground—typical conditions
Lesson 1652Three-Point Estimation
Most OLTP applications
use it as the sweet spot between consistency and concurrency
Lesson 906Read Committed Isolation
Motivation
What problem does this solve?
Lesson 111Commit Message Body: The Why, Not the What
Mount namespace
Isolated filesystem mount points
Lesson 1427Namespaces and Control Groups
Move comments with code
When relocating a method, bring relevant documentation along
Lesson 381Maintaining Comments During Refactoring
Move Field
are refactorings that relocate these misplaced elements to where they naturally fit.
Lesson 349Move Method and Move Field
Move Method
When a method in one class uses data or collaborates heavily with *another* class, move that method to where it belongs.
Lesson 185Refactoring to Increase CohesionLesson 349Move Method and Move Field
Mozilla Public License
(currently version 2.
Lesson 1868The Mozilla Public License
Multi-Channel Communication
Document it in API responses (special headers like `Deprecation: true`), email announcements, changelog updates, and developer portals.
Lesson 849Deprecation Policies and Timelines
Multi-environment complexity
Different topologies in dev, staging, and production
Lesson 1323Service Discovery Fundamentals
Multi-leader replication
allows multiple nodes to accept writes concurrently.
Lesson 1403Multi-Leader and Leaderless Replication
Multi-team lead
You're primarily coordinating technical strategy across teams.
Lesson 1793The Tech Lead's Scope
Multi-tenancy
Different teams can work in the same cluster without stepping on each other's toes.
Lesson 1446Namespaces for Resource Isolation
Multi-tenant isolation
(SaaS platforms) forces database partitioning and namespace separation decisions
Lesson 1230Functional Requirements as Drivers
Multi-Version Concurrency Control (MVCC)
makes snapshot isolation possible by keeping multiple versions of each row.
Lesson 909Snapshot Isolation Explained
Multiple channels
Start with push notifications, escalate to phone calls
Lesson 1161Alert Routing and Escalation Policies
Multiple concerns
It handles database access, business logic, UI formatting, and validation all at once
Lesson 337Bloaters: Large Class and God Object
Multiple databases
requiring eventual consistency strategies
Lesson 1337Trade-offs: Complexity vs. Flexibility
Multiple delivery mechanisms
If your application needs to respond to HTTP requests, CLI commands, scheduled jobs, and message queue events, hexagonal architecture lets you plug in different primary adapters without touching business logic.
Lesson 1271When to Use Hexagonal Architecture
Multiple developers
need to understand and modify the same code
Lesson 2Programming vs Engineering: Scale and Complexity
Multiple issues
`Relates to #78, partially addresses #90`
Lesson 115Referencing Issues and Tickets
Multiple stakeholders
with different priorities and response times
Lesson 1117Fallacy 6-8: Administration, Cost, and Homogeneity
Multiple tables
More joins, potential N+1 queries, but cleaner separation
Lesson 933Data Type and Granularity Mismatches
Multiple teams
coordinating on a platform or major initiative?
Lesson 1793The Tech Lead's Scope
Multiple teams competing
If several teams need to modify the same service frequently, it's too large.
Lesson 1312Getting Service Granularity Right
Multiple unrelated concerns
If your PR fixes a bug *and* adds a feature *and* updates documentation for a different component, it's doing too much.
Lesson 107Knowing When to Split a Pull Request
Multiply through others
Your impact now comes from unblocking three teammates who collectively deliver more than you could alone.
Lesson 1789Balancing Coding and Leadership
Mutable infrastructure
follows the traditional approach: you provision servers once, then continuously update them in- place.
Lesson 1473Immutable vs Mutable Infrastructure
Mutation testing
excels when you need high confidence in critical business logic or security-sensitive code.
Lesson 605Choosing the Right Coverage Metric
Mutation-based
Takes valid inputs and randomly mutates them (flip bits, change bytes, inject special characters)
Lesson 621Introduction to Fuzzing
Mutations
are how you *write* data—creating new records, updating existing ones, or deleting them.
Lesson 808Mutations: Writing Data in GraphQL
Mutations execute sequentially
Unlike queries (which can run in parallel), multiple mutations in one request run one after another, ensuring predictable side effects
Lesson 808Mutations: Writing Data in GraphQL
Mutual TLS encryption
for secure service-to-service communication
Lesson 1318Service Mesh and Communication Infrastructure

N

Name encodings
are systems where you add prefixes or suffixes to variable names to indicate their type, scope, or other metadata.
Lesson 371Avoiding Encodings and Hungarian Notation
Name mutations with verbs
`createUser`, `updatePost`, `deleteComment`
Lesson 808Mutations: Writing Data in GraphQL
Name-based virtual hosting
Route by domain name
Lesson 1463Ingress Controllers and HTTP Routing
Named access
Retrieve prototypes by key (e.
Lesson 249Prototype Registry and Object Pools
Named volumes
Managed by the container runtime, independent of host paths
Lesson 1429Container Storage and Volumes
Namespace prefixes
Avoid collisions across different data types.
Lesson 961Cache Keys and Lookup Mechanisms
Naming conventions
Follow consistent patterns like `ClassNameTest` or `ClassNameSpec` so developers instantly recognize test files and can navigate between production code and tests effortlessly.
Lesson 443Test Class and Suite OrganizationLesson 858API Style Guides
Narrow integration tests
focus on small clusters of collaborating components—typically two or three—while using test doubles for everything else.
Lesson 526Narrow Integration Tests
Narrow scope
(a few lines): Short names like `i`, `x`, or `temp` are fine
Lesson 370Variable Scope and Name Length
Narrow the range
If the midpoint is broken, the bug is in the first half; if it works, the bug is in the second half
Lesson 1724Binary Search for Bug Localization
National Vulnerability Database
or **GitHub Advisory Database**).
Lesson 679Dependency Vulnerability Scanning
Natural load leveling
If tasks spike, they queue up rather than overwhelming your system
Lesson 1385Asynchronous Processing and Message Queues
Navigate complex stakeholder landscapes
to align technical and business goals
Lesson 1818What is a Staff Engineer?
Navigate the call stack
See exactly which functions were active when the crash occurred
Lesson 1734Post-Mortem Debugging with Core Dumps and Crash Reports
Navigation becomes difficult
Tracing a method call through Adapter → Proxy → Facade → actual implementation frustrates debugging.
Lesson 285Combining Multiple Structural Patterns
navigators
, thinking strategically, suggesting approaches, spotting issues, and guiding the work.
Lesson 1628What is Mob Programming?Lesson 1629Running Effective Mob Sessions
NC
(NonCommercial): Commercial use is prohibited
Lesson 1869Creative Commons and Non-Code Licenses
ND
(NoDerivatives): Modified versions cannot be distributed
Lesson 1869Creative Commons and Non-Code Licenses
Near-misses with potential
"We got lucky" situations where disaster was narrowly averted
Lesson 1181When to Conduct a Postmortem
Nearest Wins
Prefer the version specified closest to your project (your direct dependencies trump transitive ones)
Lesson 672Version Constraints and Conflicts
Necessity and Proportionality
Before sharing, ask: "Is this sharing essential to deliver the service users expect?
Lesson 1907Third-Party Data Sharing
Needs
What requirements will they contribute?
Lesson 133Stakeholder Identification and Analysis
Negotiation overhead
Changing an SLA requires renegotiating customer contracts—a slow, expensive process.
Lesson 1177Service Level Agreements (SLAs): Legal Commitments
Nested control structures
Each level of nesting adds mental context you must hold
Lesson 384Cognitive Complexity
Nested structures
How objects contain other objects
Lesson 839Defining Schemas with JSON Schema
Network
Usually free for inbound traffic (data coming in), but charged for outbound traffic (data leaving the cloud) and cross-region transfers.
Lesson 1535Understanding Cloud Cost Models
Network Address Translation (NAT)
.
Lesson 1428Container Networking Basics
Network bottlenecks
appear as bandwidth saturation, high latency, or packet loss.
Lesson 1380Identifying Scalability Bottlenecks
Network calls fail
(timeouts, connection drops)
Lesson 1093Introduction to Resilience Patterns
Network namespace
Separate network interfaces, IP addresses, and routing tables
Lesson 1427Namespaces and Control GroupsLesson 1444Pods: The Atomic Unit of Deployment
Network overhead increases
More table accesses mean more disk I/O or cache lookups
Lesson 864The Cost of Over-Normalization
Network plugins
(managing node networking)
Lesson 1461DaemonSets and Node-Level Workloads
Network requests
APIs, external services, anything across a network
Lesson 441Fast Feedback: Keeping Tests Quick
Network round-trips
Geographic latency multiplied by sequential requests
Lesson 1198I/O and Network Profiling
Network traffic
(fewer requests travel across the wire)
Lesson 758Cacheability Constraint
Network unreliability
Messages can be delayed, dropped, or arrive out of order
Lesson 1414The Distributed Consensus Problem
Network use clause
The AGPL v3 variant closes the SaaS loophole
Lesson 1866The GNU GPL Family
Network-bound
performance issues arise when network latency or bandwidth becomes the constraint.
Lesson 1193Common Performance Bottlenecks
Networks
are unreliable and unpredictable
Lesson 516External Dependencies and Infrastructure
Never drop columns
immediately—deprecate first
Lesson 717Database Schema Deployment
Never drop columns immediately
after a deploy
Lesson 721Database Rollbacks and Schema Compatibility
Never trust
that validation happened elsewhere
Lesson 1039Trust Boundaries and Input Validation
New code coverage
Are the new lines actually executed by tests?
Lesson 595Coverage in Code Review
New developers
can't set up the project — they don't know what to install
Lesson 667Declaring Dependencies Explicitly
New files you create
→ can be proprietary, even in the same binary
Lesson 1868The Mozilla Public License
New views
Create new projections of old data without migrating databases
Lesson 1349Rebuilding State from Events
Next read
Cache miss occurs, fresh data loads from database and repopulates cache
Lesson 979Cache-Aside Invalidation Pattern
Next Steps
Where to explore from here
Lesson 835Getting Started Guides
Next/Previous navigation
Guide sequential reading when order matters
Lesson 1694Documentation Structure and Navigation
NFS or SMB protocols
that multiple servers can mount simultaneously.
Lesson 1514Managed Storage Services
Nightly builds
Run the full E2E suite when time constraints are relaxed
Lesson 561E2E Test Execution Strategy
Nightly fuzzing
Longer fuzzing campaigns (hours) run overnight, exploring deeper edge cases.
Lesson 625Integrating Fuzzing into CI/CD
No arbitrary complexity requirements
(don't force special characters)
Lesson 993Password Policies and Requirements
No blaming, only learning
Breaking the build happens.
Lesson 648The Team's Responsibility for CI
No built-in salt
SHA-256 alone doesn't force unique hashes for identical passwords across different users
Lesson 1000Cryptographic Hash Functions for Password Storage
No business logic safeguards
A fund transfer system checks authentication but doesn't verify account balance limits or transaction patterns—the design lacks fraud detection controls entirely.
Lesson 1045A04: Insecure Design
No dependencies
Avoids complex setup or external systems
Lesson 497Starting with the Simplest Test
No duplication
Single copy, no sync issues
Lesson 1309Data Duplication vs Data Coupling Trade-offs
No global state
Dependencies are explicit parameters
Lesson 231Alternatives to Singleton: Dependency Injection
No independent value
A service that only exists to serve one other service is likely too small.
Lesson 1312Getting Service Granularity Right
No mandatory periodic resets
(changing passwords quarterly creates weak patterns)
Lesson 993Password Policies and Requirements
No manual ordering
You don't need to remember to run ten commands in sequence.
Lesson 663Task Dependencies and Ordering
No pollution
Containers are destroyed; no leftover data
Lesson 545Test Containers and Dockerized Fixtures
No server management
No OS patches, no capacity planning, no infrastructure configuration
Lesson 1519What is Serverless and Function as a Service
No shared domain objects
across contexts—each service has its own representation
Lesson 1306Domain-Driven Design Bounded Contexts
No shared mutable state
exists between tests (covered in lesson 458)
Lesson 462Parallelizing Test Execution
No true horizontal scalability
Your system's capacity becomes limited by individual server capacity, not your total server pool.
Lesson 1392Session Affinity and Its Problems
No verification mechanism
Tests catch broken code immediately.
Lesson 1705Why Documentation Becomes Outdated
No waiting
Developers don't wait days for designers to "throw designs over the wall"
Lesson 24Cross-Functional Teams
Nobody is on-call
the constraint is violated.
Lesson 912Write Skew and Serialization Anomalies
Node failures
Servers can crash at any moment, even mid-operation
Lesson 1414The Distributed Consensus Problem
Non-atomic
commits mix multiple changes: "Fix login bug AND update README AND refactor database helper.
Lesson 108Atomic Commits: One Logical Change
Non-compete agreements
restrict where you can work after leaving.
Lesson 1891Employee Agreements and Intellectual Property
Non-critical queries
like fuzzy search results or recommendations
Lesson 905Read Uncommitted Isolation
non-determinism
variability that makes each build slightly different.
Lesson 687Sources of Non-DeterminismLesson 688Pinning Dependencies
Non-discrimination
Can't penalize users for exercising their rights
Lesson 1908Privacy Regulations (GDPR, CCPA)
Non-functional
"The car must accelerate from 0-60 mph in under 8 seconds" or "The braking system must remain effective in wet conditions"
Lesson 124Functional vs Non-Functional RequirementsLesson 1238What are Quality Attributes
Non-functional requirements
describe *how well* the system should perform those functions—the quality attributes like speed, security, reliability, and usability that make the system acceptable to use.
Lesson 124Functional vs Non-Functional Requirements
Non-obvious algorithms
"Using Floyd's cycle detection to find duplicates in O(1) space"
Lesson 374When to Write Comments
Non-obvious constraints
"API returns null on Sundays—legacy behavior we can't change"
Lesson 375Self-Documenting Code vs Comments
Non-obvious decisions
Explaining why you chose approach A over seemingly simpler approach B
Lesson 1684Code Comments and Inline Documentation
Non-obvious optimizations
If you chose a less-readable approach for performance reasons, say so and explain the trade-off.
Lesson 380Inline Documentation for Complex Logic
Non-repeatable reads
Reading the same data twice in one transaction, getting different values because another transaction modified it
Lesson 899The Isolation PropertyLesson 904What Isolation Levels Protect AgainstLesson 906Read Committed Isolation
Normalize platform differences
Fonts, anti-aliasing, and rendering engines vary across operating systems and browsers.
Lesson 581Managing Visual Test Stability
Normalize taking time off
Leaders should visibly take their vacation and talk about their plans.
Lesson 1860Vacation and Time Off
Not true rollbacks
Compensating transactions don't rewind state; they create new, offsetting actions.
Lesson 1367Compensating Transactions
Not truly RESTful
Purists argue that versions shouldn't be part of resource identifiers
Lesson 791URI Versioning (Path-Based)
Note each breaking dependency
as a prerequisite node
Lesson 1767The Mikado Method for Large Refactorings
Note each function/module
the execution passes through
Lesson 1752Reading and Understanding Legacy Code
Notification Context
subscribes, sends confirmation email
Lesson 1285Domain Events for Context Integration
Notification Service
also listens for "OrderPlaced" and sends confirmation email
Lesson 1374Choreography: Decentralized Collaboration
NotificationPreferencesService
manages email/SMS settings
Lesson 1305The Single Responsibility Principle at Service Level
Novel or surprising failures
New failure modes are learning opportunities, regardless of customer impact
Lesson 1181When to Conduct a Postmortem
Null to Constant
→ return a literal value
Lesson 500The Transformation Priority Premise

O

O(2ⁿ)
– Exponential: Recursive fibonacci (naive)
Lesson 1192Big-O Notation and Algorithmic Complexity
O(log n)
– Logarithmic: Binary search
Lesson 1192Big-O Notation and Algorithmic Complexity
O(n log n)
– Linearithmic: Efficient sorting (merge sort)
Lesson 1192Big-O Notation and Algorithmic Complexity
O(n)
– Linear: Single loop through data
Lesson 1192Big-O Notation and Algorithmic Complexity
O(n²)
because the quadratic term dominates at scale.
Lesson 1192Big-O Notation and Algorithmic Complexity
Object Adapter
– uses composition to wrap and delegate to the adaptee
Lesson 257Class vs Object Adapters
Object Creation
Proxies and Adapters create wrapper objects.
Lesson 282Performance Overhead of Structural Patterns
Object creation is complex
– Multiple setup steps, configuration, or conditional logic make instantiation messy
Lesson 242Factory Pattern Trade-offs
Object lifetimes
How long objects remain in memory
Lesson 1197Memory Profiling and Heap Analysis
Object Mother
is a pattern where you create a dedicated class (or set of classes) containing factory methods that build common test objects with reasonable default values.
Lesson 451Object Mother Pattern
Object Pool
is related but distinct: instead of cloning prototypes, you *recycle* actual object instances.
Lesson 249Prototype Registry and Object PoolsLesson 276Flyweight Factories and Object Pools
Object properties
Did a user's balance decrease by the right amount?
Lesson 482State Verification: Testing Outcomes
Object seams
Points where you can substitute one object for another (dependency injection points, even if informal).
Lesson 1753Finding Seams in Legacy Code
Object storage
Store larger session artifacts in S3 or similar services
Lesson 1504Stateless Application Design
Object types
represent complex entities with multiple fields.
Lesson 806GraphQL Schema and Type System
Obscure integration issues
– problems in how components work together go undetected
Lesson 473The Cost-Benefit Trade-offs of Test Doubles
Obscured intent
New team members (or future you) can't quickly grasp what the code does because pattern machinery dominates the logic.
Lesson 322When Patterns Become Obstacles
Observability built beforehand
structured logs, metrics, distributed tracing
Lesson 1736Production vs Development Debugging Constraints
Observability First
Built-in logging, metrics, and tracing are essential, not afterthoughts.
Lesson 1502What is Cloud-Native Architecture
Observable
Focus on *what* the user experiences, not internal implementation
Lesson 148Writing Clear Acceptance Criteria
Observable behavior
Did the UI element become visible?
Lesson 482State Verification: Testing Outcomes
Observation
uncovers the gap between what people *say* they need and what they *actually* do.
Lesson 1674Understanding Stakeholder Needs and Concerns
Observation and ethnographic methods
mean you go to where the work happens—the factory floor, the hospital ward, the call center—and quietly watch people do their jobs.
Lesson 136Observation and Ethnographic Methods
Observe what breaks
compilation errors, test failures, etc.
Lesson 1755The Mikado Method
Observer
works like a **newsletter subscription**.
Lesson 299Mediator vs Observer: Choosing the Right Pattern
Observing
how people currently work
Lesson 126User Requirements
Obtain
Request a certificate from a CA (like Let's Encrypt, DigiCert)
Lesson 1077Certificate Management and Mixed Content
Obtain the crash artifact
Core dump file, minidump, or detailed crash report
Lesson 1734Post-Mortem Debugging with Core Dumps and Crash Reports
Obvious expected behavior
No conditional logic or special cases
Lesson 497Starting with the Simplest Test
Octopus
is used when merging *three or more* branches simultaneously.
Lesson 64Merge Strategies and Options
Off-peak batch warming
Schedule jobs during low-traffic periods to refresh caches with updated data from your database.
Lesson 989Cache Warming and Preloading
Office Actions
The examiner typically rejects initial claims, citing prior art or other issues.
Lesson 1887The Patent Process and Prior Art
Office Hours
let subject matter experts set aside regular time for questions, creating predictable access to specialized knowledge.
Lesson 1843Knowledge Sharing Mechanisms
Offline capability
(mobile apps) requires data synchronization architectures and conflict resolution strategies
Lesson 1230Functional Requirements as Drivers
On every commit
Run your critical path tests only (the handful of tests covering your most important user journeys)
Lesson 561E2E Test Execution Strategy
On-call engineers escalated
If the incident required multiple people or reached senior engineers, it was serious enough
Lesson 1181When to Conduct a Postmortem
Onboarding
new team members to accelerate learning and build relationships
Lesson 1630When to Use Pairing vs Mobbing
One implementation
→ No pattern needed yet
Lesson 324YAGNI and Pattern Selection
One interaction path
before showing alternatives
Lesson 1637Explaining Complex Systems Simply
One Task
Each function should do exactly what its name says, nothing more.
Lesson 372Function Structure and Length
One-line summaries
`git log --oneline` gives a compact view with shortened hashes
Lesson 117Reading Git Log: Understanding Commit History
One-to-many relationships
When one subject notifies many observers
Lesson 299Mediator vs Observer: Choosing the Right Pattern
One-way sync
works when your new system is read-only initially.
Lesson 1778Data Migration and Synchronization
Open → Half-Open
Triggered automatically after timeout expires
Lesson 1097Circuit Breaker States and Transitions
Open a pull request
When ready (or even early for feedback), create a PR to propose merging into main
Lesson 85GitHub Flow: Simplified Branch-and-Merge
Open-ended questions
get stakeholders talking: "How do you currently handle customer orders?
Lesson 134Interview Techniques for Requirements
Open-source and self-hosted
Jenkins is the veteran of CI—massively flexible through thousands of plugins, but requires you to manage the infrastructure yourself.
Lesson 637Popular CI Platforms
Open/Closed Principle
objects are open for extension but closed for modification.
Lesson 268Decorator Pattern: Adding Behavior Dynamically
OpenAPI specification
(the structured YAML or JSON file describing your API) and render it as a web interface.
Lesson 836Interactive Documentation Tools
OpenTelemetry Collector
as a vendor-neutral pipeline that receives telemetry data and forwards it to multiple backends (Jaeger for traces, Prometheus for metrics, Elasticsearch for logs).
Lesson 1153Tracing Infrastructure and Tools
Operating system characteristics
Use containers or virtual machines to standardize the OS layer
Lesson 689Controlling the Build Environment
Operation being performed
"fetching user", "processing payment"
Lesson 1091Error Context and Propagation
Operational Burden
– Managed services handle undifferentiated heavy lifting: backups, patching, scaling, high availability.
Lesson 1518Evaluating Managed Service Trade-offs
Operational knowledge
Your team's expertise becomes vendor-specific
Lesson 1539What is Vendor Lock-in
Operational Overhead
Automation handles backups, failover, scaling, and security patches—tasks that would otherwise consume significant DevOps time.
Lesson 1512Managed DatabasesLesson 1528What is Multi-Tenancy
Operations/SRE
– concerned with reliability, monitoring, deployment complexity
Lesson 1812Identifying and Engaging Stakeholders
Opportunistic refactoring
means you clean up code while doing feature work—you're adding a function and notice messy code nearby, so you tidy it up before continuing.
Lesson 363Opportunistic vs Planned Refactoring
Opportunity cost
is what you sacrifice when choosing one option over another.
Lesson 34The Cost of Delay and Opportunity Cost
Optimism bias
We remember the best-case scenarios and forget the debugging marathons
Lesson 1648Why Estimation is Hard
Optimistic
3 days (everything's straightforward)
Lesson 1652Three-Point Estimation
Optimistic (O)
Best-case scenario—everything goes smoothly
Lesson 1652Three-Point Estimation
Optimistic concurrency control
Detecting conflicts at commit time and rolling back one transaction
Lesson 908Serializable Isolation
Optimistic Locking
Add a version column; only update if the version hasn't changed since you read it.
Lesson 911Lost Update Problem
Optimistic UI updates
Show the expected result immediately in the interface
Lesson 1353Eventual Consistency in CQRS
Optimization per service
A recommendation engine might benefit from Python's data science libraries, while a payment processor needs Java's mature financial libraries and strict typing.
Lesson 1335Technology Heterogeneity and Experimentation
Optimize
Improve performance while all tests remain green
Lesson 506TDD and Performance Optimization
Optimize package size
Trim unused libraries and use tree-shaking
Lesson 1521Cold Starts and Warm Instances
Optimizing
performance based on usage patterns
Lesson 11SDLC Phases: Testing, Deployment, Maintenance
Optimizing Resource Usage
extends beyond code.
Lesson 1932Sustainable Software Engineering Practices
Optional fields
Additional context that may be included
Lesson 1343Event Schemas and Contracts
Orchestrate
entities to fulfill specific application scenarios
Lesson 1275Use Cases: Application Business Rules
Orchestration
A saga coordinator explicitly tells each service what to do, tracking the overall state and invoking compensating actions if needed.
Lesson 1366What is the Saga PatternLesson 1370Saga Execution CoordinatorsLesson 1375Trade- offs: Coupling and Visibility
orchestrator
is a dedicated service that manages the entire saga workflow.
Lesson 1370Saga Execution CoordinatorsLesson 1378Hybrid Approaches
Order
the backlog so the team always works on the highest-value items first
Lesson 1582Scrum Roles: Product Owner
Order matters
Running Test B before Test A causes failures
Lesson 440Avoiding Test InterdependenceLesson 1367Compensating Transactions
Order matters most
Place the most selective (highest-filtering) column first, or the column most frequently used alone.
Lesson 873Composite Indexes and Column Order
Order of operations matters
A notification was sent (behavior) after validation succeeded (state)
Lesson 486Combining State and Behavior Verification
Order Service
publishes "OrderPlaced" event
Lesson 1374Choreography: Decentralized Collaboration
Ordering
Keep the most valuable, ready-to-work-on stories at the top
Lesson 157Backlog Management
Organizational accountability
means companies face:
Lesson 1923Professional Liability and Accountability
Organizational changes
Rapid growth, acquisitions, or restructuring alter priorities and constraints.
Lesson 1808Evolving Vision Over Time
Organizational Resistance
Management may see the initial velocity drop and question the investment.
Lesson 521Team Adoption and Learning Curve
Original error
always chain/wrap, never discard
Lesson 1091Error Context and Propagation
Originator
– the object whose state you want to save (like your document)
Lesson 301The Memento Pattern: Capturing Object State
ORM by default
for CRUD operations, simple queries, and everyday object persistence
Lesson 954The Hybrid Approach
Other technical teams
– worry about integration points, API stability, shared resources
Lesson 1812Identifying and Engaging Stakeholders
Out-of-band deployment
Deploy outside normal release windows and blackout periods
Lesson 1549Emergency Release Procedures
Outbound (driven) ports
Interfaces your business logic uses to request external services (e.
Lesson 1264The Ports and Adapters Pattern
Outcome-oriented
What does success look like for this user?
Lesson 126User Requirements
Outgoing requests
endpoint, method, key parameters (sanitized), correlation ID
Lesson 1124Logging at System Boundaries
Output encoding
transforming user input into a safe form *right before* you display it, based on *where* it's going.
Lesson 1064Preventing XSS Through Output Encoding
Output escaping
ensures data displays safely in its final context.
Lesson 1060Input Validation and Sanitization
Output Formats
Configure whether logs emit as JSON, logfmt, or human-readable text without changing your logging calls.
Lesson 1133Structured Logging Libraries and APIs
Outputs
Values the module exposes to its caller
Lesson 1484Terraform Modules and Reusability
Outside-in TDD
(also called "London School" or "acceptance-test-driven development") starts at the system's boundary—where users interact with your software—and works inward, layer by layer.
Lesson 514Growing Object-Oriented Software Guided by Tests
Over-invalidation
wastes your caching investment.
Lesson 976The Two Hard Things in Computer Science
Overall trend
Did total coverage percentage drop?
Lesson 595Coverage in Code Review
Overlay networks
span multiple Docker hosts, allowing containers on different machines to communicate securely as if they're on the same local network.
Lesson 1435Docker Networking Fundamentals
Overload
Throughput may drop while latency skyrockets
Lesson 1387Measuring Scalability: Throughput and Latency
Overly sensitive static thresholds
that don't account for normal variance
Lesson 1158Alert Fatigue: Reducing False Positives
Overwrite
sensitive files rather than just unlinking them
Lesson 1903Data Retention and Deletion
OWASP Top 10
is a regularly updated list (roughly every 3-4 years) that ranks the most critical security risks facing web applications.
Lesson 1041Introduction to the OWASP Top 10
Owned
Assign a person or team responsible for each item
Lesson 1184Identifying Actionable Improvements

P

P0 (Critical)
Complete service outage or severe data loss.
Lesson 1164Incident Severity Levels
P1 (High)
Major functionality broken, significant customer impact.
Lesson 1164Incident Severity Levels
P2 (Medium)
Important feature degraded but workarounds exist.
Lesson 1164Incident Severity Levels
P3 (Low)
Minor issue with minimal customer impact.
Lesson 1164Incident Severity Levels
P4 (Minimal)
Cosmetic issues, documentation errors.
Lesson 1164Incident Severity Levels
p50 (median)
Half of all requests are faster than this value
Lesson 1143Percentiles and AggregationLesson 1205Percentiles and the Long Tail
p99
99% are faster; this captures the "worst" 1% of experiences
Lesson 1143Percentiles and AggregationLesson 1205Percentiles and the Long Tail
PA/EL systems
(like Cassandra, DynamoDB): Choose availability during partitions, prioritize low latency normally
Lesson 1411The PACELC Extension to CAP
Pa11y
is a command-line tool that can test pages in isolation or as part of your CI/CD pipeline, providing detailed reports of accessibility issues.
Lesson 582Automated Accessibility Testing
Package Structure
Organize code so each module lives in its own package hierarchy.
Lesson 1291Enforcing Module Independence
Package/module organization
Physical separation makes violations obvious
Lesson 1257Layer Responsibilities and Boundaries
Pact
is the most widely-adopted framework.
Lesson 551Contract Testing Tools and Frameworks
Page 1
`offset=0, limit=10` → items 1-10
Lesson 784Offset-Based Pagination
Page 2
`offset=10, limit=10` → items 11-20
Lesson 784Offset-Based Pagination
Page 3
`offset=20, limit=10` → items 21-30
Lesson 784Offset-Based Pagination
Page Object Pattern
treats each page (or component) of your application as a class.
Lesson 562Page Object Pattern
Paginate collections
Apply limits to child collections to bound the result set size.
Lesson 947Cartesian Product Explosion
Paginate last
Return only the requested page of sorted, filtered data
Lesson 789Combining Pagination, Filtering, and Sorting
Pagination metadata
provides these answers directly in your response, while **navigation links** (HATEOAS-style) give clients ready-made URLs to fetch adjacent pages.
Lesson 786Pagination Metadata and Links
Pain
"I need to create 10 objects before I can test this method.
Lesson 511Listening to Test Pain
Pain frequency
Code touched often hurts more than code rarely changed
Lesson 1772Managing Technical Debt During Refactoring
Pairing and Rotation
Rotate team members through different parts of the codebase or pair junior and senior engineers.
Lesson 1840Creating a Culture of Continuous Learning
Parallel Change
) gives you a safe, gradual path forward.
Lesson 892The Expand-Contract Pattern
Parallel execution fails
Tests can't run simultaneously without interfering
Lesson 458Avoiding Shared Mutable State
Parallel execution is impossible
You can't run tests simultaneously
Lesson 440Avoiding Test Interdependence
Parallelization
means identifying which stages are independent and configuring your pipeline to execute them simultaneously.
Lesson 706Parallelization and Pipeline Efficiency
Parallelize wisely
Run independent integration tests in parallel, but be mindful of resource contention on shared dependencies.
Lesson 538Performance Considerations with Real Dependencies
Parameter Objects
When extracting creates functions with many parameters, group related data into objects (covered earlier in your studies).
Lesson 385Breaking Down Complex Functions
Parameterize Dependencies
Instead of creating dependencies internally, pass them in as parameters.
Lesson 1754Breaking Dependencies to Enable Testing
Parameterized methods
Add optional parameters to facade methods for flexibility without exposing subsystem details
Lesson 273Implementing Facades: Design Decisions
Parameterized queries
(also called **prepared statements**) treat SQL code and user data as fundamentally separate things.
Lesson 1055Preventing SQL Injection with Parameterized Queries
Parameters section
path params, query params, headers, body—each with type, required/optional flag, and description
Lesson 831Reference Documentation Structure
Paraphrasing
what you heard: "So you're saying the approval process blocks urgent requests?
Lesson 134Interview Techniques for Requirements
Parent/root
the result from the parent field
Lesson 811Resolvers: The Execution Layer
Parking lot technique
When discussions veer off-topic or become dominated by two people, note the issue for later follow-up rather than letting it consume airtime.
Lesson 1851Inclusive Communication and Collaboration
Parse and validate
the query against the schema
Lesson 812The GraphQL Execution Model
Parsers and serialization
If you write a JSON parser, the property "parse(stringify(x)) == x" should hold for any valid object.
Lesson 612When Property-Based Testing Shines
Parses incoming requests
against path, query, header, and body schemas
Lesson 843Request and Response Validation
Partial checking
Verify aspects you *can* predict
Lesson 608The Test Oracle Problem
Partial failures are normal
(some nodes work, others don't)
Lesson 1093Introduction to Resilience Patterns
Partition tolerance
(system works despite network splits).
Lesson 923The Consistency-Availability Trade-off
Partition Tolerance (P)
The system continues to operate despite network partitions (communication breakdowns between nodes).
Lesson 1406The CAP Theorem: Consistency, Availability, and Partition Tolerance
Partitioning
solves this by dividing messages into ordered "lanes" based on a **partition key** (like user ID or order ID).
Lesson 1362Message Ordering and PartitioningLesson 1405Combining Partitioning and Replication
PascalCase
classes in most languages
Lesson 367Naming Conventions and Consistency
Pass everything through parameters
Input data, configuration, identifiers—all come as function arguments or environment variables.
Lesson 1522Stateless Function Design
Passive
"The function is called by the scheduler.
Lesson 1691Clear and Concise Technical Writing
Passkeys
are the user-facing implementation—cryptographic key pairs stored on your device.
Lesson 997Passwordless Authentication Methods
Password reuse
Same password across multiple sites increases breach impact
Lesson 992Username and Password Authentication
Password Storage
The server stores a **hashed** version of the password (never plaintext)
Lesson 992Username and Password Authentication
PATCH requests
(partial updates) use:
Lesson 773Matching Verbs to Status Codes
Patch version
(the last number): Incremented for **backward-compatible bug fixes** that don't add new features.
Lesson 846Semantic Versioning for APIs
Patent Pools and Cross-Licensing
Industry groups sometimes create patent pools where companies agree to share patents, reducing litigation within the ecosystem.
Lesson 1888Patent Risks in Software Development
Patent protection
Contributors grant patent licenses to users
Lesson 1866The GNU GPL Family
Patent Trolls
These are entities (often called "non-practicing entities") that acquire patents solely to extract licensing fees or lawsuit settlements.
Lesson 1888Patent Risks in Software Development
Patents
give you a time-limited monopoly (typically 20 years) on your invention, but require public disclosure.
Lesson 1890Trade Secrets vs Patents: Choosing a Strategy
Path coverage
goes further by tracking every *unique combination* of branches—every possible route from start to finish.
Lesson 600Branch and Path CoverageLesson 605Choosing the Right Coverage Metric
Path separators
Unix-like systems (Mac, Linux) use forward slashes (`src/main.
Lesson 666Cross-Platform Build Considerations
Path-based routing
Different URL paths to different backends
Lesson 1463Ingress Controllers and HTTP Routing
Pattern matching
Recognizing formats like `AWS_SECRET_ACCESS_KEY=AKIA.
Lesson 743Secret Scanning and Prevention
Pattern matching conventions
Lesson 787Filtering Query Parameters
Pay-As-You-Go (On-Demand)
Maximum flexibility—spin up resources when needed, shut them down when done.
Lesson 1535Understanding Cloud Cost Models
Pay-per-execution
Billing based on actual usage, not reserved capacity
Lesson 1519What is Serverless and Function as a Service
Payload
Contains claims (user ID, roles, expiration time)
Lesson 1011Stateless Authentication with JWTs
PC/EC systems
(like HBase, traditional RDBMSs): Choose consistency during partitions, maintain it even when it costs latency
Lesson 1411The PACELC Extension to CAP
Peak usage times
Back-to-school, seasonal events specific to your domain
Lesson 1548Release Windows and Blackout Periods
Peer feedback sessions
create space for direct, one-on-one exchanges about collaboration styles, code quality, or communication patterns.
Lesson 1645Creating Feedback Loops in Teams
Peer review
Team members can review pipeline changes just like application code
Lesson 708Pipeline as Code
Penetration Testing
(pen testing) involves security experts manually attacking your system using the same tools and techniques real hackers use.
Lesson 421Security Tests: Finding VulnerabilitiesLesson 1061Testing for Injection Vulnerabilities
People reuse passwords
Your users likely use the same password for their email, bank, and dozens of other services.
Lesson 999Why Passwords Must Never Be Stored in Plain Text
Per-test fixtures
are created fresh before each test and torn down after.
Lesson 542Shared vs Per-Test Fixtures
Perceived reduced output
is the biggest concern.
Lesson 1626Benefits and Trade-offs of Pair Programming
Performance benchmark
"Response time must be <500ms"
Lesson 704Pipeline Gates and Approvals
Performance critical paths
Every adapter adds a tiny layer of indirection
Lesson 258When to Use the Adapter Pattern
Performance evaluation
When velocity becomes a performance target, teams inflate estimates to appear productive.
Lesson 1613The Dangers of Velocity Misuse
Performance insights
Data about response times, throughput, and resource usage
Lesson 1244Testability and Observability
Performance isolation
One tenant's spike shouldn't degrade others' experience
Lesson 1528What is Multi-Tenancy
Performance issues hide
You can't identify bottlenecks or unusual patterns
Lesson 1119Why Logging Matters
Performance Metrics
Watch response times, CPU usage, memory consumption, and other signals.
Lesson 722Monitoring and Automated Rollback Triggers
Performance overhead
The server must parse and validate every query text on every request
Lesson 821Persisted Queries and Query WhitelistingLesson 1309Data Duplication vs Data Coupling Trade-offs
Performance problems
are debuggers' Achilles heel.
Lesson 1735Debugger Limitations and When to Use Alternative Tools
Performance regression
means your system got slower, uses more memory, or handles fewer requests after a code change.
Lesson 1211Baseline Metrics and Regression Detection
Performance requirements vary
Use RPC for high-throughput internal services, REST for lower-volume external endpoints
Lesson 827Mixing API Styles in Practice
Performance reviews
Include learning goals alongside delivery goals
Lesson 1847Measuring and Rewarding Learning
Performance specifications
Response times, throughput, concurrent users
Lesson 127System Requirements
Performance tests
measure speed, resource consumption, and responsiveness.
Lesson 420Performance and Load Tests: Testing Under Stress
Performance Trade-offs
CAP says nothing about latency.
Lesson 1413Beyond CAP: Practical Considerations
Performance vs Maintainability
Highly optimized code with caching layers, hand-tuned algorithms, and clever shortcuts often becomes harder to understand and modify.
Lesson 1247Quality Attribute Trade-offs
Performance-critical paths
When query execution plans show the ORM generates suboptimal SQL, hand-writing it gives you exact control over joins, indexes, and query structure.
Lesson 951When to Drop Down to SQL
Performance-critical sections
need optimizations that violate style guides
Lesson 397Balancing Automation with Flexibility
Performance-first
Optimized for speed over durability
Lesson 974Cache-as-SoR (System of Record)
Periodic scanning
is the most common approach.
Lesson 1492Configuration Drift Detection
Permissions-Policy
(formerly called Feature-Policy) lets you explicitly restrict which features your site and embedded content can use.
Lesson 1076Permissions-Policy and Feature Control
Persisted queries
let you pre-register approved queries on the server and reference them by ID rather than sending the full query text.
Lesson 821Persisted Queries and Query Whitelisting
Persisted to disk
Messages are written to disk storage before acknowledging receipt.
Lesson 1360Message Durability and Persistence
Persistence
(saving and loading data from databases or files)
Lesson 195Identifying Multiple Responsibilities
Persistent storage
that follows a specific pod
Lesson 1460StatefulSets for Stateful Applications
Persistent Volumes (PV)
are cluster-wide storage resources that exist independently of any pod.
Lesson 1449Volumes and Persistent Storage
PersistentVolume (PV)
Kubernetes binds the claim to an available volume that meets those requirements
Lesson 1449Volumes and Persistent StorageLesson 1459Persistent Volumes and Claims
PersistentVolumeClaim (PVC)
A developer requests storage with specific size and access requirements
Lesson 1449Volumes and Persistent StorageLesson 1459Persistent Volumes and Claims
Persisting
domain objects by converting them back into database rows
Lesson 936Data Mapper Pattern
Persists
those events to the event store
Lesson 1351Command Side Design
Personal accountability
means you can face:
Lesson 1923Professional Liability and Accountability
Personal data
is any information that can identify a living individual, directly or indirectly.
Lesson 1900Personal Data and Sensitive Information
Pessimistic
15 days (legacy code fights back)
Lesson 1652Three-Point Estimation
Pessimistic (P)
Worst-case scenario—complications arise
Lesson 1652Three-Point Estimation
Pessimistic View
Read data with awareness that it might be locked or in-flux, and handle accordingly.
Lesson 1371Handling Saga Isolation Anomalies
Phantom reads
A query returns different row sets during the same transaction because another transaction inserted or deleted rows
Lesson 899The Isolation PropertyLesson 904What Isolation Levels Protect AgainstLesson 907Repeatable Read Isolation
Phase 1
New code uses structured logging exclusively
Lesson 1134Migrating from Unstructured to Structured Logs
Phase 2
Hot paths in existing code get converted
Lesson 1134Migrating from Unstructured to Structured Logs
Phase 3
Remaining code migrates opportunistically during maintenance
Lesson 1134Migrating from Unstructured to Structured Logs
Phase 4
Remove legacy logging infrastructure
Lesson 1134Migrating from Unstructured to Structured Logs
Phishing susceptibility
Users can be tricked into revealing credentials
Lesson 992Username and Password Authentication
Physical separation
Dedicated workspace you can physically leave, even if it's just closing a laptop and moving to another room
Lesson 1859Remote Work and Disconnecting
Pick a leaf node
tackle the smallest prerequisite first
Lesson 1755The Mikado Method
Pick the smallest prerequisite
with no dependencies of its own
Lesson 1767The Mikado Method for Large Refactorings
PID namespace
Each container sees its own process tree, with its own PID 1
Lesson 1427Namespaces and Control Groups
Pin exact versions
rather than using ranges like `^1.
Lesson 1885Open Source Security and Supply Chain Risks
Pings critical endpoints
to ensure the application responds
Lesson 715Deployment Health Checks
Pinned versions
guarantee reproducibility but require deliberate updates
Lesson 688Pinning Dependencies
Pipeline as Code
means writing your entire deployment pipeline—all its stages, tests, gates, and deployment steps —in text-based configuration files that live in your repository alongside your application code.
Lesson 708Pipeline as Code
Pipeline dashboards
aggregate key information in one place:
Lesson 707Pipeline Visibility and Monitoring
Plan for change
Design systems that can adapt when requirements shift
Lesson 7Uncertainty and Risk Management
Plan to revisit
trade-offs aren't permanent; conditions change
Lesson 1235Driver Conflicts and Trade-offs
Planned refactoring
means you schedule dedicated time specifically to improve code structure, often for larger improvements that can't be done in small increments.
Lesson 363Opportunistic vs Planned Refactoring
Planning fallacy
We systematically underestimate how long tasks take, even when we have historical evidence
Lesson 1648Why Estimation is HardLesson 1653Reference Class Forecasting
Planning horizon
Near-term work should be more detailed than distant backlog items
Lesson 1665Balancing Granularity
Platform detects trigger
– The FaaS platform (AWS Lambda, Azure Functions, etc.
Lesson 1520Serverless Event-Driven Execution Model
Platform-level protection
GitHub, GitLab, and Bitbucket offer built-in secret scanning
Lesson 743Secret Scanning and Prevention
Playbook
Broader incident response guide for a scenario (e.
Lesson 1168Runbooks and Playbooks
playbooks
are pre-written, step-by-step guides that document how to handle specific incidents or operational tasks.
Lesson 1168Runbooks and PlaybooksLesson 1490Ansible Fundamentals
Plugin/extension requirements
Features explicitly designed for third-party extension or configuration.
Lesson 206When to Apply OCP
Pointer Chasing
Following references through layers (Facade → Subsystem A → Component X) means more memory accesses, which can hurt CPU cache performance.
Lesson 282Performance Overhead of Structural Patterns
Poor
`/classes`, `/functions`, `/utils`
Lesson 373Code Organization and File Structure
Poor Key Management
Hardcoding encryption keys in source code, storing them alongside encrypted data, or failing to rotate them regularly.
Lesson 1043A02: Cryptographic Failures
Poor naming
may use awkward method names straight from paths
Lesson 856Auto-Generated vs Hand-Written SDKs
Poor reusability
When logic is buried deep inside a long method, you can't reuse those pieces elsewhere without copying code.
Lesson 336Bloaters: Long Method
Poor user experience
results when the client can't show anything until everything loads
Lesson 783Why Pagination Matters
port
is an interface that defines how your core application interacts with the outside world.
Lesson 1264The Ports and Adapters PatternLesson 1270Multiple Adapters for One Port
Port Binding factor
requires your app to be **self-contained** and **export services by binding to a port**.
Lesson 751Processes and Port Binding Factors
Port scanning
Testing `http://internal-host:22` reveals open services
Lesson 1051A10: Server-Side Request Forgery (SSRF)
Portable solutions
keep your options open but force you to build and maintain infrastructure layers yourself, essentially reinventing what cloud providers already offer.
Lesson 1510Cloud Portability and Vendor Lock-in Trade-offs
Portfolio management
Comparing initiatives that span months without knowing implementation details.
Lesson 1651T-Shirt Sizing for Coarse Estimates
Ports and Adapters
pattern—modules depend on abstractions, not concrete implementations from other modules.
Lesson 1288What is a Modular Monolith
Position tracking
Remember "last processed event" to resume consumption
Lesson 1348Event Store Design
POST
Neither safe nor idempotent.
Lesson 765Safe and Idempotent Methods
POST requests
(creating resources) should return:
Lesson 773Matching Verbs to Status Codes
Post-blackout planning
Expect backlog of changes after restrictions lift
Lesson 1548Release Windows and Blackout Periods
Post-incident recovery
After major incidents, affected engineers need explicit time off—ideally the next business day.
Lesson 1857On-Call and After-Hours Work
Post-mortem analysis
crash dumps, core files, captured state (as you learned in lesson 1734)
Lesson 1736Production vs Development Debugging Constraints
Post-mortem scheduling
– Plan immediate follow-up to prevent recurrence
Lesson 1569The Hotfix Process and Risk Management
Post-mortem, not blame
After fixing, briefly discuss what broke and how to prevent it—without pointing fingers.
Lesson 653Fixing Broken Builds Immediately
Post-mortems and retrospectives
that lead to systemic improvements
Lesson 1847Measuring and Rewarding Learning
Postconditions
are what must be true *after* a method completes.
Lesson 209Behavioral Subtyping and Contracts
Power imbalance
Does the user have meaningful choice, or is this coercive?
Lesson 1909Surveillance and Tracking Ethics
Powerful querying
Filter by exact field values without pattern matching
Lesson 1129What is Structured Logging
PR Creation
When updates are found, it opens a pull request with the version bump
Lesson 685Automating Dependency Updates
Practice deliberately
write code, review others' work, learn from failures
Lesson 1897Product Quality and Professional Competence
Praise What Works
Don't only highlight problems.
Lesson 1617Creating a Constructive Review Environment
Pre-approve hotfix procedures
– Don't debate process during an emergency
Lesson 1569The Hotfix Process and Risk Management
Pre-Commit Phase
*(new)*: If everyone votes "yes," the coordinator sends a "pre-commit" message.
Lesson 1417Three-Phase Commit (3PC)
Pre-reading and async prep
Share agendas and documents 24-48 hours ahead.
Lesson 1851Inclusive Communication and Collaboration
Pre-refinement triage
Deciding which backlog items deserve detailed breakdown.
Lesson 1651T-Shirt Sizing for Coarse Estimates
Pre-release
Execute comprehensive E2E validation before deploying to production
Lesson 561E2E Test Execution Strategy
Precise
when they fail, they pinpoint exactly what broke
Lesson 415Unit Tests: Testing in Isolation
Precise failures
When something breaks, you know exactly which component failed
Lesson 565Component Testing vs Full Page Testing
Precise Filtering
Instead of regex-hunting through text, you query directly:
Lesson 1135Querying and Analyzing Structured Logs
Preconditions
are what must be true *before* a method runs.
Lesson 209Behavioral Subtyping and Contracts
Predicate pushdown
is the database optimizer's technique of applying these filters as early as possible in the query execution process—ideally before joining tables or scanning large datasets.
Lesson 881Filtering and Predicate Pushdown
Predict Need
When a frequently-accessed entry approaches its TTL expiration
Lesson 971Refresh-Ahead Caching
Predictable behavior
Like buying factory-sealed products versus hand-modified ones, immutable deployments eliminate human error during updates.
Lesson 1478Benefits and Challenges of Immutability
Predictable patterns
Similar operations work similarly across different resources
Lesson 759Uniform Interface Principle
Predictable scale
where self-managed infrastructure becomes cost-effective
Lesson 1541Evaluating Lock-in vs Time-to-Market Trade-offs
Predictive parity
requires that among all approved applicants, the same proportion from each group actually repays
Lesson 1913The Impossibility of Fairness
Predictive preloading
Load data users are likely to need next (e.
Lesson 989Cache Warming and Preloading
Prefer test-specific attributes
like `data-testid` – they signal testing intent to developers
Lesson 563Locator Strategies and Best Practices
Prefix by subsystem
`http_`, `db_`, `cache_`
Lesson 1140Metric Naming and Labels
Preflight Validation
Properly handle OPTIONS requests that browsers send to check permissions before actual requests.
Lesson 1068Cross-Origin Resource Sharing (CORS) Security
Preloading on startup
When your application boots, immediately fetch and cache critical data
Lesson 989Cache Warming and Preloading
Premature abstraction
means introducing interfaces, inheritance hierarchies, or plugin systems before you have concrete evidence they're needed.
Lesson 207Balancing OCP with SimplicityLesson 322When Patterns Become Obstacles
Premature optimization
If you're just guessing about future change without evidence, you're probably over-engineering (remember YAGNI from earlier).
Lesson 206When to Apply OCPLesson 285Combining Multiple Structural Patterns
Prepare Phase
Just like 2PC — coordinator asks all participants if they can commit
Lesson 1417Three-Phase Commit (3PC)
Prepare properly
Document your ongoing work, hand off critical responsibilities, set up out-of-office notifications, and actually disconnect.
Lesson 1860Vacation and Time Off
Preprocessing seams
Compile-time or build-time substitution points.
Lesson 1753Finding Seams in Legacy Code
Prerequisites
What users need before beginning (account, tools, basic knowledge)
Lesson 835Getting Started GuidesLesson 1681User Guides and Tutorials
Present findings
to stakeholders before proceeding
Lesson 161Change Impact Analysis
Present options considered
Show you evaluated alternatives
Lesson 1252Communicating Architecture to Stakeholders
Present options, not problems
Don't just say "we can't do both.
Lesson 35Communicating Trade-offs to Stakeholders
Preserve edge cases
Note unusual handling that represents real-world complexity
Lesson 1784Extracting Reusable Knowledge from Legacy Systems
Preserved knowledge
The team understands the business logic embedded in the code.
Lesson 1765The Economics of Legacy Refactoring
Prettier
is one of the most popular code formatters, especially for JavaScript, TypeScript, CSS, and many other languages.
Lesson 392Code Formatters and Prettier
Pretty formatting
Colors, indentation, human-readable timestamps
Lesson 1128Logging in Local Development
Prevent bad commits
from polluting the repository history
Lesson 393Pre-commit Hooks and Git Hooks
Prevent blocking
by excluding quarantined tests from your main CI pipeline
Lesson 577Quarantining and Flaky Test Management
Prevent dead code elimination
The compiler will remove calculations whose results aren't used.
Lesson 1200Writing Effective Benchmarks
Prevent production vulnerabilities
Issues are caught before merging, not after deployment.
Lesson 625Integrating Fuzzing into CI/CD
Prevent scope creep
– new requests become new stories
Lesson 147What are Acceptance Criteria?
Preventative
Address root causes, not just symptoms
Lesson 1184Identifying Actionable Improvements
Prevention over detection
Time invested in design reviews, pairing, and tests prevents bugs rather than finding them late
Lesson 1832Defining Quality Culture
Primary and Secondary
Many teams designate a primary on-call engineer and a secondary backup who escalates if the primary doesn't respond or needs help with complex issues.
Lesson 1163The On-Call Rotation
Primary Ports
(driving ports) are entry points where external actors initiate requests *into* your application.
Lesson 1266Primary and Secondary Ports
Primary store
No backing database for this data type
Lesson 974Cache-as-SoR (System of Record)
Prior art
is any publicly available evidence that your invention already existed before your patent filing date.
Lesson 1887The Patent Process and Prior Art
Prior Art Searching
Before filing patents or when defending against claims, companies search for "prior art"— evidence the technique existed before the patent was filed, potentially invalidating it.
Lesson 1888Patent Risks in Software Development
Prioritize
Use techniques like MoSCoW or value-vs-effort to decide urgency
Lesson 158Scope Creep and Change ControlLesson 1582Scrum Roles: Product Owner
Prioritize Consistency
Wait for multiple nodes to sync before confirming operations → slower response times
Lesson 1411The PACELC Extension to CAP
Prioritize Latency
Serve reads from nearest replica or accept writes immediately → risk of stale data
Lesson 1411The PACELC Extension to CAP
Prioritize safety over deadlines
If a system isn't safe, it shouldn't ship—regardless of business pressure
Lesson 1919The Engineer's Duty to Public Safety and Welfare
Prioritize together
Use your understanding of **cross-functional teams** to bring everyone to the table
Lesson 26Conflicting Stakeholder Interests
Prioritizing risks
Which threats are most likely or damaging?
Lesson 1078What is Threat Modeling
Priority
How critical is this driver?
Lesson 1236Documenting Architectural Drivers
Privacy
Protecting personal data from misuse
Lesson 1895Public Interest and Social Responsibility
Privacy by Default
means users get maximum privacy protection out of the box:
Lesson 1905Privacy by Design and Default
Privacy by Design
means considering privacy at every stage:
Lesson 1905Privacy by Design and Default
Private constructor
Prevents other code from creating new instances using `new`.
Lesson 228The Singleton Pattern: Intent and Structure
Private Estimation
Everyone selects a card representing their estimate without showing it.
Lesson 1610Planning Poker and Estimation Techniques
Private internals
Database tables, business logic, and data structures that belong exclusively to this module
Lesson 1290Defining Module Boundaries
Private package registries
host internal dependencies.
Lesson 680Vendor Dependencies and Private Packages
Private registries
require authentication and are used for proprietary applications.
Lesson 1430Container Registries
Private registry
Best for shared internal libraries across projects
Lesson 680Vendor Dependencies and Private Packages
Privilege escalation
is the nightmare scenario.
Lesson 1031Choosing and Evolving Authorization Models
Proactive monitoring
Watching metrics to catch issues before they impact users
Lesson 1838Production Ownership and On-Call
Probabilistic Early Expiration
Randomly expire items slightly before their actual TTL, spreading the reload across time rather than at one exact moment.
Lesson 983Cache Stampede and Thundering Herd
Probing questions
dig deeper: "Why does that step take so long?
Lesson 134Interview Techniques for Requirements
Problem
The application crashed in production.
Lesson 1743The Five Whys Technique
Problem Space
What exactly wasn't working or needed to change?
Lesson 1701Writing Effective Context Sections
Problem statement
What issue are you solving?
Lesson 1686Design Documents and RFCs
Problem-solving
Cognitive diversity leads to exploring more solution paths
Lesson 1848The Business and Ethical Case for Diversity
Problems surface immediately
If the build breaks, you know it's something you just changed, not a mystery from last week.
Lesson 628The Core CI Principle: Integrate Early and Often
Process and Discipline
from earlier lessons?
Lesson 9What is the Software Development Lifecycle (SDLC)?
Process failures
repeatedly prevent teams from meeting standards
Lesson 1920Speaking Up: When and How to Raise Concerns
Process Level
If manual deployment steps caused the bug, automate deployment.
Lesson 1748Preventing Recurrence with Systemic Fixes
Processes factor
says your application should execute as **one or more stateless processes**.
Lesson 751Processes and Port Binding Factors
Producers
are components that detect something noteworthy has happened and emit an event to announce it.
Lesson 1340Event Producers and Consumers
Product Backlog
is an ordered, living list of everything that might be needed in the product.
Lesson 1585The Product BacklogLesson 1601Sprint Planning: Purpose and Structure
Product stakeholders
Weekly sprint reviews, milestone summaries
Lesson 1676Communication Strategies for Different Stakeholders
Product strategy
Are you enabling the features customers actually need, or building for imagined future requirements?
Lesson 1805Aligning Vision with Business Goals
Production ownership
"The on-call team resolved last night's incident in 12 minutes—their runbooks and monitoring paid off"
Lesson 1839Celebrating Quality WinsLesson 1840Creating a Culture of Continuous Learning
Production Stage
– Release to real users
Lesson 693The Deployment Pipeline Concept
Production traffic analysis
means systematically examining metrics from your live system to understand actual usage patterns and plan accordingly.
Lesson 1218Production Traffic Analysis for Planning
Profession
– Advance the integrity and reputation of the profession
Lesson 1894The IEEE-CS/ACM Software Engineering Code of Ethics
Profile before optimizing
Don't guess where performance problems are.
Lesson 868Balancing Normalization and Performance
Progress clarity
Regular updates on what's working, what's blocked, and what's next
Lesson 1828Transparency and Open Communication
Progress tracking
You can measure completion at any level of the hierarchy
Lesson 1658Work Breakdown Structures (WBS)
progressive disclosure
reveal complexity gradually, only when the previous layer is understood.
Lesson 1637Explaining Complex Systems SimplyLesson 1694Documentation Structure and Navigation
Progressive investigation
Start with minimal flags enabled, gather data, then progressively enable more granular debugging for deeper investigation.
Lesson 1740Feature Flags for Production Debugging
Project Description
A clear 1-2 sentence summary of what the software does and who it's for.
Lesson 1683README Files
Project Managers
People coordinating the work and timelines
Lesson 19Who Are Stakeholders?
Projection-Join Normal Form
, handles **join dependencies** where information can be reconstructed losslessly by joining three or more tables, but combining them creates redundancy.
Lesson 863Higher Normal Forms (4NF, 5NF)
Promotion criteria
Explicitly require evidence of continuous learning and knowledge multiplication
Lesson 1847Measuring and Rewarding Learning
Promotions
Engineers who self-promote or match leadership's communication style may be perceived as more "ready" for advancement than equally capable colleagues who demonstrate impact differently.
Lesson 1850Unconscious Bias in Technical Decisions
Proof of Concept (PoC)
or **spike solution** is a focused, time-limited technical investigation designed to answer a specific question or validate an approach.
Lesson 1844Proof of Concepts and Spike Solutions
Proof of concepts
exploring new approaches
Lesson 1847Measuring and Rewarding Learning
properties
universal statements that must hold true for *entire ranges* of inputs.
Lesson 607Properties vs ExamplesLesson 608The Test Oracle Problem
Property assertions
that check invariants
Lesson 613Property Testing Tools and Frameworks
Property thinking
"reversing any list twice returns the original list"
Lesson 607Properties vs Examples
Property-based
You define properties like "the output length must equal input length" and "each element in output ≤ the next element"—then the framework tries thousands of random lists
Lesson 606What is Property-Based Testing
Property-based testing
flips this approach.
Lesson 606What is Property-Based Testing
proportionality
measurement overhead should be small compared to what you're measuring.
Lesson 1189Performance Measurement BasicsLesson 1909Surveillance and Tracking Ethics
Propose
Someone submits a change with rationale
Lesson 162Change Request Processes
Propose alternatives
Suggest middle-ground solutions that partially satisfy multiple parties
Lesson 26Conflicting Stakeholder InterestsLesson 1922Balancing Business Pressure with Professional Standards
Proposed
The decision is under discussion, not yet finalized
Lesson 1703ADR Status and Lifecycle
Proposed solution
Your technical approach with enough detail for others to understand and critique
Lesson 1686Design Documents and RFCs
Proprietary
→ GPL (closed source conflicts with GPL's freedoms)
Lesson 1873GPL License Compatibility Rules
Proprietary APIs
Using cloud-specific APIs (like AWS Lambda's event model or Azure Cognitive Services) that have no direct equivalents elsewhere
Lesson 1539What is Vendor Lock-in
Protect against loss
(if your phone breaks, your photos are safe)
Lesson 73What Are Remote Repositories
Protect coding time deliberately
Block calendar time for technical work.
Lesson 1789Balancing Coding and Leadership
Protect focus time
Block calendar time for deep work.
Lesson 1858Setting Boundaries and Saying No
Protected branches
Prevent direct commits to `main` or `develop`, requiring pull requests instead
Lesson 89Branch Naming Conventions and Policies
Protects against
Non-repeatable reads (row-level changes)
Lesson 907Repeatable Read Isolation
Protects invariants
Rules are enforced in one place
Lesson 171Encapsulation and Data Hiding
Protocol Buffers
(used by gRPC) lets you define messages and services in `.
Lesson 800Interface Definition Languages (IDLs)Lesson 1315gRPC for Service-to-Service Communication
Protocol Buffers (protobuf)
for encoding—a binary format that's extremely compact and fast to serialize/deserialize.
Lesson 799RPC Protocols: XML-RPC, JSON-RPC, and gRPC
Protocol mandates
Must communicate via SOAP for legacy system compatibility
Lesson 1232Constraints: Technical and Organizational
Protocol negotiation
and format flexibility across heterogeneous environments
Lesson 1117Fallacy 6-8: Administration, Cost, and Homogeneity
Protocol Translation
Converts between external client protocols (HTTP/REST) and internal service protocols (gRPC, message queues).
Lesson 1327API Gateway PatternLesson 1328Gateway Responsibilities and Trade-offs
Prototype + Singleton
Maintain a Singleton registry of prototype objects that can be cloned on demand.
Lesson 254Combining Creational Patterns
Prototype pattern
solves this by keeping a fully-configured "prototype" object around and **cloning** it whenever you need a new instance.
Lesson 247The Prototype Pattern: Cloning Objects
Prototype Registry
is a centralized collection of pre-made prototype objects that you can clone whenever you need similar instances.
Lesson 249Prototype Registry and Object Pools
Prototypes and MVPs
validating hypotheses quickly
Lesson 1837Zero-Defect Mindset
Prototypes and Spikes
Small, time-boxed implementations that answer specific questions ("Can this library handle our scale?
Lesson 1814Using Data and Evidence
Provide both
Let the facade handle common cases, but allow direct subsystem access for advanced users
Lesson 273Implementing Facades: Design Decisions
Provide context links
Include your incident channel, dashboard, and relevant logs
Lesson 1169Escalation Paths
Provide helpful error messages
when values are wrong
Lesson 731Documentation and Configuration Schemas
Provide Kill Switches
If a feature causes production issues, disable it immediately while you investigate—your deployment pipeline stays intact.
Lesson 1558What Are Feature Flags and Why Use Them
Provide migration guidance
Publish clear upgrade documentation showing what's changed, how to migrate, and where to get help.
Lesson 853API Sunset and End-of-Life
Provide sensible defaults
Most users shouldn't need configuration
Lesson 855SDK Design Principles
provider
tests that it returns responses matching the contract, while the **consumer** tests that it sends requests and handles responses correctly according to the contract.
Lesson 422Contract Tests: Testing API BoundariesLesson 548What is Contract TestingLesson 549Provider and Consumer Contracts
Provider team
runs verification tests against the contract
Lesson 551Contract Testing Tools and Frameworks
Provider validates
Service B runs tests proving it returns data matching that contract
Lesson 1321Contract Testing for Service Integration
Provider-centric thinking
"This class can print, scan, fax, and email documents, so the interface should have all those methods.
Lesson 218Role Interfaces and Interface Segregation
Provides a unified interface
so clients don't know about the migration
Lesson 1776Implementing the Facade Layer
Provides feedback
through dashboards, emails, or chat notifications
Lesson 636What is a CI Server
Provision step
Start containers or cloud resources for your dependencies (database, message queue, etc.
Lesson 539CI/CD Integration with Real Dependencies
Provisioned concurrency
Pre-warm instances (costs money but eliminates cold starts)
Lesson 1521Cold Starts and Warm Instances
Proxy pattern
provides a surrogate or placeholder that stands in front of another object and controls access to it.
Lesson 277Proxy Pattern: Controlling Access to Objects
Pruning
is the act of removing dependencies identified as unused during auditing.
Lesson 681Dependency Pruning and Auditing
Pseudonymization
replaces identifiers with pseudonyms (like aliases or random IDs).
Lesson 1904Anonymization and Pseudonymization
Public
– Act consistently with the public interest
Lesson 1894The IEEE-CS/ACM Software Engineering Code of Ethics
Public API
The only way other modules interact with yours—typically services, commands, or queries
Lesson 1290Defining Module Boundaries
Public registries
(like Docker Hub) host images anyone can pull — useful for open-source projects and base images like `nginx` or `postgres`.
Lesson 1430Container Registries
Public vs Internal APIs
You might expose a REST API for third-party developers (widely understood, HTTP-native) while using gRPC for internal microservice communication (faster, type-safe, streaming support).
Lesson 827Mixing API Styles in Practice
Publishes a message
through your producer code
Lesson 536Testing with Real Message Brokers
Pull Request fuzzing
Run a short fuzzing session (e.
Lesson 625Integrating Fuzzing into CI/CD
Pull request triggers
Build runs when a PR is opened or updated
Lesson 639Build Triggers and Webhooks
Pull updates
from `upstream` to stay current with the original project
Lesson 81Working with Multiple Remotes
Pulls container images
from registries and unpacks layers onto the host filesystem
Lesson 1426The Container Runtime
Puppet agents
on nodes request their catalog
Lesson 1491Chef and Puppet Models
Puppet master
compiles manifests into a catalog (a complete description of desired state)
Lesson 1491Chef and Puppet Models
Pure interfaces
are perfect for ISP because they only declare methods—no implementation.
Lesson 219ISP and Language Features: Abstract Classes vs Interfaces
Purpose and impact
What does this setting actually control?
Lesson 731Documentation and Configuration Schemas
Purpose limitation
Are you using data only for stated purposes?
Lesson 1909Surveillance and Tracking Ethics
Purpose specification
Define *why* you need each field before collecting it
Lesson 1901Data Minimization Principle
Push back respectfully when
You have data, benchmarks, or strong architectural reasoning that contradicts the feedback.
Lesson 1619Receiving Code Review Feedback
Push the task
onto a **message queue** (like RabbitMQ or AWS SQS)
Lesson 1385Asynchronous Processing and Message Queues
Push your changes
to `origin` (your fork)
Lesson 81Working with Multiple Remotes
PUT requests
(full updates) commonly return:
Lesson 773Matching Verbs to Status Codes

Q

Qualitative Evidence
User research findings, incident post-mortems, developer experience surveys, or dependency analysis showing coupling.
Lesson 1814Using Data and Evidence
quality attribute
that describes how efficiently your system responds to user actions and handles workload.
Lesson 1186What is Performance and Why It MattersLesson 1243Security as a Quality Attribute
Quality Attribute Driver
Modifiability, deployability
Lesson 1233Business Goals and Architecture Alignment
Quality Attribute Scenario
is a structured, three-part statement that makes quality requirements concrete:
Lesson 1248Quality Attribute Scenarios
Quality attributes compete
Performance optimization often increases complexity, hurting maintainability
Lesson 1235Driver Conflicts and Trade-offs
Quality compromises
will create significant technical debt or future harm
Lesson 1920Speaking Up: When and How to Raise Concerns
Quality degradation
(rushing to fit everything in)
Lesson 158Scope Creep and Change Control
quality gate
is a set of automated checks that run in your CI (Continuous Integration) pipeline and must pass before code can be merged into your main branch.
Lesson 394CI-Based Quality GatesLesson 693The Deployment Pipeline Concept
Quality gates
that prevent technical debt from accumulating
Lesson 1591Definition of Done
Quality Gates Passed
All automated checks have succeeded—code review approvals, static analysis, security scans, performance benchmarks, and any other organizational standards your team enforces.
Lesson 694Production-Ready Definition
Quality Improvement
Yes, fresh eyes spot logic errors, edge cases, and security vulnerabilities.
Lesson 1616The Purpose and Value of Code Review
Quality metrics
Has code quality improved as envisioned?
Lesson 1810Measuring Progress Toward Vision
Quality of assertions
Weak or missing assertions give false confidence
Lesson 592Limitations of Coverage Metrics
Quantifiable impact
Tie refactoring to metrics stakeholders care about—velocity, defect rates, time-to-market, or maintenance costs.
Lesson 1772Managing Technical Debt During Refactoring
Quantify impact when possible
"Adding this caching layer improves latency by 40% but increases operational complexity"
Lesson 1235Driver Conflicts and Trade-offs
Quantify when possible
Use numbers stakeholders understand—time to market, cost estimates, user capacity, error rates.
Lesson 35Communicating Trade-offs to Stakeholders
Quantitative Data
Performance benchmarks, load test results, memory profiling, latency measurements, error rates from logs, or cost projections.
Lesson 1814Using Data and Evidence
Queries
return information but don't modify anything
Lesson 175Command-Query Separation
Queries are safe
you can call them repeatedly in debugging, logging, or testing without fear
Lesson 175Command-Query Separation
Query construction logic
how the query is built
Lesson 941Query Object Pattern
Query optimization
through proper indexing, analyzing query plans, and rewriting inefficient queries reduces the load per operation.
Lesson 1383Database Scaling Challenges
query parameters
when you're filtering or searching across a broader collection.
Lesson 780Sub-resources vs Query ParametersLesson 848API Versioning Strategies
Query performance
As data grows, poorly optimized queries become exponentially slower.
Lesson 1383Database Scaling Challenges
Query readability suffers
Developers spend more time understanding convoluted SQL
Lesson 864The Cost of Over-Normalization
Query Templates
Provide ready-to-run queries for logs or traces that filter to the affected service and timeframe.
Lesson 1160Alert Context: Including Diagnostic Information
Question every parameter
Does this function really need this data, or should it access it differently?
Lesson 388Managing Function Parameters
Question inheritance
Don't copy fields from legacy systems just because they exist
Lesson 1901Data Minimization Principle
Question necessity
After refactoring to clearer names and structure (self-documenting code), ask if comments are still needed
Lesson 381Maintaining Comments During Refactoring
Questionnaires and surveys
let you collect requirements systematically from large populations and spot patterns that emerge across user groups.
Lesson 139Questionnaires and Surveys
Queue up requests
, consuming their own memory until they crash
Lesson 1104Cascading Failures
Queuing
Commands can wait in line (task scheduler, job queue)
Lesson 290Command Pattern: Encapsulating Requests
Quick fixes accumulate
Urgent patches add complexity without restructuring
Lesson 41Code Evolution and Entropy
Quick setup
– creating doubles for interfaces with many methods
Lesson 478Mock Frameworks and Hand-Rolled Doubles
Quick Start Guide
A minimal working example showing how to use the core functionality.
Lesson 1683README Files
QuickCheck
(Haskell, 2000) pioneered the entire category.
Lesson 613Property Testing Tools and Frameworks

R

RabbitMQ
Feature-rich, supports complex routing patterns
Lesson 1316Message Queues for Async Communication
Rainbow tables
Pre-computed tables of common passwords and their SHA-256 hashes let attackers instantly crack millions of passwords
Lesson 1000Cryptographic Hash Functions for Password StorageLesson 1001Salt: Preventing Rainbow Table Attacks
RAM
serves as the next tier (~100 ns access time).
Lesson 960Cache Memory Hierarchies
Random generation
Completely random data
Lesson 621Introduction to Fuzzing
Randomizing test execution order
means shuffling tests so they run in a different sequence each time.
Lesson 460Randomizing Test Execution Order
Randomness
Any code using random number generators produces different results each run.
Lesson 1722Controlling Environmental Variables
Rank
highest total scores = highest priority
Lesson 155Weighted Scoring Models
Rapid frontend iteration
becomes much smoother with GraphQL.
Lesson 826When to Choose GraphQL
Rarely touched code
If nobody needs to modify it, the refactoring ROI is near zero.
Lesson 1765The Economics of Legacy Refactoring
Rate
How many requests per second?
Lesson 1138RED and USE Methods
Rate limiting
Protecting your system from overload
Lesson 1328Gateway Responsibilities and Trade-offs
Rate-of-change
sudden drops (100 → 10 req/sec) matter even if both are "low"
Lesson 1157Threshold Selection: Static vs. Dynamic Baselines
Rationale
Why it matters to the business or system
Lesson 1236Documenting Architectural Drivers
Raw SQL for exceptions
like complex reports, bulk operations, analytical queries, or performance-critical hotspots
Lesson 954The Hybrid Approach
RBAC
shines in enterprise applications with well-defined job functions—HR can see payroll, developers can deploy code.
Lesson 1031Choosing and Evolving Authorization Models
Re-prioritizing
Adjust story order based on new business value, stakeholder feedback, or technical dependencies
Lesson 157Backlog Management
Read
a record along with its version (e.
Lesson 919Optimistic Locking with Versioning
Read carefully first
Don't respond immediately if you feel defensive.
Lesson 96Responding to Review Feedback
Read Committed
Prevents dirty reads only
Lesson 904What Isolation Levels Protect Against
Read from new
Deploy code that reads from new structures while still writing to both
Lesson 893Zero-Downtime Schema Changes
Read Models
Services maintain local copies of data they need from other contexts, updated asynchronously through events.
Lesson 1310Managing Cross-Service Data Consistency
Read replicas
separate read traffic from writes by creating database copies that handle SELECT queries, leaving the primary database to focus on writes.
Lesson 1383Database Scaling Challenges
Read scalability
(followers can serve reads for their partition)
Lesson 1405Combining Partitioning and Replication
Read the diff carefully
Look at exactly what changed, line by line
Lesson 101Self-Reviewing Before Submission
Read the migration guide
provided by the library maintainers
Lesson 682Dealing with Breaking Changes
Read Uncommitted
Protects against nothing—all three anomalies can occur
Lesson 904What Isolation Levels Protect Against
Read vs Write
Separate `read:profile` from `write:profile`
Lesson 1022OAuth2 Scopes and Consent
Read vs Write Optimizations
GraphQL can handle complex read queries efficiently (clients fetch exactly what they need), while RPC handles critical write operations with stricter validation and simpler error handling.
Lesson 827Mixing API Styles in Practice
Read-heavy systems
where performance matters more than perfect accuracy
Lesson 905Read Uncommitted Isolation
Read-only root filesystem
Prevent runtime modifications
Lesson 1440Docker Security Best Practices
Read-Through Caching
, the cache layer sits between your application and the data source.
Lesson 967Read-Through Caching
Read-your-writes
guarantees that after a user writes data, any subsequent reads *by that same user* will reflect that write—even if other users might not see it yet.
Lesson 925Read-Your-Writes and Monotonic ReadsLesson 1404Consistency in Replicated Systems
Read-your-writes consistency
You always see your own updates, though others might lag
Lesson 1410Consistency Models and the Spectrum
Read/write contention
A single database instance has limited I/O capacity.
Lesson 1383Database Scaling Challenges
Read/Write Ratio
If your system is read-heavy (e.
Lesson 975Pattern Selection Trade-offs
Readability matters
– a class named `AlwaysSuccessfulPaymentGateway` is clearer than mock configuration
Lesson 478Mock Frameworks and Hand-Rolled Doubles
Readable
Use underscores or camelCase consistently; prefer readability over brevity
Lesson 444Naming Test Methods Clearly
Readiness check
Is the service ready to accept traffic?
Lesson 1326Health Checks and Registration
readiness checks
repeatedly attempt connections or HTTP health checks until the service responds correctly, with reasonable timeouts.
Lesson 537Network and Service Discovery in TestsLesson 1101The Health Check Pattern
README
, user documentation, wiki pages, tutorial videos, logo files, and marketing images.
Lesson 1869Creative Commons and Non-Code Licenses
README.md
Your project's front door.
Lesson 1882Starting an Open Source Project
reads
(queries), but they slow down **writes** (inserts, updates, deletes) because the database must update both the table *and* all relevant indexes.
Lesson 869What Indexes Are and How They WorkLesson 1350CQRS Pattern Overview
Reads can go anywhere
Clients can read from the leader or any follower, reducing load on the leader
Lesson 1402Leader-Follower Replication
Real dependencies
mean using actual implementations—a real database, file system, or external service.
Lesson 530Real vs Mocked Dependencies in Integration Tests
Real objects
(no test double at all)
Lesson 476The Test Double Pyramid
Real services
give you confidence that integrations actually work, but they're slow, cost money, and can fail unpredictably—bringing down your entire test suite when a third-party has an outage.
Lesson 576Handling External Services
Real-time
Invalidation happens immediately when events are processed
Lesson 980Event-Driven Invalidation
Real-time data pipelines
Streaming analytics and transformations
Lesson 1317Event Streaming with Kafka
Real-time processing
(trading systems, gaming) may require event-driven architectures with minimal latency paths
Lesson 1230Functional Requirements as Drivers
Real-time response displays
with status codes and payloads
Lesson 836Interactive Documentation Tools
Realism
Test against actual databases, not in-memory fakes
Lesson 545Test Containers and Dockerized Fixtures
Realistic data
mirrors what you'd see in production—full user objects with names, emails, addresses, profile pictures.
Lesson 438Test Data: Realistic vs. Minimal
Realistic scenarios
Tests actual user workflows, not isolated units
Lesson 565Component Testing vs Full Page Testing
Realistic workloads
Microbenchmarks often use tiny, perfect data (sorted arrays, simple strings).
Lesson 1201Microbenchmarks and Their Limitations
Reality
Different teams, departments, companies, or cloud providers manage different parts.
Lesson 1117Fallacy 6-8: Administration, Cost, and HomogeneityLesson 1387Measuring Scalability: Throughput and Latency
Reason for deprecation
"This API endpoint was replaced by `/v2/users` for better performance.
Lesson 1710Deprecation and Archival Strategies
Reasonable time limits matter
If you've spent 1-2 hours applying systematic debugging approaches without progress—you've read the error messages, isolated the problem area, tested hypotheses—it's time to ask for help.
Lesson 1719Knowing When to Ask for Help
Reasoning becomes easier
you know exactly what a method will or won't do
Lesson 175Command-Query Separation
Rebalancing
is the process of redistributing data across the cluster when the number of partitions or nodes changes.
Lesson 1400Rebalancing Partitions
Rebuild
(intensive, may lock tables): Completely recreates the index from scratch.
Lesson 877Index Maintenance and Statistics
Receiver
– The actual object that performs the work when a command is executed
Lesson 291Implementing the Command Pattern
Receives the call
(because it implements the same interface)
Lesson 269Implementing Decorator: Wrappers and Forwarding
Recency bias
Recent experiences disproportionately color our predictions
Lesson 1648Why Estimation is Hard
Recent Changes
Include references to recent deployments, configuration changes, or infrastructure modifications.
Lesson 1160Alert Context: Including Diagnostic Information
Recognition programs
Create awards for impactful knowledge sharing or innovative experiments
Lesson 1847Measuring and Rewarding Learning
Recommendation systems
using collaborative filtering ("users like you also liked.
Lesson 1918Bias in Non-ML Systems
Recommendations Team
→ owns the Recommendations Service
Lesson 1300Organizational Alignment
Record baselines
after stable releases or during known-good periods
Lesson 1211Baseline Metrics and Regression Detection
Record that output
as the expected result in your test
Lesson 1758What Are Characterization Tests
Record timing data
for each step to identify slow operations
Lesson 1372Monitoring and Observability for Sagas
Recovery mechanisms
If the system crashes, the database can replay the log during startup to restore all committed changes
Lesson 900The Durability Property
Recovery Point Objective
is the maximum amount of data loss you can tolerate, measured in time.
Lesson 724Recovery Point and Time Objectives
Recovery Time Objective
is the maximum acceptable downtime—how long your system can be unavailable before causing unacceptable business impact.
Lesson 724Recovery Point and Time Objectives
Recurring
Predictable schedule creates team rhythm
Lesson 1600What Are Agile Ceremonies?
Recursion combined with conditions
Following recursive calls while tracking conditional logic
Lesson 384Cognitive Complexity
Recursive
is Git's default strategy for merging two branches.
Lesson 64Merge Strategies and Options
Recuse
yourself from decisions where appropriate
Lesson 1926Conflicts of Interest and Professional Independence
RED/USE methods
you've already learned.
Lesson 1144Dashboard Design Principles
Redeployment-required
configuration is simpler and safer.
Lesson 732Configuration Changes Without Redeployment
Redeployment-Required Configuration
means configuration is loaded once at startup.
Lesson 732Configuration Changes Without Redeployment
Redis
supports atomic operations on single keys but lacks full transactional guarantees across multiple keys without special commands
Lesson 903ACID in Different Database Systems
Redis Streams
Ultra-low latency, simpler than both, limited durability guarantees.
Lesson 1365Choosing a Message Broker: RabbitMQ, Kafka, and Others
Redis/Memcached
(fast distributed cache)
Lesson 1007Session-Based Authentication Fundamentals
Redistribute capacity
Move team members temporarily to help clear the backed-up stage (e.
Lesson 1597Identifying and Resolving Bottlenecks
Redoc
generate this experience automatically from your API specifications (like OpenAPI).
Lesson 836Interactive Documentation Tools
Reduce default installations
Ship products with minimal features enabled by default.
Lesson 1038Minimize Attack Surface
Reduce Nesting
Deep conditionals and loops increase cognitive complexity.
Lesson 385Breaking Down Complex Functions
Reduce review cycles
Fewer back-and-forth rounds mean faster merges
Lesson 101Self-Reviewing Before Submission
Reduce risk
Discovering a fundamental misunderstanding in a prototype takes hours; discovering it in production code takes months
Lesson 138Prototyping for Requirements Discovery
Reduce storage
Smaller indexes consume less disk space
Lesson 876Partial and Filtered Indexes
Reduce the integration burden
when you're ready to commit
Lesson 649Integrating Before Starting New Work
Reduce the pain
Track what causes pages and ruthlessly fix repeat offenders.
Lesson 1857On-Call and After-Hours Work
Reduce uncertainty
by breaking complex projects into manageable steps
Lesson 9What is the Software Development Lifecycle (SDLC)?
Reduce WIP
Remember those WIP limits from the previous lesson?
Lesson 1595Managing Flow and Cycle Time
Reduced Boilerplate
Without an SDK, every API consumer must write code to construct requests, handle authentication, parse responses, and manage errors.
Lesson 854The Role of Client SDKs
Reduced breach impact
Attackers can't steal what you don't have
Lesson 1901Data Minimization Principle
Reduced complexity
Each part of the system only understands the essentials
Lesson 167Abstraction and Information Hiding
Reduced context switching
No need to jump to a terminal to run tools
Lesson 395Editor Integration and IDE Support
Reduced coupling
Objects don't hold references to each other—only to the mediator.
Lesson 298The Mediator Pattern: Centralizing Communication
Reduced fault tolerance
If a server crashes, all users "stuck" to it lose their sessions, even though healthy servers exist.
Lesson 1392Session Affinity and Its Problems
Reduced flexibility
Every client must handle the entire interface burden
Lesson 215Interface Segregation Principle: No Client Should Depend on Unused Methods
Reduced latency
Users get content from nearby servers (milliseconds vs.
Lesson 1386Content Delivery Networks and Edge Caching
Reduced password fatigue
Fewer weak passwords from users managing dozens of accounts
Lesson 995Single Sign-On (SSO) Fundamentals
Reduced risk
Changes are localized, so bugs are less likely to spread unexpectedly
Lesson 177Understanding Coupling: How Components Depend on Each Other
Reduced staffing
Holiday weekends, company-wide events, Friday evenings
Lesson 1548Release Windows and Blackout Periods
Reduced testing scope
Focus only on validating the specific fix and critical paths, not the full regression suite
Lesson 1549Emergency Release Procedures
Reduces cognitive load
fewer items to track
Lesson 353Introduce Parameter Object
Reduces database load spikes
from synchronized expirations
Lesson 971Refresh-Ahead Caching
Reduces duplication
Common steps live in one place (the base class)
Lesson 315Template Method Pattern: Skeleton AlgorithmsLesson 346Extract Method
Reduces server load
(database queries return limited result sets)
Lesson 783Why Pagination Matters
Reduces tail latency
dramatically—users experience fewer slow requests
Lesson 1109Request Hedging and Redundancy
Reducing lock duration
Keep transactions short and release locks quickly to minimize overlap windows.
Lesson 917Deadlock Detection and Prevention
Redundant alerts
firing for the same underlying problem
Lesson 1158Alert Fatigue: Reducing False Positives
Redundant integration tests
often re-verify what unit tests already cover.
Lesson 429When to Skip or Delete Tests
Refactor first
(if needed): Clean up the area where you'll work, commit it separately
Lesson 105Avoiding Mixing Refactoring with Feature Work
Refactor in small steps
with quick validation after each change
Lesson 405Enabling Refactoring with Tests
Refactoring
is the process of restructuring existing code to improve its internal design, readability, and maintainability *without changing what the code actually does from the outside*.
Lesson 327What is Refactoring?Lesson 334Refactoring vs RewritingLesson 1757When to Rewrite vs Refactor
Refactoring commit
"Extract calculateDiscount method from checkout logic"
Lesson 362Committing Refactorings Separately
Refactoring commits
should change *how* code works internally without changing *what* it does externally.
Lesson 105Avoiding Mixing Refactoring with Feature Work
Refactoring is risky
Changing one test mysteriously breaks others
Lesson 440Avoiding Test Interdependence
Refactoring tools
automatically update types across your codebase
Lesson 371Avoiding Encodings and Hungarian Notation
Refactoring Toward Testability
The best approach is often to refactor away from direct Singleton dependencies.
Lesson 233Testing Code That Uses Singletons
Reference
them in your build configuration file (lesson 638) using platform-specific syntax
Lesson 642Environment Variables and Secrets
Refine
backlog items to make them clear and actionable
Lesson 1582Scrum Roles: Product Owner
Reflected XSS
Script comes from the URL or request and is immediately echoed back
Lesson 1062Cross-Site Scripting (XSS) Overview
Reflected XSS (Non-Persistent XSS)
happens when malicious script is immediately reflected back to the user from the server without being stored.
Lesson 1063Types of XSS: Stored, Reflected, and DOM-Based
Refresh tokens
are long-lived credentials used solely to obtain new access tokens when the old ones expire—like a special ID card you show at the security desk to get a new visitor badge.
Lesson 1021Access Tokens, Refresh Tokens, and Token Lifetime
Registration
User creates an account with a chosen username and password
Lesson 992Username and Password Authentication
Regression testing focus
Since LTS users value stability above all, your backported fix must not introduce behavior changes beyond the specific bug.
Lesson 1572Backporting Fixes to LTS Versions
Regression tests
are tests that verify previously fixed bugs stay fixed and that existing functionality continues to work after new changes.
Lesson 419Regression Tests: Preventing Old Bugs
Regular check-ins
with dependency owners prevent surprises.
Lesson 1672Tracking and Communicating Dependency Status
Regular cross-team demos
and knowledge-sharing sessions
Lesson 1830Collaboration Over Silos
Regular reflection and adjustment
to improve effectiveness
Lesson 1580The Twelve Principles Behind the Agile Manifesto
Regular release schedules
If you ship every month or quarter, CalVer makes your cadence visible
Lesson 1552Calendar Versioning and Alternative Schemes
Regular rhythms
Establish predictable meetings (daily stand-ups, weekly demos)
Lesson 25Communication Channels and Stakeholder Management
Regular, predictable windows
Tuesday/Wednesday mornings when teams are fresh and available
Lesson 1548Release Windows and Blackout Periods
Regulatory Bodies
Organizations ensuring the software meets legal requirements
Lesson 19Who Are Stakeholders?
Regulatory compliance
Industries like healthcare and finance need stable, auditable versions
Lesson 1571Long-Term Support (LTS) Fundamentals
Regulatory requirements
mandate multi-cloud or on-premises options
Lesson 1541Evaluating Lock-in vs Time-to-Market Trade-offs
Reject writes
to nodes that can't reach the leader or coordinator
Lesson 1408CP Systems: Choosing Consistency Over Availability
Rejects invalid requests
with descriptive error messages
Lesson 843Request and Response Validation
Related configs are consistent
(if feature X is enabled, its dependency Y must be configured)
Lesson 730Configuration Validation at Startup
Relational
Hiring your spouse's business or advocating for a friend's promotion without disclosing the relationship
Lesson 1926Conflicts of Interest and Professional Independence
Relationship building
Understanding team goals and helping others succeed
Lesson 1820Operating at Staff+ Scale
Relationship-based
Complex hierarchies (org charts, nested folders, shared workspaces)
Lesson 1029Resource-Based and Relationship-Based Authorization
Relationship-based models
like Google Zanzibar represent permissions as a graph of relationships.
Lesson 1029Resource-Based and Relationship-Based Authorization
Relaxing validation
– accepting more inputs doesn't break existing valid requests
Lesson 847Breaking vs Non-Breaking Changes
Release Branching
creates a dedicated branch (like Git Flow's release branches) where code is prepared, tested, and polished before deployment.
Lesson 87Release Branching vs Continuous Deployment
Release coordination nightmares
Changes must be synchronized across unrelated features
Lesson 1336Migrating from Monolith to Microservices
Release Frequency
Deploying multiple times per day?
Lesson 88Choosing a Strategy for Your Team
Release notes
are user-facing summaries accompanying specific releases, often extracted from or based on the changelog but written with your audience in mind.
Lesson 1687Changelog and Release Notes
Release windows
are pre-approved time slots when deployments are permitted, while **blackout periods** are times when releases are prohibited or severely restricted.
Lesson 1548Release Windows and Blackout Periods
Relevant data
(minimal info needed, like order ID and items)
Lesson 1285Domain Events for Context Integration
Relevant identifiers
user IDs, transaction IDs, request IDs
Lesson 1091Error Context and Propagation
Reliability and Reproducibility
are the crown jewels.
Lesson 1478Benefits and Challenges of Immutability
Reliable but less available
The machine is offline for maintenance regularly (lower availability), but when it works, it always dispenses exactly what you paid for (high reliability).
Lesson 1241Availability and Reliability
Reliable tests
– no flaky database connections
Lesson 1269Testing Hexagonal Applications
Remain framework-agnostic
no references to web frameworks, databases, or UI libraries
Lesson 1275Use Cases: Application Business Rules
Remediate
Replace incompatible dependencies, seek dual-license options, or restructure your architecture
Lesson 1877Verifying License Compatibility in Practice
Remote access
Represent an object that exists elsewhere (different process or machine)
Lesson 277Proxy Pattern: Controlling Access to Objects
Remote execution
Send command objects across networks
Lesson 290Command Pattern: Encapsulating Requests
Remote state storage
(not local files) in a shared location like S3 or Terraform Cloud
Lesson 1483Terraform State Management
Remove
old code only after the new version proves stable
Lesson 1777Migrating Functionality Incrementally
Remove conditional logic
and dead code branches
Lesson 1566Flag Debt and Cleanup Strategies
Remove flag configuration
from your management system
Lesson 1566Flag Debt and Cleanup Strategies
Remove one instance
from the load balancer (stop sending it traffic)
Lesson 711Rolling Deployments
Remove stale items
Delete or archive stories no longer relevant.
Lesson 1607Backlog Refinement Sessions
Remove the old
Once confident, delete the legacy implementation and potentially the abstraction itself
Lesson 1768Branch by Abstraction
Remove unnecessary dependencies
Each third-party library brings its own potential vulnerabilities.
Lesson 1038Minimize Attack Surface
Removed
(for deleted features), **Security** (for vulnerability patches), and **Breaking** (for incompatible changes) are optional but valuable additions.
Lesson 1554Writing Effective Changelogs
Removes need for comments
The name itself explains the purpose
Lesson 365Intention-Revealing Names
Removing duplication
between similar test cases
Lesson 502Refactoring Test Code
Removing endpoints or fields
– clients requesting deleted resources get errors
Lesson 847Breaking vs Non-Breaking Changes
Removing obsolete items
Delete or archive stories that are no longer relevant
Lesson 157Backlog Management
Removing or renaming fields
breaks older consumers unless you implement upcasting to fill missing data with defaults.
Lesson 1355Event Schema Evolution
Rename Method
means changing a method's name to better express what it does.
Lesson 348Rename Method and Rename Variable
Rename Variable
applies the same principle to variables.
Lesson 348Rename Method and Rename Variable
Renaming fields
– `user_name` becomes `username`, clients looking for the old name fail
Lesson 847Breaking vs Non-Breaking Changes
Renew
Replace certificates before expiration
Lesson 1077Certificate Management and Mixed Content
Renovate
automatically monitor your dependencies, create pull requests when updates are available, and even suggest which updates are safe based on semantic versioning rules.
Lesson 685Automating Dependency Updates
Reorder priorities
Adjust based on new information or changing business needs.
Lesson 1607Backlog Refinement Sessions
Reorganize
(online, lightweight): Compacts pages within existing structures.
Lesson 877Index Maintenance and Statistics
Repeatability
Run multiple iterations and report statistical measures (mean, median, percentiles).
Lesson 1200Writing Effective Benchmarks
Repeatable Read
Prevents dirty reads and non-repeatable reads
Lesson 904What Isolation Levels Protect AgainstLesson 908Serializable Isolation
Replace Global State
Globals and singletons (like `Database.
Lesson 1754Breaking Dependencies to Enable Testing
Replace Temp with Query
means taking that calculation, moving it into its own method (a "query"), and calling that method instead of using the temp variable.
Lesson 357Replace Temp with Query
Replay Attacks
Captured requests being resent to perform unauthorized actions
Lesson 1115Fallacy 4: The Network is Secure
Reporting
Highlight differences visually (often with color overlays)
Lesson 570Screenshot and Visual Regression Tools
Reporting queries dominate
Read-heavy analytics workloads benefit from flattened, redundant structures
Lesson 865Strategic Denormalization
Reporting requirements
Gatling produces compelling visual reports
Lesson 1213Load Testing Tools and Frameworks
Reports results
directly on the pull request
Lesson 394CI-Based Quality Gates
Repository Pattern
(which handles querying) and **Data Mapper Pattern** (which handles object-to-row mapping).
Lesson 938Unit of Work PatternLesson 955ORMs in Domain-Driven Design
Repository scanning
Continuously monitor existing code
Lesson 743Secret Scanning and Prevention
Representation matters
Ensure onboarding materials, documentation, and examples reflect diverse perspectives and don't assume a single cultural viewpoint.
Lesson 1853Inclusive Hiring and Onboarding Practices
Representative data
from actual user traffic patterns, load distributions, and edge cases you can't reproduce locally
Lesson 1199Profiling in Production vs Development
Representative workloads
Your benchmark must reflect actual usage.
Lesson 1200Writing Effective Benchmarks
Reproduce first
Can you trigger the same crash with the saved input?
Lesson 626Triaging and Reproducing Fuzzer Findings
reproducible build
(sometimes called "deterministic build") means that building the same source code multiple times —on different machines, at different times, or by different people—produces **bit-for-bit identical output**.
Lesson 686What is a Reproducible Build?Lesson 687Sources of Non-Determinism
Reproduction in safe environments
capturing enough context to recreate issues elsewhere
Lesson 1736Production vs Development Debugging Constraints
Reproduction steps
Can you make it happen reliably?
Lesson 1712Understanding the Problem Before Debugging
Reputation
Slow systems damage brand perception
Lesson 1186What is Performance and Why It Matters
Request and response validation
means using these schemas to automatically verify that actual HTTP traffic conforms to your specification.
Lesson 843Request and Response Validation
Request Coalescing
Collapse multiple identical in-flight requests into a single backend query, sharing the result among all waiting requests.
Lesson 983Cache Stampede and Thundering Herd
Request context objects
that carry tenant metadata
Lesson 1530Tenant Identification and Context
Request example
actual code snippet showing usage
Lesson 831Reference Documentation Structure
Request hedging
applies this strategy to distributed systems: when you need a response quickly, you send the same request to multiple backend instances and use whichever responds first, canceling the others.
Lesson 1109Request Hedging and Redundancy
Request rate
measures how many requests arrive per unit of time—typically expressed as requests per second (RPS) or queries per second (QPS).
Lesson 1207Request Rate and Concurrency
Request Routing
Directs incoming requests to the correct microservice based on URL paths, headers, or other criteria.
Lesson 1327API Gateway PatternLesson 1328Gateway Responsibilities and Trade-offs
Request throughput
to understand capacity
Lesson 1189Performance Measurement Basics
Request-triggered warming
When one piece of data is accessed, proactively load related data users typically request next.
Lesson 989Cache Warming and Preloading
Required reviews
Mandate that changes get approval before merging
Lesson 89Branch Naming Conventions and Policies
Required values exist
(no missing API keys, database URLs, etc.
Lesson 730Configuration Validation at Startup
Required vs. optional
Will the app fail without this setting?
Lesson 731Documentation and Configuration Schemas
Requirements Reviews
bring stakeholders together to walk through documented requirements systematically.
Lesson 142Validating Elicited Requirements
Requirements shift
What users need today differs from yesterday's assumptions
Lesson 41Code Evolution and Entropy
Requirements Stability
How clear and fixed are your requirements?
Lesson 16Choosing an SDLC Model for Your Project
Requires expertise
in each target language
Lesson 856Auto-Generated vs Hand-Written SDKs
Reread and Validate
Before committing local transactions, reread data to detect concurrent changes.
Lesson 1371Handling Saga Isolation Anomalies
Reserved Pricing (Commitments)
Commit to using a specific resource for 1-3 years and receive 30-70% discounts.
Lesson 1535Understanding Cloud Cost Models
Reset Methods
Add a method to your Singleton that restores it to its initial state.
Lesson 233Testing Code That Uses Singletons
Reset state
Clear databases, caches, and files before each run
Lesson 1722Controlling Environmental Variables
Resilience patterns
are battle-tested architectural strategies that help systems continue functioning (even in degraded modes) when parts fail.
Lesson 1093Introduction to Resilience Patterns
Resilient locators
survive UI refactoring:
Lesson 563Locator Strategies and Best Practices
Resolution
Now identify and fix the underlying problem.
Lesson 1165Incident Response Workflow
Resolve any conflicts
if your changes and theirs touched the same code
Lesson 80Handling Push Rejections
Resource Allocation
assigns compute, storage, and network resources based on the tenant's subscription level.
Lesson 1533Tenant Onboarding and ProvisioningLesson 1542What is Release Planning
Resource allocation algorithms
(scheduling hospital beds, routing delivery drivers) might optimize for efficiency while ignoring equity—serving wealthy neighborhoods faster simply because they're closer together.
Lesson 1918Bias in Non-ML Systems
Resource attributes
classification level, owner, creation date, sensitivity
Lesson 1028Attribute-Based Access Control (ABAC)
Resource caps
Maximum 2GB RAM per container in the current cluster
Lesson 1232Constraints: Technical and Organizational
Resource exhaustion
Without proper limits, malicious or buggy clients can open hundreds of subscriptions, exhausting memory and CPU.
Lesson 822Subscription Scalability Challenges
Resource intensive
They require more infrastructure—test databases, message brokers, containerized services— making them more expensive to run, especially in CI/CD pipelines.
Lesson 555The Value and Cost of E2E Tests
Resource needs
You need additional engineers to investigate multiple systems simultaneously
Lesson 1169Escalation Paths
Resource organization
Group related resources together logically.
Lesson 1446Namespaces for Resource Isolation
Resource Owner
"Can I access your data?
Lesson 1018OAuth2 Roles and Authorization Flow
Resource Pools
Connection pools (database, network) or thread pools manage scarce system resources.
Lesson 232When Singleton is Appropriate
Resource protection
(no threads stuck waiting)
Lesson 1319Circuit Breakers in Distributed Systems
Resource quotas and policies
Apply different resource limits, network policies, and access controls per namespace.
Lesson 1446Namespaces for Resource Isolation
Resource utilization
(CPU, memory) to identify bottlenecks
Lesson 1189Performance Measurement Basics
Resource utilization metrics
tell you how hard your infrastructure is working—and where it's about to break.
Lesson 1208Resource Utilization Metrics
Resource waste
(better utilization across varying tenant loads)
Lesson 1528What is Multi-Tenancy
Resource-based authorization
ties permissions directly to individual resources.
Lesson 1029Resource-Based and Relationship-Based Authorization
Resource-centric control matters
Each file, document, or object needs its own distinct set of permissions.
Lesson 1026Access Control Lists (ACLs)
Resource-Oriented URLs
Model your endpoints around business resources, not actions.
Lesson 1314RESTful Inter-Service Communication
resources
(nouns like "users," "orders," "products"), RPC organizes around **actions** (verbs like "getUser," "createOrder," "calculateShipping").
Lesson 798What is RPC and How It Differs from RESTLesson 1482Terraform Resources and ProvidersLesson 1484Terraform Modules and Reusability
Respect
Team members respect each other as capable, independent people
Lesson 1581Scrum Framework Overview
Respect "do not disturb"
Balance urgency with focus time.
Lesson 1622Review Timing and Response Expectations
Respect boundaries
Don't contact vacationing teammates unless it's a genuine emergency (not "I can't find that file" or "How does this feature work?
Lesson 1860Vacation and Time Off
Respectful disagreement
Challenging ideas without attacking people, maintaining professionalism even in heated technical debates
Lesson 1898Collegiality and Fair Treatment
Respond to feedback
promptly and professionally
Lesson 1880Contributing to Open Source Projects
Response
How the system should react (e.
Lesson 1248Quality Attribute Scenarios
Response returned
– Results go back to the caller or trigger downstream events
Lesson 1520Serverless Event-Driven Execution Model
Response section
success case first (200, 201), with schema and example
Lesson 831Reference Documentation Structure
Response urgency
P0 means wake everyone up at 3 AM.
Lesson 1164Incident Severity Levels
Responsive design
means your layout, navigation, and interactive elements adjust based on available screen space.
Lesson 568Mobile and Responsive Testing
REST (Representational State Transfer)
is an architectural style for designing networked applications, particularly web services.
Lesson 755What REST Is and Why It Matters
Restrict deletion
Prevent accidental removal of important branches
Lesson 89Branch Naming Conventions and Policies
Result
or **Either** types that explicitly wrap success or failure, combining explicit contracts with type safety.
Lesson 1085Error Handling Philosophies: Return Codes vs ExceptionsLesson 1349Rebuilding State from Events
Result Pattern
returns an object that explicitly contains *either* a success value *or* an error.
Lesson 1089The Result Pattern and Railway-Oriented Programming
Result types
When available, for errors that are part of normal operation
Lesson 1085Error Handling Philosophies: Return Codes vs Exceptions
Retaliation for previous whistleblowing
Lesson 1921Whistleblowing and Legal Protections
Retire
alerts that no longer serve a purpose
Lesson 1162Alert Evaluation: Regular Review and Refinement
retries
(try again intelligently), and handling **network partitions** (when parts of your system can't communicate).
Lesson 1112Fallacy 1: The Network is ReliableLesson 1318Service Mesh and Communication Infrastructure
Retries with backoff
address transient network issues—try again, but with increasing delays to avoid overwhelming struggling services.
Lesson 1320Handling Partial Failures and TimeoutsLesson 1508Designing for Failure and Self- Healing
Retrospectives
(which you've already learned) are the most formal loop—dedicated sessions to reflect on what worked, what didn't, and what to try next.
Lesson 1645Creating Feedback Loops in Teams
Retry
with exponential backoff (we'll cover this later)
Lesson 1094The Timeout Pattern
Retry aggressively
, overwhelming A when it tries to recover
Lesson 1104Cascading Failures
Retry capabilities
Failed tasks can be re-queued automatically
Lesson 1385Asynchronous Processing and Message Queues
Retry Pattern
handles these transient failures by automatically attempting the operation again, rather than immediately giving up.
Lesson 1095The Retry Pattern
Retry patterns
affect both success rates and load.
Lesson 1209Error Rate and Success Metrics
Retry with Backoff
Temporary network glitches or database locks often resolve themselves.
Lesson 1090Error Recovery and Graceful Degradation
Return available data
with metadata indicating:
Lesson 1110Partial Response Strategies
Return codes
force callers to check for error conditions explicitly.
Lesson 1085Error Handling Philosophies: Return Codes vs Exceptions
Return complete results
Every response should be self-contained.
Lesson 1522Stateless Function Design
Return consistent metadata
Your response should include total count (after filtering), current page, and links to navigate— regardless of which combination of features is used.
Lesson 789Combining Pagination, Filtering, and Sorting
Return the fallback result
to the caller
Lesson 1100The Fallback Pattern
Return the modified object
Helps clients update their local state without a follow-up query
Lesson 808Mutations: Writing Data in GraphQL
Return type
what shape the data takes
Lesson 941Query Object Pattern
Return values
Does the function return the expected result?
Lesson 482State Verification: Testing Outcomes
Reusability improves
Well-separated code can be reused in different contexts
Lesson 166Separation of Concerns
Reusable
Could theoretically be used across multiple applications in the same business domain
Lesson 1274Entities: Enterprise Business RulesLesson 1425Container Images and Layers
Reusable Parent Fixtures
Create commonly-needed parent fixtures once (like a "test user") and reference them from multiple child fixtures.
Lesson 546Managing Fixture Dependencies
Reuse infrastructure
Share test containers, database connections, or service instances across test classes when possible (while maintaining test independence).
Lesson 538Performance Considerations with Real Dependencies
Revenue
E-commerce sites lose sales with every second of delay
Lesson 1186What is Performance and Why It Matters
Revenue drivers
Which technical capabilities directly enable the company to make money or reduce costs?
Lesson 1805Aligning Vision with Business Goals
Revenue-blocking issues
prevent customers from completing transactions
Lesson 1568What are Hotfixes and When to Use Them
Reversible
you can roll back if problems arise
Lesson 1777Migrating Functionality Incrementally
Reversible decisions
Whenever possible, design choices should be easy to undo or modify.
Lesson 1227Evolutionary Architecture
Revert fast
If the fix isn't obvious within 10 minutes, revert the commit.
Lesson 653Fixing Broken Builds Immediately
Revert your change
go back to working code
Lesson 1755The Mikado Method
Reverting
If a feature causes issues, you can cleanly revert one atomic commit.
Lesson 108Atomic Commits: One Logical Change
Review and approve
You decide if changes are intentional (update baseline) or bugs (fix code)
Lesson 579Visual Regression Testing Fundamentals
Review and discuss
Team members review code, suggest changes, and approve
Lesson 85GitHub Flow: Simplified Branch-and-Merge
Review and prune regularly
audit which alerts haven't triggered meaningful responses in 6 months.
Lesson 1158Alert Fatigue: Reducing False Positives
Review and unblock
Help teammates overcome technical obstacles and review critical code
Lesson 1786What is a Tech Lead?
Review false positive rates
Track how often alerts fire without an actual problem.
Lesson 1162Alert Evaluation: Regular Review and Refinement
Review feedback gets overwhelming
If you're receiving dozens of comments across different areas, smaller PRs would make both reviewing and addressing feedback more manageable.
Lesson 107Knowing When to Split a Pull Request
Review is integrated
Reviewers can catch missing or incorrect documentation during code review
Lesson 1706Documentation as Code
Review Participation
tracks who reviews whom.
Lesson 1623Measuring and Improving Review Culture
Review results
Did the metric improve?
Lesson 1599Continuous Improvement with Kanban
Review Workflow
Team members review passing PRs, checking for breaking changes
Lesson 685Automating Dependency Updates
Review workflows
Team members can approve visual changes through a web interface
Lesson 580Implementing Visual Testing Tools
Review your log
Use `git log` to see what story your commits tell
Lesson 114Commit Hygiene Before Push
Reviewing code immediately
through pair programming or quick pull requests, catching issues before they compound
Lesson 1835Building Quality In
Revocation
– The old secret is permanently disabled
Lesson 745Secret Rotation and Lifecycle Management
Reward risk-taking over perfection
Celebrate the proof-of-concept that failed but taught valuable lessons.
Lesson 1852Psychological Safety for Innovation
Rewrite the test
to call that component directly, without going through the UI or full application stack
Lesson 414Moving Tests Down the Pyramid
Rewriting
means throwing away existing code and building something new from scratch.
Lesson 334Refactoring vs RewritingLesson 1757When to Rewrite vs Refactor
RFC
Request for Comments) is a formal written proposal that describes a planned change to a system.
Lesson 1686Design Documents and RFCs
Rich abstractions
pagination helpers, retry logic, domain models
Lesson 856Auto-Generated vs Hand-Written SDKs
Rich request context
Commands carry all necessary data and behavior
Lesson 294Combining Chain and Command Patterns
Right Hand
archetypes work directly alongside an executive (VPE, CTO), extending that leader's reach.
Lesson 1819The Four Staff Archetypes
Right reason
"Method `calculateDiscount` not found" or "Expected 10, got 0"
Lesson 490Seeing the Test Fail for the Right Reason
Right to delete
Request deletion of personal information
Lesson 1908Privacy Regulations (GDPR, CCPA)
Right to know
What personal information is collected and how it's used
Lesson 1908Privacy Regulations (GDPR, CCPA)
Right to opt-out
Of data sales to third parties
Lesson 1908Privacy Regulations (GDPR, CCPA)
Rigid and brittle
Adding new parameters forces changes everywhere the method is called
Lesson 338Bloaters: Long Parameter List
Rigid and fragile
Changes ripple unpredictably through tangled dependencies
Lesson 337Bloaters: Large Class and God Object
Ripple Effects
A bug fix in one area creates bugs elsewhere.
Lesson 179The Cost of Tight CouplingLesson 202Why Modification is Risky
risk
problems surface early when they're cheaper to fix, not at the end when everything's supposedly "done.
Lesson 13Iterative and Incremental ModelsLesson 152The Need for PrioritizationLesson 427Finding the Testing Sweet Spot
Risk assessment
Potential impact and mitigation
Lesson 895Testing and Reversibility
Risk exposure
Customer-facing or security-critical areas demand priority
Lesson 1772Managing Technical Debt During Refactoring
Risk identification
Gaps and overlaps become visible during decomposition
Lesson 1658Work Breakdown Structures (WBS)
Risk is distributed
No single integration becomes a high-stakes, nerve-wracking event.
Lesson 628The Core CI Principle: Integrate Early and Often
Risk Management
Architecture forces you to confront hard problems early—"How will we handle failure?
Lesson 1224Why Architecture MattersLesson 1542What is Release Planning
Risk mitigation
Upgrades introduce breaking changes; LTS gives breathing room
Lesson 1571Long-Term Support (LTS) Fundamentals
Risk of the fix
Could the proposed change make things worse?
Lesson 1741Emergency Production Fixes
Risk reduction
Multiple viewpoints catch flaws and biases earlier
Lesson 1848The Business and Ethical Case for Diversity
Risk-based
Low/Medium/High complexity
Lesson 1614T-Shirt Sizing and Alternative Scales
Risk-based testing
means directing your testing energy toward the code that poses the highest risk if it fails.
Lesson 402What to Test: Risk-Based TestingLesson 430Testing in Time-Constrained Projects
Risk-based testing drives decisions
If your payment processing code absolutely cannot fail, invest heavily in testing at all levels for that component.
Lesson 413Adapting the Pyramid to Your Context
Roll forward
Fix the bug and deploy again (takes time)
Lesson 719Deployment Risk and the Need for Rollback
Rollback
is your safety net—the ability to quickly return to the last known-good state.
Lesson 719Deployment Risk and the Need for Rollback
Rollback procedure
Step-by-step reversal instructions
Lesson 895Testing and Reversibility
rolling deployment
updates your application instance by instance, gradually replacing the old version across your entire server fleet.
Lesson 711Rolling DeploymentsLesson 1476Blue-Green and Rolling Deployments
rolling deployments
, each new instance is verified before the next one deploys.
Lesson 715Deployment Health ChecksLesson 1476Blue-Green and Rolling Deployments
Rollouts and rollbacks
Deploys new versions gradually, can revert if problems occur
Lesson 1442What is Kubernetes and Why Use It
Root cause
The systemic reason the incident occurred (not "someone made a mistake")
Lesson 1742Learning from Production IncidentsLesson 1746Contributing Factors vs. Root Causes
Root cause identification
State what fundamentally failed.
Lesson 1183Writing Effective Incident Narratives
Root causes
are the fundamental issues that, if addressed, would prevent the problem from happening again.
Lesson 1746Contributing Factors vs. Root Causes
Rotate responsibility
Don't make one person the bottleneck.
Lesson 1622Review Timing and Response Expectations
Rotating liaisons
or embedded engineers who bridge teams
Lesson 1830Collaboration Over Silos
Rotation
– A new secret replaces the old one
Lesson 745Secret Rotation and Lifecycle Management
Rotation Design
Distribute on-call duties fairly across the team.
Lesson 1857On-Call and After-Hours Work
Rotation Nightmares
When you need to change a password (and you will), you must modify code, rebuild, and redeploy your entire application instead of simply updating a configuration value.
Lesson 741The Dangers of Hardcoding Secrets
Round-robin for input
Explicitly ask quieter team members for their thoughts.
Lesson 1636Running Technical Discussions
Round-robin speaking
Instead of open discussion where assertive voices dominate, explicitly invite each person to contribute.
Lesson 1851Inclusive Communication and Collaboration
Round-tripping
Transform data back and forth
Lesson 608The Test Oracle Problem
Route
traffic through the facade to the new version
Lesson 1777Migrating Functionality Incrementally
Route new requests
to the microservice while legacy requests still hit the monolith
Lesson 1336Migrating from Monolith to Microservices
Route through the abstraction
Make all callers use the new abstraction instead of calling legacy code directly
Lesson 1768Branch by Abstraction
Router-level splitting
Your API gateway or router directs requests to different handlers based on version
Lesson 794Managing Multiple API Versions
Routes requests
to either legacy or new system based on migration state
Lesson 1776Implementing the Facade Layer
Routine reviews
Aim for first response within 24 hours (or by end of next business day).
Lesson 1622Review Timing and Response Expectations
Routine tasks
with well-understood patterns (CRUD endpoints, simple bug fixes)
Lesson 1630When to Use Pairing vs Mobbing
Routing
determines *who* receives an alert initially.
Lesson 1161Alert Routing and Escalation Policies
Row estimates
How many rows the database expects to process
Lesson 879Understanding Query Execution Plans
Row-level locks
Only specific rows are locked, allowing concurrent transactions to work with other rows in the same table
Lesson 916Row-Level vs Table-Level Locking
RPC (Remote Procedure Call)
is an API design paradigm where you expose methods or functions that clients can invoke remotely.
Lesson 798What is RPC and How It Differs from REST
Rule
Every column must contain atomic (indivisible) values, and each row must be unique.
Lesson 861The Normal Forms (1NF, 2NF, 3NF)
Rule-based filters
might screen job applications by requiring 10+ years of experience for a technology that's only 8 years old—accidentally filtering out self-taught developers or career changers.
Lesson 1918Bias in Non-ML Systems
Run
Execute the release in the target environment.
Lesson 750Backing Services and Build-Release-Run Factors
Run both versions
simultaneously during a transition period
Lesson 552Contract Versioning and Evolution
Run experiments when possible
Feature flags let you test changes on 5% of traffic before full rollout.
Lesson 1829Data-Driven Decision Making
Run independently
Never assume another test ran first or left data behind
Lesson 574Isolating Tests from Each Other
Run linters
to catch style violations automatically
Lesson 393Pre-commit Hooks and Git Hooks
Run sparingly
Execute these tests less frequently than unit tests
Lesson 533Testing with Real External APIs
Run the same benchmarks
on new code (CI/CD pipeline, pre-deployment)
Lesson 1211Baseline Metrics and Regression Detection
Run the test again
it should now pass
Lesson 1758What Are Characterization Tests
Run with minimal privileges
Apply the principle of least privilege
Lesson 1057Command Injection and OS Command Execution
Runbook
Procedural instructions for a specific technical task (e.
Lesson 1168Runbooks and Playbooks
Runbook maintenance
Documenting procedures for common issues
Lesson 1838Production Ownership and On-Call
Runbook References
Link to or embed the URL of the runbook that addresses this specific alert.
Lesson 1160Alert Context: Including Diagnostic Information
Runbooks
and **playbooks** are pre-written, step-by-step guides that document how to handle specific incidents or operational tasks.
Lesson 1168Runbooks and PlaybooksLesson 1185Building a Learning Culture from Incidents
Runs automated tests
(unit, integration, etc.
Lesson 627What is Continuous Integration?
Runs linters
to catch style violations
Lesson 394CI-Based Quality Gates
Runs the build
to compile or package the application
Lesson 636What is a CI Server
Runtime Configuration Changes
allow the application to reload configuration without restarting.
Lesson 732Configuration Changes Without Redeployment
Runtime overrides
(environment variables, command-line flags)
Lesson 729Default Values and Configuration Hierarchies
Runtime visibility
Logs, metrics, and traces showing internal operations
Lesson 1244Testability and Observability

S

SA
(ShareAlike): Derivatives must use the same license (like copyleft)
Lesson 1869Creative Commons and Non-Code Licenses
Sacrificing range queries
You cannot efficiently query ranges like "all users from A to M" because consecutive keys hash to random partitions.
Lesson 1398Partitioning Strategies: Hash-Based
Safe methods
produce no side effects on the server—they only read or retrieve data without modifying anything.
Lesson 765Safe and Idempotent Methods
Safe re-runs
If a deployment fails halfway, you can simply run it again
Lesson 1467Idempotency in Infrastructure Provisioning
Safe-to-fail experiments
create space for calculated risk-taking by intentionally designing experiments where failure is acceptable, contained, and educational.
Lesson 1841Safe-to-Fail Experiments and Innovation Time
Safer
reduced risk of unintended side effects
Lesson 186Why Software Must Be Designed for Change
Safer refactoring
Small changes are easier to undo or adjust
Lesson 493Taking Small Steps in TDD
Safety or security risks
threaten users or systems
Lesson 1920Speaking Up: When and How to Raise Concerns
Safety thresholds
some values are always dangerous regardless of patterns
Lesson 1157Threshold Selection: Static vs. Dynamic Baselines
safety-critical systems
(aviation, medical devices, automotive) where regulators require proof that every logic condition matters and is properly tested.
Lesson 601Condition and Modified Condition CoverageLesson 1837Zero-Defect Mindset
Saga Pattern
Break long transactions into smaller, local transactions in each service.
Lesson 1310Managing Cross-Service Data ConsistencyLesson 1420Distributed Transactions with Saga Pattern
Same term, different meanings
are isolated (e.
Lesson 1306Domain-Driven Design Bounded Contexts
Same time, same place
Consistency builds routine
Lesson 1603Daily Standup: Goals and Format
SAMEORIGIN
Can only be framed by pages from your own domain
Lesson 1073X-Frame-Options and Frame Ancestors
Sampling problems
If your facial recognition training set contains 90% lighter-skinned faces, the model will perform poorly on darker-skinned individuals.
Lesson 1914Bias in Training Data
Sampling profilers
work like a photographer taking snapshots at regular intervals.
Lesson 1195Types of Profilers: Sampling vs Instrumentation
Sampling-based approaches
that check state periodically (e.
Lesson 1199Profiling in Production vs Development
Sanitization
transforms input to remove or neutralize threats.
Lesson 1060Input Validation and Sanitization
Sanitize sensitive data
before copying (PII, credentials, payment info)
Lesson 1739Reproducing Production Issues Safely
Sanity test
Narrow but focused—verifies specific functionality deeply
Lesson 423Smoke and Sanity Tests: Quick Health Checks
Sanity tests
are similar but slightly different—they verify that a specific area or recent change makes logical sense before proceeding.
Lesson 423Smoke and Sanity Tests: Quick Health Checks
Sarbanes-Oxley Act
(financial fraud in publicly traded companies)
Lesson 1921Whistleblowing and Legal Protections
Satisfied
Response time ≤ T (full score)
Lesson 1210Apdex and User-Centric Metrics
Saturation
How much work is queued/waiting?
Lesson 1138RED and USE Methods
Say "thank you"
Even for criticism—it means someone invested time in your work
Lesson 1619Receiving Code Review FeedbackLesson 1644Receiving Feedback with an Open Mind
Scalability requirements
(handle 100x traffic spikes) → pushes toward stateless services, horizontal scaling
Lesson 1231Quality Attributes as Primary Drivers
Scalability vs Cost
Designing for massive horizontal scalability requires additional infrastructure, monitoring, and complexity—even if you never need that scale.
Lesson 1247Quality Attribute Trade-offs
Scalable
Works across distributed architectures with multiple cache layers
Lesson 980Event-Driven Invalidation
ScalaCheck
(Scala/JVM) integrates seamlessly with JUnit and other Java testing frameworks.
Lesson 613Property Testing Tools and Frameworks
Scalar to Array
→ change from single value to collection
Lesson 500The Transformation Priority Premise
Scale and evolve
without constant refactoring
Lesson 1220Architecture as Structure
Scaling complications
You can't easily scale down (removing a server disrupts its sticky users) or add servers (existing users won't benefit).
Lesson 1392Session Affinity and Its Problems
Scaling constraints
Different components need independent scaling
Lesson 1330Microservices Are Not a Goal
Scaling is trivial
spin up 10 more instances instantly
Lesson 1382Stateless Application Design for Scalability
Scaling limitations
One component needs different resources than others
Lesson 1336Migrating from Monolith to Microservices
Scan regularly
with tools like Dependabot, Snyk, or OWASP Dependency-Check to detect known vulnerabilities (CVEs).
Lesson 1885Open Source Security and Supply Chain Risks
Scenario
A write happens on Node A, but Node B can't receive it due to the partition.
Lesson 1406The CAP Theorem: Consistency, Availability, and Partition Tolerance
Schedule before commitment
Run spikes *before* promising delivery dates
Lesson 1663Identifying Unknowns and Spikes
Scheduled cleanup sprints
dedicated to flag removal
Lesson 1566Flag Debt and Cleanup Strategies
Scheduled intervals
Refresh cache during low-traffic periods
Lesson 965Cache Warming and Preloading
Scheduled refreshes
Periodically regenerate cache entries before they expire
Lesson 989Cache Warming and Preloading
Scheduled triggers
Build runs at specific times (e.
Lesson 639Build Triggers and Webhooks
scheduler
, matching incoming jobs with available agents based on:
Lesson 640Build Agents and ExecutorsLesson 1443Kubernetes Architecture Overview
schema
is the single source of truth—it's the formal contract that describes exactly what data clients can query and what operations they can perform.
Lesson 806GraphQL Schema and Type SystemLesson 1364Message Schemas and Evolution
Schema evolution
Register new schema versions in the registry while maintaining compatibility
Lesson 1364Message Schemas and EvolutionLesson 1509Cloud-Native Data Management
schema registry
stores and validates these definitions, ensuring producers can't publish malformed events.
Lesson 1343Event Schemas and ContractsLesson 1364Message Schemas and Evolution
Schema stitching
merges multiple GraphQL schemas at the gateway level.
Lesson 820Schema Stitching and Federation
Schema visualization
showing request/response structures
Lesson 836Interactive Documentation Tools
Schema-first
= Architect draws detailed blueprints, everyone approves them, *then* construction begins
Lesson 840Schema-First vs Code-First Design
Schema-first design
means you start by writing your OpenAPI document (or similar contract) before touching any implementation code.
Lesson 840Schema-First vs Code-First Design
Schema-First Workflow
If you design the spec *before* implementing (as discussed in earlier lessons), you can generate server stubs and validate requests/responses automatically.
Lesson 845Maintaining OpenAPI Specs Over Time
Schema-to-docs generators
produce database or API documentation from schema definitions (OpenAPI/Swagger specs, GraphQL schemas, SQL DDL).
Lesson 1707Automated Documentation Generation
Scope creep
happens when new features, requirements, or tasks sneak into a project without proper evaluation or adjustment to timeline and resources.
Lesson 158Scope Creep and Change Control
Scope during employment
Some agreements extend to *all* inventions during your employment period, even personal projects
Lesson 1891Employee Agreements and Intellectual Property
Scope examples
Projects affecting multiple teams or systems
Lesson 1823The Staff Engineer Promotion Path
Score each requirement
typically 1-10 scale per criterion
Lesson 155Weighted Scoring Models
SCREAMING_SNAKE_CASE
constants everywhere
Lesson 367Naming Conventions and Consistency
Screen against common/breached passwords
(check against known bad password lists)
Lesson 993Password Policies and Requirements
Screen Readers
Blind and low-vision users navigate via text-to-speech software.
Lesson 1929Designing for Diverse Abilities
Screenshots with annotations
guide users through UIs or demonstrate actual behavior.
Lesson 1693Visual Aids and Diagrams
Scrub logs
that may contain fragments of personal data
Lesson 1903Data Retention and Deletion
Scrum Master
facilitates this meeting, ensuring it remains constructive and psychologically safe.
Lesson 1590Sprint RetrospectiveLesson 1601Sprint Planning: Purpose and Structure
SDKs
that implement those APIs in various languages
Lesson 1152OpenTelemetry and Tracing Standards
Sealed Secrets
(Kubernetes-specific) encrypt secrets before they enter Git.
Lesson 1500Managing Secrets in GitOps
Seamless Updates
Replace the cached entry while users continue reading the old (still valid) version
Lesson 971Refresh-Ahead Caching
Search code changes
`git log -S"function_name"` finds commits that added or removed that text
Lesson 117Reading Git Log: Understanding Commit History
Search Queries Without Results
Lesson 1709Documentation Health Metrics
Search ranking algorithms
might prioritize results based on click-through rates, which can amplify existing prejudices (e.
Lesson 1918Bias in Non-ML Systems
Search/visualization interface
where you query and analyze (Kibana, Grafana, etc.
Lesson 1125Centralized Logging
Seasonality
e-commerce sites with weekend spikes, B2B apps quiet at night
Lesson 1157Threshold Selection: Static vs. Dynamic Baselines
Second dispatch
Inside that `accept` method, the element calls back to the visitor with `visitor.
Lesson 319Double Dispatch in Visitor Pattern
Secondary Ports
(driven ports) are exit points where your application initiates calls *out* to external systems.
Lesson 1266Primary and Secondary Ports
Secret and configuration management
Handles sensitive data and environment configs
Lesson 1442What is Kubernetes and Why Use It
Secret management integration
Pull secrets directly from dedicated services (like those covered in lesson 744) during pipeline execution
Lesson 747Secrets in CI/CD Pipelines
Secret management services
(also called "vaults") are specialized systems designed exclusively for storing, accessing, and managing secrets.
Lesson 744Dedicated Secret Management Services
Security and compliance requirements
define who can access what, how sensitive data is protected, and which laws or standards the software must obey.
Lesson 129Security and Compliance Requirements
Security and data integrity
Where mistakes have serious consequences
Lesson 42Balancing Debt and Delivery
Security and privacy
Prevent malicious or compromised third-party scripts from silently accessing sensitive APIs.
Lesson 1076Permissions-Policy and Feature Control
Security and Trust
Anyone can verify that your published binary actually came from the claimed source code.
Lesson 691Benefits and Trade-offs
Security boundaries
Breaching one tenant shouldn't compromise others
Lesson 1528What is Multi-TenancyLesson 1837Zero-Defect Mindset
Security Breaches
Source code often gets shared widely—through version control systems, code reviews, shared repositories, or even accidentally public GitHub repositories.
Lesson 741The Dangers of Hardcoding Secrets
Security by design
means building systems that remain secure even when attackers know exactly how they work— like using a high-quality lock that can't be picked even when the attacker understands its mechanism.
Lesson 1035Security by Design, Not ObscurityLesson 1046A05: Security Misconfiguration
Security gateways
filtering malicious traffic before it reaches your application
Lesson 763Layered System Architecture
Security improvement
Centralized authentication policies and MFA enforcement
Lesson 995Single Sign-On (SSO) Fundamentals
Security incidents go unnoticed
Breaches might occur without detection
Lesson 1119Why Logging Matters
Security investigations
"Who read the admin password before the breach?
Lesson 746Access Control and Audit Logging for Secrets
Security mechanisms
Authentication methods, encryption standards
Lesson 127System Requirements
Security note
The client secret must be stored securely server-side—never in browser code or mobile apps.
Lesson 1020Implicit and Client Credentials GrantsLesson 1732Remote Debugging and Attaching to Running Processes
Security practices
Authentication, authorization, encryption standards
Lesson 1251Architecture Governance and Standards
Security requirements
(zero-trust model) → demands authentication at every boundary, encryption everywhere
Lesson 1231Quality Attributes as Primary Drivers
Security risk
Malicious clients can craft expensive queries that overwhelm your server
Lesson 821Persisted Queries and Query Whitelisting
Security scan results
"Zero critical vulnerabilities allowed"
Lesson 704Pipeline Gates and Approvals
Security teams
– prioritize compliance, vulnerability management, access control
Lesson 1812Identifying and Engaging Stakeholders
Security vs Performance
Adding encryption, authentication checks, and authorization layers makes systems more secure, but each security measure adds latency and reduces throughput.
Lesson 1247Quality Attribute Trade-offs
Security-critical dependencies
Consider flexible versioning within patch ranges to get security fixes automatically
Lesson 673Pinning vs Flexible Versioning
See the exact line
that called the next function
Lesson 1731Navigating the Call Stack and Stack Frames
Seed data
– Pre-populated rows inserted before tests run.
Lesson 543Database Fixtures and Test Data
Seed random generators
Set fixed seeds so random values repeat predictably
Lesson 1722Controlling Environmental Variables
Seeding
Before tests run, populate your database with known, predictable data.
Lesson 559E2E Test Data Management
Select
a bounded piece of functionality
Lesson 1777Migrating Functionality Incrementally
Self
– Participate in lifelong learning and promote an ethical approach to practice
Lesson 1894The IEEE-CS/ACM Software Engineering Code of Ethics
Self-descriptive messages
Each request contains all information needed to understand it
Lesson 759Uniform Interface Principle
Self-explanatory
`calculateTotalPrice()` instead of `calc()`
Lesson 365Intention-Revealing Names
Self-hosted database
You install PostgreSQL on your own VMs, configure clustering, schedule backups, apply security patches
Lesson 1511What Are Managed Services
Self-hosted infrastructure
is like having the chef: you control everything but must manage all the cooking, cleaning, and equipment maintenance yourself.
Lesson 1511What Are Managed Services
Self-organizing teams
produce the best architectures and designs
Lesson 1580The Twelve Principles Behind the Agile Manifesto
Semantic HTML
`<button name="submit">` – uses meaningful attributes
Lesson 563Locator Strategies and Best Practices
Semantic Locks
Have services place locks (like "pending" flags) on resources during saga execution.
Lesson 1371Handling Saga Isolation Anomalies
Semantic Versioning (SemVer)
, a standardized system for communicating what kind of changes a library release contains.
Lesson 669Semantic Versioning (SemVer)
Send the challenge
(not the verifier!
Lesson 1019Authorization Code Grant with PKCE
Sensitive information
is a subset of personal data that carries higher risk if exposed.
Lesson 1900Personal Data and Sensitive Information
Separate facts from opinions
Lead with objective observations, then share your professional judgment.
Lesson 1920Speaking Up: When and How to Raise Concerns
Separate ideas from identity
Attack the argument, never the person.
Lesson 1815Managing Disagreement Constructively
Separate infrastructure from logic
"Set up database schema" + "Implement query layer"
Lesson 1662Task Sizing and the Two-Day Rule
Separate slow tests
Mark or organize slow integration tests separately so developers can run fast tests frequently and slow tests less often (like before commits or in CI).
Lesson 538Performance Considerations with Real Dependencies
Separate them
Tag or isolate integration tests using real APIs
Lesson 533Testing with Real External APIs
Sequence diagrams
illustrate how objects or services interact over time, perfect for API calls or authentication flows.
Lesson 1693Visual Aids and Diagrams
Sequential consistency
Operations appear in some total order, but not necessarily real-time order
Lesson 1410Consistency Models and the Spectrum
Sequential misses
(like scanning through unique IDs) create consistent poor performance.
Lesson 959Cache Hit Ratios and Effectiveness
Serializable
Prevents all three anomalies
Lesson 904What Isolation Levels Protect Against
Serializable Snapshot Isolation (SSI)
A modern technique tracking dependencies between transactions
Lesson 908Serializable Isolation
Serialization cost
– Converting objects, timestamps, and stack traces into text consumes CPU cycles.
Lesson 1127Logging Performance Considerations
Server load
(the backend handles fewer duplicate requests)
Lesson 758Cacheability Constraint
Server strain
increases as databases must fetch and serialize all results at once
Lesson 783Why Pagination Matters
Server-side
You tell the host you need a table, and they escort you wherever they think is best.
Lesson 1324Client-Side vs Server-Side Discovery
Server-side choices matter
Selecting a cloud region powered by renewable energy versus coal makes a measurable difference.
Lesson 1931Environmental Impact of Software Systems
Server-Side Discovery
The client makes a request to a load balancer or API gateway at a well-known location.
Lesson 1324Client-Side vs Server-Side Discovery
Server-side rendered pages
where the server manages most state
Lesson 1016Sessions vs Tokens: Choosing the Right Approach
Serverless composition
chains functions together into larger processes.
Lesson 1523Serverless Composition and Orchestration
Serverless computing
is a cloud execution model where you write and deploy code without provisioning, configuring, or managing servers.
Lesson 1519What is Serverless and Function as a Service
ServerSpec
(for Ruby-based tools like Chef) and **Testinfra** (for Ansible) let you write tests that check the *outcome* of your configuration: "Is nginx installed?
Lesson 1494Testing Configuration Code
Service
acts as a permanent entry point for a group of pods.
Lesson 1457Services and Network Abstraction
Service A
500 lines managing the entire order lifecycle (placement, modification, fulfillment, cancellation)
Lesson 1301Size and Scope Guidelines
Service B
2000 lines handling payment processing with fraud detection, multiple payment gateways, and reconciliation
Lesson 1301Size and Scope Guidelines
Service Discovery
Use dynamic service registries (like Consul, etcd, or Kubernetes DNS) rather than hardcoded addresses.
Lesson 1116Fallacy 5: Topology Doesn't ChangeLesson 1323Service Discovery FundamentalsLesson 1337Trade-offs: Complexity vs. Flexibility
Service lead
You balance coding with architecture.
Lesson 1793The Tech Lead's Scope
Service Level Indicator (SLI)
is a carefully selected metric that measures a specific aspect of your service's reliability from the user's perspective.
Lesson 1171Understanding Service Level Indicators (SLIs)
Service Level Objective (SLO)
is a specific target value or range for a Service Level Indicator (SLI).
Lesson 1174Service Level Objectives (SLOs): Setting Reliability Targets
service mesh
is a dedicated infrastructure layer that manages inter-service communication concerns *outside your application code*.
Lesson 1318Service Mesh and Communication InfrastructureLesson 1507Cloud-Native Service Communication
Service ownership
Database alerts route to the DB team, API alerts to backend engineers
Lesson 1161Alert Routing and Escalation Policies
Service-to-service communication
Microservices authenticating to each other
Lesson 996Certificate-Based Authentication
Services
to ensure traffic reaches healthy pods.
Lesson 1455ReplicaSets and Ensuring Desired State
Services become slow
(resource exhaustion)
Lesson 1093Introduction to Resilience Patterns
Services solve this problem
by acting as a stable abstraction layer in front of a dynamic set of pods.
Lesson 1447Services and Network Abstraction
Session Creation
If match succeeds, server creates an authenticated session
Lesson 992Username and Password AuthenticationLesson 1007Session-Based Authentication Fundamentals
Session data
lives in Redis or similar external caches, not in-memory on servers
Lesson 1477Handling State in Immutable Systems
Session fixation
Accepting user-supplied session identifiers instead of generating new ones after authentication.
Lesson 1048A07: Identification and Authentication Failures
Session ID Delivery
Server sends session ID to client, typically in a cookie (`Set-Cookie: sessionId=7f3b9c2a.
Lesson 1007Session-Based Authentication Fundamentals
Session logs
90 days for debugging
Lesson 1903Data Retention and Deletion
Session Validation
Server looks up session ID in its session store, retrieves associated user data, and knows who's making the request
Lesson 1007Session-Based Authentication Fundamentals
Session-per-request
is typical in web apps: one session for the entire HTTP request lifecycle.
Lesson 950Session and Transaction Management
Set a time limit
for exploration before deciding what to keep
Lesson 520Uncertain Requirements and Prototypes
Set an outcome
A written finding, not perfect code
Lesson 1663Identifying Unknowns and Spikes
Set clear boundaries
Use lazy loading selectively, or explicitly control eager loading only for the paths you need (as covered in Eager Loading and Fetch Strategies).
Lesson 949The Object Graph Problem
Set clear objectives upfront
Begin by stating what decision needs making or what problem you're solving.
Lesson 1813Facilitating Technical Discussions
Set expectations
"I expect `sendEmail` to be called once with these arguments"
Lesson 483Behavior Verification: Testing Interactions
Set expiration dates
when creating flags
Lesson 1566Flag Debt and Cleanup Strategies
Set meaningful thresholds
Color-code green/yellow/red zones so problems are obvious
Lesson 1144Dashboard Design Principles
Set review points
Schedule a retrospective to evaluate the decision's outcomes
Lesson 1816Making Decisions When Consensus Fails
Set technical direction
Choose technologies, define architecture patterns, and establish coding standards
Lesson 1786What is a Tech Lead?
Setter method
Change the strategy after construction (runtime flexibility)
Lesson 314Implementing Strategy with Composition
Setter/Property Injection
Dependencies set after construction
Lesson 225DIP and Dependency Injection
Setting priorities
what gets built first, second, third
Lesson 21The Product Owner and Business Stakeholders
setup
(runs before each test) and **teardown** (runs after each test) methods.
Lesson 448Using Test Setup and Teardown MethodsLesson 459Test Setup and Teardown
Setup methods
run before each test to:
Lesson 459Test Setup and Teardown
Severity
Is this truly an emergency, or can it wait for normal deployment?
Lesson 1741Emergency Production Fixes
Severity level
Critical alerts go to senior engineers; warnings to team channels
Lesson 1161Alert Routing and Escalation Policies
Severity rating
(critical vulnerabilities first)
Lesson 679Dependency Vulnerability Scanning
Severity thresholds
Your runbook might say "SEV-1 incidents lasting >30 minutes require director notification"
Lesson 1169Escalation Paths
Shallow checks
"Is the server running?
Lesson 1391Health Checks and Failover
Share institutional knowledge
Don't let insights die with the old system
Lesson 1784Extracting Reusable Knowledge from Legacy Systems
Share it with others
(family and friends can view or contribute)
Lesson 73What Are Remote Repositories
Shared + Exclusive
Incompatible (reader must wait for writer)
Lesson 915Shared and Exclusive Locks
Shared + Shared
Compatible (multiple readers)
Lesson 915Shared and Exclusive Locks
Shared between containers
Multiple containers can access the same volume
Lesson 1429Container Storage and Volumes
Shared collections
that tests add to or clear
Lesson 458Avoiding Shared Mutable State
Shared communication channels
(Slack, wikis, RFCs) accessible across departments
Lesson 1830Collaboration Over Silos
Shared data consistency
When modules read and write to shared data structures or databases, do they agree on the schema and meaning of that data?
Lesson 525Testing Cross-Module Communication
Shared fate
If services always deploy together or fail together, they're functionally coupled and should probably merge.
Lesson 1312Getting Service Granularity Right
Shared fixtures
are set up once before all tests run and torn down once at the end.
Lesson 542Shared vs Per-Test Fixtures
Shared ownership
Everyone cares about the final product, not just "their part"
Lesson 24Cross-Functional TeamsLesson 1832Defining Quality Culture
Shared quality culture
Everyone feels responsible for maintaining standards
Lesson 1833Collective Code Ownership
Shared responsibility
Everyone owns quality, deployment, and uptime
Lesson 15DevOps and Continuous Delivery in the SDLC
Shared standards matter
The team agrees on practices like running pre-commit checks, keeping commits small, and maintaining fast build times.
Lesson 648The Team's Responsibility for CI
Shell commands
Deleting files uses `rm` on Unix but `del` or `Remove-Item` on Windows.
Lesson 666Cross-Platform Build Considerations
Shipping to learn
, not shipping to be done
Lesson 1827Bias for Action and Iteration
Short-Lived Branches
If branches exist at all, they live for hours, not days.
Lesson 83Trunk-Based Development
Shotgun Surgery
is the opposite: *one conceptual change requires modifying many unrelated classes*.
Lesson 340Change Preventers: Divergent Change and Shotgun Surgery
Should I keep trying
Retrying might make things worse if the service is overloaded.
Lesson 1103What Are Partial Failures?
Show professionalism
Demonstrates you care about quality
Lesson 101Self-Reviewing Before Submission
Show trade-offs
What we gained and what we sacrificed
Lesson 1252Communicating Architecture to Stakeholders
Side effects
What else does this impact?
Lesson 111Commit Message Body: The Why, Not the What
Signal
Your class probably has too many dependencies.
Lesson 511Listening to Test Pain
Signal completion
(exit with appropriate status code)
Lesson 1506Health Checks and Graceful Shutdown
Signature
Proves the token hasn't been modified using a secret key
Lesson 1011Stateless Authentication with JWTs
Silent consideration
Each team member privately selects a card representing their story point estimate
Lesson 1650Planning Poker and Consensus Estimation
Simple cases
For trivial differences, direct conversion might be clearer
Lesson 258When to Use the Adapter Pattern
Simple Factory Pattern
is the most basic form of factory pattern.
Lesson 241Simple Factory Pattern
Simple load balancing
– requests can go to any available server
Lesson 1504Stateless Application Design
Simple notifications
When you just need to broadcast "something happened" without complex coordination
Lesson 299Mediator vs Observer: Choosing the Right Pattern
Simple permission models
When you have straightforward operations (read/write/delete) rather than complex business rules.
Lesson 1026Access Control Lists (ACLs)
Simple routing
Most web frameworks handle path-based routing naturally
Lesson 791URI Versioning (Path-Based)
Simple systems
small apps with predictable, consistent traffic
Lesson 1157Threshold Selection: Static vs. Dynamic Baselines
Simple tests
– just pure logic verification
Lesson 1269Testing Hexagonal Applications
Simple, Stable Interfaces
For rarely-changing interfaces with single consumers, the investment in contract infrastructure may exceed the risk of breakage.
Lesson 553When to Use Contract Tests
Simpler logic
You don't need to reconstruct the cached representation
Lesson 979Cache-Aside Invalidation Pattern
Simplicity Over Complexity
pragmatic decisions often favor simpler solutions that ship and work over complex "future-proof" designs that may never be needed.
Lesson 1826Pragmatism and Trade-off Thinking
Simplicity—maximizing work not done
is essential
Lesson 1580The Twelve Principles Behind the Agile Manifesto
Simplification
Hide complexity behind clean interfaces (Facade)
Lesson 281Complexity vs Flexibility Trade-off
Simplified debugging
When something breaks, you know exactly what's running everywhere.
Lesson 1478Benefits and Challenges of Immutability
Simplified systems
Less data means simpler storage, processing, and maintenance
Lesson 1901Data Minimization Principle
Simplified testing
Test multiple packages together before committing
Lesson 684Monorepo Dependency Management
Simplifies future changes
adding a field to the object doesn't change every call site
Lesson 353Introduce Parameter Object
Simplify your codebase
Dead code and unused functions still represent surface area—attackers can potentially exploit them even if your legitimate use cases don't touch them.
Lesson 1038Minimize Attack Surface
Simplifying assertion logic
that appears in multiple tests
Lesson 502Refactoring Test Code
Single entry point
One load balancer IP for many services
Lesson 1463Ingress Controllers and HTTP Routing
Single flattened table
Simpler queries but repeated data and loss of object structure
Lesson 933Data Type and Granularity Mismatches
Single letters (outside loops)
→ `x`, `y`, `z` are fine for coordinates, but otherwise use `distance`, `velocity`, `userName`
Lesson 366Avoiding Meaningless and Generic Names
Single logical purpose
means one commit or pull request should do one thing: fix a bug, add a feature, refactor a function, or update documentation—not all four.
Lesson 100Writing Small, Focused Changes
Single point of failure
If that person is compromised, the entire system is at risk
Lesson 1037Separation of Duties
Single Responsibility
Each extracted function should do *one thing*.
Lesson 385Breaking Down Complex Functions
Single Responsibility Principle
you've already learned—but applied specifically to interfaces.
Lesson 215Interface Segregation Principle: No Client Should Depend on Unused Methods
Single Responsibility Principle (SRP)
states that a class should have only **one reason to change**—meaning it should have one primary responsibility or job.
Lesson 194What is the Single Responsibility PrincipleLesson 197Cohesion and SRP
Single Responsibility Violations
A test that needs dozens of setup lines or tests multiple unrelated behaviors?
Lesson 507TDD as a Design Tool
Single Sign-On (SSO)
is an authentication mechanism that allows a user to log in once with one set of credentials and gain access to multiple applications or systems without being prompted to log in again at each one.
Lesson 995Single Sign-On (SSO) Fundamentals
Single Table Inheritance
puts all classes in one table with a discriminator column.
Lesson 932Inheritance and Relational Mapping Strategies
Singleton + Factory Method
A Singleton can serve as a central factory that manages object creation across your application, ensuring both single-instance control and flexible object instantiation logic.
Lesson 254Combining Creational Patterns
Singleton instances
with changeable state
Lesson 458Avoiding Shared Mutable State
Singleton pattern
ensures a class has only one instance and provides a global point of access to it.
Lesson 228The Singleton Pattern: Intent and Structure
Singleton resources
represent a single, specific item (like `/users/123`, `/products/456`, `/orders/789`)
Lesson 777Singleton vs Collection Resources
Situation
"During yesterday's code review.
Lesson 1643Giving Constructive Feedback
Situation-Behavior-Impact
pattern:
Lesson 1643Giving Constructive Feedback
Size parameters
Control how large/complex generated values become
Lesson 614Input Generation Strategies
Skepticism
recognizing that most "revolutionary" tools create more problems than they solve
Lesson 1845Embracing Emerging Technologies Responsibly
Skill availability
Team only knows Python, not Go
Lesson 1232Constraints: Technical and Organizational
Skill Gaps
Writing tests before code requires a mental shift.
Lesson 521Team Adoption and Learning Curve
Skip "So that"
when the benefit is completely obvious ("As a user, I want to log out")
Lesson 144The User Story Format
Skip Decorator
if you only need one or two variations—subclassing or a simple parameter works
Lesson 283When Structural Patterns are Overkill
Skip layers
for simple operations.
Lesson 1261When Layers Become Too Thin
Skip persistence when
Messages are transient notifications or easily regenerated data (cache invalidations, metrics)
Lesson 1360Message Durability and Persistence
Skip Proxy
if you don't need lazy loading, access control, or remote communication—direct access is faster
Lesson 283When Structural Patterns are Overkill
Skip tests temporarily
to maximize learning speed
Lesson 520Uncertain Requirements and Prototypes
Skip-level or cross-functional leads
for broader organizational issues
Lesson 1920Speaking Up: When and How to Raise Concerns
Slack Channels
or dedicated forums provide asynchronous knowledge exchange—questions and answers that persist for others to discover later.
Lesson 1843Knowledge Sharing Mechanisms
Slack time
(or "float") is how much a task can be delayed without impacting the project deadline.
Lesson 1669Critical Path and Slack Time
Sleep/delay statements
(waiting is the opposite of fast)
Lesson 461Test Speed and the Fast Test Pattern
Sleep/wait statements
Artificial delays
Lesson 441Fast Feedback: Keeping Tests Quick
Slice 1
Email-only registration (UI field → validation → database → confirmation)
Lesson 1661Vertical Slicing
Slice 2
Add password (new UI fields → hashing logic → schema update)
Lesson 1661Vertical Slicing
Slice 3
Add profile picture (upload UI → storage → retrieval)
Lesson 1661Vertical Slicing
SLO violations occur
Any breach of your error budget or service level objectives signals something meaningful went wrong
Lesson 1181When to Conduct a Postmortem
Slow
(seconds or minutes instead of milliseconds)
Lesson 1279Testing in Clean Architecture
Slow database queries
(complex joins, aggregations)
Lesson 964Determining What to Cache
Slow feedback
You wait hours to discover a simple typo
Lesson 410The Ice Cream Cone Anti-pattern
Slow tests
– Integration/E2E tests, run less frequently
Lesson 463Separating Slow Tests from Fast Tests
Slower deployments
– uploading a 50MB package beats uploading 250MB
Lesson 1524Managing Dependencies and Package Size
Slower execution
They must spin up the entire application stack, interact with real databases, make actual network calls, and simulate real user interactions through the UI.
Lesson 555The Value and Cost of E2E Tests
slowest and most expensive
they simulate real user workflows, require full system setup, and are brittle when UI or dependencies change.
Lesson 408Why Pyramid Shape MattersLesson 417End-to-End Tests: Testing Complete User Flows
Small Commits
Instead of one giant commit with a complete feature, you make many tiny commits that each move the code forward safely.
Lesson 83Trunk-Based Development
Small enough
to complete in hours or a few days
Lesson 1660Decomposing Features into Tasks
Small scope
Only one commit to investigate, not dozens
Lesson 629The Feedback Loop: Speed and Confidence
Small-to-medium scale
Managing individual ACLs becomes unwieldy with thousands of resources or complex organizational hierarchies.
Lesson 1026Access Control Lists (ACLs)
Small, focused components
Each piece does one thing well
Lesson 1244Testability and Observability
Small, stable systems
with well-understood requirements and predictable technology stacks might be over-engineered by hexagonal architecture.
Lesson 1271When to Use Hexagonal Architecture
Smart comparison
Ignore dynamic content (timestamps, animations) while catching real bugs
Lesson 580Implementing Visual Testing Tools
Smoke test
Broad but shallow—touches many areas lightly
Lesson 423Smoke and Sanity Tests: Quick Health Checks
Smoke tests
verify that the most critical, fundamental functionality of your software works: Does it start?
Lesson 423Smoke and Sanity Tests: Quick Health ChecksLesson 430Testing in Time-Constrained Projects
SMS-Based Codes
The server sends a temporary code via text message.
Lesson 994Multi-Factor Authentication (MFA)
Snyk
, and **licensee** automatically scan your dependency tree and identify license conflicts.
Lesson 1877Verifying License Compatibility in PracticeLesson 1879Managing Open Source Dependencies
So that
explains the value or motivation (e.
Lesson 144The User Story Format
Soak testing
runs sustained load over hours/days to detect memory leaks or degradation.
Lesson 1212Introduction to Load Testing
Social network mapping
Identifying relationships and associations between users
Lesson 1909Surveillance and Tracking Ethics
Societal ripples
Could this recommendation algorithm amplify harm at scale?
Lesson 1933Long-term Thinking and Digital Stewardship
Software bugs
Firewalls misconfigure, routing tables corrupt
Lesson 1407Network Partitions in Practice
Software Development Lifecycle (SDLC)
is a framework that breaks down software creation into distinct, organized phases.
Lesson 9What is the Software Development Lifecycle (SDLC)?
Solution
Ensure *all* resources use HTTPS URLs—either absolute (`https://.
Lesson 1077Certificate Management and Mixed Content
Solve organizational bottlenecks
that no single team could address
Lesson 1818What is a Staff Engineer?
Solver
archetypes parachute into critical problems wherever they emerge.
Lesson 1819The Four Staff Archetypes
Some projects use `YYYY.MM.MICRO`
The year and month are mandatory, with an optional incrementing number for patches
Lesson 1552Calendar Versioning and Alternative Schemes
Some upfront thinking
is essential: You need to know your domain, identify key boundaries, and understand major components.
Lesson 512Emergent Design vs. Upfront Design
Someone answers questions
and mentors others working in that area
Lesson 1834Individual Ownership and Accountability
Someone drives improvements
and knows the component's history and quirks
Lesson 1834Individual Ownership and Accountability
Someone reviews
most changes to ensure quality and coherence
Lesson 1834Individual Ownership and Accountability
Someone wakes up
when the alert fires at 3am (or coordinates the response)
Lesson 1834Individual Ownership and Accountability
Sound Technical Judgment
Credibility grows when your assessments prove accurate.
Lesson 1795Building Technical Credibility
Source
Which stakeholder or requirement document it came from
Lesson 1236Documenting Architectural Drivers
Space complexity
How memory usage scales
Lesson 1192Big-O Notation and Algorithmic Complexity
Spaced appropriately
Not too dense, not too sparse
Lesson 1659Identifying Milestones and Deliverables
Spaghetti Code
Tangled control flow with no clear structure
Lesson 1781Identifying Design Patterns in Existing Code
Spawning processes
(heavy OS operations)
Lesson 461Test Speed and the Fast Test Pattern
Speak up about risks
You have an obligation to escalate safety concerns, even if it's uncomfortable
Lesson 1919The Engineer's Duty to Public Safety and Welfare
Special value injection
Force inclusion of known-problematic inputs (0, -1, empty strings, etc.
Lesson 616Controlling Input Distribution
Specific enough
to guide decisions (not "be excellent")
Lesson 1831Codifying and Evolving Principles
Specific Purpose
Don't bundle unrelated purposes.
Lesson 1902Informed Consent and User Control
Specification drift
happens when your actual API diverges from what the OpenAPI document describes—creating confusion, broken integrations, and eroded trust.
Lesson 845Maintaining OpenAPI Specs Over Time
Speculative generality
happens when you design abstractions for flexibility you *might* need someday, but don't actually need now.
Lesson 341Dispensables: Dead Code and Speculative Generality
Speed up tests
Avoid slow operations like database queries or API calls
Lesson 466Stubs: Providing Canned Responses
Speed up writes
Fewer rows mean faster index maintenance during `INSERT`, `UPDATE`, and `DELETE` operations
Lesson 876Partial and Filtered Indexes
Spell out words completely
`/usr` might save three characters, but `/users` communicates clearly to *everyone*.
Lesson 778Naming Conventions for Resources
Spies and mocks
sit at the top because they couple your tests most tightly to implementation details.
Lesson 476The Test Double Pyramid
spike
a short, time-boxed exploration where you write throwaway code without tests.
Lesson 505Dealing with Uncertainty in TDDLesson 1663Identifying Unknowns and Spikes
Spike testing
simulates sudden traffic surges.
Lesson 1212Introduction to Load Testing
Split
when a single context serves multiple stakeholders with conflicting needs or when the ubiquitous language becomes muddled.
Lesson 1287Evolving Bounded Contexts
Split by functionality
Break "Implement user dashboard" into "Build dashboard layout" and "Connect dashboard data"
Lesson 1662Task Sizing and the Two-Day Rule
Split or combine
alerts to better match actual operational concerns
Lesson 1162Alert Evaluation: Regular Review and Refinement
Splitting large stories
Break down epics or oversized user stories into implementable chunks
Lesson 157Backlog Management
Sponsorship
goes beyond mentorship—it's using your social capital to advocate for someone's promotion, project leadership, or visibility when they're not in the room.
Lesson 1854Allyship and Advocacy in Engineering
Spoofing
Malicious services pretending to be legitimate ones
Lesson 1115Fallacy 4: The Network is Secure
Spot dependency issues
If calls to an external service show high variance or frequent timeouts, that dependency may be unreliable or overloaded.
Lesson 1151Analyzing Traces for Performance Issues
Spot patterns
Is cycle time increasing?
Lesson 1599Continuous Improvement with Kanban
Spring Cloud Contract
integrates with the Spring ecosystem.
Lesson 551Contract Testing Tools and Frameworks
Sprint
is a time-boxed iteration—usually lasting **two weeks** (though one to four weeks is common)— during which the Development Team works to create a **potentially releasable increment** of the product.
Lesson 1586Sprints in Scrum
Sprint Backlog
(selected items + implementation plan)
Lesson 1601Sprint Planning: Purpose and Structure
Sprint Goal
(the "why" behind this sprint's work)
Lesson 1601Sprint Planning: Purpose and Structure
Sprint Planning
, selecting Product Backlog items they believe they can complete.
Lesson 1586Sprints in Scrum
Sprint Retrospective
to reflect on how they can improve their process.
Lesson 1586Sprints in ScrumLesson 1590Sprint Retrospective
Sprint Review
to demonstrate the increment to stakeholders and gather feedback, followed by a **Sprint Retrospective** to reflect on how they can improve their process.
Lesson 1586Sprints in ScrumLesson 1589Sprint ReviewLesson 1590Sprint Retrospective
spy
is a test double that wraps around a real object (or function), allowing it to execute normally while secretly recording every interaction.
Lesson 468Spies: Recording Interactions for VerificationLesson 470Distinguishing Between Mock Types
SQL
files contain database statements that can populate your test database directly—ideal when you want exact control over schema and data.
Lesson 544Fixture Files and Data Formats
SRP
enforces this by asking: "Does this class have more than one reason to change?
Lesson 197Cohesion and SRP
SSL/TLS termination
Centralized certificate management
Lesson 1463Ingress Controllers and HTTP Routing
SSO provider
(the central authentication service)
Lesson 995Single Sign-On (SSO) Fundamentals
Stable DNS hostnames
Each pod gets `<pod-name>.
Lesson 1460StatefulSets for Stateful Applications
Stable network identities
(predictable hostnames that don't change)
Lesson 1460StatefulSets for Stateful Applications
Stable, simple code
A date formatter used once that hasn't changed in years doesn't need abstraction layers.
Lesson 206When to Apply OCP
Stack Trace
– The path of function calls that led to the error
Lesson 1714Reading Error Messages and Stack Traces
Staff Engineer
(or "Staff+" engineer, which includes Principal, Distinguished, and Fellow levels) operates at a different scale entirely.
Lesson 1818What is a Staff Engineer?
Stage 1
Linting, static analysis, unit tests (seconds to 1-2 minutes)
Lesson 702Fast Feedback Loops
Stage 2
Integration tests, contract tests (minutes)
Lesson 702Fast Feedback Loops
Stage 3
End-to-end tests, performance tests (tens of minutes to hours)
Lesson 702Fast Feedback Loops
Staged rollout
Update the secret provider first, then gradually update all consumers
Lesson 745Secret Rotation and Lifecycle Management
Staging
(or QA/Pre-Production) – a production-like environment for final validation
Lesson 705Environment Promotion Strategy
Staging Area
When you're happy with some changes, you move them here to prepare them for saving.
Lesson 46The Three States: Working Directory, Staging Area, and RepositoryLesson 47Staging Changes with 'git add'
Staging Stage
– Deploy to a production-like environment for final validation
Lesson 693The Deployment Pipeline Concept
Stakeholder priorities differ
Operations wants reliability; Product wants features; Finance wants low costs
Lesson 1235Driver Conflicts and Trade-offs
Stakeholder shifts
New leadership brings different priorities.
Lesson 1237Evolving Drivers Over Time
Stakeholder-driven prioritization
means actively engaging those different voices, understanding their perspectives, and making deliberate trade-offs that the team can explain and defend.
Lesson 156Stakeholder-Driven Prioritization
Stale-While-Revalidate
Serve slightly stale data while one background process refreshes it.
Lesson 983Cache Stampede and Thundering Herd
Stand up (if possible)
Physical discomfort naturally encourages brevity.
Lesson 1604Making Standups Work
Standard methods
Everyone uses the same HTTP verbs (GET, POST, PUT, DELETE) with the same meanings
Lesson 759Uniform Interface Principle
standards
shared patterns, approved technologies, and guidelines that create consistency while still allowing teams autonomy.
Lesson 1251Architecture Governance and StandardsLesson 1621Review Checklists and Standards
Standards and policies
All APIs must follow OpenAPI 3.
Lesson 1232Constraints: Technical and Organizational
Standing up
Encourages brevity (though remote teams skip this)
Lesson 1603Daily Standup: Goals and Format
Start bisect mode
`git bisect start`
Lesson 119Finding Bugs with Git Bisect
Start conservative
It's easier to tighten an SLO later than to loosen one that customers depend on.
Lesson 1178Setting Realistic and Achievable SLOs
Start fresh with TDD
Now that you know what you're building, write tests first for the real implementation
Lesson 520Uncertain Requirements and Prototypes
Start normalized
Begin with a well-normalized design (usually 3NF).
Lesson 868Balancing Normalization and Performance
Start small
Build a basic version first to test assumptions before committing fully
Lesson 7Uncertainty and Risk Management
Start with clarity
Know your capacity.
Lesson 1858Setting Boundaries and Saying No
Start with the problem
What driver or constraint forced this decision?
Lesson 1252Communicating Architecture to Stakeholders
Start, Stop, Continue
What should we start doing?
Lesson 1606Sprint Retrospective: Continuous Improvement
Starting a timer
when beginning an operation
Lesson 1094The Timeout Pattern
Starts and stops processes
inside containers
Lesson 1426The Container Runtime
State
A traffic light changing from green → yellow → red.
Lesson 313Strategy vs State Pattern
State file versioning
to enable rollback and audit trails
Lesson 1483Terraform State Management
State inspection
Ability to query current system state
Lesson 1244Testability and Observability
State laws
that often provide broader protections
Lesson 1921Whistleblowing and Legal Protections
State locking
to prevent concurrent modifications
Lesson 1483Terraform State Management
State machine replication
Ensuring all replicas apply operations in the same order
Lesson 1414The Distributed Consensus Problem
State management
is the system that tracks the real-world resources your IaC has created, so it can compare reality against your declarations.
Lesson 1469State Management in IaC
State management overhead
As covered in lesson 1477, handling databases and user-uploaded content requires careful architectural planning and external state storage.
Lesson 1478Benefits and Challenges of Immutability
State pattern
allows an object to alter its behavior when its internal state changes.
Lesson 308The State Pattern: Definition and IntentLesson 313Strategy vs State Pattern
state verification
checking that functions return the right values or that objects end up in the correct state.
Lesson 483Behavior Verification: Testing InteractionsLesson 487Test Maintainability and Verification Style
State your reasoning
Explain which factors you weighted most heavily and why
Lesson 1816Making Decisions When Consensus Fails
State-based assertions
Test the UI state after each action.
Lesson 566Handling Dynamic and Conditional UI
State-based testing
checks the *result* of an operation.
Lesson 477Interaction-Based vs State-Based Testing
State-controlled transitions
Each State object decides its own successor state based on conditions or actions.
Lesson 310State Transitions and Encapsulation
State-law limitations
In California and several other states, employers *cannot* claim inventions made entirely on your own time, with your own equipment, that don't relate to the employer's business
Lesson 1891Employee Agreements and Intellectual Property
State-specific logic
is complex and scattered
Lesson 311State Pattern vs Conditional Logic
Stateful connections
Unlike REST's stateless requests, subscriptions tie clients to specific server instances.
Lesson 822Subscription Scalability Challenges
Stateful processes
Applications with in-memory caches or websocket connections bend Factor VI for performance reasons
Lesson 754Applying Twelve-Factor Principles in Practice
Stateful workflows
requiring persistent connections (WebSockets, database connection pooling) don't fit the stateless function model well.
Lesson 1527When Serverless is and Isn't Appropriate
stateless application
treats each request as independent, storing no user-specific data between requests.
Lesson 1382Stateless Application Design for ScalabilityLesson 1393Stateless Application DesignLesson 1504Stateless Application Design
Statement to Recursion
→ solve with recursive calls
Lesson 500The Transformation Priority Premise
Static accessor method
Provides global access to that instance, creating it if it doesn't exist yet (lazy initialization).
Lesson 228The Singleton Pattern: Intent and Structure
Static analysis tools
go deeper, detecting potential bugs, security vulnerabilities, unused variables, unreachable code, and logic errors.
Lesson 391Linters and Static Analysis ToolsLesson 392Code Formatters and Prettier
Static assets
(minified JavaScript, optimized images)
Lesson 665Build Artifacts and Output
static content
images, CSS, JavaScript, videos—anything that doesn't change per user.
Lesson 985CDN and Edge CachingLesson 1100The Fallback Pattern
Static fields
that tests modify
Lesson 458Avoiding Shared Mutable State
Static instance variable
Holds the single instance of the class itself.
Lesson 228The Singleton Pattern: Intent and Structure
Static linking
if users can replace the LGPL component
Lesson 1874LGPL and Weak Copyleft Compatibility
Static thresholds
are fixed values that never change.
Lesson 1157Threshold Selection: Static vs. Dynamic Baselines
Statistical significance
over time rather than perfect accuracy
Lesson 1199Profiling in Production vs Development
Statistics
are metadata about your data: how many rows, distribution of values, histogram of common values.
Lesson 877Index Maintenance and StatisticsLesson 885Statistics and Query Planning
Status
Proposed, accepted, superseded, deprecated
Lesson 1698What Are Architecture Decision Records (ADRs)?
Status badges
are visual indicators embedded in your README or project dashboard.
Lesson 643Build Notifications and ReportingLesson 657Build Health Metrics and Visibility
Status checks
Ensure tests pass before allowing merges
Lesson 89Branch Naming Conventions and Policies
Status codes table
all possible codes with meanings
Lesson 831Reference Documentation Structure
Status indicators
"Your changes are being processed"
Lesson 1353Eventual Consistency in CQRS
Stay compatible
with other software that's also changing
Lesson 4Time: Maintenance Over Initial Development
Stay current
with relevant technologies, security practices, and industry standards
Lesson 1897Product Quality and Professional Competence
Step Into
When the current line contains a function call, enter that function and pause at its first line.
Lesson 1728Debugger Fundamentals: Breakpoints and Execution Control
Step Out
Finish executing the current function and pause when returning to the caller.
Lesson 1728Debugger Fundamentals: Breakpoints and Execution Control
Step Over
Execute the current line and pause at the next line in the same function.
Lesson 1728Debugger Fundamentals: Breakpoints and Execution Control
Step through the flow
manually or with a debugger
Lesson 1752Reading and Understanding Legacy Code
Step-by-Step Instructions
Break complex tasks into numbered, sequential actions.
Lesson 1681User Guides and Tutorials
Steps
The actual commands—install dependencies, run tests, build artifacts
Lesson 638Build Configuration Files
Stimulus
What event or condition triggers this scenario (e.
Lesson 1248Quality Attribute Scenarios
Stolen by attackers
who gain read access to your repository
Lesson 740What Are Secrets and Why They Matter
Stop accepting new requests
(fail readiness checks immediately)
Lesson 1506Health Checks and Graceful Shutdown
Stop and refactor
This rule prevents premature abstraction while catching repetition before it spreads too far.
Lesson 329When to Refactor
Stop the line
When a build breaks, the person who committed the breaking change owns the fix.
Lesson 653Fixing Broken Builds Immediately
Storage
Charged by data volume (GB/TB per month) and operation count (read/write requests).
Lesson 1535Understanding Cloud Cost Models
Storage backend
that indexes logs for fast searching (Elasticsearch, Splunk, CloudWatch Logs)
Lesson 1125Centralized Logging
Storage daemons
(local storage management)
Lesson 1461DaemonSets and Node-Level Workloads
Storage overhead
Same data exists in multiple places
Lesson 1309Data Duplication vs Data Coupling Trade-offs
Storage throttling
Limit disk I/O operations per second (IOPS) and total storage capacity per tenant.
Lesson 1532Resource Allocation and Noisy Neighbors
Storage volumes
They can read/write to the same mounted volumes
Lesson 1444Pods: The Atomic Unit of Deployment
StorageClass
Defines *how* storage is provisioned (which cloud provider, performance tier, replication policy)
Lesson 1449Volumes and Persistent StorageLesson 1459Persistent Volumes and Claims
Store a Memento
before executing, capturing the receiver's state
Lesson 302Implementing Undo with Memento and Command
Store artifacts
in artifact repositories (we'll cover these next)
Lesson 665Build Artifacts and Output
Store state client-side
Use signed tokens (like JWTs) that contain user information
Lesson 1393Stateless Application Design
Store state externally
Use shared databases, Redis, or other external stores accessible by any server
Lesson 1393Stateless Application Design
Store the verifier
securely on the client
Lesson 1019Authorization Code Grant with PKCE
Stored XSS
Malicious script is saved in your database
Lesson 1062Cross-Site Scripting (XSS) Overview
Stored XSS (Persistent XSS)
occurs when malicious script is saved permanently in the target system—typically in a database.
Lesson 1063Types of XSS: Stored, Reflected, and DOM-Based
Story points
use relative, abstract units.
Lesson 1649Story Points vs Time-Based Estimates
Strategic denormalization
means deliberately adding redundancy or flattening data structures to speed up common read operations—while being fully aware of the trade-offs.
Lesson 865Strategic Denormalization
Strategic visibility
Making problems and solutions visible to the right people
Lesson 1820Operating at Staff+ Scale
Strategy
Limit the number of stored mementos (keep only the last 20 actions) or use a circular buffer that overwrites old snapshots.
Lesson 303Memento Serialization and Performance ConcernsLesson 313Strategy vs State PatternLesson 317Strategy vs Template Method Trade-offs
Strategy interface
– defines the method signature all algorithms must implement
Lesson 312Strategy Pattern: Encapsulating Algorithms
Stream reads
Retrieve all events for a specific stream to rebuild one entity's state
Lesson 1348Event Store Design
Strengths
Low latency (milliseconds), sophisticated routing (exchanges, bindings), easy to set up, strong support for at-most/at-least-once delivery.
Lesson 1365Choosing a Message Broker: RabbitMQ, Kafka, and Others
Stress testing
(not yet covered) pushes beyond normal limits to find breaking points.
Lesson 1212Introduction to Load Testing
Strict allowlisting
Only permit predefined, safe values
Lesson 1057Command Injection and OS Command Execution
Stricter validation
– previously accepted values now fail
Lesson 847Breaking vs Non-Breaking Changes
Structural patterns
Watch for wrapper classes (Adapter, Decorator, Facade)
Lesson 1781Identifying Design Patterns in Existing Code
Structure reduces friction
Use consistent formats, templates, or facilitation guides so people know what to expect.
Lesson 1645Creating Feedback Loops in Teams
Structured check-ins
at 30/60/90 days ensure no one falls through the cracks.
Lesson 1853Inclusive Hiring and Onboarding Practices
Structured feedback windows
Give 48-72 hours for written feedback before finalizing decisions, preventing "meeting-driven" outcomes.
Lesson 1851Inclusive Communication and Collaboration
Structured interviews
use identical questions for all candidates, making comparisons fairer.
Lesson 1853Inclusive Hiring and Onboarding Practices
Structured Reflection
Common formats include:
Lesson 1606Sprint Retrospective: Continuous Improvement
stub
is a test double that provides hardcoded answers to method calls made during tests.
Lesson 466Stubs: Providing Canned ResponsesLesson 470Distinguishing Between Mock Types
Stub network calls
Replace external dependencies with fixed responses
Lesson 1722Controlling Environmental Variables
Stubbed or mocked services
run fast and reliably, but don't catch real integration issues like authentication changes or API deprecations.
Lesson 576Handling External Services
Subscribers
(observers) register their interest and receive updates automatically
Lesson 304The Observer Pattern: Definition and IntentLesson 1358Publish-Subscribe Pattern
Subselect Fetching
uses two queries: one for the main objects, then a second with a `WHERE id IN (.
Lesson 945Eager Loading and Fetch Strategies
Subsequent Requests
Client automatically includes session ID in every request (browser sends cookie)
Lesson 1007Session-Based Authentication Fundamentals
Subsequent stages
retrieve and deploy that same artifact
Lesson 703Artifact Management in Pipelines
Substitutability
Swap implementations easily (Adapter, Bridge, Proxy)
Lesson 281Complexity vs Flexibility Trade-off
Suffix by unit
`_total`, `_seconds`, `_bytes`
Lesson 1140Metric Naming and Labels
Suite organization
Test suites bundle multiple test classes together.
Lesson 443Test Class and Suite Organization
Summarize frequently
Every 10 minutes, recap what you've heard: "So we agree API versioning is necessary; we're stuck on header-based vs path-based.
Lesson 1636Running Technical Discussions
Summarize what you've tried
"Restarted services, verified database connectivity, checked recent deploys"
Lesson 1169Escalation Paths
Superseded
A newer ADR has replaced this one entirely
Lesson 1703ADR Status and Lifecycle
Support Burden
Each active version needs maintenance, bug fixes, and potentially security patches
Lesson 851Managing Multiple API Versions
Support multiple API versions
Your SDK might need to support both API v2 and v3 simultaneously during transition periods
Lesson 857SDK Versioning and Compatibility
Support multiple versions
Producers may emit both old and new formats during transitions
Lesson 1343Event Schemas and Contracts
Support Staff
People who'll help users when things go wrong
Lesson 19Who Are Stakeholders?
Support Teams
must understand new features, known issues, and troubleshooting steps *before* customer tickets arrive.
Lesson 1546Coordinating with Stakeholders
Support tiers
Clarify which versions get bug fixes, security patches, or new features.
Lesson 676Deprecation and Version Lifecycle
Supporting career development
Providing honest feedback, writing fair performance reviews, and advocating for deserving colleagues
Lesson 1898Collegiality and Fair Treatment
Surface ambiguities
When stakeholders see it, they realize what they forgot to mention
Lesson 138Prototyping for Requirements Discovery
Surface conflicts explicitly
– Don't hide disagreements; document where priorities clash
Lesson 156Stakeholder-Driven Prioritization
Surface technical dependencies
early
Lesson 1602Effective Sprint Planning Practices
Surface the conflict explicitly
document which drivers are in tension
Lesson 1235Driver Conflicts and Trade-offs
Surveys
work well when you need breadth across many stakeholders or want quantifiable data.
Lesson 1674Understanding Stakeholder Needs and Concerns
Sustainable development pace
that can be maintained indefinitely
Lesson 1580The Twelve Principles Behind the Agile Manifesto
Sustainable growth
Adding features doesn't exponentially slow your suite
Lesson 408Why Pyramid Shape Matters
Swagger UI
and **Redoc** generate this experience automatically from your API specifications (like OpenAPI).
Lesson 836Interactive Documentation ToolsLesson 844Interactive API Documentation
Swarm on it
If the breaking author is stuck, other team members jump in to help.
Lesson 653Fixing Broken Builds Immediately
Swarm the constraint
Multiple team members collaborate to clear the highest-priority blocked item first.
Lesson 1597Identifying and Resolving Bottlenecks
Swimlanes
are horizontal rows that divide the board by category.
Lesson 1593The Kanban Board
Switch
Deploy new code that reads from the new structure
Lesson 698Database Changes in CD
Switch implementations
Use feature flags or configuration to route traffic to the new code
Lesson 1768Branch by Abstraction
Symptoms
What users actually experience (slow page loads, errors, failed transactions)
Lesson 1154Alert Fundamentals: Symptoms vs. CausesLesson 1712Understanding the Problem Before Debugging
Sync state
across distributed services in real-time
Lesson 1561Feature Flag Management Systems
Synchronization complexity
Need mechanisms (events, messaging) to keep copies updated
Lesson 1309Data Duplication vs Data Coupling Trade-offs
Synchronized Methods
Use locks so only one thread can execute the getInstance method at a time.
Lesson 229Implementing Singleton: Thread Safety Concerns
Synchronous (Request-Response)
Service A calls Service B and waits for an immediate response before continuing.
Lesson 1313Synchronous vs Asynchronous Communication
Synchronous blocking
Waiting for one operation to complete before starting the next
Lesson 1198I/O and Network Profiling
Synchronous logging
blocks your application thread until the log is written.
Lesson 1127Logging Performance Considerations
Synchronous replication
The leader waits for at least one follower to confirm it received the write before acknowledging success to the client.
Lesson 1402Leader-Follower Replication
Synchronous writing
Don't buffer logs; write them instantly so if your app crashes, you see what happened
Lesson 1128Logging in Local Development
Synchronous-only communication
prevents asynchronous processing patterns
Lesson 1225The Cost of Architectural Mistakes
Syntax validation
Lint your configuration files
Lesson 1494Testing Configuration Code
Synthetic monitoring
to simulate requests
Lesson 1525Serverless Observability and Debugging
System archaeology
is similar: you dig through old code, manuals, specifications, and process documents to uncover what a system *actually* does and what requirements it must fulfill.
Lesson 137Document Analysis and System Archaeology
System architecture matters
A monolithic application with complex business logic benefits from heavy unit testing.
Lesson 413Adapting the Pyramid to Your Context
System boundaries
first (what's inside vs outside)
Lesson 1637Explaining Complex Systems Simply
System capabilities
– What can your architecture realistically deliver given current technology and design?
Lesson 1178Setting Realistic and Achievable SLOs
System compromise
(executing arbitrary code)
Lesson 1044A03: Injection
System integration
A function that's 10% faster in isolation might not matter if it consumes only 0.
Lesson 1201Microbenchmarks and Their Limitations
System libraries
Ensure consistent versions of shared libraries (SSL, compression, etc.
Lesson 689Controlling the Build Environment
System outputs
Was the correct file created?
Lesson 482State Verification: Testing Outcomes
System state
Shared files, databases, caches, or global variables might be in different states between runs.
Lesson 1722Controlling Environmental Variables
System-level issues
(file handle exhaustion, network problems, OS-level conflicts) exist outside your code.
Lesson 1735Debugger Limitations and When to Use Alternative Tools
System-to-system dependencies
involve external factors: "Our deployment is waiting on the cloud provider to provision new infrastructure.
Lesson 1666What Are Project Dependencies
Systemic Inequalities
Algorithms trained on unequal societies naturally reflect those inequalities.
Lesson 1910What is Algorithmic Bias

T

T-shirt sizing
(S, M, L, XL) for quick, rough estimates
Lesson 1610Planning Poker and Estimation Techniques
Table-level locks
The entire table is locked, preventing others from modifying (or sometimes reading) any row in that table
Lesson 916Row-Level vs Table-Level Locking
Tables
organize comparison data, configuration options, or parameter lists more efficiently than prose.
Lesson 1693Visual Aids and Diagrams
Take time before responding
If a comment stings, step away for 10 minutes
Lesson 1619Receiving Code Review Feedback
Taking calculated risks
Backing someone for a role they're 80% ready for, then supporting them through it.
Lesson 1801Sponsorship and Career Development
Taking notes
that capture meaning, not just words
Lesson 134Interview Techniques for Requirements
Talent flexibility
Teams can work in languages they know best without forcing organization-wide standardization.
Lesson 1335Technology Heterogeneity and Experimentation
Talking to actual users
(not just stakeholders or managers)
Lesson 126User Requirements
Task diversity
Mix types of work to avoid bottlenecks (don't give everyone backend tasks if you need UI work)
Lesson 1602Effective Sprint Planning Practices
Task-focused
"As a customer, I need to search for products by category"
Lesson 126User Requirements
Task-to-task dependencies
are the most common: "We can't start database migration testing until we finish writing the migration scripts.
Lesson 1666What Are Project Dependencies
Tasks
are individual units of work (install package, copy file, restart service).
Lesson 1490Ansible Fundamentals
TCP Socket
Attempt to open a connection on a port
Lesson 1450Health Checks: Liveness and Readiness Probes
Teaching and Sharing
Technical credibility strengthens when you help others succeed.
Lesson 1795Building Technical Credibility
Team and Organizational Factors
Team size, skill sets, support capacity, or organizational standards that influenced the situation.
Lesson 1701Writing Effective Context Sections
Team attrition
experienced engineers leave, taking institutional knowledge
Lesson 1855The Cost of Overwork
Team bottlenecks
Multiple teams are blocked waiting to deploy shared code
Lesson 1330Microservices Are Not a Goal
Team boundaries
Cannot modify the billing team's services
Lesson 1232Constraints: Technical and Organizational
Team burnout
(constant additions create stress)
Lesson 158Scope Creep and Change Control
Team Cohesion
Review conversations build shared standards and vocabulary.
Lesson 1616The Purpose and Value of Code Review
Team conflicts
Multiple teams constantly clash over the same codebase
Lesson 1336Migrating from Monolith to Microservices
Team constraints shape reality
A small team without dedicated QA might rely more on automated integration tests because they catch realistic issues with less effort than maintaining hundreds of mocked unit tests.
Lesson 413Adapting the Pyramid to Your Context
Team Context
A junior team benefits from more comprehensive tests as guardrails.
Lesson 427Finding the Testing Sweet Spot
Team experience
Junior engineers need more detailed tasks; senior engineers can work from higher-level descriptions
Lesson 1665Balancing Granularity
Team expertise
Different teams may maintain services using styles they know best
Lesson 827Mixing API Styles in Practice
Team expertise is limited
(managed services reduce operational burden)
Lesson 1541Evaluating Lock-in vs Time-to-Market Trade-offs
Team familiarity
Most developers know simple REST; HATEOAS requires education
Lesson 797HATEOAS Trade-offs and Maturity Models
Team knowledge fades
People who understood certain decisions leave
Lesson 41Code Evolution and Entropy
Team lead
You write less code, focusing on technical direction, unblocking others, and ensuring consistency.
Lesson 1793The Tech Lead's Scope
Team Level
If knowledge silos meant only one person understood the system, implement knowledge-sharing practices or documentation standards.
Lesson 1748Preventing Recurrence with Systemic Fixes
Team morale and retention
crater under sustained overwork.
Lesson 1856Sustainable Pace and the 40-Hour Week
Team readiness
Dev-prod parity (Factor X) requires infrastructure investment; prioritize it after securing team buy-in
Lesson 754Applying Twelve-Factor Principles in Practice
Team scalability
Different developers can work on modules without stepping on each other's toes
Lesson 167Abstraction and Information Hiding
Team Size
Small teams (2-5 developers) often thrive with simpler strategies like GitHub Flow or Trunk- Based Development.
Lesson 88Choosing a Strategy for Your Team
Team understanding
When you're debugging at 2 AM or onboarding a new engineer, simplicity is a gift.
Lesson 1825Simplicity Over Complexity
Team velocity killers
When existing debt already slows you down
Lesson 42Balancing Debt and Delivery
Team-to-team dependencies
occur when separate groups must coordinate: "The frontend team is blocked waiting for the backend team to expose the new endpoint.
Lesson 1666What Are Project Dependencies
TeamCity
(JetBrains' enterprise offering).
Lesson 637Popular CI Platforms
Teardown methods
run after each test to:
Lesson 459Test Setup and Teardown
Teardown step
Stop and remove all provisioned resources (usually in a `finally` or `post` block so it runs even if tests fail)
Lesson 539CI/CD Integration with Real Dependencies
Tech Talks
are scheduled presentations where engineers share deep dives into technologies, architecture decisions, or lessons learned.
Lesson 1843Knowledge Sharing Mechanisms
Technical
Must use Java 11, database can handle max 1000 requests/second, system must run on Linux servers.
Lesson 132Constraints and Assumptions
Technical architecture decisions
Which databases, frameworks, or services to use
Lesson 127System Requirements
Technical audiences
Written docs, architecture diagrams, PR reviews
Lesson 1676Communication Strategies for Different Stakeholders
Technical complexity
Dependencies, edge cases, and integration challenges that aren't visible upfront
Lesson 1648Why Estimation is Hard
Technical Constraints
What limitations existed?
Lesson 1701Writing Effective Context Sections
Technical credibility
Your past work and judgment earn respect
Lesson 1820Operating at Staff+ Scale
Technical debt
is a metaphor that compares software development shortcuts to financial debt.
Lesson 36What is Technical DebtLesson 1855The Cost of Overwork
Technical debt metrics
Is legacy code shrinking as planned?
Lesson 1810Measuring Progress Toward Vision
Technical landscape
New technologies emerge.
Lesson 1237Evolving Drivers Over Time
Technical safeguards
Encryption, audit logs, DLP systems
Lesson 1889Trade Secrets: Definition and Protection
Technology
Tools, frameworks, infrastructure, dependencies
Lesson 1744Fishbone Diagrams for Systemic Issues
Technology constraints
You're stuck with outdated tech for everything
Lesson 1336Migrating from Monolith to Microservices
Technology diversity needs
Different services genuinely require different tech stacks
Lesson 1330Microservices Are Not a Goal
Technology evolution
As languages and frameworks improve, you can incrementally adopt new technologies service-by- service, rather than requiring massive monolith rewrites.
Lesson 1335Technology Heterogeneity and Experimentation
Technology Independence
Different services can use different programming languages, frameworks, or storage technologies based on their specific needs.
Lesson 1294Defining Microservices
Technology influences strategy
Frontend-heavy applications might invert the pyramid slightly—visual components are hard to unit test meaningfully, so component integration tests become more valuable.
Lesson 413Adapting the Pyramid to Your Context
Technology maturity
New tools, frameworks, or platforms emerge.
Lesson 1808Evolving Vision Over Time
Technology obsolescence
The language, framework, or platform is unsupported or unhireable.
Lesson 1765The Economics of Legacy Refactoring
Technology Stack
List languages, frameworks, infrastructure, and third-party dependencies with version information.
Lesson 1682Architecture Documentation
Technology stacks
Approved languages, frameworks, databases
Lesson 1251Architecture Governance and Standards
Technology-agnostic
No dependencies on frameworks, databases, or external libraries
Lesson 1274Entities: Enterprise Business Rules
Template Method Pattern
lets you create a "recipe" or "skeleton" for an algorithm in a base class.
Lesson 315Template Method Pattern: Skeleton Algorithms
Temporal decoupling
(consumers can replay past events)
Lesson 1357Message Brokers vs Event Buses: Core Concepts
Temporal patterns
matter: if your cache holds yesterday's data but users want today's, your hit ratio plummets.
Lesson 959Cache Hit Ratios and Effectiveness
Temporary credentials
Generate short-lived tokens specifically for each pipeline run
Lesson 747Secrets in CI/CD Pipelines
Temporary verification tokens
24 hours maximum
Lesson 1903Data Retention and Deletion
Tenant-based partitioning
(multi-tenant SaaS): All data for `company_xyz` stays together on one node
Lesson 1399Partitioning by Entity or Tenant
Test and mark
Git checks out a commit halfway between good and bad.
Lesson 119Finding Bugs with Git Bisect
Test brittleness
If tests break whenever unrelated code changes, coupling is high
Lesson 183Measuring Coupling and Cohesion in Practice
Test coverage threshold
"Code coverage must be ≥80%"
Lesson 704Pipeline Gates and Approvals
Test data builders
create fresh objects for each test, customized as needed.
Lesson 455Test Fixtures vs Builders
Test Double Pyramid
provides a preference order for choosing test doubles in your tests.
Lesson 476The Test Double Pyramid
Test first
Try your survey on a small group before sending to everyone—unclear questions will derail your data.
Lesson 139Questionnaires and SurveysLesson 430Testing in Time-Constrained Projects
Test Green thoroughly
smoke tests, validation
Lesson 709Blue-Green Deployment
Test hypotheses
faster (fewer variables to consider)
Lesson 1721Creating Minimal Reproduction Cases
Test IDs
`data-testid="submit-button"` – explicitly added for testing
Lesson 563Locator Strategies and Best Practices
Test in isolation
Verify your code's behavior independently of its dependencies
Lesson 466Stubs: Providing Canned Responses
Test Kitchen
is a framework that spins up temporary virtual machines or containers, applies your configuration code (Ansible, Chef, Puppet), and then runs verification tests against the configured system.
Lesson 1494Testing Configuration Code
Test new code automatically
New API endpoints or input handlers get fuzzed without manual intervention.
Lesson 625Integrating Fuzzing into CI/CD
Test one more time
Run the code and verify it works as intended
Lesson 101Self-Reviewing Before Submission
Test Oracle Problem
finding a way to verify correctness without manually computing the expected result for every generated input.
Lesson 608The Test Oracle Problem
Test regularly
Run through procedures during calm periods
Lesson 1685Runbooks and Operational Documentation
Test relative paths
Work within your test directory, avoiding hardcoded absolute paths
Lesson 535Testing File System Operations
Test rollback procedures
before you need them for real
Lesson 895Testing and Reversibility
Test rollback scenarios
in staging environments
Lesson 721Database Rollbacks and Schema Compatibility
Test Stage
– Execute integration tests, system tests, perhaps security scans
Lesson 693The Deployment Pipeline Concept
Test step
Run your integration tests against the real dependencies
Lesson 539CI/CD Integration with Real Dependencies
Test the fix
in an isolated environment, even if just quickly
Lesson 1741Emergency Production Fixes
Test the midpoint
Check the version halfway between good and bad
Lesson 1724Binary Search for Bug Localization
Test thoroughly
after each incremental change
Lesson 682Dealing with Breaking Changes
Test-to-docs tools
extract examples from your test suites, showing real usage patterns that are guaranteed to work because they're actually executed.
Lesson 1707Automated Documentation Generation
Tested
The code has comprehensive test coverage—unit tests, integration tests, and any other relevant tests have passed.
Lesson 694Production-Ready Definition
Testinfra
(for Ansible) let you write tests that check the *outcome* of your configuration: "Is nginx installed?
Lesson 1494Testing Configuration Code
Testing → Design
Discovering that a module is hard to test might reveal it's too complex and needs redesign
Lesson 17Feedback Loops Across the SDLC
Testing artifacts
show what bias evaluations were performed
Lesson 1917Explainability and Accountability
Testing becomes easier
because you're not bound to infrastructure
Lesson 1277Frameworks and Drivers Layer
Testing becomes harder
– Adding layers makes mocking and testing more cumbersome without corresponding benefits
Lesson 242Factory Pattern Trade-offsLesson 322When Patterns Become Obstacles
Testing Environment
Your E2E tests need an isolated, reproducible environment—separate from development and production.
Lesson 556E2E Test Scope and Boundaries
Testing gaps
Even with tests, you can't catch everything.
Lesson 202Why Modification is Risky
Testing is easier
You can test each concern independently
Lesson 166Separation of Concerns
Testing Nightmare
You can't test components in isolation because they depend on concrete implementations of other components.
Lesson 179The Cost of Tight Coupling
Testing through mocks
When your assertions verify mock interactions instead of actual results (state), you're often testing *how* rather than *what*.
Lesson 480Avoiding Over-Mocking
Testing tools
can validate that your API behaves according to the specification
Lesson 837Introduction to OpenAPI Specification
Testing visibility states
An element might always be in the DOM but hidden via CSS.
Lesson 566Handling Dynamic and Conditional UI
Tests
Execute your unit tests, integration tests, or any other automated test suite to ensure your changes don't break existing functionality
Lesson 98Automated Checks and CI Integration
Tests document intent
Without the test, future developers (including you next month) won't know what the code was supposed to do.
Lesson 504TDD Rhythm and Discipline
Tests run automatically
Many teams configure automated checks to verify code quality
Lesson 90What is a Pull Request?
Tests that duplicate coverage
are the most common offenders.
Lesson 429When to Skip or Delete Tests
Text editors
Every keystroke or action creates a memento
Lesson 301The Memento Pattern: Capturing Object State
Text-based
formats are larger on the wire
Lesson 1315gRPC for Service-to-Service Communication
Then add your feature
Build on the clean foundation in a new commit
Lesson 105Avoiding Mixing Refactoring with Feature Work
Then profile, don't guess
Use actual profiling tools to identify genuine bottlenecks.
Lesson 519Performance-Critical Code
There is one administrator
Multiple teams, vendors, and organizations control different parts.
Lesson 1111Introduction to the Fallacies of Distributed Computing
These conflicts are normal
architecture is fundamentally about managing trade-offs, not finding perfect solutions.
Lesson 1235Driver Conflicts and Trade-offs
They're the persistent translators
"Need to save this domain object?
Lesson 1276Interface Adapters Layer
Think of it like
A support technician remotely connecting to your computer to diagnose issues—but for code.
Lesson 1732Remote Debugging and Attaching to Running ProcessesLesson 1912Fairness Definitions and Metrics
Think time
is the pause between requests that simulates human behavior.
Lesson 1214Designing Realistic Load Tests
Third-party API access
where clients need portable credentials
Lesson 1016Sessions vs Tokens: Choosing the Right Approach
Third-party APIs
may have rate limits, cost money per call, or return different data over time
Lesson 516External Dependencies and Infrastructure
Third-party integration requirements
force unconventional patterns
Lesson 397Balancing Automation with Flexibility
Third-Party Standards
You inherit responsibility for how third parties handle data.
Lesson 1907Third-Party Data Sharing
Thread-local storage
in synchronous systems
Lesson 1530Tenant Identification and Context
Three Common Injection Methods
Lesson 225DIP and Dependency Injection
Three-way merges
create a new commit with *two parents*, joining separate paths in the graph
Lesson 65Understanding Git History as a DAG
Thresholds
Mark unhealthy after 2-3 consecutive failures, not just one blip
Lesson 1391Health Checks and Failover
Ticket references
`feature/JIRA-123-add-payment`, linking code to project management tools
Lesson 89Branch Naming Conventions and Policies
Tier 1
Primary on-call engineer (immediate notification)
Lesson 1161Alert Routing and Escalation Policies
Tier 2
Secondary on-call or team lead (escalate after 10 min)
Lesson 1161Alert Routing and Escalation Policies
Tier 3
Engineering manager or VP (escalate after 20 min)
Lesson 1161Alert Routing and Escalation Policies
Tight deadline prototypes
where you need to validate ideas quickly may not justify the initial complexity.
Lesson 1271When to Use Hexagonal Architecture
Tight orchestration
When the mediator needs to control timing, sequencing, or decision-making about who communicates
Lesson 299Mediator vs Observer: Choosing the Right Pattern
Tightly Coupled Systems
If services deploy together in lockstep anyway, end-to-end tests may be simpler than maintaining separate contracts.
Lesson 553When to Use Contract Tests
Time allocation
Budget dedicated learning time (10-20%) as a normal expectation, not a privilege
Lesson 1847Measuring and Rewarding Learning
Time blocking
Protect personal time on your calendar just as you would meetings
Lesson 1859Remote Work and Disconnecting
Time buckets
Days/Weeks/Months (though this drifts toward estimation rather than sizing)
Lesson 1614T-Shirt Sizing and Alternative Scales
Time complexity
How execution time scales
Lesson 1192Big-O Notation and Algorithmic Complexity
Time constraints
Delays cause more harm than a potentially suboptimal choice
Lesson 1816Making Decisions When Consensus Fails
Time of day
Business-hours alerts to Slack; after-hours to on-call phones
Lesson 1161Alert Routing and Escalation Policies
Time out slowly
, tying up threads and preventing them from handling other work
Lesson 1104Cascading Failures
Time pressure
When deadlines loom, developers update code but skip doc updates.
Lesson 1705Why Documentation Becomes OutdatedLesson 1783Learning from Technical Debt Accumulation
Time to fix
measures how long broken builds stay broken.
Lesson 650CI Metrics and Visibility
Time travel
Replay events to see what your system looked like at any point in the past.
Lesson 1347Event Sourcing FundamentalsLesson 1349Rebuilding State from Events
Time-based estimates
use absolute units like hours or days.
Lesson 1649Story Points vs Time-Based Estimates
Time-based expiration
Cache entries automatically expire after a set duration, forcing fresh reads.
Lesson 1384Caching to Reduce Load
Time-bound
Set realistic deadlines (avoid vague "someday")
Lesson 1184Identifying Actionable Improvements
Time-bound retention
Delete data after its purpose is fulfilled
Lesson 1901Data Minimization Principle
Time-box exploratory asks
When someone wants "just a quick question," offer: "I have 15 minutes at 3 PM" rather than context-switching immediately.
Lesson 1858Setting Boundaries and Saying No
Time-box strictly
Usually 1-3 days maximum
Lesson 1663Identifying Unknowns and Spikes
Time-critical launches
where market timing matters more than polish
Lesson 1837Zero-Defect Mindset
Time-critical opportunities
A competitor launches tomorrow, and you need a minimum viable response today
Lesson 42Balancing Debt and Delivery
Time-dependent behavior
Code that uses `Date.
Lesson 1722Controlling Environmental Variables
Time-sensitive features
Security patches or compliance updates benefit from obvious dates
Lesson 1552Calendar Versioning and Alternative Schemes
Time-to-fix
(or mean time to repair) measures how long broken builds stay broken.
Lesson 657Build Health Metrics and Visibility
Time-to-Live (TTL)
is the duration a cached entry remains usable before it's considered stale and must be refetched from the original source.
Lesson 962Time-to-Live and Expiration Policies
Time-to-market is critical
(competitive pressure, MVP validation)
Lesson 1541Evaluating Lock-in vs Time-to-Market Trade-offs
Timebox disagreements too
If two approaches are gridlocked after 15 minutes, acknowledge it: "We're not converging.
Lesson 1636Running Technical Discussions
Timebox ruthlessly
Allocate specific time slots: "We have 30 minutes to decide our database strategy.
Lesson 1636Running Technical Discussions
Timeboxing
Accept data within a known time window.
Lesson 982Dealing with Stale Data
Timeline
What happened, when, and who did what
Lesson 1742Learning from Production Incidents
Timeline commitments
Marketing campaigns, sales demos, contractual obligations
Lesson 1542What is Release Planning
Timeline of Events
When did the problem start?
Lesson 1747Documenting RCA Findings
Timeout rates
reveal how often operations exceed acceptable wait times.
Lesson 1209Error Rate and Success Metrics
timeouts
(don't wait forever), **retries** (try again intelligently), and handling **network partitions** (when parts of your system can't communicate).
Lesson 1112Fallacy 1: The Network is ReliableLesson 1318Service Mesh and Communication InfrastructureLesson 1320Handling Partial Failures and Timeouts
Timestamp-based
The build tool compares the modification time of source files against their output files (like compiled binaries).
Lesson 664Incremental Builds
Timestamps and correlation IDs
for distributed systems
Lesson 1091Error Context and Propagation
Timing
Ask for consent when relevant, not all at once during onboarding.
Lesson 1902Informed Consent and User Control
Timing and Urgency
Was this urgent?
Lesson 1701Writing Effective Context Sections
Timing matters critically
Invalidate too aggressively and you lose cache benefits (performance tanks).
Lesson 976The Two Hard Things in Computer Science
Timing uncertainty
You can't reliably distinguish between a slow node and a dead one
Lesson 1414The Distributed Consensus Problem
Tivoization prevention
Hardware can't use technical restrictions to prevent users from running modified GPL software
Lesson 1866The GNU GPL Family
TLS certificate
acts like a digital passport that proves your server's identity and enables encrypted HTTPS connections.
Lesson 1077Certificate Management and Mixed Content
TLS handshake
the same protocol that secures HTTPS, but extended to authenticate the *client* (not just the server).
Lesson 996Certificate-Based AuthenticationLesson 1070Transport Layer Security (TLS) Fundamentals
To add forgotten changes
Lesson 67Amending Commits
To Do
– committed work ready to start
Lesson 1593The Kanban Board
To engineers
"This simplifies our data model, eliminates 2,000 lines of workaround code, and uses proven technology"
Lesson 1796Effective Technical Advocacy
To executives
"This reduces our AWS costs by 30% annually and eliminates our top reliability risk"
Lesson 1796Effective Technical Advocacy
To make code testable
→ you need to refactor it
Lesson 1751The Legacy Code Dilemma
To product managers
"This unblocks three features currently stuck in your backlog and reduces user-facing errors"
Lesson 1796Effective Technical Advocacy
To refactor safely
→ you need tests
Lesson 1751The Legacy Code Dilemma
To write tests
→ you need testable code
Lesson 1751The Legacy Code Dilemma
TODO or FIXME markers
"TODO: Replace with async API call in next sprint"
Lesson 374When to Write Comments
Toggle flags on/off
instantly across all environments
Lesson 1561Feature Flag Management Systems
Token rotation
means issuing a *new* refresh token every time one is used—the old refresh token becomes invalid.
Lesson 1013Token Refresh and Rotation
Tolerating
T < response time ≤ 4T (half score)
Lesson 1210Apdex and User-Centric Metrics
TOML
(Tom's Obvious, Minimal Language) balances readability and simplicity.
Lesson 735Configuration File Formats and Parsing
Too coarse
"Build authentication system" is a single task.
Lesson 1665Balancing Granularity
Too fast (<50ms)
Attackers can try millions of passwords quickly
Lesson 1003Work Factors and Adaptive Hashing
Too few interfaces
Clients depend on methods they don't use, violating ISP.
Lesson 220Balancing ISP with Interface Proliferation
Too fine
"Write import statement for user model," "Add opening brace to login function," "Write first line of validation logic.
Lesson 1665Balancing Granularity
Too many fields
Dozens of instance variables that seem unrelated
Lesson 337Bloaters: Large Class and God Object
Too many interfaces
Your codebase becomes cluttered with one-method interfaces.
Lesson 220Balancing ISP with Interface Proliferation
Too many network calls
If a simple business operation requires 10+ service calls, you've likely over-decomposed.
Lesson 1312Getting Service Granularity Right
Too minimal
`calculate(10, 5)` — What do these numbers mean?
Lesson 438Test Data: Realistic vs. Minimal
Too realistic
A complete 50-field order object with shipping address, customer history, loyalty points, and payment methods when you only need an item price and discount percentage
Lesson 438Test Data: Realistic vs. Minimal
Too slow (>1s)
Your login system becomes unresponsive under normal load
Lesson 1003Work Factors and Adaptive Hashing
Tool generates
a contract file (JSON, YAML, etc.
Lesson 551Contract Testing Tools and Frameworks
Tooling dependencies
Build pipelines, deployment tools, or monitoring systems tied to one provider
Lesson 1539What is Vendor Lock-in
Tooling Level
If the bug would have been caught earlier with different tools, add linters, static analyzers, or automated tests to your pipeline.
Lesson 1748Preventing Recurrence with Systemic Fixes
Top (Critical)
What it does, the immediate answer
Lesson 1690The Inverted Pyramid Structure
Top: End-to-End (E2E) Tests
The fewest tests, validating complete user workflows through the entire system.
Lesson 407The Testing Pyramid Concept
topics
(categories of events), partitioned for parallelism and replicated for fault tolerance.
Lesson 1317Event Streaming with KafkaLesson 1358Publish-Subscribe Pattern
Topology doesn't change
Servers move, get replaced, and network paths shift regularly.
Lesson 1111Introduction to the Fallacies of Distributed Computing
Total cost is manageable
You can build a replacement incrementally while the old system runs.
Lesson 1765The Economics of Legacy Refactoring
Total: 101 queries
instead of 2
Lesson 944The N+1 Query Problem
TOTP (Time-Based One-Time Passwords)
Apps like Google Authenticator or Authy generate temporary 6-digit codes that refresh every 30 seconds.
Lesson 994Multi-Factor Authentication (MFA)
Toyota Production System (TPS)
during the 1940s-50s.
Lesson 1592Kanban Origins and Principles
trace
) as it flows through your entire system, creating a timeline of connected events (called **spans**).
Lesson 1146What is Distributed TracingLesson 1147Traces, Spans, and Context Propagation
Trace dependencies
through design docs and code
Lesson 161Change Impact Analysis
trace ID
(the overall journey) and a **span ID** (this specific step).
Lesson 1146What is Distributed TracingLesson 1148Trace IDs and Correlation
Traces
track a single request's journey across multiple services.
Lesson 1136Metrics vs Logs vs Traces
Track
Log the decision, update requirements documentation, communicate to the team
Lesson 162Change Request Processes
Track alert quality metrics
measure your signal-to-noise ratio.
Lesson 1158Alert Fatigue: Reducing False Positives
Track bug origins
Discover when problematic code was introduced
Lesson 118Git Blame: Tracing Code Origins
Track data transformations
as values move through the system
Lesson 1752Reading and Understanding Legacy Code
Track flag age
in your feature flag management system
Lesson 1566Flag Debt and Cleanup Strategies
Track systematically
using a dedicated list or dashboard
Lesson 577Quarantining and Flaky Test Management
Track trends over time
– Store results to visualize performance evolution across weeks or months
Lesson 1203Continuous Performance Testing
Tracking down bug origins
"When did this problematic code first appear?
Lesson 122Understanding File History with Git Log --follow
Trade secrets
can last indefinitely—as long as you keep them secret—but offer no protection if someone independently discovers or reverse-engineers your solution.
Lesson 1890Trade Secrets vs Patents: Choosing a Strategy
Trade-offs and risks
Honest assessment of downsides and concerns
Lesson 1686Design Documents and RFCs
Trade-offs are unavoidable
improving one fairness metric may worsen another
Lesson 1913The Impossibility of Fairness
Traditional
Plan everything upfront, resist changes, measure success by adherence to plan
Lesson 1579Responding to Change Over Following a Plan
Traditional monolithic web applications
where the backend and frontend are tightly coupled
Lesson 1016Sessions vs Tokens: Choosing the Right Approach
Traffic distribution
weights your test scenarios to match production proportions.
Lesson 1214Designing Realistic Load Tests
Traffic smoothing
Spikes in requests don't overwhelm downstream services
Lesson 1316Message Queues for Async Communication
Transaction 1
Alice checks if anyone else is on-call (sees Bob), then removes herself.
Lesson 912Write Skew and Serialization Anomalies
Transaction 2
Bob checks if anyone else is on-call (sees Alice), then removes himself.
Lesson 912Write Skew and Serialization Anomalies
Transaction records
7 years for tax compliance
Lesson 1903Data Retention and Deletion
Transitions
have intricate rules that benefit from encapsulation
Lesson 311State Pattern vs Conditional Logic
transitive dependencies
libraries you don't directly use, but must be present for your direct dependencies to work.
Lesson 668Direct vs Transitive DependenciesLesson 678Handling Transitive Dependencies
Transitive vulnerabilities
hide deep in your dependency tree.
Lesson 1885Open Source Security and Supply Chain Risks
Translate technical jargon
Instead of "monolithic architecture limits horizontal scalability," say "our current system can handle about 5,000 users; supporting more requires a 3-month redesign.
Lesson 35Communicating Trade-offs to Stakeholders
Translates data
between your domain model and the external format
Lesson 1267Implementing Adapters
Translates data formats
between incompatible systems if needed
Lesson 1776Implementing the Facade Layer
Translation correctness
Does your adapter convert domain objects into proper SQL/JSON/file formats?
Lesson 524Testing Adapter Layers
Translation happens at boundaries
through well-defined APIs or events
Lesson 1306Domain-Driven Design Bounded Contexts
Translation to business terms
Instead of "we need to refactor the service layer," say "reducing deployment time from 2 hours to 20 minutes will let us respond to customer issues faster.
Lesson 1772Managing Technical Debt During Refactoring
Transparency and Open Communication
by extending it across team boundaries.
Lesson 1830Collaboration Over Silos
Transparency is critical
document which definition you prioritized and why
Lesson 1913The Impossibility of Fairness
Transparent
users experience no disruption
Lesson 1777Migrating Functionality Incrementally
Transport cost is zero
Serialization, network overhead, and infrastructure cost money and time.
Lesson 1111Introduction to the Fallacies of Distributed Computing
Travis CI
(pioneered free CI for open source), **Azure Pipelines** (tight Microsoft ecosystem integration), **Bitbucket Pipelines** (Atlassian ecosystem), and **TeamCity** (JetBrains' enterprise offering).
Lesson 637Popular CI Platforms
Treat each invocation independently
Design as if every call is the first call ever.
Lesson 1522Stateless Function Design
Trend analysis
reveals systemic weaknesses:
Lesson 1185Building a Learning Culture from Incidents
Trending toward depletion
Increase review rigor, add monitoring, plan reliability sprints
Lesson 1176Calculating and Tracking Error Budgets
Triage
The on-call engineer (from your rotation) assesses severity.
Lesson 1165Incident Response Workflow
Triage and validation
– Confirm the issue truly warrants emergency action
Lesson 1569The Hotfix Process and Risk Management
Triangulation
is the technique of adding more test cases with different inputs until the hard-coded approach breaks, forcing you to generalize.
Lesson 494Triangulation: Adding Tests to Drive Generalization
Trivial accessors
Simple getters/setters that just return or assign a field often don't need dedicated tests.
Lesson 597Excluding Code from Coverage
Trivial getters and setters
like `getName()` or `setAge(value)` rarely break.
Lesson 403When Not to Test: Diminishing Returns
Troubleshooting Runbooks
map symptoms to diagnostic steps.
Lesson 1685Runbooks and Operational Documentation
Troubleshooting Tips
Address common pitfalls.
Lesson 1681User Guides and Tutorials
True unit tests
– testing one thing at a time
Lesson 1269Testing Hexagonal Applications
Trunk-Based Development
(TBD) is a branching strategy where everyone works on a single main branch—the "trunk.
Lesson 83Trunk-Based DevelopmentLesson 646Working on the Trunk vs Feature Branches
Trust
Users can independently verify no tampering occurred
Lesson 686What is a Reproducible Build?
Trust and psychological safety
to modify unfamiliar code
Lesson 1833Collective Code Ownership
trust boundaries
they move from your application to monitoring systems, requiring protection in transit and at rest.
Lesson 1040Security Logging and AuditabilityLesson 1045A04: Insecure Design
Trust your work
without exhaustive manual testing
Lesson 405Enabling Refactoring with Tests
Try pushing again
Now your history includes their commits plus yours, and Git will accept the push
Lesson 80Handling Push Rejections
Try the change naively
and see what breaks
Lesson 1767The Mikado Method for Large Refactorings
Try the primary operation
(call an API, query a database)
Lesson 1100The Fallback Pattern
Try your goal change
make the big refactor you want
Lesson 1755The Mikado Method
Try-it-out forms
with pre-filled examples
Lesson 836Interactive Documentation Tools
Try-lock patterns
let services attempt to acquire a lock without blocking, allowing them to do other work if unavailable.
Lesson 921Application-Level Locking Patterns
Twelve-Factor App
is a methodology created by engineers at Heroku that defines best practices for building software- as-a-service applications.
Lesson 1503The Twelve-Factor App Methodology
Two-way sync
allows both systems to accept writes, requiring conflict resolution rules.
Lesson 1778Data Migration and Synchronization
Type prefixes
`feature/user-login`, `bugfix/checkout-error`, `hotfix/security-patch`
Lesson 89Branch Naming Conventions and Policies
Type safety
Leverage language features like type hints, generics, or interfaces
Lesson 855SDK Design PrinciplesLesson 1133Structured Logging Libraries and APIs
Type Safety and Validation
SDKs generated from OpenAPI specs provide typed interfaces, catching errors at compile-time rather than runtime.
Lesson 854The Role of Client SDKs
Type specifications
"Give me integers" or "Give me lists of strings"
Lesson 614Input Generation Strategies

U

Ubiquitous Language
a shared vocabulary that developers, domain experts, and stakeholders all use consistently.
Lesson 1280DDD Strategic Design Overview
UI frameworks
(React, Vue, Angular)
Lesson 1277Frameworks and Drivers Layer
UI layouts and styling
change constantly based on design feedback.
Lesson 403When Not to Test: Diminishing Returns
UI testing tools
or manual test automation
Lesson 410The Ice Cream Cone Anti-pattern
Unbounded wait
Default in many systems.
Lesson 918Lock Timeouts and Wait Strategies
Unchecked exceptions offer flexibility
and cleaner code.
Lesson 1087Checked vs Unchecked Exceptions
Unclear
Lacking context needed to identify attacks
Lesson 1050A09: Security Logging and Monitoring Failures
Unclear intent
Readers must guess what the value represents
Lesson 352Replace Magic Numbers with ConstantsLesson 1749Defining Legacy Code
Unclear Interfaces
Struggling to figure out what to pass into a function or what it should return?
Lesson 507TDD as a Design Tool
Unclear ownership
No one feels responsible for keeping docs current.
Lesson 1705Why Documentation Becomes Outdated
Unconditional to Conditional
→ add an `if` statement
Lesson 500The Transformation Priority Premise
Uncovered branches
Conditional statements where only `if` or only `else` was tested
Lesson 590Reading Coverage Reports
Uncovered functions
Methods that were never called
Lesson 590Reading Coverage Reports
Uncovered lines
Line numbers shown in red or with `0` hit count
Lesson 590Reading Coverage Reports
Understand context
Find the commit message explaining *why* a change was made
Lesson 118Git Blame: Tracing Code Origins
Understand obligations
Know what each license requires.
Lesson 683Dependency License Compliance
Understand the system
at a glance—you see the forest, not just the trees
Lesson 1220Architecture as Structure
Understand their constraints
(budget, timeline, existing commitments)
Lesson 1812Identifying and Engaging Stakeholders
Understand your access patterns
Heavy read workloads benefit from denormalization.
Lesson 868Balancing Normalization and Performance
Understanding design decisions
"Why was this function written this way three years ago?
Lesson 122Understanding File History with Git Log --follow
Understanding is faster
New team members can focus on one section without understanding everything
Lesson 166Separation of Concerns
Understanding others' perspectives
Before proposing a solution, understand what others care about.
Lesson 1794Influence Without Authority
Understanding the Response
What the result means
Lesson 835Getting Started Guides
Understanding their goals
What are they trying to achieve?
Lesson 126User Requirements
Undo/Redo
Keep executed commands in a stack; reverse them on demand
Lesson 290Command Pattern: Encapsulating Requests
Uneven load distribution
Popular users or "heavy" sessions concentrate on specific servers, defeating the purpose of load balancing.
Lesson 1392Session Affinity and Its Problems
Unexpected dependencies
Code you modify might be used in ways you're not aware of.
Lesson 202Why Modification is Risky
Uniform distribution
Hash functions distribute data evenly, preventing any single partition from becoming overloaded (avoiding hotspots from range-based partitioning).
Lesson 1398Partitioning Strategies: Hash-Based
Unintentional Infringement
Your team might implement an algorithm, data structure, or user interaction pattern that's patented, even if you've never seen the patent.
Lesson 1888Patent Risks in Software Development
UNION
(or **UNION ALL** if duplicates don't matter) lets the database run separate indexed lookups, then merge results
Lesson 884Query Rewriting for Performance
UNION ALL
if duplicates don't matter) lets the database run separate indexed lookups, then merge results
Lesson 884Query Rewriting for Performance
Unique temporary directories
or file paths
Lesson 462Parallelizing Test Execution
Uniqueness first
Your key must uniquely identify the cached resource.
Lesson 961Cache Keys and Lookup Mechanisms
Unit of Work pattern
acts like a transaction coordinator that sits between your business logic and the database.
Lesson 938Unit of Work PatternLesson 955ORMs in Domain-Driven Design
Unknown unknowns
Surprises you can't anticipate (high uncertainty)
Lesson 1615Dealing with Estimation UncertaintyLesson 1648Why Estimation is Hard
Unmet needs
Problems competitors solve poorly—your opportunity
Lesson 140Domain Research and Competitive Analysis
Unmonitored
Nobody reviews them until after an incident
Lesson 1050A09: Security Logging and Monitoring Failures
Unnecessary features enabled
expand your attack surface.
Lesson 1046A05: Security Misconfiguration
Unpredictability
Server A and Server B were provisioned identically, but manual tweaks mean they now behave differently.
Lesson 1474Configuration Drift and Its Problems
Unprotected
Attackers can modify or delete logs covering their tracks
Lesson 1050A09: Security Logging and Monitoring Failures
Unreachable defensive code
Safety checks for conditions that "can't happen" in production (like null guards after framework validation) may be untestable in practice.
Lesson 597Excluding Code from Coverage
Unsigned updates
mean you can't verify that a software update truly came from the legitimate vendor.
Lesson 1049A08: Software and Data Integrity Failures
Unstaged changes
(working directory vs.
Lesson 120Git Show and Diff: Inspecting Changes
Untrusted deserialization
happens when your application accepts serialized objects from external sources without validation.
Lesson 1049A08: Software and Data Integrity Failures
Unused indexes
The query optimizer ignored your index, possibly due to low selectivity (lesson 875) or type mismatches
Lesson 878Using Query Execution Plans to Validate Indexes
Unused parameters
Methods ignoring half their class's fields suggest parts don't belong together
Lesson 183Measuring Coupling and Cohesion in Practice
Upcasting
transforms older event versions into the current schema when reading from the event store.
Lesson 1355Event Schema Evolution
Update
with a condition: "SET name = 'Alice', version = 6 WHERE id = 123 **AND version = 5**"
Lesson 919Optimistic Locking with Versioning
Update Anomalies
When redundant data exists, updating it becomes risky.
Lesson 860What is Normalization?
Update contracts
in your testing suite to reflect both versions
Lesson 552Contract Versioning and Evolution
Update frequency
(daily, weekly)
Lesson 685Automating Dependency Updates
Update immediately
Change comments in the same commit as code changes
Lesson 381Maintaining Comments During Refactoring
Update patterns
Do these data pieces change independently?
Lesson 782Resource Granularity Trade-offs
Update plans
Adjust backlog, timelines, and communicate changes
Lesson 158Scope Creep and Change Control
Update severity
levels as you learn which issues truly require immediate response
Lesson 1162Alert Evaluation: Regular Review and Refinement
Update tests
that reference the flag
Lesson 1566Flag Debt and Cleanup Strategies
Update that instance
to the new version
Lesson 711Rolling Deployments
Update the board first
Team members should update their task board *before* standup, making the spoken updates faster and more accurate.
Lesson 1604Making Standups Work
Update the original class
to use the new class (through composition)
Lesson 198Refactoring to SRP: Extracting Classes
Updating
for security patches or compatibility
Lesson 11SDLC Phases: Testing, Deployment, Maintenance
Upfront design
means planning your architecture, classes, and relationships before writing code.
Lesson 512Emergent Design vs. Upfront Design
Urgent reviews
For hotfixes or release blockers, agree on a shorter window (e.
Lesson 1622Review Timing and Response Expectations
URI versioning
is easiest for clients and testing.
Lesson 848API Versioning Strategies
URL Context
When user input becomes part of a URL, use URL encoding (percent-encoding) to ensure special characters don't break the URL structure or inject malicious protocols.
Lesson 1064Preventing XSS Through Output Encoding
URL pollution
Version numbers clutter every endpoint
Lesson 791URI Versioning (Path-Based)
Usability requirements
define how easy and pleasant your software should be to use.
Lesson 130Usability and Accessibility Requirements
Usage rights
Can someone run your software?
Lesson 1862Copyright, Licensing, and Distribution
USE
Apply to CPUs, disks, network interfaces, memory, database connections
Lesson 1138RED and USE Methods
Use ARIA labels
when available – improves accessibility *and* test stability
Lesson 563Locator Strategies and Best Practices
Use clear titles
"API Error Rate (last 15min)" beats "errors_total"
Lesson 1144Dashboard Design Principles
Use compression
Enable gzip or Brotli compression for HTTP responses.
Lesson 1114Fallacy 3: Bandwidth is Infinite
Use constructive alternatives
Instead of flat refusal, redirect: "I can't take this on now, but Sarah has expertise here" or "I can commit to this after finishing [current work] in two weeks.
Lesson 1858Setting Boundaries and Saying No
Use data and evidence
to support proposals (performance metrics, cost projections, risk assessments)
Lesson 1821Technical Strategy and Vision
Use database transactions
for data migrations when possible
Lesson 721Database Rollbacks and Schema Compatibility
Use deprecation warnings
Add HTTP headers like `Sunset: Sat, 31 Dec 2024 23:59:59 GMT` to responses.
Lesson 853API Sunset and End-of-Life
Use descriptive names
Call your interfaces by what they do for the client: `IDocumentRenderer`, `IReportGenerator`, `INotificationSender`.
Lesson 217Splitting Interfaces by Client Needs
Use DTOs strategically
Don't serialize your full domain model.
Lesson 949The Object Graph Problem
Use evidence, not volume
The engineer who talks loudest or longest doesn't win.
Lesson 1815Managing Disagreement Constructively
Use Facade when
Code clarity and reduced coupling matter more than micro-optimizations, or when the Facade actively optimizes subsystem interactions.
Lesson 280Performance Trade-offs in Structural Patterns
Use Flyweight when
You have many similar objects and memory is constrained—the pattern pays for itself at scale.
Lesson 280Performance Trade-offs in Structural Patterns
Use for
Database files, application state that must persist across container restarts.
Lesson 1434Managing Container State and Data
Use lighter runtimes
Compiled languages (Go, Rust) often cold-start faster than interpreted ones
Lesson 1521Cold Starts and Warm Instances
Use named configuration patterns
Instead of positional parameters, accept a single object with named properties.
Lesson 388Managing Function Parameters
Use orchestration when
Lesson 1378Hybrid Approaches
Use parameterized command APIs
Functions that separate the command from arguments without invoking a shell
Lesson 1057Command Injection and OS Command Execution
Use parameterized queries/prepared statements
(separates code from data)
Lesson 1044A03: Injection
Use persistence when
Messages represent critical business events (payments, orders)
Lesson 1360Message Durability and Persistence
Use plain statements
if the template makes simple requests sound awkward or robotic
Lesson 144The User Story Format
Use prioritization frameworks
Techniques like MoSCoW (Must have, Should have, Could have, Won't have) or cost-benefit analysis help stakeholders see trade-offs objectively.
Lesson 141Handling Conflicting Stakeholder Needs
Use Proxy when
The overhead is negligible compared to what you're deferring, caching, or protecting against.
Lesson 280Performance Trade-offs in Structural Patterns
Use semantic versioning
Breaking SDK changes increment the major version (e.
Lesson 857SDK Versioning and Compatibility
Use separate queries
Instead of one giant JOIN, issue multiple focused queries (one per collection).
Lesson 947Cartesian Product Explosion
Use specific image tags
Avoid `latest` tags to ensure reproducible, auditable builds
Lesson 1440Docker Security Best Practices
Use structured exploration
Don't let the loudest voice win.
Lesson 1813Facilitating Technical Discussions
Use test accounts
or sandboxes provided by the service
Lesson 576Handling External Services
Use test doubles
for dependencies you haven't built yet
Lesson 514Growing Object-Oriented Software Guided by Tests
Use the Socratic method
Instead of lecturing, ask: "What do you think happens when this fails?
Lesson 1785Teaching Others Through Legacy Code Reviews
Use underscores, not camelCase
easier to read in dashboards
Lesson 1140Metric Naming and Labels
Use unique names
Generate random directory or file names to avoid conflicts when tests run in parallel
Lesson 535Testing File System Operations
Use vertical slicing
Deliver the simplest working version first, then enhance
Lesson 1662Task Sizing and the Two-Day Rule
Use views
to present data in both old and new formats
Lesson 717Database Schema Deployment
Use when
Performance matters more than reliability (metrics, non-critical logs).
Lesson 1361Delivery Guarantees: At-Most, At-Least, Exactly-Once
Use your professional codes
Reference the ACM or IEEE codes you've studied—these give weight to your position beyond personal opinion.
Lesson 1922Balancing Business Pressure with Professional Standards
Used to resolve conflicts
when opinions differ
Lesson 1824What Are Engineering Principles?
User attributes
department, clearance level, location, employment status
Lesson 1028Attribute-Based Access Control (ABAC)
User awareness
Would users be surprised or feel betrayed if they knew?
Lesson 1909Surveillance and Tracking Ethics
User Communication
Inform users honestly: "Search temporarily unavailable; browse our featured products instead.
Lesson 1090Error Recovery and Graceful Degradation
User convenience
One password to remember
Lesson 995Single Sign-On (SSO) Fundamentals
User Expectations
Would a reasonable user expect their data to be shared this way?
Lesson 1907Third-Party Data Sharing
User namespace
Maps container user IDs to different host user IDs
Lesson 1427Namespaces and Control Groups
User needs
What do users actually need versus merely want?
Lesson 152The Need for Prioritization
User rights
Right to access, rectify, erase ("right to be forgotten"), port data, and object to processing
Lesson 1908Privacy Regulations (GDPR, CCPA)
User trust
Visitors feel safer knowing your site minimizes unnecessary permission requests.
Lesson 1076Permissions-Policy and Feature Control
User-based partitioning
All posts, comments, and activity for `user_42` go to the same partition
Lesson 1399Partitioning by Entity or Tenant
User-facing features
Complete workflows that users recognize as distinct capabilities
Lesson 1775Identifying Strangulation Boundaries
Uses
Where that variable's value is read
Lesson 603Data Flow Coverage
Using data and evidence
Opinions are weak; data is strong.
Lesson 1794Influence Without Authority
Using Weak Algorithms
Relying on outdated algorithms like MD5 or DES that can be cracked.
Lesson 1043A02: Cryptographic Failures
Utility functions and helpers
might be fine with 70-80%, especially if they're simple and well-tested through integration tests.
Lesson 596Setting Meaningful Coverage Thresholds
Utilization
How busy is this resource?
Lesson 1138RED and USE Methods
UTS namespace
Separate hostname and domain name
Lesson 1427Namespaces and Control Groups

V

Vague names
Generic terms like `data`, `info`, `process`
Lesson 348Rename Method and Rename Variable
Valid range or options
What values are actually allowed?
Lesson 731Documentation and Configuration Schemas
Validate
against strict rules (reject, don't sanitize when possible)
Lesson 1039Trust Boundaries and Input Validation
Validate assumptions
Real user feedback during maintenance shows if your requirements were accurate
Lesson 17Feedback Loops Across the SDLC
Validate assumptions early
by putting working software in users' hands
Lesson 1661Vertical Slicing
Validate automatically
before the app starts
Lesson 731Documentation and Configuration Schemas
Validate tenant context
on every request
Lesson 1531Data Isolation Strategies
Validate that recent changes
haven't already addressed your task
Lesson 649Integrating Before Starting New Work
Validate understanding
You demonstrate your interpretation; they correct misunderstandings immediately
Lesson 138Prototyping for Requirements Discovery
Validates
the command against business rules
Lesson 1351Command Side Design
Validates configuration
loaded correctly
Lesson 715Deployment Health Checks
Validating architectural approaches
("Will this microservice split work?
Lesson 1844Proof of Concepts and Spike Solutions
Validating assumptions early
with real data
Lesson 1827Bias for Action and Iteration
Validation
How to verify success
Lesson 895Testing and Reversibility
Validation in CI/CD
Add automated checks that compare your spec against actual API behavior.
Lesson 845Maintaining OpenAPI Specs Over Time
Validation rules
Min/max values, string patterns, array lengths, allowed enums
Lesson 839Defining Schemas with JSON Schema
Validation tokens
(like ETags in HTTP) work similarly—store a hash or checksum with the data.
Lesson 982Dealing with Stale Data
Value
The actual object instance
Lesson 939Identity Map Pattern
Value vs. Effort Quadrants
, you might still struggle to choose between similarly-ranked items.
Lesson 155Weighted Scoring Models
Values have correct types
(ports are numbers, URLs are valid, booleans are true/false)
Lesson 730Configuration Validation at Startup
Variable and function naming
reflects changing domain understanding.
Lesson 1780Reading Legacy Code as Historical Documentation
Variable values
– What state caused the problem
Lesson 1714Reading Error Messages and Stack Traces
Variables
make those arguments reusable and type-safe, especially important when values come from user input.
Lesson 809Arguments and Variables
Velocity metrics
Are teams shipping faster with the new patterns?
Lesson 1810Measuring Progress Toward Vision
Vendor
(bundle) third-party code directly into your repository
Lesson 680Vendor Dependencies and Private Packages
Vendoring
means copying dependency source code directly into your project's repository.
Lesson 680Vendor Dependencies and Private Packages
Verbose error messages
are surprisingly dangerous.
Lesson 1046A05: Security Misconfiguration
Verbose output
Include stack traces, variable values, timing information
Lesson 1128Logging in Local Development
Verbose usage
developers write more boilerplate code
Lesson 856Auto-Generated vs Hand-Written SDKs
Verifiable
"Authentication system complete" (you can demo it)
Lesson 1659Identifying Milestones and Deliverables
Verification
Anyone can confirm the artifact matches the claimed source
Lesson 686What is a Reproducible Build?Lesson 992Username and Password Authentication
Verifies database connectivity
and other dependencies
Lesson 715Deployment Health Checks
Verifies formatting
matches team standards
Lesson 394CI-Based Quality Gates
Verifies the outcome
by checking side effects (database changes, files created, etc.
Lesson 536Testing with Real Message Brokers
Verify checksums and signatures
when available, ensuring packages haven't been tampered with during transit.
Lesson 1885Open Source Security and Supply Chain Risks
Verify interactions
Check that the expected calls actually happened
Lesson 483Behavior Verification: Testing Interactions
Verify it's healthy
and working correctly
Lesson 711Rolling Deployments
Verify the fix
works without other code interfering
Lesson 1721Creating Minimal Reproduction Cases
Verify the migration executes
without errors
Lesson 895Testing and Reversibility
Version artifacts
with commit hashes or build numbers
Lesson 665Build Artifacts and Output
Version column
Integer incremented on each update
Lesson 919Optimistic Locking with Versioning
Version compatibility
Your old and new versions must coexist gracefully.
Lesson 711Rolling Deployments
Version consistency
No more "works in Package A but breaks Package B"
Lesson 684Monorepo Dependency Management
Version control them
Runbooks evolve with your systems
Lesson 1685Runbooks and Operational Documentation
Version identifiers
Include version numbers in URLs (`/api/v2/users`) or headers
Lesson 552Contract Versioning and Evolution
Version numbers in events
Include `schemaVersion: "2.
Lesson 1343Event Schemas and Contracts
Version skew
Module A updated its API, Module B still uses the old format
Lesson 522What Are Module Boundaries
Version/timestamp display
"Last updated 2 seconds ago"
Lesson 1353Eventual Consistency in CQRS
Versioning approach
– URI versioning vs header-based, as you've studied
Lesson 858API Style Guides
Vertical axis
How much value (business impact, user benefit) will this deliver?
Lesson 154Value vs. Effort Quadrants
Vertical scaling
is simpler initially—no changes to your application architecture needed, just more powerful hardware.
Lesson 1240Scalability: Horizontal and Vertical
Vertical scaling (scale up)
Add more power to existing machines—more CPU, RAM, or faster disks.
Lesson 1217Scalability Testing and Limits
Vertical Scaling (Scaling Up)
Adding more power to an existing machine—more CPU cores, RAM, faster storage, or better network interfaces.
Lesson 1240Scalability: Horizontal and Vertical
Vertical slicing
means decomposing work so each slice goes "vertically" through your entire application stack— from user interface through business logic to database and back—rather than working on one layer at a time ("horizontal slicing").
Lesson 1661Vertical SlicingLesson 1679Saying No to Stakeholders Effectively
View local variables
specific to that frame
Lesson 1731Navigating the Call Stack and Stack Frames
Viewport sizes
represent the visible area where your application renders.
Lesson 568Mobile and Responsive Testing
Violates 1NF
A `Student` table with a `PhoneNumbers` column containing "555-1234, 555-5678"
Lesson 861The Normal Forms (1NF, 2NF, 3NF)
Violates 2NF
A table with key `(StudentID, CourseID)` but also storing `StudentName` (depends only on `StudentID`, not the full key).
Lesson 861The Normal Forms (1NF, 2NF, 3NF)
Violates 3NF
Storing both `ZipCode` and `City` in a customer table, where `City` depends on `ZipCode` rather than `CustomerID`.
Lesson 861The Normal Forms (1NF, 2NF, 3NF)
Violations of law
(fraud, safety violations, environmental crimes)
Lesson 1921Whistleblowing and Legal Protections
Virtual Dispatch
When patterns rely on polymorphism, the runtime must look up the correct method implementation dynamically, which is slower than direct calls.
Lesson 282Performance Overhead of Structural Patterns
Virtual Machines
run a full operating system on top of a hypervisor.
Lesson 1424Containers vs Virtual Machines
Virtual or containerized filesystems
provide complete isolation, especially useful when testing system-level file operations or permissions.
Lesson 535Testing File System Operations
Visibility drops
You report "still working on it" for days, obscuring real progress
Lesson 1662Task Sizing and the Two-Day Rule
Visual hierarchy
Lead with a quick example, follow with common use cases, then link to comprehensive API references.
Lesson 1695Progressive Disclosure
Visualization
Log management tools (like Elasticsearch, Splunk, or CloudWatch) can graph trends, build dashboards, and alert on thresholds—all because the data fields are predictable and machine- readable.
Lesson 1135Querying and Analyzing Structured Logs
Visualize aging
Highlight items that have been in-progress longer than expected.
Lesson 1595Managing Flow and Cycle Time
Visualize relationships
between different attack vectors
Lesson 1082Attack Trees and Risk Prioritization
Visualizing debt accumulation
Show how deferring certain refactorings makes future changes exponentially more expensive— debt compounds with interest.
Lesson 1772Managing Technical Debt During Refactoring
Vulnerability Scanning
uses automated tools to check for known security issues—outdated dependencies, common misconfigurations, missing security headers, or weak passwords.
Lesson 421Security Tests: Finding Vulnerabilities

W

Wait a moment
If possible, step away for a few minutes before reviewing
Lesson 101Self-Reviewing Before Submission
Wait for stability
Ensure all images, fonts, and async content have loaded completely before capturing.
Lesson 581Managing Visual Test Stability
Wait step
Ensure services are healthy and accepting connections
Lesson 539CI/CD Integration with Real Dependencies
Wait Strategies
Don't assume services are ready immediately—poll or wait for health endpoints before running tests
Lesson 537Network and Service Discovery in TestsLesson 918Lock Timeouts and Wait Strategies
Waiting for conditions
Instead of immediately asserting an element exists, use explicit waits tied to specific conditions (element visible, element clickable, element contains text).
Lesson 566Handling Dynamic and Conditional UI
Waits for processing
since messaging is asynchronous
Lesson 536Testing with Real Message Brokers
Warm storage (archived logs)
Move older logs (30-90 days) to cheaper, slower storage.
Lesson 1126Log Retention and Storage
Wasted effort
Time spent building unused features could have been spent on real, immediate needs
Lesson 170You Aren't Gonna Need It (YAGNI)Lesson 599The Danger of Coverage Theater
Watch for patterns
If you're implementing the same 5 tiny interfaces together repeatedly, they might belong as one cohesive interface
Lesson 220Balancing ISP with Interface Proliferation
Watch the video
to observe the sequence of events leading to the problem
Lesson 578Screenshot and Video Debugging
Waterfall
moved sequentially through phases and **Agile** shortened iterations, DevOps and Continuous Delivery make the SDLC feel almost continuous.
Lesson 15DevOps and Continuous Delivery in the SDLCLesson 16Choosing an SDLC Model for Your ProjectLesson 17Feedback Loops Across the SDLC
Waterfall approach
Plan every room, build the entire structure, then move in at the very end
Lesson 13Iterative and Incremental Models
Waterfall's
rigorous upfront planning and documentation—mistakes are costly.
Lesson 16Choosing an SDLC Model for Your Project
WAVE
, and **Lighthouse** excel at finding technical violations (missing alt text, color contrast failures, improper ARIA attributes), but they can't evaluate whether your interface makes *sense* to someone using a screen reader or navigating by keyboa...
Lesson 1930Automated and Manual Accessibility Testing
WCAG 2.1 Level AA
compliance, as it balances comprehensive accessibility with practical implementation and satisfies most legal requirements.
Lesson 1928WCAG Guidelines and Compliance Standards
Weak credential recovery
Password reset flows that don't properly verify identity, use predictable tokens, or send credentials over insecure channels.
Lesson 1048A07: Identification and Authentication Failures
Weak passwords
Users choose memorable (predictable) passwords
Lesson 992Username and Password Authentication
Weak typing
means errors surface at runtime
Lesson 1315gRPC for Service-to-Service Communication
Web applications
where each request reads fresh data
Lesson 906Read Committed Isolation
Web frameworks
(Express, Flask, Spring MVC)
Lesson 1277Frameworks and Drivers Layer
WebAuthn
is a web standard that lets users authenticate using biometrics, security keys, or device credentials.
Lesson 997Passwordless Authentication Methods
Weigh priorities
(if you only have 20 minutes, speed wins)
Lesson 30Trade-off Analysis and Decision Making
Weighted selection
Explicitly specify probabilities for different input classes
Lesson 616Controlling Input Distribution
Welcome changing requirements
, even late in development
Lesson 1580The Twelve Principles Behind the Agile Manifesto
What action
triggers the behavior
Lesson 436Making Tests Readable
What are our constraints
(Deadline, team size, budget?
Lesson 1826Pragmatism and Trade-off Thinking
What can go wrong
Status codes and error conditions
Lesson 831Reference Documentation Structure
What can you do
Requirements specify what authenticated users can access or modify.
Lesson 129Security and Compliance Requirements
What changed
Summarize the actual modifications.
Lesson 102Providing Context in Pull Request Descriptions
What comes out
Response format, example payloads
Lesson 831Reference Documentation Structure
What dependencies became problematic
Tight coupling usually emerges when teams didn't anticipate future changes or lacked design guidance.
Lesson 1783Learning from Technical Debt Accumulation
What didn't go well
Identify pain points, blockers, or friction in the process.
Lesson 1590Sprint Retrospective
What do I do
(Links to runbooks or recent changes)
Lesson 1160Alert Context: Including Diagnostic Information
What do we gain
(Performance, maintainability, developer experience?
Lesson 1826Pragmatism and Trade-off Thinking
What do we sacrifice
(Time, complexity, flexibility?
Lesson 1826Pragmatism and Trade-off Thinking
What edge cases exist
Tests for empty lists, null values, boundary conditions reveal considerations
Lesson 404Testing as Documentation
What failed
(test summary, error logs)
Lesson 643Build Notifications and Reporting
What generates revenue
(e.
Lesson 560Critical Path Testing
What goes in
Required and optional parameters, headers, body schema
Lesson 831Reference Documentation Structure
what happened
, while interaction-based testing (using mocks) focuses on **how it happened**.
Lesson 482State Verification: Testing OutcomesLesson 1123Writing Effective Log Messages
What inputs are valid
Test names and setup show example parameters
Lesson 404Testing as Documentation
What it automates
Integration and validation.
Lesson 630CI vs Continuous Delivery vs Continuous Deployment
What it was
A clear description of the alternative approach
Lesson 1702Documenting Alternatives Considered
What knowledge was missing
Poor abstractions or inappropriate patterns suggest the team didn't fully understand the domain or technology at the time.
Lesson 1783Learning from Technical Debt Accumulation
What matters most
Performance and memory (Flyweight)?
Lesson 286Pattern Selection Criteria
What protects core data
(e.
Lesson 560Critical Path Testing
What resource
(a file, API endpoint, database record)
Lesson 1026Access Control Lists (ACLs)
What scenario
is being tested
Lesson 436Making Tests Readable
What shortcuts were taken
Look for missing tests, hardcoded values, or skipped validations.
Lesson 1783Learning from Technical Debt Accumulation
What SLAs should target
Service level objectives often use p95 or p99 ("99% of requests under 200ms")
Lesson 1143Percentiles and Aggregation
What they need
Deep technical detail, implementation specifics, and architectural decisions.
Lesson 1632Audience Awareness in Technical Communication
What went poorly
Gaps in observability, unclear runbooks
Lesson 1742Learning from Production Incidents
What went well
Celebrate successes and effective practices worth repeating.
Lesson 1590Sprint RetrospectiveLesson 1742Learning from Production Incidents
What will we improve
Commit to specific, actionable changes for the next sprint.
Lesson 1590Sprint Retrospective
What's broken
(You already know this from earlier lessons)
Lesson 1160Alert Context: Including Diagnostic Information
What's reversible
(Can we change this decision later if needed?
Lesson 1826Pragmatism and Trade-off Thinking
What's the cost
Does this flexibility make the code harder to understand now?
Lesson 187Anticipating Change vs. Over-Engineering
What's the evidence
Do requirements hint at this change?
Lesson 187Anticipating Change vs. Over-Engineering
What's the expected behavior
Assertions demonstrate correct outputs
Lesson 404Testing as Documentation
What's the lifetime
Code living for years justifies greater upfront investment.
Lesson 284Maintainability vs Initial Effort
What's the organizational cost
Training, migration effort, ecosystem maturity.
Lesson 1254Continuous Learning and Technology Evaluation
What's their technical level
(Beginner, intermediate, expert in this domain?
Lesson 1689Audience-Driven Documentation
What's your primary problem
Are you dealing with incompatible interfaces (Adapter)?
Lesson 286Pattern Selection Criteria
When integrating third-party components
("This new payment provider—what data flows through it?
Lesson 1083Integrating Threat Modeling into Development
When Loyalty Ends
Your obligation to your employer stops when asked to do something illegal, unethical, or harmful.
Lesson 1896Client and Employer Obligations
When to use
When nested objects are immutable or intentionally meant to be shared (like configuration objects or read-only resources).
Lesson 248Shallow vs Deep Copying in PrototypesLesson 830Types of API DocumentationLesson 1173Common SLI Metrics: Availability, Latency, and Throughput
Where capacity issues hide
Slow tail latencies often indicate resource contention, retries, or downstream failures
Lesson 1143Percentiles and Aggregation
Where did it happen
Provide context (component, user, transaction)
Lesson 1123Writing Effective Log Messages
Where do I look
(Links to relevant dashboards, logs, traces)
Lesson 1160Alert Context: Including Diagnostic Information
Where to look
(relevant dashboards, logs, or runbooks)
Lesson 1155Actionable Alerts: The 'What Now?' Test
Which laws apply
Requirements identify relevant regulations like GDPR (data privacy in Europe), HIPAA (healthcare data in the US), or PCI-DSS (payment card security).
Lesson 129Security and Compliance Requirements
Which method
GET, POST, PUT, DELETE, etc.
Lesson 831Reference Documentation Structure
Which permissions
(read, write, delete, execute, etc.
Lesson 1026Access Control Lists (ACLs)
Whistleblower Protection Act
(federal employees)
Lesson 1921Whistleblowing and Legal Protections
Whistleblowing
is the act of reporting illegal, unethical, or dangerous practices to external authorities or the public when internal channels fail or are unsafe.
Lesson 1921Whistleblowing and Legal Protections
Whitelist Trusted Origins
Explicitly list allowed origins:
Lesson 1068Cross-Origin Resource Sharing (CORS) Security
WhiteSource
into your CI/CD pipeline.
Lesson 1879Managing Open Source Dependencies
Whitespace
creates visual breathing room.
Lesson 1696Writing for Scannability
Who are you
Requirements define how users prove their identity: passwords, multi-factor authentication, biometrics, or single sign-on.
Lesson 129Security and Compliance Requirements
Who committed
the triggering changes
Lesson 643Build Notifications and Reporting
Who's hurting
High p95/p99 values reveal outliers that averages mask
Lesson 1143Percentiles and Aggregation
Whole team attends
Everyone hears the same information simultaneously
Lesson 1603Daily Standup: Goals and Format
Why decisions were made
"Using bubble sort here because dataset is always < 10 items"
Lesson 375Self-Documenting Code vs Comments
Why did it change
Connect your work to the bigger picture.
Lesson 102Providing Context in Pull Request Descriptions
Why does it matter
Include relevant data to make decisions
Lesson 1123Writing Effective Log Messages
Why it matters
If an attacker steals your password (knowledge), they still can't access your account without also stealing your phone (possession).
Lesson 991The Three Factors of Authentication
Why it's deprecated
This approach exposed tokens in browser history, logs, and referrer headers.
Lesson 1020Implicit and Client Credentials Grants
Why this matters
Using `--no-ff` on important branches (like merging features into `main`) keeps your history readable and makes it easier to understand *when* and *why* changes were introduced.
Lesson 64Merge Strategies and Options
Why you dismissed it
Specific technical, cost, or contextual reasons
Lesson 1702Documenting Alternatives Considered
Wide scope
(across methods or classes): Longer, descriptive names like `customerAccountBalance` are essential
Lesson 370Variable Scope and Name Length
Width
represents CPU time consumed (wider = more time)
Lesson 1196CPU Profiling and Flame Graphs
Will requirements change
If your subsystem's interface is likely to evolve, an Adapter now saves refactoring nightmares later.
Lesson 284Maintainability vs Initial Effort
Windows
Download the installer from git-scm.
Lesson 44Installing and Configuring Git
Windows uses `YYMM`
Windows 2004 (released April 2020, though confusingly named)
Lesson 1552Calendar Versioning and Alternative Schemes
WIP Age
How long items have been "in progress.
Lesson 1599Continuous Improvement with Kanban
With external services
Wrap all external calls in error handling that accounts for timeouts, network failures, and unexpected responses.
Lesson 1092Error Handling at System Boundaries
With psychological safety
, teams unlock their creative potential: that junior engineer questions why everyone assumes a microservices approach.
Lesson 1852Psychological Safety for Innovation
Without psychological safety
, engineers play it safe: they implement only proven solutions, hide mistakes until they become critical incidents, and stay silent when architecture decisions seem flawed.
Lesson 1852Psychological Safety for Innovation
Work aging
Tasks sitting idle in one column for days signal a blockage.
Lesson 1597Identifying and Resolving Bottlenecks
Work Breakdown Structure
is a hierarchical decomposition of your entire project into smaller, progressively more detailed components.
Lesson 1658Work Breakdown Structures (WBS)
Work Distribution
Multiple workers pull from the same queue, naturally load-balancing tasks across the pool.
Lesson 1359Message Queues and Point-to-Point Messaging
Work-related inventions
Anything you create using company resources, time, or that relates to the company's business
Lesson 1891Employee Agreements and Intellectual Property
Work-sample assessments
focus on actual job skills rather than whiteboard algorithms that may favor specific educational backgrounds.
Lesson 1853Inclusive Hiring and Onboarding Practices
Workarounds
"Setting timeout to 5000ms because third-party service sometimes stalls"
Lesson 374When to Write CommentsLesson 1684Code Comments and Inline Documentation
Workarounds and gotchas
If you're working around a third-party library bug, browser quirk, or platform limitation, document it thoroughly.
Lesson 380Inline Documentation for Complex Logic
Workflow complexity matters
Multi-step processes where available actions change (e.
Lesson 797HATEOAS Trade-offs and Maturity Models
Working infrastructure
The surrounding systems, deployment pipelines, and integrations can remain intact.
Lesson 1765The Economics of Legacy Refactoring
Working within competence boundaries
Equally important is recognizing when you're out of your depth.
Lesson 1924Maintaining Competence and Continuous Learning
Worse than helpful
An incorrect comment is more dangerous than no comment because developers naturally trust documentation over questioning every line of code.
Lesson 381Maintaining Comments During Refactoring
Wraps an external system
(database driver, HTTP client, message queue)
Lesson 1267Implementing Adapters
Write an acceptance test
that describes a complete user scenario or business requirement
Lesson 514Growing Object-Oriented Software Guided by Tests
Write conflicts
Two leaders might accept different updates to the same data simultaneously
Lesson 1403Multi-Leader and Leaderless Replication
Write fast tests
by avoiding slow dependencies (databases, networks, file systems)
Lesson 473The Cost-Benefit Trade-offs of Test Doubles
Write operation
Update the database
Lesson 979Cache-Aside Invalidation Pattern
write skew
two transactions read overlapping data, make decisions based on what they read, then write to *different* rows.
Lesson 909Snapshot Isolation ExplainedLesson 912Write Skew and Serialization Anomalies
Write tests
if the project requires them
Lesson 1880Contributing to Open Source Projects
Write throwaway code
explicitly marked as experimental
Lesson 520Uncertain Requirements and Prototypes
Write-Ahead Logging (WAL)
Before confirming a transaction, the database writes a record of all changes to a durable log file on disk
Lesson 900The Durability Property
Write-back
offers faster write operations since you're not blocked by cache updates.
Lesson 978Write-Through and Write-Back Invalidation
Write-back invalidation
(also called write-behind invalidation) takes an asynchronous approach: the write completes in the primary store first, and the cache invalidation happens afterward—sometimes delayed by seconds or even queued for batch processing.
Lesson 978Write-Through and Write-Back Invalidation
Write-through
guarantees immediate consistency between cache and database.
Lesson 978Write-Through and Write-Back InvalidationLesson 1384Caching to Reduce Load
Write-through invalidation
handles this synchronously: the moment a write occurs, the cache entry is immediately invalidated or updated before the write operation completes.
Lesson 978Write-Through and Write-Back Invalidation
writes
(inserts, updates, deletes) because the database must update both the table *and* all relevant indexes.
Lesson 869What Indexes Are and How They WorkLesson 1350CQRS Pattern Overview
Writing tests alongside code
(or before, with TDD), not after features are "done"
Lesson 1835Building Quality In
Written and visible
so everyone can reference them
Lesson 1824What Are Engineering Principles?
Wrong guesses
Your prediction about future needs is often incorrect, making the work useless
Lesson 170You Aren't Gonna Need It (YAGNI)
Wrong reason
"Syntax error" or "Test file not found" or "Variable undefined"
Lesson 490Seeing the Test Fail for the Right Reason

X

XL
Major initiative, possibly should be broken down
Lesson 1651T-Shirt Sizing for Coarse Estimates
XML External Entity (XXE)
attacks.
Lesson 1058LDAP and XML Injection
XML format
and typically uses **HTTP POST** as its transport mechanism.
Lesson 799RPC Protocols: XML-RPC, JSON-RPC, and gRPC
XML injection
exploit user input that gets directly embedded into queries or documents without proper validation.
Lesson 1058LDAP and XML Injection
XML-RPC
Legacy systems, simple integrations
Lesson 799RPC Protocols: XML-RPC, JSON-RPC, and gRPC

Y

YAGNI
teaches us not to over-engineer).
Lesson 186Why Software Must Be Designed for Change
Yellow
or **partial** coverage indicates a line with multiple branches where only some executed (like an `if-else` where tests only hit the `if` part)
Lesson 594Reading Coverage Reports
Yellow/Orange
Partially covered branches (one path taken, another missed)
Lesson 590Reading Coverage Reports
you
will always see your own changes, but others might not immediately.
Lesson 1404Consistency in Replicated SystemsLesson 1513Managed Message Queues and Event Streams
You can prevent regression
Document the reproduction steps as a test case to ensure the bug never returns
Lesson 1720The Importance of Reproducibility
You can swap databases
without rewriting business logic
Lesson 1277Frameworks and Drivers Layer
You can test hypotheses
Change one variable, reproduce the bug, and immediately see if your theory was correct
Lesson 1720The Importance of Reproducibility
You can tolerate downtime
scheduled maintenance windows are acceptable
Lesson 1408CP Systems: Choosing Consistency Over Availability
You can verify fixes
Once you think you've solved it, reproduce the original conditions to confirm the bug is truly gone
Lesson 1720The Importance of Reproducibility
You control both sides
If you can modify both interfaces, just make them compatible directly
Lesson 258When to Use the Adapter Pattern
You control direct dependencies
through your build configuration file.
Lesson 668Direct vs Transitive Dependencies
You have few operations
if you only have 2-3 operations, putting them directly in the classes via polymorphism is simpler
Lesson 320When Visitor Adds vs Removes Flexibility
You inherit transitive dependencies
automatically.
Lesson 668Direct vs Transitive Dependencies
You introduce new bugs
because you don't understand the side effects of your changes
Lesson 1717Understanding vs. Guessing Solutions
You lose confidence
from your team when half-understood fixes break production
Lesson 1717Understanding vs. Guessing Solutions
You lose institutional knowledge
embedded in "ugly" code (like edge case handling and business rules)
Lesson 1757When to Rewrite vs Refactor
You need runtime decisions
The factory can choose *which* concrete class to instantiate based on parameters or configuration
Lesson 235Factory Method vs Direct Instantiation
You need runtime flexibility
– Which concrete class to instantiate depends on configuration, user input, or other dynamic factors
Lesson 242Factory Pattern Trade-offs
You need testability
A factory can be swapped with a test double; you can't swap `new`
Lesson 235Factory Method vs Direct Instantiation
You repeat past mistakes
without the benefit of accumulated wisdom
Lesson 1757When to Rewrite vs Refactor
You want explicit control
– no "magic" or framework surprises
Lesson 478Mock Frameworks and Hand-Rolled Doubles
You waste time
trying fixes that don't address the actual cause
Lesson 1717Understanding vs. Guessing Solutions
You're hiding dependencies
– Clients shouldn't know about all the concrete classes that might be created
Lesson 242Factory Pattern Trade-offs
Your changes are visible
Team members can see exactly what you modified
Lesson 90What is a Pull Request?
Your current branch's tip
the latest commit on the branch you're merging into
Lesson 59Three-Way Merges
Your direct team
Daily standups, real-time Slack updates
Lesson 1676Communication Strategies for Different Stakeholders
Your manager
for team-level or project concerns
Lesson 1920Speaking Up: When and How to Raise Concerns
Your strategy
Start at the top to see what broke, then scan downward looking for **your code** (not framework or library code).
Lesson 1714Reading Error Messages and Stack Traces

Z

Zero downtime
during deployments
Lesson 709Blue-Green Deployment
Zero-defect mindset achievements
"Sarah's thorough testing caught three critical bugs before production"
Lesson 1839Celebrating Quality Wins
Zero-Downtime Creation
requires careful orchestration—new tenant resources are provisioned in the background, validated, and only activated once fully ready.
Lesson 1533Tenant Onboarding and Provisioning
Zero-downtime deployments
Gradual traffic shifting between versions
Lesson 1323Service Discovery FundamentalsLesson 1504Stateless Application Design
Zero-trust architectures
Every connection requires cryptographic proof
Lesson 996Certificate-Based Authentication
Zipkin
are two popular open-source tracing backends.
Lesson 1153Tracing Infrastructure and Tools