Software Engineering Glossary
Key terms from the Software Engineering course, linked to the lesson that introduces each one.
5,412 terms.
#
- `info`
- → Same problem.
- Lesson 366 — Avoiding Meaningless and Generic NamesLesson 838 — Anatomy of an OpenAPI Document
- 1 query
- to fetch all 10 users
- Lesson 815 — The N+1 Query Problem in GraphQLLesson 944 — The N+1 Query Problem
- 200 OK
- is your default success response.
- Lesson 768 — Success Status Codes: 2xx RangeLesson 1101 — The Health Check Pattern
A
- AAA pattern
- organizes every unit test into three distinct sections:
- Lesson 432 — The AAA Pattern: Arrange, Act, Assert
- ABAC
- excels when decisions depend on context: time of day, location, device type, or resource attributes.
- Lesson 1031 — Choosing 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 1549 — Emergency Release Procedures
- Abbreviated testing
- – Focus on the specific fix and immediate blast radius, skip unrelated test suites
- Lesson 1569 — The Hotfix Process and Risk Management
- Absolute Timeout
- sets a maximum session lifespan regardless of activity—perhaps 8 hours.
- Lesson 1009 — Session Lifecycle and Expiration
- Abstract classes
- mix method declarations with actual implementation.
- Lesson 219 — ISP and Language Features: Abstract Classes vs Interfaces
- Abstract Factory
- creates *families of related objects* that are designed to work together.
- Lesson 238 — Abstract Factory vs Factory Method
- Abstract Factory + Builder
- An Abstract Factory can return Builders configured for a specific product family.
- Lesson 254 — Combining Creational Patterns
- Abstract Factory Interface
- Declares methods for creating each type of product (`createButton()`, `createCheckbox()`)
- Lesson 237 — Abstract 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 237 — Abstract Factory Pattern: Intent and Structure
- Abstract Product Interfaces
- Define what each product type can do (`Button`, `Checkbox`)
- Lesson 237 — Abstract Factory Pattern: Intent and Structure
- abstraction
- presenting a simplified interface while hiding complex inner workings.
- Lesson 167 — Abstraction and Information HidingLesson 177 — Understanding Coupling: How Components Depend on Each OtherLesson 186 — Why Software Must Be Designed for ChangeLesson 192 — Plugin Architectures and Extension PointsLesson 201 — Understanding the Open/Closed PrincipleLesson 562 — Page Object Pattern
- Abstraction and Information Hiding
- when you hide implementation details behind a single interface, you naturally avoid duplication.
- Lesson 168 — Don't Repeat Yourself (DRY)Lesson 172 — Program to an Interface, Not an ImplementationLesson 188 — Stable Interfaces and Implementation Flexibility
- Abstraction hierarchy
- Different remote types (basic remote, smart remote, voice remote)
- Lesson 260 — The Bridge Pattern: Separating Abstraction from Implementation
- Abstractions
- interfaces and abstract classes—are the key tools that make this possible.
- Lesson 190 — Extensibility Through AbstractionsLesson 260 — The Bridge Pattern: Separating Abstraction from Implementation
- Accept reduced coding time
- You won't write as much production code.
- Lesson 1789 — Balancing Coding and Leadership
- Accept the request
- and quickly return a response ("We'll process that!
- Lesson 1385 — Asynchronous Processing and Message Queues
- Accept when
- The reviewer raises valid concerns about bugs, readability, maintainability, or team standards you missed.
- Lesson 1619 — Receiving Code Review Feedback
- Acceptance Criteria
- and **Definition of Done**.
- Lesson 149 — Acceptance Criteria vs Definition of Done
- Accepted
- The team has agreed and implementation is underway or complete
- Lesson 1703 — ADR Status and Lifecycle
- Access control
- Check permissions before allowing operations
- Lesson 277 — Proxy Pattern: Controlling Access to ObjectsLesson 746 — Access Control and Audit Logging for Secrets
- Access control changes
- A user requests elevated permissions, but only an administrator can grant them
- Lesson 1037 — Separation of Duties
- Access Control List (ACL)
- is a straightforward authorization model that attaches a list of permissions directly to each resource.
- Lesson 1026 — Access Control Lists (ACLs)
- Access controls
- to protect sensitive data stored in state
- Lesson 1483 — Terraform State ManagementLesson 1889 — Trade Secrets: Definition and Protection
- Access methods
- Whether it's using an index or scanning the entire table
- Lesson 879 — Understanding Query Execution Plans
- access token
- (expires in 15 minutes) and a **refresh token** (expires in 7 days)
- Lesson 1013 — Token Refresh and RotationLesson 1017 — OAuth2 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 1021 — Access Tokens, Refresh Tokens, and Token Lifetime
- Accessibility
- Lesson 130 — Usability and Accessibility RequirementsLesson 1245 — Usability and AccessibilityLesson 1895 — Public Interest and Social Responsibility
- Accessibility debt
- Will skipping WCAG compliance now lock out users for years?
- Lesson 1933 — Long-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 130 — Usability and Accessibility Requirements
- Accidentally exposed
- when you commit code to version control
- Lesson 740 — What Are Secrets and Why They Matter
- Achieves 1NF
- Separate rows for each phone number, or a separate `StudentPhones` table.
- Lesson 861 — The Normal Forms (1NF, 2NF, 3NF)
- Achieves 2NF
- Move `StudentName` to a separate `Students` table.
- Lesson 861 — The Normal Forms (1NF, 2NF, 3NF)
- Achieves 3NF
- Create a separate `ZipCodes` table linking zip codes to cities.
- Lesson 861 — The Normal Forms (1NF, 2NF, 3NF)
- Acknowledge data limitations
- Not everything is quantifiable.
- Lesson 1829 — Data-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 1622 — Review Timing and Response Expectations
- Acknowledge the situation explicitly
- "We've had a thorough discussion, but we need to move forward.
- Lesson 1816 — Making Decisions When Consensus Fails
- Acknowledgment matters
- Escalation stops when someone confirms they're handling it
- Lesson 1161 — Alert Routing and Escalation Policies
- ACLs
- work well for document-sharing systems where ownership is clear and permissions are straightforward (think: Google Docs).
- Lesson 1031 — Choosing and Evolving Authorization Models
- Act
- steps (from the AAA pattern), your **Assert** section should verify one logical outcome.
- Lesson 433 — Testing One Thing at a TimeLesson 446 — Arrange-Act-Assert Pattern
- Action
- "Create 1 more pod to reach desired state"
- Lesson 1455 — ReplicaSets and Ensuring Desired StateLesson 1730 — Conditional Breakpoints and Breakpoint Actions
- Action items
- Concrete improvements with owners and deadlines
- Lesson 1742 — Learning from Production Incidents
- Action-oriented
- Should produce decisions or plans, not just discussion
- Lesson 1600 — What Are Agile Ceremonies?
- actions
- (verbs like "getUser," "createOrder," "calculateShipping").
- Lesson 798 — What is RPC and How It Differs from RESTLesson 804 — When to Choose RPC Over REST
- Active support phase
- Full feature backports, bug fixes, and security patches
- Lesson 1571 — Long-Term Support (LTS) Fundamentals
- Active Use
- – Applications authenticate using the secret
- Lesson 745 — Secret Rotation and Lifecycle Management
- Acyclic
- You can't follow the arrows in a circle back to where you started
- Lesson 65 — Understanding Git History as a DAG
- Adapt to changes
- in technology (new operating systems, security requirements, hardware)
- Lesson 4 — Time: Maintenance Over Initial Development
- adapter
- a device that sits between your plug and the outlet, translating the interface without changing either the plug or the outlet itself.
- Lesson 256 — The Adapter Pattern: Connecting Incompatible InterfacesLesson 262 — Adapter vs Bridge: Understanding the DistinctionLesson 285 — Combining Multiple Structural PatternsLesson 286 — Pattern Selection CriteriaLesson 1264 — The Ports and Adapters PatternLesson 1270 — Multiple Adapters for One Port
- Adapter + Bridge
- Adapt third-party APIs while keeping your abstraction separate from implementation details
- Lesson 285 — Combining Multiple Structural Patterns
- Adapter pattern
- to handle diverse hardware.
- Lesson 263 — Real-World Examples: UI Frameworks and Device DriversLesson 1771 — Dealing with Entangled Dependencies
- Adapters
- are like specialized bridges or mechanisms that connect those ports to the outside world.
- Lesson 1264 — The Ports and Adapters PatternLesson 1279 — Testing in Clean Architecture
- Add maintenance overhead
- – when real implementations change, your doubles need updating
- Lesson 473 — The Cost-Benefit Trade-offs of Test Doubles
- Add minimum duration thresholds
- require a condition to persist for 2-5 minutes before alerting.
- Lesson 1158 — Alert Fatigue: Reducing False Positives
- Add new implementations freely
- Create new classes that fulfill the contract without touching existing code
- Lesson 190 — Extensibility Through Abstractions
- Add new operations easily
- Create a new visitor class instead of modifying existing element classes
- Lesson 318 — Visitor Pattern: Operations on Object Structures
- Add performance characterization tests
- when optimization matters.
- Lesson 519 — Performance-Critical Code
- Add performance tests
- If speed matters, write tests that measure it
- Lesson 506 — TDD and Performance Optimization
- Added complexity
- More code means more to test, debug, and maintain
- Lesson 170 — You Aren't Gonna Need It (YAGNI)
- Adding details
- Flesh out acceptance criteria and clarify requirements for upcoming work
- Lesson 157 — Backlog Management
- Adding new response fields
- – well-behaved clients ignore unknown fields
- Lesson 847 — Breaking vs Non-Breaking Changes
- Adding required parameters
- – requests missing the new mandatory field are rejected
- Lesson 847 — Breaking vs Non-Breaking Changes
- Additional Method Calls
- A Decorator wraps another object, forwarding each method call.
- Lesson 282 — Performance 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 1683 — README Files
- Additive changes
- introduce new structures without removing or modifying existing ones:
- Lesson 893 — Zero-Downtime Schema ChangesLesson 895 — Testing and ReversibilityLesson 1343 — Event Schemas and ContractsLesson 1355 — Event Schema Evolution
- Additive changes are safe
- Lesson 721 — Database Rollbacks and Schema Compatibility
- Additive changes only
- Add new fields or endpoints without removing old ones
- Lesson 552 — Contract Versioning and Evolution
- Address concerns
- Anticipate questions each stakeholder will ask
- Lesson 1252 — Communicating Architecture to Stakeholders
- Address feedback point-by-point
- Don't ignore comments or respond defensively
- Lesson 1619 — Receiving Code Review Feedback
- Address systemic issues
- If testing is always slow, invest in test automation or additional tooling.
- Lesson 1597 — Identifying and Resolving Bottlenecks
- Addresses one logical change
- one feature, one bug fix, one refactoring
- Lesson 92 — Pull Request Size and Scope
- Adjust minimally
- Only adjust for genuinely unique factors with evidence
- Lesson 1653 — Reference Class Forecasting
- Adjust thresholds
- that are too sensitive or too permissive
- Lesson 1162 — Alert Evaluation: Regular Review and Refinement
- Adoption metrics
- How many teams/services have migrated to the new architecture?
- Lesson 1810 — Measuring Progress Toward Vision
- Advance Notice Period
- Announce deprecation well before shutdown—commonly 6-12 months for public APIs, sometimes longer for enterprise contracts.
- Lesson 849 — Deprecation Policies and Timelines
- Advantage
- You can adapt any class that shares the same interface (or even multiple different classes).
- Lesson 257 — Class vs Object Adapters
- Advantages
- Lesson 565 — Component Testing vs Full Page TestingLesson 1085 — Error Handling Philosophies: Return Codes vs ExceptionsLesson 1131 — JSON and Other Structured Formats
- Advocating in promotion discussions
- "Sarah should be promoted—here's the impact she's had on our architecture migration.
- Lesson 1801 — Sponsorship and Career Development
- Affected Scope
- Include labels or tags showing which instances, regions, or customers are impacted.
- Lesson 1160 — Alert Context: Including Diagnostic Information
- Affinity mapping
- to group similar-sized stories
- Lesson 1610 — Planning Poker and Estimation Techniques
- After (guard clauses)
- Lesson 354 — Replace Nested Conditionals with Guard Clauses
- After (polymorphic)
- Lesson 351 — Replace Conditional with Polymorphism
- After (test-friendly)
- Lesson 510 — TDD and Dependency Injection
- After coding (Test-After Development)
- You implement features first, then add tests.
- Lesson 401 — When to Write Tests: Before, During, or After
- After deployment
- Run smoke tests to verify the deployment succeeded
- Lesson 561 — E2E Test Execution StrategyLesson 965 — Cache Warming and Preloading
- After infrastructure changes
- (new database, caching layer, scaling strategy)
- Lesson 1212 — Introduction to Load Testing
- After inversion
- `ReportGenerator` depends on an `IDatabase` interface it defines.
- Lesson 223 — Inverting Dependencies with Interfaces
- After refactoring
- Lesson 356 — Consolidate Duplicate Conditional Fragments
- After the workshop
- Lesson 135 — Workshops and Facilitated Sessions
- Agent-based tools
- like Puppet and Chef run agents on each node that regularly check in and report differences.
- Lesson 1492 — Configuration Drift Detection
- Agentless tools
- like Ansible can schedule drift detection jobs that SSH in and verify configuration.
- Lesson 1492 — Configuration Drift Detection
- Aggregate early
- Collect summary statistics instead of individual records when possible
- Lesson 1901 — Data Minimization Principle
- Aggregation
- Consider storing summarized metrics instead of raw logs for long-term trend analysis.
- Lesson 1126 — Log Retention and StorageLesson 1129 — What is Structured Logging
- Aggregation and Statistics
- Compute meaningful metrics:
- Lesson 1135 — Querying and Analyzing Structured Logs
- Aggregations happen frequently
- Storing pre-calculated totals (like `order_total` alongside order items) avoids re-summing every time
- Lesson 865 — Strategic Denormalization
- Aggressive approach
- Update everything frequently to avoid falling too far behind, but invest heavily in automated testing.
- Lesson 677 — Dependency Updates and Semantic Versioning
- Agile
- shortened iterations, DevOps and Continuous Delivery make the SDLC feel almost continuous.
- Lesson 15 — DevOps and Continuous Delivery in the SDLCLesson 16 — Choosing an SDLC Model for Your ProjectLesson 17 — Feedback Loops Across the SDLCLesson 1579 — Responding to Change Over Following a Plan
- Agile Manifesto
- four core values and twelve principles that prioritized adaptability, customer collaboration, and delivering value quickly.
- Lesson 1574 — The Birth of Agile: Context and History
- Agile SDLC
- emphasized collaboration and frequent releases?
- Lesson 15 — DevOps and Continuous Delivery in the SDLCLesson 24 — Cross-Functional Teams
- Agility and Change
- Paradoxically, spending time on architecture *speeds you up* long-term.
- Lesson 1224 — Why Architecture Matters
- Alert or block
- deployments that fail regression checks
- Lesson 1211 — Baseline Metrics and Regression Detection
- Alerting
- Trigger on specific field values
- Lesson 1129 — What is Structured LoggingLesson 1185 — Building a Learning Culture from Incidents
- Alerting on transient issues
- that self-heal before anyone can respond
- Lesson 1158 — Alert 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 612 — When Property-Based Testing Shines
- Align expectations
- – everyone agrees on "done" before work starts
- Lesson 147 — What are Acceptance Criteria?
- Allocation sizes
- How much memory each allocation consumes
- Lesson 1197 — Memory Profiling and Heap Analysis
- Allow all printable characters
- including spaces to support passphrases.
- Lesson 1004 — Password Strength Requirements and Policies
- ALLOW-FROM uri
- Can be framed only by specified URI (deprecated, poorly supported)
- Lesson 1073 — X-Frame-Options and Frame Ancestors
- Almost never
- Most applications naturally avoid multi-valued dependencies through proper domain modeling.
- Lesson 863 — Higher Normal Forms (4NF, 5NF)
- Alternative implementations
- Compare against a simpler, trusted reference
- Lesson 608 — The Test Oracle Problem
- Alternatives
- What else was considered and why it wasn't chosen
- Lesson 1698 — What Are Architecture Decision Records (ADRs)?
- Alternatives considered
- Other approaches you evaluated and why you rejected them
- Lesson 1686 — Design Documents and RFCs
- always
- be in a deployable state.
- Lesson 652 — The Green Build ContractLesson 747 — Secrets in CI/CD Pipelines
- Always clean up
- Use setup/teardown methods to ensure temporary files disappear even when tests fail
- Lesson 535 — Testing File System Operations
- Always in sync
- with your API—regenerate whenever the spec changes
- Lesson 856 — Auto-Generated vs Hand-Written SDKs
- Always-on profiling
- at 1-5% overhead using continuous sampling
- Lesson 1199 — Profiling in Production vs Development
- Ambiguity
- GPL v2 left questions about network services (SaaS loophole) and patent rights.
- Lesson 1866 — The GNU GPL Family
- Amend recent mistakes
- Use `git commit --amend` to fix typos or incomplete work
- Lesson 114 — Commit Hygiene Before Push
- Amplification
- means repeating or crediting ideas from underrepresented colleagues when they're overlooked.
- Lesson 1854 — Allyship and Advocacy in Engineering
- Analogy
- Think of `git init` like buying a filing cabinet for your office.
- Lesson 45 — Creating Your First RepositoryLesson 51 — Checking Status and DifferencesLesson 53 — Undoing Changes: Restore and Reset BasicsLesson 79 — Tracking BranchesLesson 184 — Refactoring to Reduce CouplingLesson 203 — Extension Through InheritanceLesson 258 — When to Use the Adapter PatternLesson 261 — Bridge Pattern Structure and Components (+61 more)
- Analyze alert frequency
- Which alerts fire most often?
- Lesson 1162 — Alert Evaluation: Regular Review and Refinement
- Analyze the distribution
- Look at the range—what was typical?
- Lesson 1653 — Reference Class Forecasting
- Anchor your estimate
- Use the historical median or a conservative percentile (e.
- Lesson 1653 — Reference Class Forecasting
- Anchoring
- Early estimates (even wild guesses) influence later thinking
- Lesson 1648 — Why Estimation is HardLesson 1650 — Planning Poker and Consensus Estimation
- Annotated tags
- are full Git objects that store the tagger's name, email, date, and a message.
- Lesson 1556 — Version Tagging in Git
- Annotations
- are also key-value pairs, but they're for storing non-identifying metadata that you *don't* query on.
- Lesson 1445 — Labels, Selectors, and Annotations
- Announce early and clearly
- Communicate the sunset timeline through documentation, deprecation headers, emails to registered API consumers, and changelog updates.
- Lesson 853 — API Sunset and End-of-Life
- Anomaly detection
- spotting unusual patterns that static rules miss
- Lesson 1157 — Threshold Selection: Static vs. Dynamic Baselines
- Anonymization
- irreversibly removes all identifying information so that individuals cannot be re-identified, even with additional data.
- Lesson 1904 — Anonymization and Pseudonymization
- Anonymized resume screening
- removes names, graduation years, and other identifiers that trigger bias before you've even met the candidate.
- Lesson 1853 — Inclusive 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 1876 — Dual Licensing and License Exceptions
- Ansible Vault
- encrypt entire files or individual variables.
- Lesson 1493 — Secrets Management in Configuration Tools
- Anticipating Change vs. Over-Engineering
- (lesson 187)?
- Lesson 188 — Stable Interfaces and Implementation Flexibility
- Any phase → Process
- Retrospectives help teams refine *how* they work
- Lesson 17 — Feedback 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 1409 — AP Systems: Choosing Availability Over Consistency
- AP systems
- Social media feeds, analytics dashboards (serve stale data rather than error)
- Lesson 1406 — The CAP Theorem: Consistency, Availability, and Partition Tolerance
- Apache Kafka
- High-throughput, event streaming platform
- Lesson 1316 — Message Queues for Async Communication
- API changes
- Method signatures, new endpoints, deprecated functions
- Lesson 1708 — Documentation Review in Code Review
- API clients
- Ensuring only authorized systems can call your API
- Lesson 996 — Certificate-Based Authentication
- API compatibility vigilance
- Never backport fixes that require API changes.
- Lesson 1572 — Backporting 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 1327 — API Gateway Pattern
- API contracts
- Does Module A call Module B's methods with the right parameters?
- Lesson 525 — Testing 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 1327 — API Gateway Pattern
- API Gateway/Edge Layer
- The first line of defense.
- Lesson 1030 — Implementing Authorization in Applications
- API gateways
- aggregating or transforming requests
- Lesson 763 — Layered System ArchitectureLesson 1337 — Trade-offs: Complexity vs. Flexibility
- API or service boundaries
- Existing interfaces where calls enter/exit components
- Lesson 1775 — Identifying Strangulation Boundaries
- API server
- hosting the protected resources.
- Lesson 1018 — OAuth2 Roles and Authorization FlowLesson 1443 — Kubernetes Architecture Overview
- APIs
- for instrumenting your code (creating spans, recording metrics)
- Lesson 1152 — OpenTelemetry and Tracing Standards
- application
- requesting access on behalf of the resource owner.
- Lesson 1018 — OAuth2 Roles and Authorization FlowLesson 1887 — The Patent Process and Prior Art
- Application code should contain
- Lesson 728 — Configuration vs. Application Code
- Application packages
- JARs, WARs, or static binaries with bundled dependencies
- Lesson 1475 — Building Immutable Artifacts
- Application Performance Index (Apdex)
- converts response time measurements into a user satisfaction score between 0 and 1.
- Lesson 1210 — Apdex and User-Centric Metrics
- Application servers
- are immutable containers or instances that hold no local state
- Lesson 1477 — Handling State in Immutable Systems
- Application startup
- Load top products, user profiles, or configuration data
- Lesson 965 — Cache Warming and Preloading
- Application startup warming
- Run a script that queries common endpoints or data during deployment, populating caches before traffic arrives.
- Lesson 989 — Cache Warming and Preloading
- Application state mismatch
- Your application code might have already processed data using the new schema.
- Lesson 889 — Forward-Only Migration Philosophy
- Application-layer caching
- Your application stores computed results or query responses in memory (like Redis or Memcached).
- Lesson 1384 — Caching to Reduce Load
- Application/Business Logic Layer
- This is where fine-grained authorization lives.
- Lesson 1030 — Implementing Authorization in Applications
- Applications in production
- Often pin everything (combined with lock files) for maximum stability and predictability
- Lesson 673 — Pinning vs Flexible Versioning
- Applications requiring instant revocation
- since you control the session store directly
- Lesson 1016 — Sessions vs Tokens: Choosing the Right Approach
- Apply each event
- to the state using your aggregates or projections
- Lesson 1349 — Rebuilding State from Events
- Appropriate data types
- Lesson 779 — Designing Resource Representations
- Approval is required
- One or more teammates must approve before merging
- Lesson 90 — What is a Pull Request?
- Approval Testing
- (also called characterization testing) is powerful for complex legacy systems.
- Lesson 1756 — Preserving Behavior While Changing StructureLesson 1762 — Approval Testing for Complex Outputs
- Approximate reporting
- where exact precision isn't critical (dashboard counts, analytics)
- Lesson 905 — Read Uncommitted Isolation
- Architect
- archetypes operate across multiple teams or domains, focusing on technical design and system coherence.
- Lesson 1819 — The Four Staff Archetypes
- Architectural decisions
- Lesson 1223 — Architecture vs. Design
- Architectural mistake
- Weeks to months (restructure multiple systems)
- Lesson 1225 — The Cost of Architectural Mistakes
- Architectural Strategy
- Microservices with independent deployment pipelines, feature flags, automated testing
- Lesson 1233 — Business Goals and Architecture Alignment
- Architectural Tests
- Write automated tests that verify dependencies.
- Lesson 1291 — Enforcing 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 1234 — Identifying Architecturally Significant Requirements
- architecture
- determines the overall layout—where rooms go, how floors connect, structural support, electrical and plumbing systems.
- Lesson 1219 — Defining Software ArchitectureLesson 1223 — Architecture vs. Design
- Architecture alignment
- means translating these goals into technical decisions that make them achievable.
- Lesson 1233 — Business Goals and Architecture Alignment
- Architecture diagrams
- show how systems, services, and components connect.
- Lesson 1693 — Visual 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 1850 — Unconscious 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 1251 — Architecture Governance and Standards
- Architecture tests
- Automated checks that fail if a layer imports from the wrong place
- Lesson 1257 — Layer Responsibilities and Boundaries
- Archive, Don't Delete Immediately
- Lesson 1779 — Completing the Strangler: Decommissioning Legacy
- ArgoCD
- provides a more feature-rich experience with a web UI, multi-cluster support, and sophisticated sync policies.
- Lesson 1498 — GitOps Tools and Operators
- Argon2
- (2015) is the newest, winning the Password Hashing Competition.
- Lesson 1002 — Password Hashing Algorithms: bcrypt, scrypt, and Argon2Lesson 1003 — Work Factors and Adaptive Hashing
- Arguments
- let you pass parameters directly into fields to filter, specify, or modify what you get back.
- Lesson 809 — Arguments and VariablesLesson 811 — Resolvers: The Execution Layer
- ARIA labels
- `role="button" aria-label="Submit form"` – semantic and accessibility-friendly
- Lesson 563 — Locator Strategies and Best Practices
- Arrange
- and **Act** steps (from the AAA pattern), your **Assert** section should verify one logical outcome.
- Lesson 433 — Testing One Thing at a TimeLesson 446 — Arrange-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 446 — Arrange-Act-Assert Pattern
- Array to Container
- → use more sophisticated data structures
- Lesson 500 — The Transformation Priority Premise
- Artifacts
- What files should be saved or deployed
- Lesson 638 — Build Configuration FilesLesson 641 — Build Artifacts and CachingLesson 665 — Build Artifacts and OutputLesson 700 — Anatomy of a Deployment Pipeline
- Ask clarifying questions
- when feedback is unclear.
- Lesson 96 — Responding to Review FeedbackLesson 106 — Responding Constructively to Review FeedbackLesson 1644 — Receiving Feedback with an Open Mind
- Ask skeptical questions
- Lesson 1845 — Embracing Emerging Technologies Responsibly
- Ask the right person
- Identify who to consult about specific code
- Lesson 118 — Git Blame: Tracing Code Origins
- Asking questions
- No one knows everything; great engineers ask for help when stuck
- Lesson 3 — The Human Element: Teams and Communication
- Aspect-Oriented Programming (AOP)
- Apply concerns as "wrappers" around layer operations, keeping the core layer code clean.
- Lesson 1260 — Cross-Cutting Concerns in Layers
- Assert
- section should verify one logical outcome.
- Lesson 433 — Testing One Thing at a TimeLesson 446 — Arrange-Act-Assert Pattern
- Assess concurrency needs
- How many users/processes will access the same data simultaneously?
- Lesson 910 — Choosing the Right Isolation Level
- Assess impact
- Estimate effort, timeline changes, and dependencies
- Lesson 158 — Scope Creep and Change Control
- Assess severity
- Confirm the issue truly warrants bypassing normal processes
- Lesson 1568 — What are Hotfixes and When to Use Them
- Assigning stretch opportunities
- Deliberately choosing someone for a challenging project that will build their credibility.
- Lesson 1801 — Sponsorship and Career Development
- Association mapping patterns
- bridge this gap, defining how your ORM handles the different types of relationships between entities.
- Lesson 943 — Association Mapping Patterns
- Assume good intent
- Your colleague isn't trying to write bad code.
- Lesson 97 — Review Etiquette and CollaborationLesson 1619 — Receiving Code Review FeedbackLesson 1815 — Managing Disagreement Constructively
- Assumptions
- are beliefs you're taking as true—things you *expect* to be the case, but haven't fully verified yet.
- Lesson 132 — Constraints and AssumptionsLesson 1684 — Code Comments and Inline Documentation
- Asynchronous (Event-Based)
- Service A sends a message or event and continues working without waiting.
- Lesson 1313 — Synchronous vs Asynchronous Communication
- Asynchronous and distributed systems
- make debugging nearly impossible.
- Lesson 1735 — Debugger Limitations and When to Use Alternative Tools
- Asynchronous logging
- queues log messages in memory and writes them on a separate thread.
- Lesson 1127 — Logging Performance Considerations
- Asynchronous processing
- means separating the *acceptance* of work from its *execution*.
- Lesson 1385 — Asynchronous Processing and Message QueuesLesson 1388 — What is Load Balancing?
- Asynchronous replication
- The leader acknowledges writes immediately without waiting for followers.
- Lesson 1402 — Leader-Follower Replication
- Asynchronous updates
- Use written documentation so people can catch up on their schedule
- Lesson 25 — Communication Channels and Stakeholder Management
- At API endpoints
- Catch all exceptions at the controller/handler level.
- Lesson 1092 — Error Handling at System Boundaries
- At-Least-Once
- The event is delivered one or more times.
- Lesson 1344 — At-Least-Once vs Exactly-Once DeliveryLesson 1361 — Delivery Guarantees: At-Most, At- Least, Exactly-OnceLesson 1513 — Managed Message Queues and Event Streams
- At-Most-Once
- The event is delivered zero or one time.
- Lesson 1344 — At-Least-Once vs Exactly-Once DeliveryLesson 1513 — Managed Message Queues and Event Streams
- Atomic changes
- Update a shared library and all consumers in one commit
- Lesson 684 — Monorepo Dependency Management
- Atomic commits
- Should a distributed transaction commit or abort across all services?
- Lesson 1414 — The Distributed Consensus Problem
- Atomic Operations
- Use database-level operations like `UPDATE accounts SET balance = balance + 50` instead of read-modify-write sequences.
- Lesson 911 — Lost Update Problem
- Atomicity
- requires tracking transaction state and maintaining the ability to rollback, which means extra logging and coordination work.
- Lesson 901 — ACID 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 1038 — Minimize Attack Surface
- Attribute-Based Access Control (ABAC)
- evaluates multiple attributes to determine access.
- Lesson 1028 — Attribute-Based Access Control (ABAC)
- Audit changes
- with full history of who changed what and when
- Lesson 1561 — Feature Flag Management Systems
- Audit logs
- record every access attempt—successful or failed.
- Lesson 746 — Access Control and Audit Logging for Secrets
- Audit regularly
- Scan all direct and transitive dependencies for their licenses.
- Lesson 683 — Dependency License Compliance
- Audit trail
- Complete history for compliance and retrospectives
- Lesson 163 — Version Control for RequirementsLesson 1349 — Rebuilding State from Events
- Audit unused flags
- flags never queried in production logs
- Lesson 1566 — Flag Debt and Cleanup Strategies
- Audit Your Dependencies
- Lesson 1524 — Managing Dependencies and Package Size
- Auditability
- When investigating an incident, you can rebuild old versions and know you're testing the *exact* code that was deployed.
- Lesson 691 — Benefits and Trade-offsLesson 1040 — Security Logging and Auditability
- Auditable
- Event streams provide a history of what changed and when
- Lesson 980 — Event-Driven InvalidationLesson 1453 — Declarative Configuration with YAML
- Auditing
- You know exactly what code ran at any point in history
- Lesson 671 — Lock Files and ReproducibilityLesson 681 — Dependency 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 1025 — Authorization Fundamentals: Who Can Do WhatLesson 1035 — Security by Design, Not ObscurityLesson 1115 — Fallacy 4: The Network is Secure
- Authentication bypass
- Lesson 1044 — A03: Injection
- Authentication required
- Lesson 1696 — Writing for Scannability
- Authentication Setup
- How to obtain credentials (API keys, tokens, OAuth flows)
- Lesson 835 — Getting Started Guides
- Authentication/Authorization
- Verifying tokens and basic permissions
- Lesson 1328 — Gateway Responsibilities and Trade-offs
- AuthenticationService
- handles login and tokens
- Lesson 1305 — The Single Responsibility Principle at Service Level
- Author filter
- `git log --author="Jane"` shows commits by a specific person
- Lesson 117 — Reading Git Log: Understanding Commit History
- authorization
- is determining which room you can enter (your key card only opens *your* room, not others).
- Lesson 1025 — Authorization Fundamentals: Who Can Do WhatLesson 1035 — Security by Design, Not ObscurityLesson 1115 — Fallacy 4: The Network is Secure
- Authorization Server
- "Yes, give this app limited access" (You approve on Google's login page)
- Lesson 1018 — OAuth2 Roles and Authorization Flow
- Auto-generated code
- Framework scaffolding, build artifacts, or code produced by tools shouldn't count against you.
- Lesson 597 — Excluding Code from Coverage
- Auto-generated SDKs
- Use tools to create SDKs directly from your OpenAPI specification or schema
- Lesson 856 — Auto-Generated vs Hand-Written SDKs
- Automate
- Use tools like Certbot or ACME clients to handle renewal automatically
- Lesson 1077 — Certificate Management and Mixed Content
- Automate checks
- Integrate license scanning into your CI pipeline to catch violations before they reach production or customers.
- Lesson 683 — Dependency License Compliance
- Automated Decision
- When metrics breach predefined thresholds for a sustained period (e.
- Lesson 722 — Monitoring 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 1497 — The 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 1497 — The GitOps Workflow
- Automated Refactorings
- are your safest bet.
- Lesson 1756 — Preserving Behavior While Changing Structure
- Automated scheduling
- Decides which machine runs each container based on resources
- Lesson 1442 — What is Kubernetes and Why Use It
- Automated Security Test Suites
- integrate security checks into your regular testing pipeline.
- Lesson 421 — Security Tests: Finding Vulnerabilities
- Automated Testing
- Your CI pipeline runs tests against the proposed change
- Lesson 685 — Automating Dependency Updates
- Automated tooling
- Generate client SDKs, server stubs, and tests directly from the schema
- Lesson 841 — Benefits 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 1149 — Instrumenting Code for TracingLesson 1152 — OpenTelemetry and Tracing Standards
- Automatic optimization
- If `compile` is already up-to-date, the tool can skip it.
- Lesson 663 — Task Dependencies and Ordering
- Automatic restarts
- When a container crashes, the orchestrator (like Kubernetes) automatically spins up a replacement.
- Lesson 1508 — Designing for Failure and Self-Healing
- Automatic scaling
- From zero to thousands without configuration
- Lesson 1519 — What is Serverless and Function as a Service
- Automating quality checks
- in your development environment and CI pipeline, so feedback is instant
- Lesson 1835 — Building Quality In
- Automation
- Tests, builds, and deployments run automatically
- Lesson 15 — DevOps and Continuous Delivery in the SDLCLesson 392 — Code Formatters and PrettierLesson 720 — Rollback Strategies and Mechanisms
- Automation is critical
- manual renewal is error-prone.
- Lesson 1077 — Certificate Management and Mixed Content
- Automation works
- CI pipelines can validate formatting, check broken links, or deploy docs automatically
- Lesson 1706 — Documentation as Code
- Autonomy
- Teams can change schemas, upgrade database technology, or optimize queries without coordinating with other teams.
- Lesson 1307 — Database Per Service PatternLesson 1309 — Data Duplication vs Data Coupling Trade-offs
- availability
- defines how accessible the system must be.
- Lesson 131 — Reliability and Availability RequirementsLesson 923 — The Consistency-Availability Trade- offLesson 1171 — Understanding Service Level Indicators (SLIs)Lesson 1173 — Common SLI Metrics: Availability, Latency, and ThroughputLesson 1238 — What are Quality AttributesLesson 1241 — Availability and ReliabilityLesson 1248 — Quality Attribute ScenariosLesson 1388 — What is Load Balancing? (+1 more)
- Availability (A)
- Every request receives a response (success or failure), without guarantee that it contains the most recent data.
- Lesson 1406 — The CAP Theorem: Consistency, Availability, and Partition ToleranceLesson 1411 — The PACELC Extension to CAP
- Availability risk
- One service down affects others
- Lesson 1309 — Data Duplication vs Data Coupling Trade-offs
- Availability vs Consistency
- Distributed systems famously face this trade-off.
- Lesson 1247 — Quality 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 1241 — Availability and Reliability
- Available hours
- Account for holidays, time off, meetings, and on-call duties
- Lesson 1602 — Effective Sprint Planning Practices
- average velocity
- and notice patterns.
- Lesson 1612 — Historical Data and ForecastingLesson 1656 — Velocity and Capacity Planning
- Average velocity: ~40 points/sprint
- Lesson 1656 — Velocity and Capacity Planning
- Avoid alert storms
- Group related alerts to prevent waking the entire chain for correlated failures
- Lesson 1161 — Alert Routing and Escalation Policies
- Avoid bias
- Don't ask "Don't you agree our new feature would be amazing?
- Lesson 139 — Questionnaires and Surveys
- Avoid Facade
- if your subsystem only has three simple methods—direct calls are clearer
- Lesson 283 — When Structural Patterns are Overkill
- Avoid GPL
- if you want maximum adoption in commercial products—many companies prohibit GPL dependencies due to copyleft obligations.
- Lesson 1866 — The GNU GPL Family
- Avoid implementation details
- Don't say "When the database query returns results.
- Lesson 148 — Writing Clear Acceptance CriteriaLesson 563 — Locator Strategies and Best Practices
- Avoid local file storage
- Don't write user files to the server's disk
- Lesson 1393 — Stateless Application Design
- Avoid over-engineering
- Simple tests prevent you from building unnecessary complexity
- Lesson 497 — Starting with the Simplest Test
- Avoid shared mutable state
- Global variables or singleton patterns that hold state between tests are dangerous.
- Lesson 440 — Avoiding Test Interdependence
- Avoid shell execution entirely
- Use language-native APIs instead (like file system libraries rather than `ls` commands)
- Lesson 1057 — Command Injection and OS Command Execution
- Avoid tunnel vision
- by systematically exploring multiple attack scenarios
- Lesson 1082 — Attack Trees and Risk Prioritization
- Avoiding fragility
- Deep inheritance chains break easily when parent classes change.
- Lesson 173 — Favor Composition Over Inheritance
- Avoiding interruptions
- that derail the stakeholder's train of thought
- Lesson 134 — Interview Techniques for Requirements
- Avoiding new bugs
- Multiple simultaneous changes can accidentally introduce new issues while fixing old ones.
- Lesson 1716 — Making One Change at a Time
- Avoiding over-engineering
- Complexity often stems from solving hypothetical future problems.
- Lesson 1825 — Simplicity Over Complexity
- Avoids race conditions
- Multiple concurrent updates won't leave inconsistent cached values
- Lesson 979 — Cache-Aside Invalidation Pattern
- AWS CloudFormation
- and **Azure Resource Manager (ARM) templates**.
- Lesson 1485 — Introduction to CloudFormation and ARM Templates
- AWS KMS
- , **Azure Key Vault**, and **Google Cloud KMS** manage encryption keys with hardware-level security.
- Lesson 1516 — Managed Identity and Security Services
- AWS Secrets Manager
- (AWS cloud)
- Lesson 744 — Dedicated Secret Management ServicesLesson 1500 — Managing Secrets in GitOpsLesson 1516 — Managed Identity and Security Services
- AWS SQS/SNS
- Managed simplicity, cloud-native, but vendor lock-in.
- Lesson 1365 — Choosing a Message Broker: RabbitMQ, Kafka, and Others
- Azure Key Vault
- (Azure cloud)
- Lesson 744 — Dedicated Secret Management ServicesLesson 1500 — Managing Secrets in GitOpsLesson 1516 — Managed Identity and Security Services
- Azure Pipelines
- (tight Microsoft ecosystem integration), **Bitbucket Pipelines** (Atlassian ecosystem), and **TeamCity** (JetBrains' enterprise offering).
- Lesson 637 — Popular CI Platforms
B
- Backend
- Include your real application server and business logic.
- Lesson 556 — E2E Test Scope and Boundaries
- Background Refresh
- Asynchronously fetch fresh data from the database before expiration
- Lesson 971 — Refresh-Ahead Caching
- Background workers
- pull tasks from the queue and process them independently
- Lesson 1385 — Asynchronous 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 750 — Backing Services and Build-Release-Run FactorsLesson 751 — Processes and Port Binding Factors
- Backport
- Merge the fix back into your main development branch
- Lesson 1568 — What are Hotfixes and When to Use Them
- Backport systematically
- – Merge the fix into `main` and open branches afterward to prevent regression
- Lesson 1569 — The Hotfix Process and Risk Management
- Backward compatibility
- means new API versions still work with old client code.
- Lesson 790 — Why API Versioning MattersLesson 1553 — Version Compatibility and Breaking Changes
- Backward compatible
- New consumers can read old messages (add optional fields)
- Lesson 1364 — Message Schemas and Evolution
- Backward recovery
- means abandoning the original goal and executing compensating transactions for all previously completed steps.
- Lesson 1369 — Forward Recovery vs Backward Recovery
- Backward-compatible changes
- Ensure new contracts still support old consumer expectations
- Lesson 552 — Contract Versioning and Evolution
- Bad
- "This function is messy.
- Lesson 95 — Giving Constructive FeedbackLesson 111 — Commit Message Body: The Why, Not the WhatLesson 174 — The Principle of Least Knowledge (Law of Demeter)Lesson 175 — Command-Query SeparationLesson 434 — Writing Self-Documenting TestsLesson 1633 — Writing Clear Technical EmailsLesson 1692 — Using Examples and Code Samples
- Bad comment (redundant)
- Lesson 374 — When to Write Comments
- 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 538 — Performance Considerations with Real Dependencies
- Bandwidth
- Smaller payloads—just IDs instead of full query strings
- Lesson 821 — Persisted Queries and Query Whitelisting
- Bandwidth controls
- Apply network rate limits to prevent one tenant from monopolizing network throughput during large data transfers.
- Lesson 1532 — Resource Allocation and Noisy Neighbors
- Bandwidth is infinite
- Network capacity is limited and often shared with competing traffic.
- Lesson 1111 — Introduction to the Fallacies of Distributed Computing
- Bandwidth savings
- Your origin servers transfer less data
- Lesson 1386 — Content Delivery Networks and Edge Caching
- Baseline creation
- Run tests and capture screenshots of your UI in a known-good state
- Lesson 570 — Screenshot and Visual Regression Tools
- Baseline management
- Store and version approved UI states
- Lesson 580 — Implementing Visual Testing Tools
- Baseline Update
- Approved changes become the new baseline for future tests
- Lesson 580 — Implementing Visual Testing Tools
- Basic request/response transformation
- Format conversions
- Lesson 1328 — Gateway Responsibilities and Trade-offs
- Batch Fetching
- is a lazy loading optimization—it loads related data in chunks as accessed.
- Lesson 945 — Eager Loading and Fetch Strategies
- Batch function
- One efficient query fetches all needed data at once
- Lesson 816 — DataLoader Pattern for Batching and Caching
- Batch small feedback
- Don't nitpick in five separate rounds.
- Lesson 1622 — Review Timing and Response Expectations
- Batch uploads or aggregation
- Client streaming
- Lesson 802 — gRPC Streaming: Unary, Server, Client, and Bidirectional
- Batching
- DataLoader waits for a single "tick" (event loop cycle), collecting all load requests
- Lesson 816 — DataLoader Pattern for Batching and CachingLesson 948 — Write Performance and Batch OperationsLesson 1113 — Fallacy 2: Latency is Zero
- bcrypt
- (1999) was the first widely-adopted algorithm designed specifically for password hashing.
- Lesson 1002 — Password Hashing Algorithms: bcrypt, scrypt, and Argon2Lesson 1003 — Work Factors and Adaptive Hashing
- Be empathetic
- Remember when you were learning—or when you've made similar mistakes.
- Lesson 97 — Review Etiquette and Collaboration
- Be honest about limitations
- in your knowledge or the system's capabilities
- Lesson 1897 — Product Quality and Professional Competence
- Be idiomatic
- Use naming conventions, error handling, and patterns native to each language
- Lesson 855 — SDK Design Principles
- Be responsive and timely
- Whether you're reviewing or responding to feedback, delays hurt team momentum.
- Lesson 97 — Review Etiquette and Collaboration
- Be specific
- Use exact commands, not vague descriptions
- Lesson 1685 — Runbooks 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 1920 — Speaking Up: When and How to Raise Concerns
- Be specific but concise
- Lesson 109 — Writing Effective Commit Messages
- Be Specific, Not Wildcard
- Never use `Access-Control-Allow-Origin: *` for APIs requiring authentication.
- Lesson 1068 — Cross-Origin Resource Sharing (CORS) Security
- Before (conditional)
- Lesson 351 — Replace Conditional with Polymorphism
- Before (hard to test)
- Lesson 510 — TDD and Dependency Injection
- Before (nested)
- Lesson 354 — Replace Nested Conditionals with Guard Clauses
- Before architectural changes
- ("Moving from monolith to microservices—how does this affect our trust boundaries?
- Lesson 1083 — Integrating Threat Modeling into Development
- Before asking
- , document what you've tried (following your debugging process notes).
- Lesson 1719 — Knowing 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 401 — When to Write Tests: Before, During, or After
- Before inversion
- Your `ReportGenerator` class directly depends on a `MySQLDatabase` class.
- Lesson 223 — Inverting Dependencies with Interfaces
- Before major releases
- to validate performance hasn't regressed
- Lesson 1212 — Introduction to Load Testing
- Before measuring
- If you haven't profiled your system or identified real performance problems through metrics, you're optimizing blind.
- Lesson 1190 — Premature Optimization is the Root of All Evil
- Before pushing
- Only amend commits that haven't been pushed to a remote repository yet
- Lesson 113 — Amending and Fixing Work-in-Progress Commits
- Before refactoring
- All tests pass (green)
- Lesson 332 — The Refactoring Safety NetLesson 356 — Consolidate Duplicate Conditional Fragments
- Before the workshop
- Lesson 135 — Workshops and Facilitated Sessions
- behavior
- in a single object that represents a row in a database table.
- Lesson 935 — Active Record PatternLesson 1643 — Giving Constructive Feedback
- Behavior changes
- Different error handling, altered business logic
- Lesson 1708 — Documentation Review in Code Review
- Behavior is reused
- – the same fake database is useful across many tests
- Lesson 478 — Mock Frameworks and Hand-Rolled Doubles
- Behavior verification
- is different: it tests *how* your code interacts with its dependencies, not just *what* it produces.
- Lesson 483 — Behavior Verification: Testing InteractionsLesson 487 — Test 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 449 — Organizing Tests by Behavior vs Implementation
- Behavioral patterns
- Notice callback mechanisms or responsibility chains (Observer, Strategy, Command)
- Lesson 1781 — Identifying Design Patterns in Existing Code
- Behavioral profiling
- Building psychological profiles from browsing patterns, emotional states, or engagement metrics
- Lesson 1909 — Surveillance and Tracking Ethics
- Behavioral signals
- Lesson 1642 — Indicators of Psychological Safety
- behavioral subtyping
- .
- Lesson 209 — Behavioral Subtyping and ContractsLesson 212 — The Rectangle-Square Problem
- Benefits
- Lesson 167 — Abstraction and Information HidingLesson 296 — Implementing Internal vs External IteratorsLesson 803 — RPC Performance: Binary Protocols and HTTP/2Lesson 967 — Read-Through CachingLesson 969 — Write-Behind (Write-Back) CachingLesson 1403 — Multi-Leader and Leaderless ReplicationLesson 1707 — Automated Documentation Generation
- Benefits include
- Lesson 1833 — Collective Code Ownership
- Best candidates for pairing
- Lesson 1627 — Effective Pairing Practices
- Best for
- Cross-browser compatibility requirements, existing Selenium infrastructure, non-JavaScript tech stacks.
- Lesson 557 — Choosing E2E Testing ToolsLesson 823 — REST vs RPC vs GraphQL: Core Trade-offsLesson 1008 — Session Storage StrategiesLesson 1365 — Choosing a Message Broker: RabbitMQ, Kafka, and OthersLesson 1398 — Partitioning Strategies: Hash-BasedLesson 1515 — Managed Container and Compute Services
- Best when
- the outer table is small and the inner table has an index on the join key.
- Lesson 882 — Join Order and Join Algorithms
- Better
- (asking directly):
- Lesson 174 — The Principle of Least Knowledge (Law of Demeter)Lesson 373 — Code Organization and File Structure
- Better collaboration
- Your teammates can pull your latest changes without wading through incomplete work.
- Lesson 645 — The Practice of Small CommitsLesson 841 — Benefits of Schema-First Development
- Better decisions
- When testers sit with developers, they catch issues before code is even written
- Lesson 24 — Cross-Functional Teams
- Better design
- emerges from immediate discussion.
- Lesson 1626 — Benefits and Trade-offs of Pair Programming
- Better documentation
- Each test name describes a single, specific behavior your code guarantees.
- Lesson 433 — Testing One Thing at a Time
- Better estimates
- Small pieces are easier to estimate accurately than monoliths (remember Breaking Down for Better Estimates?
- Lesson 1658 — Work Breakdown Structures (WBS)
- Better international compatibility
- Lesson 1866 — The GNU GPL Family
- Better minimization
- The framework can explore the entire space of simpler inputs more systematically
- Lesson 619 — Integrated Shrinking
- Better partition tolerance
- The system continues working during network splits
- Lesson 922 — Understanding Eventual Consistency
- Better performance
- Write throughput isn't bottlenecked by a single leader
- Lesson 1403 — Multi-Leader and Leaderless Replication
- Better signal
- Failures point directly to integration problems, not unrelated issues
- Lesson 526 — Narrow Integration Tests
- Better testability
- Loosely coupled modules can be tested in isolation without dragging in dependencies
- Lesson 177 — Understanding Coupling: How Components Depend on Each Other
- Better testing
- You test against interfaces, not internal mechanics
- Lesson 167 — Abstraction and Information Hiding
- Better user experience
- no sudden slowdowns
- Lesson 971 — Refresh-Ahead CachingLesson 1110 — Partial Response Strategies
- Better visibility
- The coordinator tracks progress, making debugging and monitoring straightforward
- Lesson 1375 — Trade-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 1910 — What is Algorithmic Bias
- Billing Service
- listens for "OrderPlaced" and creates an invoice
- Lesson 1374 — Choreography: Decentralized Collaboration
- binary search
- through your commit history.
- Lesson 119 — Finding Bugs with Git BisectLesson 1713 — Binary Search for Bug Location
- Biometric data
- (fingerprints, facial recognition, DNA)
- Lesson 1900 — Personal Data and Sensitive Information
- Biometric monitoring
- Facial recognition, emotion detection, or gaze tracking
- Lesson 1909 — Surveillance 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 994 — Multi-Factor Authentication (MFA)
- Bitbucket Pipelines
- (Atlassian ecosystem), and **TeamCity** (JetBrains' enterprise offering).
- Lesson 637 — Popular CI Platforms
- Black Duck
- , **Snyk**, and **licensee** automatically scan your dependency tree and identify license conflicts.
- Lesson 1877 — Verifying License Compatibility in Practice
- Blameless postmortems
- that involve all affected teams
- Lesson 1830 — Collaboration Over SilosLesson 1842 — Learning from Failure Without Blame
- blast radius
- is the scope of impact when something goes wrong.
- Lesson 719 — Deployment Risk and the Need for RollbackLesson 1468 — IaC and the Principle of Least PrivilegeLesson 1741 — Emergency Production Fixes
- Blobs (Binary Large Objects)
- These store your actual file contents.
- Lesson 50 — Understanding Git Objects: Blobs, Trees, and Commits
- Block operations
- until the partition heals or consensus is restored
- Lesson 1408 — CP Systems: Choosing Consistency Over Availability
- Blocked Items
- Work stopped due to dependencies or issues.
- Lesson 1599 — Continuous Improvement with Kanban
- Blockers hide
- Issues lurk undetected until late in the task
- Lesson 1662 — Task Sizing and the Two-Day Rule
- Blue-Green Deployment
- (which switches all traffic at once), canary releases limit your blast radius.
- Lesson 710 — Canary ReleasesLesson 713 — Shadow DeploymentLesson 1476 — Blue-Green and Rolling Deployments
- blue-green deployments
- , you verify the green environment before switching the router.
- Lesson 715 — Deployment Health ChecksLesson 1476 — Blue-Green and Rolling Deployments
- Bold text
- highlights critical terms and concepts without requiring readers to parse full sentences.
- Lesson 1696 — Writing for Scannability
- Booking systems
- (flights, hotels, events) similarly can't double-book limited resources.
- Lesson 902 — When ACID Guarantees Are Critical
- both
- `main` (for deployment) and back to `develop` (to keep them in sync)
- Lesson 84 — Git Flow: Feature, Develop, Release, and Hotfix BranchesLesson 486 — Combining State and Behavior VerificationLesson 1016 — Sessions vs Tokens: Choosing the Right ApproachLesson 1192 — Big- O Notation and Algorithmic ComplexityLesson 1240 — Scalability: Horizontal and VerticalLesson 1313 — Synchronous vs Asynchronous Communication
- Both sides stay aligned
- Changes breaking the contract fail tests immediately
- Lesson 1321 — Contract Testing for Service Integration
- Bottom (Context)
- Edge cases, historical reasons, alternative approaches
- Lesson 1690 — The Inverted Pyramid Structure
- boundaries
- on your design choices.
- Lesson 32 — Non-Functional Requirements as ConstraintsLesson 192 — Plugin Architectures and Extension PointsLesson 604 — Boundary Value and Edge Case Coverage
- 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 612 — When Property-Based Testing Shines
- bounded context
- a specific area of your business domain with its own model and language.
- Lesson 1290 — Defining Module BoundariesLesson 1306 — Domain-Driven Design Bounded Contexts
- Bounded Contexts
- are the solution.
- Lesson 1280 — DDD Strategic Design OverviewLesson 1288 — What is a Modular MonolithLesson 1775 — Identifying Strangulation Boundaries
- Boy Scout Rule examples
- "The checkout module is now 30% more maintainable after Jake's refactoring"
- Lesson 1839 — Celebrating Quality Wins
- Branch by Abstraction
- and **Seams**, you introduce the new architecture alongside the old.
- Lesson 1770 — Incremental Architecture Migration
- Branch coverage
- Which conditional paths (`if`/`else`) were taken
- Lesson 585 — What Code Coverage MeasuresLesson 600 — Branch and Path CoverageLesson 605 — Choosing the Right Coverage Metric
- Branch from main
- Create a descriptively-named feature branch (e.
- Lesson 85 — GitHub 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 1568 — What are Hotfixes and When to Use Them
- Branch-per-environment
- `main` branch for production, `staging` branch for staging.
- Lesson 1499 — Repository Structure for GitOps
- Branches
- are just movable pointers to commits in the graph
- Lesson 65 — Understanding Git History as a DAG
- Breach notification
- Report breaches to authorities within 72 hours
- Lesson 1908 — Privacy Regulations (GDPR, CCPA)
- Breadcrumbs
- Show users where they are in the documentation hierarchy
- Lesson 1694 — Documentation Structure and Navigation
- breadth
- multiple contributing factors that might interact to create systemic issues.
- Lesson 1744 — Fishbone Diagrams for Systemic IssuesLesson 1823 — The Staff Engineer Promotion Path
- Breaking
- (for incompatible changes) are optional but valuable additions.
- Lesson 1554 — Writing Effective Changelogs
- breaking change
- any modification that makes existing client code stop working.
- Lesson 790 — Why API Versioning MattersLesson 1553 — Version Compatibility and Breaking Changes
- breaking changes
- modifications that could require users to update their code.
- Lesson 675 — Version Bumping StrategiesLesson 682 — Dealing with Breaking ChangesLesson 845 — Maintaining OpenAPI Specs Over TimeLesson 846 — Semantic Versioning for APIsLesson 847 — Breaking vs Non-Breaking ChangesLesson 1555 — Automating Changelog GenerationLesson 1687 — Changelog and Release Notes
- Breakpoint actions
- (also called "logpoints" or "tracepoints") let you configure breakpoints to log variable values or messages without halting the program.
- Lesson 1730 — Conditional Breakpoints and Breakpoint Actions
- Breakpoints
- are markers you place on specific lines of code.
- Lesson 1728 — Debugger Fundamentals: Breakpoints and Execution Control
- Breaks in linear flow
- Early returns buried deep, continue/break statements that jump unexpectedly
- Lesson 384 — Cognitive Complexity
- Bridge
- solves a problem *by design*: you anticipate that abstractions and implementations will evolve independently, so you separate them from the start.
- Lesson 262 — Adapter vs Bridge: Understanding the DistinctionLesson 263 — Real-World Examples: UI Frameworks and Device DriversLesson 286 — Pattern Selection CriteriaLesson 1428 — Container Networking Basics
- Bridge communication
- Translate between engineers, product managers, and stakeholders
- Lesson 1786 — What is a Tech Lead?
- brittle
- they break for the wrong reasons.
- Lesson 485 — Over-Specification with Behavior VerificationLesson 1279 — Testing in Clean Architecture
- Brittle tests
- When you rename a method or reorder operations and tests fail despite correct output, that's a red flag.
- Lesson 480 — Avoiding Over-Mocking
- Brittleness
- Small changes in one area break seemingly unrelated features.
- Lesson 1749 — Defining Legacy Code
- Broadcast Communication
- One change triggers notifications to multiple interested parties automatically.
- Lesson 304 — The Observer Pattern: Definition and Intent
- Broadcasting
- domain events to multiple listeners
- Lesson 1357 — Message Brokers vs Event Buses: Core Concepts
- Broken Links
- Lesson 1709 — Documentation Health Metrics
- Brute force attacks
- Attackers can guess passwords systematically
- Lesson 992 — Username and Password Authentication
- Brute-force attacks
- Attackers can try billions of password guesses per second using modern GPUs
- Lesson 1000 — Cryptographic 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 1853 — Inclusive Hiring and Onboarding Practices
- Budget depleted
- Freeze feature work, focus on reliability improvements, implement stricter change controls
- Lesson 1175 — The Error Budget Concept
- Budget exhausted
- Freeze risky changes, focus exclusively on reliability improvements, defer feature work until health improves
- Lesson 1176 — Calculating and Tracking Error Budgets
- Budget limits
- $50K ceiling for cloud infrastructure
- Lesson 1232 — Constraints: Technical and Organizational
- Budget remaining
- Green light for risky deployments, experiments, or feature velocity
- Lesson 1175 — The Error Budget ConceptLesson 1176 — Calculating and Tracking Error Budgets
- Buffer Overflows
- When parsing input without proper bounds checking, attackers can overflow buffers to overwrite adjacent memory.
- Lesson 624 — Detecting Security Vulnerabilities
- bug fixes
- that don't change your API.
- Lesson 675 — Version Bumping StrategiesLesson 1349 — Rebuilding State from Events
- Bugs in production
- are exponentially more expensive than bugs caught during development.
- Lesson 426 — The Cost of Not Testing
- Build
- Lesson 632 — The CI Workflow: Commit to VerificationLesson 750 — Backing Services and Build-Release- Run FactorsLesson 1777 — Migrating Functionality Incrementally
- Build and Test Time
- Well-refactored code often compiles and tests faster due to reduced dependencies and better modularity.
- Lesson 1773 — Measuring 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 641 — Build Artifacts and Caching
- Build buffers
- Estimate timelines with wiggle room for the unexpected
- Lesson 7 — Uncertainty and Risk Management
- Build Duration
- measures how long from commit to verified result.
- Lesson 635 — Measuring CI EffectivenessLesson 657 — Build Health Metrics and Visibility
- Build influence
- through credibility, communication, and results—not authority
- Lesson 1818 — What is a Staff Engineer?
- 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 659 — Build Scripts vs Build Tools
- Build servers
- fail mysteriously because libraries are missing
- Lesson 667 — Declaring Dependencies Explicitly
- Build Stage
- – Compile code, run unit tests, produce artifacts
- Lesson 693 — The Deployment Pipeline ConceptLesson 703 — Artifact Management in Pipelines
- Build success rate
- tells you what percentage of builds pass.
- Lesson 657 — Build Health Metrics and Visibility
- Build the new microservice
- alongside the monolith
- Lesson 1336 — Migrating from Monolith to Microservices
- Build time
- is critical—if builds take 30 minutes, developers stop running them frequently.
- Lesson 650 — CI Metrics and VisibilityLesson 691 — Benefits and Trade-offs
- Build tools
- (like Make, Maven, Gradle, npm scripts with task runners) are specialized programs designed specifically for building software.
- Lesson 659 — Build 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 1922 — Balancing Business Pressure with Professional Standards
- Build verification
- Confirm that the code actually compiles or runs without errors
- Lesson 98 — Automated Checks and CI Integration
- Builder
- = knows *how* to build individual parts
- Lesson 245 — Director Pattern and Construction AlgorithmsLesson 252 — Choosing Between Creational Patterns
- Builder pattern
- splits object creation into two parts:
- Lesson 243 — The Builder Pattern: Separating Construction from RepresentationLesson 439 — Handling Test Setup Complexity
- Building credibility
- Consistently delivering quality work, demonstrating deep technical knowledge, and showing good judgment over time.
- Lesson 1794 — Influence Without Authority
- Building quality in
- reverses this: you integrate quality practices into every activity from the very start.
- Lesson 1835 — Building Quality In
- Built into GitLab
- Offers the tightest integration between source control, CI/CD, and deployment in a single platform.
- Lesson 637 — Popular CI Platforms
- Built-in practices
- Code review, automated testing, and monitoring are non-negotiable defaults, not optional extras
- Lesson 1832 — Defining Quality Culture
- Bulk operations
- skip the ORM's object tracking entirely, issuing optimized SQL directly.
- Lesson 948 — Write Performance and Batch OperationsLesson 951 — When to Drop Down to SQL
- bulkheads
- are resource partitions that isolate different parts of your system.
- Lesson 1105 — Bulkheads and IsolationLesson 1108 — Handling Dependency UnavailabilityLesson 1320 — Handling Partial Failures and Timeouts
- Bursty or unpredictable traffic
- patterns mean you only pay when functions run.
- Lesson 1527 — When Serverless is and Isn't Appropriate
- Bus factor protection
- The team isn't vulnerable if someone leaves
- Lesson 1833 — Collective Code Ownership
- Business
- Budget is $50,000, launch date is March 1st, only three developers available.
- Lesson 132 — Constraints and AssumptionsLesson 1130 — Key-Value Pairs and Log Fields
- Business alignment
- Connecting technical wins to company objectives
- Lesson 1823 — The Staff Engineer Promotion Path
- Business Capability Focus
- Each microservice owns a complete business function (e.
- Lesson 1294 — Defining Microservices
- Business Context
- What business problem or opportunity drove this?
- Lesson 1701 — Writing Effective Context Sections
- Business evolution
- A company grows, pivots, or enters new markets.
- Lesson 1237 — Evolving Drivers Over Time
- Business Goal
- "Reduce time-to-market for new features by 50%"
- Lesson 1233 — Business Goals and Architecture Alignment
- Business goals
- are strategic objectives like increasing revenue, reducing time-to-market, entering new markets, or improving customer retention.
- Lesson 1233 — Business Goals and Architecture Alignment
- Business logic
- (the rules and decisions your application makes)
- Lesson 195 — Identifying Multiple ResponsibilitiesLesson 1684 — Code Comments and Inline Documentation
- Business Logic Layer
- Contains the core rules and workflows of your application
- Lesson 1255 — What is Layered Architecture
- Business Owners
- Those whose company depends on the software's success
- Lesson 19 — Who Are Stakeholders?
- Business rules
- When code enforces a specific policy ("customers over 65 get automatic discounts"), document it.
- Lesson 380 — Inline Documentation for Complex Logic
- Business rules or constraints
- "VAT calculation uses 19% per EU Directive 2006/112/EC"
- Lesson 374 — When to Write Comments
- business stakeholders
- come in.
- Lesson 21 — The Product Owner and Business StakeholdersLesson 25 — Communication Channels and Stakeholder ManagementLesson 26 — Conflicting Stakeholder InterestsLesson 1676 — Communication Strategies for Different Stakeholders
- Business value
- Which features drive revenue or critical outcomes?
- Lesson 152 — The Need for PrioritizationLesson 402 — What to Test: Risk-Based Testing
- Business volatility
- Pricing logic, tax calculations, shipping methods—anything tied to business rules that shift frequently or vary by region/customer.
- Lesson 206 — When to Apply OCP
- Business-critical periods
- Month-end financial closes, tax season, annual audits
- Lesson 1548 — Release Windows and Blackout Periods
- Business-focused
- Represent real-world business concepts and constraints
- Lesson 1274 — Entities: Enterprise Business Rules
- Business/Application Layer
- Execute business rules, orchestrate workflows, enforce domain logic
- Lesson 1257 — Layer Responsibilities and Boundaries
- BY
- (Attribution): Credit must be given to the creator
- Lesson 1869 — Creative Commons and Non-Code Licenses
- Bypass the ORM
- for imports, migrations, or anything processing thousands+ rows where object behavior isn't needed
- Lesson 948 — Write Performance and Batch Operations
- Bypassing the ORM
- means writing raw SQL for specific operations.
- Lesson 948 — Write 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 1201 — Microbenchmarks and Their Limitations
- cache hit
- occurs when requested data is found in the cache.
- Lesson 959 — Cache Hit Ratios and EffectivenessLesson 966 — Cache-Aside (Lazy Loading)Lesson 985 — CDN and Edge Caching
- cache miss
- means the data must be fetched from the slower underlying source.
- Lesson 959 — Cache Hit Ratios and EffectivenessLesson 966 — Cache-Aside (Lazy Loading)Lesson 985 — CDN and Edge Caching
- Cache responses
- Record real responses for faster repeated runs
- Lesson 533 — Testing with Real External APIsLesson 576 — Handling External Services
- Cache tags
- are labels you attach to cache entries when storing them.
- Lesson 981 — Tagging and Bulk Invalidation
- Cache warming
- (also called **pre-population**) means deliberately loading frequently accessed data into your cache *before* users request it.
- Lesson 970 — Cache Warming and Pre-population
- Cache-Aside
- pattern loads data into the cache only when requested, keeping your cache lean and responsive.
- Lesson 966 — Cache-Aside (Lazy Loading)Lesson 967 — Read-Through CachingLesson 1384 — Caching to Reduce Load
- Cacheability
- (responses explicitly indicate if they can be cached)
- Lesson 755 — What 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 758 — Cacheability ConstraintLesson 824 — When to Choose REST
- cacheable
- or **non-cacheable**.
- Lesson 758 — Cacheability ConstraintLesson 791 — URI Versioning (Path-Based)
- Cached Data
- Serve slightly stale data from cache when the live source fails.
- Lesson 1090 — Error Recovery and Graceful DegradationLesson 1100 — The Fallback Pattern
- Caching
- Store results to avoid repeated expensive operations
- Lesson 277 — Proxy Pattern: Controlling Access to ObjectsLesson 279 — Smart Proxies and Reference CountingLesson 641 — Build Artifacts and CachingLesson 816 — DataLoader Pattern for Batching and CachingLesson 1113 — Fallacy 2: Latency is ZeroLesson 1388 — What is Load Balancing?
- Caching complications
- Dynamic links can reduce cache effectiveness
- Lesson 797 — HATEOAS Trade-offs and Maturity Models
- Caching layers
- Use Redis or Memcached to reduce database load
- Lesson 1509 — Cloud-Native Data Management
- Caching proxies
- storing frequently-requested resources closer to clients
- Lesson 763 — Layered System Architecture
- Calculate
- multiply each score by its weight, then sum for a total
- Lesson 155 — Weighted Scoring Models
- Calculate consumption rate
- `(bad events / total events) × 100%`
- Lesson 1176 — Calculating and Tracking Error Budgets
- CalVer
- embeds dates directly into version numbers.
- Lesson 1552 — Calendar 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 286 — Pattern Selection Criteria
- Canary or limited rollout
- – Deploy to a small percentage first, even if briefly
- Lesson 1569 — The 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 713 — Shadow DeploymentLesson 715 — Deployment Health Checks
- cannot
- efficiently support queries filtering only on `B`, only on `C`, or `B` and `C` together.
- Lesson 873 — Composite Indexes and Column OrderLesson 1500 — Managing Secrets in GitOpsLesson 1871 — What is License Compatibility
- Capacity
- is theoretical—how much work your team *could* do.
- Lesson 1656 — Velocity and Capacity Planning
- Capacity planning
- means calculating how much work your team can realistically handle.
- Lesson 1602 — Effective Sprint Planning PracticesLesson 1656 — Velocity and Capacity PlanningLesson 1838 — Production Ownership and On-Call
- Capitalize the first word
- Lesson 109 — Writing Effective Commit Messages
- Capture
- Your E2E tests trigger the tool to take screenshots at key moments
- Lesson 580 — Implementing Visual Testing ToolsLesson 1762 — Approval Testing for Complex Outputs
- Capture new screenshots
- Run the same tests and take new screenshots
- Lesson 579 — Visual Regression Testing Fundamentals
- Cardinality
- refers to the number of distinct values in a column.
- Lesson 875 — Index Selectivity and CardinalityLesson 885 — Statistics 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 1142 — Cardinality Explosion
- Cardinality matters
- Each unique label *combination* creates a new time series.
- Lesson 1140 — Metric 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 1798 — Tailoring Mentorship Styles
- Caretaker
- – manages the mementos (stores them, requests them) but never examines their contents
- Lesson 301 — The Memento Pattern: Capturing Object State
- Cascading Failures
- Lesson 571 — Why E2E Tests Are FragileLesson 574 — Isolating Tests from Each Other
- Case sensitivity
- Unix file systems typically distinguish between `File.
- Lesson 666 — Cross-Platform Build Considerations
- Cassandra
- prioritizes availability and partition tolerance, offering eventual consistency and tunable consistency levels rather than strict ACID
- Lesson 903 — ACID in Different Database SystemsLesson 1421 — Quorum-Based Consensus
- Catalog Context
- Product as searchable items with descriptions
- Lesson 1306 — Domain-Driven Design Bounded Contexts
- Catch embarrassing mistakes
- Find that debug print statement or commented-out code before others do
- Lesson 101 — Self-Reviewing Before Submission
- Catch mistakes early
- Testing reveals design flaws before deployment
- Lesson 17 — Feedback Loops Across the SDLC
- Catch regressions early
- A code change might reintroduce a parser bug that fuzzing previously found.
- Lesson 625 — Integrating Fuzzing into CI/CD
- Catches integration bugs
- Problems between components only surface in full flows
- Lesson 565 — Component Testing vs Full Page Testing
- Category of change
- Added, Changed, Deprecated, Removed, Fixed, Security
- Lesson 1687 — Changelog and Release Notes
- Causal consistency
- Operations that are causally related are seen in order by all nodes
- Lesson 1410 — Consistency Models and the Spectrum
- Causes
- What broke internally (high CPU, disk full, service restart)
- Lesson 1154 — Alert Fundamentals: Symptoms vs. Causes
- Celebrate good practices
- Recognize small commits, quick fixes, and proactive test additions publicly
- Lesson 651 — Building a CI Culture
- Celebrate good work
- Reviews aren't just for finding problems.
- Lesson 97 — Review Etiquette and Collaboration
- Celebrating Quality Wins
- (lesson 1839), you reinforce that growth matters.
- Lesson 1840 — Creating a Culture of Continuous Learning
- Centralize logs
- using the correlation ID to reconstruct the complete execution timeline across services.
- Lesson 1372 — Monitoring and Observability for Sagas
- Centralized control logic
- Complex interaction rules live in one place (the mediator), not scattered across many objects.
- Lesson 298 — The Mediator Pattern: Centralizing Communication
- Centralized management
- One place to update common object templates
- Lesson 249 — Prototype Registry and Object Pools
- Centralized undo/logging
- Commands already support undo; the chain provides structure for validation or logging layers
- Lesson 294 — Combining Chain and Command Patterns
- Centralizes object creation decisions
- , making changes easier
- Lesson 236 — Implementing Factory Methods
- CERN Open Hardware License
- or **TAPR** may apply.
- Lesson 1869 — Creative Commons and Non-Code Licenses
- Certificate Authorities (CAs)
- , installing them correctly, monitoring expiration dates, and renewing them before they expire.
- Lesson 1077 — Certificate Management and Mixed Content
- Chain of Responsibility
- pattern passes requests along a chain of handlers, while the **Command** pattern encapsulates requests as objects.
- Lesson 294 — Combining Chain and Command Patterns
- Challenge acknowledgment
- Admitting when projects are struggling or behind schedule
- Lesson 1828 — Transparency and Open Communication
- Change anxiety
- Every modification risks breaking something unexpected
- Lesson 337 — Bloaters: Large Class and God Object
- Change freeze calendars
- Published months ahead so teams can plan accordingly
- Lesson 1548 — Release Windows and Blackout Periods
- Change impact
- How many files need modification for common feature requests?
- Lesson 1242 — Maintainability and Modifiability
- Change impact analysis
- (you learned this last lesson—assessing cost, risk, schedule effects)
- Lesson 162 — Change Request Processes
- Change implementation freely
- knowing the tests define what "correct" means
- Lesson 405 — Enabling Refactoring with Tests
- Change patterns
- If only 1-2 methods change together repeatedly while others never do, the class lacks cohesion
- Lesson 183 — Measuring Coupling and Cohesion in Practice
- Change Resistance
- Modifying functionality becomes slow and risky.
- Lesson 179 — The Cost of Tight Coupling
- Change ripple effect
- If modifying one class forces changes in 3+ other classes, coupling is too tight
- Lesson 183 — Measuring Coupling and Cohesion in Practice
- Change visibility
- Team members see what changed and when
- Lesson 163 — Version Control for Requirements
- Changes are atomic
- Update the code *and* the docs in the same commit or pull request
- Lesson 1706 — Documentation as Code
- Changes are isolated
- Updating the database doesn't force you to touch UI code
- Lesson 166 — Separation of Concerns
- Changes ripple everywhere
- Adding one feature requires modifying the Observer, Mediator, and Command objects when a direct method call would suffice.
- Lesson 322 — When Patterns Become Obstacles
- Changing field types
- – `"age": "25"` becomes `"age": 25` breaks clients expecting strings
- Lesson 847 — Breaking vs Non-Breaking Changes
- Changing HTTP status codes
- – clients expecting `200` may not handle `201` properly
- Lesson 847 — Breaking vs Non-Breaking Changes
- Character variety
- (uppercase, lowercase, numbers, symbols)
- Lesson 1004 — Password Strength Requirements and Policies
- Characteristics
- Lesson 306 — Implementing Observer: Push vs Pull Models
- Characterization Tests
- Before changing anything, write tests that describe what the code *currently does*, even if it's buggy.
- Lesson 515 — Legacy Code Without TestsLesson 1758 — What Are Characterization Tests
- Chat integrations
- (like Slack, Microsoft Teams, or Discord) post build status directly into team channels.
- Lesson 643 — Build Notifications and Reporting
- Chatty behavior
- Many small operations instead of fewer large batches (N+1 query problems)
- Lesson 1198 — I/O and Network Profiling
- Chatty services
- Services that constantly communicate with the same few neighbors might belong together.
- Lesson 1312 — Getting Service Granularity Right
- Cheap
- Low cost, minimal resources
- Lesson 31 — Good-Fast-Cheap: Pick TwoLesson 415 — Unit Tests: Testing in Isolation
- Check against your description
- Does your PR description match what actually changed?
- Lesson 101 — Self-Reviewing Before Submission
- Check commit messages
- Ensure they follow the 50/72 rule and explain *why*, not just *what*
- Lesson 114 — Commit Hygiene Before Push
- Check compatibility
- Ensure your chosen licenses work together.
- Lesson 683 — Dependency License Compliance
- Check for common mistakes
- (forgotten debug statements, merge conflicts markers)
- Lesson 393 — Pre-commit Hooks and Git Hooks
- Check response patterns
- When an alert fires, do responders take meaningful action, or do they immediately close it?
- Lesson 1162 — Alert 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 1151 — Analyzing Traces for Performance Issues
- Check uniqueness
- Fuzzers often find the same bug through different inputs.
- Lesson 626 — Triaging and Reproducing Fuzzer Findings
- Checked exceptions provide safety
- through compiler enforcement.
- Lesson 1087 — Checked vs Unchecked Exceptions
- Checking permissions once
- at the beginning of a long-running operation
- Lesson 1036 — Complete Mediation
- Checklists
- help reviewers verify those standards are met during review.
- Lesson 1621 — Review Checklists and Standards
- Checksum-based
- More sophisticated tools compute a hash (like SHA-256) of each file's content.
- Lesson 664 — Incremental Builds
- Cherry-picking with modification
- Start by identifying the minimal commit that fixes the issue.
- Lesson 1572 — Backporting Fixes to LTS Versions
- Child process inheritance
- When your application spawns subprocesses, they typically inherit all environment variables, widening the exposure surface.
- Lesson 742 — Secrets in Environment Variables
- Choose backward recovery when
- Lesson 1369 — Forward Recovery vs Backward Recovery
- Choose criteria
- value, cost, risk, complexity, alignment with strategy
- Lesson 155 — Weighted Scoring Models
- Choose eventual consistency when
- Lesson 923 — The Consistency-Availability Trade-off
- Choose forward recovery when
- Lesson 1369 — Forward Recovery vs Backward Recovery
- Choose GraphQL when
- Lesson 814 — GraphQL vs REST Trade-offs
- Choose interaction-based testing when
- Lesson 477 — Interaction-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 778 — Naming 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 1630 — When to Use Pairing vs Mobbing
- Choose pairing
- when two people have the right expertise and the problem scope is manageable.
- Lesson 1630 — When to Use Pairing vs Mobbing
- Choose REST when
- Lesson 814 — GraphQL vs REST Trade-offs
- Choose state-based testing when
- Lesson 477 — Interaction-Based vs State-Based Testing
- Choose strong consistency when
- Lesson 923 — The Consistency-Availability Trade-off
- Choreography
- Each service listens for events and knows what to do next.
- Lesson 1366 — What is the Saga PatternLesson 1370 — Saga Execution CoordinatorsLesson 1375 — Trade- offs: Coupling and Visibility
- Chronological timeline
- Present events in the order they happened, with timestamps.
- Lesson 1183 — Writing 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 651 — Building a CI Culture
- 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 636 — What is a CI ServerLesson 640 — Build Agents and Executors
- CI/CD checks
- that warn or fail when flags exceed lifespan thresholds
- Lesson 1566 — Flag Debt and Cleanup Strategies
- CI/CD integration
- Run automatically on every pull request
- Lesson 580 — Implementing Visual Testing ToolsLesson 1213 — Load Testing Tools and Frameworks
- CI/CD pipelines
- that fail builds exceeding defined thresholds
- Lesson 390 — Using Complexity Metrics in PracticeLesson 551 — Contract Testing Tools and Frameworks
- Circuit Breaker
- After repeated failures, stop trying for a period to avoid cascading problems, then gradually test if recovery is possible.
- Lesson 1090 — Error Recovery and Graceful DegradationLesson 1319 — Circuit Breakers in Distributed Systems
- Circuit Breaker + Fallback
- Lesson 1102 — Combining Resilience Patterns
- Circuit Breakers
- Lesson 1108 — Handling Dependency UnavailabilityLesson 1320 — Handling Partial Failures and TimeoutsLesson 1337 — Trade-offs: Complexity vs. FlexibilityLesson 1508 — Designing for Failure and Self-Healing
- Circuit breaking
- to isolate failing services
- Lesson 1318 — Service Mesh and Communication Infrastructure
- Clarify requirements
- Ask questions, resolve ambiguity, confirm acceptance criteria.
- Lesson 1607 — Backlog Refinement Sessions
- Clarity
- When `test_user_creation_sets_correct_name` fails, you know exactly what broke—the name wasn't set correctly.
- Lesson 433 — Testing One Thing at a TimeLesson 544 — Fixture Files and Data FormatsLesson 737 — Environment-Specific Configuration FilesLesson 937 — Repository PatternLesson 1803 — Defining Technical Vision
- Class Adapter
- – uses inheritance to adapt one interface to another
- Lesson 257 — Class vs Object Adapters
- Class Table Inheritance
- creates one table per class in the hierarchy.
- Lesson 932 — Inheritance 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 1598 — Policies and Classes of Service
- Classification systems
- Marking confidential documents/code
- Lesson 1889 — Trade Secrets: Definition and Protection
- Classify severity
- (crash, memory corruption, logic error, performance issue)
- Lesson 626 — Triaging and Reproducing Fuzzer Findings
- Clean separation
- Configuration stays separate from code (you've seen this with environment variables!
- Lesson 748 — Introduction to the Twelve-Factor App Methodology
- Clean up after itself
- Delete created data, reset state, or restore the environment
- Lesson 574 — Isolating Tests from Each Other
- Clean up properly
- Reset shared state, databases, or files after each test.
- Lesson 440 — Avoiding Test Interdependence
- Cleaning
- After (or before) each test, remove or reset data to prevent pollution.
- Lesson 559 — E2E Test Data Management
- Clear
- "Fix login button alignment"
- Lesson 48 — Committing Changes with 'git commit'Lesson 508 — Designing Testable Interfaces
- Clear banners
- at the top: " This guide covers Version 2.
- Lesson 1710 — Deprecation and Archival Strategies
- Clear boundaries
- Components with well-defined inputs and outputs
- Lesson 1244 — Testability and ObservabilityLesson 1258 — Dependency Direction in Layers
- Clear Branch Structure
- Lesson 1573 — Managing Multiple Active Release Lines
- Clear communication
- Complex technical ideas distilled for different audiences
- Lesson 1820 — Operating at Staff+ Scale
- Clear contracts
- Changes require schema updates, making breaking changes explicit and reviewable
- Lesson 841 — Benefits of Schema-First Development
- Clear customization points
- Subclasses know exactly which steps they can override
- Lesson 315 — Template Method Pattern: Skeleton Algorithms
- Clear enough
- that any team member understands what "done" means
- Lesson 1660 — Decomposing 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 1314 — RESTful Inter-Service Communication
- Clear errors
- Return meaningful error messages that guide developers
- Lesson 855 — SDK Design Principles
- Clear escalation paths
- Know when to email versus when to call an urgent meeting
- Lesson 25 — Communication Channels and Stakeholder Management
- Clear failure points
- When something breaks, the orchestrator knows immediately and can compensate
- Lesson 1375 — Trade-offs: Coupling and Visibility
- Clear Goal Statements
- Start by telling users what they'll achieve.
- Lesson 1681 — User Guides and Tutorials
- Clear intent
- Overrides highlight what's special about each environment
- Lesson 729 — Default Values and Configuration Hierarchies
- Clear ownership
- When a service fails, everyone knows which team owns it
- Lesson 1333 — Team Size and Conway's Law
- Clear Title
- Lesson 91 — Creating Effective Pull Requests
- Clear trigger criteria
- defining what qualifies as an emergency (e.
- Lesson 1549 — Emergency Release Procedures
- Clearer debugging
- Status indicators help identify which dependency failed
- Lesson 1110 — Partial Response Strategies
- Clearer relationships
- "Has-a" is often more honest than forcing "is-a" relationships.
- Lesson 173 — Favor Composition Over Inheritance
- Clicks
- Simulate mouse clicks on buttons, links, or any clickable element.
- Lesson 567 — Testing User Interactions
- Client
- = chooses a Director algorithm and Builder implementation
- Lesson 245 — Director Pattern and Construction AlgorithmsLesson 287 — Chain of Responsibility Pattern: Core ConceptLesson 1018 — OAuth2 Roles and Authorization Flow
- Client and Employer
- – Act in the best interests of client and employer, consistent with the public interest
- Lesson 1894 — The IEEE-CS/ACM Software Engineering Code of Ethics
- Client burden
- Clients must update all endpoint URLs when migrating
- Lesson 791 — URI Versioning (Path-Based)
- Client complexity
- Clients must parse and follow links instead of hardcoding paths
- Lesson 797 — HATEOAS Trade-offs and Maturity Models
- Client Credentials Grant
- is for **machine-to-machine** communication where no user is involved.
- Lesson 1020 — Implicit and Client Credentials Grants
- Client Diversity
- Lesson 828 — Evaluating API Style for Your ContextLesson 1322 — Communication Protocol 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 854 — The Role of Client SDKs
- Client-centric thinking (role interfaces)
- "My invoice generator only needs printing, so give it an `IPrinter` interface.
- Lesson 218 — Role Interfaces and Interface Segregation
- Client-server decoupling is critical
- Server can restructure URLs without breaking clients
- Lesson 797 — HATEOAS Trade-offs and Maturity Models
- Client-server separation
- (concerns are divided)
- Lesson 755 — What REST Is and Why It MattersLesson 756 — Client-Server Separation
- Client-side
- You check the host stand's seating chart yourself, pick an available table, and walk directly there.
- Lesson 1324 — Client-Side vs Server-Side Discovery
- Client-side caching
- Browsers cache static assets and API responses using HTTP headers.
- Lesson 1384 — Caching 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 1324 — Client-Side vs Server-Side Discovery
- Client-side impact counts too
- Heavy JavaScript bundles drain mobile batteries faster, requiring more frequent charging.
- Lesson 1931 — Environmental Impact of Software Systems
- Client-side storage
- for non-sensitive state (JWT tokens)
- Lesson 1382 — Stateless Application Design for ScalabilityLesson 1504 — Stateless Application Design
- Clock skew
- Timeout settings may trigger false partition detection
- Lesson 1407 — Network 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 54 — Cloning Existing RepositoriesLesson 247 — The Prototype Pattern: Cloning Objects
- Close connections cleanly
- (database connections, file handles)
- Lesson 1506 — Health Checks and Graceful Shutdown
- Closed
- .
- Lesson 1096 — The Circuit Breaker PatternLesson 1319 — Circuit Breakers in Distributed Systems
- Closed → Open
- Triggered when failure rate crosses threshold
- Lesson 1097 — Circuit Breaker States and Transitions
- closed for modification
- .
- Lesson 201 — Understanding the Open/Closed PrincipleLesson 205 — The Strategy Pattern and OCP
- Closed questions
- confirm specifics: "Does this process run daily?
- Lesson 134 — Interview 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 637 — Popular CI Platforms
- Cloud-specific services
- offer enormous productivity benefits—managed scaling, built-in monitoring, reduced operational burden, and often better cost optimization.
- Lesson 1510 — Cloud Portability and Vendor Lock-in Trade-offs
- code
- , not judging the **coder**.
- Lesson 97 — Review Etiquette and CollaborationLesson 1744 — Fishbone Diagrams for Systemic Issues
- Code archaeology
- "Who originally created this module and what was its original purpose?
- Lesson 122 — Understanding File History with Git Log --follow
- Code clarity
- Can developers quickly understand what the code does?
- Lesson 1242 — Maintainability and Modifiability
- Code Complexity
- Track cyclomatic complexity (the number of independent paths through code) and cognitive complexity (how hard code is to understand).
- Lesson 1773 — Measuring Refactoring Progress and Success
- Code deployment
- One engineer writes code, another reviews it, a third approves production deployment
- Lesson 1037 — Separation of Duties
- Code generators
- can automatically create client libraries in multiple languages
- Lesson 837 — Introduction to OpenAPI Specification
- Code Injection
- Programming language code inserted into evaluated strings
- Lesson 1053 — What Are Injection Attacks
- Code Level
- If a null pointer caused the crash, add validation at system boundaries.
- Lesson 1748 — Preventing 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 373 — Code Organization and File Structure
- Code quality suffers
- when developers are exhausted.
- Lesson 1856 — Sustainable Pace and the 40-Hour Week
- Code Review
- Reviewers can understand and evaluate one change at a time.
- Lesson 108 — Atomic Commits: One Logical ChangeLesson 1593 — The Kanban BoardLesson 1850 — Unconscious Bias in Technical Decisions
- Code Review as Mentorship
- (lesson 1799) turns everyday activities into teaching moments.
- Lesson 1840 — Creating a Culture of Continuous Learning
- Code Review Discussions
- (building on our earlier mentorship concepts) become teaching moments when reviewers explain the "why" behind suggestions.
- Lesson 1843 — Knowledge Sharing Mechanisms
- Code review tools
- that display metrics alongside changed code
- Lesson 390 — Using Complexity Metrics in Practice
- Code reviews
- Team members read each other's work, catch mistakes, and share knowledge
- Lesson 3 — The Human Element: Teams and CommunicationLesson 1257 — Layer Responsibilities and Boundaries
- Code sections
- Testing whether a bug occurs before or after a certain line
- Lesson 1713 — Binary 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 335 — What Are Code Smells?Lesson 479 — Partial Mocking and Spying on Real Objects
- Code structure and patterns
- indicate the prevailing best practices when written.
- Lesson 1780 — Reading Legacy Code as Historical Documentation
- CODE_OF_CONDUCT.md
- Expected behavior standards to maintain a respectful community
- Lesson 1882 — Starting an Open Source Project
- Code-first
- = Builders construct the house based on experience, *then* create blueprints documenting what was built
- Lesson 840 — Schema-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 845 — Maintaining OpenAPI Specs Over Time
- Code-to-docs tools
- parse specially formatted comments (like JSDoc, Javadoc, or Python docstrings) and generate API references.
- Lesson 1707 — Automated Documentation Generation
- Cognitive Accessibility
- Users with dyslexia, ADHD, or cognitive differences benefit from clear language, predictable navigation, and error prevention.
- Lesson 1929 — Designing for Diverse Abilities
- Cognitive Complexity
- measures the mental burden on someone reading your code.
- Lesson 384 — Cognitive Complexity
- Cognitive Load
- Every pattern requires the reader to recognize it, recall its structure, and understand why it's there.
- Lesson 323 — The Cost of Pattern Overhead
- Cognitive performance degrades
- sharply after 40-50 hours per week.
- Lesson 1856 — Sustainable Pace and the 40-Hour Week
- Coherence
- means ensuring all cache layers reflect a consistent view of your data.
- Lesson 988 — Multi-Layer Cache Coordination
- Cohesion
- measures how closely the responsibilities within a single module (like a class, function, or file) relate to each other.
- Lesson 180 — Understanding Cohesion: What Belongs TogetherLesson 197 — Cohesion and SRPLesson 349 — Move 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 1520 — Serverless 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 1126 — Log Retention and Storage
- Collaboration
- Use branches and pull requests for requirements reviews
- Lesson 163 — Version Control for RequirementsLesson 1600 — What Are Agile Ceremonies?
- Collaboration improves
- Engineers use familiar tools (Git, GitHub, text editors) instead of context-switching to specialized documentation platforms
- Lesson 1706 — Documentation as Code
- Collaboration Over Silos
- means actively breaking down these barriers.
- Lesson 1830 — Collaboration Over SilosLesson 1840 — Creating a Culture of Continuous Learning
- Collaborative
- Active participation from relevant team members
- Lesson 1600 — What Are Agile Ceremonies?
- Colleagues
- – Be fair to and supportive of colleagues
- Lesson 1894 — The IEEE-CS/ACM Software Engineering Code of Ethics
- Collection resources
- represent a group of items (like `/users`, `/products`, `/orders`)
- Lesson 777 — Singleton vs Collection Resources
- Collections
- that group those entities (list of Users, list of Orders)
- Lesson 775 — Identifying Resources from Domain Models
- collective code ownership
- no single person becomes a bottleneck or knowledge silo.
- Lesson 1616 — The Purpose and Value of Code ReviewLesson 1830 — Collaboration Over SilosLesson 1835 — Building Quality InLesson 1839 — Celebrating Quality Wins
- Color Contrast
- Users with color blindness or low vision need sufficient contrast between text and backgrounds (WCAG requires 4.
- Lesson 1929 — Designing for Diverse Abilities
- Column match
- Whether the query's `WHERE`, `JOIN`, or `ORDER BY` clauses align with indexed columns
- Lesson 880 — Index Selection and Coverage
- Combinators
- Compose simple generators into complex ones ("pairs of username and email where email contains the username")
- Lesson 614 — Input Generation StrategiesLesson 615 — Generators and Combinators
- 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 250 — Combining Builder and Prototype Patterns
- Comma-separated values
- Lesson 787 — Filtering Query Parameters
- Command
- pattern encapsulates requests as objects.
- Lesson 294 — Combining Chain and Command PatternsLesson 302 — Implementing Undo with Memento and Command
- Command Injection
- happens when you pass user input to system commands:
- Lesson 1044 — A03: InjectionLesson 1053 — What Are Injection Attacks
- Command Interface
- – Declares an `execute()` method that all concrete commands must implement
- Lesson 291 — Implementing 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 302 — Implementing Undo with Memento and Command
- Commands
- change the state of your system but return nothing (or return `void`)
- Lesson 175 — Command-Query Separation
- Commands are obvious
- when you see one, you know state is changing
- Lesson 175 — Command-Query Separation
- Comments, especially old ones
- , often explain constraints that no longer exist but shaped permanent decisions.
- Lesson 1780 — Reading Legacy Code as Historical Documentation
- Commit and Push
- Lesson 632 — The CI Workflow: Commit to Verification
- Commit Changes to Git
- Developers or operators push infrastructure changes (Kubernetes manifests, Terraform configs, etc.
- Lesson 1497 — The GitOps Workflow
- Commit fully
- Once decided, support it with resources and conviction
- Lesson 1816 — Making Decisions When Consensus Fails
- Commit history
- Testing the midpoint between a known-good and known-bad commit
- Lesson 1713 — Binary Search for Bug Location
- Commit Phase
- Coordinator sends the final "commit" message, and participants commit
- Lesson 1417 — Three-Phase Commit (3PC)
- Commit regularly
- Make commits as you work, pushing to the remote frequently
- Lesson 85 — GitHub Flow: Simplified Branch-and-Merge
- Commit/Push triggers
- Build runs whenever code is pushed to a branch
- Lesson 639 — Build Triggers and Webhooks
- Commitment
- Team members personally commit to achieving team goals
- Lesson 1581 — Scrum Framework Overview
- Commits
- These are the snapshots you create with `git commit`.
- Lesson 50 — Understanding Git Objects: Blobs, Trees, and Commits
- Common HEAD use cases
- Lesson 767 — HEAD and OPTIONS: Metadata Operations
- Common OPTIONS use cases
- Lesson 767 — HEAD and OPTIONS: Metadata Operations
- Common parallel opportunities
- Lesson 1664 — Parallel vs Sequential Work
- Common patterns
- – How to implement pagination, filtering, sorting consistently across all APIs
- Lesson 858 — API Style Guides
- Common policies
- Lesson 1075 — Referrer-Policy and Information Leakage
- Common pre-release labels
- Lesson 674 — Pre-release and Build Metadata
- Common terminology
- (what we mean by "service," "layer," "boundary")
- Lesson 1226 — Architecture as Communication
- Communicate clearly
- Ambiguous comments like "This seems weird" leave the author guessing.
- Lesson 97 — Review Etiquette and CollaborationLesson 653 — Fixing Broken Builds ImmediatelyLesson 1821 — Technical Strategy and Vision
- Communicate constantly
- Check in with stakeholders frequently to catch misunderstandings early
- Lesson 7 — Uncertainty and Risk Management
- Communicate scope upfront
- prefix PR titles like `[Large]` or estimate review time to set expectations.
- Lesson 1620 — Review Size and Scope Trade-offs
- Communicate the issue
- clearly to colleagues or online communities
- Lesson 1721 — Creating Minimal Reproduction Cases
- Communicate threats
- clearly to both technical and non-technical stakeholders
- Lesson 1082 — Attack Trees and Risk Prioritization
- Communication
- Keep stakeholders informed.
- Lesson 1165 — Incident Response WorkflowLesson 1542 — What is Release Planning
- Communication needs
- P0 requires immediate customer communication, status pages, and stakeholder updates.
- Lesson 1164 — Incident Severity Levels
- Communication norms
- Set team expectations about async communication; not everything needs immediate response
- Lesson 1859 — Remote Work and Disconnecting
- Communication Protocols
- Lesson 1573 — Managing Multiple Active Release Lines
- 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 1846 — Building Technical Communities of Practice
- Commutative Updates
- Design operations so order doesn't matter (e.
- Lesson 1371 — Handling Saga Isolation Anomalies
- Company-wide channels
- (all-hands meetings, wiki homepages)
- Lesson 1185 — Building a Learning Culture from Incidents
- Compare
- The tool compares new screenshots against stored baselines
- Lesson 580 — Implementing Visual Testing ToolsLesson 1762 — Approval Testing for Complex Outputs
- Compare against baselines
- – New results are compared to previous runs or thresholds
- Lesson 1203 — Continuous Performance Testing
- Compare branches
- Lesson 120 — Git Show and Diff: Inspecting Changes
- Compare images
- The tool highlights visual differences between baseline and current
- Lesson 579 — Visual Regression Testing Fundamentals
- Compare metrics
- using statistical thresholds (e.
- Lesson 1211 — Baseline Metrics and Regression Detection
- Compare similar traces
- Look at traces for the same endpoint.
- Lesson 1151 — Analyzing Traces for Performance Issues
- Compare to budget
- Have you used 10%, 50%, or 90% of your allowed failures?
- Lesson 1176 — Calculating and Tracking Error Budgets
- Compare two commits
- Lesson 120 — Git Show and Diff: Inspecting Changes
- Comparison
- On subsequent runs, capture new screenshots and compare pixel-by-pixel
- Lesson 570 — Screenshot and Visual Regression Tools
- Compatible licenses
- allow their code to be relicensed under GPL terms:
- Lesson 1873 — GPL License Compatibility Rules
- compensating transactions
- to undo the changes made by previous steps.
- Lesson 1366 — What is the Saga PatternLesson 1367 — Compensating Transactions
- Compensation
- On-call work deserves compensation—whether financial bonuses, additional PTO, or time-in-lieu after incidents.
- Lesson 1857 — On-Call and After-Hours Work
- Compensation sequence
- Lesson 1367 — Compensating Transactions
- Competent Work
- You must deliver quality work using your best professional judgment.
- Lesson 1896 — Client and Employer Obligations
- Compiler and tool versions
- Specify exact versions of compilers (`gcc 11.
- Lesson 689 — Controlling the Build Environment
- Compilers catch type errors
- before you run code
- Lesson 371 — Avoiding Encodings and Hungarian Notation
- Complete
- Cover happy paths, edge cases, and error scenarios
- Lesson 148 — Writing Clear Acceptance CriteriaLesson 444 — Naming Test Methods ClearlyLesson 1777 — Migrating Functionality Incrementally
- Complete audit trail
- Every state change is recorded with context—who did what, when, and why.
- Lesson 1347 — Event Sourcing Fundamentals
- Complete commit history
- (everything you'd see with `git log`)
- Lesson 54 — Cloning Existing Repositories
- Complete in-flight requests
- (respect a reasonable timeout)
- Lesson 1506 — Health Checks and Graceful Shutdown
- Complete Mediation
- you grant minimal necessary access and enforce checks at every step.
- Lesson 1037 — Separation of DutiesLesson 1045 — A04: Insecure DesignLesson 1062 — Cross-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 951 — When to Drop Down to SQL
- Complex algorithms
- "Implementing Dijkstra's algorithm for shortest path"
- Lesson 375 — Self-Documenting Code vs CommentsLesson 380 — Inline Documentation for Complex LogicLesson 1684 — Code Comments and Inline Documentation
- Complex calculations
- (scientific computing, rendering) might demand batch processing or specialized compute architectures
- Lesson 1230 — Functional Requirements as Drivers
- Complex conflict resolution
- The system must decide which write "wins" or merge changes
- Lesson 1403 — Multi-Leader and Leaderless Replication
- Complex interaction verification
- – tracking call counts, argument matching, call order
- Lesson 478 — Mock Frameworks and Hand-Rolled Doubles
- Complex logic
- harbors more bugs.
- Lesson 402 — What to Test: Risk-Based TestingLesson 428 — Test ROI and PrioritizationLesson 1376 — When to Use Orchestration
- Complex mock setup
- If arranging your mocks takes more lines than the actual code being tested, you might be mocking too much detail.
- Lesson 480 — Avoiding Over-Mocking
- Complex object creation
- Constructors with 10 parameters → Consider Builder
- Lesson 326 — Refactoring Toward and Away from Patterns
- Complex problems
- requiring deep thinking and multiple perspectives
- Lesson 1630 — When to Use Pairing vs Mobbing
- Complex queries become slow
- Fetching a simple customer order might require joining 8+ tables
- Lesson 864 — The Cost of Over-Normalization
- Complex XPath
- `/html/body/div[3]/form/div[2]/button` – breaks if structure shifts
- Lesson 563 — Locator 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 299 — Mediator vs Observer: Choosing the Right Pattern
- Complex, realistic test data
- obscures what's actually being tested.
- Lesson 450 — The Problem with Test Data
- complexity
- , **flexibility**, and **use cases**.
- Lesson 823 — REST vs RPC vs GraphQL: Core Trade-offsLesson 1609 — Story Points and Relative EstimationLesson 1665 — Balancing Granularity
- Complexity matters too
- a gnarly conditional loop with multiple edge cases deserves higher coverage than straightforward CRUD operations.
- Lesson 596 — Setting Meaningful Coverage Thresholds
- Complexity showcase
- Technical problems only you could solve given organizational context
- Lesson 1823 — The Staff Engineer Promotion Path
- Complexity Tolerance
- Cache-aside is straightforward—your application controls everything explicitly.
- Lesson 975 — Pattern Selection Trade-offs
- Compliance
- Many regulations *require* access logs
- Lesson 746 — Access Control and Audit Logging for SecretsLesson 1126 — Log Retention and Storage
- Compliance becomes easier
- Many regulations require demonstrable access controls
- Lesson 1033 — Principle of Least Privilege
- Compliance requirements
- HIPAA, GDPR, PCI-DSS mandates specific controls
- Lesson 1232 — Constraints: Technical and Organizational
- Compliance Violations
- Industry regulations (like PCI-DSS, HIPAA, SOC 2) explicitly forbid storing secrets in source code.
- Lesson 741 — The Dangers of Hardcoding SecretsLesson 1568 — What are Hotfixes and When to Use Them
- Component
- The common interface or abstract class that defines operations for both simple and complex objects
- Lesson 265 — Implementing Composite: Components, Leaves, and Composites
- Component Overview
- Identify major subsystems (authentication service, data pipeline, API gateway) and their responsibilities.
- Lesson 1682 — Architecture Documentation
- Component relationships
- Which modules depend on others?
- Lesson 1752 — Reading and Understanding Legacy Code
- Component testing
- isolates individual UI elements (buttons, forms, modals, navigation bars) and tests them independently.
- Lesson 565 — Component Testing vs Full Page Testing
- Components
- should handle distinct parts of your system (like user interface separate from data storage)
- Lesson 166 — Separation of ConcernsLesson 1220 — Architecture as Structure
- Composable patterns
- Use structured formats like `entity:id:version` or `query:table:filter:params`.
- Lesson 961 — Cache Keys and Lookup Mechanisms
- Composite
- A container that holds children (other Composites or Leaves) and implements operations by delegating to its children
- Lesson 265 — Implementing Composite: Components, Leaves, and CompositesLesson 286 — Pattern Selection Criteria
- Composite + Decorator
- A file system (Composite) where files can be compressed or encrypted (Decorator)
- Lesson 285 — Combining Multiple Structural Patterns
- Composition
- means building objects by combining smaller, independent components—essentially "has-a" relationships.
- Lesson 173 — Favor Composition Over InheritanceLesson 205 — The Strategy Pattern and OCP
- Comprehensive coverage
- Test edge cases and states that are hard to trigger in full flows
- Lesson 565 — Component Testing vs Full Page TestingLesson 856 — Auto-Generated vs Hand-Written SDKs
- Compromised maintainer accounts
- allow attackers to inject malicious code into legitimate packages.
- Lesson 1885 — Open Source Security and Supply Chain Risks
- Compromised permanently
- because once exposed, they can't be "un-exposed"
- Lesson 740 — What Are Secrets and Why They Matter
- Compute
- Priced by instance type (CPU/memory) and runtime duration, typically per hour or per second.
- Lesson 1535 — Understanding Cloud Cost Models
- Compute limits
- Set CPU and memory quotas per tenant, similar to Kubernetes resource requests and limits.
- Lesson 1532 — Resource Allocation and Noisy Neighbors
- Computed Columns
- store the result of a calculation directly in the table.
- Lesson 866 — Denormalization Patterns
- Concrete Commands
- – Specific implementations that know which receiver to call and what action to perform
- Lesson 291 — Implementing the Command Pattern
- Concrete Creators
- subclasses that override the factory method to instantiate specific classes
- Lesson 234 — Factory Method Pattern: Intent and Structure
- Concrete Factories
- Implement the interface, creating products for a specific family (`DarkThemeFactory`, `LightThemeFactory`)
- Lesson 237 — Abstract Factory Pattern: Intent and Structure
- Concrete handler classes
- that inherit from the base and implement specific handling logic
- Lesson 288 — Implementing Chain of Responsibility
- Concrete Handlers
- Implement the logic to either handle specific requests or forward them to the next handler in line.
- Lesson 287 — Chain of Responsibility Pattern: Core Concept
- Concrete Products
- the actual classes being instantiated
- Lesson 234 — Factory Method Pattern: Intent and StructureLesson 237 — Abstract Factory Pattern: Intent and Structure
- Concrete strategies
- – each class implements one specific algorithm
- Lesson 312 — Strategy Pattern: Encapsulating Algorithms
- Concrete Table Inheritance
- gives each concrete (instantiable) class its own complete table.
- Lesson 932 — Inheritance and Relational Mapping Strategies
- ConcreteState classes
- implement the State interface, each encapsulating the behavior for one specific state.
- Lesson 309 — State Pattern Structure: Context and State Objects
- concurrency
- (multiple transactions can read and work simultaneously without blocking each other).
- Lesson 909 — Snapshot Isolation ExplainedLesson 1207 — Request Rate and ConcurrencyLesson 1722 — Controlling Environmental Variables
- Concurrent operations
- Multiple nodes might try to make decisions simultaneously
- Lesson 1414 — The 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 889 — Forward-Only Migration Philosophy
- Conditional breakpoints
- solve this by pausing execution only when a specified condition evaluates to true.
- Lesson 1730 — Conditional Breakpoints and Breakpoint Actions
- Conditional explosions
- Giant if-else chains → Consider State or Strategy
- Lesson 326 — Refactoring Toward and Away from Patterns
- Conditional logic
- (like `if` or `switch`) inside the factory to decide which concrete class to instantiate
- Lesson 241 — Simple Factory Pattern
- cone of uncertainty
- illustrates that early project estimates can be off by 4x or more, narrowing as you learn.
- Lesson 1615 — Dealing with Estimation UncertaintyLesson 1654 — Breaking Down for Better Estimates
- Confidence
- Lesson 398 — The Purpose of Testing: Confidence and FeedbackLesson 1467 — Idempotency in Infrastructure Provisioning
- Confidence to continue
- Green tests mean you can safely move forward
- Lesson 629 — The Feedback Loop: Speed and Confidence
- Confidentiality with Limits
- Respect proprietary information and trade secrets, but this duty has boundaries.
- Lesson 1896 — Client and Employer Obligations
- Config file defaults
- (shared across all environments)
- Lesson 729 — Default Values and Configuration Hierarchies
- ConfigMaps
- store configuration data as key-value pairs or entire files that Pods can consume.
- Lesson 1448 — ConfigMaps and SecretsLesson 1458 — ConfigMaps and Secrets
- Configuration
- tells the system which plugins to load
- Lesson 192 — Plugin Architectures and Extension Points
- Configuration and wiring
- Are dependencies correctly injected and connected?
- Lesson 416 — Integration Tests: Testing Module Interactions
- configuration changes
- (security settings modified), and **security exceptions** (injection attempts, rate limit violations).
- Lesson 1040 — Security Logging and AuditabilityLesson 1708 — Documentation Review in Code Review
- configuration drift
- creates the classic "works on my machine" problem at the infrastructure level.
- Lesson 1465 — Benefits of IaC: Repeatability and ConsistencyLesson 1469 — State Management in IaCLesson 1472 — The Concept of Immutable Infrastructure
- Configuration Files
- Generate temporary config files with actual runtime addresses
- Lesson 537 — Network and Service Discovery in TestsLesson 705 — Environment Promotion StrategyLesson 734 — Configuration Files vs Environment VariablesLesson 736 — Precedence and OverridingLesson 737 — Environment-Specific Configuration FilesLesson 1277 — Frameworks and Drivers Layer
- Configuration Management
- Application settings loaded once at startup—database URLs, API keys, feature flags—don't need multiple copies floating around.
- Lesson 232 — When Singleton is AppropriateLesson 1414 — The Distributed Consensus ProblemLesson 1488 — Introduction to Configuration ManagementLesson 1495 — Configuration Management vs Infrastructure ProvisioningLesson 1533 — Tenant Onboarding and Provisioning
- Configuration management tools
- that inject secrets and settings
- Lesson 705 — Environment Promotion StrategyLesson 1495 — Configuration Management vs Infrastructure Provisioning
- Configuration settings
- Environment variables or config files set to test values
- Lesson 540 — What Are Test Fixtures
- Configuration should contain
- Lesson 728 — Configuration vs. Application Code
- Configuration Updates
- Support runtime configuration changes.
- Lesson 1116 — Fallacy 5: Topology Doesn't Change
- Configure
- their behavior (what they return when called)
- Lesson 471 — Test Double Libraries and Frameworks
- Configure percentage rollouts
- (gradually expose a feature to 5%, then 25%, then 100% of users)
- Lesson 1561 — Feature Flag Management Systems
- Confirmation Sessions
- involve presenting requirements back to specific stakeholders—sometimes individually, sometimes in small groups—to verify understanding.
- Lesson 142 — Validating Elicited Requirements
- Conflict resolution
- Retry logic, merge strategies, or user notification
- Lesson 919 — Optimistic Locking with Versioning
- Confusing contracts
- Implementing empty or exception-throwing methods just to satisfy an interface
- Lesson 215 — Interface Segregation Principle: No Client Should Depend on Unused Methods
- Congestion
- Network saturation causes packet drops that look like failures
- Lesson 1407 — Network Partitions in Practice
- Connect to business impact
- Tie technical decisions to outcomes they care about: revenue, customer satisfaction, competitive advantage, risk.
- Lesson 35 — Communicating Trade-offs to Stakeholders
- Connection limits
- Databases can only handle a finite number of simultaneous connections.
- Lesson 1383 — Database Scaling Challenges
- Connection overhead
- Each WebSocket connection requires memory.
- Lesson 822 — Subscription Scalability Challenges
- Connection pooling
- reuses database connections across requests instead of opening new ones constantly, reducing overhead and staying within connection limits.
- Lesson 1383 — Database Scaling ChallengesLesson 1395 — Connection Pooling and Keep-Alive
- Cons
- Headers are less visible than URIs—harder to test in browsers, harder to debug, and easier to forget.
- Lesson 792 — Header-Based VersioningLesson 851 — Managing Multiple API VersionsLesson 916 — Row- Level vs Table-Level LockingLesson 986 — Application-Level CachingLesson 1150 — Sampling StrategiesLesson 1370 — Saga Execution CoordinatorsLesson 1379 — Understanding Scalability: Vertical vs Horizontal ScalingLesson 1400 — Rebalancing Partitions (+1 more)
- Consequences
- Expected outcomes, trade-offs, and risks
- Lesson 1698 — What Are Architecture Decision Records (ADRs)?
- Conservative approach
- Only update PATCH versions automatically.
- Lesson 677 — Dependency Updates and Semantic Versioning
- Consider
- Does your team understand the N+1 query problem?
- Lesson 956 — Team 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 1114 — Fallacy 3: Bandwidth is Infinite
- Consider database defaults
- Some databases (PostgreSQL) default to Read Committed; others (MySQL InnoDB) to Repeatable Read.
- Lesson 910 — Choosing 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 388 — Managing Function Parameters
- Consider downstream consequences
- Who will use this?
- Lesson 1919 — The Engineer's Duty to Public Safety and Welfare
- Consider lazy loading selectively
- For some collections, lazy loading might be preferable to cartesian explosion.
- Lesson 947 — Cartesian Product Explosion
- Consider relaxing ACID when
- Lesson 901 — ACID Trade-offs and Performance
- Consider trade-offs carefully
- Highly optimized code is often less readable, harder to maintain, and more coupled to specific implementations.
- Lesson 519 — Performance-Critical Code
- consistency
- .
- Lesson 89 — Branch Naming Conventions and PoliciesLesson 379 — Documentation Tools and StandardsLesson 451 — Object Mother PatternLesson 545 — Test Containers and Dockerized FixturesLesson 854 — The Role of Client SDKsLesson 901 — ACID Trade-offs and PerformanceLesson 923 — The Consistency- Availability Trade-offLesson 1408 — CP Systems: Choosing Consistency Over Availability (+2 more)
- Consistency (C)
- Every read receives the most recent write or an error.
- Lesson 1406 — The CAP Theorem: Consistency, Availability, and Partition ToleranceLesson 1411 — The PACELC Extension to CAP
- Consistency and Fairness
- Apply the same standards to everyone, including senior engineers.
- Lesson 1617 — Creating a Constructive Review Environment
- Consistency challenges
- Remember *at-least-once* and *exactly-once* delivery semantics?
- Lesson 1346 — Benefits and Trade-offs of Event-Driven Architecture
- Consistency guarantee
- The next read always gets truth from the database
- Lesson 979 — Cache-Aside Invalidation Pattern
- Consistency matters
- Lesson 779 — Designing Resource Representations
- Consistency Needs
- If you need strong consistency (financial transactions, inventory counts), write-through ensures cache and database stay in sync.
- Lesson 975 — Pattern Selection Trade-offs
- Consistent formatting
- Code auto-formats without manual intervention
- Lesson 395 — Editor Integration and IDE SupportLesson 1694 — Documentation Structure and Navigation
- Consistent Quality Work
- Your code, designs, and technical recommendations must reliably meet high standards.
- Lesson 1795 — Building Technical Credibility
- Consistent resource identification
- Resources are identified by URLs (`/users/123`)
- Lesson 759 — Uniform Interface Principle
- Console output
- Logs printed directly to your terminal where you can see them immediately
- Lesson 1128 — Logging in Local Development
- Consolidating test builders
- or object mothers when setup gets complex
- Lesson 502 — Refactoring Test Code
- Constant to Variable
- → replace the literal with a variable
- Lesson 500 — The Transformation Priority Premise
- Constraints
- are the hard boundaries you must work within—things you *cannot* change.
- Lesson 132 — Constraints and AssumptionsLesson 614 — Input Generation StrategiesLesson 755 — What REST Is and Why It MattersLesson 898 — The Consistency Property
- Constraints limit options
- Legacy system integration requirements might prevent the most secure solution
- Lesson 1235 — Driver Conflicts and Trade-offs
- Construction is complex
- The factory encapsulates multi-step setup logic
- Lesson 235 — Factory Method vs Direct Instantiation
- Construction steps
- A builder object lets you set properties step-by-step, clearly naming each choice
- Lesson 243 — The Builder Pattern: Separating Construction from Representation
- Constructor bloat
- Classes requiring many dependencies signal potential coupling issues
- Lesson 183 — Measuring Coupling and Cohesion in Practice
- Constructor Injection
- Dependencies passed when object is created (most common)
- Lesson 225 — DIP and Dependency InjectionLesson 314 — Implementing Strategy with Composition
- consumer
- tests that it sends requests and handles responses correctly according to the contract.
- Lesson 422 — Contract Tests: Testing API BoundariesLesson 548 — What is Contract TestingLesson 549 — Provider and Consumer Contracts
- Consumer creates contract
- Service A declares "I call `/users/123` and expect `{ "userId": 123, "name": "string" }`"
- Lesson 1321 — Contract Testing for Service Integration
- Consumer team
- writes tests defining needed interactions
- Lesson 551 — Contract 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 550 — Consumer-Driven Contract Testing
- Consumers
- are components that listen for specific events and react accordingly.
- Lesson 1340 — Event Producers and Consumers
- Container images
- (Docker images)
- Lesson 665 — Build Artifacts and OutputLesson 689 — Controlling the Build EnvironmentLesson 1475 — Building Immutable Artifacts
- container runtime
- is the low-level software responsible for *actually running* containers.
- Lesson 1426 — The Container RuntimeLesson 1443 — Kubernetes Architecture Overview
- Containerization
- Services run in containers (as you've learned with Docker and Kubernetes), ensuring consistency across environments.
- Lesson 1502 — What is Cloud-Native Architecture
- Containerized
- Essential when you need production database features (triggers, stored procedures, specific SQL dialects)
- Lesson 531 — Setting Up Test Databases
- Containers
- share the host operating system's kernel and isolate processes using OS-level features.
- Lesson 1424 — Containers vs Virtual Machines
- Containment and Remediation
- Lesson 1906 — Data Breach Response and Transparency
- Content Delivery Network (CDN)
- is a geographically distributed network of servers that cache and deliver your content from locations closer to your users.
- Lesson 985 — CDN and Edge Caching
- Contention
- – Multiple threads writing logs simultaneously may compete for shared resources (file handles, buffers), causing blocking and slowdowns.
- Lesson 1127 — Logging Performance Considerations
- Context
- What situation led to this change?
- Lesson 111 — Commit Message Body: The Why, Not the WhatLesson 312 — Strategy Pattern: Encapsulating AlgorithmsLesson 811 — Resolvers: The Execution LayerLesson 1168 — Runbooks and PlaybooksLesson 1698 — What Are Architecture Decision Records (ADRs)?Lesson 1712 — Understanding the Problem Before Debugging
- Context changes
- A variable named `user` now holds multiple users
- Lesson 348 — Rename Method and Rename Variable
- Context grows
- The task accumulates complexity, making handoffs or help harder
- Lesson 1662 — Task Sizing and the Two-Day Rule
- Context is fresh
- You remember exactly what you changed and why
- Lesson 629 — The Feedback Loop: Speed and Confidence
- Context matters
- criminal justice may demand different fairness criteria than college admissions
- Lesson 1913 — The 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 1132 — Context Propagation in LogsLesson 1133 — Structured Logging Libraries and APIsLesson 1147 — Traces, Spans, and Context PropagationLesson 1152 — OpenTelemetry and Tracing Standards
- Context-controlled transitions
- The Context object knows about all possible states and decides when to switch.
- Lesson 310 — State Transitions and Encapsulation
- Contextual clues
- – Function names hint at what operation was attempted
- Lesson 1714 — Reading Error Messages and Stack Traces
- Continuous Delivery
- is the technical practice that makes this collaboration practical.
- Lesson 15 — DevOps and Continuous Delivery in the SDLCLesson 630 — CI vs Continuous Delivery vs Continuous DeploymentLesson 692 — Continuous Delivery vs Continuous Deployment
- Continuous Deployment
- takes the opposite approach: every merge to the main branch automatically deploys to production.
- Lesson 87 — Release Branching vs Continuous DeploymentLesson 630 — CI vs Continuous Delivery vs Continuous DeploymentLesson 692 — Continuous Delivery vs Continuous Deployment
- Continuous Experimentation
- View each sprint as an experiment.
- Lesson 1606 — Sprint Retrospective: Continuous Improvement
- continuous improvement
- .
- Lesson 1590 — Sprint RetrospectiveLesson 1838 — Production Ownership and On-Call
- Continuous Integration (CI)
- is a system that automatically runs these checks whenever code is pushed.
- Lesson 98 — Automated Checks and CI IntegrationLesson 627 — What is Continuous Integration?
- Continuous learning
- isn't optional—it's an ethical requirement in a rapidly evolving field
- Lesson 1897 — Product Quality and Professional Competence
- Continuous monitoring
- ensures you catch slow queries before they impact users.
- Lesson 887 — Query Performance Testing and Monitoring
- contract
- between developers and stakeholders, defining when a feature is "done.
- Lesson 418 — Acceptance Tests: Validating Business RequirementsLesson 698 — Database Changes in CDLesson 717 — Database Schema DeploymentLesson 837 — Introduction to OpenAPI SpecificationLesson 893 — Zero-Downtime Schema Changes
- Contract is shared
- (Git, artifact repository, or Pact Broker)
- Lesson 551 — Contract Testing Tools and Frameworks
- Contract mismatches
- One module sends a date as a string, another expects an object
- Lesson 522 — What Are Module Boundaries
- Contract stored centrally
- Usually in a contract broker or repository
- Lesson 1321 — Contract Testing for Service Integration
- Contracts
- Explicit agreements about inputs, outputs, and behavior that won't break without notice
- Lesson 1290 — Defining Module Boundaries
- Contributing factors
- List what made things worse or allowed the root cause to occur.
- Lesson 1183 — Writing Effective Incident NarrativesLesson 1746 — Contributing Factors vs. Root Causes
- CONTRIBUTING.md
- Guidelines for how others can help — coding standards, pull request process, and communication channels
- Lesson 1882 — Starting an Open Source Project
- Control
- You can simulate specific scenarios (errors, edge cases, timeouts) that would be hard to trigger with real dependencies.
- Lesson 464 — What are Test Doubles and Why Use ThemLesson 1512 — Managed DatabasesLesson 1518 — Evaluating Managed Service Trade-offs
- Control Allowed Methods
- Only enable HTTP methods your API actually needs:
- Lesson 1068 — Cross-Origin Resource Sharing (CORS) Security
- Control concurrency
- Use synchronous execution or fixed thread patterns during debugging
- Lesson 1722 — Controlling Environmental Variables
- Control difficult scenarios
- like network failures or edge cases
- Lesson 473 — The 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 224 — The Dependency Flow vs Control Flow
- Control redundancy
- Only duplicate data where measured performance gains justify it
- Lesson 865 — Strategic Denormalization
- Control test conditions
- Force specific scenarios (success, failure, edge cases) without depending on external systems
- Lesson 466 — Stubs: Providing Canned Responses
- Controlled dependencies
- Ability to substitute test doubles for external services
- Lesson 1244 — Testability and Observability
- Controller Manager
- – Runs multiple controllers that continuously monitor the cluster's state.
- Lesson 1443 — Kubernetes Architecture Overview
- Conventional Commits
- to create release notes programmatically.
- Lesson 1555 — Automating Changelog Generation
- Converge
- Repeat until estimates cluster around a consensus value
- Lesson 1650 — Planning Poker and Consensus Estimation
- Conversational patterns
- Lesson 1642 — Indicators of Psychological Safety
- Cookies
- can be configured with security flags that localStorage/sessionStorage cannot match:
- Lesson 1015 — Securing Tokens in the BrowserLesson 1382 — Stateless Application Design for Scalability
- Coordinate
- data flow between the outer world (UI, database, APIs) and the core business logic
- Lesson 1275 — Use Cases: Application Business Rules
- Coordinate teams
- so everyone knows what phase the project is in
- Lesson 9 — What is the Software Development Lifecycle (SDLC)?
- Coordination needs
- More parallel work requires clearer task boundaries
- Lesson 1665 — Balancing Granularity
- Copy-on-write
- Share a single object until someone tries to modify it, then create a private copy
- Lesson 279 — Smart Proxies and Reference Counting
- Copy-Paste Programming
- Duplicated logic everywhere
- Lesson 1781 — Identifying Design Patterns in Existing Code
- Copyleft licenses
- (like GPL, AGPL) enforce reciprocity.
- Lesson 1863 — Permissive vs Copyleft LicensesLesson 1872 — Permissive vs Copyleft License Compatibility
- Core business entities
- (User, Order, Product, Invoice)
- Lesson 775 — Identifying Resources from Domain Models
- Core business logic
- The foundation everything else builds on
- Lesson 42 — Balancing Debt and DeliveryLesson 596 — Setting Meaningful Coverage Thresholds
- Core needs
- The fundamental problems you're solving (e.
- Lesson 165 — Building Flexibility into Requirements
- Corpus management
- Store discovered inputs in version control or artifact storage, so future fuzzing builds on past discoveries.
- Lesson 625 — Integrating Fuzzing into CI/CD
- Correlate alerts
- by underlying cause—one database outage shouldn't generate 50 separate alerts.
- Lesson 1158 — Alert Fatigue: Reducing False Positives
- Correlation
- Link related events across services using request IDs
- Lesson 1129 — What is Structured LoggingLesson 1135 — Querying and Analyzing Structured Logs
- Correlation IDs
- passed through your event chain
- Lesson 1525 — Serverless Observability and DebuggingLesson 1530 — Tenant Identification and Context
- Correlation patterns
- (how traffic spikes affect latency and errors)
- Lesson 1218 — Production Traffic Analysis for Planning
- Cost
- How much money and how many helpers you have (budget, resources)
- Lesson 28 — The Iron Triangle: Scope, Time, and CostLesson 29 — Quality as a Fourth DimensionLesson 407 — The Testing Pyramid ConceptLesson 885 — Statistics and Query PlanningLesson 1126 — Log Retention and StorageLesson 1186 — What is Performance and Why It MattersLesson 1512 — Managed DatabasesLesson 1518 — Evaluating Managed Service Trade-offs
- Cost constraints
- – What level of reliability can you afford to build and maintain?
- Lesson 1178 — Setting Realistic and Achievable SLOs
- Cost estimates
- I/O operations, memory usage, and CPU processing time
- Lesson 880 — Index Selection and Coverage
- Cost metrics
- Relative numbers showing how expensive each operation is.
- Lesson 878 — Using Query Execution Plans to Validate Indexes
- cost of delay
- is the financial impact of *not* shipping a feature or product on time.
- Lesson 34 — The Cost of Delay and Opportunity CostLesson 42 — Balancing Debt and Delivery
- Cost of failure
- Missing an SLA means refunds, credits, or even contract termination.
- Lesson 1177 — Service Level Agreements (SLAs): Legal Commitments
- Cost optimization
- through negotiation leverage matters
- Lesson 1541 — Evaluating Lock-in vs Time-to-Market Trade-offs
- Cost-aware architectures
- that minimize unnecessary data movement
- Lesson 1117 — Fallacy 6-8: Administration, Cost, and Homogeneity
- Cost-sensitive
- Patents cost $15,000-$30,000+ to file and maintain
- Lesson 1890 — Trade Secrets vs Patents: Choosing a Strategy
- Cost-to-fix ratio
- Small changes with big impact should come first
- Lesson 1772 — Managing Technical Debt During Refactoring
- Costs
- Relative expense of each operation (not real time, but proportional)
- Lesson 879 — Understanding Query Execution Plans
- Count bad events
- Failed requests, slow responses beyond threshold, or downtime minutes
- Lesson 1176 — Calculating and Tracking Error Budgets
- Coupling
- measures how much one software module (a class, function, or component) knows about and depends on another.
- Lesson 177 — Understanding Coupling: How Components Depend on Each OtherLesson 194 — What is the Single Responsibility PrincipleLesson 349 — Move Method and Move Field
- Coupling data
- (sharing or calling across services) gives you:
- Lesson 1309 — Data Duplication vs Data Coupling Trade-offs
- Courage
- Teams have the courage to do the right thing and tackle tough problems
- Lesson 1581 — Scrum Framework Overview
- Cover for teammates
- Build knowledge redundancy so no one is irreplaceable.
- Lesson 1860 — Vacation and Time Off
- Coverage
- Teams might split by time zones (follow-the-sun), weekdays versus weekends, or business hours versus after-hours.
- Lesson 1163 — The 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 622 — Coverage-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 874 — Covering IndexesLesson 880 — Index Selection and Coverage
- CP systems
- Banking systems, inventory management (sacrifice availability during partitions)
- Lesson 1406 — The CAP Theorem: Consistency, Availability, and Partition ToleranceLesson 1408 — CP Systems: Choosing Consistency Over Availability
- CPU-bound bottlenecks
- occur when your application spends most of its time processing data.
- Lesson 1380 — Identifying Scalability Bottlenecks
- CQRS
- Separate read and write data models for optimized scaling
- Lesson 1509 — Cloud-Native Data Management
- Create a branch
- for your changes (never work on `main`)
- Lesson 1880 — Contributing to Open Source Projects
- Create a code challenge
- hash the verifier using SHA-256, then base64url-encode it
- Lesson 1019 — Authorization Code Grant with PKCE
- Create a Mediator interface
- with methods for handling widget events (e.
- Lesson 300 — Implementing a Dialog or Form Mediator
- Create a Rollback Plan
- Lesson 1779 — Completing the Strangler: Decommissioning Legacy
- Create a Safe Environment
- Team members must feel comfortable sharing honest feedback without fear of blame.
- Lesson 1606 — Sprint Retrospective: Continuous Improvement
- Create false confidence
- – tests pass with doubles but fail with real dependencies
- Lesson 473 — The Cost-Benefit Trade-offs of Test Doubles
- Create psychological safety
- Explicitly invite dissenting views: "What concerns haven't we addressed?
- Lesson 1813 — Facilitating Technical Discussions
- Create reusable teaching examples
- Document particularly instructive code sections as case studies your team can reference later.
- Lesson 1785 — Teaching 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 1859 — Remote Work and Disconnecting
- Create safety nets
- Write tests, use version control, and maintain backups
- Lesson 7 — Uncertainty and Risk Management
- Create shared ownership
- by involving team leads in shaping the strategy
- Lesson 1821 — Technical Strategy and Vision
- Create, Read, Update, Delete
- operations on well-defined entities.
- Lesson 952 — Scenarios Where ORMs Shine
- Creates isolated environments
- using Linux kernel features like namespaces (process, network, filesystem isolation) and cgroups (CPU, memory, I/O limits)
- Lesson 1426 — The Container Runtime
- Creating coalitions
- Rather than going it alone, find allies who support your technical direction.
- Lesson 1794 — Influence Without Authority
- Creating tight feedback loops
- (days or weeks, not quarters)
- Lesson 1827 — Bias 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 1801 — Sponsorship and Career Development
- Creation
- – A new secret is generated securely
- Lesson 745 — Secret Rotation and Lifecycle ManagementLesson 1009 — Session Lifecycle and Expiration
- Creation is trivial
- – A simple constructor call with no logic is clear and direct
- Lesson 242 — Factory Pattern Trade-offs
- Creation logic changes frequently
- – The "how" of building objects evolves, and you want to isolate those changes
- Lesson 242 — Factory Pattern Trade-offs
- Creational patterns
- Look for object creation logic separated from usage (Factory, Builder, Singleton)
- Lesson 1781 — Identifying Design Patterns in Existing Code
- Creativity requires rest
- Breakthrough solutions often emerge during downtime, not during the 14th hour at your desk.
- Lesson 1856 — Sustainable Pace and the 40-Hour Week
- Creator
- (abstract or interface): declares the factory method that returns an object
- Lesson 234 — Factory 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 741 — The Dangers of Hardcoding Secrets
- Credential stuffing
- Stolen credentials from one breach used elsewhere
- Lesson 992 — Username and Password AuthenticationLesson 1006 — Credential Stuffing and Breach Detection
- Credential stuffing vulnerabilities
- Systems that don't detect or prevent attackers from testing thousands of leaked username/password pairs from other breaches.
- Lesson 1048 — A07: Identification and Authentication Failures
- Credit attribution
- In async threads, explicitly acknowledge who raised ideas first—visibility matters for career growth.
- Lesson 1851 — Inclusive Communication and Collaboration
- Criminal history
- Lesson 1900 — Personal Data and Sensitive Information
- Critical
- System-wide impact or user-facing service down.
- Lesson 1156 — Alert Severity Levels and Response Expectations
- Critical bugs
- are causing production outages or data corruption
- Lesson 1568 — What are Hotfixes and When to Use ThemLesson 1630 — When to Use Pairing vs Mobbing
- Critical interactions
- that define your contract (like "did we save to the database?
- Lesson 485 — Over-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 1664 — Parallel vs Sequential WorkLesson 1666 — What Are Project DependenciesLesson 1669 — Critical Path and Slack Time
- Critical paths
- are the core workflows users depend on.
- Lesson 402 — What to Test: Risk-Based TestingLesson 430 — Testing in Time-Constrained ProjectsLesson 595 — Coverage in Code ReviewLesson 1763 — Building a Safety Net Incrementally
- Critical-path freshness
- Cache aggressively for reads, but always read-through for writes or transactions to avoid acting on stale state.
- Lesson 982 — Dealing with Stale Data
- Critical/security code
- should have even lower limits (5–7)
- Lesson 390 — Using Complexity Metrics in Practice
- Criticality
- Life-support medical software demands near-total test coverage.
- Lesson 427 — Finding the Testing Sweet Spot
- CronJob
- creates Jobs on a schedule, using familiar cron syntax (like `0 2 * * *` for "2 AM daily").
- Lesson 1462 — Jobs and CronJobs for Batch Work
- Cross-browser support
- Test visual consistency across Chrome, Firefox, Safari, etc.
- Lesson 580 — Implementing Visual Testing Tools
- cross-cutting concerns
- because they literally cut across all your carefully drawn layer boundaries.
- Lesson 1260 — Cross-Cutting Concerns in LayersLesson 1327 — API Gateway Pattern
- Cross-domain scenarios
- where cookies don't travel well
- Lesson 1016 — Sessions vs Tokens: Choosing the Right Approach
- Cross-functional teams
- need collaborative tools like shared boards or chat platforms.
- Lesson 25 — Communication Channels and Stakeholder ManagementLesson 26 — Conflicting Stakeholder InterestsLesson 1676 — Communication Strategies for Different StakeholdersLesson 1830 — Collaboration Over Silos
- Cross-Site Request Forgery (CSRF)
- attacks by controlling when browsers send cookies with cross-origin requests.
- Lesson 1010 — Cookie Security: HttpOnly, Secure, and SameSite
- Cross-Site Scripting (XSS)
- attacks.
- Lesson 1010 — Cookie Security: HttpOnly, Secure, and SameSiteLesson 1015 — Securing Tokens in the Browser
- 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 1613 — The Dangers of Velocity Misuse
- Cross-team forums
- where similar systems exist
- Lesson 1185 — Building a Learning Culture from Incidents
- CRUD-heavy applications
- with minimal business rules often don't benefit—the abstraction overhead outweighs the flexibility gains.
- Lesson 1271 — When to Use Hexagonal Architecture
- Cryptic abbreviations
- `calcTtlPrc` instead of `calculateTotalPrice`
- Lesson 348 — Rename Method and Rename Variable
- CSS Context
- Even CSS can be exploited, so user data in stylesheets needs CSS-specific encoding.
- Lesson 1064 — Preventing 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 544 — Fixture Files and Data Formats
- Current challenges
- Someone struggling with confidence needs encouragement and quick wins; someone plateauing needs stretch assignments.
- Lesson 1798 — Tailoring Mentorship Styles
- Custom formats
- Lesson 66 — Viewing and Navigating History with git log
- Customer collaboration
- means treating your stakeholders as ongoing partners throughout development, not just at the contract-signing and delivery phases.
- Lesson 1578 — Customer Collaboration Over Contract Negotiation
- Customer diversity
- Different clients have different upgrade timelines
- Lesson 1571 — Long-Term Support (LTS) Fundamentals
- Customer empathy
- The team viscerally understands how quality affects real users
- Lesson 1832 — Defining Quality Culture
- Customer expectations
- – What level of reliability do users actually need to trust your service?
- Lesson 1178 — Setting Realistic and Achievable SLOs
- Customer impact was significant
- Even brief outages affecting many users or critical users deserve analysis
- Lesson 1181 — When to Conduct a Postmortem
- CustomerProfileService
- manages customer data
- Lesson 1305 — The Single Responsibility Principle at Service Level
- Customers
- require clear communication about what's changing, especially breaking changes or downtime windows.
- Lesson 1546 — Coordinating with Stakeholders
- Customers/Clients
- Those paying for the software (sometimes different from users!
- Lesson 19 — Who Are Stakeholders?
- Cycle time
- is the duration from when a team starts working on an item until it's marked "Done.
- Lesson 1595 — Managing Flow and Cycle TimeLesson 1597 — Identifying and Resolving BottlenecksLesson 1599 — Continuous Improvement with KanbanLesson 1623 — Measuring and Improving Review Culture
D
- Daily Scrum
- (also called the "daily stand-up") is a short, timeboxed meeting held every day during a sprint.
- Lesson 1588 — Daily Scrum
- Dark launches
- take this further: you deploy new functionality but route zero user traffic to it initially.
- Lesson 695 — Separating Deployment from Release
- Dashboard Links
- Include direct links to pre-filtered dashboards showing the relevant metrics.
- Lesson 1160 — Alert Context: Including Diagnostic Information
- Dashboards
- Automatically visualize trends from structured data
- Lesson 1129 — What is Structured LoggingLesson 1153 — Tracing Infrastructure and Tools
- data
- , not **logic**.
- Lesson 728 — Configuration vs. Application CodeLesson 935 — Active Record PatternLesson 1744 — Fishbone Diagrams for Systemic Issues
- Data Access Layer
- Manages communication with databases or external systems
- Lesson 1255 — What is Layered Architecture
- Data compatibility
- Ensure database changes support both versions during rollback windows
- Lesson 720 — Rollback Strategies and Mechanisms
- Data correctness is critical
- financial transactions, inventory counts, user account balances
- Lesson 1408 — CP Systems: Choosing Consistency Over Availability
- Data Coupling
- means Service A directly queries Service B (or its database) for that data.
- Lesson 1309 — Data Duplication vs Data Coupling Trade-offs
- Data Duplication
- means Service A stores its own copy of data that originates in Service B.
- Lesson 1309 — Data Duplication vs Data Coupling Trade-offs
- Data flow coverage
- helps when tracking how data moves through transformations is critical—think financial calculations or data pipelines.
- Lesson 605 — Choosing the Right Coverage Metric
- Data hiding
- means restricting direct access to that data from outside code.
- Lesson 171 — Encapsulation 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 310 — State Transitions and Encapsulation
- Data in State objects
- If data is truly specific to one state, encapsulate it within that State class.
- Lesson 310 — State Transitions and Encapsulation
- Data inconsistencies
- Edge cases in production data you never encountered
- Lesson 719 — Deployment Risk and the Need for Rollback
- Data inconsistency
- Related changes get partially applied
- Lesson 896 — What Are Transactions and Why They Matter
- Data isolation
- Tenant A cannot access Tenant B's data
- Lesson 1528 — What is Multi-TenancyLesson 1531 — Data Isolation Strategies
- Data Layer
- Persist and retrieve data, manage transactions, handle database-specific concerns
- Lesson 1257 — Layer Responsibilities and Boundaries
- Data loss risk
- Reversing migrations often requires dropping columns or tables.
- Lesson 889 — Forward-Only Migration Philosophy
- Data management
- Schema conventions, data ownership, privacy compliance
- Lesson 1251 — Architecture Governance and Standards
- Data Mapper
- or **Repository**, working hand-in-hand with the **Unit of Work** to track changes to these unique instances.
- Lesson 939 — Identity 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 936 — Data Mapper PatternLesson 938 — Unit of Work PatternLesson 955 — ORMs 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 1901 — Data Minimization Principle
- Data Ownership
- Each microservice typically manages its own database or data store.
- Lesson 1294 — Defining Microservices
- Data ownership lines
- Where different parts of the system manage distinct data models
- Lesson 1775 — Identifying Strangulation Boundaries
- Data partitioning
- (also called **sharding**) solves this by dividing your dataset across multiple databases or storage nodes.
- Lesson 1396 — Why Partition Data?
- Data permanence
- What happens to user data if the company pivots or fails?
- Lesson 1933 — Long-term Thinking and Digital Stewardship
- Data Transfer Object
- is a simple, flat data structure with no business logic — just fields and basic getters/setters.
- Lesson 1278 — Crossing Boundaries with DTOs
- Data transformations
- Operations like compression, encryption, filtering, or mapping often have reversibility or preservation properties.
- Lesson 612 — When Property-Based Testing Shines
- Data-Driven Decision Making
- because collaborative environments produce shared context and evidence.
- Lesson 1830 — Collaboration 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 566 — Handling Dynamic and Conditional UI
- Database
- Use a real database instance (often a separate test database), not an in-memory fake.
- Lesson 556 — E2E Test Scope and BoundariesLesson 920 — Intent Locks and Lock HierarchiesLesson 1007 — Session-Based Authentication Fundamentals
- Database caching
- The database itself caches query results and indexes.
- Lesson 1384 — Caching to Reduce Load
- Database changes
- One DBA prepares a migration script, another executes it in production
- Lesson 1037 — Separation of Duties
- Database Initialization
- involves creating tenant-specific schemas, tables, or database instances depending on your data isolation strategy.
- Lesson 1533 — Tenant Onboarding and Provisioning
- Database interactions
- Can you actually save and retrieve data as expected?
- Lesson 416 — Integration Tests: Testing Module Interactions
- Database optimizer struggles
- More joins mean more possible execution paths to evaluate
- Lesson 864 — The Cost of Over-Normalization
- Database Per Service Pattern
- means each service manages its own dedicated database that no other service can access directly.
- Lesson 1307 — Database Per Service Pattern
- Database queries
- (even in-memory databases add 10-100ms)
- Lesson 461 — Test Speed and the Fast Test PatternLesson 1124 — Logging at System BoundariesLesson 1198 — I/O and Network Profiling
- Database records
- A set of users, products, or orders loaded into your test database
- Lesson 540 — What Are Test Fixtures
- Database Schema
- Ensure your data layer can support requirements from all active versions
- Lesson 851 — Managing Multiple API Versions
- Database sprawl
- A single service owning 50+ database tables likely contains multiple bounded contexts.
- Lesson 1312 — Getting Service Granularity Right
- Database transactions
- Rollback points capture state before changes
- Lesson 301 — The Memento Pattern: Capturing Object State
- Database-per-service
- Each microservice owns its data store, preventing tight coupling
- Lesson 1509 — Cloud-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 951 — When to Drop Down to SQL
- Databases
- need setup, are slow to query, and can leave behind dirty state
- Lesson 516 — External Dependencies and InfrastructureLesson 1382 — Stateless Application Design for ScalabilityLesson 1477 — Handling State in Immutable SystemsLesson 1504 — Stateless Application Design
- Date ranges
- `git log --since="2 weeks ago"` or `git log --until="2024-01-01"`
- Lesson 117 — Reading Git Log: Understanding Commit History
- De-risking complex features
- ("Is this third-party API actually usable?
- Lesson 1844 — Proof of Concepts and Spike Solutions
- Dead code
- is code that never executes.
- Lesson 341 — Dispensables: Dead Code and Speculative Generality
- Dead Letter Queue
- a special queue for messages that couldn't be processed.
- Lesson 1363 — Dead 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 917 — Deadlock Detection and Prevention
- Debug and logging statements
- Development-only code paths that don't affect business logic.
- Lesson 597 — Excluding Code from Coverage
- Debugging
- When something breaks, you can use `git log` to pinpoint exactly which logical change caused the problem.
- Lesson 108 — Atomic Commits: One Logical ChangeLesson 671 — Lock Files and ReproducibilityLesson 686 — What is a Reproducible Build?
- Debugging becomes archaeology
- You're piecing together clues from user reports and guessing what happened
- Lesson 1119 — Why Logging Matters
- Debugging becomes painful
- A failure in Test A breaks Tests B, C, and D
- Lesson 440 — Avoiding Test Interdependence
- Debugging Confidence
- If you can't reproduce a build, you can't truly know what's running in production.
- Lesson 691 — Benefits and Trade-offs
- Debugging nightmares
- Tracing a flow across multiple asynchronous event handlers is exponentially harder than following a synchronous call stack.
- Lesson 1346 — Benefits and Trade-offs of Event-Driven Architecture
- Debugging superpowers
- Reproduce bugs by replaying the exact sequence of events that caused them.
- Lesson 1347 — Event Sourcing Fundamentals
- Debugging value
- Logs lose usefulness over time—a bug from six months ago is rarely investigated.
- Lesson 1126 — Log Retention and Storage
- Decision authority
- Fixing the issue requires taking a major service offline, which needs management approval
- Lesson 1169 — Escalation Paths
- Decision records
- explain why certain fairness definitions or thresholds were chosen
- Lesson 1917 — Explainability and Accountability
- Decision visibility
- Sharing the reasoning behind technical choices, not just the conclusions
- Lesson 1828 — Transparency and Open Communication
- declarative
- way.
- Lesson 661 — Build Tool Configuration FilesLesson 1456 — Deployments: Declarative Updates
- Declarative advantages
- Lesson 1466 — Declarative vs Imperative IaC
- Declarative APIs
- Infrastructure and configuration are defined declaratively (IaC, GitOps principles) rather than through manual steps.
- Lesson 1502 — What is Cloud-Native Architecture
- Declarative challenges
- Lesson 1466 — Declarative vs Imperative IaC
- declarative configuration
- ), and Kubernetes handles the "how.
- Lesson 1455 — ReplicaSets and Ensuring Desired StateLesson 1489 — Declarative vs Imperative Configuration
- Declarative provisioning
- is like ordering from a menu: "I want lasagna.
- Lesson 1480 — Declarative vs Imperative Provisioning
- Declarative setup
- Use configuration files, not manual steps
- Lesson 748 — Introduction to the Twelve-Factor App Methodology
- Decommission Infrastructure
- Lesson 1779 — Completing the Strangler: Decommissioning Legacy
- Decompose Conditional
- means extracting both the conditional expression and its resulting actions into separate, well- named methods.
- Lesson 355 — Decompose Conditional
- Decompose large stories
- Break down epics or oversized stories into smaller, sprint-sized pieces.
- Lesson 1607 — Backlog Refinement Sessions
- Decorator
- is more **flexible**—infinite combinations without new classes.
- Lesson 271 — Decorator vs. Inheritance: Flexibility and ComplexityLesson 286 — Pattern 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 1558 — What Are Feature Flags and Why Use Them
- Decoupled request processing
- Handlers don't know about each other or the command's origin
- Lesson 294 — Combining Chain and Command Patterns
- Decoupling
- Context doesn't know implementation details
- Lesson 314 — Implementing Strategy with CompositionLesson 980 — Event-Driven InvalidationLesson 1316 — Message Queues for Async CommunicationLesson 1359 — Message Queues and Point-to-Point Messaging
- Decoupling producers and consumers
- Services don't need to know about each other
- Lesson 1317 — Event Streaming with Kafka
- Dedicated Learning Time
- Many teams allocate 10-20% of sprint capacity for learning—reading, experimentation, or skill development.
- Lesson 1840 — Creating a Culture of Continuous Learning
- Dedicated persistent storage
- Each pod can have its own PersistentVolumeClaim that persists across pod restarts
- Lesson 1460 — StatefulSets for Stateful Applications
- Dedicated test directories
- give each test suite its own sandbox folder.
- Lesson 535 — Testing File System Operations
- Deduplication
- Identical requests within that batch are combined
- Lesson 816 — DataLoader Pattern for Batching and Caching
- Deep mocking
- couples your tests to internal implementation details.
- Lesson 475 — Mocking at the Boundary
- Default credentials
- are a prime target.
- Lesson 1046 — A05: Security MisconfigurationLesson 1048 — A07: Identification and Authentication Failures
- Default to optional
- Make fields optional unless absolutely required
- Lesson 1901 — Data Minimization Principle
- Default Values
- Return sensible defaults instead of crashing—show a generic profile picture if the image service is down.
- Lesson 1090 — Error Recovery and Graceful DegradationLesson 1100 — The Fallback Pattern
- Defect Escape Rate
- captures bugs that slip through review into production.
- Lesson 1623 — Measuring and Improving Review Culture
- Defect Rates
- Track bugs found in production and during testing.
- Lesson 1773 — Measuring Refactoring Progress and SuccessLesson 1855 — The Cost of Overwork
- Defense
- Use LDAP escaping functions to neutralize special characters like `*`, `(`, `)`, and `\` before inserting user input into filters.
- Lesson 1058 — LDAP and XML Injection
- Defense in Depth
- Use multiple layers.
- Lesson 1030 — Implementing Authorization in ApplicationsLesson 1033 — Principle of Least PrivilegeLesson 1045 — A04: Insecure DesignLesson 1069 — Defense in Depth for Cross-Site AttacksLesson 1076 — Permissions-Policy and Feature ControlLesson 1102 — Combining Resilience Patterns
- Defensive Patents
- Companies build patent portfolios not to sue others, but to deter lawsuits.
- Lesson 1888 — Patent Risks in Software Development
- Defensive Programming
- means anticipating problems and handling them gracefully.
- Lesson 176 — Fail Fast and Defensive ProgrammingLesson 1086 — The Error Handling Spectrum: Let It Crash to Defensive
- Defensive purposes
- Building a patent portfolio to deter litigation or enable cross-licensing
- Lesson 1890 — Trade Secrets vs Patents: Choosing a Strategy
- Defer or skip
- Lesson 430 — Testing in Time-Constrained Projects
- Define
- variables in your CI platform's settings (e.
- Lesson 642 — Environment Variables and SecretsLesson 1039 — Trust Boundaries and Input Validation
- Define a tagging policy
- before creating resources
- Lesson 1536 — Cost Allocation and Tagging Strategies
- Define baseline metrics
- – Establish what "good" performance looks like (e.
- Lesson 1203 — Continuous Performance Testing
- Define criteria
- What matters most for this project?
- Lesson 30 — Trade-off Analysis and Decision Making
- Define desired state
- You describe how servers *should* be configured
- Lesson 1488 — Introduction to Configuration Management
- Define interfaces
- (ports) for data access or external services, letting adapters implement them
- Lesson 1275 — Use Cases: Application Business Rules
- Define technical strategy
- that guides multiple teams for months or years
- Lesson 1818 — What is a Staff Engineer?
- Define the contract
- Create an interface or abstract class that declares what operations are available
- Lesson 190 — Extensibility Through Abstractions
- Define the goal upfront
- Are you deciding between two architectures?
- Lesson 1636 — Running Technical Discussions
- Define the question clearly
- "Can we process 10,000 records/second with library X?
- Lesson 1663 — Identifying Unknowns and Spikes
- Define your target level
- Typically AA for most public-facing applications
- Lesson 584 — WCAG Compliance in Testing
- Defined success/failure criteria
- Know what you're learning before you start
- Lesson 1841 — Safe-to-Fail Experiments and Innovation Time
- Defining clear acceptance criteria
- before coding starts, so everyone knows what "done" means
- Lesson 1835 — Building Quality In
- Defining mitigations
- Which security controls (from your security engineering toolkit) address each threat?
- Lesson 1078 — What is Threat Modeling
- Defining requirements
- what features the product needs
- Lesson 21 — The Product Owner and Business Stakeholders
- Definition of Done
- .
- Lesson 149 — Acceptance Criteria vs Definition of DoneLesson 1591 — Definition of DoneLesson 1601 — Sprint Planning: Purpose and Structure
- Degree Matters
- CAP presents binary choices, but reality offers gradients.
- Lesson 1413 — Beyond CAP: Practical Considerations
- Delayed value
- Resources spent on speculative features delay delivering what users actually need now
- Lesson 170 — You Aren't Gonna Need It (YAGNI)
- Delete a test when
- Lesson 503 — When to Delete or Merge Tests
- Delete outdated comments
- If you extract logic to a new method, remove comments that no longer apply to the original location
- Lesson 381 — Maintaining Comments During Refactoring
- Delete related data
- in analytics systems, caches, and third-party services
- Lesson 1903 — Data Retention and Deletion
- Deleted tests
- Did removing old code also remove its tests appropriately?
- Lesson 595 — Coverage in Code Review
- Deliver working software frequently
- , from weeks to months
- Lesson 1580 — The Twelve Principles Behind the Agile Manifesto
- Deliverables
- are the tangible outputs you produce: working features, documentation, deployed systems, or test reports.
- Lesson 1659 — Identifying Milestones and Deliverables
- Delivery guarantees
- describe what promises your messaging infrastructure makes about whether events arrive at consumers.
- Lesson 1344 — At-Least-Once vs Exactly-Once Delivery
- Demographic parity
- requires equal approval rates across groups (e.
- Lesson 1913 — The Impossibility of Fairness
- Demonstrated Expertise
- Show depth in areas that matter to your team.
- Lesson 1795 — Building Technical Credibility
- Denial of Service
- Inputs that cause crashes, infinite loops, or excessive resource consumption are security issues.
- Lesson 624 — Detecting 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 868 — Balancing Normalization and Performance
- Depend on the abstraction
- Write your code to use the interface, not concrete implementations
- Lesson 190 — Extensibility 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 685 — Automating Dependency UpdatesLesson 1879 — Managing Open Source Dependencies
- Dependencies
- What must exist before other features can be built?
- Lesson 152 — The Need for PrioritizationLesson 749 — Codebase, Dependencies, and Config FactorsLesson 895 — Testing and Reversibility
- Dependencies and imports
- reveal the technology landscape at different times.
- Lesson 1780 — Reading Legacy Code as Historical Documentation
- Dependencies cascade unpredictably
- A single data change might invalidate dozens of cached results.
- Lesson 976 — The Two Hard Things in Computer Science
- Dependencies have cascading failures
- (one problem triggers many)
- Lesson 1093 — Introduction to Resilience Patterns
- Dependencies update
- Libraries and frameworks your code relies on move forward
- Lesson 41 — Code Evolution and Entropy
- Dependency conflicts
- Version mismatches discovered only in production
- Lesson 719 — Deployment Risk and the Need for Rollback
- Dependency confusion attacks
- trick package managers into downloading malicious packages with similar names.
- Lesson 1885 — Open Source Security and Supply Chain Risks
- Dependency direction
- refers to which components depend on which others.
- Lesson 189 — Dependency Direction and Stability
- Dependency flow
- is about which modules or files know about (depend on) other modules at compile-time.
- Lesson 224 — The 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 1260 — Cross-Cutting Concerns in LayersLesson 1269 — Testing Hexagonal Applications
- Dependency Injection (DI)
- is a technique where objects receive their dependencies from external sources rather than creating them internally.
- Lesson 231 — Alternatives to Singleton: Dependency Injection
- dependency inversion
- pass it down as a parameter or callback rather than reaching upward.
- Lesson 1257 — Layer Responsibilities and BoundariesLesson 1273 — The Dependency RuleLesson 1288 — What is a Modular Monolith
- Dependency Inversion (correct)
- Lesson 1268 — Dependency Inversion in Practice
- Dependency Inversion Principle
- the class depends on a concrete implementation (the Singleton) rather than an abstraction.
- Lesson 230 — The 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 221 — What 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 1672 — Tracking 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 1279 — Testing in Clean Architecture
- Dependency rules
- Layer N can only depend on Layer N-1
- Lesson 1257 — Layer Responsibilities and BoundariesLesson 1291 — Enforcing Module Independence
- dependency tree
- .
- Lesson 678 — Handling Transitive DependenciesLesson 1885 — Open Source Security and Supply Chain Risks
- Dependency unavailability
- means an external service you rely on is either:
- Lesson 1108 — Handling Dependency Unavailability
- Deploy
- Roll out application code that writes to both old and new structures
- Lesson 698 — Database Changes in CDLesson 717 — Database Schema Deployment
- Deploy 1
- Add `user_email` column, write to both columns
- Lesson 721 — Database Rollbacks and Schema Compatibility
- Deploy 2
- Migrate old data, read from `user_email`
- Lesson 721 — Database Rollbacks and Schema Compatibility
- Deploy immediately
- Main is always deployable; merging triggers automatic deployment
- Lesson 85 — GitHub Flow: Simplified Branch-and-MergeLesson 1568 — What are Hotfixes and When to Use Them
- Deploy to a subset
- Route a small percentage of traffic to the new version
- Lesson 710 — Canary Releases
- Deployability
- measures how smoothly and quickly you can release your system to production or other environments.
- Lesson 1246 — Portability and Deployability
- Deployable
- The code can be packaged, deployed, and run in production-like environments.
- Lesson 694 — Production-Ready Definition
- Deployment
- Release to users
- Lesson 9 — What is the Software Development Lifecycle (SDLC)?Lesson 11 — SDLC Phases: Testing, Deployment, MaintenanceLesson 12 — Waterfall Model: Sequential DevelopmentLesson 671 — Lock Files and ReproducibilityLesson 695 — Separating Deployment from Release
- Deployment → Implementation
- Performance issues in production inform code optimizations
- Lesson 17 — Feedback Loops Across the SDLC
- Deployment Automation
- Strong CI/CD pipelines enable simpler strategies.
- Lesson 88 — Choosing 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 1312 — Getting Service Granularity RightLesson 1336 — Migrating from Monolith to Microservices
- Deployment Coordination
- Decide whether versions deploy together or independently
- Lesson 851 — Managing Multiple API Versions
- Deployment health checks
- prevent this nightmare by verifying the application is actually healthy before traffic arrives.
- Lesson 715 — Deployment Health Checks
- Deployment independence
- You must deploy parts of the system without touching others
- Lesson 1330 — Microservices Are Not a Goal
- Deployment is safer
- rolling updates without session loss
- Lesson 1382 — Stateless Application Design for Scalability
- Deployment practices
- CI/CD pipelines, infrastructure-as-code templates
- Lesson 1251 — Architecture Governance and Standards
- Deployment Runbooks
- walk through release procedures: pre-deployment checks, rollout steps, smoke tests, and rollback procedures.
- Lesson 1685 — Runbooks 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 676 — Deprecation and Version LifecycleLesson 745 — Secret Rotation and Lifecycle Management
- Deprecation warnings
- Mark features as deprecated in documentation, release notes, and ideally in code (like log warnings).
- Lesson 676 — Deprecation and Version Lifecycle
- Depth
- Solving critical technical problems others couldn't
- Lesson 1823 — The Staff Engineer Promotion Path
- Description
- Maximum number of concurrent database connections
- Lesson 731 — Documentation and Configuration SchemasLesson 831 — Reference Documentation StructureLesson 1687 — Changelog and Release Notes
- Descriptive
- Use clear names like `photos:upload` not just `photos`
- Lesson 1022 — OAuth2 Scopes and Consent
- Descriptive Context
- Lesson 91 — Creating Effective Pull Requests
- Descriptive Message
- – A human-readable explanation of what went wrong
- Lesson 1714 — Reading Error Messages and Stack Traces
- Design
- How will we build it?
- Lesson 9 — What is the Software Development Lifecycle (SDLC)?Lesson 12 — Waterfall Model: Sequential DevelopmentLesson 1219 — Defining Software ArchitectureLesson 1223 — Architecture vs. DesignLesson 1621 — Review Checklists and Standards
- Design Choices
- Even with "neutral" data, the features engineers choose to include or exclude introduce bias.
- Lesson 1910 — What is Algorithmic Bias
- Design decisions
- Lesson 1223 — Architecture vs. Design
- Design defensively
- Assume misuse, anticipate edge cases, and build safeguards
- Lesson 1919 — The 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 1686 — Design Documents and RFCs
- Design quality
- Revealing poor separation of concerns or hidden coupling
- Lesson 335 — What Are Code Smells?
- Design-Around
- When aware of a patent, teams may intentionally implement alternative approaches that achieve the same goal without infringing.
- Lesson 1888 — Patent Risks in Software Development
- Designated responders
- with authority to invoke the procedure
- Lesson 1549 — Emergency Release Procedures
- desired state
- "I want 5 replicas of my web service running, always.
- Lesson 1442 — What is Kubernetes and Why Use ItLesson 1455 — ReplicaSets and Ensuring Desired State
- Detailed design
- specifies door styles, cabinet layouts, and fixture choices.
- Lesson 1219 — Defining Software Architecture
- Detecting anomalies
- Unusual access patterns may signal compromise
- Lesson 746 — Access Control and Audit Logging for Secrets
- Detection
- The tool regularly checks your dependency manifest and lock file against package registries
- Lesson 685 — Automating Dependency UpdatesLesson 1165 — Incident Response Workflow
- Detection and Assessment
- Lesson 1906 — Data Breach Response and Transparency
- Detects the change
- and triggers a build
- Lesson 627 — What is Continuous Integration?Lesson 636 — What is a CI Server
- Determinism
- Tests produce the same results every time, avoiding flakiness from external factors.
- Lesson 464 — What are Test Doubles and Why Use Them
- Deterministic behavior
- Same inputs reliably produce same outputs
- Lesson 1244 — Testability and Observability
- Deterministic generation
- Identical requests must produce identical keys.
- Lesson 961 — Cache Keys and Lookup Mechanisms
- Developer Experience
- Auto-completion, inline documentation, and idiomatic code patterns make integration faster and less error-prone.
- Lesson 854 — The Role of Client SDKs
- Developer identifiers
- `feature/alice/dashboard-redesign` (useful in some workflows)
- Lesson 89 — Branch Naming Conventions and Policies
- developers
- focus on implementing features and solving specific coding problems.
- Lesson 1249 — Architect vs. Developer: Different ResponsibilitiesLesson 1252 — Communicating Architecture to Stakeholders
- Development
- – where features are actively coded and first tested
- Lesson 705 — Environment Promotion StrategyLesson 1199 — Profiling in Production vs Development
- Development dependencies
- Slightly flexible ranges work well—you want linter and tooling updates
- Lesson 673 — Pinning vs Flexible Versioning
- Development Speed
- Tests slow down initial development but speed up changes later.
- Lesson 427 — Finding the Testing Sweet Spot
- Development Team
- Engineers, designers, testers building the product
- Lesson 19 — Who Are Stakeholders?Lesson 1584 — Scrum Roles: Development TeamLesson 1590 — Sprint RetrospectiveLesson 1601 — Sprint Planning: Purpose and StructureLesson 1605 — Sprint Review: Demonstrating Value
- Development velocity
- Having room to innovate, deploy changes, and occasionally fail
- Lesson 1174 — Service Level Objectives (SLOs): Setting Reliability Targets
- DevOps
- , experimenting and learning from failures quickly.
- Lesson 16 — Choosing an SDLC Model for Your ProjectLesson 17 — Feedback Loops Across the SDLC
- Did my request succeed
- Network issues might prevent you from receiving a confirmation, even though the operation completed.
- Lesson 1103 — What Are Partial Failures?
- Different client needs
- Mobile apps might prefer GraphQL (reduce data transfer), while server-to-server integrations use gRPC (performance)
- Lesson 827 — Mixing API Styles in Practice
- Different environments
- may have different versions installed, causing subtle bugs
- Lesson 667 — Declaring Dependencies Explicitly
- Different machines
- Developer laptop vs CI server vs cloud instance
- Lesson 690 — Verifying Build Reproducibility
- Difficult testing
- You must accommodate methods you never call
- Lesson 215 — Interface Segregation Principle: No Client Should Depend on Unused Methods
- Difficult to reverse-engineer
- Algorithms running server-side, proprietary data processing methods
- Lesson 1890 — Trade Secrets vs Patents: Choosing a Strategy
- Difficult to test
- Testing one giant method means testing everything it does at once.
- Lesson 336 — Bloaters: Long MethodLesson 337 — Bloaters: 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 1933 — Long-term Thinking and Digital Stewardship
- Diminishing returns
- For simple CRUD APIs or internal services, Level 2 is often sufficient
- Lesson 797 — HATEOAS Trade-offs and Maturity ModelsLesson 1816 — Making Decisions When Consensus Fails
- Direct conversation
- with the person or team involved (often resolves 80% of issues)
- Lesson 1920 — Speaking Up: When and How to Raise Concerns
- Direct Instantiation
- means calling a constructor yourself:
- Lesson 235 — Factory 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 1042 — A01: Broken Access Control
- Direct ownership
- Resources where individual users or small groups "own" specific items—think shared documents or project folders.
- Lesson 1026 — Access Control Lists (ACLs)
- Directed
- The connections have arrows—they point from one node to another
- Lesson 65 — Understanding Git History as a DAG
- Directed Acyclic Graph
- sounds complex, but break it down:
- Lesson 65 — Understanding Git History as a DAG
- Director
- class manages the step-by-step construction process, letting you reuse complex building algorithms across different builders.
- Lesson 245 — Director Pattern and Construction Algorithms
- Directory-per-environment
- Single branch with `/environments/dev`, `/environments/staging`, `/environments/prod` folders.
- Lesson 1499 — Repository Structure for GitOps
- Dirty reads
- Reading uncommitted data from another transaction that might get rolled back
- Lesson 899 — The Isolation PropertyLesson 904 — What Isolation Levels Protect AgainstLesson 905 — Read Uncommitted Isolation
- Disable animations
- CSS animations and transitions can be caught mid-motion, causing flaky comparisons.
- Lesson 581 — Managing Visual Test Stability
- Disable notifications
- After-hours Slack messages can wait until morning
- Lesson 1859 — Remote Work and Disconnecting
- Disadvantages
- Lesson 1085 — Error Handling Philosophies: Return Codes vs ExceptionsLesson 1131 — JSON and Other Structured Formats
- Disaster recovery
- If your CI server crashes, you rebuild pipelines from files, not memory
- Lesson 708 — Pipeline as Code
- Discard the prototype code
- Resist the urge to "clean it up"
- Lesson 520 — Uncertain 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 6 — Process and Discipline
- Disclose
- the conflict to stakeholders or management
- Lesson 1926 — Conflicts of Interest and Professional Independence
- Discover conflicts early
- when they're easier to resolve
- Lesson 649 — Integrating Before Starting New Work
- Discover integration issues immediately
- rather than in a painful "integration phase"
- Lesson 1661 — Vertical Slicing
- Discover their concerns
- before they become objections
- Lesson 1812 — Identifying and Engaging Stakeholders
- Discovery work
- The time spent understanding a problem is itself hard to estimate
- Lesson 1648 — Why Estimation is Hard
- Discuss Outliers
- When estimates differ widely (e.
- Lesson 1610 — Planning Poker and Estimation TechniquesLesson 1650 — Planning Poker and Consensus Estimation
- Discussion happens
- Reviewers can comment on specific lines of code, ask questions, and suggest improvements
- Lesson 90 — What is a Pull Request?
- Disk-Based Caches
- (SSDs or HDDs) provide even more space at the cost of milliseconds per access.
- Lesson 960 — Cache Memory Hierarchies
- Disparate impact
- occurs when a neutral-seeming policy has disproportionate negative effects on protected groups (e.
- Lesson 1915 — Evaluating 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 1915 — Evaluating Models for Bias
- Distant methods
- If methods in a class never call each other or share data, they probably shouldn't coexist
- Lesson 183 — Measuring Coupling and Cohesion in Practice
- Distinguish urgent from important
- Not every fire needs you.
- Lesson 1858 — Setting Boundaries and Saying No
- Distributed caches
- (Redis, Memcached) for session tokens
- Lesson 1382 — Stateless Application Design for ScalabilityLesson 1504 — Stateless Application Design
- Distributed failures
- Failures are harder to detect because no central observer exists
- Lesson 1375 — Trade-offs: Coupling and Visibility
- Distributed systems
- where shared session storage becomes a bottleneck
- Lesson 1016 — Sessions vs Tokens: Choosing the Right Approach
- Distributed Teams
- When different teams own different services, contracts serve as explicit agreements.
- Lesson 553 — When to Use Contract Tests
- Distributed tracing
- across service boundaries
- Lesson 1337 — Trade-offs: Complexity vs. FlexibilityLesson 1372 — Monitoring and Observability for SagasLesson 1517 — Managed Monitoring and LoggingLesson 1735 — Debugger Limitations and When to Use Alternative Tools
- distribution
- (remote).
- Lesson 278 — Types of Proxies: Virtual, Protection, and RemoteLesson 616 — Controlling Input DistributionLesson 745 — Secret Rotation and Lifecycle Management
- Distribution rights
- Can they share the original or modified versions?
- Lesson 1862 — Copyright, Licensing, and Distribution
- Divergent Change
- occurs when *one class needs to be modified for many different reasons*.
- Lesson 340 — Change Preventers: Divergent Change and Shotgun Surgery
- Diverse interview panels
- reduce individual bias.
- Lesson 1853 — Inclusive Hiring and Onboarding Practices
- DNS-Based Discovery
- uses DNS SRV records, which map service names to IP addresses and ports.
- Lesson 1329 — DNS-Based and Kubernetes Service Discovery
- Docker secrets
- for passwords, tokens, and certificates in production.
- Lesson 1436 — Environment Variables and Configuration
- Document
- your disclosure for transparency
- Lesson 1926 — Conflicts of Interest and Professional Independence
- 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 1922 — Balancing Business Pressure with Professional Standards
- Document as you go
- Capture alternatives, trade-offs, and the reasoning behind decisions.
- Lesson 1813 — Facilitating Technical Discussions
- Document as you understand
- Create ADRs explaining decisions you uncover
- Lesson 1784 — Extracting Reusable Knowledge from Legacy Systems
- Document conformance gaps
- Track which criteria pass, fail, or aren't applicable
- Lesson 584 — WCAG Compliance in Testing
- Document decision rationale
- – Record why you skipped certain gates
- Lesson 1569 — The Hotfix Process and Risk Management
- Document decisions
- Record why certain trade-offs were chosen for future reference
- Lesson 26 — Conflicting Stakeholder InterestsLesson 156 — Stakeholder-Driven Prioritization
- Document dissent
- Record alternative viewpoints for future learning
- Lesson 1816 — Making Decisions When Consensus Fails
- Document everything
- Keep clear records of what you observed, when you raised it, and the responses received.
- Lesson 1920 — Speaking Up: When and How to Raise Concerns
- Document everything clearly
- Write down each conflicting requirement with its source stakeholder.
- Lesson 141 — Handling Conflicting Stakeholder Needs
- Document licenses
- Record each component's license (check `LICENSE` files, package metadata)
- Lesson 1877 — Verifying License Compatibility in Practice
- Document Non-Obvious Behavior
- Lesson 376 — Writing Effective Comments
- Document the context
- Record the exact command, environment, and input that reproduces the issue so teammates can investigate independently.
- Lesson 626 — Triaging and Reproducing Fuzzer Findings
- Document the decision
- Know *why* you're breaking normal forms
- Lesson 865 — Strategic DenormalizationLesson 1235 — Driver 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 789 — Combining Pagination, Filtering, and Sorting
- Document the request
- Write down what's being asked and why
- Lesson 158 — Scope Creep and Change Control
- Document your reasoning
- Why did you choose option A over B?
- Lesson 30 — Trade-off Analysis and Decision Making
- Documentation
- Writing clear explanations so others understand what your code does and why
- Lesson 3 — The Human Element: Teams and CommunicationLesson 6 — Process and DisciplineLesson 397 — Balancing Automation with FlexibilityLesson 708 — Pipeline as CodeLesson 1242 — Maintainability and ModifiabilityLesson 1484 — Terraform Modules and ReusabilityLesson 1630 — When to Use Pairing vs MobbingLesson 1802 — Scaling Your Impact Through Others (+1 more)
- Documentation and configuration schemas
- mean creating clear, structured descriptions of every setting your application accepts.
- Lesson 731 — Documentation and Configuration Schemas
- Documentation and tracking
- Clearly mark which fixes have been backported to which LTS versions.
- Lesson 1572 — Backporting 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 1706 — Documentation 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 379 — Documentation Tools and Standards
- Documentation lives elsewhere
- When docs are in a separate wiki or repository, they're easy to forget.
- Lesson 1705 — Why Documentation Becomes Outdated
- Documentation tools
- (like the interactive ones you learned about previously) can generate beautiful, browsable docs
- Lesson 837 — Introduction to OpenAPI Specification
- Dodd-Frank Act
- (securities violations with SEC reporting)
- Lesson 1921 — Whistleblowing and Legal Protections
- Does NOT protect against
- Phantom reads (new rows matching your query)
- Lesson 907 — Repeatable Read Isolation
- Doesn't prevent
- direct access to subsystem classes when needed
- Lesson 272 — Facade Pattern: Simplifying Complex Subsystems
- DOM-based XSS
- Vulnerability exists in client-side JavaScript itself
- Lesson 1062 — Cross-Site Scripting (XSS) OverviewLesson 1063 — Types of XSS: Stored, Reflected, and DOM-Based
- Domain alignment
- The boundary follows natural divisions in your business domain, not technical convenience
- Lesson 1290 — Defining 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 827 — Mixing API Styles in Practice
- Domain concepts
- clients need to query or manipulate (ShoppingCart, CustomerProfile)
- Lesson 775 — Identifying Resources from Domain ModelsLesson 1782 — Understanding Business Logic from Implementation
- Domain Events
- Services publish events when their data changes.
- Lesson 1310 — Managing Cross-Service Data Consistency
- Domain shaping
- Narrow or expand ranges to focus on boundaries
- Lesson 616 — Controlling Input Distribution
- Domain terminology
- The exact words professionals use, so your requirements match their mental models
- Lesson 140 — Domain Research and Competitive Analysis
- Don't Describe Obvious Code
- Lesson 376 — Writing Effective Comments
- Don't problem-solve in standup
- When someone mentions a blocker, note it and move on.
- Lesson 1604 — Making Standups Work
- Don't profile when
- Lesson 1194 — What is Profiling and When to Profile
- Don't reach for Composite
- when you're certain you'll never have hierarchies—a flat list suffices
- Lesson 283 — When Structural Patterns are Overkill
- Don't skip this
- good observations prevent wild goose chases.
- Lesson 1711 — The Scientific Method in Debugging
- Don't use Adapter
- if you control both interfaces—just make them compatible directly
- Lesson 283 — When 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 1356 — When to Use Event Sourcing and CQRS
- Double-Checked Locking
- Check if the instance exists, lock only if it doesn't, then check again inside the lock before creating.
- Lesson 229 — Implementing Singleton: Thread Safety Concerns
- Downcasting
- does the reverse—converting newer events to older schemas for legacy consumers that haven't upgraded yet.
- Lesson 1355 — Event Schema Evolution
- Download the screenshot
- to see the exact UI state at failure
- Lesson 578 — Screenshot 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 924 — Conflict Resolution Strategies
- Drag-and-Drop
- Simulate clicking and holding an element, moving it to a new position, and releasing.
- Lesson 567 — Testing User Interactions
- Draw a graph
- your goal is the root; broken dependencies are child nodes
- Lesson 1755 — The Mikado Method
- Drawer A (High Cohesion)
- Contains only silverware—forks, knives, spoons.
- Lesson 180 — Understanding Cohesion: What Belongs Together
- Drawer B (Low Cohesion)
- Contains silverware, batteries, a screwdriver, rubber bands, and takeout menus.
- Lesson 180 — Understanding Cohesion: What Belongs Together
- Drift correction
- Re-applying brings infrastructure back to the desired state
- Lesson 1467 — Idempotency 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 1469 — State Management in IaCLesson 1497 — The GitOps Workflow
- Drive toward closure
- Summarize what you've heard, confirm consensus (or lack thereof), and define clear next steps.
- Lesson 1813 — Facilitating Technical Discussions
- driver
- and **navigator** roles frequently—typically every 15-30 minutes.
- Lesson 1627 — Effective Pairing PracticesLesson 1629 — Running Effective Mob Sessions
- Drives major structural decisions
- (e.
- Lesson 1234 — Identifying Architecturally Significant Requirements
- Drop unnecessary capabilities
- Containers inherit Linux capabilities they rarely need
- Lesson 1440 — Docker Security Best Practices
- Dual employment
- Working for a competitor in your spare time or building a side project using your employer's resources
- Lesson 1926 — Conflicts of Interest and Professional Independence
- Dual licensing
- means offering the *same code* under two (or more) different licenses simultaneously.
- Lesson 1876 — Dual Licensing and License Exceptions
- Dual-write pattern
- updates both systems in the same transaction, but risks partial failures requiring compensating transactions.
- Lesson 1778 — Data 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 472 — When to Use Each Type of Test Double
- Duplicate Code
- , and even helps with **Large Class** by breaking responsibilities into smaller pieces.
- Lesson 346 — Extract MethodLesson 791 — URI Versioning (Path-Based)
- Duplicated Data
- means copying information from one table into another to avoid joins.
- Lesson 866 — Denormalization Patterns
- Duplicated effort
- Multiple teams solving the same problem differently
- Lesson 1251 — Architecture 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 901 — ACID Trade-offs and PerformanceLesson 1514 — Managed Storage ServicesLesson 1823 — The 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 711 — Rolling DeploymentsLesson 1138 — RED and USE MethodsLesson 1163 — The On-Call Rotation
- During coding (Test-Alongside Development)
- You alternate between writing a bit of production code and its corresponding tests.
- Lesson 401 — When 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 1083 — Integrating Threat Modeling into Development
- During development
- Check in when questions arise or discoveries happen
- Lesson 151 — Conversations and Collaboration
- During examination
- Examiners search for prior art to reject unpatentable claims
- Lesson 1887 — The Patent Process and Prior Art
- During litigation
- Defendants use prior art to invalidate patents asserted against them
- Lesson 1887 — The Patent Process and Prior Art
- During planning
- Discuss edge cases, technical constraints, and assumptions
- Lesson 151 — Conversations and Collaboration
- During security incidents
- ("We just patched a vulnerability—should we update our attack trees?
- Lesson 1083 — Integrating Threat Modeling into Development
- During the workshop
- Lesson 135 — Workshops and Facilitated Sessions
- Dynamic baselines
- adapt to normal patterns over time.
- Lesson 1157 — Threshold Selection: Static vs. Dynamic Baselines
- Dynamic content
- (personalized pages, API responses) is trickier but still benefits.
- Lesson 985 — CDN and Edge Caching
- Dynamic linking
- from proprietary applications (using `.
- Lesson 1874 — LGPL and Weak Copyleft Compatibility
- Dynamic Orchestration
- Systems like Kubernetes automatically manage container placement, scaling, and recovery.
- Lesson 1502 — What is Cloud-Native Architecture
- Dynamic pipeline configuration
- Add, remove, or reorder handlers at runtime
- Lesson 294 — Combining Chain and Command Patterns
- Dynamic Relationships
- Observers can attach or detach at runtime, making the system flexible.
- Lesson 304 — The Observer Pattern: Definition and Intent
- Dynamic subscriptions
- When observers frequently come and go at runtime
- Lesson 299 — Mediator vs Observer: Choosing the Right Pattern
- Dynamic Testing
- runs your application and actively probes it with malicious inputs.
- Lesson 1061 — Testing for Injection Vulnerabilities
- DynamoDB
- provides ACID transactions, but they're opt-in and more expensive than standard operations
- Lesson 903 — ACID in Different Database SystemsLesson 1421 — Quorum-Based Consensus
E
- E2E tests
- are expensive: slow, brittle, require full environments, and failures are hard to diagnose.
- Lesson 407 — The Testing Pyramid ConceptLesson 554 — What is End-to-End Testing
- Eager Initialization
- Create the instance when the class loads, before any thread accesses it.
- Lesson 229 — Implementing Singleton: Thread Safety Concerns
- Eager loading
- fetches related data upfront, typically using SQL JOINs or batched queries.
- Lesson 940 — Lazy Loading vs Eager LoadingLesson 944 — The N+1 Query Problem
- Early and continuous delivery
- of valuable software satisfies customers
- Lesson 1580 — The Twelve Principles Behind the Agile Manifesto
- Early Integration Issue Detection
- Lesson 841 — Benefits of Schema-First Development
- Early roadmap planning
- When you need to size dozens of ideas quickly to prioritize them.
- Lesson 1651 — T-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 754 — Applying Twelve-Factor Principles in Practice
- Easier changes
- Modifying one component doesn't create a ripple effect requiring updates across your entire codebase
- Lesson 177 — Understanding Coupling: How Components Depend on Each Other
- Easier debugging
- Small scope means fewer variables to investigate
- Lesson 526 — Narrow Integration TestsLesson 645 — The Practice of Small Commits
- Easier maintenance
- When interaction patterns change, you modify the mediator, not every participating object.
- Lesson 298 — The Mediator Pattern: Centralizing CommunicationLesson 433 — Testing One Thing at a Time
- Easier onboarding
- Developers can run with defaults immediately
- Lesson 729 — Default Values and Configuration Hierarchies
- Easy combinations
- Lesson 1871 — What is License Compatibility
- Easy setup
- Fewer dependencies means simpler test data requirements
- Lesson 565 — Component 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 338 — Bloaters: Long Parameter List
- Easy to reverse-engineer
- Innovation visible in compiled code or user interfaces
- Lesson 1890 — Trade Secrets vs Patents: Choosing a Strategy
- Easy Withdrawal
- Users must be able to revoke consent as easily as they granted it.
- Lesson 1902 — Informed Consent and User Control
- Eavesdropping
- Passive monitoring of unencrypted traffic
- Lesson 1115 — Fallacy 4: The Network is Secure
- Economic sense
- You get maximum coverage per dollar/hour invested
- Lesson 408 — Why Pyramid Shape Matters
- Ecosystem Maturity
- Lesson 828 — Evaluating API Style for Your Context
- Edge cases
- Red lines in boundary checks, null handling, or empty collection logic indicate missing edge case tests.
- Lesson 594 — Reading Coverage ReportsLesson 604 — Boundary Value and Edge Case CoverageLesson 833 — Providing Meaningful Examples
- Edge locations
- are data centers positioned strategically around the world.
- Lesson 985 — CDN and Edge Caching
- Efficiency
- Share resources intelligently (Flyweight)
- Lesson 281 — Complexity vs Flexibility Trade-offLesson 1187 — Performance vs Scalability vs EfficiencyLesson 1803 — Defining Technical Vision
- Efficient
- Only changed layers need to be downloaded or stored
- Lesson 1425 — Container Images and Layers
- Efficient Code
- means choosing algorithms and data structures wisely.
- Lesson 1932 — Sustainable Software Engineering Practices
- Effort
- Quick wins vs.
- Lesson 1184 — Identifying Actionable ImprovementsLesson 1609 — Story Points and Relative Estimation
- Either
- types that explicitly wrap success or failure, combining explicit contracts with type safety.
- Lesson 1085 — Error 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 1042 — A01: Broken Access Control
- Eliminate blockers quickly
- Items stuck in "Blocked" or "Waiting for Review" inflate cycle time.
- Lesson 1595 — Managing Flow and Cycle Time
- Eliminate forced expiration
- unless breach suspected — it causes more harm than good.
- Lesson 1004 — Password Strength Requirements and Policies
- Eliminating bottlenecks
- Changes don't wait for one person's availability
- Lesson 1833 — Collective Code Ownership
- Else (E)
- , choose between **Latency (L)** and **Consistency (C)**
- Lesson 1411 — The PACELC Extension to CAP
- Email notifications
- are the traditional approach—send build results to individuals or team lists.
- Lesson 643 — Build Notifications and Reporting
- Emergency procedures
- Defined criteria and approval chains for urgent releases during blackouts
- Lesson 1548 — Release Windows and Blackout Periods
- Emergent design
- means starting with minimal structure and letting better patterns reveal themselves through the red-green-refactor cycle.
- Lesson 512 — Emergent Design vs. Upfront Design
- Emit metrics
- like active saga count, completion rate, and compensation frequency
- Lesson 1372 — Monitoring and Observability for Sagas
- Employee training
- Clear policies about what's confidential
- Lesson 1889 — Trade Secrets: Definition and Protection
- Enable Progressive Rollouts
- Turn features on for 5% of users, monitor behavior, then gradually expand to 100%.
- Lesson 1558 — What 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 1740 — Feature Flags for Production Debugging
- Enabler value
- Some refactorings unlock future work (like breaking entangled dependencies)
- Lesson 1772 — Managing Technical Debt During Refactoring
- Enables change
- You can refactor internals without affecting users
- Lesson 171 — Encapsulation and Data Hiding
- Enables gradual cutover
- by letting you shift functionality piece by piece
- Lesson 1776 — Implementing the Facade Layer
- Enables Reuse
- Once extracted, that method becomes available for other parts of your code that need the same logic.
- Lesson 346 — Extract MethodLesson 353 — Introduce Parameter Object
- Enabling
- they give you confidence to refactor fearlessly
- Lesson 415 — Unit Tests: Testing in Isolation
- Encapsulation
- means bundling related data and the methods that work with that data into a single unit (like a class or module).
- Lesson 171 — Encapsulation and Data HidingLesson 172 — Program to an Interface, Not an ImplementationLesson 186 — Why Software Must Be Designed for ChangeLesson 562 — Page Object PatternLesson 1307 — Database Per Service Pattern
- Encode/escape
- for the context where data will be used
- Lesson 1039 — Trust Boundaries and Input Validation
- Encryption
- using public algorithms (AES, RSA) that remain secure despite being fully documented
- Lesson 1035 — Security by Design, Not ObscurityLesson 1115 — Fallacy 4: The Network is Secure
- End Users
- The people who will actually use the software daily
- Lesson 19 — Who Are Stakeholders?Lesson 22 — End Users and Customer StakeholdersLesson 25 — Communication Channels and Stakeholder ManagementLesson 26 — Conflicting Stakeholder InterestsLesson 1229 — Stakeholder Concerns as DriversLesson 1676 — Communication Strategies for Different Stakeholders
- End-of-life (EOL)
- No further updates; users must upgrade
- Lesson 1571 — Long-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 554 — What 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 409 — The Cost-Confidence Trade-offLesson 412 — The Testing Trophy Alternative
- End-user products
- Users care about "is it recent?
- Lesson 1552 — Calendar Versioning and Alternative Schemes
- Endpoint patterns
- – URL structure standards you've learned (resources as nouns, consistent hierarchies)
- Lesson 858 — API Style Guides
- Enforce consistency
- The tool continuously checks and corrects drift
- Lesson 1488 — Introduction to Configuration Management
- Enforcement techniques
- Lesson 1257 — Layer Responsibilities and Boundaries
- Enforces consistency
- All subclasses follow the same algorithm structure
- Lesson 315 — Template Method Pattern: Skeleton Algorithms
- Enforces resource constraints
- to prevent one container from consuming excessive CPU or memory
- Lesson 1426 — The Container Runtime
- Engage Professionally
- Lesson 106 — Responding Constructively to Review Feedback
- Engineering leadership
- – balance technical debt, team growth, strategic alignment
- Lesson 1812 — Identifying and Engaging Stakeholders
- Engineering newsletters
- highlighting key learnings
- Lesson 1185 — Building a Learning Culture from Incidents
- Engineering Team
- needs time for quality work, testing, and manageable complexity.
- Lesson 26 — Conflicting Stakeholder Interests
- Engineers
- benefit from daily stand-ups and shared documentation.
- Lesson 25 — Communication Channels and Stakeholder Management
- Engineers and architects
- Full technical detail, code patterns, architecture decisions
- Lesson 1676 — Communication Strategies for Different Stakeholders
- Engineers on your team
- – care about maintainability, learning opportunities, day-to-day workflow
- Lesson 1812 — Identifying and Engaging Stakeholders
- entities
- (nouns) in your system, not the operations (verbs) you perform on them.
- Lesson 774 — Resources as Nouns, Not VerbsLesson 1274 — Entities: Enterprise Business RulesLesson 1279 — Testing in Clean Architecture
- Entropy analysis
- Detecting high-randomness strings that look like generated tokens
- Lesson 743 — Secret Scanning and Prevention
- Entry and exit points
- of suspicious functions to confirm they're being called
- Lesson 1715 — Adding Strategic Print Statements and Logging
- Environment
- What OS, language versions, or tools do you need?
- Lesson 638 — Build Configuration FilesLesson 1130 — Key-Value Pairs and Log FieldsLesson 1744 — Fishbone Diagrams for Systemic Issues
- Environment Dependencies
- Lesson 571 — Why E2E Tests Are Fragile
- Environment differences
- Production behaves differently than staging
- Lesson 719 — Deployment Risk and the Need for Rollback
- Environment retained briefly
- – The execution context may stay "warm" for subsequent invocations
- Lesson 1520 — Serverless 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 1446 — Namespaces for Resource Isolation
- Environment Variables
- Pass connection strings as environment variables to each service during test startup
- Lesson 537 — Network and Service Discovery in TestsLesson 642 — Environment Variables and SecretsLesson 689 — Controlling the Build EnvironmentLesson 705 — Environment Promotion StrategyLesson 734 — Configuration Files vs Environment VariablesLesson 736 — Precedence and OverridingLesson 737 — Environment-Specific Configuration FilesLesson 751 — Processes and Port Binding Factors (+2 more)
- Environment-specific overrides
- (development, staging, production)
- Lesson 729 — Default 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 1433 — Image Tagging and Versioning Strategies
- Environmental
- Users have slow internet connections, system must work offline, data cannot leave the EU.
- Lesson 132 — Constraints and Assumptions
- Environmental attributes
- time of day, IP address, device type, risk score
- Lesson 1028 — Attribute-Based Access Control (ABAC)
- Environmental factors
- Changing priorities, availability of team members, infrastructure issues
- Lesson 1648 — Why Estimation is Hard
- Environmental footprint
- Will this architecture choice consume exponentially more energy as we scale?
- Lesson 1933 — Long-term Thinking and Digital Stewardship
- Environmental impact
- Considering resource consumption and sustainability
- Lesson 1895 — Public Interest and Social Responsibility
- EOL timelines
- Announce end-of-life dates well in advance (e.
- Lesson 676 — Deprecation and Version Lifecycle
- Equal trade-offs
- Multiple options are genuinely equivalent, but paralysis persists
- Lesson 1816 — Making Decisions When Consensus Fails
- Equalized odds
- requires equal false positive and false negative rates across groups
- Lesson 1913 — The Impossibility of Fairness
- Error budget alignment
- Does this help you meet your SLOs?
- Lesson 1184 — Identifying Actionable Improvements
- Error handling
- What happens when the network fails or returns unexpected data?
- Lesson 524 — Testing Adapter LayersLesson 525 — Testing Cross-Module CommunicationLesson 858 — API Style GuidesLesson 1621 — Review Checklists and Standards
- Error handling gaps
- Untested `catch` blocks, error callbacks, or validation paths are red flags.
- Lesson 594 — Reading Coverage Reports
- error rate
- (is it working correctly?
- Lesson 1171 — Understanding Service Level Indicators (SLIs)Lesson 1209 — Error Rate and Success Metrics
- Error Rate Thresholds
- Monitor the percentage of requests that result in errors.
- Lesson 722 — Monitoring and Automated Rollback Triggers
- Error recovery
- means detecting a problem and automatically correcting it, allowing the system to return to normal operation.
- Lesson 1090 — Error Recovery and Graceful Degradation
- Error Type/Class
- – What kind of problem occurred (e.
- Lesson 1714 — Reading Error Messages and Stack Traces
- Error-prone changes
- If that number appears in 10 places, you might miss one when updating
- Lesson 352 — Replace Magic Numbers with Constants
- Errors
- Mistakes go unchecked without review
- Lesson 1037 — Separation of DutiesLesson 1084 — Errors vs Exceptions vs FailuresLesson 1130 — Key- Value Pairs and Log FieldsLesson 1138 — RED and USE Methods
- Escalate when necessary
- Some conflicts require a decision-maker with authority to make the final call based on business strategy.
- Lesson 141 — Handling Conflicting Stakeholder Needs
- Escalation paths
- P0/P1 incidents automatically page managers and trigger war rooms.
- Lesson 1164 — Incident Severity LevelsLesson 1677 — Handling Conflicting Stakeholder Priorities
- Escape shell metacharacters
- Though risky and error-prone
- Lesson 1057 — Command Injection and OS Command Execution
- Essential observability practices
- Lesson 1372 — Monitoring and Observability for Sagas
- Establish baselines
- Run tests and save screenshots of your UI in its correct state
- Lesson 579 — Visual Regression Testing Fundamentals
- Establish baselines first
- Before optimizing, measure current performance.
- Lesson 1829 — Data-Driven Decision Making
- Establish your testing infrastructure
- Verify your test framework and setup work
- Lesson 497 — Starting with the Simplest Test
- Established patterns
- How things are "normally done" in your field
- Lesson 140 — Domain Research and Competitive Analysis
- Estimate effort and risk
- Lesson 161 — Change Impact Analysis
- Estimate work
- Apply story points or t-shirt sizes so the team understands relative complexity.
- Lesson 1607 — Backlog Refinement Sessions
- Estimating
- Add size or complexity estimates to help with sprint planning
- Lesson 157 — Backlog Management
- Ethical violations
- conflict with professional codes or harm public welfare
- Lesson 1920 — Speaking Up: When and How to Raise Concerns
- Evaluate options
- How does each choice affect your constraints and criteria?
- Lesson 30 — Trade-off Analysis and Decision Making
- Evaluating new technologies
- ("Can this database handle our query patterns?
- Lesson 1844 — Proof of Concepts and Spike Solutions
- Event Channel
- The infrastructure (message queue, event stream) that routes events from producers to consumers
- Lesson 1338 — What is Event-Driven Architecture
- Event Consumers
- Components that listen for specific events and react accordingly
- Lesson 1338 — What 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 822 — Subscription 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 1520 — Serverless Event-Driven Execution Model
- Event Producers
- Components that detect state changes and emit events
- Lesson 1338 — What is Event-Driven Architecture
- Event sourcing
- Maintaining a complete history of state changes
- Lesson 1317 — Event Streaming with KafkaLesson 1349 — Rebuilding State from EventsLesson 1509 — Cloud-Native Data Management
- event streaming
- treats data as a continuous flow of events that multiple services can consume independently and at their own pace.
- Lesson 1317 — Event Streaming with KafkaLesson 1357 — Message 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 1513 — Managed Message Queues and Event Streams
- Event-based sync
- uses message queues or event streams.
- Lesson 1778 — Data Migration and Synchronization
- Event-driven execution
- Functions respond to triggers, not long-running processes
- Lesson 1519 — What is Serverless and Function as a Service
- Event-driven workloads
- are serverless's sweet spot.
- Lesson 1527 — When Serverless is and Isn't Appropriate
- events
- notifications that something meaningful has happened.
- Lesson 1338 — What is Event-Driven ArchitectureLesson 1600 — What Are Agile Ceremonies?
- Events (Publish-Subscribe)
- When something significant happens in Module A, it publishes a domain event.
- Lesson 1292 — Inter-Module Communication Patterns
- Eventual consistency
- After a write, reads *might* return stale data temporarily, but eventually all reads will return the updated value.
- Lesson 922 — Understanding Eventual ConsistencyLesson 1309 — Data Duplication vs Data Coupling Trade-offsLesson 1310 — Managing Cross-Service Data ConsistencyLesson 1352 — Query Side and ProjectionsLesson 1353 — Eventual Consistency in CQRSLesson 1366 — What is the Saga PatternLesson 1404 — Consistency in Replicated SystemsLesson 1409 — AP Systems: Choosing Availability Over Consistency (+1 more)
- Every endpoint is clickable
- Developers can expand sections to see details about paths, parameters, and schemas
- Lesson 844 — Interactive 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 648 — The Team's Responsibility for CI
- Evidence from reality
- Your current implementation reveals flaws in the original vision's assumptions.
- Lesson 1808 — Evolving Vision Over Time
- Evolution
- Teams can work independently.
- Lesson 756 — Client-Server SeparationLesson 1307 — Database Per Service Pattern
- Evolutionary Architecture
- embraces this uncertainty by designing systems that can adapt and evolve as needs change.
- Lesson 1227 — Evolutionary Architecture
- Evolve with needs
- as users request new features or changes to existing ones
- Lesson 4 — Time: Maintenance Over Initial Development
- exactly
- what broke it—the change you just made 10 seconds ago.
- Lesson 361 — Running Tests During RefactoringLesson 404 — Testing as Documentation
- Exactly-Once
- The event is delivered precisely one time.
- Lesson 1344 — At-Least-Once vs Exactly-Once DeliveryLesson 1513 — Managed Message Queues and Event Streams
- Examination
- A patent examiner reviews the application to determine if it meets patentability requirements: novelty (is it new?
- Lesson 1887 — The Patent Process and Prior Art
- Examine the critical path
- Trace the sequence of spans from start to finish.
- Lesson 1151 — Analyzing Traces for Performance Issues
- Example analogy
- Think of it like a secret recipe.
- Lesson 1889 — Trade Secrets: Definition and Protection
- Example boundary
- Instead of calling a database directly, your code calls an `OrderRepository` interface.
- Lesson 516 — External Dependencies and Infrastructure
- Example concept
- Lesson 347 — Inline Method and Inline Variable
- Example CoS rule
- "Expedite items may exceed WIP limits but only one Expedite item is allowed at a time.
- Lesson 1598 — Policies 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 1598 — Policies and Classes of Service
- Example responses
- Pre-populated with the examples you defined in your OpenAPI document
- Lesson 844 — Interactive API Documentation
- Example scenario
- Imagine a payment processor that handles credit cards, PayPal, and cryptocurrency.
- Lesson 205 — The Strategy Pattern and OCPLesson 340 — Change Preventers: Divergent Change and Shotgun SurgeryLesson 341 — Dispensables: Dead Code and Speculative GeneralityLesson 862 — Boyce- Codd Normal Form (BCNF)Lesson 883 — Avoiding N+1 Query ProblemsLesson 944 — The N+1 Query ProblemLesson 980 — Event-Driven InvalidationLesson 1077 — Certificate Management and Mixed Content
- Example situation
- Your code expects `processPayment(amount, cardNumber)`, but the library uses `charge(creditCard, price, currency)`.
- Lesson 258 — When to Use the Adapter Pattern
- Example SLI
- `(successful_requests / total_requests) × 100`
- Lesson 1173 — Common SLI Metrics: Availability, Latency, and Throughput
- Example structure (pseudocode)
- Lesson 1055 — Preventing SQL Injection with Parameterized Queries
- Example workflow
- Create a branch named `add-redis-cache` to provision a new Redis instance.
- Lesson 1470 — Version 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 606 — What is Property-Based Testing
- Example: Renaming a column
- Lesson 698 — Database Changes in CD
- Excellent developer experience
- Lesson 856 — Auto-Generated vs Hand-Written SDKs
- Exception messages leaking information
- Detailed error messages revealing database schemas, file paths, or internal logic
- Lesson 1034 — Fail Securely
- Exceptions
- are unexpected but recoverable conditions that disrupt the normal flow of execution.
- Lesson 1084 — Errors vs Exceptions vs FailuresLesson 1085 — Error Handling Philosophies: Return Codes vs ExceptionsLesson 1876 — Dual Licensing and License Exceptions
- Excessive data transfer
- Retrieving entire datasets when only a subset is needed
- Lesson 1198 — I/O and Network Profiling
- Excessive indirection
- You need to jump through 5 classes just to understand where a simple value comes from.
- Lesson 322 — When Patterns Become Obstacles
- Excessive methods
- The class scrolls for pages and pages
- Lesson 337 — Bloaters: Large Class and God Object
- Exchange the code
- by sending the original verifier along with the authorization code
- Lesson 1019 — Authorization Code Grant with PKCE
- Exclude Development Dependencies
- Lesson 1524 — Managing Dependencies and Package Size
- Exclusive + Exclusive
- Incompatible (writer must wait for writer)
- Lesson 915 — Shared and Exclusive Locks
- Exec Command
- Run a command inside the container and check its exit code
- Lesson 1450 — Health Checks: Liveness and Readiness Probes
- Execute
- the operation (already familiar from Command pattern)
- Lesson 302 — Implementing Undo with Memento and CommandLesson 812 — The GraphQL Execution Model
- Execute bottom-up
- complete leaf nodes first, working toward your goal
- Lesson 1767 — The Mikado Method for Large Refactorings
- Execute your code
- Run the function being tested
- Lesson 483 — Behavior Verification: Testing Interactions
- Executes tests
- to verify functionality
- Lesson 394 — CI-Based Quality GatesLesson 636 — What is a CI Server
- Execution flow
- Checking intermediate states in a long process
- Lesson 1713 — Binary Search for Bug Location
- Execution order
- Plans typically execute from innermost/bottom operations upward
- Lesson 879 — Understanding Query Execution Plans
- Execution order matters
- Test B might fail after Test A but pass when run alone
- Lesson 458 — Avoiding Shared Mutable State
- Executive sponsors
- Monthly dashboards, exception-based alerts for blockers
- Lesson 1676 — Communication Strategies for Different Stakeholders
- Executives
- want cost, time-to-market, and risk mitigation
- Lesson 1252 — Communicating Architecture to StakeholdersLesson 1676 — Communication Strategies for Different Stakeholders
- EXISTS
- stops searching as soon as it finds *one* match per row (short-circuits)
- Lesson 884 — Query Rewriting for Performance
- Exit procedures
- Returning materials, disabling access
- Lesson 1889 — Trade Secrets: Definition and Protection
- Expand
- Add new structures (columns, tables) *without* removing old ones
- Lesson 698 — Database Changes in CDLesson 717 — Database Schema DeploymentLesson 893 — Zero- Downtime Schema Changes
- Expand-Contract Pattern
- (also called **Parallel Change**) gives you a safe, gradual path forward.
- Lesson 892 — The 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 1695 — Progressive Disclosure
- Expected Estimate
- = (3 + 4×6 + 15) / 6 = (3 + 24 + 15) / 6 = **7 days**
- Lesson 1652 — Three-Point Estimation
- Expected Outcomes
- After critical steps, show users what they should see.
- Lesson 1681 — User Guides and Tutorials
- Expedite
- (critical emergencies, like production outages)
- Lesson 1598 — Policies and Classes of Service
- Expedited review
- – One or two senior engineers review synchronously, not the full team asynchronously
- Lesson 1569 — The Hotfix Process and Risk Management
- Expedited testing
- Test the specific fix, not the entire release
- Lesson 1568 — What are Hotfixes and When to Use Them
- Expensive operations
- Fields requiring heavy computation or external API calls
- Lesson 817 — Query 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 1798 — Tailoring Mentorship Styles
- Experiment
- Change ONE thing at a time
- Lesson 1599 — Continuous Improvement with KanbanLesson 1711 — The Scientific Method in Debugging
- Experimentation safety
- Want to try a new database technology or language?
- Lesson 1335 — Technology Heterogeneity and Experimentation
- Experiments and prototypes
- Testing an idea that might be thrown away anyway
- Lesson 42 — Balancing Debt and Delivery
- Expiration periods
- (force changes every 90 days)
- Lesson 1004 — Password Strength Requirements and Policies
- Explain Intent and Rationale
- Lesson 376 — Writing Effective Comments
- Explain the choice
- Why this option best serves our drivers
- Lesson 1252 — Communicating Architecture to Stakeholders
- Explain why you're escalating
- "Need assistance from payments team to investigate transaction queue backlog"
- Lesson 1169 — Escalation 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 96 — Responding to Review Feedback
- Explicit decision-making
- State clearly whether you're brainstorming, debating, or deciding.
- Lesson 1851 — Inclusive Communication and Collaboration
- Explicit documentation
- of unwritten rules helps everyone.
- Lesson 1853 — Inclusive Hiring and Onboarding Practices
- Explicit Ordering
- Create fixtures in dependency order—users first, then orders, then line items.
- Lesson 546 — Managing Fixture Dependencies
- Explicit versioning
- embeds a version identifier in each event (e.
- Lesson 1355 — Event Schema EvolutionLesson 1364 — Message Schemas and Evolution
- Explicit waits
- repeatedly check a condition until it's true or a timeout expires.
- Lesson 564 — Waiting Strategies and Timing
- Explore alternatives
- Quickly compare different approaches before committing
- Lesson 138 — Prototyping for Requirements Discovery
- Exploring unfamiliar domains
- ("How does OAuth actually work in practice?
- Lesson 1844 — Proof of Concepts and Spike Solutions
- exponential backoff
- increases the wait time with each failure—first 1 second, then 2, then 4, then 8.
- Lesson 1095 — The Retry PatternLesson 1363 — Dead Letter Queues and Error Handling
- Exporters
- that send data to different backends (Jaeger, Zipkin, Prometheus, commercial tools)
- Lesson 1152 — OpenTelemetry and Tracing Standards
- Expose debugging endpoints
- Create special API endpoints that return internal state or metrics, protected by a flag.
- Lesson 1740 — Feature Flags for Production Debugging
- Exposed session identifiers
- Putting session tokens in URLs where they can be logged, cached, or shared.
- Lesson 1048 — A07: Identification and Authentication Failures
- Exposure through process listings
- On many systems, environment variables are visible to other processes.
- Lesson 742 — Secrets in Environment Variables
- Expression to Function
- → extract into separate functions
- Lesson 500 — The Transformation Priority Premise
- Extensibility
- Add new behaviors without modifying existing code (Decorator, Composite)
- Lesson 281 — Complexity 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 192 — Plugin Architectures and Extension Points
- external
- when clients need fine-grained control over traversal or must coordinate multiple iterations simultaneously.
- Lesson 296 — Implementing Internal vs External IteratorsLesson 313 — Strategy vs State Pattern
- External API Dependencies
- When you consume third-party APIs, consumer contracts let you test against your expectations without hitting real endpoints.
- Lesson 553 — When to Use Contract Tests
- External dependencies
- Payment processors, notification services, data sources—things you don't control that might change or need alternatives.
- Lesson 206 — When to Apply OCPLesson 1548 — Release Windows and Blackout Periods
- External dependencies become pluggable
- swap databases or web frameworks with minimal disruption
- Lesson 1265 — Defining Application Boundaries
- External fragmentation
- Logical order doesn't match physical order on disk, causing inefficient reads
- Lesson 877 — Index Maintenance and Statistics
- External iterators
- give the *client* explicit control.
- Lesson 296 — Implementing Internal vs External Iterators
- External partners
- Milestone completion, dependency changes only
- Lesson 1676 — Communication Strategies for Different Stakeholders
- External reporting
- (whistleblowing) only as a last resort when internal channels fail
- Lesson 1920 — Speaking Up: When and How to Raise Concerns
- External Research
- Industry case studies, academic papers, competitor analysis, or open-source project experiences.
- Lesson 1814 — Using Data and Evidence
- External service calls
- service name, operation, success/failure
- Lesson 1124 — Logging at System Boundaries
- External service connections
- Does your payment gateway integration work with the real (or test) API?
- Lesson 416 — Integration Tests: Testing Module Interactions
- External service state
- A message queue with specific messages, or cache with known entries
- Lesson 540 — What Are Test Fixtures
- External stakeholders
- exist *outside* your organization.
- Lesson 20 — Internal vs External Stakeholders
- External system interaction
- Does it actually connect to the database?
- Lesson 524 — Testing 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 1394 — Externalizing StateLesson 1509 — Cloud-Native Data Management
- Externally independent
- (low coupling) - minimal reliance on other modules
- Lesson 182 — The Relationship Between Coupling and Cohesion
- Extract and Override
- Pull the dependency into a method you can override in a test subclass.
- Lesson 1754 — Breaking Dependencies to Enable Testing
- Extract Class
- When a class handles multiple unrelated responsibilities, pull out one responsibility into a new, dedicated class.
- Lesson 185 — Refactoring to Increase CohesionLesson 350 — Extract 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 385 — Breaking Down Complex Functions
- Extract patterns
- Identify reusable design patterns worth preserving
- Lesson 1784 — Extracting Reusable Knowledge from Legacy Systems
- Extract reusable learnings
- Did you discover edge cases or constraints?
- Lesson 520 — Uncertain 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 372 — Function Structure and Length
- Extracting helper methods
- for repeated setup logic or complex assertions
- Lesson 502 — Refactoring Test Code
- Extrinsic state
- Unique data that varies per instance (like position)
- Lesson 274 — Flyweight Pattern: Sharing State for Memory EfficiencyLesson 275 — Intrinsic vs Extrinsic State in Flyweight
F
- Facade
- to simplify the interface, and **Proxy** to control access—all working together.
- Lesson 285 — Combining Multiple Structural PatternsLesson 286 — Pattern Selection Criteria
- Facade + Proxy
- Simplify a subsystem while also controlling when expensive resources are loaded
- Lesson 285 — Combining Multiple Structural Patterns
- Facade pattern
- provides a unified, simplified interface to a complex set of subsystem classes.
- Lesson 272 — Facade Pattern: Simplifying Complex Subsystems
- Face-to-face conversation
- is the most efficient communication method
- Lesson 1580 — The Twelve Principles Behind the Agile Manifesto
- Facilitate communication
- Help stakeholders understand each other's constraints through clear **communication channels**
- Lesson 26 — Conflicting Stakeholder Interests
- Facilitate direct conversation
- Bring conflicting stakeholders together.
- Lesson 141 — Handling Conflicting Stakeholder Needs
- Facilitate negotiation
- – Help stakeholders understand each other's constraints and goals
- Lesson 156 — Stakeholder-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 1558 — What Are Feature Flags and Why Use Them
- Factory + Builder
- Use a Factory to decide *which* Builder to use based on context, then let the Builder handle the complex construction steps.
- Lesson 254 — Combining Creational Patterns
- Factory Functions
- Use builder functions that automatically create parent fixtures if they don't exist.
- Lesson 546 — Managing Fixture Dependencies
- Factory Method
- means asking a method to create the object for you:
- Lesson 235 — Factory Method vs Direct InstantiationLesson 238 — Abstract Factory vs Factory Method
- Fail builds that regress
- – If performance drops significantly, the build fails, blocking the merge
- Lesson 1203 — Continuous Performance Testing
- Fail Fast
- means detecting problems as early as possible and stopping immediately.
- Lesson 176 — Fail Fast and Defensive ProgrammingLesson 672 — Version Constraints and ConflictsLesson 701 — Pipeline Stages and OrderingLesson 1094 — The Timeout Pattern
- Fail themselves
- , causing *their* dependents to experience the same problems
- Lesson 1104 — Cascading Failures
- Fail-fast policies
- Configure your pipeline to block merges if fuzzing discovers new crashes or security issues.
- Lesson 625 — Integrating Fuzzing into CI/CD
- Fail-safe
- Missing configuration falls back to working defaults
- Lesson 729 — Default Values and Configuration HierarchiesLesson 1107 — Fail-Safe and Fail-Secure Defaults
- Fail-Safe Defaults
- Lesson 1108 — Handling Dependency Unavailability
- 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 1034 — Fail Securely
- Failover
- If a service instance becomes unavailable, traffic routes to healthy replicas.
- Lesson 1508 — Designing for Failure and Self-Healing
- Failure Rate
- shows what percentage of builds break.
- Lesson 635 — Measuring CI EffectivenessLesson 650 — CI Metrics and Visibility
- Failures
- are catastrophic, unrecoverable problems that compromise system integrity.
- Lesson 1084 — Errors vs Exceptions vs Failures
- Failures are graceful
- just route the next request elsewhere
- Lesson 1382 — Stateless Application Design for Scalability
- Fair credit and recognition
- Acknowledging others' contributions honestly, avoiding credit theft or misrepresentation
- Lesson 1898 — Collegiality 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 1532 — Resource Allocation and Noisy Neighbors
- Fairness
- Avoiding bias that harms marginalized groups
- Lesson 1895 — Public 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 467 — Fakes: Working Implementations for TestingLesson 470 — Distinguishing Between Mock Types
- fakes
- provide simplified working implementations, spies are about **observation and verification**.
- Lesson 468 — Spies: Recording Interactions for VerificationLesson 470 — Distinguishing Between Mock TypesLesson 472 — When to Use Each Type of Test DoubleLesson 476 — The Test Double Pyramid
- Fallback
- to cached data or a default response (graceful degradation)
- Lesson 1094 — The Timeout Pattern
- Fallback behavior
- provides degraded functionality when dependencies fail.
- Lesson 1320 — Handling Partial Failures and Timeouts
- Fallback to Alternative
- If one payment gateway fails, try another.
- Lesson 1090 — Error Recovery and Graceful Degradation
- False confidence
- Tests might pass while hiding real integration issues
- Lesson 479 — Partial Mocking and Spying on Real ObjectsLesson 599 — The Danger of Coverage Theater
- Fan-out
- patterns where one event triggers many reactions
- Lesson 1357 — Message Brokers vs Event Buses: Core Concepts
- Fast
- Quick delivery, short timeline
- Lesson 31 — Good-Fast-Cheap: Pick TwoLesson 415 — Unit Tests: Testing in IsolationLesson 647 — Pre- Commit and Pre-Push Checks
- Fast + Cheap
- → Poor quality (rushed work with minimal resources creates technical debt)
- Lesson 31 — Good-Fast-Cheap: Pick Two
- Fast debugging
- No hunting through multiple assertions or behaviors to find the culprit.
- Lesson 433 — Testing One Thing at a Time
- Fast execution
- No need to load full pages or wait for navigation
- Lesson 565 — Component Testing vs Full Page Testing
- Fast failure isolation
- You immediately know which boundary broke
- Lesson 526 — Narrow Integration Tests
- Fast feedback
- Problems surface in minutes, not months
- Lesson 15 — DevOps and Continuous Delivery in the SDLCLesson 98 — Automated Checks and CI IntegrationLesson 408 — Why Pyramid Shape Matters
- Fast feedback is sacred
- The team actively works to keep build times under 10 minutes, because speed enables the frequent integration you need
- Lesson 651 — Building a CI Culture
- Fast feedback loops
- mean organizing your pipeline stages so the quickest checks run first.
- Lesson 702 — Fast Feedback LoopsLesson 704 — Pipeline Gates and Approvals
- Fast startup
- Containers typically start in seconds, not minutes
- Lesson 1423 — What Are Containers and Why Use Them
- Fast tests
- – Pure unit tests with no I/O, run constantly
- Lesson 463 — Separating Slow Tests from Fast TestsLesson 1269 — Testing Hexagonal Applications
- 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 65 — Understanding Git History as a DAG
- Fast-moving technology
- By the time a patent issues (2-5 years), your innovation may be obsolete
- Lesson 1890 — Trade Secrets vs Patents: Choosing a Strategy
- Faster execution
- Fewer real components means less setup overhead
- Lesson 526 — Narrow Integration Tests
- Faster feedback
- Problems surface immediately instead of weeks later
- Lesson 24 — Cross-Functional TeamsLesson 645 — The Practice of Small Commits
- Faster feedback loop
- Catch issues in seconds, not minutes or hours
- Lesson 395 — Editor Integration and IDE Support
- Faster perceived performance
- Don't wait for slow/failing services
- Lesson 1110 — Partial Response Strategies
- Faster recovery
- – crashed instances don't lose critical session data
- Lesson 1504 — Stateless Application Design
- Faster results
- No need to generate large inputs and then whittle them down
- Lesson 619 — Integrated Shrinking
- Fault tolerance
- requirements define how the system handles failures—does it degrade gracefully, fail safely, or maintain full operation with redundant components?
- Lesson 131 — Reliability and Availability RequirementsLesson 1405 — Combining Partitioning and Replication
- Feature baselines
- What users expect because competitors already offer it
- Lesson 140 — Domain Research and Competitive Analysis
- Feature branches
- let developers work in isolation without breaking the integration branch
- Lesson 84 — Git 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 646 — Working on the Trunk vs Feature Branches
- Feature commits
- introduce new functionality or fix bugs—they change *what* the system does.
- Lesson 105 — Avoiding Mixing Refactoring with Feature Work
- Feature Envy
- and **Inappropriate Intimacy**.
- Lesson 343 — Couplers: Feature Envy and Inappropriate IntimacyLesson 349 — Move Method and Move Field
- Feature Flags
- Since incomplete features get merged into trunk, teams use feature flags (toggles) to hide work-in- progress from users.
- Lesson 83 — Trunk-Based DevelopmentLesson 695 — Separating Deployment from ReleaseLesson 794 — Managing Multiple API Versions
- Feature Grouping
- Identify which methods and data naturally belong together.
- Lesson 185 — Refactoring to Increase Cohesion
- Feature lead
- You're deeply hands-on, writing significant code while coordinating with 2-3 engineers.
- Lesson 1793 — The Tech Lead's Scope
- Feature Toggles
- Disable non-critical features (recommendations, personalization) while keeping core functionality (checkout, login) working.
- Lesson 1090 — Error Recovery and Graceful Degradation
- Federation
- (popularized by Apollo) takes a more sophisticated approach.
- Lesson 820 — Schema 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 17 — Feedback Loops Across the SDLCLesson 629 — The Feedback Loop: Speed and Confidence
- feedback loops
- ?
- Lesson 24 — Cross-Functional TeamsLesson 25 — Communication Channels and Stakeholder ManagementLesson 1802 — Scaling Your Impact Through Others
- Fetch the changes
- `git fetch origin` downloads the new commits without modifying your working files
- Lesson 80 — Handling Push Rejections
- Fetching
- rows from the database and converting them into domain objects
- Lesson 936 — Data Mapper Pattern
- Fewer defects
- make it to production because you have real-time code review built in.
- Lesson 1626 — Benefits and Trade-offs of Pair Programming
- Fibonacci-like abstractions
- Small/Medium/Large/Huge (mapping roughly to 1/3/5/13)
- Lesson 1614 — T-Shirt Sizing and Alternative Scales
- Field Addition
- APIs let you attach key-value pairs directly:
- Lesson 1133 — Structured Logging Libraries and APIs
- Fifth Normal Form (5NF)
- address more subtle types of redundancy that can occur even in BCNF-compliant schemas.
- Lesson 863 — Higher Normal Forms (4NF, 5NF)
- File storage
- uses external object stores (S3, Azure Blob) rather than local disks
- Lesson 1477 — Handling State in Immutable Systems
- File system access
- `file:///etc/passwd` on some implementations
- Lesson 1051 — A10: Server-Side Request Forgery (SSRF)
- File system operations
- Time spent reading/writing files, how many operations, and their sizes
- Lesson 1198 — I/O and Network Profiling
- File system reads/writes
- (disk I/O is notoriously slow)
- Lesson 461 — Test Speed and the Fast Test Pattern
- File system state
- Specific files created in known locations with predictable content
- Lesson 540 — What Are Test Fixtures
- File systems
- vary between machines and CI environments
- Lesson 516 — External Dependencies and Infrastructure
- Files
- should group related logic together
- Lesson 166 — Separation of ConcernsLesson 266 — Composite in Practice: File Systems and UI Hierarchies
- Filter by author
- Lesson 66 — Viewing and Navigating History with git log
- Filter by date
- Lesson 66 — Viewing and Navigating History with git log
- Filter first
- Narrow down the data set based on criteria
- Lesson 789 — Combining Pagination, Filtering, and Sorting
- Final representation
- The actual object you want, created only when all steps are complete
- Lesson 243 — The 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 853 — API Sunset and End-of-Life
- Financial
- Owning stock in a vendor you're evaluating, or recommending a library maintained by a company that pays you consulting fees
- Lesson 1926 — Conflicts of Interest and Professional Independence
- Financial data
- (credit card numbers, bank accounts, salary information)
- Lesson 1900 — Personal Data and Sensitive Information
- Financial transactions
- One person initiates a payment, another authorizes it
- Lesson 1037 — Separation of DutiesLesson 1837 — Zero-Defect Mindset
- Find the lowest level
- where that behavior exists (a function, class, or module)
- Lesson 414 — Moving 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 1815 — Managing Disagreement Constructively
- Finding Seams
- Look for constructor parameters, method arguments, or protected methods you can override in a test subclass.
- Lesson 515 — Legacy Code Without Tests
- First Declared Wins
- Use whichever constraint appears first in your config
- Lesson 672 — Version Constraints and Conflicts
- First dispatch
- The runtime determines which `accept` method to call based on the `element`'s actual type (e.
- Lesson 319 — Double Dispatch in Visitor Pattern
- Fitness functions
- These are automated checks that protect important architectural characteristics during evolution.
- Lesson 1227 — Evolutionary Architecture
- Fix bugs
- that users discover in real-world conditions
- Lesson 4 — Time: Maintenance Over Initial Development
- Fix deliberately
- by assigning ownership and setting deadlines
- Lesson 577 — Quarantining and Flaky Test Management
- Fix forward only if
- Lesson 655 — The Revert-First Strategy
- fixed
- relationships at compile time.
- Lesson 271 — Decorator vs. Inheritance: Flexibility and ComplexityLesson 1554 — Writing Effective Changelogs
- Fixed Date
- (deadlines that can't move, like regulatory compliance)
- Lesson 1598 — Policies and Classes of Service
- Fixes are fast
- You remember the context of your recent work, making debugging straightforward.
- Lesson 628 — The Core CI Principle: Integrate Early and Often
- Fixing bugs
- users discover in real-world conditions
- Lesson 11 — SDLC Phases: Testing, Deployment, MaintenanceLesson 847 — Breaking vs Non-Breaking Changes
- Fixture Cleanup
- Teardown must happen in reverse dependency order—delete line items before orders, orders before users—to avoid constraint violations.
- Lesson 546 — Managing Fixture Dependencies
- Fixtures
- For shared setup across many tests, use test framework fixtures (like `beforeEach` hooks).
- Lesson 439 — Handling Test Setup Complexity
- Flag conflicts
- Identify GPL + proprietary combinations or incompatible copyleft licenses
- Lesson 1877 — Verifying License Compatibility in Practice
- Flag debt
- is the accumulation of obsolete or stale feature flags in your codebase—similar to technical debt.
- Lesson 1566 — Flag Debt and Cleanup Strategies
- Flags mismatches
- in development/testing before they reach production
- Lesson 843 — Request and Response Validation
- Flaky test rate
- tracks how often tests fail inconsistently.
- Lesson 657 — Build Health Metrics and Visibility
- Flaky tests
- Network delays and race conditions cause false failures
- Lesson 410 — The Ice Cream Cone Anti-pattern
- Flexibility
- Swap components at runtime without changing class hierarchies.
- Lesson 173 — Favor Composition Over InheritanceLesson 255 — Evaluating Trade-offs in Creational DesignLesson 281 — Complexity vs Flexibility Trade-offLesson 314 — Implementing Strategy with CompositionLesson 451 — Object Mother PatternLesson 478 — Mock Frameworks and Hand-Rolled DoublesLesson 782 — Resource Granularity Trade-offsLesson 823 — REST vs RPC vs GraphQL: Core Trade-offs (+4 more)
- Flexible
- Swap implementations without changing dependent code
- Lesson 172 — Program to an Interface, Not an ImplementationLesson 231 — Alternatives to Singleton: Dependency InjectionLesson 271 — Decorator vs. Inheritance: Flexibility and Complexity
- Flexible ranges
- (`>=`, `~`, `^`) allow updates but risk breaking changes sneaking in
- Lesson 688 — Pinning Dependencies
- Flowcharts
- map decision points and process sequences—ideal for explaining algorithms, request lifecycles, or error handling paths.
- Lesson 1693 — Visual Aids and Diagrams
- Flux
- is a lightweight, Kubernetes-native operator that monitors Git repositories and Helm releases.
- Lesson 1498 — GitOps Tools and Operators
- Flyweight Factory
- manages shared flyweight objects.
- Lesson 274 — Flyweight Pattern: Sharing State for Memory EfficiencyLesson 276 — Flyweight Factories and Object Pools
- Focus on Action
- Retrospectives aren't venting sessions.
- Lesson 1606 — Sprint Retrospective: Continuous Improvement
- Focus on risk
- Zero coverage in a critical authentication module matters far more than zero coverage in generated boilerplate
- Lesson 593 — Coverage as a Diagnostic Tool, Not a Goal
- Follow code style
- using any provided linters or formatters
- Lesson 1880 — Contributing to Open Source Projects
- Follow-the-sun
- Global teams can pass on-call responsibilities across time zones, reducing after-hours burden.
- Lesson 1857 — On-Call and After-Hours Work
- Followers apply changes
- Each follower applies the log entries to stay synchronized
- Lesson 1402 — Leader-Follower Replication
- Following Through
- When you identify technical problems, propose solutions *and* help implement them.
- Lesson 1795 — Building Technical Credibility
- Follows DIP
- Depend on abstractions, not concrete Singletons
- Lesson 231 — Alternatives to Singleton: Dependency Injection
- For 401 errors
- "Refresh your authentication token and retry the request"
- Lesson 834 — Documenting Error Responses
- For 422 validation errors
- "Check the `errors` field for specific validation failures"
- Lesson 834 — Documenting Error Responses
- For 429 rate limits
- "Wait 60 seconds before retrying, or check the `Retry-After` header"
- Lesson 834 — Documenting Error Responses
- For availability
- Implement redundancy, failover mechanisms, health checks
- Lesson 1241 — Availability and Reliability
- For clients
- The same tools generate SDKs in various languages (JavaScript, Python, Java, etc.
- Lesson 842 — Generating 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 362 — Committing 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 362 — Committing Refactorings Separately
- For fields
- State the data type, what it contains, and any constraints.
- Lesson 832 — Writing Clear Descriptions
- For Maintainability
- Lesson 177 — Understanding Coupling: How Components Depend on Each Other
- For reliability
- Add data validation, checksums, idempotency, thorough testing
- Lesson 1241 — Availability and Reliability
- For resources
- Explain what the resource represents in the real world and its purpose.
- Lesson 832 — Writing 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 362 — Committing Refactorings Separately
- For servers
- Tools like `openapi-generator` or `swagger-codegen` read your OpenAPI spec and create:
- Lesson 842 — Generating 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 216 — Fat Interfaces and Their Problems
- Forced writes
- The database ensures these log entries are physically written to disk (not just sitting in memory buffers)
- Lesson 900 — The Durability Property
- Form hypotheses
- "If we add WIP limits to our review column, bottlenecks will decrease"
- Lesson 1599 — Continuous Improvement with Kanban
- Form Input
- Type text into input fields, select dropdown options, check boxes, or toggle switches.
- Lesson 567 — Testing User Interactions
- Formal processes
- work better for regulated industries, large enterprises, or safety-critical systems.
- Lesson 162 — Change Request Processes
- Format String Bugs
- If user input reaches format string functions, attackers can read or write arbitrary memory.
- Lesson 624 — Detecting Security Vulnerabilities
- Formatting
- (converting data for display, reports, or APIs)
- Lesson 195 — Identifying Multiple Responsibilities
- Forward compatibility
- means old versions can handle artifacts from newer versions gracefully.
- Lesson 1553 — Version Compatibility and Breaking Changes
- Forward compatible
- Old consumers can read new messages (never remove required fields)
- Lesson 1364 — Message Schemas and Evolution
- Forward recovery
- means persisting through the failure by retrying the failed step, possibly with exponential backoff or adjusted parameters.
- Lesson 1369 — Forward Recovery vs Backward Recovery
- Forwards the call
- to the wrapped component
- Lesson 269 — Implementing Decorator: Wrappers and Forwarding
- FOSSA
- , **Black Duck**, **Snyk**, and **licensee** automatically scan your dependency tree and identify license conflicts.
- Lesson 1877 — Verifying License Compatibility in Practice
- Found
- Git identifies the exact commit that introduced the bug
- Lesson 119 — Finding Bugs with Git Bisect
- four golden signals
- that tell you almost everything about your system's health:
- Lesson 1137 — The Four Golden SignalsLesson 1144 — Dashboard 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 863 — Higher Normal Forms (4NF, 5NF)
- Fragile locators
- break easily when developers change styling or layout:
- Lesson 563 — Locator 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 479 — Partial Mocking and Spying on Real Objects
- Fragility
- Change one component, and others break unexpectedly.
- Lesson 179 — The Cost of Tight CouplingLesson 406 — Balancing Testing Investment
- Fragmentation
- comes in two forms:
- Lesson 877 — Index Maintenance and StatisticsLesson 1251 — Architecture Governance and Standards
- Fragments
- let you define a reusable set of fields, like a template:
- Lesson 810 — Aliases and Fragments
- Frame disagreement as collaboration
- When someone challenges your architectural decision, respond with curiosity: "Tell me more about your concerns.
- Lesson 1852 — Psychological Safety for Innovation
- Framework or library code
- you don't own shouldn't be tested by you.
- Lesson 403 — When Not to Test: Diminishing Returns
- Frameworks and Drivers Layer
- is the most external circle in Clean Architecture.
- Lesson 1277 — Frameworks and Drivers Layer
- Freedom to improve
- Modify and share your improvements publicly
- Lesson 1861 — What is Open Source Software?
- Freedom to study
- Examine how it works and adapt it to your needs
- Lesson 1861 — What is Open Source Software?
- Frequency adjustments
- Generate edge cases more often than typical values
- Lesson 616 — Controlling 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 1271 — When to Use Hexagonal Architecture
- Frequent Integration
- Developers integrate their code into the trunk multiple times per day.
- Lesson 83 — Trunk-Based Development
- Frequently-used code
- Logic that runs on every request or user action
- Lesson 428 — Test ROI and Prioritization
- Freshness
- for responsiveness (cached data may be slightly stale)
- Lesson 958 — What is Caching and Why It Matters
- Front-end-only checks
- without server-side validation on each API call
- Lesson 1036 — Complete Mediation
- Frontend
- Always include your actual UI—the buttons, forms, and pages users interact with.
- Lesson 556 — E2E Test Scope and Boundaries
- Full compatibility
- Both directions work—the gold standard for resilient systems
- Lesson 1364 — Message 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 565 — Component Testing vs Full Page Testing
- Full rollout or rollback
- Complete the deployment or revert if issues arise
- Lesson 710 — Canary Releases
- Function executes
- – Your code runs with the event data as input
- Lesson 1520 — Serverless 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 124 — Functional vs Non-Functional Requirements
- Functional requirements
- describe *what* the system should do—the specific behaviors, features, and functions users need.
- Lesson 124 — Functional vs Non-Functional Requirements
- Fundamental architectural error
- May require complete system rewrite
- Lesson 1225 — The Cost of Architectural Mistakes
- Fundamental architecture problems
- When the seams are impossible to find or dependencies too tangled.
- Lesson 1765 — The Economics of Legacy Refactoring
G
- Game state management
- Save/load functionality
- Lesson 301 — The Memento Pattern: Capturing Object State
- Gather actual outcomes
- Collect real duration, effort, or cost data from those projects
- Lesson 1653 — Reference Class Forecasting
- Gather All Available Materials
- Lesson 137 — Document Analysis and System Archaeology
- Gather diverse perspectives
- early through technical discussions and stakeholder engagement
- Lesson 1821 — Technical Strategy and Vision
- Gather feedback
- from stakeholders on whether the increment meets their needs
- Lesson 1589 — Sprint Review
- Generate a code verifier
- a random cryptographic string (43-128 characters)
- Lesson 1019 — Authorization Code Grant with PKCE
- Generated code
- from tools you trust is another low-value target.
- Lesson 403 — When Not to Test: Diminishing Returns
- Generation-based
- Uses knowledge of input formats (like file headers or protocol structures) to create semi-valid inputs
- Lesson 621 — Introduction to Fuzzing
- generator
- knows how to create random instances of a type.
- Lesson 610 — Generators and Input DomainsLesson 615 — Generators and Combinators
- generators
- specialized functions that produce random values within a defined **input domain**.
- Lesson 610 — Generators and Input DomainsLesson 613 — Property Testing Tools and FrameworksLesson 614 — Input Generation Strategies
- Geographic distribution
- (replicas can be in different data centers)
- Lesson 1405 — Combining Partitioning and ReplicationLesson 1407 — Network Partitions in Practice
- Geographic variation matters
- Many states (like California) severely limit or ban non-competes, while others enforce them strictly.
- Lesson 1891 — Employee Agreements and Intellectual Property
- Get approval
- Stakeholders formally agree to trade-offs (add this, delay that)
- Lesson 158 — Scope Creep and Change Control
- Get immediate feedback
- See the red-green-refactor cycle work right away
- Lesson 497 — Starting with the Simplest Test
- Get instant feedback
- when you accidentally break something
- Lesson 405 — Enabling Refactoring with Tests
- Gifts and favors
- Accepting expensive gifts from vendors hoping to win your company's contract
- Lesson 1926 — Conflicts of Interest and Professional Independence
- Git
- is a *distributed* version control system created by Linus Torvalds in 2005.
- Lesson 43 — What is Version Control and Why Git?
- Git commit SHA
- Tag images with their exact source code commit (e.
- Lesson 1433 — Image Tagging and Versioning Strategies
- Git configuration
- tracking the original location as "origin"
- Lesson 54 — Cloning Existing Repositories
- Git Flow Model
- Lesson 1570 — Branching Strategies for Hotfixes
- Git Grep
- searches the *current* working directory or a specific commit, like a turbo-charged "Find" function.
- Lesson 121 — Searching History with Git Grep and Pickaxe
- Git hooks
- to automate these checks—scripts that Git runs at specific moments in your workflow.
- Lesson 647 — Pre-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 121 — Searching History with Git Grep and Pickaxe
- Given
- some starting condition or context
- Lesson 148 — Writing Clear Acceptance CriteriaLesson 418 — Acceptance Tests: Validating Business RequirementsLesson 445 — The Given-When-Then Pattern
- Given-When-Then format
- Lesson 444 — Naming Test Methods Clearly
- Glad, Sad, Mad
- Emotional check-in on experiences during the sprint
- Lesson 1606 — Sprint Retrospective: Continuous Improvement
- Global reads
- Read all events (often by event type) for projections or analytics
- Lesson 1348 — Event Store Design
- Global scalability
- Handle traffic spikes across regions without provisioning infrastructure everywhere
- Lesson 1386 — Content 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 596 — Setting Meaningful Coverage Thresholds
- God Object
- ) is a class that has grown so big it's doing far too many things.
- Lesson 337 — Bloaters: Large Class and God Object
- Golden Hammer
- One pattern applied inappropriately everywhere
- Lesson 1781 — Identifying Design Patterns in Existing Code
- Good
- High quality, well-tested, maintainable code
- Lesson 31 — Good-Fast-Cheap: Pick TwoLesson 95 — Giving Constructive FeedbackLesson 111 — Commit Message Body: The Why, Not the WhatLesson 175 — Command-Query SeparationLesson 434 — Writing Self-Documenting TestsLesson 1633 — Writing Clear Technical EmailsLesson 1692 — Using Examples and Code Samples
- Good + Fast
- → Expensive (hire more senior developers, pay for overtime)
- Lesson 31 — Good-Fast-Cheap: Pick Two
- Good comment (explains why)
- Lesson 374 — When to Write Comments
- Google Cloud KMS
- manage encryption keys with hardware-level security.
- Lesson 1516 — Managed Identity and Security Services
- GPL v3
- (copyleft)
- Lesson 1871 — What is License CompatibilityLesson 1873 — GPL License Compatibility Rules
- Grace period
- Allow sufficient time (often 6-12 months minimum) between announcing sunset and the actual shutdown.
- Lesson 853 — API 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 849 — Deprecation Policies and Timelines
- Grace periods
- Both old and new secrets work simultaneously during transition
- Lesson 745 — Secret Rotation and Lifecycle Management
- Graceful degradation
- Newer SDK versions should detect older API endpoints and adjust behavior accordingly
- Lesson 857 — SDK Versioning and CompatibilityLesson 982 — Dealing with Stale DataLesson 1090 — Error Recovery and Graceful DegradationLesson 1108 — Handling Dependency UnavailabilityLesson 1110 — Partial Response Strategies
- Graceful Node Failures
- Design for nodes disappearing without warning.
- Lesson 1116 — Fallacy 5: Topology Doesn't Change
- Graceful shutdown
- ensures your app finishes processing requests cleanly before terminating, preventing dropped connections and data loss.
- Lesson 1506 — Health Checks and Graceful Shutdown
- Gradual migration
- Legacy applications can adopt factors incrementally, perhaps moving stateless first (Factor VI) before tackling disposability (Factor IX)
- Lesson 754 — Applying Twelve-Factor Principles in Practice
- Gradual risk exposure
- If the new version has problems, only a portion of users are affected initially.
- Lesson 711 — Rolling Deployments
- Graduated complexity
- Start your tutorial with the simplest working code, then add optional sections like "Customization," "Error Handling," and "Production Patterns.
- Lesson 1695 — Progressive Disclosure
- Grant or Abandonment
- After several rounds, the patent is either granted (giving exclusive rights for ~20 years) or the application is abandoned.
- Lesson 1887 — The Patent Process and Prior Art
- Graph
- A collection of nodes (points) connected by edges (lines)
- Lesson 65 — Understanding Git History as a DAG
- GraphQL
- solves over-fetching and under-fetching when clients need flexible queries.
- Lesson 1322 — Communication Protocol Trade-offs
- GraphQL wins on flexibility
- Lesson 814 — GraphQL vs REST Trade-offs
- Green
- – Write just enough code to make the test pass (even if ugly)
- Lesson 358 — Red-Green-Refactor: The TDD-Refactoring ConnectionLesson 488 — The Red-Green- Refactor LoopLesson 495 — The TDD Rhythm and FlowLesson 506 — TDD and Performance OptimizationLesson 590 — Reading Coverage ReportsLesson 594 — Reading Coverage Reports
- Green Build Contract
- you learned previously isn't optional—it's the foundation of CI.
- Lesson 653 — Fixing Broken Builds Immediately
- Green Hosting
- means selecting cloud providers powered by renewable energy.
- Lesson 1932 — Sustainable Software Engineering Practices
- Gross mismanagement or waste
- (especially in government contracts)
- Lesson 1921 — Whistleblowing and Legal Protections
- Group related metrics
- Put latency percentiles (p50, p95, p99) together, not scattered
- Lesson 1144 — Dashboard Design Principles
- Grouping rules
- (minor updates together, major updates separate)
- Lesson 685 — Automating Dependency Updates
- Grow the team
- Mentor engineers and share knowledge from their dual vantage point
- Lesson 1786 — What is a Tech Lead?
- Growing systems
- traffic doubles yearly; yesterday's "high" is today's normal
- Lesson 1157 — Threshold Selection: Static vs. Dynamic Baselines
- gRPC
- Microservices, high-performance needs, polyglot systems
- Lesson 799 — RPC Protocols: XML-RPC, JSON-RPC, and gRPCLesson 801 — RPC Error Handling and Status CodesLesson 1315 — gRPC for Service-to-Service CommunicationLesson 1322 — Communication Protocol Trade-offs
- Guard Clauses
- Handle edge cases early with separate functions, keeping the main logic clean and linear.
- Lesson 385 — Breaking Down Complex Functions
- Guided incremental change
- Architecture evolves through small, controlled modifications rather than massive rewrites.
- Lesson 1227 — Evolutionary Architecture
H
- Half-Open
- .
- Lesson 1096 — The Circuit Breaker PatternLesson 1319 — Circuit Breakers in Distributed Systems
- Half-Open → Closed
- Triggered when test requests succeed
- Lesson 1097 — Circuit Breaker States and Transitions
- Half-Open → Open
- Triggered when test requests fail
- Lesson 1097 — Circuit Breaker States and Transitions
- Hand-written SDKs
- Manually code libraries with custom design and abstractions
- Lesson 856 — Auto-Generated vs Hand-Written SDKs
- Handle change
- systematically rather than chaotically
- Lesson 9 — What 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 1068 — Cross-Origin Resource Sharing (CORS) Security
- Handler Interface
- Defines how requests are received and optionally passed to the next handler.
- Lesson 287 — Chain of Responsibility Pattern: Core Concept
- Handles technology-specific concerns
- (connection management, error handling, serialization)
- Lesson 1267 — Implementing Adapters
- 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 1165 — Incident Response Workflow
- Hard delete
- records from all databases, including backups and replicas
- Lesson 1903 — Data Retention and Deletion
- Hard limits
- disk space at 95%, memory exhausted
- Lesson 1157 — Threshold Selection: Static vs. Dynamic Baselines
- Hard to debug
- Failures seem random and disappear when you isolate the test
- Lesson 458 — Avoiding Shared Mutable State
- Hard to extend
- Adding new behavior requires modifying existing code everywhere → Consider Strategy or State
- Lesson 326 — Refactoring Toward and Away from Patterns
- Hard to name
- You resort to vague names like `Manager`, `Controller`, or `Helper`
- Lesson 337 — Bloaters: Large Class and God Object
- hard to remember
- Lesson 246 — Builder vs Constructor: When to Use EachLesson 338 — Bloaters: Long Parameter List
- Hard to set up
- (require test databases, migrations, network connections)
- Lesson 1279 — Testing 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 336 — Bloaters: Long MethodLesson 337 — Bloaters: Large Class and God Object
- 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 227 — Recognizing DIP Violations
- harder to maintain
- , and **harder to understand** for other developers.
- Lesson 253 — Avoiding Pattern OveruseLesson 336 — Bloaters: Long Method
- Hardware fails
- Network switches, routers, and cables break
- Lesson 1407 — Network Partitions in Practice
- Hardware Interface Access
- When your code interfaces with physical hardware (printer, scanner, GPU), the hardware itself enforces singularity.
- Lesson 232 — When Singleton is Appropriate
- Hardware Tokens
- Physical devices like YubiKeys plug into USB ports or use NFC.
- Lesson 994 — Multi-Factor Authentication (MFA)
- Harm potential
- Could this data be weaponized against vulnerable users?
- Lesson 1909 — Surveillance and Tracking Ethics
- HashiCorp Vault
- (self-hosted or cloud)
- Lesson 744 — Dedicated Secret Management ServicesLesson 1500 — Managing Secrets in GitOpsLesson 1516 — Managed Identity and Security Services
- HATEOAS Links
- Lesson 786 — Pagination Metadata and Links
- HEAD
- Points to your current working branch
- Lesson 45 — Creating Your First RepositoryLesson 767 — HEAD and OPTIONS: Metadata Operations
- Health Checks
- These are simple endpoints or tests that verify your application is responding correctly.
- Lesson 722 — Monitoring and Automated Rollback TriggersLesson 745 — Secret Rotation and Lifecycle ManagementLesson 1325 — Service Registry PatternsLesson 1506 — Health Checks and Graceful Shutdown
- Health information
- (medical records, prescriptions, fitness data)
- Lesson 1900 — Personal Data and Sensitive Information
- Health-Aware Routing
- Don't just know where services are—know which instances are healthy.
- Lesson 1116 — Fallacy 5: Topology Doesn't Change
- Healthcare systems
- managing patient records, prescriptions, or medical device control require consistency.
- Lesson 902 — When ACID Guarantees Are Critical
- Height
- represents call stack depth (bottom = entry points, top = leaf functions)
- Lesson 1196 — CPU Profiling and Flame Graphs
- Helper Methods
- Extract common setup into private functions with descriptive names.
- Lesson 439 — Handling Test Setup Complexity
- Hidden Dependencies
- Can't instantiate your class without a database connection or configuration file?
- Lesson 507 — TDD as a Design Tool
- Hide complexity
- Abstract away HTTP details, authentication, retries, and pagination
- Lesson 855 — SDK Design Principles
- High change frequency
- areas are risky because they're constantly being modified.
- Lesson 402 — What to Test: Risk-Based TestingLesson 1765 — The Economics of Legacy Refactoring
- High cohesion
- means everything inside a module belongs together and serves a unified purpose.
- Lesson 182 — The Relationship Between Coupling and CohesionLesson 186 — Why Software Must Be Designed for ChangeLesson 194 — What is the Single Responsibility PrincipleLesson 197 — Cohesion and SRP
- High collective ownership
- → knowledge sharing, no bottlenecks, resilience
- Lesson 1834 — Individual Ownership and Accountability
- High individual accountability
- → clear responsibility, domain expertise, quality standards
- Lesson 1834 — Individual Ownership and Accountability
- High maintenance cost
- manual updates for every API change
- Lesson 856 — Auto-Generated vs Hand-Written SDKs
- 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 1271 — When to Use Hexagonal Architecture
- High throughput
- Millions of events per second across distributed services
- Lesson 1317 — Event Streaming with Kafka
- High throughput approach
- The kitchen batches orders, cooking multiple steaks simultaneously.
- Lesson 1204 — Latency vs Throughput
- High-change areas
- Code you'll modify frequently
- Lesson 42 — Balancing Debt and DeliveryLesson 284 — Maintainability vs Initial Effort
- High-cost operations
- like table scans on large tables are red flags.
- Lesson 879 — Understanding Query Execution Plans
- High-level components
- contain core business logic and policies—the essential "what" of your system.
- Lesson 189 — Dependency Direction and Stability
- High-risk changes
- to core systems or security-sensitive code
- Lesson 1630 — When to Use Pairing vs Mobbing
- High-risk code
- (authentication, payment processing, data validation) might warrant 90-100% coverage.
- Lesson 596 — Setting Meaningful Coverage Thresholds
- High-risk paths
- Features where bugs cause serious harm (data loss, security breaches, financial errors)
- Lesson 428 — Test ROI and Prioritization
- High-throughput sustained workloads
- become expensive with per-invocation pricing.
- Lesson 1527 — When Serverless is and Isn't Appropriate
- High-value paths
- Core user journeys that drive business value (checkout, signup, critical workflows)
- Lesson 428 — Test ROI and Prioritization
- High-value targets
- include business logic, security-critical code, payment processing, data integrity, and complex algorithms.
- Lesson 406 — Balancing Testing Investment
- Higher availability
- Systems remain responsive even when some nodes are unreachable
- Lesson 922 — Understanding Eventual ConsistencyLesson 1403 — Multi-Leader and Leaderless Replication
- Higher coupling
- Services depend on the orchestrator; it knows about all participants
- Lesson 1375 — Trade-offs: Coupling and Visibility
- Higher storage costs
- – you're charged for storing deployment artifacts
- Lesson 1524 — Managing Dependencies and Package Size
- Higher throughput
- Your web servers handle more requests per second
- Lesson 1385 — Asynchronous 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 417 — End-to-End Tests: Testing Complete User Flows
- Highlight Trade-offs
- Lesson 376 — Writing Effective Comments
- Highly dynamic data
- (stock prices, live sports scores): Short TTL (seconds to minutes)
- Lesson 962 — Time-to-Live and Expiration Policies
- Highly visible
- Anyone reading the URL knows exactly which version they're hitting
- Lesson 791 — URI 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 1850 — Unconscious 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 1914 — Bias in Training Data
- Historical velocity
- Use past sprint data as a baseline, not a commitment
- Lesson 1602 — Effective Sprint Planning Practices
- History is preserved
- You can see why decisions were made and how docs evolved
- Lesson 1706 — Documentation as Code
- History rules
- (can't reuse last 5 passwords)
- Lesson 1004 — Password Strength Requirements and Policies
- Holiday seasons
- Black Friday, Cyber Monday, Christmas shopping
- Lesson 1548 — Release Windows and Blackout Periods
- Honesty
- Accurately representing capabilities and limitations
- Lesson 1895 — Public Interest and Social Responsibility
- Honesty and Transparency
- You should provide accurate assessments of project feasibility, timelines, and risks.
- Lesson 1896 — Client and Employer Obligations
- Hook methods
- are those optional steps—they provide default (often empty) behavior that subclasses can choose to customize.
- Lesson 316 — Hook Methods in Template Method
- Horizontal axis
- How much effort (time, complexity, resources) will this take?
- Lesson 154 — Value vs. Effort Quadrants
- Horizontal scaling
- provides theoretically unlimited growth by adding more nodes.
- Lesson 1240 — Scalability: Horizontal and VerticalLesson 1442 — What is Kubernetes and Why Use It
- Horizontal Scaling (Scaling Out)
- Adding more machines to distribute the workload.
- Lesson 1240 — Scalability: Horizontal and Vertical
- Host-mounted
- Directories from the host machine mapped into the container
- Lesson 1429 — Container Storage and Volumes
- Hot storage (recent logs)
- Keep the last 7-30 days in fast, searchable systems for active debugging and monitoring.
- Lesson 1126 — Log Retention and Storage
- How
- code gets merged (direct to `main`?
- Lesson 82 — What Are Branching Strategies and Why Do They MatterLesson 127 — System RequirementsLesson 371 — Avoiding Encodings and Hungarian NotationLesson 469 — Mocks: Verifying Expected InteractionsLesson 661 — Build Tool Configuration FilesLesson 746 — Access Control and Audit Logging for SecretsLesson 1547 — Managing Release DependenciesLesson 1638 — Writing Technical Proposals (+2 more)
- How do components interact
- Integration tests show real usage patterns
- Lesson 404 — Testing as Documentation
- How many paths
- exist through your code (branches, loops, conditionals)
- Lesson 382 — What is Code Complexity?
- how often
- your system fails and **how it handles failures** are critical performance dimensions.
- Lesson 1209 — Error Rate and Success MetricsLesson 1322 — Communication Protocol Trade-offs
- how well
- they tested it.
- Lesson 593 — Coverage as a Diagnostic Tool, Not a GoalLesson 1228 — What Are Architectural Drivers
- HTML Context
- When inserting user data into HTML body or attributes, encode special characters like `<`, `>`, `&`, `"`, and `'` into HTML entities:
- Lesson 1064 — Preventing XSS Through Output Encoding
- HTTP GET
- Send a request to a specific endpoint (e.
- Lesson 1450 — Health Checks: Liveness and Readiness Probes
- HTTP method usage
- – When to use GET, POST, PUT, PATCH, DELETE based on your earlier training
- Lesson 858 — API 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 1071 — HTTP Strict Transport Security (HSTS)
- HTTP/2
- , enabling features like bidirectional streaming and multiplexing.
- Lesson 799 — RPC Protocols: XML-RPC, JSON-RPC, and gRPC
- Human-readable vs. hashed keys
- `user:123:profile` is debuggable; `sha256("user:123:profile")` is uniform-length but opaque.
- Lesson 961 — Cache Keys and Lookup Mechanisms
- Hungarian Notation
- , where you'd prefix variables like `strName`, `iCount`, or `bIsActive` to show their types (string, integer, boolean).
- Lesson 371 — Avoiding Encodings and Hungarian Notation
- hybrid approach
- retry forward a limited number of times, then roll back if retries are exhausted.
- Lesson 1369 — Forward Recovery vs Backward RecoveryLesson 1510 — Cloud 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 901 — ACID Trade-offs and PerformanceLesson 923 — The Consistency-Availability Trade-offLesson 1378 — Hybrid Approaches
- Hypothesis
- (Python) is the most feature-rich modern implementation.
- Lesson 613 — Property Testing Tools and Frameworks
- Hypothetical questions
- test understanding: "What would happen if this system were unavailable for an hour?
- Lesson 134 — Interview Techniques for Requirements
I
- I - Information Disclosure
- Lesson 1080 — STRIDE Threat Classification
- I/O bottlenecks
- show up as slow database queries, disk writes, or file operations.
- Lesson 1380 — Identifying Scalability Bottlenecks
- I/O overhead
- – Writing to disk or network is thousands of times slower than memory operations.
- Lesson 1127 — Logging Performance Considerations
- I/O-bound
- bottlenecks occur when your system spends most of its time waiting for disk reads/writes.
- Lesson 1193 — Common 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 410 — The Ice Cream Cone Anti-pattern
- ID token
- , a JSON Web Token (JWT) that contains claims about the authenticated user's identity.
- Lesson 1023 — OpenID Connect (OIDC) and ID Tokens
- IDE plugins
- that highlight complex functions as you write them
- Lesson 390 — Using 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 1620 — Review Size and Scope Trade-offs
- Ideal scenario
- Throughput increases linearly while latency stays constant
- Lesson 1387 — Measuring Scalability: Throughput and Latency
- Idempotence
- means applying an operation multiple times has the same effect as applying it once.
- Lesson 609 — Common Property Patterns
- Idempotency
- Design tests to handle existing data gracefully.
- Lesson 559 — E2E Test Data ManagementLesson 1480 — Declarative vs Imperative ProvisioningLesson 1488 — Introduction to Configuration ManagementLesson 1490 — Ansible Fundamentals
- Idempotency required
- Since messages might be retried, compensating actions should be safe to execute multiple times.
- Lesson 1367 — Compensating Transactions
- Idempotency tests
- Run configuration twice; second run should change nothing
- Lesson 1494 — Testing Configuration Code
- idempotent
- (calling it multiple times produces the same result).
- Lesson 764 — HTTP Verbs: GET, POST, PUT, DELETELesson 926 — Designing for Eventual ConsistencyLesson 1344 — At-Least-Once vs Exactly-Once DeliveryLesson 1368 — Saga Design ConsiderationsLesson 1481 — Introduction to TerraformLesson 1489 — Declarative vs Imperative Configuration
- Idempotent methods
- can be called multiple times with the same outcome.
- Lesson 765 — Safe 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 1048 — A07: Identification and Authentication Failures
- Identifiers
- `user_id`, `session_id`, `request_id`, `transaction_id`
- Lesson 1130 — Key-Value Pairs and Log Fields
- Identify
- flaky tests by tracking failure patterns (does it fail 10% of the time?
- Lesson 577 — Quarantining and Flaky Test ManagementLesson 1039 — Trust Boundaries and Input ValidationLesson 1926 — Conflicts of Interest and Professional Independence
- Identify a bounded context
- (lesson 1281) that's well-defined and relatively independent
- Lesson 1336 — Migrating from Monolith to Microservices
- Identify and communicate risks
- when quality is compromised by deadlines or resources
- Lesson 1897 — Product 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 593 — Coverage as a Diagnostic Tool, Not a Goal
- Identify conflicts
- (healthy places are often slower and pricier)
- Lesson 30 — Trade-off Analysis and Decision Making
- Identify critical operations
- Which transactions absolutely must see consistent data?
- Lesson 910 — Choosing the Right Isolation Level
- Identify critical paths
- attackers are most likely to exploit
- Lesson 1082 — Attack Trees and Risk Prioritization
- Identify distinct responsibilities
- in your bloated class (you learned this in "Identifying Multiple Responsibilities")
- Lesson 198 — Refactoring to SRP: Extracting Classes
- Identify keeper patterns
- What insights did you gain?
- Lesson 520 — Uncertain Requirements and Prototypes
- Identify potential problems
- before they cascade through the system
- Lesson 1220 — Architecture as Structure
- Identify root cause
- Look for null pointers, corrupted data, or unexpected states
- Lesson 1734 — Post-Mortem Debugging with Core Dumps and Crash Reports
- Identify the actual behavior
- being tested—what business rule or logic is really being verified?
- Lesson 414 — Moving Tests Down the Pyramid
- Identify the reference class
- Find 5-10 completed projects similar to yours in scope, technology, team size, or complexity
- Lesson 1653 — Reference Class Forecasting
- Identify their success metrics
- (what makes this work for them?
- Lesson 1812 — Identifying and Engaging Stakeholders
- Identify two states
- Find a known-good version (no bug) and a known-bad version (bug present)
- Lesson 1724 — Binary Search for Bug Localization
- Identify visual anomalies
- like unexpected popups, loading states, or styling issues
- Lesson 578 — Screenshot 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 1184 — Identifying Actionable Improvements
- Identifying assets
- What data or functionality must be protected?
- Lesson 1078 — What is Threat Modeling
- Identifying Flakiness
- Lesson 656 — Flaky Test Management
- Identifying hot data
- Determine which data is accessed most frequently (user profiles, product catalogs, homepage content)
- Lesson 989 — Cache 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 950 — Session 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 939 — Identity Map Pattern
- IDEs show types instantly
- when you hover over a variable
- Lesson 371 — Avoiding Encodings and Hungarian Notation
- If tests fail
- You accidentally changed something—fix it now while the change is fresh
- Lesson 332 — The Refactoring Safety Net
- If you agree
- Make the requested change, commit it, and reply confirming what you did.
- Lesson 106 — Responding Constructively to Review Feedback
- If you disagree
- Respectfully explain why with technical reasons, not emotions.
- Lesson 106 — Responding Constructively to Review Feedback
- Immediate failure
- (no wait): Fail fast if the lock is held.
- Lesson 918 — Lock Timeouts and Wait Strategies
- Immediate feedback
- Run tests every minute or two, catching issues instantly
- Lesson 493 — Taking Small Steps in TDD
- Immutability
- is important (build once, never change)
- Lesson 246 — Builder vs Constructor: When to Use Each
- Immutable infrastructure
- takes the opposite approach: servers are never modified after deployment.
- Lesson 1473 — Immutable vs Mutable Infrastructure
- Impact
- Usually manageable because you documented it and planned for it.
- Lesson 37 — Types of Technical DebtLesson 133 — Stakeholder Identification and AnalysisLesson 1082 — Attack Trees and Risk PrioritizationLesson 1184 — Identifying Actionable ImprovementsLesson 1236 — Documenting Architectural DriversLesson 1608 — Adapting Ceremonies to Your TeamLesson 1643 — Giving Constructive FeedbackLesson 1742 — Learning from Production Incidents (+2 more)
- Impact metrics
- Measurable improvements in productivity, reliability, or revenue
- Lesson 1823 — The Staff Engineer Promotion Path
- Impacts multiple quality attributes
- (e.
- Lesson 1234 — Identifying Architecturally Significant Requirements
- Impediments raised, not solved
- Deep problem-solving happens afterward with relevant people only
- Lesson 1603 — Daily Standup: Goals and Format
- Imperative advantages
- Lesson 1466 — Declarative vs Imperative IaC
- Imperative challenges
- Lesson 1466 — Declarative vs Imperative IaC
- Imperative configuration
- is like giving turn-by-turn directions: "Go straight, turn left at the light, then right after the bridge.
- Lesson 1489 — Declarative vs Imperative Configuration
- Imperative provisioning
- is like giving step-by-step cooking instructions: "First, preheat the oven to 350°F.
- Lesson 1480 — Declarative vs Imperative Provisioning
- Implement hysteresis
- if you alert at 90% CPU, don't clear the alert until it drops below 80%.
- Lesson 1158 — Alert Fatigue: Reducing False Positives
- Implement the concrete mediator
- holding references to all form widgets
- Lesson 300 — Implementing a Dialog or Form Mediator
- Implement the new approach
- Build your new implementation behind the same abstraction
- Lesson 1768 — Branch by Abstraction
- Implementation
- Write the code
- Lesson 9 — What is the Software Development Lifecycle (SDLC)?Lesson 12 — Waterfall Model: Sequential DevelopmentLesson 188 — Stable Interfaces and Implementation FlexibilityLesson 907 — Repeatable Read IsolationLesson 1219 — Defining Software Architecture
- Implementation details
- Specific solutions that might evolve (e.
- Lesson 165 — Building Flexibility into Requirements
- Implementation hierarchy
- Different TV technologies (LCD, OLED, Plasma)
- Lesson 260 — The 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 925 — Read-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 449 — Organizing Tests by Behavior vs Implementation
- Implicit Grant
- was designed for browser-based JavaScript applications that couldn't keep secrets.
- Lesson 1020 — Implicit and Client Credentials Grants
- Implicit vs explicit transactions
- Some ORMs auto-commit, others require explicit `commit()` calls.
- Lesson 950 — Session and Transaction Management
- Import/dependency lists
- Long lists of imports suggest a class knows too much about others
- Lesson 183 — Measuring Coupling and Cohesion in Practice
- Important considerations
- Lesson 1739 — Reproducing Production Issues Safely
- Impossible states
- Data violates your business rules temporarily or permanently
- Lesson 896 — What Are Transactions and Why They Matter
- Improve context
- for alerts that confuse responders
- Lesson 1162 — Alert Evaluation: Regular Review and Refinement
- Improve continuously
- Each iteration teaches you something for the next cycle
- Lesson 17 — Feedback Loops Across the SDLC
- Improve query performance
- The database can scan a smaller, more focused index with higher selectivity
- Lesson 876 — Partial and Filtered Indexes
- Improve your own skills
- You learn to spot patterns and bad habits
- Lesson 101 — Self-Reviewing Before Submission
- Improved responsiveness
- Users get instant feedback instead of waiting for slow operations
- Lesson 1385 — Asynchronous Processing and Message Queues
- Improved understanding
- Developers can focus on one component at a time without needing to understand everything it touches
- Lesson 177 — Understanding Coupling: How Components Depend on Each Other
- Improves Readability
- A method named `calculateTotalWithTax()` tells you immediately what it does.
- Lesson 346 — Extract Method
- Improves scalability
- (servers handle more concurrent requests with less memory per request)
- Lesson 783 — Why Pagination Matters
- IN
- loads all matching values into memory first, then checks each row
- Lesson 884 — Query Rewriting for Performance
- In-memory
- Perfect for fast feedback when testing basic SQL operations
- Lesson 531 — Setting Up Test DatabasesLesson 1382 — Stateless Application Design for Scalability
- In-memory filesystems
- simulate file operations without touching the disk at all — everything happens in RAM.
- Lesson 535 — Testing File System Operations
- Inbound (driving) ports
- Interfaces that let external systems call your business logic (e.
- Lesson 1264 — The Ports and Adapters Pattern
- Incident Response Runbooks
- define who to notify, communication templates, investigation procedures, and post-incident review requirements.
- Lesson 1685 — Runbooks and Operational Documentation
- Incident tracking
- begun immediately, even if details come later
- Lesson 1549 — Emergency Release Procedures
- Include decision trees
- "If X, then do Y; otherwise do Z"
- Lesson 1685 — Runbooks and Operational Documentation
- Incoming responses
- status code, response time, error messages
- Lesson 1124 — Logging at System Boundaries
- incompatible
- API changes.
- Lesson 1550 — Semantic Versioning (SemVer) ExplainedLesson 1871 — What is License Compatibility
- Incompatible licenses
- impose restrictions that conflict with GPL requirements:
- Lesson 1873 — GPL License Compatibility Rules
- Incomplete
- Missing critical security events
- Lesson 1050 — A09: Security Logging and Monitoring Failures
- Incomplete setups
- occur when security features exist but aren't enabled.
- Lesson 1046 — A05: Security Misconfiguration
- Incomplete transactions
- A user update fails halfway through, leaving elevated privileges in place
- Lesson 1034 — Fail Securely
- Incomplete understanding
- You might not fully understand what the original code was doing or why it was written that way.
- Lesson 202 — Why Modification is Risky
- Inconsistencies grow
- Different parts of the system solve similar problems differently
- Lesson 41 — Code Evolution and Entropy
- Increase test complexity
- – more setup code, more mocking logic to understand
- Lesson 473 — The Cost-Benefit Trade-offs of Test Doubles
- Increased Abstraction
- Patterns add layers between your intent and implementation.
- Lesson 323 — The Cost of Pattern Overhead
- Increased Complexity
- Achieving reproducibility requires pinning dependencies, controlling build environments, standardizing timestamps, and managing many other details.
- Lesson 691 — Benefits and Trade-offsLesson 1403 — Multi-Leader and Leaderless ReplicationLesson 1478 — Benefits and Challenges of Immutability
- Increased operational complexity
- You now manage message brokers, monitoring distributed flows, and potential event ordering issues across services.
- Lesson 1346 — Benefits and Trade-offs of Event-Driven Architecture
- Increased response size
- Every response carries navigation links
- Lesson 797 — HATEOAS Trade-offs and Maturity Models
- Increased Risk
- Rolling back changes becomes dangerous because you don't know what the "working" state actually was.
- Lesson 1474 — Configuration Drift and Its Problems
- Increased user trust
- People appreciate when you respect their privacy
- Lesson 1901 — Data Minimization Principle
- Increases load
- on your backends (you're doing extra work)
- Lesson 1109 — Request Hedging and Redundancy
- Increasing cycle time
- If tasks suddenly take longer to complete, measure time spent in *each* stage.
- Lesson 1597 — Identifying and Resolving Bottlenecks
- Independence
- Service A runs even if Service B is down
- Lesson 1309 — Data Duplication vs Data Coupling Trade-offs
- Independent change
- You can rewrite Module B's internals without breaking Module A
- Lesson 167 — Abstraction and Information Hiding
- Independent Deployment
- You can update, deploy, and scale one service without touching others.
- Lesson 1294 — Defining MicroservicesLesson 1333 — Team Size and Conway's Law
- Independent in-memory data structures
- Lesson 462 — Parallelizing Test Execution
- Independent Scaling
- A high-traffic service can scale its database separately.
- Lesson 1307 — Database Per Service PatternLesson 1385 — Asynchronous Processing and Message Queues
- Index high-cardinality columns
- used in WHERE clauses, especially for exact matches
- Lesson 875 — Index Selectivity and Cardinality
- indirection
- .
- Lesson 281 — Complexity vs Flexibility Trade-offLesson 323 — The Cost of Pattern Overhead
- Industry standards
- Common data formats, protocols, or workflows everyone expects (like HTTPS for web apps)
- Lesson 140 — Domain 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 878 — Using Query Execution Plans to Validate Indexes
- Influence demonstrations
- How you shaped technical direction without direct authority
- Lesson 1823 — The Staff Engineer Promotion Path
- Info
- metadata about the query itself
- Lesson 811 — Resolvers: The Execution LayerLesson 1156 — Alert Severity Levels and Response Expectations
- Informal check-ins
- matter too: brief pulse-checks during standups ("How are we feeling about this sprint?
- Lesson 1645 — Creating Feedback Loops in Teams
- Information hiding
- means keeping implementation details private, so other parts of your system don't depend on them.
- Lesson 167 — Abstraction 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 1464 — What is Infrastructure as Code
- Infrastructure issues
- Network problems, resource exhaustion, configuration drift
- Lesson 719 — Deployment Risk and the Need for Rollback
- Infrastructure provisioning tools
- (like Terraform, CloudFormation, or Pulumi) excel at creating and destroying cloud resources.
- Lesson 1495 — Configuration Management vs Infrastructure Provisioning
- Ingress
- is a Kubernetes resource that defines rules for routing external HTTP/S traffic to internal Services.
- Lesson 1463 — Ingress Controllers and HTTP Routing
- Ingress Controller
- is the actual component that implements these rules.
- Lesson 1463 — Ingress 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 173 — Favor Composition Over InheritanceLesson 271 — Decorator vs. Inheritance: Flexibility and Complexity
- INI
- files are the simplest: flat `key=value` pairs under `[sections]`.
- Lesson 735 — Configuration File Formats and Parsing
- Initial Slowdown
- New TDD practitioners write tests more slowly.
- Lesson 521 — Team Adoption and Learning Curve
- Injection Flaws
- SQL injection, command injection, and script injection happen when untrusted input is incorporated into queries or commands.
- Lesson 624 — Detecting 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 350 — Extract Class and Inline Class
- Innovation
- Different perspectives challenge assumptions and spark creative solutions
- Lesson 1848 — The 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 1841 — Safe-to-Fail Experiments and Innovation Time
- Input validation
- that protects against injection attacks even when attackers understand your tech stack
- Lesson 1035 — Security by Design, Not ObscurityLesson 1060 — Input Validation and SanitizationLesson 1115 — Fallacy 4: The Network is Secure
- Input variables
- Parameters that customize the module's behavior
- Lesson 1484 — Terraform Modules and Reusability
- Insecure CI/CD pipelines
- allow attackers to inject malicious code during the build and deployment process.
- Lesson 1049 — A08: 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 860 — What is Normalization?
- Inside conditional branches
- to verify which path executes
- Lesson 1715 — Adding Strategic Print Statements and Logging
- Insider threats
- A malicious employee can abuse their complete access
- Lesson 1037 — Separation of Duties
- Insider threats are contained
- Malicious actors can only harm what they can reach
- Lesson 1033 — Principle of Least Privilege
- Inspect variables
- Examine the values that led to the failure
- Lesson 1734 — Post-Mortem Debugging with Core Dumps and Crash Reports
- Inspection
- – Regularly examine the product, process, and team dynamics
- Lesson 1600 — What Are Agile Ceremonies?
- Install
- Configure your web server to use the certificate and private key
- Lesson 1077 — Certificate Management and Mixed Content
- Installation/Setup Instructions
- Step-by-step commands or procedures to get the software running locally.
- Lesson 1683 — README Files
- Instrumentation profilers
- work like installing speed cameras at every intersection.
- Lesson 1195 — Types of Profilers: Sampling vs Instrumentation
- Insufficient Randomness
- Using predictable values for tokens, IVs (initialization vectors), or salts.
- Lesson 1043 — A02: 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 1045 — A04: Insecure Design
- Intangible
- (technical debt, improvements with delayed value)
- Lesson 1598 — Policies and Classes of Service
- Integrate them
- Use `git pull` (which fetches and merges) or manually merge/rebase the remote branch into yours
- Lesson 80 — Handling Push Rejections
- Integrated
- The code successfully integrates with the rest of the system.
- Lesson 694 — Production-Ready Definition
- Integration allowed
- → you can build commercial products using MPL libraries
- Lesson 1868 — The Mozilla Public License
- Integration confidence
- Verifies components work together correctly
- Lesson 565 — Component Testing vs Full Page Testing
- Integration failures
- Both modules work individually but fail when connected
- Lesson 522 — What Are Module Boundaries
- Integration issues
- Third-party services fail or return unexpected data
- Lesson 719 — Deployment Risk and the Need for Rollback
- Integration nightmares
- Systems that can't easily talk to each other
- Lesson 1251 — Architecture Governance and Standards
- Integration patterns
- How services communicate (REST, gRPC, events)
- Lesson 1251 — Architecture Governance and Standards
- Integration points
- How the system connects to external services
- Lesson 127 — System RequirementsLesson 524 — Testing Adapter Layers
- Integration requirements
- Must use the existing Oracle database
- Lesson 1232 — Constraints: Technical and Organizational
- Integration tests
- are moderate: slower, more setup required, harder to debug.
- Lesson 407 — The Testing Pyramid ConceptLesson 409 — The Cost-Confidence Trade-offLesson 412 — The Testing Trophy AlternativeLesson 523 — Integration Tests vs Unit TestsLesson 529 — Balancing Test ScopeLesson 554 — What is End-to-End TestingLesson 1494 — Testing Configuration Code
- intent
- differs fundamentally:
- Lesson 262 — Adapter vs Bridge: Understanding the DistinctionLesson 313 — Strategy vs State Pattern
- 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 920 — Intent Locks and Lock Hierarchies
- Interaction quality
- Whether components work together correctly beyond just executing
- Lesson 592 — Limitations of Coverage Metrics
- Interaction-based approach
- Lesson 477 — Interaction-Based vs State-Based Testing
- Interaction-based testing
- checks the *process* of an operation.
- Lesson 477 — Interaction-Based vs State-Based Testing
- Interactions and Boundaries
- Show how components communicate—REST APIs, message queues, shared databases.
- Lesson 1682 — Architecture 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 68 — Interactive Rebase for History CleanupLesson 114 — Commit Hygiene Before Push
- interest
- the longer technical debt sits in your codebase, the more expensive it becomes.
- Lesson 36 — What is Technical DebtLesson 133 — Stakeholder 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 1276 — Interface Adapters Layer
- Interface contracts
- Define explicit APIs between layers
- Lesson 1257 — Layer 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 800 — Interface Definition Languages (IDLs)
- Interface specifications
- How components communicate (APIs, protocols)
- Lesson 127 — System Requirements
- Interfaces
- specify the contract plugins must follow
- Lesson 192 — Plugin Architectures and Extension Points
- Interfaces (Contracts)
- Module A depends on an abstract interface, and Module B implements it.
- Lesson 1292 — Inter-Module Communication Patterns
- Interfaces and Classes
- Document the purpose and responsibility of each public interface or class.
- Lesson 1680 — API Reference Documentation
- Internal fragmentation
- Pages are only partially filled, wasting space
- Lesson 877 — Index Maintenance and Statistics
- Internal network access
- `http://localhost:6379/` might hit your Redis server
- Lesson 1051 — A10: Server-Side Request Forgery (SSRF)
- Internally strong
- (high cohesion) - everything inside works toward the same goal
- Lesson 182 — The Relationship Between Coupling and Cohesion
- Intervention
- means addressing exclusionary behavior in the moment.
- Lesson 1854 — Allyship and Advocacy in Engineering
- Interview Long-Time Users
- Lesson 137 — Document Analysis and System Archaeology
- Interviews
- are your most powerful tool for depth.
- Lesson 1674 — Understanding Stakeholder Needs and Concerns
- Intrinsic state
- Shared, immutable data (like font properties)
- Lesson 274 — Flyweight Pattern: Sharing State for Memory EfficiencyLesson 275 — Intrinsic vs Extrinsic State in Flyweight
- 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 1754 — Breaking 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 353 — Introduce Parameter Object
- Introduce the abstraction
- Create an interface or wrapper around the code you want to replace
- Lesson 1768 — Branch by Abstraction
- Invalidate old tokens immediately
- when a new reset is requested or password changes successfully.
- Lesson 1005 — Password Reset Flows and Security Tokens
- invariants
- the rules that must always be true for your code to work correctly.
- Lesson 171 — Encapsulation and Data HidingLesson 209 — Behavioral Subtyping and ContractsLesson 607 — Properties vs ExamplesLesson 608 — The Test Oracle ProblemLesson 609 — Common Property Patterns
- Inventory Context
- subscribes, decrements stock
- Lesson 1285 — Domain Events for Context IntegrationLesson 1306 — Domain-Driven Design Bounded Contexts
- Inventory dependencies
- List all direct and transitive dependencies
- Lesson 1877 — Verifying License Compatibility in Practice
- Inventory management systems
- need ACID to prevent overselling.
- Lesson 902 — When ACID Guarantees Are Critical
- Inventory Service
- listens for "OrderPlaced" and reserves stock
- Lesson 1374 — Choreography: Decentralized Collaboration
- INVEST
- criteria—six qualities that make stories easier to work with and more likely to deliver real value.
- Lesson 145 — Writing Effective User Stories
- Investor requirements
- Some investors want patent protection as proof of IP value
- Lesson 1890 — Trade Secrets vs Patents: Choosing a Strategy
- Invoker
- – Triggers commands without knowing what they do (holds and calls `execute()`)
- Lesson 291 — Implementing the Command Pattern
- Involve stakeholders
- let them weigh priorities with full information
- Lesson 1235 — Driver Conflicts and Trade-offs
- IoT devices
- Embedded systems with certificates burned into hardware
- Lesson 996 — Certificate-Based Authentication
- IPC (inter-process communication)
- Efficient local communication
- Lesson 1444 — Pods: The Atomic Unit of Deployment
- IPC namespace
- Isolated inter-process communication resources
- Lesson 1427 — Namespaces and Control Groups
- Iron Triangle
- meeting strict performance requirements often means higher cost or reduced scope.
- Lesson 32 — Non-Functional Requirements as ConstraintsLesson 36 — What is Technical Debt
- Irreconcilable values
- Stakeholders prioritize fundamentally different outcomes (e.
- Lesson 1816 — Making 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 1740 — Feature Flags for Production Debugging
- Isolate external calls
- to specific test scenarios you can skip independently
- Lesson 576 — Handling External Services
- Isolate test data
- Each test should create its own data in the "Arrange" phase, not rely on data from previous tests.
- Lesson 440 — Avoiding Test Interdependence
- isolated
- .
- Lesson 540 — What Are Test FixturesLesson 1841 — Safe-to-Fail Experiments and Innovation Time
- Isolated fix branch
- – Branch from the production release tag, not `main`
- Lesson 1569 — The Hotfix Process and Risk Management
- Isolating the problem domain
- means systematically determining which layer or component is responsible for the failure.
- Lesson 1723 — Isolating the Problem Domain
- isolation
- .
- Lesson 415 — Unit Tests: Testing in IsolationLesson 464 — What are Test Doubles and Why Use ThemLesson 535 — Testing File System OperationsLesson 543 — Database Fixtures and Test DataLesson 545 — Test Containers and Dockerized FixturesLesson 559 — E2E Test Data ManagementLesson 899 — The Isolation PropertyLesson 901 — ACID Trade-offs and Performance (+2 more)
- It affects multiple components
- the choice ripples through your codebase
- Lesson 1221 — Architecture as Decisions
- It constrains future options
- you're committing to certain paths and closing others
- Lesson 1221 — Architecture as Decisions
- It derives economic value
- from not being generally known
- Lesson 1889 — Trade Secrets: Definition and Protection
- It duplicates coverage
- Two tests verify the exact same behavior with trivial variations
- Lesson 503 — When to Delete or Merge Tests
- IT efficiency
- Centralized user management and access control
- Lesson 995 — Single Sign-On (SSO) Fundamentals
- It performs no transformation
- Just passes data structures unchanged
- Lesson 1261 — When Layers Become Too Thin
- It tests implementation details
- The test broke during valid refactoring because it was too tightly coupled
- Lesson 503 — When to Delete or Merge Tests
- It's easier to change
- Modifications affect one clear area of responsibility
- Lesson 180 — Understanding Cohesion: What Belongs Together
- It's easier to test
- Fewer unrelated concerns means simpler, focused tests
- Lesson 180 — Understanding Cohesion: What Belongs Together
- It's easier to understand
- You grasp its purpose quickly because it does one thing well
- Lesson 180 — Understanding Cohesion: What Belongs Together
- It's more reusable
- A focused module can be used elsewhere without dragging along unrelated baggage
- Lesson 180 — Understanding Cohesion: What Belongs Together
- Iterate on your board
- If certain columns consistently cause delays, investigate why.
- Lesson 1595 — Managing Flow and Cycle Time
- Iterative and Incremental Models
- take a different approach: they break the project into smaller cycles called *iterations*.
- Lesson 13 — Iterative and Incremental Models
- Iterative Models
- repeat cycles to gradually improve?
- Lesson 14 — Agile 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 13 — Iterative and Incremental Models
- Its own network namespace
- a private networking environment with its own network interfaces, routing tables, and IP addresses
- Lesson 1428 — Container Networking Basics
- IX (Intent Exclusive)
- Indicates exclusive locks exist at lower levels
- Lesson 920 — Intent Locks and Lock Hierarchies
J
- Jaeger
- and **Zipkin** are two popular open-source tracing backends.
- Lesson 1153 — Tracing Infrastructure and Tools
- JavaScript Context
- When placing data inside JavaScript strings, use JavaScript escaping to neutralize special characters like quotes and backslashes.
- Lesson 1064 — Preventing XSS Through Output Encoding
- Job
- creates one or more Pods to run a task to completion, then terminates.
- Lesson 1462 — Jobs and CronJobs for Batch Work
- JOIN Conditions
- Lesson 871 — Identifying Columns to Index
- Join Fetching
- loads everything in a single query using SQL JOINs.
- Lesson 945 — Eager Loading and Fetch Strategies
- Join order
- Which table should be processed first in multi-table queries
- Lesson 885 — Statistics and Query Planning
- JSON
- and **YAML** are great for structured, hierarchical data like objects or nested records.
- Lesson 544 — Fixture Files and Data FormatsLesson 735 — Configuration File Formats and ParsingLesson 1131 — JSON and Other Structured Formats
- JSON encoding
- (much lighter than XML) over **HTTP or other transports**.
- Lesson 799 — RPC Protocols: XML-RPC, JSON-RPC, and gRPC
- JSON over HTTP/1.1
- human-readable text transferred one request at a time.
- Lesson 803 — RPC 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 1011 — Stateless Authentication with JWTs
- JSON-RPC
- Web applications, JavaScript-heavy environments
- Lesson 799 — RPC Protocols: XML-RPC, JSON-RPC, and gRPCLesson 801 — RPC Error Handling and Status Codes
- Judgment
- – Maintain integrity and independence in professional judgment
- Lesson 1894 — The IEEE-CS/ACM Software Engineering Code of Ethics
- Just right
- `calculate(itemPrice: 100, discountPercent: 10)` — Clear, focused, sufficient
- Lesson 438 — Test Data: Realistic vs. MinimalLesson 1665 — Balancing Granularity
- just-in-time
- production and continuous flow.
- Lesson 1592 — Kanban Origins and PrinciplesLesson 1763 — Building a Safety Net Incrementally
K
- Kanban board
- is a visual tool that makes work visible and tracks progress through defined stages.
- Lesson 1593 — The Kanban Board
- Keep a Changelog
- format solves this by grouping changes into predictable categories.
- Lesson 1554 — Writing Effective Changelogs
- Keep artifacts separate
- from source code (add output directories to `.
- Lesson 665 — Build Artifacts and Output
- Keep Comments Accurate
- Lesson 376 — Writing Effective Comments
- Keep functions small
- Fewer dependencies = faster initialization
- Lesson 1521 — Cold Starts and Warm Instances
- Keep functions warm
- Schedule periodic "ping" invocations (wasteful but sometimes necessary for latency-critical paths)
- Lesson 1521 — Cold Starts and Warm Instances
- Keep it current
- As your system evolves, old problems disappear and new ones emerge.
- Lesson 1688 — FAQ and Troubleshooting Guides
- Keep one high-level test
- as a "smoke test" to ensure integration still works
- Lesson 414 — Moving Tests Down the Pyramid
- Keep parameters independent
- Changing the sort order shouldn't require different pagination parameters.
- Lesson 789 — Combining Pagination, Filtering, and Sorting
- Keep related operations together
- All export logic lives in `ExportVisitor`, all size calculation in `SizeVisitor`
- Lesson 318 — Visitor Pattern: Operations on Object Structures
- Keep selectors simple
- – shorter selectors are easier to maintain
- Lesson 563 — Locator Strategies and Best Practices
- Keep them accessible
- Responders need them under pressure
- Lesson 1685 — Runbooks and Operational Documentation
- Keep-Alive
- (also called persistent connections) is the HTTP-level mechanism that signals "don't close this connection yet.
- Lesson 1395 — Connection Pooling and Keep-Alive
- Keeping logic in services
- preserves independence but may lead to duplication of common patterns.
- Lesson 1328 — Gateway Responsibilities and Trade-offs
- Keeping skills current
- Technology evolves rapidly.
- Lesson 1924 — Maintaining Competence and Continuous Learning
- Key Architectural Decisions
- Record the "why" behind critical choices using Architecture Decision Records (ADRs).
- Lesson 1682 — Architecture Documentation
- Key drawbacks
- (complexity, learning curve, vendor lock-in)
- Lesson 1634 — Presenting Technical Decisions
- Key length
- Some caches (like Redis) handle long keys fine, but network transfer costs matter.
- Lesson 961 — Cache Keys and Lookup Mechanisms
- Key practices
- Lesson 857 — SDK Versioning and Compatibility
- Key Questions to Answer
- Lesson 142 — Validating Elicited Requirements
- Key requirements
- Lesson 886 — Pagination and Large Result Sets
- Keyboard Navigation
- Simulate pressing keys like Tab, Enter, Escape, or arrow keys.
- Lesson 567 — Testing User InteractionsLesson 1929 — Designing for Diverse Abilities
- Keyset pagination
- uses the last seen value as a filter instead of counting rows:
- Lesson 886 — Pagination and Large Result Sets
- Keystroke logging
- Recording typing patterns, deleted text, or hesitation
- Lesson 1909 — Surveillance and Tracking Ethics
- KISS
- (Keep It Simple, Stupid) and helps prevent violating **DRY** (Don't Repeat Yourself) through premature abstractions.
- Lesson 170 — You Aren't Gonna Need It (YAGNI)
- Know your limits
- and seek help or defer to specialists when needed
- Lesson 1897 — Product Quality and Professional Competence
- Know your non-negotiables
- Some things (user safety, legal compliance, data protection) aren't trade-offs.
- Lesson 1922 — Balancing Business Pressure with Professional Standards
- Knowledge Barriers
- New team members struggle to understand the system because everything is interconnected.
- Lesson 179 — The Cost of Tight Coupling
- Knowledge boundaries
- You've exhausted your troubleshooting steps and need a database specialist
- Lesson 1169 — Escalation Paths
- Knowledge Sharing
- When you review someone's authentication implementation, you learn their approach.
- Lesson 1616 — The Purpose and Value of Code ReviewLesson 1626 — Benefits and Trade-offs of Pair ProgrammingLesson 1630 — When to Use Pairing vs Mobbing
- 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 1840 — Creating a Culture of Continuous Learning
- Knowledge sharing sessions delivered
- (tech talks, workshops, documentation)
- Lesson 1847 — Measuring and Rewarding Learning
- Knowledge silos
- Only one person understands "their" special architecture
- Lesson 1251 — Architecture Governance and StandardsLesson 1474 — Configuration Drift and Its ProblemsLesson 1749 — Defining Legacy Code
- Known knowns
- Features you understand well (low uncertainty)
- Lesson 1615 — Dealing with Estimation Uncertainty
- Known secret formats
- Checking against databases of how different services format their keys
- Lesson 743 — Secret Scanning and Prevention
- Known short-term needs
- A feature needed for one event, then retired
- Lesson 42 — Balancing Debt and Delivery
- Known unknowns
- Questions you know you need to answer (medium uncertainty)
- Lesson 1615 — Dealing 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 206 — When to Apply OCP
- Kubelet
- – An agent that ensures containers are running as specified.
- Lesson 1443 — Kubernetes Architecture Overview
- Kubernetes Service Discovery
- is more sophisticated.
- Lesson 1329 — DNS-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 972 — Multi-Level Caching
- L2 (Level 2)
- Distributed cache like Redis or Memcached (slower than L1 but still fast, shared across instances, much larger capacity)
- Lesson 972 — Multi-Level Caching
- Labeling bias
- Human annotators bring their own biases when labeling data.
- Lesson 1914 — Bias in Training Data
- labels
- (also called tags or dimensions) add *who, where, or how* context (e.
- Lesson 1140 — Metric Naming and LabelsLesson 1445 — Labels, Selectors, and AnnotationsLesson 1455 — ReplicaSets and Ensuring Desired State
- Lack of modularity
- makes it impossible to deploy features independently
- Lesson 1225 — The Cost of Architectural Mistakes
- Language familiarity
- Use what your team knows (Python → Locust, JavaScript → k6)
- Lesson 1213 — Load 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 337 — Bloaters: Large Class and God ObjectLesson 346 — Extract Method
- Large dataset transformations
- Lesson 964 — Determining What to Cache
- Large reviews
- If a PR is unusually big, communicate expected delay upfront.
- Lesson 1622 — Review Timing and Response Expectations
- Larger systems
- have thousands or millions of lines of code that interact in complex ways
- Lesson 2 — Programming vs Engineering: Scale and Complexity
- Largest Contentful Paint (LCP)
- , and custom satisfaction thresholds tailored to specific user workflows.
- Lesson 1210 — Apdex and User-Centric Metrics
- Last-Updated Dates
- Lesson 1709 — Documentation Health Metrics
- latency
- to every request and can become bottlenecks under heavy session load—they're optimized for complex queries, not rapid key-value lookups.
- Lesson 1008 — Session Storage StrategiesLesson 1171 — Understanding Service Level Indicators (SLIs)Lesson 1173 — Common SLI Metrics: Availability, Latency, and ThroughputLesson 1188 — Latency vs Throughput Trade-offsLesson 1204 — Latency vs ThroughputLesson 1387 — Measuring Scalability: Throughput and Latency
- Latency is zero
- Every network call takes measurable time; remote isn't the same as local.
- Lesson 1111 — Introduction to the Fallacies of Distributed Computing
- Latency percentiles
- (p50, p95, p99) over averages—outliers matter
- Lesson 1189 — Performance Measurement Basics
- Latency Requirements
- Need sub-millisecond response times?
- Lesson 975 — Pattern Selection Trade-offsLesson 1322 — Communication Protocol Trade-offs
- Latency SLI
- "95% of API requests completed in under 200ms"
- Lesson 1171 — Understanding Service Level Indicators (SLIs)
- Latency-sensitive applications
- suffer from cold starts.
- Lesson 1527 — When Serverless is and Isn't Appropriate
- Latest Compatible Version
- Pick the newest version that satisfies all constraints, if one exists
- Lesson 672 — Version Constraints and Conflicts
- Law of Demeter
- (principle of least knowledge): an object should only talk to its immediate friends, not friends-of- friends-of-friends.
- Lesson 344 — Couplers: Message Chains and Middle Man
- Lawful basis
- You need a legitimate reason (consent, contract, legal obligation, etc.
- Lesson 1908 — Privacy Regulations (GDPR, CCPA)
- Layer 3
- Authentication verifies user identity (username/password + MFA)
- Lesson 1032 — Defense in Depth
- Layer 4 (Transport Layer)
- load balancers make routing decisions based on network information like IP addresses and TCP/UDP ports.
- Lesson 1390 — Layer 4 vs Layer 7 Load Balancing
- Layer 7 (Application Layer)
- load balancers peek inside the HTTP request itself.
- Lesson 1390 — Layer 4 vs Layer 7 Load Balancing
- Layered facades
- Create multiple facades at different abstraction levels
- Lesson 273 — Implementing Facades: Design Decisions
- Layered links
- Keep the main flow simple, but hyperlink to separate pages for "Performance Considerations," "Security Implications," or "Historical Context.
- Lesson 1695 — Progressive Disclosure
- Layered System Architecture
- means you can add intermediate servers between the client and the origin server without either side knowing or caring.
- Lesson 763 — Layered System Architecture
- Layers of abstraction
- show architectural migrations.
- Lesson 1780 — Reading Legacy Code as Historical Documentation
- Lazy initialization
- Delay creating expensive objects until actually needed
- Lesson 277 — Proxy Pattern: Controlling Access to ObjectsLesson 547 — Fixture Performance and Test Speed
- Lazy loading
- delays fetching related objects until you explicitly access them.
- Lesson 940 — Lazy Loading vs Eager LoadingLesson 944 — The N+1 Query ProblemLesson 966 — Cache- Aside (Lazy Loading)
- Lazy vs. Eager
- Object references feel instant, but if backed by a database, following `order.
- Lesson 931 — Association 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 1058 — LDAP and XML Injection
- LDAP/XML/NoSQL Injection
- Protocol-specific command manipulation
- Lesson 1053 — What Are Injection Attacks
- leader
- handles all write operations, then propagates those changes to one or more **follower** nodes.
- Lesson 1402 — Leader-Follower ReplicationLesson 1419 — The Raft Consensus Algorithm
- Leader election
- designates one instance to perform a critical task, with automatic failover if it dies.
- Lesson 921 — Application-Level Locking PatternsLesson 1414 — The Distributed Consensus Problem
- Leader propagates changes
- The leader forwards changes to followers through a replication log
- Lesson 1402 — Leader-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 1402 — Leader-Follower ReplicationLesson 1403 — Multi-Leader and Leaderless Replication
- Leaderless replication
- goes further: *any* node can accept writes directly.
- Lesson 1403 — Multi-Leader and Leaderless Replication
- Leading
- Percentage of services using the new API standard
- Lesson 1810 — Measuring Progress Toward Vision
- Leading indicators
- matter more than lagging ones.
- Lesson 1672 — Tracking and Communicating Dependency StatusLesson 1810 — Measuring Progress Toward Vision
- Leaf
- The basic building block with no children; represents individual objects at the end of branches
- Lesson 265 — Implementing Composite: Components, Leaves, and Composites
- Leaked in logs
- if an error message prints connection strings
- Lesson 740 — What Are Secrets and Why They Matter
- Learned experience
- Production incidents reveal that "99% availability" was optimistic—you now need 99.
- Lesson 1237 — Evolving Drivers Over Time
- Learning aid
- Seeing violations immediately helps you internalize coding standards
- Lesson 395 — Editor 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 1716 — Making One Change at a Time
- Learning From Work
- Post-mortems teach system thinking.
- Lesson 1840 — Creating 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 1798 — Tailoring Mentorship Styles
- Learning Through Building
- Here's the paradox: you can't fully understand the problem until you start solving it.
- Lesson 160 — Why Requirements Change
- Learning-Focused Feedback
- Frame comments as learning opportunities.
- Lesson 1617 — Creating 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 921 — Application-Level Locking Patterns
- Leaves
- , and managers (who have direct reports) are **Composites**.
- Lesson 265 — Implementing Composite: Components, Leaves, and Composites
- Legacy code compatibility
- requires temporary workarounds during gradual migration
- Lesson 397 — Balancing Automation with Flexibility
- Legacy system integration
- Gradually introduce GraphQL alongside existing REST endpoints during migration
- Lesson 827 — Mixing API Styles in Practice
- Legal and regulatory requirements
- Laws you *must* follow (GDPR for user data, HIPAA for healthcare)
- Lesson 140 — Domain Research and Competitive Analysis
- Legal or regulatory issues
- expose the organization to liability
- Lesson 1920 — Speaking Up: When and How to Raise Concerns
- Legal or regulatory requirements
- "Retention period mandated by GDPR Article 17"
- Lesson 375 — Self-Documenting Code vs Comments
- Length
- Aim for functions that are **5-20 lines** when possible.
- Lesson 372 — Function Structure and Length
- Length beats complexity
- A 16-character passphrase like `correct-horse-battery-staple` is exponentially harder to crack than `P@ssw0rd!
- Lesson 993 — Password Policies and Requirements
- Length over complexity
- A 16-character passphrase like `correct-horse-battery-staple` is exponentially stronger than `P@ssw0rd!
- Lesson 1004 — Password Strength Requirements and Policies
- Less code
- You don't write custom shrinking functions—the generation strategy *is* the shrinking strategy
- Lesson 619 — Integrated Shrinking
- Less duplication
- Tests become shorter and clearer
- Lesson 451 — Object Mother PatternLesson 729 — Default Values and Configuration Hierarchies
- Less suitable for pairing
- Lesson 1627 — Effective Pairing Practices
- Lesser GPL (LGPL)
- introduces "weak copyleft"—a middle ground between permissive licenses and the GPL.
- Lesson 1867 — The 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 512 — Emergent Design vs. Upfront Design
- Level 0
- Single URI, single HTTP verb (basically RPC over HTTP)
- Lesson 797 — HATEOAS Trade-offs and Maturity Models
- Level 1
- Multiple resource URIs, but still limited verbs
- Lesson 797 — HATEOAS Trade-offs and Maturity ModelsLesson 1658 — Work Breakdown Structures (WBS)
- Level 2
- Proper HTTP verbs and status codes (where most APIs stop)
- Lesson 797 — HATEOAS Trade-offs and Maturity ModelsLesson 1658 — Work Breakdown Structures (WBS)
- Level 3
- Full HATEOAS — hypermedia controls guide clients
- Lesson 797 — HATEOAS Trade-offs and Maturity ModelsLesson 1658 — Work Breakdown Structures (WBS)
- Level 4
- (under Cart API): Create Cart Endpoint, Add Item Endpoint, Update Quantity Endpoint.
- Lesson 1658 — Work Breakdown Structures (WBS)
- Level AA
- The recommended target for most organizations.
- Lesson 1928 — WCAG Guidelines and Compliance Standards
- Level AAA
- The highest level, though not always achievable for all content.
- Lesson 1928 — WCAG Guidelines and Compliance Standards
- LGPL
- → GPL (weaker copyleft can be upgraded to stronger)
- Lesson 1873 — GPL License Compatibility Rules
- Libraries you publish
- Use flexible ranges so downstream users aren't forced into version conflicts
- Lesson 673 — Pinning vs Flexible Versioning
- 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 1930 — Automated and Manual Accessibility Testing
- Lightweight
- Containers share the host OS kernel, using far fewer resources than full virtual machines
- Lesson 1423 — What Are Containers and Why Use Them
- Limit by count
- Lesson 66 — Viewing and Navigating History with git log
- Limit eager loading scope
- Only eagerly load what you truly need.
- Lesson 947 — Cartesian Product Explosion
- Limit exposed endpoints
- Don't expose administrative interfaces to the public internet.
- Lesson 1038 — Minimize Attack Surface
- Limit Exposed Headers
- Don't leak sensitive information through `Access-Control-Expose-Headers`.
- Lesson 1068 — Cross-Origin Resource Sharing (CORS) Security
- Limit scope ruthlessly
- – Fix *only* the critical issue; refactoring waits
- Lesson 1569 — The Hotfix Process and Risk Management
- Limit the output
- `git log -5` shows only the last 5 commits
- Lesson 117 — Reading Git Log: Understanding Commit History
- Limit token lifetime aggressively
- One hour maximum.
- Lesson 1005 — Password Reset Flows and Security Tokens
- Limit traversal depth
- Design your queries to stop at logical boundaries.
- Lesson 949 — The 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 257 — Class vs Object AdaptersLesson 1912 — Fairness Definitions and Metrics
- Limited access control
- You can't easily restrict which parts of your application can read which environment variables.
- Lesson 742 — Secrets in Environment Variables
- Limited blast radius
- If it fails, only the experiment is affected, not customers
- Lesson 1841 — Safe-to-Fail Experiments and Innovation Time
- limited scope
- (just photos) and **expires** after some time
- Lesson 1017 — OAuth2 Fundamentals and the Delegation ProblemLesson 1765 — The Economics of Legacy Refactoring
- Limited visibility
- No single place shows the complete workflow state
- Lesson 1375 — Trade-offs: Coupling and Visibility
- Line coverage
- Which lines of code executed
- Lesson 585 — What Code Coverage MeasuresLesson 586 — Line Coverage vs Statement CoverageLesson 605 — Choosing the Right Coverage Metric
- Line endings
- Windows uses `\r\n` (CRLF), Unix uses `\n` (LF).
- Lesson 666 — Cross-Platform Build Considerations
- Line numbers
- – Exactly where to look in your files
- Lesson 1714 — Reading Error Messages and Stack Traces
- Link seams
- Where you can swap implementations at link/load time.
- Lesson 1753 — Finding Seams in Legacy Code
- Link to related documentation
- Connect to architecture docs and troubleshooting guides
- Lesson 1685 — Runbooks and Operational Documentation
- Links
- back to detailed build logs
- Lesson 643 — Build Notifications and ReportingLesson 762 — Hypermedia as the Engine of Application State (HATEOAS)
- Links to replacements
- Always direct readers to current documentation
- Lesson 1710 — Deprecation and Archival Strategies
- Linters
- Check code style, formatting, and common programming mistakes (like unused variables or inconsistent indentation)
- Lesson 98 — Automated Checks and CI IntegrationLesson 391 — Linters and Static Analysis Tools
- List sizes
- Fields returning collections multiply cost (e.
- Lesson 817 — Query Complexity Analysis and Limits
- Live validation
- The interface checks inputs against your schemas before sending requests
- Lesson 844 — Interactive API Documentation
- Liveness probes
- "Is the app alive?
- Lesson 1438 — Container Resource Limits and Health ChecksLesson 1450 — Health Checks: Liveness and Readiness ProbesLesson 1506 — Health Checks and Graceful Shutdown
- Living documentation
- The schema *is* the documentation—always accurate, never stale
- Lesson 841 — Benefits of Schema-First Development
- Living documents
- (updated based on retrospective findings)
- Lesson 1621 — Review Checklists and Standards
- Load balancing
- Multiple consumers can process messages in parallel
- Lesson 1316 — Message Queues for Async CommunicationLesson 1318 — Service Mesh and Communication InfrastructureLesson 1357 — Message Brokers vs Event Buses: Core ConceptsLesson 1388 — What is Load Balancing?Lesson 1442 — What is Kubernetes and Why Use It
- Load problems
- Code works fine in testing but breaks under real traffic
- Lesson 719 — Deployment Risk and the Need for Rollback
- Load tests
- simulate multiple users or high traffic volumes to verify the system behaves correctly under stress.
- Lesson 420 — Performance and Load Tests: Testing Under Stress
- Loads
- the current state (often by replaying events from the event store)
- Lesson 1351 — Command Side Design
- Local emulation
- for initial testing (though production behavior differs)
- Lesson 1525 — Serverless Observability and Debugging
- Location tracking
- Continuous GPS monitoring, even when unnecessary for core features
- Lesson 1909 — Surveillance 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 671 — Lock Files and ReproducibilityLesson 672 — Version Constraints and ConflictsLesson 688 — Pinning 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 916 — Row-Level vs Table-Level Locking
- Lock ordering
- Acquire locks in a consistent order across all transactions.
- Lesson 917 — Deadlock Detection and Prevention
- Lock timeouts
- Set maximum wait times.
- Lesson 917 — Deadlock Detection and PreventionLesson 918 — Lock Timeouts and Wait Strategies
- Locking/Mutex Pattern
- When a cache miss occurs, the first request acquires a lock to rebuild the cache.
- Lesson 983 — Cache Stampede and Thundering Herd
- Log
- the timeout for monitoring and alerting
- Lesson 1094 — The Timeout PatternLesson 1419 — The Raft Consensus Algorithm
- Log aggregation pipeline
- that collects, parses, and enriches log data
- Lesson 1125 — Centralized Logging
- Log shippers
- running on each service/instance (like Fluentd, Filebeat, or native SDKs)
- Lesson 1125 — Centralized Logging
- Log state transitions
- (started, step-completed, compensating, completed, failed) at the saga coordinator level
- Lesson 1372 — Monitoring and Observability for Sagas
- Logging
- Track every access to debug usage patterns
- Lesson 279 — Smart Proxies and Reference CountingLesson 290 — Command Pattern: Encapsulating Requests
- Logging and error reports
- Applications often dump environment variables into logs, crash reports, or debugging output— accidentally exposing secrets.
- Lesson 742 — Secrets 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 232 — When Singleton is Appropriate
- Logging with correlation IDs
- and **observability tools** let you reconstruct events after they happen.
- Lesson 1735 — Debugger Limitations and When to Use Alternative Tools
- Logging/monitoring
- Track how and when an object is accessed
- Lesson 277 — Proxy Pattern: Controlling Access to Objects
- logic
- , not infrastructure.
- Lesson 461 — Test Speed and the Fast Test PatternLesson 728 — Configuration vs. Application Code
- Logical operators chaining
- Long chains of `&&` and `||` that require careful mental parsing
- Lesson 384 — Cognitive Complexity
- Login
- User submits credentials (username + password hash comparison on server)
- Lesson 1007 — Session-Based Authentication Fundamentals
- Logout/Expiration
- Session is destroyed server-side, and the cookie is cleared
- Lesson 1007 — Session-Based Authentication Fundamentals
- Logs
- are discrete event records with detailed context.
- Lesson 1136 — Metrics vs Logs vs TracesLesson 1153 — Tracing Infrastructure and ToolsLesson 1517 — Managed Monitoring and Logging
- Logs to files
- Not every organization has centralized logging infrastructure initially, so streaming logs (Factor XI) gets deferred
- Lesson 754 — Applying 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 336 — Bloaters: Long MethodLesson 346 — Extract 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 338 — Bloaters: Long Parameter List
- Long-lived APIs
- Evolvability over years matters more than initial simplicity
- Lesson 797 — HATEOAS Trade-offs and Maturity Models
- Long-running processes
- hit execution time limits (typically 15 minutes max).
- Lesson 1527 — When Serverless is and Isn't Appropriate
- Long-term strategic importance
- (core business logic, competitive differentiators)
- Lesson 1541 — Evaluating 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 1890 — Trade Secrets vs Patents: Choosing a Strategy
- Longer cold starts
- – more bytes to download and unpack
- Lesson 1524 — Managing Dependencies and Package Size
- Longer deployment times
- Building entire immutable artifacts takes longer than pushing a configuration file change.
- Lesson 1478 — Benefits and Challenges of Immutability
- Longer timescales
- mean you'll forget why you made certain decisions
- Lesson 2 — Programming vs Engineering: Scale and Complexity
- Look for common issues
- Unused imports, console logs, formatting inconsistencies, incomplete error handling
- Lesson 101 — Self-Reviewing Before Submission
- Look for natural seams
- you discovered earlier in your legacy exploration:
- Lesson 1775 — Identifying Strangulation Boundaries
- Look for patterns
- Consistently untested code paths might indicate design problems or insufficient branch coverage strategies
- Lesson 593 — Coverage as a Diagnostic Tool, Not a Goal
- Loop boundaries
- to check iteration counts and conditions
- Lesson 1715 — Adding Strategic Print Statements and Logging
- loose coupling
- the modules are connected, but not tangled together.
- Lesson 167 — Abstraction and Information HidingLesson 186 — Why Software Must Be Designed for ChangeLesson 192 — Plugin Architectures and Extension PointsLesson 299 — Mediator vs Observer: Choosing the Right PatternLesson 304 — The Observer Pattern: Definition and IntentLesson 762 — Hypermedia as the Engine of Application State (HATEOAS)
- Loss of Reproducibility
- You can't recreate your production environment for testing or disaster recovery.
- Lesson 1474 — Configuration Drift and Its Problems
- Lost updates
- One operation overwrites another's work
- Lesson 896 — What Are Transactions and Why They Matter
- Low confidence
- Teams ignore test results, defeating their purpose
- Lesson 410 — The Ice Cream Cone Anti-pattern
- Low coupling
- means your modules depend on each other as little as possible.
- Lesson 182 — The Relationship Between Coupling and Cohesion
- Low latency approach
- Each customer gets their meal prepared immediately, start to finish.
- Lesson 1204 — Latency vs Throughput
- Low-impact areas
- Code that rarely changes or isn't performance-critical
- Lesson 42 — Balancing Debt and Delivery
- Low-impact changes
- If modifications are rare, localized, and easy to test, the cost of abstraction may exceed its benefit.
- Lesson 206 — When to Apply OCP
- Low-level components
- handle implementation details—databases, UI frameworks, file systems—the "how.
- Lesson 189 — Dependency Direction and Stability
- Low-maintenance operations
- matter when team size is limited.
- Lesson 1527 — When Serverless is and Isn't Appropriate
- Lower cognitive load
- You're only thinking about one tiny problem at a time
- Lesson 493 — Taking Small Steps in TDD
- Lower compliance burden
- Fewer regulations apply to data you don't collect
- Lesson 1901 — Data Minimization Principle
- Lower cost
- Fixing a bug caught in 5 minutes costs far less than one found in production
- Lesson 629 — The Feedback Loop: Speed and Confidence
- Lower coupling
- Services only know about events they care about, not other services
- Lesson 1375 — Trade-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 645 — The Practice of Small Commits
- Lower latency
- Reads and writes don't wait for cross-node coordination
- Lesson 922 — Understanding Eventual ConsistencyLesson 1403 — Multi-Leader and Leaderless Replication
- Lower memory usage
- Smaller indexes are easier to cache in memory
- Lesson 876 — Partial and Filtered Indexes
- Lower origin load
- Static assets account for most web traffic; offloading them frees your servers to handle dynamic requests
- Lesson 1386 — Content Delivery Networks and Edge Caching
- Lower thresholds
- Set your minimum log level to `DEBUG` or even `TRACE` to see everything
- Lesson 1128 — Logging 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 1597 — Identifying and Resolving Bottlenecks
- Lower-value targets
- include trivial getters/setters, simple formatting functions, or UI tweaks that change frequently.
- Lesson 406 — Balancing 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 1843 — Knowledge Sharing Mechanisms
M
- Mac
- Install via Homebrew (`brew install git`) or download from git-scm.
- Lesson 44 — Installing and Configuring Git
- Machine images
- (AMIs, VM images): Complete operating system snapshots with your application pre-installed
- Lesson 1475 — Building Immutable Artifacts
- Macro recording
- Combine multiple commands into one composite command
- Lesson 290 — Command Pattern: Encapsulating Requests
- Maintain backward compatibility
- Never remove required fields or change their meaning
- Lesson 1343 — Event Schemas and Contracts
- Maintain consistency
- Use triggers, application logic, or background jobs to keep denormalized data in sync
- Lesson 865 — Strategic DenormalizationLesson 1092 — Error Handling at System Boundaries
- Maintain element stability
- Your core object structure remains unchanged
- Lesson 318 — Visitor Pattern: Operations on Object Structures
- Maintain quality
- Ensure the team's output meets technical and business requirements
- Lesson 1786 — What is a Tech Lead?
- Maintain records
- Document which dependencies you use, their versions, and their licenses.
- Lesson 683 — Dependency License Compliance
- Maintain technical depth strategically
- Stay current in your system's critical areas.
- Lesson 1789 — Balancing Coding and Leadership
- maintainability
- (centralize creation logic).
- Lesson 255 — Evaluating Trade-offs in Creational DesignLesson 335 — What Are Code Smells?Lesson 544 — Fixture Files and Data FormatsLesson 562 — Page Object PatternLesson 663 — Task Dependencies and OrderingLesson 937 — Repository PatternLesson 941 — Query Object PatternLesson 1224 — Why Architecture Matters (+2 more)
- Maintainable
- Changes to one implementation don't ripple through your codebase
- Lesson 172 — Program to an Interface, Not an ImplementationLesson 1273 — The Dependency Rule
- maintenance
- , not initial development.
- Lesson 8 — Engineering for ChangeLesson 9 — What is the Software Development Lifecycle (SDLC)?Lesson 12 — Waterfall Model: Sequential Development
- Maintenance → Requirements
- User complaints show that original requirements missed important needs
- Lesson 17 — Feedback Loops Across the SDLC
- Maintenance Budget
- Every test you write needs future maintenance.
- Lesson 427 — Finding the Testing Sweet Spot
- Maintenance burden
- These tests still need updating when code changes, but provide no value
- Lesson 599 — The Danger of Coverage TheaterLesson 691 — Benefits and Trade-offsLesson 1825 — Simplicity 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 36 — What is Technical Debt
- Maintenance phase
- Security patches and critical bug fixes only
- Lesson 1571 — Long-Term Support (LTS) Fundamentals
- MAJOR
- (the leftmost number): Breaking changes that modify or remove existing behavior.
- Lesson 669 — Semantic Versioning (SemVer)Lesson 675 — Version Bumping StrategiesLesson 1550 — Semantic Versioning (SemVer) Explained
- Major version
- (the first number): Incremented when you make **breaking changes** that require consumers to modify their code.
- Lesson 846 — Semantic Versioning for APIs
- Make
- is the grandfather of build tools, dating back to Unix systems.
- Lesson 660 — Common Build Tools Overview
- Make invisible concerns visible
- Ask probing questions: "What keeps you up at night about this approach?
- Lesson 1813 — Facilitating Technical Discussions
- Make it searchable
- Use clear headings, keywords, and consider adding a search function or table of contents for longer guides.
- Lesson 1688 — FAQ and Troubleshooting Guides
- Make tests deterministic
- Get the same result every time, not random data from real services
- Lesson 466 — Stubs: Providing Canned Responses
- Make the changes
- promptly, then comment that you've addressed the feedback.
- Lesson 96 — Responding to Review Feedback
- Make these trade-offs explicit
- Lesson 1252 — Communicating Architecture to Stakeholders
- Make tokens unpredictable
- A token based on `userId + timestamp` can be guessed.
- Lesson 1005 — Password Reset Flows and Security Tokens
- Make trade-offs transparent
- – Clearly explain *why* you chose Feature A over Feature B (e.
- Lesson 156 — Stakeholder-Driven Prioritization
- Make trade-offs visible
- Show what you gain and lose with each choice (remember: no perfect solutions!
- Lesson 26 — Conflicting Stakeholder Interests
- Makes relationships explicit
- bundled parameters clearly belong together
- Lesson 353 — Introduce Parameter Object
- Making small corrections
- that logically belong with the previous commit
- Lesson 113 — Amending and Fixing Work-in-Progress Commits
- Making strategic introductions
- Connecting them with influential people who can accelerate their growth.
- Lesson 1801 — Sponsorship and Career Development
- Making trade-offs
- choosing between competing needs when resources are limited
- Lesson 21 — The Product Owner and Business Stakeholders
- man-in-the-middle attacks
- where attackers eavesdrop on unencrypted network traffic.
- Lesson 1010 — Cookie Security: HttpOnly, Secure, and SameSiteLesson 1115 — Fallacy 4: The Network is Secure
- Manage risk
- by catching problems early (during planning or design, not after launch)
- Lesson 9 — What is the Software Development Lifecycle (SDLC)?
- Managed database
- AWS RDS handles backups, patches, replication, and scaling
- Lesson 1511 — What 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 1511 — What Are Managed ServicesLesson 1539 — What is Vendor Lock-in
- Management
- – Subscribe to and promote an ethical approach to software development and maintenance
- Lesson 1894 — The IEEE-CS/ACM Software Engineering Code of Ethics
- Manages container lifecycle
- (create, run, pause, unpause, stop, delete)
- Lesson 1426 — The Container Runtime
- Managing contract changes
- means deciding how to signal and implement changes.
- Lesson 552 — Contract Versioning and Evolution
- Manual instrumentation
- means you explicitly add code to create spans around important business logic or custom operations.
- Lesson 1149 — Instrumenting Code for Tracing
- Many-to-Many
- Objects can hold collections of references (`student.
- Lesson 931 — Association Mismatch: References vs. Foreign Keys
- Map compatibility
- Cross-reference licenses using compatibility matrices
- Lesson 1877 — Verifying License Compatibility in Practice
- Mapping trust boundaries
- Where does untrusted input enter your system?
- Lesson 1078 — What is Threat Modeling
- Mark
- them explicitly with tags like `@Flaky` or move them to a separate test suite
- Lesson 577 — Quarantining and Flaky Test Management
- Mark conversations as resolved
- (if your platform supports it) after addressing them, keeping the review organized.
- Lesson 96 — Responding to Review Feedback
- Mark sensitive values
- as secrets (encrypted, hidden from logs)
- Lesson 642 — Environment Variables and Secrets
- Mark the bad commit
- `git bisect bad` (usually HEAD, where the bug exists)
- Lesson 119 — Finding Bugs with Git Bisect
- Market reach
- Teams that reflect user diversity build products that serve broader audiences
- Lesson 1848 — The 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 160 — Why Requirements ChangeLesson 1808 — Evolving Vision Over Time
- Market timing
- Can your architecture support the speed-to-market the business requires, or will perfection arrive too late?
- Lesson 1805 — Aligning Vision with Business Goals
- Marketing preferences
- Until user withdrawal or account deletion
- Lesson 1903 — Data 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 1546 — Coordinating 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 747 — Secrets in CI/CD Pipelines
- Massive payload sizes
- consume excessive bandwidth and slow down network transfers
- Lesson 783 — Why Pagination Matters
- Materialized Views
- are precomputed query results stored as physical tables.
- Lesson 866 — Denormalization Patterns
- Mathematical operations
- Code involving calculations, geometry, or statistics benefits enormously.
- Lesson 612 — When Property-Based Testing Shines
- MC/DC
- goes further by requiring that each condition independently affects the decision's outcome.
- Lesson 601 — Condition and Modified Condition Coverage
- Meaningful
- Explain *what* and *why*, not *how*
- Lesson 48 — Committing Changes with 'git commit'Lesson 833 — Providing Meaningful ExamplesLesson 1659 — Identifying Milestones and Deliverables
- Measurable impact
- Quantify what users experienced.
- Lesson 1183 — Writing Effective Incident Narratives
- Measure performance impact
- on queries
- Lesson 895 — Testing and ReversibilityLesson 910 — Choosing the Right Isolation Level
- Measure regularly
- Track your metrics weekly or bi-weekly
- Lesson 1599 — Continuous Improvement with Kanban
- Measure time-to-resolution
- How long does it take to resolve issues after an alert?
- Lesson 1162 — Alert Evaluation: Regular Review and Refinement
- Mediator
- acts like a **traffic controller** at a busy intersection.
- Lesson 299 — Mediator vs Observer: Choosing the Right Pattern
- Mediator pattern
- introduces a central coordinator object.
- Lesson 298 — The Mediator Pattern: Centralizing Communication
- Mediators (Message Passing)
- A central coordinator receives requests from modules and routes them appropriately.
- Lesson 1292 — Inter-Module Communication Patterns
- Meeting dynamics
- Lesson 1642 — Indicators of Psychological Safety
- Meetings and discussions
- Aligning on goals, solving problems together, and making decisions as a group
- Lesson 3 — The Human Element: Teams and Communication
- Memento
- pattern solves this by introducing a "snapshot" object that stores another object's state.
- Lesson 301 — The Memento Pattern: Capturing Object StateLesson 302 — Implementing Undo with Memento and Command
- Memento pattern
- captures object state, combining them creates robust undo functionality that's both flexible and safe.
- Lesson 302 — Implementing Undo with Memento and Command
- Memory
- for speed (cached data takes up space)
- Lesson 958 — What is Caching and Why It MattersLesson 1002 — Password Hashing Algorithms: bcrypt, scrypt, and Argon2Lesson 1007 — Session-Based Authentication Fundamentals
- Memory bottlenecks
- manifest as excessive garbage collection, swapping, or out-of-memory errors.
- Lesson 1380 — Identifying 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 624 — Detecting Security Vulnerabilities
- Memory limits
- Cap the maximum RAM a container can use (e.
- Lesson 1438 — Container Resource Limits and Health Checks
- Memory pressure
- spikes on both server (generating the response) and client (parsing it)
- Lesson 783 — Why Pagination Matters
- Memory profilers
- and **heap analyzers** track allocation patterns and object lifetimes.
- Lesson 1735 — Debugger Limitations and When to Use Alternative Tools
- Mentor and multiply
- by raising the technical bar across many engineers
- Lesson 1818 — What is a Staff Engineer?
- Mentorship at Scale
- Junior developers learn from seeing senior patterns.
- Lesson 1616 — The Purpose and Value of Code Review
- Mentorship obligations
- Experienced engineers have a duty to help others grow, sharing knowledge rather than hoarding it
- Lesson 1898 — Collegiality and Fair Treatment
- Merge
- when contexts have high coupling, shared team ownership, and aligned evolution patterns.
- Lesson 1287 — Evolving Bounded Contexts
- Merge conflicts
- occur when different paths modified the same content differently
- Lesson 65 — Understanding Git History as a DAGLesson 337 — Bloaters: Large Class and God Object
- Merge or Postpone
- Safe updates merge automatically or manually; problematic ones get investigated
- Lesson 685 — Automating Dependency Updates
- Merge tests when
- Lesson 503 — When to Delete or Merge Tests
- Merge to main
- Once approved, merge the branch into main
- Lesson 85 — GitHub Flow: Simplified Branch-and-Merge
- message
- describing what went wrong
- Lesson 801 — RPC Error Handling and Status CodesLesson 819 — Error Handling in GraphQL Responses
- Message formats
- If modules communicate via events or messages, are they using the same structure and field names?
- Lesson 525 — Testing Cross-Module Communication
- message queue
- acts as a buffer between producers and consumers:
- Lesson 1359 — Message Queues and Point-to-Point MessagingLesson 1385 — Asynchronous Processing and Message Queues
- Message queues
- are the infrastructure that makes this possible.
- Lesson 1316 — Message Queues for Async CommunicationLesson 1337 — Trade-offs: Complexity vs. FlexibilityLesson 1513 — Managed Message Queues and Event Streams
- Messaging/Events
- (queues, Kafka) decouple services temporally and enable asynchronous workflows.
- Lesson 1322 — Communication Protocol Trade-offs
- Metadata
- Lesson 786 — Pagination Metadata and LinksLesson 1343 — Event Schemas and ContractsLesson 1348 — Event Store DesignLesson 1453 — Declarative Configuration with YAMLLesson 1903 — Data Retention and Deletion
- Metadata Manipulation
- Changing `userId=42` in a POST request body to access another user's account.
- Lesson 1042 — A01: Broken Access Control
- Metrics
- are numerical measurements aggregated over time.
- Lesson 1136 — Metrics vs Logs vs TracesLesson 1137 — The Four Golden SignalsLesson 1153 — Tracing Infrastructure and ToolsLesson 1319 — Circuit Breakers in Distributed SystemsLesson 1517 — Managed Monitoring and Logging
- Microservices architectures
- where multiple services need to verify identity without constant database lookups
- Lesson 1016 — Sessions vs Tokens: Choosing the Right Approach
- Microservices over Monoliths
- Applications are decomposed into small, independently deployable services rather than single large codebases.
- Lesson 1502 — What 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 553 — When to Use Contract Tests
- Middle (Important)
- Common use cases, parameters, examples
- Lesson 1690 — The Inverted Pyramid Structure
- Middle: Integration Tests
- Fewer tests that check how multiple components work together (database connections, API calls, module interactions).
- Lesson 407 — The Testing Pyramid Concept
- Middleware/Interceptors
- In web applications, handle concerns like authentication and logging in a pipeline before requests reach specific layers.
- Lesson 1260 — Cross-Cutting Concerns in Layers
- Migrate
- Backfill or sync data as needed
- Lesson 698 — Database Changes in CDLesson 717 — Database Schema DeploymentLesson 893 — Zero- Downtime Schema Changes
- Migration
- Gradually replacing an old system with a new one
- Lesson 1270 — Multiple Adapters for One Port
- Migration Guide
- Explain *exactly* what changed and how to upgrade.
- Lesson 849 — Deprecation Policies and Timelines
- Migration or rollout plan
- How you'll safely implement the change
- Lesson 1686 — Design Documents and RFCs
- Migration script quality
- Rollback scripts are rarely tested as thoroughly as forward migrations.
- Lesson 889 — Forward-Only Migration Philosophy
- Migrations
- – Scripts that define your database schema (tables, columns, constraints).
- Lesson 543 — Database 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 1755 — The Mikado Method
- Milestones
- are significant points in your project timeline that mark the completion of major phases or achievements.
- Lesson 1659 — Identifying Milestones and Deliverables
- Minimal abstractions
- no higher-level patterns or helper functions
- Lesson 856 — Auto-Generated vs Hand-Written SDKs
- Minimal change
- Fix *only* the critical issue—no scope creep
- Lesson 1568 — What are Hotfixes and When to Use Them
- Minimal cross-team coordination
- Teams communicate through well-defined service contracts, not constant meetings
- Lesson 1333 — Team 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 438 — Test Data: Realistic vs. Minimal
- Minimal divergence
- Development environments should mirror production
- Lesson 748 — Introduction to the Twelve-Factor App Methodology
- Minimal documentation upfront
- Deploy first, complete paperwork after
- Lesson 1549 — Emergency Release Procedures
- Minimal input
- The most basic valid input (empty collection, zero, single item)
- Lesson 497 — Starting with the Simplest Test
- Minimal, targeted changes
- feature flags to disable problematic paths, not exploratory debugging
- Lesson 1736 — Production vs Development Debugging Constraints
- minimize attack surface
- and **security by design**.
- Lesson 1046 — A05: Security MisconfigurationLesson 1051 — A10: Server-Side Request Forgery (SSRF)
- Minimize dependencies
- every package is risk.
- Lesson 1885 — Open 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 538 — Performance Considerations with Real Dependencies
- Minimize the input
- to the smallest case that still triggers the problem
- Lesson 626 — Triaging and Reproducing Fuzzer Findings
- Minimum 8-12 characters
- , but encourage longer passphrases without arbitrary maximum limits.
- Lesson 1004 — Password Strength Requirements and Policies
- MINOR
- (the middle number): New features added in a backward-compatible way.
- Lesson 669 — Semantic Versioning (SemVer)Lesson 675 — Version Bumping StrategiesLesson 1550 — Semantic Versioning (SemVer) Explained
- Minor version
- (the middle number): Incremented when you add **new features** in a backward-compatible manner.
- Lesson 846 — Semantic Versioning for APIs
- Misleading names
- The name suggests one thing but does another
- Lesson 348 — Rename Method and Rename Variable
- Missed branches
- Look for conditional statements (`if`, `switch`, ternary operators) marked yellow.
- Lesson 594 — Reading Coverage Reports
- Missed deadlines compound
- when teams spend their "saved" time fighting fires instead of building features.
- Lesson 426 — The Cost of Not Testing
- Missing abstraction
- The parameters often represent data that should logically be grouped
- Lesson 338 — Bloaters: 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 1043 — A02: 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 1042 — A01: Broken Access Control
- Missing indexes
- Sequential scans on large tables in WHERE or JOIN clauses
- Lesson 878 — Using 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 1048 — A07: Identification and Authentication Failures
- Missing rate limiting
- Your password reset feature works perfectly, but there's no limit on attempts.
- Lesson 1045 — A04: Insecure DesignLesson 1048 — A07: Identification and Authentication Failures
- Mistake ownership
- Openly discussing failures and lessons learned
- Lesson 1828 — Transparency and Open Communication
- Mistakes have smaller impact
- A developer with read-only database access can't accidentally `DROP TABLE` in production
- Lesson 1033 — Principle of Least Privilege
- Mistakes to avoid
- Where others failed or received negative feedback
- Lesson 140 — Domain Research and Competitive Analysis
- Mitigation
- Register exact redirect URIs with your authorization server—no wildcards.
- Lesson 1024 — Common OAuth2/OIDC Vulnerabilities and MitigationsLesson 1165 — Incident Response Workflow
- Mix question types
- Use multiple-choice for easy analysis ("How often do you use feature X?
- Lesson 139 — Questionnaires and Surveys
- Mixed concerns
- A service handling both payment processing and inventory management violates Single Responsibility.
- Lesson 1312 — Getting Service Granularity Right
- Mixed content
- occurs when an HTTPS page loads resources (images, scripts, stylesheets) over insecure HTTP.
- Lesson 1077 — Certificate Management and Mixed Content
- Mobile applications and SPAs
- where stateless authentication simplifies scaling
- Lesson 1016 — Sessions vs Tokens: Choosing the Right Approach
- Mock servers
- can simulate your API before you've finished building it
- Lesson 837 — Introduction to OpenAPI Specification
- Mock the clock
- Use deterministic time sources or freeze time in tests
- Lesson 1722 — Controlling Environmental Variables
- Mocked dependencies
- use test doubles (stubs, fakes, or mocks) to simulate external systems.
- Lesson 530 — Real 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 471 — Test 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 480 — Avoiding Over-Mocking
- Mocks
- enforce expectations.
- Lesson 470 — Distinguishing Between Mock TypesLesson 472 — When to Use Each Type of Test DoubleLesson 476 — The Test Double PyramidLesson 477 — Interaction-Based vs State-Based TestingLesson 483 — Behavior Verification: Testing Interactions
- Model cards
- describe intended use, training data, performance across groups, and known limitations
- Lesson 1917 — Explainability and Accountability
- Model interpretability techniques
- like feature importance analysis, decision trees, or SHAP values reveal which inputs drive predictions.
- Lesson 1917 — Explainability and Accountability
- Moderate approach
- Auto-update PATCH and MINOR within your version range (e.
- Lesson 677 — Dependency Updates and Semantic Versioning
- Moderately stable data
- (user profiles, product details): Medium TTL (minutes to hours)
- Lesson 962 — Time-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 1242 — Maintainability and Modifiability
- Modified Condition/Decision Coverage (MC/DC)
- come in.
- Lesson 601 — Condition and Modified Condition Coverage
- Modify
- without breaking things
- Lesson 382 — What is Code Complexity?Lesson 919 — Optimistic Locking with Versioning
- Modularity
- Are components loosely coupled, so changes to one don't ripple everywhere?
- Lesson 1242 — Maintainability and ModifiabilityLesson 1258 — Dependency Direction in Layers
- Module-to-module communication
- Does your user service correctly call your email service?
- Lesson 416 — Integration Tests: Testing Module Interactions
- Momentum stalls
- Completing nothing for days feels demoralizing
- Lesson 1662 — Task 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 903 — ACID in Different Database Systems
- Monitor
- Track expiration dates (certificates typically last 90 days to 1 year)
- Lesson 1077 — Certificate Management and Mixed ContentLesson 1777 — Migrating Functionality Incrementally
- Monitor Access
- Track which cache entries are being hit frequently ("hot" data)
- Lesson 971 — Refresh-Ahead Caching
- Monitor and measure
- Track payload sizes and bandwidth usage to identify optimization opportunities before they become bottlenecks.
- Lesson 1114 — Fallacy 3: Bandwidth is Infinite
- Monitor carefully
- Track whether the performance gain persists as data grows
- Lesson 865 — Strategic Denormalization
- Monitor consumer usage
- to know when it's safe to remove the old version
- Lesson 552 — Contract Versioning and Evolution
- Monitor evaluation patterns
- if a flag has returned the same value for all users for weeks, it's likely stale
- Lesson 1566 — Flag Debt and Cleanup Strategies
- Monitor for deprecation warnings
- before major versions drop
- Lesson 682 — Dealing with Breaking Changes
- Monitor quotas
- Track how many API calls your test suite makes
- Lesson 533 — Testing with Real External APIs
- Monitor usage
- Track which clients still use the deprecated version.
- Lesson 853 — API Sunset and End-of-Life
- Monitoring
- Track metrics per version (error rates, latency, usage) to understand adoption and quality
- Lesson 851 — Managing Multiple API VersionsLesson 1115 — Fallacy 4: The Network is Secure
- Monitoring agents
- (gathering metrics from node resources)
- Lesson 1461 — DaemonSets and Node-Level Workloads
- Monitoring intensification
- – Watch dashboards actively during and after deployment
- Lesson 1569 — The Hotfix Process and Risk Management
- Monitoring Runbooks
- explain what metrics to watch, how to interpret dashboards, and when to escalate.
- Lesson 1685 — Runbooks and Operational Documentation
- Monitoring standards
- Logging formats, metrics naming, tracing instrumentation
- Lesson 1251 — Architecture Governance and Standards
- Monolithic Applications
- Within a single codebase, compile-time type checking and standard integration tests are usually sufficient.
- Lesson 553 — When 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 925 — Read-Your-Writes and Monotonic Reads
- MoSCoW Method
- is a prioritization technique that sorts requirements into four categories based on necessity.
- Lesson 153 — MoSCoW Method
- Most brittle
- UI changes, network issues, or timing problems can cause failures unrelated to actual bugs.
- Lesson 417 — End-to-End Tests: Testing Complete User Flows
- Most OLTP applications
- use it as the sweet spot between consistency and concurrency
- Lesson 906 — Read Committed Isolation
- Move comments with code
- When relocating a method, bring relevant documentation along
- Lesson 381 — Maintaining Comments During Refactoring
- Move Field
- are refactorings that relocate these misplaced elements to where they naturally fit.
- Lesson 349 — Move 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 185 — Refactoring to Increase CohesionLesson 349 — Move Method and Move Field
- Multi-Channel Communication
- Document it in API responses (special headers like `Deprecation: true`), email announcements, changelog updates, and developer portals.
- Lesson 849 — Deprecation Policies and Timelines
- Multi-environment complexity
- Different topologies in dev, staging, and production
- Lesson 1323 — Service Discovery Fundamentals
- Multi-leader replication
- allows multiple nodes to accept writes concurrently.
- Lesson 1403 — Multi-Leader and Leaderless Replication
- Multi-team lead
- You're primarily coordinating technical strategy across teams.
- Lesson 1793 — The Tech Lead's Scope
- Multi-tenancy
- Different teams can work in the same cluster without stepping on each other's toes.
- Lesson 1446 — Namespaces for Resource Isolation
- Multi-tenant isolation
- (SaaS platforms) forces database partitioning and namespace separation decisions
- Lesson 1230 — Functional Requirements as Drivers
- Multi-Version Concurrency Control (MVCC)
- makes snapshot isolation possible by keeping multiple versions of each row.
- Lesson 909 — Snapshot Isolation Explained
- Multiple channels
- Start with push notifications, escalate to phone calls
- Lesson 1161 — Alert Routing and Escalation Policies
- Multiple concerns
- It handles database access, business logic, UI formatting, and validation all at once
- Lesson 337 — Bloaters: Large Class and God Object
- Multiple databases
- requiring eventual consistency strategies
- Lesson 1337 — Trade-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 1271 — When to Use Hexagonal Architecture
- Multiple developers
- need to understand and modify the same code
- Lesson 2 — Programming vs Engineering: Scale and Complexity
- Multiple stakeholders
- with different priorities and response times
- Lesson 1117 — Fallacy 6-8: Administration, Cost, and Homogeneity
- Multiple tables
- More joins, potential N+1 queries, but cleaner separation
- Lesson 933 — Data Type and Granularity Mismatches
- Multiple teams competing
- If several teams need to modify the same service frequently, it's too large.
- Lesson 1312 — Getting 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 107 — Knowing 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 1789 — Balancing Coding and Leadership
- Mutable infrastructure
- follows the traditional approach: you provision servers once, then continuously update them in- place.
- Lesson 1473 — Immutable vs Mutable Infrastructure
- Mutation testing
- excels when you need high confidence in critical business logic or security-sensitive code.
- Lesson 605 — Choosing the Right Coverage Metric
- Mutation-based
- Takes valid inputs and randomly mutates them (flip bits, change bytes, inject special characters)
- Lesson 621 — Introduction to Fuzzing
- Mutations
- are how you *write* data—creating new records, updating existing ones, or deleting them.
- Lesson 808 — Mutations: 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 808 — Mutations: Writing Data in GraphQL
- Mutual TLS encryption
- for secure service-to-service communication
- Lesson 1318 — Service 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 371 — Avoiding Encodings and Hungarian Notation
- Name mutations with verbs
- `createUser`, `updatePost`, `deleteComment`
- Lesson 808 — Mutations: Writing Data in GraphQL
- Named volumes
- Managed by the container runtime, independent of host paths
- Lesson 1429 — Container Storage and Volumes
- Namespace prefixes
- Avoid collisions across different data types.
- Lesson 961 — Cache 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 443 — Test Class and Suite OrganizationLesson 858 — API Style Guides
- Narrow integration tests
- focus on small clusters of collaborating components—typically two or three—while using test doubles for everything else.
- Lesson 526 — Narrow Integration Tests
- Narrow scope
- (a few lines): Short names like `i`, `x`, or `temp` are fine
- Lesson 370 — Variable 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 1724 — Binary Search for Bug Localization
- National Vulnerability Database
- or **GitHub Advisory Database**).
- Lesson 679 — Dependency Vulnerability Scanning
- Native vs Portable Code
- Lesson 1524 — Managing Dependencies and Package Size
- Natural load leveling
- If tasks spike, they queue up rather than overwhelming your system
- Lesson 1385 — Asynchronous Processing and Message Queues
- Navigate complex stakeholder landscapes
- to align technical and business goals
- Lesson 1818 — What is a Staff Engineer?
- Navigate the call stack
- See exactly which functions were active when the crash occurred
- Lesson 1734 — Post-Mortem Debugging with Core Dumps and Crash Reports
- Navigation becomes difficult
- Tracing a method call through Adapter → Proxy → Facade → actual implementation frustrates debugging.
- Lesson 285 — Combining Multiple Structural Patterns
- navigators
- , thinking strategically, suggesting approaches, spotting issues, and guiding the work.
- Lesson 1628 — What is Mob Programming?Lesson 1629 — Running Effective Mob Sessions
- ND
- (NoDerivatives): Modified versions cannot be distributed
- Lesson 1869 — Creative Commons and Non-Code Licenses
- Near-misses with potential
- "We got lucky" situations where disaster was narrowly averted
- Lesson 1181 — When to Conduct a Postmortem
- Nearest Wins
- Prefer the version specified closest to your project (your direct dependencies trump transitive ones)
- Lesson 672 — Version Constraints and Conflicts
- Necessity and Proportionality
- Before sharing, ask: "Is this sharing essential to deliver the service users expect?
- Lesson 1907 — Third-Party Data Sharing
- Negotiation overhead
- Changing an SLA requires renegotiating customer contracts—a slow, expensive process.
- Lesson 1177 — Service Level Agreements (SLAs): Legal Commitments
- Negotiation with Data
- Lesson 1677 — Handling Conflicting Stakeholder Priorities
- Nested control structures
- Each level of nesting adds mental context you must hold
- Lesson 384 — Cognitive Complexity
- Nesting related data
- Lesson 779 — Designing Resource Representations
- Network
- Usually free for inbound traffic (data coming in), but charged for outbound traffic (data leaving the cloud) and cross-region transfers.
- Lesson 1535 — Understanding Cloud Cost Models
- Network bottlenecks
- appear as bandwidth saturation, high latency, or packet loss.
- Lesson 1380 — Identifying Scalability Bottlenecks
- Network calls
- (APIs, web services, remote resources)
- Lesson 461 — Test Speed and the Fast Test PatternLesson 1198 — I/O and Network Profiling
- Network conditions
- Are clients on slow connections?
- Lesson 782 — Resource Granularity Trade-offsLesson 1722 — Controlling Environmental Variables
- Network namespace
- Separate network interfaces, IP addresses, and routing tables
- Lesson 1427 — Namespaces and Control GroupsLesson 1444 — Pods: The Atomic Unit of Deployment
- Network overhead increases
- More table accesses mean more disk I/O or cache lookups
- Lesson 864 — The Cost of Over-Normalization
- Network requests
- APIs, external services, anything across a network
- Lesson 441 — Fast Feedback: Keeping Tests Quick
- Network round-trips
- Geographic latency multiplied by sequential requests
- Lesson 1198 — I/O and Network Profiling
- Network unreliability
- Messages can be delayed, dropped, or arrive out of order
- Lesson 1414 — The Distributed Consensus Problem
- Network-bound
- performance issues arise when network latency or bandwidth becomes the constraint.
- Lesson 1193 — Common Performance Bottlenecks
- Never
- hard-code these in source code where they'd be visible in version control.
- Lesson 726 — What Belongs in ConfigurationLesson 747 — Secrets in CI/CD PipelinesLesson 1257 — Layer Responsibilities and Boundaries
- Never drop columns immediately
- after a deploy
- Lesson 721 — Database Rollbacks and Schema Compatibility
- New developers
- can't set up the project — they don't know what to install
- Lesson 667 — Declaring Dependencies Explicitly
- new features
- in a backward-compatible manner.
- Lesson 846 — Semantic Versioning for APIsLesson 1708 — Documentation Review in Code Review
- New files you create
- → can be proprietary, even in the same binary
- Lesson 1868 — The Mozilla Public License
- New views
- Create new projections of old data without migrating databases
- Lesson 1349 — Rebuilding State from Events
- Next read
- Cache miss occurs, fresh data loads from database and repopulates cache
- Lesson 979 — Cache-Aside Invalidation Pattern
- Next/Previous navigation
- Guide sequential reading when order matters
- Lesson 1694 — Documentation Structure and Navigation
- NFS or SMB protocols
- that multiple servers can mount simultaneously.
- Lesson 1514 — Managed Storage Services
- Nightly builds
- Run the full E2E suite when time constraints are relaxed
- Lesson 561 — E2E Test Execution Strategy
- Nightly fuzzing
- Longer fuzzing campaigns (hours) run overnight, exploring deeper edge cases.
- Lesson 625 — Integrating Fuzzing into CI/CD
- No arbitrary complexity requirements
- (don't force special characters)
- Lesson 993 — Password Policies and Requirements
- No built-in salt
- SHA-256 alone doesn't force unique hashes for identical passwords across different users
- Lesson 1000 — Cryptographic 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 1045 — A04: Insecure Design
- No global state
- Dependencies are explicit parameters
- Lesson 231 — Alternatives to Singleton: Dependency Injection
- No independent value
- A service that only exists to serve one other service is likely too small.
- Lesson 1312 — Getting Service Granularity Right
- No mandatory periodic resets
- (changing passwords quarterly creates weak patterns)
- Lesson 993 — Password Policies and Requirements
- No manual ordering
- You don't need to remember to run ten commands in sequence.
- Lesson 663 — Task Dependencies and Ordering
- No pollution
- Containers are destroyed; no leftover data
- Lesson 545 — Test Containers and Dockerized Fixtures
- No server management
- No OS patches, no capacity planning, no infrastructure configuration
- Lesson 1519 — What is Serverless and Function as a Service
- No shared domain objects
- across contexts—each service has its own representation
- Lesson 1306 — Domain-Driven Design Bounded Contexts
- No shared mutable state
- exists between tests (covered in lesson 458)
- Lesson 462 — Parallelizing Test Execution
- No true horizontal scalability
- Your system's capacity becomes limited by individual server capacity, not your total server pool.
- Lesson 1392 — Session Affinity and Its Problems
- No verification mechanism
- Tests catch broken code immediately.
- Lesson 1705 — Why Documentation Becomes Outdated
- No waiting
- Developers don't wait days for designers to "throw designs over the wall"
- Lesson 24 — Cross-Functional Teams
- Node failures
- Servers can crash at any moment, even mid-operation
- Lesson 1414 — The Distributed Consensus Problem
- Non-atomic
- commits mix multiple changes: "Fix login bug AND update README AND refactor database helper.
- Lesson 108 — Atomic Commits: One Logical Change
- Non-breaking changes
- (safe):
- Lesson 845 — Maintaining OpenAPI Specs Over TimeLesson 847 — Breaking vs Non-Breaking Changes
- Non-compete agreements
- restrict where you can work after leaving.
- Lesson 1891 — Employee Agreements and Intellectual Property
- Non-critical queries
- like fuzzy search results or recommendations
- Lesson 905 — Read Uncommitted Isolation
- non-determinism
- variability that makes each build slightly different.
- Lesson 687 — Sources of Non-DeterminismLesson 688 — Pinning Dependencies
- Non-discrimination
- Can't penalize users for exercising their rights
- Lesson 1908 — Privacy 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 124 — Functional vs Non-Functional RequirementsLesson 1238 — What 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 124 — Functional vs Non-Functional Requirements
- Non-obvious algorithms
- "Using Floyd's cycle detection to find duplicates in O(1) space"
- Lesson 374 — When to Write Comments
- Non-obvious constraints
- "API returns null on Sundays—legacy behavior we can't change"
- Lesson 375 — Self-Documenting Code vs Comments
- Non-obvious decisions
- Explaining why you chose approach A over seemingly simpler approach B
- Lesson 1684 — Code 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 380 — Inline Documentation for Complex Logic
- Non-repeatable reads
- Reading the same data twice in one transaction, getting different values because another transaction modified it
- Lesson 899 — The Isolation PropertyLesson 904 — What Isolation Levels Protect AgainstLesson 906 — Read Committed Isolation
- Normalize platform differences
- Fonts, anti-aliasing, and rendering engines vary across operating systems and browsers.
- Lesson 581 — Managing Visual Test Stability
- Normalize taking time off
- Leaders should visibly take their vacation and talk about their plans.
- Lesson 1860 — Vacation and Time Off
- not
- reach through one object to access another object's internals.
- Lesson 174 — The Principle of Least Knowledge (Law of Demeter)Lesson 1603 — Daily Standup: Goals and FormatLesson 1865 — The Apache License 2.0Lesson 1921 — Whistleblowing and Legal Protections
- Not true rollbacks
- Compensating transactions don't rewind state; they create new, offsetting actions.
- Lesson 1367 — Compensating Transactions
- Not truly RESTful
- Purists argue that versions shouldn't be part of resource identifiers
- Lesson 791 — URI Versioning (Path-Based)
- Note each breaking dependency
- as a prerequisite node
- Lesson 1767 — The Mikado Method for Large Refactorings
- Note each function/module
- the execution passes through
- Lesson 1752 — Reading and Understanding Legacy Code
- Notification Context
- subscribes, sends confirmation email
- Lesson 1285 — Domain Events for Context Integration
- Notification Service
- also listens for "OrderPlaced" and sends confirmation email
- Lesson 1374 — Choreography: Decentralized Collaboration
- NotificationPreferencesService
- manages email/SMS settings
- Lesson 1305 — The Single Responsibility Principle at Service Level
- Notifications
- Where to report success or failure
- Lesson 638 — Build Configuration FilesLesson 707 — Pipeline Visibility and Monitoring
- Novel or surprising failures
- New failure modes are learning opportunities, regardless of customer impact
- Lesson 1181 — When to Conduct a Postmortem
O
- O(2ⁿ)
- – Exponential: Recursive fibonacci (naive)
- Lesson 1192 — Big-O Notation and Algorithmic Complexity
- O(n log n)
- – Linearithmic: Efficient sorting (merge sort)
- Lesson 1192 — Big-O Notation and Algorithmic Complexity
- O(n²)
- because the quadratic term dominates at scale.
- Lesson 1192 — Big-O Notation and Algorithmic Complexity
- Object Adapter
- – uses composition to wrap and delegate to the adaptee
- Lesson 257 — Class vs Object Adapters
- Object Creation
- Proxies and Adapters create wrapper objects.
- Lesson 282 — Performance Overhead of Structural Patterns
- Object creation is complex
- – Multiple setup steps, configuration, or conditional logic make instantiation messy
- Lesson 242 — Factory Pattern Trade-offs
- 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 451 — Object Mother Pattern
- Object Pool
- is related but distinct: instead of cloning prototypes, you *recycle* actual object instances.
- Lesson 249 — Prototype Registry and Object PoolsLesson 276 — Flyweight Factories and Object Pools
- Object properties
- Did a user's balance decrease by the right amount?
- Lesson 482 — State Verification: Testing Outcomes
- Object seams
- Points where you can substitute one object for another (dependency injection points, even if informal).
- Lesson 1753 — Finding Seams in Legacy Code
- Object storage
- Store larger session artifacts in S3 or similar services
- Lesson 1504 — Stateless Application Design
- Object types
- represent complex entities with multiple fields.
- Lesson 806 — GraphQL Schema and Type System
- Obscure integration issues
- – problems in how components work together go undetected
- Lesson 473 — The 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 322 — When Patterns Become Obstacles
- Observability
- You know exactly which queries are being used in production
- Lesson 821 — Persisted Queries and Query WhitelistingLesson 1244 — Testability and ObservabilityLesson 1318 — Service Mesh and Communication Infrastructure
- Observability built beforehand
- structured logs, metrics, distributed tracing
- Lesson 1736 — Production vs Development Debugging Constraints
- Observability First
- Built-in logging, metrics, and tracing are essential, not afterthoughts.
- Lesson 1502 — What is Cloud-Native Architecture
- Observable
- Focus on *what* the user experiences, not internal implementation
- Lesson 148 — Writing Clear Acceptance Criteria
- Observable behavior
- Did the UI element become visible?
- Lesson 482 — State Verification: Testing Outcomes
- Observation
- uncovers the gap between what people *say* they need and what they *actually* do.
- Lesson 1674 — Understanding 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 136 — Observation and Ethnographic Methods
- Observer
- works like a **newsletter subscription**.
- Lesson 299 — Mediator vs Observer: Choosing the Right Pattern
- Obtain
- Request a certificate from a CA (like Let's Encrypt, DigiCert)
- Lesson 1077 — Certificate Management and Mixed Content
- Obtain the crash artifact
- Core dump file, minidump, or detailed crash report
- Lesson 1734 — Post-Mortem Debugging with Core Dumps and Crash Reports
- Obvious expected behavior
- No conditional logic or special cases
- Lesson 497 — Starting with the Simplest Test
- Octopus
- is used when merging *three or more* branches simultaneously.
- Lesson 64 — Merge Strategies and Options
- Off-peak batch warming
- Schedule jobs during low-traffic periods to refresh caches with updated data from your database.
- Lesson 989 — Cache Warming and Preloading
- Office Actions
- The examiner typically rejects initial claims, citing prior art or other issues.
- Lesson 1887 — The Patent Process and Prior Art
- Office Hours
- let subject matter experts set aside regular time for questions, creating predictable access to specialized knowledge.
- Lesson 1843 — Knowledge Sharing Mechanisms
- Offline capability
- (mobile apps) requires data synchronization architectures and conflict resolution strategies
- Lesson 1230 — Functional Requirements as Drivers
- On every commit
- Run your critical path tests only (the handful of tests covering your most important user journeys)
- Lesson 561 — E2E Test Execution Strategy
- On hit
- Return cached data immediately
- Lesson 966 — Cache-Aside (Lazy Loading)Lesson 967 — Read-Through Caching
- On-call engineers escalated
- If the incident required multiple people or reached senior engineers, it was serious enough
- Lesson 1181 — When to Conduct a Postmortem
- Onboarding
- new team members to accelerate learning and build relationships
- Lesson 1630 — When to Use Pairing vs Mobbing
- One line per commit
- Lesson 66 — Viewing and Navigating History with git log
- one reason to change
- meaning it should have one primary responsibility or job.
- Lesson 194 — What is the Single Responsibility PrincipleLesson 195 — Identifying Multiple ResponsibilitiesLesson 1305 — The Single Responsibility Principle at Service Level
- One Task
- Each function should do exactly what its name says, nothing more.
- Lesson 372 — Function Structure and Length
- One-line summaries
- `git log --oneline` gives a compact view with shortened hashes
- Lesson 117 — Reading Git Log: Understanding Commit History
- One-to-many relationships
- When one subject notifies many observers
- Lesson 299 — Mediator vs Observer: Choosing the Right Pattern
- One-way sync
- works when your new system is read-only initially.
- Lesson 1778 — Data Migration and Synchronization
- Open → Half-Open
- Triggered automatically after timeout expires
- Lesson 1097 — Circuit Breaker States and Transitions
- Open a pull request
- When ready (or even early for feedback), create a PR to propose merging into main
- Lesson 85 — GitHub Flow: Simplified Branch-and-Merge
- open for extension
- but **closed for modification**.
- Lesson 201 — Understanding the Open/Closed PrincipleLesson 205 — The Strategy Pattern and OCP
- Open-ended questions
- get stakeholders talking: "How do you currently handle customer orders?
- Lesson 134 — Interview 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 637 — Popular CI Platforms
- Open/Closed Principle
- objects are open for extension but closed for modification.
- Lesson 268 — Decorator Pattern: Adding Behavior Dynamically
- OpenAPI specification
- (the structured YAML or JSON file describing your API) and render it as a web interface.
- Lesson 836 — Interactive Documentation Tools
- Openness
- Teams and stakeholders are open about work and challenges
- Lesson 1581 — Scrum Framework OverviewLesson 1845 — Embracing Emerging Technologies Responsibly
- 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 1153 — Tracing Infrastructure and Tools
- Operating system characteristics
- Use containers or virtual machines to standardize the OS layer
- Lesson 689 — Controlling the Build Environment
- Operation being performed
- "fetching user", "processing payment"
- Lesson 1091 — Error Context and Propagation
- Operational Burden
- – Managed services handle undifferentiated heavy lifting: backups, patching, scaling, high availability.
- Lesson 1518 — Evaluating Managed Service Trade-offs
- operational complexity
- .
- Lesson 1337 — Trade-offs: Complexity vs. FlexibilityLesson 1413 — Beyond CAP: Practical Considerations
- Operational knowledge
- Your team's expertise becomes vendor-specific
- Lesson 1539 — What is Vendor Lock-in
- Operational Overhead
- Automation handles backups, failover, scaling, and security patches—tasks that would otherwise consume significant DevOps time.
- Lesson 1512 — Managed DatabasesLesson 1528 — What is Multi-Tenancy
- operations
- (GET, POST, PUT, DELETE) that specify what actions are possible.
- Lesson 838 — Anatomy of an OpenAPI DocumentLesson 879 — Understanding Query Execution PlansLesson 1229 — Stakeholder Concerns as DriversLesson 1252 — Communicating Architecture to Stakeholders
- Operations/SRE
- – concerned with reliability, monitoring, deployment complexity
- Lesson 1812 — Identifying 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 363 — Opportunistic vs Planned Refactoring
- Opportunity cost
- is what you sacrifice when choosing one option over another.
- Lesson 34 — The Cost of Delay and Opportunity Cost
- Optimism bias
- We remember the best-case scenarios and forget the debugging marathons
- Lesson 1648 — Why Estimation is Hard
- Optimistic concurrency control
- Detecting conflicts at commit time and rolling back one transaction
- Lesson 908 — Serializable Isolation
- Optimistic Locking
- Add a version column; only update if the version hasn't changed since you read it.
- Lesson 911 — Lost Update Problem
- Optimistic UI updates
- Show the expected result immediately in the interface
- Lesson 1353 — Eventual 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 1335 — Technology Heterogeneity and Experimentation
- Optimize
- Improve performance while all tests remain green
- Lesson 506 — TDD and Performance Optimization
- Optimize package size
- Trim unused libraries and use tree-shaking
- Lesson 1521 — Cold Starts and Warm Instances
- Optimizing
- performance based on usage patterns
- Lesson 11 — SDLC Phases: Testing, Deployment, Maintenance
- Optimizing Resource Usage
- extends beyond code.
- Lesson 1932 — Sustainable Software Engineering Practices
- options
- control specific behaviors:
- Lesson 64 — Merge Strategies and OptionsLesson 767 — HEAD and OPTIONS: Metadata Operations
- Orchestrate
- entities to fulfill specific application scenarios
- Lesson 1275 — Use 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 1366 — What is the Saga PatternLesson 1370 — Saga Execution CoordinatorsLesson 1375 — Trade- offs: Coupling and Visibility
- orchestrator
- is a dedicated service that manages the entire saga workflow.
- Lesson 1370 — Saga Execution CoordinatorsLesson 1378 — Hybrid Approaches
- Order
- the backlog so the team always works on the highest-value items first
- Lesson 1582 — Scrum Roles: Product Owner
- ORDER BY Operations
- Lesson 871 — Identifying Columns to Index
- Order Context
- publishes `OrderPlaced` event
- Lesson 1285 — Domain Events for Context IntegrationLesson 1306 — Domain-Driven Design Bounded Contexts
- Order matters
- Running Test B before Test A causes failures
- Lesson 440 — Avoiding Test InterdependenceLesson 1367 — Compensating Transactions
- Order matters most
- Place the most selective (highest-filtering) column first, or the column most frequently used alone.
- Lesson 873 — Composite Indexes and Column Order
- Order of operations matters
- A notification was sent (behavior) after validation succeeded (state)
- Lesson 486 — Combining State and Behavior Verification
- Organizational accountability
- means companies face:
- Lesson 1923 — Professional Liability and Accountability
- Organizational changes
- Rapid growth, acquisitions, or restructuring alter priorities and constraints.
- Lesson 1808 — Evolving Vision Over Time
- Organizational Resistance
- Management may see the initial velocity drop and question the investment.
- Lesson 521 — Team Adoption and Learning Curve
- Originator
- – the object whose state you want to save (like your document)
- Lesson 301 — The Memento Pattern: Capturing Object State
- ORM by default
- for CRUD operations, simple queries, and everyday object persistence
- Lesson 954 — The Hybrid Approach
- Other technical teams
- – worry about integration points, API stability, shared resources
- Lesson 1812 — Identifying and Engaging Stakeholders
- Out-of-band deployment
- Deploy outside normal release windows and blackout periods
- Lesson 1549 — Emergency Release Procedures
- Outbound (driven) ports
- Interfaces your business logic uses to request external services (e.
- Lesson 1264 — The Ports and Adapters Pattern
- Outgoing requests
- endpoint, method, key parameters (sanitized), correlation ID
- Lesson 1124 — Logging at System Boundaries
- Output encoding
- transforming user input into a safe form *right before* you display it, based on *where* it's going.
- Lesson 1064 — Preventing XSS Through Output Encoding
- Output escaping
- ensures data displays safely in its final context.
- Lesson 1060 — Input Validation and Sanitization
- Output Formats
- Configure whether logs emit as JSON, logfmt, or human-readable text without changing your logging calls.
- Lesson 1133 — Structured Logging Libraries and APIs
- 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 514 — Growing Object-Oriented Software Guided by Tests
- Over-invalidation
- wastes your caching investment.
- Lesson 976 — The Two Hard Things in Computer Science
- Overlay networks
- span multiple Docker hosts, allowing containers on different machines to communicate securely as if they're on the same local network.
- Lesson 1435 — Docker Networking Fundamentals
- Overload
- Throughput may drop while latency skyrockets
- Lesson 1387 — Measuring Scalability: Throughput and Latency
- Overly sensitive static thresholds
- that don't account for normal variance
- Lesson 1158 — Alert Fatigue: Reducing False Positives
- OWASP Top 10
- is a regularly updated list (roughly every 3-4 years) that ranks the most critical security risks facing web applications.
- Lesson 1041 — Introduction to the OWASP Top 10
- Owned
- Assign a person or team responsible for each item
- Lesson 1184 — Identifying Actionable Improvements
P
- P1 (High)
- Major functionality broken, significant customer impact.
- Lesson 1164 — Incident Severity Levels
- p50 (median)
- Half of all requests are faster than this value
- Lesson 1143 — Percentiles and AggregationLesson 1205 — Percentiles and the Long Tail
- p95
- 95% of requests are faster; only 5% are slower
- Lesson 1143 — Percentiles and AggregationLesson 1205 — Percentiles and the Long Tail
- p99
- 99% are faster; this captures the "worst" 1% of experiences
- Lesson 1143 — Percentiles and AggregationLesson 1205 — Percentiles and the Long Tail
- PA/EL systems
- (like Cassandra, DynamoDB): Choose availability during partitions, prioritize low latency normally
- Lesson 1411 — The 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 582 — Automated Accessibility Testing
- Package Structure
- Organize code so each module lives in its own package hierarchy.
- Lesson 1291 — Enforcing Module Independence
- Package/module organization
- Physical separation makes violations obvious
- Lesson 1257 — Layer Responsibilities and Boundaries
- Page Object Pattern
- treats each page (or component) of your application as a class.
- Lesson 562 — Page Object Pattern
- Page Views and Engagement
- Lesson 1709 — Documentation Health Metrics
- Paginate collections
- Apply limits to child collections to bound the result set size.
- Lesson 947 — Cartesian Product Explosion
- Paginate last
- Return only the requested page of sorted, filtered data
- Lesson 789 — Combining 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 786 — Pagination Metadata and Links
- Pain frequency
- Code touched often hurts more than code rarely changed
- Lesson 1772 — Managing Technical Debt During Refactoring
- Pairing and Rotation
- Rotate team members through different parts of the codebase or pair junior and senior engineers.
- Lesson 1840 — Creating a Culture of Continuous Learning
- Parallel Development
- Lesson 841 — Benefits of Schema-First Development
- Parallel execution fails
- Tests can't run simultaneously without interfering
- Lesson 458 — Avoiding Shared Mutable State
- Parallel execution is impossible
- You can't run tests simultaneously
- Lesson 440 — Avoiding Test Interdependence
- Parallelization
- means identifying which stages are independent and configuring your pipeline to execute them simultaneously.
- Lesson 706 — Parallelization and Pipeline Efficiency
- Parallelize wisely
- Run independent integration tests in parallel, but be mindful of resource contention on shared dependencies.
- Lesson 538 — Performance Considerations with Real Dependencies
- Parameter Objects
- When extracting creates functions with many parameters, group related data into objects (covered earlier in your studies).
- Lesson 385 — Breaking Down Complex Functions
- Parameterize Dependencies
- Instead of creating dependencies internally, pass them in as parameters.
- Lesson 1754 — Breaking Dependencies to Enable Testing
- Parameterized methods
- Add optional parameters to facade methods for flexibility without exposing subsystem details
- Lesson 273 — Implementing Facades: Design Decisions
- Parameterized queries
- (also called **prepared statements**) treat SQL code and user data as fundamentally separate things.
- Lesson 1055 — Preventing SQL Injection with Parameterized Queries
- Parameters
- passed to that method to determine which object to create
- Lesson 241 — Simple Factory PatternLesson 838 — Anatomy of an OpenAPI DocumentLesson 941 — Query Object Pattern
- Parameters section
- path params, query params, headers, body—each with type, required/optional flag, and description
- Lesson 831 — Reference Documentation Structure
- Paraphrasing
- what you heard: "So you're saying the approval process blocks urgent requests?
- Lesson 134 — Interview Techniques for Requirements
- 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 1851 — Inclusive Communication and Collaboration
- Parsers and serialization
- If you write a JSON parser, the property "parse(stringify(x)) == x" should hold for any valid object.
- Lesson 612 — When Property-Based Testing Shines
- Parses incoming requests
- against path, query, header, and body schemas
- Lesson 843 — Request and Response Validation
- partial failures
- .
- Lesson 1103 — What Are Partial Failures?Lesson 1414 — The Distributed Consensus Problem
- Partial failures are normal
- (some nodes work, others don't)
- Lesson 1093 — Introduction to Resilience Patterns
- Partition tolerance
- (system works despite network splits).
- Lesson 923 — The Consistency-Availability Trade-off
- Partition Tolerance (P)
- The system continues to operate despite network partitions (communication breakdowns between nodes).
- Lesson 1406 — The 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 1362 — Message Ordering and PartitioningLesson 1405 — Combining Partitioning and Replication
- Pass everything through parameters
- Input data, configuration, identifiers—all come as function arguments or environment variables.
- Lesson 1522 — Stateless Function Design
- Passkeys
- are the user-facing implementation—cryptographic key pairs stored on your device.
- Lesson 997 — Passwordless Authentication Methods
- Password reuse
- Same password across multiple sites increases breach impact
- Lesson 992 — Username and Password Authentication
- Password Storage
- The server stores a **hashed** version of the password (never plaintext)
- Lesson 992 — Username and Password Authentication
- PATCH
- (the rightmost number): Bug fixes and internal improvements that don't change the public API.
- Lesson 669 — Semantic Versioning (SemVer)Lesson 675 — Version Bumping StrategiesLesson 766 — PATCH vs PUT: Partial vs Full UpdatesLesson 1550 — Semantic Versioning (SemVer) Explained
- Patch version
- (the last number): Incremented for **backward-compatible bug fixes** that don't add new features.
- Lesson 846 — Semantic 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 1888 — Patent Risks in Software Development
- Patent Trolls
- These are entities (often called "non-practicing entities") that acquire patents solely to extract licensing fees or lawsuit settlements.
- Lesson 1888 — Patent Risks in Software Development
- Patents
- give you a time-limited monopoly (typically 20 years) on your invention, but require public disclosure.
- Lesson 1890 — Trade 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 600 — Branch and Path CoverageLesson 605 — Choosing the Right Coverage Metric
- Path separators
- Unix-like systems (Mac, Linux) use forward slashes (`src/main.
- Lesson 666 — Cross-Platform Build Considerations
- Path-based routing
- Different URL paths to different backends
- Lesson 1463 — Ingress Controllers and HTTP Routing
- Pattern matching
- Recognizing formats like `AWS_SECRET_ACCESS_KEY=AKIA.
- Lesson 743 — Secret Scanning and Prevention
- Pattern matching conventions
- Lesson 787 — Filtering Query Parameters
- Pause Before Reacting
- Lesson 1644 — Receiving Feedback with an Open Mind
- Pay-As-You-Go (On-Demand)
- Maximum flexibility—spin up resources when needed, shut them down when done.
- Lesson 1535 — Understanding Cloud Cost Models
- Pay-per-execution
- Billing based on actual usage, not reserved capacity
- Lesson 1519 — What is Serverless and Function as a Service
- Payload
- Contains claims (user ID, roles, expiration time)
- Lesson 1011 — Stateless Authentication with JWTs
- PC/EC systems
- (like HBase, traditional RDBMSs): Choose consistency during partitions, maintain it even when it costs latency
- Lesson 1411 — The PACELC Extension to CAP
- Peak usage times
- Back-to-school, seasonal events specific to your domain
- Lesson 1548 — Release Windows and Blackout Periods
- Peer feedback sessions
- create space for direct, one-on-one exchanges about collaboration styles, code quality, or communication patterns.
- Lesson 1645 — Creating Feedback Loops in Teams
- Peer review
- Team members can review pipeline changes just like application code
- Lesson 708 — Pipeline as Code
- Penetration Testing
- (pen testing) involves security experts manually attacking your system using the same tools and techniques real hackers use.
- Lesson 421 — Security Tests: Finding VulnerabilitiesLesson 1061 — Testing for Injection Vulnerabilities
- People reuse passwords
- Your users likely use the same password for their email, bank, and dozens of other services.
- Lesson 999 — Why Passwords Must Never Be Stored in Plain Text
- Per-test fixtures
- are created fresh before each test and torn down after.
- Lesson 542 — Shared vs Per-Test Fixtures
- Perceived reduced output
- is the biggest concern.
- Lesson 1626 — Benefits and Trade-offs of Pair Programming
- Performance
- How fast must it respond?
- Lesson 32 — Non-Functional Requirements as ConstraintsLesson 278 — Types of Proxies: Virtual, Protection, and RemoteLesson 755 — What REST Is and Why It MattersLesson 821 — Persisted Queries and Query WhitelistingLesson 907 — Repeatable Read IsolationLesson 1130 — Key-Value Pairs and Log FieldsLesson 1187 — Performance vs Scalability vs EfficiencyLesson 1238 — What are Quality Attributes (+2 more)
- Performance critical paths
- Every adapter adds a tiny layer of indirection
- Lesson 258 — When to Use the Adapter Pattern
- Performance evaluation
- When velocity becomes a performance target, teams inflate estimates to appear productive.
- Lesson 1613 — The Dangers of Velocity Misuse
- Performance insights
- Data about response times, throughput, and resource usage
- Lesson 1244 — Testability and Observability
- Performance isolation
- One tenant's spike shouldn't degrade others' experience
- Lesson 1528 — What is Multi-Tenancy
- Performance issues hide
- You can't identify bottlenecks or unusual patterns
- Lesson 1119 — Why Logging Matters
- Performance Metrics
- Watch response times, CPU usage, memory consumption, and other signals.
- Lesson 722 — Monitoring and Automated Rollback Triggers
- Performance overhead
- The server must parse and validate every query text on every request
- Lesson 821 — Persisted Queries and Query WhitelistingLesson 1309 — Data Duplication vs Data Coupling Trade-offs
- Performance problems
- are debuggers' Achilles heel.
- Lesson 1735 — Debugger 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 1211 — Baseline Metrics and Regression Detection
- Performance Requirements
- Lesson 828 — Evaluating API Style for Your ContextLesson 1231 — Quality Attributes as Primary Drivers
- Performance requirements vary
- Use RPC for high-throughput internal services, REST for lower-volume external endpoints
- Lesson 827 — Mixing API Styles in Practice
- Performance reviews
- Include learning goals alongside delivery goals
- Lesson 1847 — Measuring and Rewarding Learning
- Performance specifications
- Response times, throughput, concurrent users
- Lesson 127 — System Requirements
- Performance tests
- measure speed, resource consumption, and responsiveness.
- Lesson 420 — Performance and Load Tests: Testing Under Stress
- Performance Trade-offs
- CAP says nothing about latency.
- Lesson 1413 — Beyond 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 1247 — Quality 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 951 — When to Drop Down to SQL
- Performance-critical sections
- need optimizations that violate style guides
- Lesson 397 — Balancing Automation with Flexibility
- Permissions-Policy
- (formerly called Feature-Policy) lets you explicitly restrict which features your site and embedded content can use.
- Lesson 1076 — Permissions-Policy and Feature Control
- Permissive licenses
- (like MIT, BSD, Apache 2.
- Lesson 1863 — Permissive vs Copyleft LicensesLesson 1872 — Permissive vs Copyleft License CompatibilityLesson 1873 — GPL License Compatibility RulesLesson 1874 — LGPL and Weak Copyleft Compatibility
- Persisted queries
- let you pre-register approved queries on the server and reference them by ID rather than sending the full query text.
- Lesson 821 — Persisted Queries and Query Whitelisting
- Persisted to disk
- Messages are written to disk storage before acknowledging receipt.
- Lesson 1360 — Message Durability and Persistence
- Persistence
- (saving and loading data from databases or files)
- Lesson 195 — Identifying Multiple Responsibilities
- Persistent Volumes (PV)
- are cluster-wide storage resources that exist independently of any pod.
- Lesson 1449 — Volumes and Persistent Storage
- PersistentVolume (PV)
- Kubernetes binds the claim to an available volume that meets those requirements
- Lesson 1449 — Volumes and Persistent StorageLesson 1459 — Persistent Volumes and Claims
- PersistentVolumeClaim (PVC)
- A developer requests storage with specific size and access requirements
- Lesson 1449 — Volumes and Persistent StorageLesson 1459 — Persistent Volumes and Claims
- Personal data
- is any information that can identify a living individual, directly or indirectly.
- Lesson 1900 — Personal Data and Sensitive Information
- Pessimistic View
- Read data with awareness that it might be locked or in-flux, and handle accordingly.
- Lesson 1371 — Handling Saga Isolation Anomalies
- Phantom reads
- A query returns different row sets during the same transaction because another transaction inserted or deleted rows
- Lesson 899 — The Isolation PropertyLesson 904 — What Isolation Levels Protect AgainstLesson 907 — Repeatable Read Isolation
- Phase 1
- New code uses structured logging exclusively
- Lesson 1134 — Migrating from Unstructured to Structured Logs
- Phase 2
- Hot paths in existing code get converted
- Lesson 1134 — Migrating from Unstructured to Structured Logs
- Phase 3
- Remaining code migrates opportunistically during maintenance
- Lesson 1134 — Migrating from Unstructured to Structured Logs
- Phase 4
- Remove legacy logging infrastructure
- Lesson 1134 — Migrating from Unstructured to Structured Logs
- Phishing susceptibility
- Users can be tricked into revealing credentials
- Lesson 992 — Username 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 1859 — Remote Work and Disconnecting
- Pick the smallest prerequisite
- with no dependencies of its own
- Lesson 1767 — The Mikado Method for Large Refactorings
- PID namespace
- Each container sees its own process tree, with its own PID 1
- Lesson 1427 — Namespaces and Control Groups
- Pin exact versions
- rather than using ranges like `^1.
- Lesson 1885 — Open Source Security and Supply Chain Risks
- Pinned versions
- guarantee reproducibility but require deliberate updates
- Lesson 688 — Pinning Dependencies
- Pinning
- means specifying one exact version.
- Lesson 673 — Pinning vs Flexible VersioningLesson 688 — Pinning Dependencies
- Pinpoint accuracy
- Clear blame when something breaks
- Lesson 408 — Why Pyramid Shape MattersLesson 493 — Taking Small Steps in TDD
- 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 708 — Pipeline as Code
- Pipeline dashboards
- aggregate key information in one place:
- Lesson 707 — Pipeline Visibility and Monitoring
- Plan for change
- Design systems that can adapt when requirements shift
- Lesson 7 — Uncertainty and Risk Management
- Plan to revisit
- trade-offs aren't permanent; conditions change
- Lesson 1235 — Driver 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 363 — Opportunistic vs Planned Refactoring
- Planning fallacy
- We systematically underestimate how long tasks take, even when we have historical evidence
- Lesson 1648 — Why Estimation is HardLesson 1653 — Reference Class Forecasting
- Planning horizon
- Near-term work should be more detailed than distant backlog items
- Lesson 1665 — Balancing Granularity
- Platform detects trigger
- – The FaaS platform (AWS Lambda, Azure Functions, etc.
- Lesson 1520 — Serverless Event-Driven Execution Model
- Platform limitations
- might include:
- Lesson 33 — Technical Constraints and Platform LimitationsLesson 1232 — Constraints: Technical and Organizational
- Platform-level protection
- GitHub, GitLab, and Bitbucket offer built-in secret scanning
- Lesson 743 — Secret Scanning and Prevention
- playbooks
- are pre-written, step-by-step guides that document how to handle specific incidents or operational tasks.
- Lesson 1168 — Runbooks and PlaybooksLesson 1490 — Ansible Fundamentals
- Plugin/extension requirements
- Features explicitly designed for third-party extension or configuration.
- Lesson 206 — When to Apply OCP
- pod
- is the smallest unit you can create or deploy.
- Lesson 1444 — Pods: The Atomic Unit of DeploymentLesson 1454 — Pods: The Basic Unit of Deployment
- Point-to-point messaging
- (work queues)
- Lesson 1357 — Message Brokers vs Event Buses: Core ConceptsLesson 1359 — Message Queues and Point- to-Point Messaging
- Pointer Chasing
- Following references through layers (Facade → Subsystem A → Component X) means more memory accesses, which can hurt CPU cache performance.
- Lesson 282 — Performance Overhead of Structural Patterns
- Poor Key Management
- Hardcoding encryption keys in source code, storing them alongside encrypted data, or failing to rotate them regularly.
- Lesson 1043 — A02: Cryptographic Failures
- Poor naming
- may use awkward method names straight from paths
- Lesson 856 — Auto-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 336 — Bloaters: Long Method
- Poor user experience
- results when the client can't show anything until everything loads
- Lesson 783 — Why Pagination Matters
- port
- is an interface that defines how your core application interacts with the outside world.
- Lesson 1264 — The Ports and Adapters PatternLesson 1270 — Multiple Adapters for One Port
- Port Binding factor
- requires your app to be **self-contained** and **export services by binding to a port**.
- Lesson 751 — Processes and Port Binding Factors
- Port scanning
- Testing `http://internal-host:22` reveals open services
- Lesson 1051 — A10: Server-Side Request Forgery (SSRF)
- Portability
- Your app should run on any cloud platform with minimal changes
- Lesson 748 — Introduction to the Twelve-Factor App MethodologyLesson 756 — Client-Server SeparationLesson 1246 — Portability and DeployabilityLesson 1423 — What Are Containers and Why Use Them
- Portable solutions
- keep your options open but force you to build and maintain infrastructure layers yourself, essentially reinventing what cloud providers already offer.
- Lesson 1510 — Cloud Portability and Vendor Lock-in Trade-offs
- Portfolio management
- Comparing initiatives that span months without knowing implementation details.
- Lesson 1651 — T-Shirt Sizing for Coarse Estimates
- ports
- defined entry and exit points like gates and windows.
- Lesson 1264 — The Ports and Adapters PatternLesson 1267 — Implementing AdaptersLesson 1269 — Testing Hexagonal Applications
- Ports and Adapters
- pattern—modules depend on abstractions, not concrete implementations from other modules.
- Lesson 1288 — What is a Modular Monolith
- Position tracking
- Remember "last processed event" to resume consumption
- Lesson 1348 — Event Store Design
- Post-blackout planning
- Expect backlog of changes after restrictions lift
- Lesson 1548 — Release Windows and Blackout Periods
- Post-incident recovery
- After major incidents, affected engineers need explicit time off—ideally the next business day.
- Lesson 1857 — On-Call and After-Hours Work
- Post-Incident Review
- Lesson 1906 — Data Breach Response and Transparency
- Post-mortem analysis
- crash dumps, core files, captured state (as you learned in lesson 1734)
- Lesson 1736 — Production vs Development Debugging Constraints
- Post-mortem scheduling
- – Plan immediate follow-up to prevent recurrence
- Lesson 1569 — The Hotfix Process and Risk Management
- Post-mortem, not blame
- After fixing, briefly discuss what broke and how to prevent it—without pointing fingers.
- Lesson 653 — Fixing Broken Builds Immediately
- Post-mortems and retrospectives
- that lead to systemic improvements
- Lesson 1847 — Measuring and Rewarding Learning
- Postconditions
- are what must be true *after* a method completes.
- Lesson 209 — Behavioral Subtyping and Contracts
- Power imbalance
- Does the user have meaningful choice, or is this coercive?
- Lesson 1909 — Surveillance and Tracking Ethics
- Powerful querying
- Filter by exact field values without pattern matching
- Lesson 1129 — What is Structured Logging
- PR Creation
- When updates are found, it opens a pull request with the version bump
- Lesson 685 — Automating Dependency Updates
- Practice deliberately
- write code, review others' work, learn from failures
- Lesson 1897 — Product Quality and Professional Competence
- Praise What Works
- Don't only highlight problems.
- Lesson 1617 — Creating a Constructive Review Environment
- Pre-approve hotfix procedures
- – Don't debate process during an emergency
- Lesson 1569 — The Hotfix Process and Risk Management
- Pre-commit hooks
- that warn before committing overly complex code
- Lesson 390 — Using Complexity Metrics in PracticeLesson 393 — Pre-commit Hooks and Git HooksLesson 743 — Secret Scanning and Prevention
- Pre-Commit Phase
- *(new)*: If everyone votes "yes," the coordinator sends a "pre-commit" message.
- Lesson 1417 — Three-Phase Commit (3PC)
- Pre-reading and async prep
- Share agendas and documents 24-48 hours ahead.
- Lesson 1851 — Inclusive Communication and Collaboration
- Pre-refinement triage
- Deciding which backlog items deserve detailed breakdown.
- Lesson 1651 — T-Shirt Sizing for Coarse Estimates
- Pre-release
- Execute comprehensive E2E validation before deploying to production
- Lesson 561 — E2E Test Execution Strategy
- Precise
- when they fail, they pinpoint exactly what broke
- Lesson 415 — Unit Tests: Testing in Isolation
- Precise failures
- When something breaks, you know exactly which component failed
- Lesson 565 — Component Testing vs Full Page Testing
- Precise Filtering
- Instead of regex-hunting through text, you query directly:
- Lesson 1135 — Querying and Analyzing Structured Logs
- Preconditions
- are what must be true *before* a method runs.
- Lesson 209 — Behavioral 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 881 — Filtering and Predicate Pushdown
- Predict Need
- When a frequently-accessed entry approaches its TTL expiration
- Lesson 971 — Refresh-Ahead Caching
- Predictability
- in planning and budgeting
- Lesson 12 — Waterfall Model: Sequential DevelopmentLesson 575 — Managing Test Data DependenciesLesson 1586 — Sprints in Scrum
- Predictable behavior
- Like buying factory-sealed products versus hand-modified ones, immutable deployments eliminate human error during updates.
- Lesson 1478 — Benefits and Challenges of Immutability
- Predictable patterns
- Similar operations work similarly across different resources
- Lesson 759 — Uniform Interface Principle
- Predictable scale
- where self-managed infrastructure becomes cost-effective
- Lesson 1541 — Evaluating 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 1913 — The Impossibility of Fairness
- Predictive preloading
- Load data users are likely to need next (e.
- Lesson 989 — Cache Warming and Preloading
- Prefer test-specific attributes
- like `data-testid` – they signal testing intent to developers
- Lesson 563 — Locator Strategies and Best Practices
- prefixes
- followed by a descriptive name:
- Lesson 57 — Branch Naming ConventionsLesson 367 — Naming Conventions and Consistency
- Preflight Validation
- Properly handle OPTIONS requests that browsers send to check permissions before actual requests.
- Lesson 1068 — Cross-Origin Resource Sharing (CORS) Security
- Preloading on startup
- When your application boots, immediately fetch and cache critical data
- Lesson 989 — Cache Warming and Preloading
- Premature abstraction
- means introducing interfaces, inheritance hierarchies, or plugin systems before you have concrete evidence they're needed.
- Lesson 207 — Balancing OCP with SimplicityLesson 322 — When 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 206 — When to Apply OCPLesson 285 — Combining Multiple Structural Patterns
- Prepare Phase
- Just like 2PC — coordinator asks all participants if they can commit
- Lesson 1417 — Three-Phase Commit (3PC)
- Prepare properly
- Document your ongoing work, hand off critical responsibilities, set up out-of-office notifications, and actually disconnect.
- Lesson 1860 — Vacation and Time Off
- Preprocessing seams
- Compile-time or build-time substitution points.
- Lesson 1753 — Finding Seams in Legacy Code
- Prerequisites
- What users need before beginning (account, tools, basic knowledge)
- Lesson 835 — Getting Started GuidesLesson 1681 — User Guides and Tutorials
- Present options considered
- Show you evaluated alternatives
- Lesson 1252 — Communicating Architecture to Stakeholders
- Present options, not problems
- Don't just say "we can't do both.
- Lesson 35 — Communicating Trade-offs to Stakeholders
- Present the Story
- The Product Owner or team member explains the work item.
- Lesson 1610 — Planning Poker and Estimation TechniquesLesson 1650 — Planning Poker and Consensus Estimation
- Presentation Layer
- Handles user interface and user interaction
- Lesson 1255 — What is Layered ArchitectureLesson 1257 — Layer Responsibilities and Boundaries
- Preserve edge cases
- Note unusual handling that represents real-world complexity
- Lesson 1784 — Extracting Reusable Knowledge from Legacy Systems
- Preserved knowledge
- The team understands the business logic embedded in the code.
- Lesson 1765 — The Economics of Legacy Refactoring
- Prettier
- is one of the most popular code formatters, especially for JavaScript, TypeScript, CSS, and many other languages.
- Lesson 392 — Code Formatters and Prettier
- Pretty formatting
- Colors, indentation, human-readable timestamps
- Lesson 1128 — Logging in Local Development
- Prevent blocking
- by excluding quarantined tests from your main CI pipeline
- Lesson 577 — Quarantining and Flaky Test Management
- Prevent dead code elimination
- The compiler will remove calculations whose results aren't used.
- Lesson 1200 — Writing Effective Benchmarks
- Prevent production vulnerabilities
- Issues are caught before merging, not after deployment.
- Lesson 625 — Integrating Fuzzing into CI/CD
- Prevention over detection
- Time invested in design reviews, pairing, and tests prevents bugs rather than finding them late
- Lesson 1832 — Defining 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 1163 — The On-Call Rotation
- Primary Ports
- (driving ports) are entry points where external actors initiate requests *into* your application.
- Lesson 1266 — Primary and Secondary Ports
- principle of least privilege
- Lesson 1022 — OAuth2 Scopes and ConsentLesson 1037 — Separation of DutiesLesson 1046 — A05: Security MisconfigurationLesson 1051 — A10: Server-Side Request Forgery (SSRF)Lesson 1516 — Managed Identity and Security Services
- Prior art
- is any publicly available evidence that your invention already existed before your patent filing date.
- Lesson 1887 — The 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 1888 — Patent Risks in Software Development
- Prioritization Frameworks
- Lesson 1677 — Handling Conflicting Stakeholder Priorities
- Prioritize
- Use techniques like MoSCoW or value-vs-effort to decide urgency
- Lesson 158 — Scope Creep and Change ControlLesson 1582 — Scrum Roles: Product Owner
- Prioritize Consistency
- Wait for multiple nodes to sync before confirming operations → slower response times
- Lesson 1411 — The PACELC Extension to CAP
- Prioritize Latency
- Serve reads from nearest replica or accept writes immediately → risk of stale data
- Lesson 1411 — The PACELC Extension to CAP
- Prioritize safety over deadlines
- If a system isn't safe, it shouldn't ship—regardless of business pressure
- Lesson 1919 — The Engineer's Duty to Public Safety and Welfare
- Prioritize together
- Use your understanding of **cross-functional teams** to bring everyone to the table
- Lesson 26 — Conflicting Stakeholder Interests
- Privacy by Default
- means users get maximum privacy protection out of the box:
- Lesson 1905 — Privacy by Design and Default
- Privacy by Design
- means considering privacy at every stage:
- Lesson 1905 — Privacy by Design and Default
- Private constructor
- Prevents other code from creating new instances using `new`.
- Lesson 228 — The Singleton Pattern: Intent and Structure
- Private Estimation
- Everyone selects a card representing their estimate without showing it.
- Lesson 1610 — Planning Poker and Estimation Techniques
- Private internals
- Database tables, business logic, and data structures that belong exclusively to this module
- Lesson 1290 — Defining Module Boundaries
- Private package registries
- host internal dependencies.
- Lesson 680 — Vendor Dependencies and Private Packages
- Private registries
- require authentication and are used for proprietary applications.
- Lesson 1430 — Container Registries
- Private registry
- Best for shared internal libraries across projects
- Lesson 680 — Vendor Dependencies and Private Packages
- Privilege escalation
- is the nightmare scenario.
- Lesson 1031 — Choosing and Evolving Authorization Models
- Proactive monitoring
- Watching metrics to catch issues before they impact users
- Lesson 1838 — Production 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 983 — Cache Stampede and Thundering Herd
- Probing questions
- dig deeper: "Why does that step take so long?
- Lesson 134 — Interview Techniques for Requirements
- Problem Space
- What exactly wasn't working or needed to change?
- Lesson 1701 — Writing Effective Context Sections
- Problem-solving
- Cognitive diversity leads to exploring more solution paths
- Lesson 1848 — The Business and Ethical Case for Diversity
- Problematic combinations
- Lesson 1871 — What is License Compatibility
- Problems surface immediately
- If the build breaks, you know it's something you just changed, not a mystery from last week.
- Lesson 628 — The Core CI Principle: Integrate Early and Often
- Process
- means following systematic steps that keep work organized and verifiable:
- Lesson 6 — Process and DisciplineLesson 1078 — What is Threat ModelingLesson 1744 — Fishbone Diagrams for Systemic Issues
- Process and Discipline
- from earlier lessons?
- Lesson 9 — What is the Software Development Lifecycle (SDLC)?
- Process failures
- repeatedly prevent teams from meeting standards
- Lesson 1920 — Speaking Up: When and How to Raise Concerns
- Process Level
- If manual deployment steps caused the bug, automate deployment.
- Lesson 1748 — Preventing Recurrence with Systemic Fixes
- Processes factor
- says your application should execute as **one or more stateless processes**.
- Lesson 751 — Processes and Port Binding Factors
- Producers
- are components that detect something noteworthy has happened and emit an event to announce it.
- Lesson 1340 — Event Producers and Consumers
- produces
- an event, and something else **consumes** it.
- Lesson 1340 — Event Producers and ConsumersLesson 1351 — Command Side Design
- Product
- (interface): defines what objects the factory method creates
- Lesson 234 — Factory Method Pattern: Intent and StructureLesson 1894 — The IEEE-CS/ACM Software Engineering Code of Ethics
- Product Backlog
- is an ordered, living list of everything that might be needed in the product.
- Lesson 1585 — The Product BacklogLesson 1601 — Sprint Planning: Purpose and Structure
- Product managers
- want features shipped quickly (speed to market)
- Lesson 1229 — Stakeholder Concerns as DriversLesson 1252 — Communicating Architecture to StakeholdersLesson 1546 — Coordinating with StakeholdersLesson 1676 — Communication Strategies for Different StakeholdersLesson 1812 — Identifying and Engaging Stakeholders
- product owner
- acts as the bridge between these stakeholders and the engineering team.
- Lesson 21 — The Product Owner and Business StakeholdersLesson 26 — Conflicting Stakeholder InterestsLesson 1590 — Sprint RetrospectiveLesson 1601 — Sprint Planning: Purpose and StructureLesson 1605 — Sprint Review: Demonstrating Value
- Product stakeholders
- Weekly sprint reviews, milestone summaries
- Lesson 1676 — Communication Strategies for Different Stakeholders
- Product strategy
- Are you enabling the features customers actually need, or building for imagined future requirements?
- Lesson 1805 — Aligning Vision with Business Goals
- Production
- – where real users interact with your software
- Lesson 705 — Environment Promotion StrategyLesson 1199 — Profiling in Production vs Development
- Production code
- Lesson 481 — Testing Through Interfaces
- Production issues
- rarely accommodate debugging.
- Lesson 1735 — Debugger Limitations and When to Use Alternative Tools
- Production ownership
- "The on-call team resolved last night's incident in 12 minutes—their runbooks and monitoring paid off"
- Lesson 1839 — Celebrating Quality WinsLesson 1840 — Creating a Culture of Continuous Learning
- Production traffic analysis
- means systematically examining metrics from your live system to understand actual usage patterns and plan accordingly.
- Lesson 1218 — Production Traffic Analysis for Planning
- Profession
- – Advance the integrity and reputation of the profession
- Lesson 1894 — The IEEE-CS/ACM Software Engineering Code of Ethics
- Profile before optimizing
- Don't guess where performance problems are.
- Lesson 868 — Balancing Normalization and Performance
- programming to interfaces
- prevents components from depending on concrete implementations.
- Lesson 177 — Understanding Coupling: How Components Depend on Each OtherLesson 186 — Why Software Must Be Designed for ChangeLesson 201 — Understanding the Open/Closed Principle
- Progress clarity
- Regular updates on what's working, what's blocked, and what's next
- Lesson 1828 — Transparency and Open Communication
- Progress tracking
- You can measure completion at any level of the hierarchy
- Lesson 1658 — Work Breakdown Structures (WBS)
- progressive disclosure
- reveal complexity gradually, only when the previous layer is understood.
- Lesson 1637 — Explaining Complex Systems SimplyLesson 1694 — Documentation Structure and Navigation
- Progressive investigation
- Start with minimal flags enabled, gather data, then progressively enable more granular debugging for deeper investigation.
- Lesson 1740 — Feature Flags for Production Debugging
- Project Description
- A clear 1-2 sentence summary of what the software does and who it's for.
- Lesson 1683 — README Files
- 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 863 — Higher Normal Forms (4NF, 5NF)
- Promotion criteria
- Explicitly require evidence of continuous learning and knowledge multiplication
- Lesson 1847 — Measuring 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 1850 — Unconscious 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 1844 — Proof of Concepts and Spike Solutions
- properties
- universal statements that must hold true for *entire ranges* of inputs.
- Lesson 607 — Properties vs ExamplesLesson 608 — The Test Oracle Problem
- Property thinking
- "reversing any list twice returns the original list"
- Lesson 607 — Properties 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 606 — What is Property-Based Testing
- proportionality
- measurement overhead should be small compared to what you're measuring.
- Lesson 1189 — Performance Measurement BasicsLesson 1909 — Surveillance and Tracking Ethics
- Propose alternatives
- Suggest middle-ground solutions that partially satisfy multiple parties
- Lesson 26 — Conflicting Stakeholder InterestsLesson 1922 — Balancing Business Pressure with Professional Standards
- Proposed solution
- Your technical approach with enough detail for others to understand and critique
- Lesson 1686 — Design Documents and RFCs
- Proprietary
- → GPL (closed source conflicts with GPL's freedoms)
- Lesson 1873 — GPL 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 1539 — What is Vendor Lock-in
- proprietary code
- that can't be open-sourced
- Lesson 680 — Vendor Dependencies and Private PackagesLesson 1874 — LGPL and Weak Copyleft Compatibility
- Pros
- URIs stay clean and don't expose versioning concerns.
- Lesson 792 — Header-Based VersioningLesson 851 — Managing Multiple API VersionsLesson 916 — Row- Level vs Table-Level LockingLesson 986 — Application-Level CachingLesson 1150 — Sampling StrategiesLesson 1370 — Saga Execution CoordinatorsLesson 1379 — Understanding Scalability: Vertical vs Horizontal ScalingLesson 1400 — Rebalancing Partitions (+1 more)
- Protect against loss
- (if your phone breaks, your photos are safe)
- Lesson 73 — What Are Remote Repositories
- Protect coding time deliberately
- Block calendar time for technical work.
- Lesson 1789 — Balancing Coding and Leadership
- Protected branches
- Prevent direct commits to `main` or `develop`, requiring pull requests instead
- Lesson 89 — Branch Naming Conventions and Policies
- Protocol Buffers
- (used by gRPC) lets you define messages and services in `.
- Lesson 800 — Interface Definition Languages (IDLs)Lesson 1315 — gRPC for Service-to-Service Communication
- Protocol Buffers (protobuf)
- for encoding—a binary format that's extremely compact and fast to serialize/deserialize.
- Lesson 799 — RPC Protocols: XML-RPC, JSON-RPC, and gRPC
- Protocol mandates
- Must communicate via SOAP for legacy system compatibility
- Lesson 1232 — Constraints: Technical and Organizational
- Protocol negotiation
- and format flexibility across heterogeneous environments
- Lesson 1117 — Fallacy 6-8: Administration, Cost, and Homogeneity
- Protocol Translation
- Converts between external client protocols (HTTP/REST) and internal service protocols (gRPC, message queues).
- Lesson 1327 — API Gateway PatternLesson 1328 — Gateway Responsibilities and Trade-offs
- Prototype + Singleton
- Maintain a Singleton registry of prototype objects that can be cloned on demand.
- Lesson 254 — Combining Creational Patterns
- Prototype pattern
- solves this by keeping a fully-configured "prototype" object around and **cloning** it whenever you need a new instance.
- Lesson 247 — The 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 249 — Prototype Registry and Object Pools
- Prototypes and Spikes
- Small, time-boxed implementations that answer specific questions ("Can this library handle our scale?
- Lesson 1814 — Using Data and Evidence
- Provide both
- Let the facade handle common cases, but allow direct subsystem access for advanced users
- Lesson 273 — Implementing Facades: Design Decisions
- Provide context links
- Include your incident channel, dashboard, and relevant logs
- Lesson 1169 — Escalation Paths
- Provide helpful error messages
- when values are wrong
- Lesson 731 — Documentation and Configuration Schemas
- Provide Kill Switches
- If a feature causes production issues, disable it immediately while you investigate—your deployment pipeline stays intact.
- Lesson 1558 — What 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 853 — API Sunset and End-of-Life
- 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 422 — Contract Tests: Testing API BoundariesLesson 548 — What is Contract TestingLesson 549 — Provider and Consumer Contracts
- Provider team
- runs verification tests against the contract
- Lesson 551 — Contract Testing Tools and Frameworks
- Provider validates
- Service B runs tests proving it returns data matching that contract
- Lesson 1321 — Contract 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 218 — Role Interfaces and Interface Segregation
- Provides a unified interface
- so clients don't know about the migration
- Lesson 1776 — Implementing the Facade Layer
- Provision step
- Start containers or cloud resources for your dependencies (database, message queue, etc.
- Lesson 539 — CI/CD Integration with Real Dependencies
- Provisioned concurrency
- Pre-warm instances (costs money but eliminates cold starts)
- Lesson 1521 — Cold Starts and Warm Instances
- Proxy
- to control access—all working together.
- Lesson 285 — Combining Multiple Structural PatternsLesson 286 — Pattern Selection Criteria
- Proxy pattern
- provides a surrogate or placeholder that stands in front of another object and controls access to it.
- Lesson 277 — Proxy Pattern: Controlling Access to Objects
- Pruning
- is the act of removing dependencies identified as unused during auditing.
- Lesson 681 — Dependency Pruning and Auditing
- Pseudonymization
- replaces identifiers with pseudonyms (like aliases or random IDs).
- Lesson 1904 — Anonymization and Pseudonymization
- psychological safety
- that encourages every voice to be heard.
- Lesson 1629 — Running Effective Mob SessionsLesson 1832 — Defining Quality CultureLesson 1840 — Creating a Culture of Continuous Learning
- Public
- – Act consistently with the public interest
- Lesson 1894 — The IEEE-CS/ACM Software Engineering Code of Ethics
- Public API
- The only way other modules interact with yours—typically services, commands, or queries
- Lesson 1290 — Defining 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 1430 — Container 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 827 — Mixing API Styles in Practice
- Pull request triggers
- Build runs when a PR is opened or updated
- Lesson 639 — Build Triggers and Webhooks
- Pull updates
- from `upstream` to stay current with the original project
- Lesson 81 — Working with Multiple Remotes
- Pulls container images
- from registries and unpacks layers onto the host filesystem
- Lesson 1426 — The Container Runtime
- Puppet master
- compiles manifests into a catalog (a complete description of desired state)
- Lesson 1491 — Chef and Puppet Models
- Pure interfaces
- are perfect for ISP because they only declare methods—no implementation.
- Lesson 219 — ISP and Language Features: Abstract Classes vs Interfaces
- Purpose and impact
- What does this setting actually control?
- Lesson 731 — Documentation and Configuration Schemas
- Purpose limitation
- Are you using data only for stated purposes?
- Lesson 1909 — Surveillance and Tracking Ethics
- Purpose specification
- Define *why* you need each field before collecting it
- Lesson 1901 — Data Minimization Principle
- push
- them upstream.
- Lesson 78 — Pushing ChangesLesson 114 — Commit Hygiene Before PushLesson 306 — Implementing Observer: Push vs Pull Models
- Push back respectfully when
- You have data, benchmarks, or strong architectural reasoning that contradicts the feedback.
- Lesson 1619 — Receiving Code Review Feedback
- Push the task
- onto a **message queue** (like RabbitMQ or AWS SQS)
- Lesson 1385 — Asynchronous Processing and Message Queues
- PUT
- Idempotent but *not* safe.
- Lesson 765 — Safe and Idempotent MethodsLesson 766 — PATCH vs PUT: Partial vs Full Updates
Q
- Qualitative Evidence
- User research findings, incident post-mortems, developer experience surveys, or dependency analysis showing coupling.
- Lesson 1814 — Using Data and Evidence
- quality attribute
- that describes how efficiently your system responds to user actions and handles workload.
- Lesson 1186 — What is Performance and Why It MattersLesson 1243 — Security as a Quality Attribute
- Quality Attribute Driver
- Modifiability, deployability
- Lesson 1233 — Business Goals and Architecture Alignment
- Quality Attribute Scenario
- is a structured, three-part statement that makes quality requirements concrete:
- Lesson 1248 — Quality Attribute Scenarios
- Quality Attributes
- Remember those "-ilities" you need?
- Lesson 1224 — Why Architecture MattersLesson 1682 — Architecture Documentation
- Quality attributes compete
- Performance optimization often increases complexity, hurting maintainability
- Lesson 1235 — Driver Conflicts and Trade-offs
- Quality compromises
- will create significant technical debt or future harm
- Lesson 1920 — Speaking Up: When and How to Raise Concerns
- 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 394 — CI-Based Quality GatesLesson 693 — The Deployment Pipeline Concept
- 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 694 — Production-Ready Definition
- Quality Improvement
- Yes, fresh eyes spot logic errors, edge cases, and security vulnerabilities.
- Lesson 1616 — The Purpose and Value of Code Review
- Quality metrics
- Has code quality improved as envisioned?
- Lesson 1810 — Measuring Progress Toward Vision
- Quality of assertions
- Weak or missing assertions give false confidence
- Lesson 592 — Limitations of Coverage Metrics
- Quantifiable impact
- Tie refactoring to metrics stakeholders care about—velocity, defect rates, time-to-market, or maintenance costs.
- Lesson 1772 — Managing Technical Debt During Refactoring
- Quantify impact when possible
- "Adding this caching layer improves latency by 40% but increases operational complexity"
- Lesson 1235 — Driver Conflicts and Trade-offs
- Quantify when possible
- Use numbers stakeholders understand—time to market, cost estimates, user capacity, error rates.
- Lesson 35 — Communicating Trade-offs to Stakeholders
- Quantitative Data
- Performance benchmarks, load test results, memory profiling, latency measurements, error rates from logs, or cost projections.
- Lesson 1814 — Using Data and Evidence
- Quarantining
- Lesson 656 — Flaky Test Management
- Queries are safe
- you can call them repeatedly in debugging, logging, or testing without fear
- Lesson 175 — Command-Query Separation
- Query optimization
- through proper indexing, analyzing query plans, and rewriting inefficient queries reduces the load per operation.
- Lesson 1383 — Database Scaling Challenges
- query optimizer
- uses statistics to estimate query costs.
- Lesson 877 — Index Maintenance and StatisticsLesson 880 — Index Selection and Coverage
- query parameters
- when you're filtering or searching across a broader collection.
- Lesson 780 — Sub-resources vs Query ParametersLesson 848 — API Versioning Strategies
- Query performance
- As data grows, poorly optimized queries become exponentially slower.
- Lesson 1383 — Database Scaling Challenges
- Query readability suffers
- Developers spend more time understanding convoluted SQL
- Lesson 864 — The Cost of Over-Normalization
- Query Templates
- Provide ready-to-run queries for logs or traces that filter to the affected service and timeframe.
- Lesson 1160 — Alert Context: Including Diagnostic Information
- Question every parameter
- Does this function really need this data, or should it access it differently?
- Lesson 388 — Managing Function Parameters
- Question inheritance
- Don't copy fields from legacy systems just because they exist
- Lesson 1901 — Data Minimization Principle
- Question necessity
- After refactoring to clearer names and structure (self-documenting code), ask if comments are still needed
- Lesson 381 — Maintaining Comments During Refactoring
- Questionnaires and surveys
- let you collect requirements systematically from large populations and spot patterns that emerge across user groups.
- Lesson 139 — Questionnaires and Surveys
- Queuing
- Commands can wait in line (task scheduler, job queue)
- Lesson 290 — Command Pattern: Encapsulating Requests
- Quick fixes accumulate
- Urgent patches add complexity without restructuring
- Lesson 41 — Code Evolution and Entropy
- Quick setup
- – creating doubles for interfaces with many methods
- Lesson 478 — Mock Frameworks and Hand-Rolled Doubles
- Quick Start Guide
- A minimal working example showing how to use the core functionality.
- Lesson 1683 — README Files
- QuickCheck
- (Haskell, 2000) pioneered the entire category.
- Lesson 613 — Property Testing Tools and Frameworks
R
- R - Repudiation
- Lesson 1080 — STRIDE Threat Classification
- RabbitMQ
- Feature-rich, supports complex routing patterns
- Lesson 1316 — Message Queues for Async Communication
- Race conditions
- Concurrent operations interfere with each other
- Lesson 896 — What Are Transactions and Why They MatterLesson 976 — The Two Hard Things in Computer Science
- Racial or ethnic origin
- Lesson 1900 — Personal Data and Sensitive Information
- Rainbow tables
- Pre-computed tables of common passwords and their SHA-256 hashes let attackers instantly crack millions of passwords
- Lesson 1000 — Cryptographic Hash Functions for Password StorageLesson 1001 — Salt: Preventing Rainbow Table Attacks
- Randomizing test execution order
- means shuffling tests so they run in a different sequence each time.
- Lesson 460 — Randomizing Test Execution Order
- Randomness
- Any code using random number generators produces different results each run.
- Lesson 1722 — Controlling Environmental Variables
- Rarely touched code
- If nobody needs to modify it, the refactoring ROI is near zero.
- Lesson 1765 — The Economics of Legacy Refactoring
- Rate limiting
- Protecting your system from overload
- Lesson 1328 — Gateway Responsibilities and Trade-offs
- Rate Limiting + Bulkhead
- Lesson 1102 — Combining Resilience Patterns
- Rate-of-change
- sudden drops (100 → 10 req/sec) matter even if both are "low"
- Lesson 1157 — Threshold Selection: Static vs. Dynamic Baselines
- Raw SQL for exceptions
- like complex reports, bulk operations, analytical queries, or performance-critical hotspots
- Lesson 954 — The Hybrid Approach
- RBAC
- shines in enterprise applications with well-defined job functions—HR can see payroll, developers can deploy code.
- Lesson 1031 — Choosing and Evolving Authorization Models
- Re-estimate
- After discussion, the team votes again.
- Lesson 1610 — Planning Poker and Estimation TechniquesLesson 1650 — Planning Poker and Consensus Estimation
- Re-prioritizing
- Adjust story order based on new business value, stakeholder feedback, or technical dependencies
- Lesson 157 — Backlog Management
- Read carefully first
- Don't respond immediately if you feel defensive.
- Lesson 96 — Responding to Review Feedback
- Read from new
- Deploy code that reads from new structures while still writing to both
- Lesson 893 — Zero-Downtime Schema Changes
- Read Models
- Services maintain local copies of data they need from other contexts, updated asynchronously through events.
- Lesson 1310 — Managing 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 1383 — Database Scaling Challenges
- Read scalability
- (followers can serve reads for their partition)
- Lesson 1405 — Combining Partitioning and Replication
- Read the diff carefully
- Look at exactly what changed, line by line
- Lesson 101 — Self-Reviewing Before Submission
- Read the migration guide
- provided by the library maintainers
- Lesson 682 — Dealing with Breaking Changes
- Read Uncommitted
- Protects against nothing—all three anomalies can occur
- Lesson 904 — What Isolation Levels Protect Against
- 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 827 — Mixing API Styles in Practice
- Read-heavy systems
- where performance matters more than perfect accuracy
- Lesson 905 — Read Uncommitted Isolation
- Read-Through Caching
- , the cache layer sits between your application and the data source.
- Lesson 967 — Read-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 925 — Read-Your-Writes and Monotonic ReadsLesson 1404 — Consistency in Replicated Systems
- Read-your-writes consistency
- You always see your own updates, though others might lag
- Lesson 1410 — Consistency Models and the Spectrum
- Read/write contention
- A single database instance has limited I/O capacity.
- Lesson 1383 — Database Scaling Challenges
- Readability
- Making the code easier to understand
- Lesson 335 — What Are Code Smells?Lesson 1621 — Review Checklists and Standards
- Readability matters
- – a class named `AlwaysSuccessfulPaymentGateway` is clearer than mock configuration
- Lesson 478 — Mock Frameworks and Hand-Rolled Doubles
- Readable
- Use underscores or camelCase consistently; prefer readability over brevity
- Lesson 444 — Naming Test Methods Clearly
- readiness checks
- repeatedly attempt connections or HTTP health checks until the service responds correctly, with reasonable timeouts.
- Lesson 537 — Network and Service Discovery in TestsLesson 1101 — The Health Check Pattern
- Readiness probes
- "Can the app handle traffic?
- Lesson 1438 — Container Resource Limits and Health ChecksLesson 1450 — Health Checks: Liveness and Readiness ProbesLesson 1506 — Health Checks and Graceful Shutdown
- README
- , user documentation, wiki pages, tutorial videos, logo files, and marketing images.
- Lesson 1869 — Creative Commons and Non-Code Licenses
- reads
- (queries), but they slow down **writes** (inserts, updates, deletes) because the database must update both the table *and* all relevant indexes.
- Lesson 869 — What Indexes Are and How They WorkLesson 1350 — CQRS Pattern Overview
- Reads can go anywhere
- Clients can read from the leader or any follower, reducing load on the leader
- Lesson 1402 — Leader-Follower Replication
- Real dependencies
- mean using actual implementations—a real database, file system, or external service.
- Lesson 530 — Real vs Mocked Dependencies in Integration Tests
- 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 576 — Handling External Services
- Real-time
- Invalidation happens immediately when events are processed
- Lesson 980 — Event-Driven Invalidation
- Real-time collaboration
- Bidirectional
- Lesson 802 — gRPC Streaming: Unary, Server, Client, and Bidirectional
- Real-time data pipelines
- Streaming analytics and transformations
- Lesson 1317 — Event Streaming with Kafka
- Real-time processing
- (trading systems, gaming) may require event-driven architectures with minimal latency paths
- Lesson 1230 — Functional Requirements as Drivers
- Real-time response displays
- with status codes and payloads
- Lesson 836 — Interactive Documentation Tools
- Realism
- Test against actual databases, not in-memory fakes
- Lesson 545 — Test Containers and Dockerized Fixtures
- Realistic data
- mirrors what you'd see in production—full user objects with names, emails, addresses, profile pictures.
- Lesson 438 — Test Data: Realistic vs. Minimal
- Realistic scenarios
- Tests actual user workflows, not isolated units
- Lesson 565 — Component Testing vs Full Page Testing
- Realistic workloads
- Microbenchmarks often use tiny, perfect data (sorted arrays, simple strings).
- Lesson 1201 — Microbenchmarks and Their Limitations
- Reality
- Different teams, departments, companies, or cloud providers manage different parts.
- Lesson 1117 — Fallacy 6-8: Administration, Cost, and HomogeneityLesson 1387 — Measuring Scalability: Throughput and Latency
- Reason for deprecation
- "This API endpoint was replaced by `/v2/users` for better performance.
- Lesson 1710 — Deprecation 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 1719 — Knowing When to Ask for Help
- Reasoning becomes easier
- you know exactly what a method will or won't do
- Lesson 175 — Command-Query Separation
- Rebalancing
- is the process of redistributing data across the cluster when the number of partitions or nodes changes.
- Lesson 1400 — Rebalancing Partitions
- Rebuild
- (intensive, may lock tables): Completely recreates the index from scratch.
- Lesson 877 — Index Maintenance and Statistics
- Receiver
- – The actual object that performs the work when a command is executed
- Lesson 291 — Implementing the Command Pattern
- Receives the call
- (because it implements the same interface)
- Lesson 269 — Implementing Decorator: Wrappers and Forwarding
- Recency bias
- Recent experiences disproportionately color our predictions
- Lesson 1648 — Why Estimation is Hard
- Recent Changes
- Include references to recent deployments, configuration changes, or infrastructure modifications.
- Lesson 1160 — Alert Context: Including Diagnostic Information
- Recognition programs
- Create awards for impactful knowledge sharing or innovative experiments
- Lesson 1847 — Measuring and Rewarding Learning
- Recommendation systems
- using collaborative filtering ("users like you also liked.
- Lesson 1918 — Bias in Non-ML Systems
- Record baselines
- after stable releases or during known-good periods
- Lesson 1211 — Baseline Metrics and Regression Detection
- Record timing data
- for each step to identify slow operations
- Lesson 1372 — Monitoring and Observability for Sagas
- Recovery mechanisms
- If the system crashes, the database can replay the log during startup to restore all committed changes
- Lesson 900 — The Durability Property
- Recovery Point Objective
- is the maximum amount of data loss you can tolerate, measured in time.
- Lesson 724 — Recovery 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 724 — Recovery Point and Time Objectives
- Recursion combined with conditions
- Following recursive calls while tracking conditional logic
- Lesson 384 — Cognitive Complexity
- Recursive
- is Git's default strategy for merging two branches.
- Lesson 64 — Merge Strategies and Options
- Recuse
- yourself from decisions where appropriate
- Lesson 1926 — Conflicts of Interest and Professional Independence
- Red
- – Write a failing test for functionality that doesn't exist yet
- Lesson 358 — Red-Green-Refactor: The TDD-Refactoring ConnectionLesson 488 — The Red-Green- Refactor LoopLesson 495 — The TDD Rhythm and FlowLesson 506 — TDD and Performance OptimizationLesson 590 — Reading Coverage ReportsLesson 594 — Reading Coverage ReportsLesson 1138 — RED and USE Methods
- Redeployment-required
- configuration is simpler and safer.
- Lesson 732 — Configuration Changes Without Redeployment
- Redeployment-Required Configuration
- means configuration is loaded once at startup.
- Lesson 732 — Configuration Changes Without Redeployment
- Redis
- supports atomic operations on single keys but lacks full transactional guarantees across multiple keys without special commands
- Lesson 903 — ACID in Different Database Systems
- Redis Streams
- Ultra-low latency, simpler than both, limited durability guarantees.
- Lesson 1365 — Choosing a Message Broker: RabbitMQ, Kafka, and Others
- Redistribute capacity
- Move team members temporarily to help clear the backed-up stage (e.
- Lesson 1597 — Identifying and Resolving Bottlenecks
- Redoc
- generate this experience automatically from your API specifications (like OpenAPI).
- Lesson 836 — Interactive Documentation Tools
- Reduce default installations
- Ship products with minimal features enabled by default.
- Lesson 1038 — Minimize Attack Surface
- Reduce Nesting
- Deep conditionals and loops increase cognitive complexity.
- Lesson 385 — Breaking Down Complex Functions
- Reduce review cycles
- Fewer back-and-forth rounds mean faster merges
- Lesson 101 — Self-Reviewing Before Submission
- Reduce risk
- Discovering a fundamental misunderstanding in a prototype takes hours; discovering it in production code takes months
- Lesson 138 — Prototyping for Requirements Discovery
- Reduce the integration burden
- when you're ready to commit
- Lesson 649 — Integrating Before Starting New Work
- Reduce the pain
- Track what causes pages and ruthlessly fix repeat offenders.
- Lesson 1857 — On-Call and After-Hours Work
- Reduce uncertainty
- by breaking complex projects into manageable steps
- Lesson 9 — What is the Software Development Lifecycle (SDLC)?
- Reduce WIP
- Remember those WIP limits from the previous lesson?
- Lesson 1595 — Managing 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 854 — The Role of Client SDKs
- Reduced breach impact
- Attackers can't steal what you don't have
- Lesson 1901 — Data Minimization Principle
- Reduced complexity
- Each part of the system only understands the essentials
- Lesson 167 — Abstraction and Information Hiding
- Reduced context switching
- No need to jump to a terminal to run tools
- Lesson 395 — Editor Integration and IDE Support
- Reduced coupling
- Objects don't hold references to each other—only to the mediator.
- Lesson 298 — The Mediator Pattern: Centralizing Communication
- Reduced deployment risk
- Lesson 709 — Blue-Green Deployment
- Reduced duplication
- Store complex configurations once, clone many times
- Lesson 249 — Prototype Registry and Object PoolsLesson 562 — Page Object PatternLesson 684 — Monorepo Dependency Management
- Reduced fault tolerance
- If a server crashes, all users "stuck" to it lose their sessions, even though healthy servers exist.
- Lesson 1392 — Session Affinity and Its Problems
- Reduced flexibility
- Every client must handle the entire interface burden
- Lesson 215 — Interface Segregation Principle: No Client Should Depend on Unused Methods
- Reduced latency
- Users get content from nearby servers (milliseconds vs.
- Lesson 1386 — Content Delivery Networks and Edge Caching
- Reduced password fatigue
- Fewer weak passwords from users managing dozens of accounts
- Lesson 995 — Single Sign-On (SSO) Fundamentals
- Reduced risk
- Changes are localized, so bugs are less likely to spread unexpectedly
- Lesson 177 — Understanding Coupling: How Components Depend on Each Other
- Reduced staffing
- Holiday weekends, company-wide events, Friday evenings
- Lesson 1548 — Release Windows and Blackout Periods
- Reduced testing scope
- Focus only on validating the specific fix and critical paths, not the full regression suite
- Lesson 1549 — Emergency Release Procedures
- Reduces coupling
- Other code doesn't depend on internal details
- Lesson 171 — Encapsulation and Data HidingLesson 272 — Facade Pattern: Simplifying Complex Subsystems
- Reduces duplication
- Common steps live in one place (the base class)
- Lesson 315 — Template Method Pattern: Skeleton AlgorithmsLesson 346 — Extract Method
- Reduces tail latency
- dramatically—users experience fewer slow requests
- Lesson 1109 — Request Hedging and Redundancy
- Reducing lock duration
- Keep transactions short and release locks quickly to minimize overlap windows.
- Lesson 917 — Deadlock Detection and Prevention
- Redundancy
- The same information appears in multiple places.
- Lesson 860 — What is Normalization?Lesson 1069 — Defense in Depth for Cross-Site Attacks
- Redundant alerts
- firing for the same underlying problem
- Lesson 1158 — Alert Fatigue: Reducing False Positives
- Redundant integration tests
- often re-verify what unit tests already cover.
- Lesson 429 — When to Skip or Delete Tests
- Refactor
- – Clean up the code while keeping all tests green
- Lesson 358 — Red-Green-Refactor: The TDD-Refactoring ConnectionLesson 488 — The Red-Green- Refactor LoopLesson 495 — The TDD Rhythm and FlowLesson 506 — TDD and Performance Optimization
- Refactor first
- (if needed): Clean up the area where you'll work, commit it separately
- Lesson 105 — Avoiding Mixing Refactoring with Feature Work
- Refactor in small steps
- with quick validation after each change
- Lesson 405 — Enabling 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 327 — What is Refactoring?Lesson 334 — Refactoring vs RewritingLesson 1757 — When to Rewrite vs Refactor
- Refactoring commit
- "Extract calculateDiscount method from checkout logic"
- Lesson 362 — Committing Refactorings Separately
- Refactoring commits
- should change *how* code works internally without changing *what* it does externally.
- Lesson 105 — Avoiding Mixing Refactoring with Feature Work
- Refactoring is risky
- Changing one test mysteriously breaks others
- Lesson 440 — Avoiding Test Interdependence
- Refactoring tools
- automatically update types across your codebase
- Lesson 371 — Avoiding Encodings and Hungarian Notation
- Refactoring Toward Testability
- The best approach is often to refactor away from direct Singleton dependencies.
- Lesson 233 — Testing Code That Uses Singletons
- Reference
- them in your build configuration file (lesson 638) using platform-specific syntax
- Lesson 642 — Environment Variables and Secrets
- Reflected XSS
- Script comes from the URL or request and is immediately echoed back
- Lesson 1062 — Cross-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 1063 — Types 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 1021 — Access Tokens, Refresh Tokens, and Token Lifetime
- Refuse reads
- that might return stale data
- Lesson 1408 — CP Systems: Choosing Consistency Over Availability
- Registration
- User creates an account with a chosen username and password
- Lesson 992 — Username 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 1572 — Backporting 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 419 — Regression Tests: Preventing Old Bugs
- Regular check-ins
- with dependency owners prevent surprises.
- Lesson 1672 — Tracking and Communicating Dependency Status
- Regular reflection and adjustment
- to improve effectiveness
- Lesson 1580 — The Twelve Principles Behind the Agile Manifesto
- Regular release schedules
- If you ship every month or quarter, CalVer makes your cadence visible
- Lesson 1552 — Calendar Versioning and Alternative Schemes
- Regular rhythms
- Establish predictable meetings (daily stand-ups, weekly demos)
- Lesson 25 — Communication Channels and Stakeholder Management
- Regular, predictable windows
- Tuesday/Wednesday mornings when teams are fresh and available
- Lesson 1548 — Release Windows and Blackout Periods
- Regulatory Bodies
- Organizations ensuring the software meets legal requirements
- Lesson 19 — Who Are Stakeholders?
- Regulatory compliance
- Industries like healthcare and finance need stable, auditable versions
- Lesson 1571 — Long-Term Support (LTS) Fundamentals
- Regulatory requirements
- mandate multi-cloud or on-premises options
- Lesson 1541 — Evaluating Lock-in vs Time-to-Market Trade-offs
- Reject writes
- to nodes that can't reach the leader or coordinator
- Lesson 1408 — CP Systems: Choosing Consistency Over Availability
- Related configs are consistent
- (if feature X is enabled, its dependency Y must be configured)
- Lesson 730 — Configuration Validation at Startup
- Relational
- Hiring your spouse's business or advocating for a friend's promotion without disclosing the relationship
- Lesson 1926 — Conflicts of Interest and Professional Independence
- Relationship building
- Understanding team goals and helping others succeed
- Lesson 1820 — Operating at Staff+ Scale
- Relationship-based
- Complex hierarchies (org charts, nested folders, shared workspaces)
- Lesson 1029 — Resource-Based and Relationship-Based Authorization
- Relationship-based models
- like Google Zanzibar represent permissions as a graph of relationships.
- Lesson 1029 — Resource-Based and Relationship-Based Authorization
- relationships
- that transcend individual examples:
- Lesson 607 — Properties vs ExamplesLesson 775 — Identifying Resources from Domain ModelsLesson 1029 — Resource-Based and Relationship-Based AuthorizationLesson 1220 — Architecture as Structure
- Relaxing validation
- – accepting more inputs doesn't break existing valid requests
- Lesson 847 — Breaking vs Non-Breaking Changes
- release
- (making features available to users) happen simultaneously.
- Lesson 695 — Separating Deployment from ReleaseLesson 750 — Backing Services and Build-Release-Run Factors
- Release Branching
- creates a dedicated branch (like Git Flow's release branches) where code is prepared, tested, and polished before deployment.
- Lesson 87 — Release Branching vs Continuous Deployment
- Release coordination nightmares
- Changes must be synchronized across unrelated features
- Lesson 1336 — Migrating from Monolith to Microservices
- Release date
- Lesson 1687 — Changelog and Release Notes
- 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 1687 — Changelog 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 1548 — Release Windows and Blackout Periods
- Relevant data
- (minimal info needed, like order ID and items)
- Lesson 1285 — Domain Events for Context Integration
- Relevant identifiers
- user IDs, transaction IDs, request IDs
- Lesson 1091 — Error Context and Propagation
- Reliability
- How much downtime is acceptable?
- Lesson 32 — Non-Functional Requirements as ConstraintsLesson 131 — Reliability and Availability RequirementsLesson 755 — What REST Is and Why It MattersLesson 757 — Statelessness in RESTLesson 1174 — Service Level Objectives (SLOs): Setting Reliability TargetsLesson 1241 — Availability and Reliability
- Reliability and Reproducibility
- are the crown jewels.
- Lesson 1478 — Benefits 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 1241 — Availability and Reliability
- Remain framework-agnostic
- no references to web frameworks, databases, or UI libraries
- Lesson 1275 — Use Cases: Application Business Rules
- Remediate
- Replace incompatible dependencies, seek dual-license options, or restructure your architecture
- Lesson 1877 — Verifying License Compatibility in Practice
- Remote access
- Represent an object that exists elsewhere (different process or machine)
- Lesson 277 — Proxy Pattern: Controlling Access to Objects
- Remote execution
- Send command objects across networks
- Lesson 290 — Command Pattern: Encapsulating Requests
- Remote state storage
- (not local files) in a shared location like S3 or Terraform Cloud
- Lesson 1483 — Terraform State Management
- Remove
- old code only after the new version proves stable
- Lesson 1777 — Migrating Functionality Incrementally
- Remove Routing Logic
- Lesson 1779 — Completing the Strangler: Decommissioning Legacy
- Remove stale items
- Delete or archive stories no longer relevant.
- Lesson 1607 — Backlog Refinement Sessions
- Remove the old
- Once confident, delete the legacy implementation and potentially the abstraction itself
- Lesson 1768 — Branch by Abstraction
- Remove unnecessary dependencies
- Each third-party library brings its own potential vulnerabilities.
- Lesson 1038 — Minimize Attack Surface
- Removed
- (for deleted features), **Security** (for vulnerability patches), and **Breaking** (for incompatible changes) are optional but valuable additions.
- Lesson 1554 — Writing Effective Changelogs
- Removing endpoints or fields
- – clients requesting deleted resources get errors
- Lesson 847 — Breaking vs Non-Breaking Changes
- Removing obsolete items
- Delete or archive stories that are no longer relevant
- Lesson 157 — Backlog Management
- Removing or renaming fields
- breaks older consumers unless you implement upcasting to fill missing data with defaults.
- Lesson 1355 — Event Schema Evolution
- Rename Method
- means changing a method's name to better express what it does.
- Lesson 348 — Rename Method and Rename Variable
- Rename Variable
- applies the same principle to variables.
- Lesson 348 — Rename Method and Rename Variable
- Renaming fields
- – `user_name` becomes `username`, clients looking for the old name fail
- Lesson 847 — Breaking vs Non-Breaking Changes
- 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 685 — Automating Dependency Updates
- Reorder priorities
- Adjust based on new information or changing business needs.
- Lesson 1607 — Backlog Refinement Sessions
- Reorganize
- (online, lightweight): Compacts pages within existing structures.
- Lesson 877 — Index Maintenance and Statistics
- Repeat
- Git keeps narrowing down, halving the search space each time
- Lesson 119 — Finding Bugs with Git BisectLesson 514 — Growing Object-Oriented Software Guided by TestsLesson 711 — Rolling DeploymentsLesson 1599 — Continuous Improvement with KanbanLesson 1724 — Binary Search for Bug LocalizationLesson 1755 — The Mikado MethodLesson 1767 — The Mikado Method for Large Refactorings
- Repeatability
- Run multiple iterations and report statistical measures (mean, median, percentiles).
- Lesson 1200 — Writing Effective Benchmarks
- repeatable
- and **isolated**.
- Lesson 540 — What Are Test FixturesLesson 1453 — Declarative Configuration with YAML
- Repeatable Read
- Prevents dirty reads and non-repeatable reads
- Lesson 904 — What Isolation Levels Protect AgainstLesson 908 — Serializable Isolation
- Replace Global State
- Globals and singletons (like `Database.
- Lesson 1754 — Breaking 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 357 — Replace Temp with Query
- Replay Attacks
- Captured requests being resent to perform unauthorized actions
- Lesson 1115 — Fallacy 4: The Network is Secure
- Reporting
- Highlight differences visually (often with color overlays)
- Lesson 570 — Screenshot and Visual Regression Tools
- Reporting queries dominate
- Read-heavy analytics workloads benefit from flattened, redundant structures
- Lesson 865 — Strategic Denormalization
- Reporting requirements
- Gatling produces compelling visual reports
- Lesson 1213 — Load Testing Tools and Frameworks
- Reports the results
- back to the team
- Lesson 627 — What is Continuous Integration?Lesson 636 — What is a CI Server
- repository
- (the `.
- Lesson 45 — Creating Your First RepositoryLesson 46 — The Three States: Working Directory, Staging Area, and RepositoryLesson 939 — Identity Map Pattern
- Repository Pattern
- (which handles querying) and **Data Mapper Pattern** (which handles object-to-row mapping).
- Lesson 938 — Unit of Work PatternLesson 955 — ORMs in Domain-Driven Design
- Representation matters
- Ensure onboarding materials, documentation, and examples reflect diverse perspectives and don't assume a single cultural viewpoint.
- Lesson 1853 — Inclusive Hiring and Onboarding Practices
- Representative data
- from actual user traffic patterns, load distributions, and edge cases you can't reproduce locally
- Lesson 1199 — Profiling in Production vs Development
- Representative workloads
- Your benchmark must reflect actual usage.
- Lesson 1200 — Writing Effective Benchmarks
- Reproduce first
- Can you trigger the same crash with the saved input?
- Lesson 626 — Triaging and Reproducing Fuzzer Findings
- Reproducibility
- becomes impossible — builds work on one machine but not another
- Lesson 667 — Declaring Dependencies ExplicitlyLesson 708 — Pipeline as CodeLesson 750 — Backing Services and Build-Release-Run FactorsLesson 1720 — The Importance of Reproducibility
- 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 686 — What is a Reproducible Build?Lesson 687 — Sources of Non-Determinism
- Reproducible builds enable
- Lesson 686 — What is a Reproducible Build?
- Reproduction in safe environments
- capturing enough context to recreate issues elsewhere
- Lesson 1736 — Production vs Development Debugging Constraints
- Reproduction steps
- Can you make it happen reliably?
- Lesson 1712 — Understanding the Problem Before Debugging
- Request and response validation
- means using these schemas to automatically verify that actual HTTP traffic conforms to your specification.
- Lesson 843 — Request and Response Validation
- Request Coalescing
- Collapse multiple identical in-flight requests into a single backend query, sharing the result among all waiting requests.
- Lesson 983 — Cache Stampede and Thundering Herd
- 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 1109 — Request 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 1207 — Request Rate and Concurrency
- Request Routing
- Directs incoming requests to the correct microservice based on URL paths, headers, or other criteria.
- Lesson 1327 — API Gateway PatternLesson 1328 — Gateway Responsibilities and Trade-offs
- Request-triggered warming
- When one piece of data is accessed, proactively load related data users typically request next.
- Lesson 989 — Cache Warming and Preloading
- Required
- No
- Lesson 731 — Documentation and Configuration SchemasLesson 1334 — When Independent Scalability Is Required
- Required fields
- Which properties must be present?
- Lesson 839 — Defining Schemas with JSON SchemaLesson 1343 — Event Schemas and Contracts
- Required reviews
- Mandate that changes get approval before merging
- Lesson 89 — Branch Naming Conventions and Policies
- Required values exist
- (no missing API keys, database URLs, etc.
- Lesson 730 — Configuration Validation at Startup
- Required vs. optional
- Will the app fail without this setting?
- Lesson 731 — Documentation and Configuration Schemas
- Requirements
- What should it do?
- Lesson 9 — What is the Software Development Lifecycle (SDLC)?Lesson 12 — Waterfall Model: Sequential Development
- Requirements Reviews
- bring stakeholders together to walk through documented requirements systematically.
- Lesson 142 — Validating Elicited Requirements
- Requirements shift
- What users need today differs from yesterday's assumptions
- Lesson 41 — Code Evolution and Entropy
- Requirements Stability
- How clear and fixed are your requirements?
- Lesson 16 — Choosing an SDLC Model for Your Project
- Reread and Validate
- Before committing local transactions, reread data to detect concurrent changes.
- Lesson 1371 — Handling Saga Isolation Anomalies
- Reserved Pricing (Commitments)
- Commit to using a specific resource for 1-3 years and receive 30-70% discounts.
- Lesson 1535 — Understanding Cloud Cost Models
- Reset Methods
- Add a method to your Singleton that restores it to its initial state.
- Lesson 233 — Testing Code That Uses Singletons
- Reset state
- Clear databases, caches, and files before each run
- Lesson 1722 — Controlling Environmental Variables
- Resilience
- Messages persist if a consumer fails; they can retry later
- Lesson 1316 — Message Queues for Async CommunicationLesson 1317 — Event Streaming with KafkaLesson 1323 — Service Discovery FundamentalsLesson 1346 — Benefits and Trade-offs of Event-Driven Architecture
- Resilience patterns
- are battle-tested architectural strategies that help systems continue functioning (even in degraded modes) when parts fail.
- Lesson 1093 — Introduction to Resilience Patterns
- Resolve any conflicts
- if your changes and theirs touched the same code
- Lesson 80 — Handling Push Rejections
- Resource Allocation
- assigns compute, storage, and network resources based on the tenant's subscription level.
- Lesson 1533 — Tenant Onboarding and ProvisioningLesson 1542 — What 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 1918 — Bias in Non-ML Systems
- Resource attributes
- classification level, owner, creation date, sensitivity
- Lesson 1028 — Attribute-Based Access Control (ABAC)
- Resource caps
- Maximum 2GB RAM per container in the current cluster
- Lesson 1232 — Constraints: Technical and Organizational
- Resource constraints
- Locust and k6 are lighter than JMeter
- Lesson 1213 — Load Testing Tools and FrameworksLesson 1571 — Long-Term Support (LTS) FundamentalsLesson 1805 — Aligning Vision with Business Goals
- Resource exhaustion
- Without proper limits, malicious or buggy clients can open hundreds of subscriptions, exhausting memory and CPU.
- Lesson 822 — Subscription 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 555 — The Value and Cost of E2E Tests
- Resource needs
- You need additional engineers to investigate multiple systems simultaneously
- Lesson 1169 — Escalation Paths
- Resource organization
- Group related resources together logically.
- Lesson 1446 — Namespaces for Resource Isolation
- Resource Pools
- Connection pools (database, network) or thread pools manage scarce system resources.
- Lesson 232 — When Singleton is Appropriate
- Resource quotas and policies
- Apply different resource limits, network policies, and access controls per namespace.
- Lesson 1446 — Namespaces for Resource Isolation
- Resource utilization
- (CPU, memory) to identify bottlenecks
- Lesson 1189 — Performance Measurement Basics
- Resource utilization metrics
- tell you how hard your infrastructure is working—and where it's about to break.
- Lesson 1208 — Resource Utilization Metrics
- Resource-based
- `orders:read`, `orders:create`, `orders:delete`
- Lesson 1022 — OAuth2 Scopes and ConsentLesson 1029 — Resource-Based and Relationship-Based Authorization
- Resource-based authorization
- ties permissions directly to individual resources.
- Lesson 1029 — Resource-Based and Relationship-Based Authorization
- Resource-centric control matters
- Each file, document, or object needs its own distinct set of permissions.
- Lesson 1026 — Access Control Lists (ACLs)
- Resource-Oriented URLs
- Model your endpoints around business resources, not actions.
- Lesson 1314 — RESTful Inter-Service Communication
- resources
- (nouns like "users," "orders," "products"), RPC organizes around **actions** (verbs like "getUser," "createOrder," "calculateShipping").
- Lesson 798 — What is RPC and How It Differs from RESTLesson 1482 — Terraform Resources and ProvidersLesson 1484 — Terraform Modules and Reusability
- Respect
- Team members respect each other as capable, independent people
- Lesson 1581 — Scrum Framework Overview
- Respect "do not disturb"
- Balance urgency with focus time.
- Lesson 1622 — Review 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 1860 — Vacation and Time Off
- Respectful disagreement
- Challenging ideas without attacking people, maintaining professionalism even in heated technical debates
- Lesson 1898 — Collegiality and Fair Treatment
- Response returned
- – Results go back to the caller or trigger downstream events
- Lesson 1520 — Serverless Event-Driven Execution Model
- Response section
- success case first (200, 201), with schema and example
- Lesson 831 — Reference Documentation Structure
- Response time
- (cached responses arrive instantly)
- Lesson 758 — Cacheability ConstraintLesson 783 — Why Pagination MattersLesson 1239 — Performance: Response Time and Throughput
- Responsive design
- means your layout, navigation, and interactive elements adjust based on available screen space.
- Lesson 568 — Mobile and Responsive Testing
- REST
- shines for public APIs and simple CRUD operations.
- Lesson 1322 — Communication Protocol Trade-offsLesson 1507 — Cloud-Native Service Communication
- REST (Representational State Transfer)
- is an architectural style for designing networked applications, particularly web services.
- Lesson 755 — What REST Is and Why It Matters
- REST wins on simplicity
- Lesson 814 — GraphQL vs REST Trade-offs
- Restrict deletion
- Prevent accidental removal of important branches
- Lesson 89 — Branch Naming Conventions and Policies
- Result
- or **Either** types that explicitly wrap success or failure, combining explicit contracts with type safety.
- Lesson 1085 — Error Handling Philosophies: Return Codes vs ExceptionsLesson 1349 — Rebuilding State from Events
- Result Pattern
- returns an object that explicitly contains *either* a success value *or* an error.
- Lesson 1089 — The Result Pattern and Railway-Oriented Programming
- Result types
- When available, for errors that are part of normal operation
- Lesson 1085 — Error Handling Philosophies: Return Codes vs Exceptions
- Retaliation for previous whistleblowing
- Lesson 1921 — Whistleblowing and Legal Protections
- Retire
- alerts that no longer serve a purpose
- Lesson 1162 — Alert Evaluation: Regular Review and Refinement
- retries
- (try again intelligently), and handling **network partitions** (when parts of your system can't communicate).
- Lesson 1112 — Fallacy 1: The Network is ReliableLesson 1318 — Service Mesh and Communication Infrastructure
- Retries with backoff
- address transient network issues—try again, but with increasing delays to avoid overwhelming struggling services.
- Lesson 1320 — Handling Partial Failures and TimeoutsLesson 1508 — Designing 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 1645 — Creating Feedback Loops in Teams
- Retry + Circuit Breaker
- Lesson 1102 — Combining Resilience Patterns
- Retry capabilities
- Failed tasks can be re-queued automatically
- Lesson 1385 — Asynchronous Processing and Message Queues
- Retry Pattern
- handles these transient failures by automatically attempting the operation again, rather than immediately giving up.
- Lesson 1095 — The Retry Pattern
- Retry with Backoff
- Temporary network glitches or database locks often resolve themselves.
- Lesson 1090 — Error Recovery and Graceful Degradation
- Return codes
- force callers to check for error conditions explicitly.
- Lesson 1085 — Error Handling Philosophies: Return Codes vs Exceptions
- Return complete results
- Every response should be self-contained.
- Lesson 1522 — Stateless 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 789 — Combining Pagination, Filtering, and Sorting
- Return the modified object
- Helps clients update their local state without a follow-up query
- Lesson 808 — Mutations: Writing Data in GraphQL
- Return values
- Does the function return the expected result?
- Lesson 482 — State Verification: Testing Outcomes
- Reusability
- Small, focused components work across many contexts.
- Lesson 173 — Favor Composition Over InheritanceLesson 544 — Fixture Files and Data FormatsLesson 941 — Query Object Pattern
- Reusability improves
- Well-separated code can be reused in different contexts
- Lesson 166 — Separation of Concerns
- Reusable
- Could theoretically be used across multiple applications in the same business domain
- Lesson 1274 — Entities: Enterprise Business RulesLesson 1425 — Container Images and Layers
- Reusable Parent Fixtures
- Create commonly-needed parent fixtures once (like a "test user") and reference them from multiple child fixtures.
- Lesson 546 — Managing Fixture Dependencies
- Reuse infrastructure
- Share test containers, database connections, or service instances across test classes when possible (while maintaining test independence).
- Lesson 538 — Performance Considerations with Real Dependencies
- Revenue
- E-commerce sites lose sales with every second of delay
- Lesson 1186 — What is Performance and Why It Matters
- Revenue drivers
- Which technical capabilities directly enable the company to make money or reduce costs?
- Lesson 1805 — Aligning Vision with Business Goals
- Revenue-blocking issues
- prevent customers from completing transactions
- Lesson 1568 — What are Hotfixes and When to Use Them
- Reversibility
- Can you undo the fix quickly if needed?
- Lesson 1741 — Emergency Production FixesLesson 1907 — Third-Party Data Sharing
- Reversible decisions
- Whenever possible, design choices should be easy to undo or modify.
- Lesson 1227 — Evolutionary Architecture
- Revert fast
- If the fix isn't obvious within 10 minutes, revert the commit.
- Lesson 653 — Fixing Broken Builds Immediately
- Revert immediately if
- Lesson 655 — The Revert-First Strategy
- Reverting
- If a feature causes issues, you can cleanly revert one atomic commit.
- Lesson 108 — Atomic Commits: One Logical Change
- Review
- Developers approve legitimate changes or fix unintended regressions
- Lesson 570 — Screenshot and Visual Regression ToolsLesson 580 — Implementing Visual Testing ToolsLesson 1762 — Approval Testing for Complex Outputs
- Review and approve
- You decide if changes are intentional (update baseline) or bugs (fix code)
- Lesson 579 — Visual Regression Testing Fundamentals
- Review and discuss
- Team members review code, suggest changes, and approve
- Lesson 85 — GitHub Flow: Simplified Branch-and-Merge
- Review and prune regularly
- audit which alerts haven't triggered meaningful responses in 6 months.
- Lesson 1158 — Alert Fatigue: Reducing False Positives
- Review and unblock
- Help teammates overcome technical obstacles and review critical code
- Lesson 1786 — What is a Tech Lead?
- Review false positive rates
- Track how often alerts fire without an actual problem.
- Lesson 1162 — Alert 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 107 — Knowing When to Split a Pull Request
- Review is integrated
- Reviewers can catch missing or incorrect documentation during code review
- Lesson 1706 — Documentation as Code
- Review Workflow
- Team members review passing PRs, checking for breaking changes
- Lesson 685 — Automating Dependency Updates
- Review workflows
- Team members can approve visual changes through a web interface
- Lesson 580 — Implementing Visual Testing Tools
- Review your log
- Use `git log` to see what story your commits tell
- Lesson 114 — Commit Hygiene Before Push
- Reviewing code immediately
- through pair programming or quick pull requests, catching issues before they compound
- Lesson 1835 — Building Quality In
- Revocation
- – The old secret is permanently disabled
- Lesson 745 — Secret Rotation and Lifecycle Management
- Reward risk-taking over perfection
- Celebrate the proof-of-concept that failed but taught valuable lessons.
- Lesson 1852 — Psychological Safety for Innovation
- Rewrite the test
- to call that component directly, without going through the UI or full application stack
- Lesson 414 — Moving Tests Down the Pyramid
- Rewriting
- means throwing away existing code and building something new from scratch.
- Lesson 334 — Refactoring vs RewritingLesson 1757 — When to Rewrite vs Refactor
- RFC
- Request for Comments) is a formal written proposal that describes a planned change to a system.
- Lesson 1686 — Design Documents and RFCs
- Rich abstractions
- pagination helpers, retry logic, domain models
- Lesson 856 — Auto-Generated vs Hand-Written SDKs
- Rich request context
- Commands carry all necessary data and behavior
- Lesson 294 — Combining Chain and Command Patterns
- Right Hand
- archetypes work directly alongside an executive (VPE, CTO), extending that leader's reach.
- Lesson 1819 — The Four Staff Archetypes
- Right reason
- "Method `calculateDiscount` not found" or "Expected 10, got 0"
- Lesson 490 — Seeing the Test Fail for the Right Reason
- Right to delete
- Request deletion of personal information
- Lesson 1908 — Privacy Regulations (GDPR, CCPA)
- Right to know
- What personal information is collected and how it's used
- Lesson 1908 — Privacy Regulations (GDPR, CCPA)
- Rigid and brittle
- Adding new parameters forces changes everywhere the method is called
- Lesson 338 — Bloaters: Long Parameter List
- Rigid and fragile
- Changes ripple unpredictably through tangled dependencies
- Lesson 337 — Bloaters: Large Class and God Object
- Ripple Effects
- A bug fix in one area creates bugs elsewhere.
- Lesson 179 — The Cost of Tight CouplingLesson 202 — Why Modification is Risky
- risk
- problems surface early when they're cheaper to fix, not at the end when everything's supposedly "done.
- Lesson 13 — Iterative and Incremental ModelsLesson 152 — The Need for PrioritizationLesson 427 — Finding the Testing Sweet Spot
- Risk exposure
- Customer-facing or security-critical areas demand priority
- Lesson 1772 — Managing Technical Debt During Refactoring
- Risk identification
- Gaps and overlaps become visible during decomposition
- Lesson 1658 — Work Breakdown Structures (WBS)
- Risk is distributed
- No single integration becomes a high-stakes, nerve-wracking event.
- Lesson 628 — The Core CI Principle: Integrate Early and Often
- Risk Management
- Architecture forces you to confront hard problems early—"How will we handle failure?
- Lesson 1224 — Why Architecture MattersLesson 1542 — What is Release Planning
- Risk mitigation
- Upgrades introduce breaking changes; LTS gives breathing room
- Lesson 1571 — Long-Term Support (LTS) Fundamentals
- Risk reduction
- Multiple viewpoints catch flaws and biases earlier
- Lesson 1848 — The Business and Ethical Case for Diversity
- Risk Tolerance
- Lesson 16 — Choosing an SDLC Model for Your ProjectLesson 88 — Choosing a Strategy for Your TeamLesson 718 — Choosing a Deployment Strategy
- Risk-based testing
- means directing your testing energy toward the code that poses the highest risk if it fails.
- Lesson 402 — What to Test: Risk-Based TestingLesson 430 — Testing 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 413 — Adapting the Pyramid to Your Context
- roles
- rather than directly to users.
- Lesson 1027 — Role-Based Access Control (RBAC)Lesson 1516 — Managed Identity and Security Services
- Roll forward
- Fix the bug and deploy again (takes time)
- Lesson 719 — Deployment Risk and the Need for Rollback
- Rollback
- is your safety net—the ability to quickly return to the last known-good state.
- Lesson 719 — Deployment Risk and the Need for Rollback
- rolling deployment
- updates your application instance by instance, gradually replacing the old version across your entire server fleet.
- Lesson 711 — Rolling DeploymentsLesson 1476 — Blue-Green and Rolling Deployments
- rolling deployments
- , each new instance is verified before the next one deploys.
- Lesson 715 — Deployment Health ChecksLesson 1476 — Blue-Green and Rolling Deployments
- Rollouts and rollbacks
- Deploys new versions gradually, can revert if problems occur
- Lesson 1442 — What is Kubernetes and Why Use It
- Root cause
- The systemic reason the incident occurred (not "someone made a mistake")
- Lesson 1742 — Learning from Production IncidentsLesson 1746 — Contributing Factors vs. Root Causes
- Root cause identification
- State what fundamentally failed.
- Lesson 1183 — Writing Effective Incident Narratives
- Root causes
- are the fundamental issues that, if addressed, would prevent the problem from happening again.
- Lesson 1746 — Contributing Factors vs. Root Causes
- Rotate responsibility
- Don't make one person the bottleneck.
- Lesson 1622 — Review Timing and Response Expectations
- Rotation Design
- Distribute on-call duties fairly across the team.
- Lesson 1857 — On-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 741 — The Dangers of Hardcoding Secrets
- Round-robin for input
- Explicitly ask quieter team members for their thoughts.
- Lesson 1636 — Running Technical Discussions
- Round-robin speaking
- Instead of open discussion where assertive voices dominate, explicitly invite each person to contribute.
- Lesson 1851 — Inclusive Communication and Collaboration
- Route
- traffic through the facade to the new version
- Lesson 1777 — Migrating Functionality Incrementally
- Route new requests
- to the microservice while legacy requests still hit the monolith
- Lesson 1336 — Migrating from Monolith to Microservices
- Route through the abstraction
- Make all callers use the new abstraction instead of calling legacy code directly
- Lesson 1768 — Branch by Abstraction
- Router-level splitting
- Your API gateway or router directs requests to different handlers based on version
- Lesson 794 — Managing Multiple API Versions
- Routes requests
- to either legacy or new system based on migration state
- Lesson 1776 — Implementing the Facade Layer
- Routine reviews
- Aim for first response within 24 hours (or by end of next business day).
- Lesson 1622 — Review Timing and Response Expectations
- Routine tasks
- with well-understood patterns (CRUD endpoints, simple bug fixes)
- Lesson 1630 — When to Use Pairing vs Mobbing
- Routing
- determines *who* receives an alert initially.
- Lesson 1161 — Alert Routing and Escalation Policies
- Row estimates
- How many rows the database expects to process
- Lesson 879 — Understanding Query Execution Plans
- Row-level locks
- Only specific rows are locked, allowing concurrent transactions to work with other rows in the same table
- Lesson 916 — Row-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 798 — What is RPC and How It Differs from REST
- Rule
- Every column must contain atomic (indivisible) values, and each row must be unique.
- Lesson 861 — The 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 1918 — Bias in Non-ML Systems
- Run
- Execute the release in the target environment.
- Lesson 750 — Backing Services and Build-Release-Run Factors
- Run both versions
- simultaneously during a transition period
- Lesson 552 — Contract Versioning and Evolution
- Run experiments when possible
- Feature flags let you test changes on 5% of traffic before full rollout.
- Lesson 1829 — Data-Driven Decision Making
- Run independently
- Never assume another test ran first or left data behind
- Lesson 574 — Isolating Tests from Each Other
- Run sparingly
- Execute these tests less frequently than unit tests
- Lesson 533 — Testing with Real External APIs
- Run the same benchmarks
- on new code (CI/CD pipeline, pre-deployment)
- Lesson 1211 — Baseline Metrics and Regression Detection
- Run with minimal privileges
- Apply the principle of least privilege
- Lesson 1057 — Command Injection and OS Command Execution
- Runbook
- Procedural instructions for a specific technical task (e.
- Lesson 1168 — Runbooks and Playbooks
- Runbook maintenance
- Documenting procedures for common issues
- Lesson 1838 — Production Ownership and On-Call
- Runbook References
- Link to or embed the URL of the runbook that addresses this specific alert.
- Lesson 1160 — Alert 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 1168 — Runbooks and PlaybooksLesson 1185 — Building a Learning Culture from Incidents
- Runtime changes
- Modify behavior dynamically as conditions change
- Lesson 314 — Implementing Strategy with CompositionLesson 732 — Configuration Changes Without Redeployment
- Runtime Configuration Changes
- allow the application to reload configuration without restarting.
- Lesson 732 — Configuration Changes Without Redeployment
- Runtime overrides
- (environment variables, command-line flags)
- Lesson 729 — Default Values and Configuration Hierarchies
- Runtime visibility
- Logs, metrics, and traces showing internal operations
- Lesson 1244 — Testability and Observability
S
- S - Spoofing
- Lesson 1080 — STRIDE Threat Classification
- SA
- (ShareAlike): Derivatives must use the same license (like copyleft)
- Lesson 1869 — Creative 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 1398 — Partitioning Strategies: Hash-Based
- Safe methods
- produce no side effects on the server—they only read or retrieve data without modifying anything.
- Lesson 765 — Safe and Idempotent Methods
- Safe re-runs
- If a deployment fails halfway, you can simply run it again
- Lesson 1467 — Idempotency 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 1841 — Safe-to-Fail Experiments and Innovation Time
- Safety
- No manual editing before deployment—fewer mistakes
- Lesson 737 — Environment-Specific Configuration FilesLesson 1418 — The Paxos AlgorithmLesson 1895 — Public Interest and Social Responsibility
- Safety or security risks
- threaten users or systems
- Lesson 1920 — Speaking Up: When and How to Raise Concerns
- Safety thresholds
- some values are always dangerous regardless of patterns
- Lesson 1157 — Threshold 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 601 — Condition and Modified Condition CoverageLesson 1837 — Zero-Defect Mindset
- Saga Pattern
- Break long transactions into smaller, local transactions in each service.
- Lesson 1310 — Managing Cross-Service Data ConsistencyLesson 1420 — Distributed Transactions with Saga Pattern
- same version
- for dependency resolution.
- Lesson 674 — Pre-release and Build MetadataLesson 684 — Monorepo Dependency Management
- SAMEORIGIN
- Can only be framed by pages from your own domain
- Lesson 1073 — X-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 1914 — Bias in Training Data
- Sampling profilers
- work like a photographer taking snapshots at regular intervals.
- Lesson 1195 — Types of Profilers: Sampling vs Instrumentation
- Sampling-based approaches
- that check state periodically (e.
- Lesson 1199 — Profiling in Production vs Development
- Sanitization
- transforms input to remove or neutralize threats.
- Lesson 1060 — Input Validation and Sanitization
- Sanitize sensitive data
- before copying (PII, credentials, payment info)
- Lesson 1739 — Reproducing Production Issues Safely
- Sanity test
- Narrow but focused—verifies specific functionality deeply
- Lesson 423 — Smoke 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 423 — Smoke and Sanity Tests: Quick Health Checks
- Sarbanes-Oxley Act
- (financial fraud in publicly traded companies)
- Lesson 1921 — Whistleblowing and Legal Protections
- Say "thank you"
- Even for criticism—it means someone invested time in your work
- Lesson 1619 — Receiving Code Review FeedbackLesson 1644 — Receiving Feedback with an Open Mind
- Scalability
- How many users must it handle?
- Lesson 32 — Non-Functional Requirements as ConstraintsLesson 748 — Introduction to the Twelve-Factor App MethodologyLesson 755 — What REST Is and Why It MattersLesson 756 — Client-Server SeparationLesson 757 — Statelessness in RESTLesson 1187 — Performance vs Scalability vs EfficiencyLesson 1238 — What are Quality AttributesLesson 1346 — Benefits and Trade-offs of Event-Driven Architecture (+1 more)
- Scalability requirements
- (handle 100x traffic spikes) → pushes toward stateless services, horizontal scaling
- Lesson 1231 — Quality 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 1247 — Quality Attribute Trade-offs
- Scalable
- Works across distributed architectures with multiple cache layers
- Lesson 980 — Event-Driven Invalidation
- ScalaCheck
- (Scala/JVM) integrates seamlessly with JUnit and other Java testing frameworks.
- Lesson 613 — Property Testing Tools and Frameworks
- Scalar to Array
- → change from single value to collection
- Lesson 500 — The Transformation Priority Premise
- Scale
- Performance problems multiply as user load grows
- Lesson 1186 — What is Performance and Why It MattersLesson 1488 — Introduction to Configuration Management
- Scaling complications
- You can't easily scale down (removing a server disrupts its sticky users) or add servers (existing users won't benefit).
- Lesson 1392 — Session Affinity and Its Problems
- Scaling constraints
- Different components need independent scaling
- Lesson 1330 — Microservices Are Not a Goal
- Scaling is trivial
- spin up 10 more instances instantly
- Lesson 1382 — Stateless Application Design for Scalability
- Scaling limitations
- One component needs different resources than others
- Lesson 1336 — Migrating from Monolith to Microservices
- Scan regularly
- with tools like Dependabot, Snyk, or OWASP Dependency-Check to detect known vulnerabilities (CVEs).
- Lesson 1885 — Open 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 1406 — The CAP Theorem: Consistency, Availability, and Partition Tolerance
- Schedule before commitment
- Run spikes *before* promising delivery dates
- Lesson 1663 — Identifying Unknowns and Spikes
- Scheduled intervals
- Refresh cache during low-traffic periods
- Lesson 965 — Cache Warming and Preloading
- Scheduled refreshes
- Periodically regenerate cache entries before they expire
- Lesson 989 — Cache Warming and Preloading
- scheduler
- , matching incoming jobs with available agents based on:
- Lesson 640 — Build Agents and ExecutorsLesson 1443 — Kubernetes 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 806 — GraphQL Schema and Type SystemLesson 1364 — Message Schemas and Evolution
- Schema evolution
- Register new schema versions in the registry while maintaining compatibility
- Lesson 1364 — Message Schemas and EvolutionLesson 1509 — Cloud-Native Data Management
- schema registry
- stores and validates these definitions, ensuring producers can't publish malformed events.
- Lesson 1343 — Event Schemas and ContractsLesson 1364 — Message Schemas and Evolution
- Schema stitching
- merges multiple GraphQL schemas at the gateway level.
- Lesson 820 — Schema Stitching and Federation
- Schema-first
- = Architect draws detailed blueprints, everyone approves them, *then* construction begins
- Lesson 840 — Schema-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 840 — Schema-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 845 — Maintaining OpenAPI Specs Over Time
- Schema-to-docs generators
- produce database or API documentation from schema definitions (OpenAPI/Swagger specs, GraphQL schemas, SQL DDL).
- Lesson 1707 — Automated Documentation Generation
- Scope
- How big and fancy it will be (features, quality)
- Lesson 28 — The Iron Triangle: Scope, Time, and CostLesson 29 — Quality as a Fourth Dimension
- Scope and Boundaries
- Lesson 91 — Creating Effective Pull Requests
- Scope creep
- happens when new features, requirements, or tasks sneak into a project without proper evaluation or adjustment to timeline and resources.
- Lesson 158 — Scope Creep and Change Control
- Scope during employment
- Some agreements extend to *all* inventions during your employment period, even personal projects
- Lesson 1891 — Employee Agreements and Intellectual Property
- Scope examples
- Projects affecting multiple teams or systems
- Lesson 1823 — The Staff Engineer Promotion Path
- Screen against common/breached passwords
- (check against known bad password lists)
- Lesson 993 — Password Policies and Requirements
- Screen Readers
- Blind and low-vision users navigate via text-to-speech software.
- Lesson 1929 — Designing for Diverse Abilities
- Screenshots with annotations
- guide users through UIs or demonstrate actual behavior.
- Lesson 1693 — Visual Aids and Diagrams
- Scrum Master
- facilitates this meeting, ensuring it remains constructive and psychologically safe.
- Lesson 1590 — Sprint RetrospectiveLesson 1601 — Sprint Planning: Purpose and Structure
- SDK version 1.y.z
- Lesson 852 — Client Library Versioning
- SDK version 2.y.z
- Lesson 852 — Client Library Versioning
- Sealed Secrets
- (Kubernetes-specific) encrypt secrets before they enter Git.
- Lesson 1500 — Managing Secrets in GitOps
- seam
- is a place where you can alter behavior without editing code in that location.
- Lesson 1311 — Service Decomposition PatternsLesson 1753 — Finding Seams in Legacy CodeLesson 1769 — Seams and Dependency BreakingLesson 1771 — Dealing with Entangled Dependencies
- Seamless Updates
- Replace the cached entry while users continue reading the old (still valid) version
- Lesson 971 — Refresh-Ahead Caching
- Seams
- A "seam" is a place where you can alter behavior without editing the code directly.
- Lesson 233 — Testing Code That Uses SingletonsLesson 1761 — Using Characterization Tests to Find SeamsLesson 1770 — Incremental Architecture Migration
- Search code changes
- `git log -S"function_name"` finds commits that added or removed that text
- Lesson 117 — Reading Git Log: Understanding Commit History
- Search commit messages
- Lesson 66 — Viewing and Navigating History with git logLesson 117 — Reading Git Log: Understanding Commit History
- Search Queries Without Results
- Lesson 1709 — Documentation Health Metrics
- Search ranking algorithms
- might prioritize results based on click-through rates, which can amplify existing prejudices (e.
- Lesson 1918 — Bias in Non-ML Systems
- Search/visualization interface
- where you query and analyze (Kibana, Grafana, etc.
- Lesson 1125 — Centralized Logging
- Seasonality
- e-commerce sites with weekend spikes, B2B apps quiet at night
- Lesson 1157 — Threshold Selection: Static vs. Dynamic Baselines
- Second dispatch
- Inside that `accept` method, the element calls back to the visitor with `visitor.
- Lesson 319 — Double Dispatch in Visitor Pattern
- Secondary Ports
- (driven ports) are exit points where your application initiates calls *out* to external systems.
- Lesson 1266 — Primary and Secondary Ports
- Secret and configuration management
- Handles sensitive data and environment configs
- Lesson 1442 — What 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 747 — Secrets in CI/CD Pipelines
- Secret management services
- (also called "vaults") are specialized systems designed exclusively for storing, accessing, and managing secrets.
- Lesson 744 — Dedicated Secret Management Services
- secrets
- (like passwords, API keys, tokens).
- Lesson 642 — Environment Variables and SecretsLesson 740 — What Are Secrets and Why They MatterLesson 1448 — ConfigMaps and SecretsLesson 1458 — ConfigMaps and Secrets
- Security
- How protected must data be?
- Lesson 32 — Non-Functional Requirements as ConstraintsLesson 278 — Types of Proxies: Virtual, Protection, and RemoteLesson 671 — Lock Files and ReproducibilityLesson 686 — What is a Reproducible Build?Lesson 821 — Persisted Queries and Query WhitelistingLesson 1229 — Stakeholder Concerns as DriversLesson 1238 — What are Quality AttributesLesson 1248 — Quality Attribute Scenarios (+2 more)
- Security and compliance requirements
- define who can access what, how sensitive data is protected, and which laws or standards the software must obey.
- Lesson 129 — Security and Compliance Requirements
- Security and data integrity
- Where mistakes have serious consequences
- Lesson 42 — Balancing Debt and Delivery
- Security and privacy
- Prevent malicious or compromised third-party scripts from silently accessing sensitive APIs.
- Lesson 1076 — Permissions-Policy and Feature Control
- Security and Trust
- Anyone can verify that your published binary actually came from the claimed source code.
- Lesson 691 — Benefits and Trade-offs
- Security boundaries
- Breaching one tenant shouldn't compromise others
- Lesson 1528 — What is Multi-TenancyLesson 1837 — Zero-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 741 — The 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 1035 — Security by Design, Not ObscurityLesson 1046 — A05: Security Misconfiguration
- Security gateways
- filtering malicious traffic before it reaches your application
- Lesson 763 — Layered System Architecture
- Security improvement
- Centralized authentication policies and MFA enforcement
- Lesson 995 — Single Sign-On (SSO) Fundamentals
- Security incidents go unnoticed
- Breaches might occur without detection
- Lesson 1119 — Why Logging Matters
- Security investigations
- "Who read the admin password before the breach?
- Lesson 746 — Access Control and Audit Logging for Secrets
- Security note
- The client secret must be stored securely server-side—never in browser code or mobile apps.
- Lesson 1020 — Implicit and Client Credentials GrantsLesson 1732 — Remote Debugging and Attaching to Running Processes
- Security practices
- Authentication, authorization, encryption standards
- Lesson 1251 — Architecture Governance and Standards
- Security requirements
- (zero-trust model) → demands authentication at every boundary, encryption everywhere
- Lesson 1231 — Quality Attributes as Primary Drivers
- Security risk
- Malicious clients can craft expensive queries that overwhelm your server
- Lesson 821 — Persisted Queries and Query Whitelisting
- Security scan results
- "Zero critical vulnerabilities allowed"
- Lesson 704 — Pipeline Gates and Approvals
- Security teams
- – prioritize compliance, vulnerability management, access control
- Lesson 1812 — Identifying 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 1247 — Quality Attribute Trade-offs
- Security vulnerabilities
- expose user data or system integrity
- Lesson 1568 — What are Hotfixes and When to Use ThemLesson 1855 — The Cost of OverworkLesson 1878 — Evaluating Open Source Dependencies
- Security-critical dependencies
- Consider flexible versioning within patch ranges to get security fixes automatically
- Lesson 673 — Pinning vs Flexible Versioning
- See the exact line
- that called the next function
- Lesson 1731 — Navigating the Call Stack and Stack Frames
- Seed data
- – Pre-populated rows inserted before tests run.
- Lesson 543 — Database Fixtures and Test Data
- Seed random generators
- Set fixed seeds so random values repeat predictably
- Lesson 1722 — Controlling Environmental Variables
- Seeding
- Before tests run, populate your database with known, predictable data.
- Lesson 559 — E2E Test Data Management
- Selective Backporting
- Lesson 1573 — Managing Multiple Active Release Lines
- Selectivity
- measures how well an index narrows down results.
- Lesson 875 — Index Selectivity and CardinalityLesson 880 — Index Selection and Coverage
- Selectors
- let you find resources based on their labels.
- Lesson 1445 — Labels, Selectors, and AnnotationsLesson 1455 — ReplicaSets and Ensuring Desired StateLesson 1457 — Services and Network Abstraction
- Self
- – Participate in lifelong learning and promote an ethical approach to practice
- Lesson 1894 — The IEEE-CS/ACM Software Engineering Code of Ethics
- Self-descriptive messages
- Each request contains all information needed to understand it
- Lesson 759 — Uniform Interface Principle
- self-documenting
- .
- Lesson 437 — Choosing the Right AssertionsLesson 813 — Introspection and Schema Discovery
- Self-healing
- Restarts failed containers, replaces unresponsive ones
- Lesson 1442 — What is Kubernetes and Why Use ItLesson 1455 — ReplicaSets and Ensuring Desired State
- Self-hosted database
- You install PostgreSQL on your own VMs, configure clustering, schedule backups, apply security patches
- Lesson 1511 — What 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 1511 — What Are Managed Services
- Self-organizing teams
- produce the best architectures and designs
- Lesson 1580 — The Twelve Principles Behind the Agile Manifesto
- Semantic HTML
- `<button name="submit">` – uses meaningful attributes
- Lesson 563 — Locator Strategies and Best Practices
- Semantic Locks
- Have services place locks (like "pending" flags) on resources during saga execution.
- Lesson 1371 — Handling Saga Isolation Anomalies
- Semantic Versioning (SemVer)
- , a standardized system for communicating what kind of changes a library release contains.
- Lesson 669 — Semantic Versioning (SemVer)
- Sensitive information
- is a subset of personal data that carries higher risk if exposed.
- Lesson 1900 — Personal Data and Sensitive Information
- Separate facts from opinions
- Lead with objective observations, then share your professional judgment.
- Lesson 1920 — Speaking Up: When and How to Raise Concerns
- Separate ideas from identity
- Attack the argument, never the person.
- Lesson 1815 — Managing Disagreement Constructively
- Separate Identity from Work
- Lesson 1644 — Receiving Feedback with an Open Mind
- Separate infrastructure from logic
- "Set up database schema" + "Implement query layer"
- Lesson 1662 — Task 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 538 — Performance Considerations with Real Dependencies
- Separate them
- Tag or isolate integration tests using real APIs
- Lesson 533 — Testing with Real External APIs
- Separation of Concerns
- means organizing your software so that different parts handle different responsibilities, and each part focuses on *one thing* without overlapping with others.
- Lesson 166 — Separation of ConcernsLesson 168 — Don't Repeat Yourself (DRY)Lesson 169 — Keep It Simple, Stupid (KISS)Lesson 177 — Understanding Coupling: How Components Depend on Each OtherLesson 186 — Why Software Must Be Designed for ChangeLesson 215 — Interface Segregation Principle: No Client Should Depend on Unused MethodsLesson 1255 — What is Layered Architecture
- Sequence diagrams
- illustrate how objects or services interact over time, perfect for API calls or authentication flows.
- Lesson 1693 — Visual Aids and Diagrams
- Sequential consistency
- Operations appear in some total order, but not necessarily real-time order
- Lesson 1410 — Consistency Models and the Spectrum
- Sequential misses
- (like scanning through unique IDs) create consistent poor performance.
- Lesson 959 — Cache Hit Ratios and Effectiveness
- Serializable Snapshot Isolation (SSI)
- A modern technique tracking dependencies between transactions
- Lesson 908 — Serializable Isolation
- Serialization cost
- – Converting objects, timestamps, and stack traces into text consumes CPU cycles.
- Lesson 1127 — Logging Performance Considerations
- Server strain
- increases as databases must fetch and serialize all results at once
- Lesson 783 — Why Pagination Matters
- Server-side
- You tell the host you need a table, and they escort you wherever they think is best.
- Lesson 1324 — Client-Side vs Server-Side Discovery
- Server-side choices matter
- Selecting a cloud region powered by renewable energy versus coal makes a measurable difference.
- Lesson 1931 — Environmental 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 1324 — Client-Side vs Server-Side Discovery
- Server-side rendered pages
- where the server manages most state
- Lesson 1016 — Sessions vs Tokens: Choosing the Right Approach
- Serverless composition
- chains functions together into larger processes.
- Lesson 1523 — Serverless Composition and Orchestration
- Serverless computing
- is a cloud execution model where you write and deploy code without provisioning, configuring, or managing servers.
- Lesson 1519 — What 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 1494 — Testing Configuration Code
- Service
- acts as a permanent entry point for a group of pods.
- Lesson 1457 — Services and Network Abstraction
- Service A
- 500 lines managing the entire order lifecycle (placement, modification, fulfillment, cancellation)
- Lesson 1301 — Size and Scope Guidelines
- Service B
- 2000 lines handling payment processing with fraud detection, multiple payment gateways, and reconciliation
- Lesson 1301 — Size and Scope Guidelines
- Service Discovery
- Use dynamic service registries (like Consul, etcd, or Kubernetes DNS) rather than hardcoded addresses.
- Lesson 1116 — Fallacy 5: Topology Doesn't ChangeLesson 1323 — Service Discovery FundamentalsLesson 1337 — Trade-offs: Complexity vs. Flexibility
- 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 1171 — Understanding Service Level Indicators (SLIs)
- Service Level Objective (SLO)
- is a specific target value or range for a Service Level Indicator (SLI).
- Lesson 1174 — Service Level Objectives (SLOs): Setting Reliability Targets
- service mesh
- is a dedicated infrastructure layer that manages inter-service communication concerns *outside your application code*.
- Lesson 1318 — Service Mesh and Communication InfrastructureLesson 1507 — Cloud-Native Service Communication
- Service ownership
- Database alerts route to the DB team, API alerts to backend engineers
- Lesson 1161 — Alert Routing and Escalation Policies
- Service-to-service communication
- Microservices authenticating to each other
- Lesson 996 — Certificate-Based Authentication
- Services solve this problem
- by acting as a stable abstraction layer in front of a dynamic set of pods.
- Lesson 1447 — Services and Network Abstraction
- Session Creation
- If match succeeds, server creates an authenticated session
- Lesson 992 — Username and Password AuthenticationLesson 1007 — Session-Based Authentication Fundamentals
- Session data
- lives in Redis or similar external caches, not in-memory on servers
- Lesson 1477 — Handling State in Immutable Systems
- Session fixation
- Accepting user-supplied session identifiers instead of generating new ones after authentication.
- Lesson 1048 — A07: Identification and Authentication Failures
- Session ID Delivery
- Server sends session ID to client, typically in a cookie (`Set-Cookie: sessionId=7f3b9c2a.
- Lesson 1007 — Session-Based Authentication Fundamentals
- Session Validation
- Server looks up session ID in its session store, retrieves associated user data, and knows who's making the request
- Lesson 1007 — Session-Based Authentication Fundamentals
- Session-per-request
- is typical in web apps: one session for the entire HTTP request lifecycle.
- Lesson 950 — Session and Transaction Management
- Set a time limit
- for exploration before deciding what to keep
- Lesson 520 — Uncertain Requirements and Prototypes
- 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 949 — The Object Graph Problem
- Set clear objectives upfront
- Begin by stating what decision needs making or what problem you're solving.
- Lesson 1813 — Facilitating Technical Discussions
- Set expectations
- "I expect `sendEmail` to be called once with these arguments"
- Lesson 483 — Behavior Verification: Testing Interactions
- Set meaningful thresholds
- Color-code green/yellow/red zones so problems are obvious
- Lesson 1144 — Dashboard Design Principles
- Set review points
- Schedule a retrospective to evaluate the decision's outcomes
- Lesson 1816 — Making Decisions When Consensus Fails
- Set technical direction
- Choose technologies, define architecture patterns, and establish coding standards
- Lesson 1786 — What is a Tech Lead?
- Setter method
- Change the strategy after construction (runtime flexibility)
- Lesson 314 — Implementing Strategy with Composition
- Setter/Property Injection
- Dependencies set after construction
- Lesson 225 — DIP and Dependency Injection
- Setting priorities
- what gets built first, second, third
- Lesson 21 — The Product Owner and Business Stakeholders
- setup
- (runs before each test) and **teardown** (runs after each test) methods.
- Lesson 448 — Using Test Setup and Teardown MethodsLesson 459 — Test Setup and Teardown
- Setup Before Each Test
- Lesson 532 — Managing Test Database State
- Severity
- Is this truly an emergency, or can it wait for normal deployment?
- Lesson 1741 — Emergency Production Fixes
- Severity level
- Critical alerts go to senior engineers; warnings to team channels
- Lesson 1161 — Alert Routing and Escalation Policies
- Severity thresholds
- Your runbook might say "SEV-1 incidents lasting >30 minutes require director notification"
- Lesson 1169 — Escalation Paths
- Share institutional knowledge
- Don't let insights die with the old system
- Lesson 1784 — Extracting Reusable Knowledge from Legacy Systems
- Share it with others
- (family and friends can view or contribute)
- Lesson 73 — What Are Remote Repositories
- Shared abstractions
- (how we think about the system's parts)
- Lesson 1226 — Architecture as CommunicationLesson 1260 — Cross-Cutting Concerns in Layers
- Shared between containers
- Multiple containers can access the same volume
- Lesson 1429 — Container Storage and Volumes
- Shared communication channels
- (Slack, wikis, RFCs) accessible across departments
- Lesson 1830 — Collaboration 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 525 — Testing Cross-Module Communication
- Shared fate
- If services always deploy together or fail together, they're functionally coupled and should probably merge.
- Lesson 1312 — Getting Service Granularity Right
- Shared fixtures
- are set up once before all tests run and torn down once at the end.
- Lesson 542 — Shared vs Per-Test Fixtures
- Shared Layers
- Lesson 1524 — Managing Dependencies and Package Size
- Shared ownership
- Everyone cares about the final product, not just "their part"
- Lesson 24 — Cross-Functional TeamsLesson 1832 — Defining Quality Culture
- Shared quality culture
- Everyone feels responsible for maintaining standards
- Lesson 1833 — Collective Code Ownership
- Shared responsibility
- Everyone owns quality, deployment, and uptime
- Lesson 15 — DevOps 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 648 — The Team's Responsibility for CI
- Shared understanding
- across the team and stakeholders
- Lesson 1591 — Definition of DoneLesson 1609 — Story Points and Relative EstimationLesson 1610 — Planning Poker and Estimation Techniques
- Shell commands
- Deleting files uses `rm` on Unix but `del` or `Remove-Item` on Windows.
- Lesson 666 — Cross-Platform Build Considerations
- short
- and **focused on a single task**.
- Lesson 372 — Function Structure and LengthLesson 1621 — Review Checklists and Standards
- Short-Lived Branches
- If branches exist at all, they live for hours, not days.
- Lesson 83 — Trunk-Based Development
- Shotgun Surgery
- is the opposite: *one conceptual change requires modifying many unrelated classes*.
- Lesson 340 — Change Preventers: Divergent Change and Shotgun Surgery
- Should I keep trying
- Retrying might make things worse if the service is overloaded.
- Lesson 1103 — What Are Partial Failures?
- Should-style
- Lesson 444 — Naming Test Methods Clearly
- Show professionalism
- Demonstrates you care about quality
- Lesson 101 — Self-Reviewing Before Submission
- Show trade-offs
- What we gained and what we sacrificed
- Lesson 1252 — Communicating Architecture to Stakeholders
- Shrinking
- to minimize failing cases
- Lesson 613 — Property Testing Tools and FrameworksLesson 617 — Shrinking Fundamentals
- Signal completion
- (exit with appropriate status code)
- Lesson 1506 — Health Checks and Graceful Shutdown
- Signature
- Proves the token hasn't been modified using a secret key
- Lesson 1011 — Stateless Authentication with JWTs
- Silent consideration
- Each team member privately selects a card representing their story point estimate
- Lesson 1650 — Planning Poker and Consensus Estimation
- Simple cases
- For trivial differences, direct conversion might be clearer
- Lesson 258 — When to Use the Adapter Pattern
- Simple load balancing
- – requests can go to any available server
- Lesson 1504 — Stateless Application Design
- Simple notifications
- When you just need to broadcast "something happened" without complex coordination
- Lesson 299 — Mediator vs Observer: Choosing the Right Pattern
- Simple permission models
- When you have straightforward operations (read/write/delete) rather than complex business rules.
- Lesson 1026 — Access Control Lists (ACLs)
- Simple routing
- Most web frameworks handle path-based routing naturally
- Lesson 791 — URI Versioning (Path-Based)
- Simple systems
- small apps with predictable, consistent traffic
- Lesson 1157 — Threshold Selection: Static vs. Dynamic Baselines
- Simple, Stable Interfaces
- For rarely-changing interfaces with single consumers, the investment in contract infrastructure may exceed the risk of breakage.
- Lesson 553 — When to Use Contract Tests
- Simpler logic
- You don't need to reconstruct the cached representation
- Lesson 979 — Cache-Aside Invalidation Pattern
- Simplicity
- Uniform interfaces reduce complexity
- Lesson 755 — What REST Is and Why It MattersLesson 757 — Statelessness in RESTLesson 958 — What is Caching and Why It Matters
- Simplicity Over Complexity
- pragmatic decisions often favor simpler solutions that ship and work over complex "future-proof" designs that may never be needed.
- Lesson 1826 — Pragmatism and Trade-off Thinking
- Simplicity—maximizing work not done
- is essential
- Lesson 1580 — The Twelve Principles Behind the Agile Manifesto
- Simplification
- Hide complexity behind clean interfaces (Facade)
- Lesson 281 — Complexity vs Flexibility Trade-off
- Simplified debugging
- When something breaks, you know exactly what's running everywhere.
- Lesson 1478 — Benefits and Challenges of Immutability
- Simplified systems
- Less data means simpler storage, processing, and maintenance
- Lesson 1901 — Data Minimization Principle
- Simplified testing
- Test multiple packages together before committing
- Lesson 684 — Monorepo Dependency Management
- Simplifies future changes
- adding a field to the object doesn't change every call site
- Lesson 353 — Introduce 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 1038 — Minimize Attack Surface
- Simultaneous Reveal
- All cards are revealed at once—no anchoring bias!
- Lesson 1610 — Planning Poker and Estimation TechniquesLesson 1650 — Planning Poker and Consensus Estimation
- Single entry point
- One load balancer IP for many services
- Lesson 1463 — Ingress Controllers and HTTP Routing
- Single flattened table
- Simpler queries but repeated data and loss of object structure
- Lesson 933 — Data Type and Granularity Mismatches
- Single letters (outside loops)
- → `x`, `y`, `z` are fine for coordinates, but otherwise use `distance`, `velocity`, `userName`
- Lesson 366 — Avoiding 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 100 — Writing Small, Focused Changes
- Single point of failure
- If that person is compromised, the entire system is at risk
- Lesson 1037 — Separation of Duties
- Single Responsibility
- Each extracted function should do *one thing*.
- Lesson 385 — Breaking Down Complex Functions
- Single Responsibility Principle
- you've already learned—but applied specifically to interfaces.
- Lesson 215 — Interface 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 194 — What is the Single Responsibility PrincipleLesson 197 — Cohesion and SRP
- Single Responsibility Violations
- A test that needs dozens of setup lines or tests multiple unrelated behaviors?
- Lesson 507 — TDD 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 995 — Single Sign-On (SSO) Fundamentals
- Single source of truth
- Maintain one place where project status is always current
- Lesson 25 — Communication Channels and Stakeholder ManagementLesson 163 — Version Control for RequirementsLesson 1030 — Implementing Authorization in Applications
- Single Table Inheritance
- puts all classes in one table with a discriminator column.
- Lesson 932 — Inheritance 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 254 — Combining Creational Patterns
- Singleton pattern
- ensures a class has only one instance and provides a global point of access to it.
- Lesson 228 — The Singleton Pattern: Intent and Structure
- Singleton resources
- represent a single, specific item (like `/users/123`, `/products/456`, `/orders/789`)
- Lesson 777 — Singleton vs Collection Resources
- Size parameters
- Control how large/complex generated values become
- Lesson 614 — Input Generation Strategies
- Skepticism
- recognizing that most "revolutionary" tools create more problems than they solve
- Lesson 1845 — Embracing Emerging Technologies Responsibly
- Skill availability
- Team only knows Python, not Go
- Lesson 1232 — Constraints: Technical and Organizational
- Skill Gaps
- Writing tests before code requires a mental shift.
- Lesson 521 — Team Adoption and Learning Curve
- Skip "So that"
- when the benefit is completely obvious ("As a user, I want to log out")
- Lesson 144 — The User Story Format
- Skip Decorator
- if you only need one or two variations—subclassing or a simple parameter works
- Lesson 283 — When Structural Patterns are Overkill
- Skip persistence when
- Messages are transient notifications or easily regenerated data (cache invalidations, metrics)
- Lesson 1360 — Message Durability and Persistence
- Skip Proxy
- if you don't need lazy loading, access control, or remote communication—direct access is faster
- Lesson 283 — When Structural Patterns are Overkill
- Skip-level or cross-functional leads
- for broader organizational issues
- Lesson 1920 — Speaking 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 1843 — Knowledge Sharing Mechanisms
- Slack time
- (or "float") is how much a task can be delayed without impacting the project deadline.
- Lesson 1669 — Critical Path and Slack Time
- Sleep/delay statements
- (waiting is the opposite of fast)
- Lesson 461 — Test Speed and the Fast Test Pattern
- Slice 1
- Email-only registration (UI field → validation → database → confirmation)
- Lesson 1661 — Vertical Slicing
- SLO violations occur
- Any breach of your error budget or service level objectives signals something meaningful went wrong
- Lesson 1181 — When to Conduct a Postmortem
- Slow tests
- – Integration/E2E tests, run less frequently
- Lesson 463 — Separating Slow Tests from Fast Tests
- Slower deployments
- – uploading a 50MB package beats uploading 250MB
- Lesson 1524 — Managing 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 555 — The 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 408 — Why Pyramid Shape MattersLesson 417 — End-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 83 — Trunk-Based Development
- Small scope
- Only one commit to investigate, not dozens
- Lesson 629 — The Feedback Loop: Speed and Confidence
- Small-to-medium scale
- Managing individual ACLs becomes unwieldy with thousands of resources or complex organizational hierarchies.
- Lesson 1026 — Access Control Lists (ACLs)
- Small, stable systems
- with well-understood requirements and predictable technology stacks might be over-engineered by hexagonal architecture.
- Lesson 1271 — When to Use Hexagonal Architecture
- Smart comparison
- Ignore dynamic content (timestamps, animations) while catching real bugs
- Lesson 580 — Implementing Visual Testing Tools
- Smoke test
- Broad but shallow—touches many areas lightly
- Lesson 423 — Smoke and Sanity Tests: Quick Health Checks
- Smoke tests
- verify that the most critical, fundamental functionality of your software works: Does it start?
- Lesson 423 — Smoke and Sanity Tests: Quick Health ChecksLesson 430 — Testing in Time-Constrained Projects
- SMS-Based Codes
- The server sends a temporary code via text message.
- Lesson 994 — Multi-Factor Authentication (MFA)
- Snyk
- , and **licensee** automatically scan your dependency tree and identify license conflicts.
- Lesson 1877 — Verifying License Compatibility in PracticeLesson 1879 — Managing Open Source Dependencies
- Soak testing
- runs sustained load over hours/days to detect memory leaks or degradation.
- Lesson 1212 — Introduction to Load Testing
- Social network mapping
- Identifying relationships and associations between users
- Lesson 1909 — Surveillance and Tracking Ethics
- Societal ripples
- Could this recommendation algorithm amplify harm at scale?
- Lesson 1933 — Long-term Thinking and Digital Stewardship
- Software bugs
- Firewalls misconfigure, routing tables corrupt
- Lesson 1407 — Network Partitions in Practice
- Software Development Lifecycle (SDLC)
- is a framework that breaks down software creation into distinct, organized phases.
- Lesson 9 — What is the Software Development Lifecycle (SDLC)?
- Solution
- Ensure *all* resources use HTTPS URLs—either absolute (`https://.
- Lesson 1077 — Certificate Management and Mixed Content
- Solve organizational bottlenecks
- that no single team could address
- Lesson 1818 — What is a Staff Engineer?
- Solver
- archetypes parachute into critical problems wherever they emerge.
- Lesson 1819 — The Four Staff Archetypes
- Some projects use `YYYY.MM.MICRO`
- The year and month are mandatory, with an optional incrementing number for patches
- Lesson 1552 — Calendar Versioning and Alternative Schemes
- Some upfront thinking
- is essential: You need to know your domain, identify key boundaries, and understand major components.
- Lesson 512 — Emergent Design vs. Upfront Design
- Someone answers questions
- and mentors others working in that area
- Lesson 1834 — Individual Ownership and Accountability
- Someone drives improvements
- and knows the component's history and quirks
- Lesson 1834 — Individual Ownership and Accountability
- Someone reviews
- most changes to ensure quality and coherence
- Lesson 1834 — Individual Ownership and Accountability
- Someone wakes up
- when the alert fires at 3am (or coordinates the response)
- Lesson 1834 — Individual Ownership and Accountability
- Sound Technical Judgment
- Credibility grows when your assessments prove accurate.
- Lesson 1795 — Building Technical Credibility
- Source
- Which stakeholder or requirement document it came from
- Lesson 1236 — Documenting Architectural Drivers
- Spaced appropriately
- Not too dense, not too sparse
- Lesson 1659 — Identifying Milestones and Deliverables
- Spaghetti Code
- Tangled control flow with no clear structure
- Lesson 1781 — Identifying Design Patterns in Existing Code
- span ID
- (this specific step).
- Lesson 1146 — What is Distributed TracingLesson 1148 — Trace IDs and Correlation
- Speak up about risks
- You have an obligation to escalate safety concerns, even if it's uncomfortable
- Lesson 1919 — The Engineer's Duty to Public Safety and Welfare
- Special value injection
- Force inclusion of known-problematic inputs (0, -1, empty strings, etc.
- Lesson 616 — Controlling Input Distribution
- Specific
- "User sees success message" beats "User is notified"
- Lesson 148 — Writing Clear Acceptance CriteriaLesson 365 — Intention-Revealing NamesLesson 444 — Naming Test Methods ClearlyLesson 1184 — Identifying Actionable Improvements
- Specific enough
- to guide decisions (not "be excellent")
- Lesson 1831 — Codifying and Evolving Principles
- Specification drift
- happens when your actual API diverges from what the OpenAPI document describes—creating confusion, broken integrations, and eroded trust.
- Lesson 845 — Maintaining OpenAPI Specs Over Time
- Speculative generality
- happens when you design abstractions for flexibility you *might* need someday, but don't actually need now.
- Lesson 341 — Dispensables: Dead Code and Speculative Generality
- Speed
- Test doubles eliminate slow operations like network calls or disk I/O, keeping tests in milliseconds.
- Lesson 464 — What are Test Doubles and Why Use ThemLesson 720 — Rollback Strategies and MechanismsLesson 1000 — Cryptographic Hash Functions for Password Storage
- Speed up tests
- Avoid slow operations like database queries or API calls
- Lesson 466 — Stubs: Providing Canned Responses
- Speed up writes
- Fewer rows mean faster index maintenance during `INSERT`, `UPDATE`, and `DELETE` operations
- Lesson 876 — Partial and Filtered Indexes
- Spell out words completely
- `/usr` might save three characters, but `/users` communicates clearly to *everyone*.
- Lesson 778 — Naming Conventions for Resources
- Spies
- observe and record.
- Lesson 470 — Distinguishing Between Mock TypesLesson 472 — When to Use Each Type of Test DoubleLesson 476 — The Test Double PyramidLesson 477 — Interaction-Based vs State-Based Testing
- Spies and mocks
- sit at the top because they couple your tests most tightly to implementation details.
- Lesson 476 — The Test Double Pyramid
- spike
- a short, time-boxed exploration where you write throwaway code without tests.
- Lesson 505 — Dealing with Uncertainty in TDDLesson 1663 — Identifying Unknowns and Spikes
- Split
- when a single context serves multiple stakeholders with conflicting needs or when the ubiquitous language becomes muddled.
- Lesson 1287 — Evolving Bounded Contexts
- Split by functionality
- Break "Implement user dashboard" into "Build dashboard layout" and "Connect dashboard data"
- Lesson 1662 — Task Sizing and the Two-Day Rule
- Split or combine
- alerts to better match actual operational concerns
- Lesson 1162 — Alert Evaluation: Regular Review and Refinement
- Splitting large stories
- Break down epics or oversized user stories into implementable chunks
- Lesson 157 — Backlog 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 1854 — Allyship and Advocacy in Engineering
- Spoofing
- Malicious services pretending to be legitimate ones
- Lesson 1115 — Fallacy 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 1151 — Analyzing Traces for Performance Issues
- Spring Cloud Contract
- integrates with the Spring ecosystem.
- Lesson 551 — Contract 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 1586 — Sprints in Scrum
- Sprint Backlog
- (selected items + implementation plan)
- Lesson 1601 — Sprint Planning: Purpose and Structure
- Sprint Goal
- (the "why" behind this sprint's work)
- Lesson 1601 — Sprint Planning: Purpose and Structure
- Sprint Planning
- , selecting Product Backlog items they believe they can complete.
- Lesson 1586 — Sprints in Scrum
- Sprint Retrospective
- to reflect on how they can improve their process.
- Lesson 1586 — Sprints in ScrumLesson 1590 — Sprint 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 1586 — Sprints in ScrumLesson 1589 — Sprint ReviewLesson 1590 — Sprint 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 468 — Spies: Recording Interactions for VerificationLesson 470 — Distinguishing 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 544 — Fixture Files and Data Formats
- SQL Injection
- is the most notorious.
- Lesson 1044 — A03: InjectionLesson 1053 — What Are Injection Attacks
- SRP
- enforces this by asking: "Does this class have more than one reason to change?
- Lesson 197 — Cohesion and SRP
- SSL/TLS termination
- Centralized certificate management
- Lesson 1463 — Ingress Controllers and HTTP Routing
- stable
- and unlikely to add states
- Lesson 311 — State Pattern vs Conditional LogicLesson 1274 — Entities: Enterprise Business Rules
- Stable network identities
- (predictable hostnames that don't change)
- Lesson 1460 — StatefulSets for Stateful Applications
- Stable, simple code
- A date formatter used once that hasn't changed in years doesn't need abstraction layers.
- Lesson 206 — When to Apply OCP
- Stack Trace
- – The path of function calls that led to the error
- Lesson 1714 — Reading Error Messages and Stack Traces
- Staff Engineer
- (or "Staff+" engineer, which includes Principal, Distinguished, and Fellow levels) operates at a different scale entirely.
- Lesson 1818 — What is a Staff Engineer?
- Stage 1
- Linting, static analysis, unit tests (seconds to 1-2 minutes)
- Lesson 702 — Fast Feedback Loops
- Stage 3
- End-to-end tests, performance tests (tens of minutes to hours)
- Lesson 702 — Fast Feedback Loops
- Staged rollout
- Update the secret provider first, then gradually update all consumers
- Lesson 745 — Secret Rotation and Lifecycle Management
- Staging
- (or QA/Pre-Production) – a production-like environment for final validation
- Lesson 705 — Environment Promotion Strategy
- Staging Area
- When you're happy with some changes, you move them here to prepare them for saving.
- Lesson 46 — The Three States: Working Directory, Staging Area, and RepositoryLesson 47 — Staging Changes with 'git add'
- Staging Stage
- – Deploy to a production-like environment for final validation
- Lesson 693 — The Deployment Pipeline Concept
- Stakeholder priorities differ
- Operations wants reliability; Product wants features; Finance wants low costs
- Lesson 1235 — Driver Conflicts and Trade-offs
- Stakeholder shifts
- New leadership brings different priorities.
- Lesson 1237 — Evolving 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 156 — Stakeholder-Driven Prioritization
- stakeholders
- (clients, users, business owners) define what they need.
- Lesson 10 — SDLC Phases: Requirements, Design, ImplementationLesson 19 — Who Are Stakeholders?Lesson 1229 — Stakeholder Concerns as Drivers
- Stale-While-Revalidate
- Serve slightly stale data while one background process refreshes it.
- Lesson 983 — Cache Stampede and Thundering Herd
- Stand up (if possible)
- Physical discomfort naturally encourages brevity.
- Lesson 1604 — Making Standups Work
- standard deviation
- of your measurements.
- Lesson 1202 — Statistical Significance in BenchmarkingLesson 1652 — Three-Point Estimation
- Standard methods
- Everyone uses the same HTTP verbs (GET, POST, PUT, DELETE) with the same meanings
- Lesson 759 — Uniform Interface Principle
- standards
- shared patterns, approved technologies, and guidelines that create consistency while still allowing teams autonomy.
- Lesson 1251 — Architecture Governance and StandardsLesson 1621 — Review Checklists and Standards
- Standards and policies
- All APIs must follow OpenAPI 3.
- Lesson 1232 — Constraints: Technical and Organizational
- Standing up
- Encourages brevity (though remote teams skip this)
- Lesson 1603 — Daily Standup: Goals and Format
- start
- until Task A **finishes**.
- Lesson 1668 — Types of Dependencies: FS, SS, FF, SFLesson 1812 — Identifying and Engaging Stakeholders
- Start conservative
- It's easier to tighten an SLO later than to loosen one that customers depend on.
- Lesson 1178 — Setting Realistic and Achievable SLOs
- Start fresh with TDD
- Now that you know what you're building, write tests first for the real implementation
- Lesson 520 — Uncertain Requirements and Prototypes
- Start normalized
- Begin with a well-normalized design (usually 3NF).
- Lesson 868 — Balancing Normalization and Performance
- Start small
- Build a basic version first to test assumptions before committing fully
- Lesson 7 — Uncertainty and Risk Management
- Start with the problem
- What driver or constraint forced this decision?
- Lesson 1252 — Communicating Architecture to Stakeholders
- Start, Stop, Continue
- What should we start doing?
- Lesson 1606 — Sprint Retrospective: Continuous Improvement
- state file
- or database that records:
- Lesson 1469 — State Management in IaCLesson 1483 — Terraform State Management
- State machine replication
- Ensuring all replicas apply operations in the same order
- Lesson 1414 — The 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 1469 — State 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 1478 — Benefits and Challenges of Immutability
- State pattern
- allows an object to alter its behavior when its internal state changes.
- Lesson 308 — The State Pattern: Definition and IntentLesson 313 — Strategy vs State Pattern
- state verification
- checking that functions return the right values or that objects end up in the correct state.
- Lesson 483 — Behavior Verification: Testing InteractionsLesson 487 — Test Maintainability and Verification Style
- State your reasoning
- Explain which factors you weighted most heavily and why
- Lesson 1816 — Making Decisions When Consensus Fails
- State-based approach
- Lesson 477 — Interaction-Based vs State-Based Testing
- State-based assertions
- Test the UI state after each action.
- Lesson 566 — Handling Dynamic and Conditional UI
- State-based testing
- checks the *result* of an operation.
- Lesson 477 — Interaction-Based vs State-Based Testing
- State-controlled transitions
- Each State object decides its own successor state based on conditions or actions.
- Lesson 310 — State 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 1891 — Employee Agreements and Intellectual Property
- Stateful connections
- Unlike REST's stateless requests, subscriptions tie clients to specific server instances.
- Lesson 822 — Subscription Scalability Challenges
- Stateful processes
- Applications with in-memory caches or websocket connections bend Factor VI for performance reasons
- Lesson 754 — Applying Twelve-Factor Principles in Practice
- Stateful workflows
- requiring persistent connections (WebSockets, database connection pooling) don't fit the stateless function model well.
- Lesson 1527 — When Serverless is and Isn't Appropriate
- stateless application
- treats each request as independent, storing no user-specific data between requests.
- Lesson 1382 — Stateless Application Design for ScalabilityLesson 1393 — Stateless Application DesignLesson 1504 — Stateless Application Design
- Statelessness
- (each request contains all needed information)
- Lesson 755 — What REST Is and Why It MattersLesson 757 — Statelessness in RESTLesson 761 — Self- Descriptive MessagesLesson 763 — Layered System Architecture
- Statement coverage
- Which statements ran
- Lesson 585 — What Code Coverage MeasuresLesson 586 — Line Coverage vs Statement Coverage
- Statement-style
- Lesson 444 — Naming Test Methods Clearly
- Static accessor method
- Provides global access to that instance, creating it if it doesn't exist yet (lazy initialization).
- Lesson 228 — The Singleton Pattern: Intent and Structure
- Static analysis
- (linting, type checking) — the base
- Lesson 412 — The Testing Trophy AlternativeLesson 1061 — Testing for Injection Vulnerabilities
- Static analysis tools
- go deeper, detecting potential bugs, security vulnerabilities, unused variables, unreachable code, and logic errors.
- Lesson 391 — Linters and Static Analysis ToolsLesson 392 — Code Formatters and Prettier
- static content
- images, CSS, JavaScript, videos—anything that doesn't change per user.
- Lesson 985 — CDN and Edge CachingLesson 1100 — The Fallback Pattern
- Static instance variable
- Holds the single instance of the class itself.
- Lesson 228 — The Singleton Pattern: Intent and Structure
- Static linking
- if users can replace the LGPL component
- Lesson 1874 — LGPL and Weak Copyleft Compatibility
- Static thresholds
- are fixed values that never change.
- Lesson 1157 — Threshold Selection: Static vs. Dynamic Baselines
- Statistical significance
- over time rather than perfect accuracy
- Lesson 1199 — Profiling in Production vs Development
- Statistics
- are metadata about your data: how many rows, distribution of values, histogram of common values.
- Lesson 877 — Index Maintenance and StatisticsLesson 885 — Statistics and Query Planning
- Status
- Proposed, accepted, superseded, deprecated
- Lesson 1698 — What Are Architecture Decision Records (ADRs)?
- Status badges
- are visual indicators embedded in your README or project dashboard.
- Lesson 643 — Build Notifications and ReportingLesson 657 — Build Health Metrics and Visibility
- Status checks
- Ensure tests pass before allowing merges
- Lesson 89 — Branch Naming Conventions and Policies
- Stay compatible
- with other software that's also changing
- Lesson 4 — Time: Maintenance Over Initial Development
- Stay current
- with relevant technologies, security practices, and industry standards
- Lesson 1897 — Product Quality and Professional Competence
- Step Into
- When the current line contains a function call, enter that function and pause at its first line.
- Lesson 1728 — Debugger Fundamentals: Breakpoints and Execution Control
- Step Out
- Finish executing the current function and pause when returning to the caller.
- Lesson 1728 — Debugger Fundamentals: Breakpoints and Execution Control
- Step Over
- Execute the current line and pause at the next line in the same function.
- Lesson 1728 — Debugger Fundamentals: Breakpoints and Execution Control
- Step-by-Step Instructions
- Break complex tasks into numbered, sequential actions.
- Lesson 1681 — User Guides and Tutorials
- Steps
- The actual commands—install dependencies, run tests, build artifacts
- Lesson 638 — Build Configuration Files
- Stolen by attackers
- who gain read access to your repository
- Lesson 740 — What Are Secrets and Why They Matter
- Stop accepting new requests
- (fail readiness checks immediately)
- Lesson 1506 — Health Checks and Graceful Shutdown
- Stop and refactor
- This rule prevents premature abstraction while catching repetition before it spreads too far.
- Lesson 329 — When to Refactor
- Stop the line
- When a build breaks, the person who committed the breaking change owns the fix.
- Lesson 653 — Fixing Broken Builds Immediately
- Storage
- Charged by data volume (GB/TB per month) and operation count (read/write requests).
- Lesson 1535 — Understanding Cloud Cost Models
- Storage backend
- that indexes logs for fast searching (Elasticsearch, Splunk, CloudWatch Logs)
- Lesson 1125 — Centralized Logging
- Storage overhead
- Same data exists in multiple places
- Lesson 1309 — Data Duplication vs Data Coupling Trade-offs
- Storage throttling
- Limit disk I/O operations per second (IOPS) and total storage capacity per tenant.
- Lesson 1532 — Resource Allocation and Noisy Neighbors
- Storage volumes
- They can read/write to the same mounted volumes
- Lesson 1444 — Pods: The Atomic Unit of Deployment
- StorageClass
- Defines *how* storage is provisioned (which cloud provider, performance tier, replication policy)
- Lesson 1449 — Volumes and Persistent StorageLesson 1459 — Persistent Volumes and Claims
- Store a Memento
- before executing, capturing the receiver's state
- Lesson 302 — Implementing Undo with Memento and Command
- Store artifacts
- in artifact repositories (we'll cover these next)
- Lesson 665 — Build Artifacts and Output
- Store state client-side
- Use signed tokens (like JWTs) that contain user information
- Lesson 1393 — Stateless Application Design
- Store state externally
- Use shared databases, Redis, or other external stores accessible by any server
- Lesson 1393 — Stateless Application Design
- Stored XSS
- Malicious script is saved in your database
- Lesson 1062 — Cross-Site Scripting (XSS) Overview
- Stored XSS (Persistent XSS)
- occurs when malicious script is saved permanently in the target system—typically in a database.
- Lesson 1063 — Types of XSS: Stored, Reflected, and DOM-Based
- 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 865 — Strategic Denormalization
- Strategic visibility
- Making problems and solutions visible to the right people
- Lesson 1820 — Operating at Staff+ Scale
- Strategies to reduce impact
- Lesson 1521 — Cold Starts and Warm Instances
- Strategy
- Limit the number of stored mementos (keep only the last 20 actions) or use a circular buffer that overwrites old snapshots.
- Lesson 303 — Memento Serialization and Performance ConcernsLesson 313 — Strategy vs State PatternLesson 317 — Strategy vs Template Method Trade-offs
- Strategy interface
- – defines the method signature all algorithms must implement
- Lesson 312 — Strategy Pattern: Encapsulating Algorithms
- Strategy pattern
- is a design pattern that encapsulates different algorithms or behaviors into separate classes, all implementing the same interface.
- Lesson 205 — The Strategy Pattern and OCPLesson 312 — Strategy Pattern: Encapsulating AlgorithmsLesson 313 — Strategy vs State PatternLesson 315 — Template Method Pattern: Skeleton AlgorithmsLesson 1560 — Implementing Feature Flags in Code
- Stream reads
- Retrieve all events for a specific stream to rebuild one entity's state
- Lesson 1348 — Event Store Design
- streams
- , **middleware**, and **UI components**.
- Lesson 270 — Decorator in Practice: Streams, Middleware, and UI EnhancementLesson 1348 — Event Store Design
- Strengths
- Low latency (milliseconds), sophisticated routing (exchanges, bindings), easy to set up, strong support for at-most/at-least-once delivery.
- Lesson 1365 — Choosing a Message Broker: RabbitMQ, Kafka, and Others
- Stress testing
- (not yet covered) pushes beyond normal limits to find breaking points.
- Lesson 1212 — Introduction to Load Testing
- Strict allowlisting
- Only permit predefined, safe values
- Lesson 1057 — Command Injection and OS Command Execution
- Stricter validation
- – previously accepted values now fail
- Lesson 847 — Breaking vs Non-Breaking Changes
- Strong consistency
- After a write completes, all subsequent reads see that write.
- Lesson 922 — Understanding Eventual ConsistencyLesson 968 — Write-Through CachingLesson 1309 — Data Duplication vs Data Coupling Trade-offsLesson 1376 — When to Use OrchestrationLesson 1404 — Consistency in Replicated Systems
- Structural patterns
- Watch for wrapper classes (Adapter, Decorator, Facade)
- Lesson 1781 — Identifying Design Patterns in Existing Code
- Structure example
- Lesson 1690 — The Inverted Pyramid Structure
- Structure reduces friction
- Use consistent formats, templates, or facilitation guides so people know what to expect.
- Lesson 1645 — Creating Feedback Loops in Teams
- Structured check-ins
- at 30/60/90 days ensure no one falls through the cracks.
- Lesson 1853 — Inclusive Hiring and Onboarding Practices
- Structured feedback windows
- Give 48-72 hours for written feedback before finalizing decisions, preventing "meeting-driven" outcomes.
- Lesson 1851 — Inclusive Communication and Collaboration
- Structured interviews
- use identical questions for all candidates, making comparisons fairer.
- Lesson 1853 — Inclusive Hiring and Onboarding Practices
- Structured Reflection
- Common formats include:
- Lesson 1606 — Sprint Retrospective: Continuous Improvement
- stub
- is a test double that provides hardcoded answers to method calls made during tests.
- Lesson 466 — Stubs: Providing Canned ResponsesLesson 470 — Distinguishing Between Mock Types
- Stub network calls
- Replace external dependencies with fixed responses
- Lesson 1722 — Controlling Environmental Variables
- Stubbed or mocked services
- run fast and reliably, but don't catch real integration issues like authentication changes or API deprecations.
- Lesson 576 — Handling External Services
- stubs
- return fake data and **fakes** provide simplified working implementations, spies are about **observation and verification**.
- Lesson 468 — Spies: Recording Interactions for VerificationLesson 470 — Distinguishing Between Mock TypesLesson 472 — When to Use Each Type of Test DoubleLesson 476 — The Test Double Pyramid
- Subject line
- Keep it to 50 characters or less
- Lesson 110 — The 50/72 Rule and Message FormattingLesson 111 — Commit Message Body: The Why, Not the What
- Subscribers
- (observers) register their interest and receive updates automatically
- Lesson 304 — The Observer Pattern: Definition and IntentLesson 1358 — Publish-Subscribe Pattern
- Subselect Fetching
- uses two queries: one for the main objects, then a second with a `WHERE id IN (.
- Lesson 945 — Eager Loading and Fetch Strategies
- Subsequent Requests
- Client automatically includes session ID in every request (browser sends cookie)
- Lesson 1007 — Session-Based Authentication Fundamentals
- Subsequent stages
- retrieve and deploy that same artifact
- Lesson 703 — Artifact Management in Pipelines
- Substitutability
- Swap implementations easily (Adapter, Bridge, Proxy)
- Lesson 281 — Complexity vs Flexibility Trade-off
- Subtypes can
- Lesson 214 — LSP and Exception Handling
- Subtypes cannot
- Lesson 214 — LSP and Exception Handling
- Suite organization
- Test suites bundle multiple test classes together.
- Lesson 443 — Test 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 1636 — Running Technical Discussions
- Summarize what you've tried
- "Restarted services, verified database connectivity, checked recent deploys"
- Lesson 1169 — Escalation Paths
- sunset date
- is the final day a version remains available.
- Lesson 794 — Managing Multiple API VersionsLesson 849 — Deprecation Policies and Timelines
- Support Burden
- Each active version needs maintenance, bug fixes, and potentially security patches
- Lesson 851 — Managing Multiple API Versions
- Support multiple API versions
- Your SDK might need to support both API v2 and v3 simultaneously during transition periods
- Lesson 857 — SDK Versioning and Compatibility
- Support multiple versions
- Producers may emit both old and new formats during transitions
- Lesson 1343 — Event Schemas and Contracts
- Support Teams
- must understand new features, known issues, and troubleshooting steps *before* customer tickets arrive.
- Lesson 1546 — Coordinating with Stakeholders
- Support tiers
- Clarify which versions get bug fixes, security patches, or new features.
- Lesson 676 — Deprecation and Version Lifecycle
- Supporting career development
- Providing honest feedback, writing fair performance reviews, and advocating for deserving colleagues
- Lesson 1898 — Collegiality and Fair Treatment
- Surface ambiguities
- When stakeholders see it, they realize what they forgot to mention
- Lesson 138 — Prototyping for Requirements Discovery
- Surface conflicts explicitly
- – Don't hide disagreements; document where priorities clash
- Lesson 156 — Stakeholder-Driven Prioritization
- Surface the conflict explicitly
- document which drivers are in tension
- Lesson 1235 — Driver Conflicts and Trade-offs
- Surveys
- work well when you need breadth across many stakeholders or want quantifiable data.
- Lesson 1674 — Understanding Stakeholder Needs and Concerns
- Sustainable development pace
- that can be maintained indefinitely
- Lesson 1580 — The Twelve Principles Behind the Agile Manifesto
- Sustainable growth
- Adding features doesn't exponentially slow your suite
- Lesson 408 — Why Pyramid Shape Matters
- Swagger UI
- and **Redoc** generate this experience automatically from your API specifications (like OpenAPI).
- Lesson 836 — Interactive Documentation ToolsLesson 844 — Interactive API Documentation
- Swarm on it
- If the breaking author is stuck, other team members jump in to help.
- Lesson 653 — Fixing Broken Builds Immediately
- Swarm the constraint
- Multiple team members collaborate to clear the highest-priority blocked item first.
- Lesson 1597 — Identifying and Resolving Bottlenecks
- Switch implementations
- Use feature flags or configuration to route traffic to the new code
- Lesson 1768 — Branch by Abstraction
- Symptoms
- What users actually experience (slow page loads, errors, failed transactions)
- Lesson 1154 — Alert Fundamentals: Symptoms vs. CausesLesson 1712 — Understanding the Problem Before Debugging
- Synchronization complexity
- Need mechanisms (events, messaging) to keep copies updated
- Lesson 1309 — Data Duplication vs Data Coupling Trade-offs
- Synchronized Methods
- Use locks so only one thread can execute the getInstance method at a time.
- Lesson 229 — Implementing Singleton: Thread Safety Concerns
- Synchronous (Request-Response)
- Service A calls Service B and waits for an immediate response before continuing.
- Lesson 1313 — Synchronous vs Asynchronous Communication
- Synchronous blocking
- Waiting for one operation to complete before starting the next
- Lesson 1198 — I/O and Network Profiling
- Synchronous logging
- blocks your application thread until the log is written.
- Lesson 1127 — Logging 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 1402 — Leader-Follower Replication
- Synchronous writing
- Don't buffer logs; write them instantly so if your app crashes, you see what happened
- Lesson 1128 — Logging in Local Development
- Synchronous-only communication
- prevents asynchronous processing patterns
- Lesson 1225 — The Cost of Architectural Mistakes
- 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 137 — Document Analysis and System Archaeology
- System architecture matters
- A monolithic application with complex business logic benefits from heavy unit testing.
- Lesson 413 — Adapting the Pyramid to Your Context
- System capabilities
- – What can your architecture realistically deliver given current technology and design?
- Lesson 1178 — Setting Realistic and Achievable SLOs
- System integration
- A function that's 10% faster in isolation might not matter if it consumes only 0.
- Lesson 1201 — Microbenchmarks and Their Limitations
- System libraries
- Ensure consistent versions of shared libraries (SSL, compression, etc.
- Lesson 689 — Controlling the Build Environment
- System state
- Shared files, databases, caches, or global variables might be in different states between runs.
- Lesson 1722 — Controlling Environmental Variables
- System-level issues
- (file handle exhaustion, network problems, OS-level conflicts) exist outside your code.
- Lesson 1735 — Debugger 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 1666 — What Are Project Dependencies
- Systemic Inequalities
- Algorithms trained on unequal societies naturally reflect those inequalities.
- Lesson 1910 — What is Algorithmic Bias
T
- T - Tampering
- Lesson 1080 — STRIDE Threat Classification
- T-shirt sizing
- (S, M, L, XL) for quick, rough estimates
- Lesson 1610 — Planning 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 916 — Row-Level vs Table-Level Locking
- Tables
- organize comparison data, configuration options, or parameter lists more efficiently than prose.
- Lesson 1693 — Visual Aids and Diagrams
- Take time before responding
- If a comment stings, step away for 10 minutes
- Lesson 1619 — Receiving Code Review Feedback
- Taking calculated risks
- Backing someone for a role they're 80% ready for, then supporting them through it.
- Lesson 1801 — Sponsorship and Career Development
- Talent flexibility
- Teams can work in languages they know best without forcing organization-wide standardization.
- Lesson 1335 — Technology Heterogeneity and Experimentation
- Task diversity
- Mix types of work to avoid bottlenecks (don't give everyone backend tasks if you need UI work)
- Lesson 1602 — Effective Sprint Planning Practices
- Task-focused
- "As a customer, I need to search for products by category"
- Lesson 126 — User Requirements
- Task-to-task dependencies
- are the most common: "We can't start database migration testing until we finish writing the migration scripts.
- Lesson 1666 — What Are Project Dependencies
- Tasks
- are individual units of work (install package, copy file, restart service).
- Lesson 1490 — Ansible Fundamentals
- TCP Socket
- Attempt to open a connection on a port
- Lesson 1450 — Health Checks: Liveness and Readiness Probes
- Teaching and Sharing
- Technical credibility strengthens when you help others succeed.
- Lesson 1795 — Building Technical Credibility
- Team and Organizational Factors
- Team size, skill sets, support capacity, or organizational standards that influenced the situation.
- Lesson 1701 — Writing Effective Context Sections
- Team attrition
- experienced engineers leave, taking institutional knowledge
- Lesson 1855 — The Cost of Overwork
- Team bottlenecks
- Multiple teams are blocked waiting to deploy shared code
- Lesson 1330 — Microservices Are Not a Goal
- Team boundaries
- Cannot modify the billing team's services
- Lesson 1232 — Constraints: Technical and Organizational
- Team Cohesion
- Review conversations build shared standards and vocabulary.
- Lesson 1616 — The Purpose and Value of Code Review
- Team conflicts
- Multiple teams constantly clash over the same codebase
- Lesson 1336 — Migrating 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 413 — Adapting the Pyramid to Your Context
- Team Context
- A junior team benefits from more comprehensive tests as guardrails.
- Lesson 427 — Finding the Testing Sweet Spot
- Team experience
- Junior engineers need more detailed tasks; senior engineers can work from higher-level descriptions
- Lesson 1665 — Balancing Granularity
- Team expertise
- Different teams may maintain services using styles they know best
- Lesson 827 — Mixing API Styles in Practice
- Team expertise is limited
- (managed services reduce operational burden)
- Lesson 1541 — Evaluating Lock-in vs Time-to-Market Trade-offs
- Team familiarity
- Most developers know simple REST; HATEOAS requires education
- Lesson 797 — HATEOAS Trade-offs and Maturity Models
- Team knowledge fades
- People who understood certain decisions leave
- Lesson 41 — Code Evolution and Entropy
- Team lead
- You write less code, focusing on technical direction, unblocking others, and ensuring consistency.
- Lesson 1793 — The Tech Lead's Scope
- Team Level
- If knowledge silos meant only one person understood the system, implement knowledge-sharing practices or documentation standards.
- Lesson 1748 — Preventing Recurrence with Systemic Fixes
- Team morale and retention
- crater under sustained overwork.
- Lesson 1856 — Sustainable Pace and the 40-Hour Week
- Team readiness
- Dev-prod parity (Factor X) requires infrastructure investment; prioritize it after securing team buy-in
- Lesson 754 — Applying Twelve-Factor Principles in Practice
- Team scalability
- Different developers can work on modules without stepping on each other's toes
- Lesson 167 — Abstraction and Information Hiding
- Team Size
- Small teams (2-5 developers) often thrive with simpler strategies like GitHub Flow or Trunk- Based Development.
- Lesson 88 — Choosing a Strategy for Your Team
- Team Size and Location
- Lesson 16 — Choosing an SDLC Model for Your Project
- Team understanding
- When you're debugging at 2 AM or onboarding a new engineer, simplicity is a gift.
- Lesson 1825 — Simplicity Over Complexity
- Team velocity killers
- When existing debt already slows you down
- Lesson 42 — Balancing 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 1666 — What Are Project Dependencies
- teardown
- (runs after each test) methods.
- Lesson 448 — Using Test Setup and Teardown MethodsLesson 459 — Test Setup and Teardown
- Teardown After Each Test
- Lesson 532 — Managing Test Database State
- Teardown step
- Stop and remove all provisioned resources (usually in a `finally` or `post` block so it runs even if tests fail)
- Lesson 539 — CI/CD Integration with Real Dependencies
- tech lead
- is someone who simultaneously writes code *and* guides the technical direction of a team or project.
- Lesson 1786 — What is a Tech Lead?Lesson 1787 — Tech Lead vs Engineering ManagerLesson 1818 — What is a Staff Engineer?Lesson 1819 — The Four Staff Archetypes
- Tech Talks
- are scheduled presentations where engineers share deep dives into technologies, architecture decisions, or lessons learned.
- Lesson 1843 — Knowledge Sharing Mechanisms
- Technical
- Must use Java 11, database can handle max 1000 requests/second, system must run on Linux servers.
- Lesson 132 — Constraints and Assumptions
- Technical architecture decisions
- Which databases, frameworks, or services to use
- Lesson 127 — System Requirements
- Technical audiences
- Written docs, architecture diagrams, PR reviews
- Lesson 1676 — Communication Strategies for Different Stakeholders
- Technical complexity
- Dependencies, edge cases, and integration challenges that aren't visible upfront
- Lesson 1648 — Why Estimation is Hard
- Technical credibility
- Your past work and judgment earn respect
- Lesson 1820 — Operating at Staff+ Scale
- Technical debt
- is a metaphor that compares software development shortcuts to financial debt.
- Lesson 36 — What is Technical DebtLesson 1855 — The Cost of Overwork
- Technical debt metrics
- Is legacy code shrinking as planned?
- Lesson 1810 — Measuring Progress Toward Vision
- Technical safeguards
- Encryption, audit logs, DLP systems
- Lesson 1889 — Trade Secrets: Definition and Protection
- Technology
- Tools, frameworks, infrastructure, dependencies
- Lesson 1744 — Fishbone Diagrams for Systemic Issues
- Technology constraints
- You're stuck with outdated tech for everything
- Lesson 1336 — Migrating from Monolith to Microservices
- Technology diversity needs
- Different services genuinely require different tech stacks
- Lesson 1330 — Microservices 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 1335 — Technology Heterogeneity and Experimentation
- Technology Independence
- Different services can use different programming languages, frameworks, or storage technologies based on their specific needs.
- Lesson 1294 — Defining 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 413 — Adapting the Pyramid to Your Context
- Technology maturity
- New tools, frameworks, or platforms emerge.
- Lesson 1808 — Evolving Vision Over Time
- Technology obsolescence
- The language, framework, or platform is unsupported or unhireable.
- Lesson 1765 — The Economics of Legacy Refactoring
- Technology Stack
- List languages, frameworks, infrastructure, and third-party dependencies with version information.
- Lesson 1682 — Architecture Documentation
- Technology stacks
- Approved languages, frameworks, databases
- Lesson 1251 — Architecture Governance and Standards
- Technology-agnostic
- No dependencies on frameworks, databases, or external libraries
- Lesson 1274 — Entities: Enterprise Business Rules
- Template Method Pattern
- lets you create a "recipe" or "skeleton" for an algorithm in a base class.
- Lesson 315 — Template Method Pattern: Skeleton Algorithms
- Temporal decoupling
- (consumers can replay past events)
- Lesson 1357 — Message 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 959 — Cache Hit Ratios and Effectiveness
- Temporary credentials
- Generate short-lived tokens specifically for each pipeline run
- Lesson 747 — Secrets in CI/CD Pipelines
- Tenant-based partitioning
- (multi-tenant SaaS): All data for `company_xyz` stays together on one node
- Lesson 1399 — Partitioning by Entity or Tenant
- Test
- thoroughly (fewer paths mean fewer test cases)
- Lesson 382 — What is Code Complexity?Lesson 533 — Testing with Real External APIsLesson 1777 — Migrating Functionality Incrementally
- Test and Experiment
- Lesson 137 — Document Analysis and System Archaeology
- Test and mark
- Git checks out a commit halfway between good and bad.
- Lesson 119 — Finding Bugs with Git Bisect
- Test brittleness
- If tests break whenever unrelated code changes, coupling is high
- Lesson 183 — Measuring Coupling and Cohesion in Practice
- Test coverage
- Can you verify changes won't break existing functionality?
- Lesson 1242 — Maintainability and ModifiabilityLesson 1773 — Measuring Refactoring Progress and SuccessLesson 1878 — Evaluating Open Source Dependencies
- Test data builders
- create fresh objects for each test, customized as needed.
- Lesson 455 — Test Fixtures vs Builders
- Test Double Pyramid
- provides a preference order for choosing test doubles in your tests.
- Lesson 476 — The Test Double Pyramid
- test doubles
- (you'll learn these later).
- Lesson 461 — Test Speed and the Fast Test PatternLesson 516 — External Dependencies and InfrastructureLesson 1269 — Testing Hexagonal Applications
- Test Execution
- Lesson 632 — The CI Workflow: Commit to Verification
- Test first
- Try your survey on a small group before sending to everyone—unclear questions will derail your data.
- Lesson 139 — Questionnaires and SurveysLesson 430 — Testing in Time-Constrained Projects
- Test hypotheses
- faster (fewer variables to consider)
- Lesson 1721 — Creating Minimal Reproduction Cases
- Test IDs
- `data-testid="submit-button"` – explicitly added for testing
- Lesson 563 — Locator Strategies and Best Practices
- Test in isolation
- Verify your code's behavior independently of its dependencies
- Lesson 466 — Stubs: 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 1494 — Testing Configuration Code
- Test new code automatically
- New API endpoints or input handlers get fuzzed without manual intervention.
- Lesson 625 — Integrating Fuzzing into CI/CD
- Test one more time
- Run the code and verify it works as intended
- Lesson 101 — Self-Reviewing Before Submission
- Test Oracle Problem
- finding a way to verify correctness without manually computing the expected result for every generated input.
- Lesson 608 — The Test Oracle Problem
- Test regularly
- Run through procedures during calm periods
- Lesson 1685 — Runbooks and Operational Documentation
- Test relative paths
- Work within your test directory, avoiding hardcoded absolute paths
- Lesson 535 — Testing File System Operations
- Test rollback scenarios
- in staging environments
- Lesson 721 — Database Rollbacks and Schema Compatibility
- Test Stage
- – Execute integration tests, system tests, perhaps security scans
- Lesson 693 — The Deployment Pipeline Concept
- Test step
- Run your integration tests against the real dependencies
- Lesson 539 — CI/CD Integration with Real Dependencies
- Test the fix
- in an isolated environment, even if just quickly
- Lesson 1741 — Emergency Production Fixes
- Test the midpoint
- Check the version halfway between good and bad
- Lesson 1724 — Binary Search for Bug Localization
- 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 1707 — Automated Documentation Generation
- testability
- (inject mocks through factories), and **maintainability** (centralize creation logic).
- Lesson 255 — Evaluating Trade-offs in Creational DesignLesson 314 — Implementing Strategy with CompositionLesson 937 — Repository PatternLesson 941 — Query Object PatternLesson 1238 — What are Quality AttributesLesson 1244 — Testability and ObservabilityLesson 1255 — What is Layered ArchitectureLesson 1258 — Dependency Direction in Layers
- Testable
- Anyone can verify pass/fail without interpretation
- Lesson 148 — Writing Clear Acceptance CriteriaLesson 172 — Program to an Interface, Not an ImplementationLesson 231 — Alternatives to Singleton: Dependency InjectionLesson 1273 — The Dependency RuleLesson 1660 — Decomposing Features into TasksLesson 1777 — Migrating Functionality Incrementally
- Tested
- The code has comprehensive test coverage—unit tests, integration tests, and any other relevant tests have passed.
- Lesson 694 — Production-Ready Definition
- Testinfra
- (for Ansible) let you write tests that check the *outcome* of your configuration: "Is nginx installed?
- Lesson 1494 — Testing Configuration Code
- Testing
- Deliberately checking that code works as intended, not just hoping it does
- Lesson 6 — Process and DisciplineLesson 9 — What is the Software Development Lifecycle (SDLC)?Lesson 12 — Waterfall Model: Sequential DevelopmentLesson 708 — Pipeline as CodeLesson 720 — Rollback Strategies and MechanismsLesson 737 — Environment-Specific Configuration FilesLesson 1270 — Multiple Adapters for One PortLesson 1593 — The Kanban Board (+1 more)
- Testing → Design
- Discovering that a module is hard to test might reveal it's too complex and needs redesign
- Lesson 17 — Feedback Loops Across the SDLC
- Testing artifacts
- show what bias evaluations were performed
- Lesson 1917 — Explainability and Accountability
- Testing becomes easier
- because you're not bound to infrastructure
- Lesson 1277 — Frameworks and Drivers Layer
- Testing becomes harder
- – Adding layers makes mocking and testing more cumbersome without corresponding benefits
- Lesson 242 — Factory Pattern Trade-offsLesson 322 — When Patterns Become Obstacles
- Testing Environment
- Your E2E tests need an isolated, reproducible environment—separate from development and production.
- Lesson 556 — E2E Test Scope and Boundaries
- Testing Nightmare
- You can't test components in isolation because they depend on concrete implementations of other components.
- Lesson 179 — The 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 480 — Avoiding Over-Mocking
- Testing tools
- can validate that your API behaves according to the specification
- Lesson 837 — Introduction to OpenAPI Specification
- Testing visibility states
- An element might always be in the DOM but hidden via CSS.
- Lesson 566 — Handling 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 98 — Automated 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 504 — TDD Rhythm and Discipline
- Tests run automatically
- Many teams configure automated checks to verify code quality
- Lesson 90 — What is a Pull Request?
- Tests that duplicate coverage
- are the most common offenders.
- Lesson 429 — When to Skip or Delete Tests
- Text editors
- Every keystroke or action creates a memento
- Lesson 301 — The Memento Pattern: Capturing Object State
- Then
- an observable outcome happens
- Lesson 148 — Writing Clear Acceptance CriteriaLesson 418 — Acceptance Tests: Validating Business RequirementsLesson 445 — The Given-When-Then Pattern
- Then add your feature
- Build on the clean foundation in a new commit
- Lesson 105 — Avoiding Mixing Refactoring with Feature Work
- Then profile, don't guess
- Use actual profiling tools to identify genuine bottlenecks.
- Lesson 519 — Performance-Critical Code
- There is one administrator
- Multiple teams, vendors, and organizations control different parts.
- Lesson 1111 — Introduction to the Fallacies of Distributed Computing
- These conflicts are normal
- architecture is fundamentally about managing trade-offs, not finding perfect solutions.
- Lesson 1235 — Driver Conflicts and Trade-offs
- They're the persistent translators
- "Need to save this domain object?
- Lesson 1276 — Interface Adapters Layer
- Think of it like
- A support technician remotely connecting to your computer to diagnose issues—but for code.
- Lesson 1732 — Remote Debugging and Attaching to Running ProcessesLesson 1912 — Fairness Definitions and Metrics
- Think time
- is the pause between requests that simulates human behavior.
- Lesson 1214 — Designing Realistic Load Tests
- Third-party API access
- where clients need portable credentials
- Lesson 1016 — Sessions vs Tokens: Choosing the Right Approach
- Third-party APIs
- may have rate limits, cost money per call, or return different data over time
- Lesson 516 — External Dependencies and Infrastructure
- Third-party integration requirements
- force unconventional patterns
- Lesson 397 — Balancing Automation with Flexibility
- Third-Party Standards
- You inherit responsibility for how third parties handle data.
- Lesson 1907 — Third-Party Data Sharing
- Three Common Injection Methods
- Lesson 225 — DIP and Dependency Injection
- Three-way merges
- create a new commit with *two parents*, joining separate paths in the graph
- Lesson 65 — Understanding Git History as a DAG
- Thresholds
- Mark unhealthy after 2-3 consecutive failures, not just one blip
- Lesson 1391 — Health Checks and Failover
- throughput
- (can it handle the load?
- Lesson 1171 — Understanding Service Level Indicators (SLIs)Lesson 1173 — Common SLI Metrics: Availability, Latency, and ThroughputLesson 1188 — Latency vs Throughput Trade-offsLesson 1204 — Latency vs ThroughputLesson 1239 — Performance: Response Time and ThroughputLesson 1387 — Measuring Scalability: Throughput and LatencyLesson 1599 — Continuous Improvement with Kanban
- Ticket references
- `feature/JIRA-123-add-payment`, linking code to project management tools
- Lesson 89 — Branch Naming Conventions and Policies
- Tier 1
- Primary on-call engineer (immediate notification)
- Lesson 1161 — Alert Routing and Escalation Policies
- Tier 2
- Secondary on-call or team lead (escalate after 10 min)
- Lesson 1161 — Alert Routing and Escalation Policies
- Tier 3
- Engineering manager or VP (escalate after 20 min)
- Lesson 1161 — Alert Routing and Escalation Policies
- Tight coupling
- Classes know too much about each other → Consider Mediator or Observer
- Lesson 326 — Refactoring Toward and Away from PatternsLesson 479 — Partial Mocking and Spying on Real ObjectsLesson 507 — TDD as a Design ToolLesson 1225 — The Cost of Architectural MistakesLesson 1309 — Data Duplication vs Data Coupling Trade-offs
- Tight deadline prototypes
- where you need to validate ideas quickly may not justify the initial complexity.
- Lesson 1271 — When to Use Hexagonal Architecture
- Tight orchestration
- When the mediator needs to control timing, sequencing, or decision-making about who communicates
- Lesson 299 — Mediator 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 553 — When to Use Contract Tests
- Time
- How quickly you need it finished (deadline)
- Lesson 28 — The Iron Triangle: Scope, Time, and CostLesson 29 — Quality as a Fourth Dimension
- Time allocation
- Budget dedicated learning time (10-20%) as a normal expectation, not a privilege
- Lesson 1847 — Measuring and Rewarding Learning
- Time blocking
- Protect personal time on your calendar just as you would meetings
- Lesson 1859 — Remote Work and Disconnecting
- Time buckets
- Days/Weeks/Months (though this drifts toward estimation rather than sizing)
- Lesson 1614 — T-Shirt Sizing and Alternative Scales
- Time constraints
- Delays cause more harm than a potentially suboptimal choice
- Lesson 1816 — Making Decisions When Consensus Fails
- Time of day
- Business-hours alerts to Slack; after-hours to on-call phones
- Lesson 1161 — Alert Routing and Escalation Policies
- Time out slowly
- , tying up threads and preventing them from handling other work
- Lesson 1104 — Cascading Failures
- Time pressure
- When deadlines loom, developers update code but skip doc updates.
- Lesson 1705 — Why Documentation Becomes OutdatedLesson 1783 — Learning from Technical Debt Accumulation
- Time travel
- Replay events to see what your system looked like at any point in the past.
- Lesson 1347 — Event Sourcing FundamentalsLesson 1349 — Rebuilding State from Events
- Time-based estimates
- use absolute units like hours or days.
- Lesson 1649 — Story Points vs Time-Based Estimates
- Time-based expiration
- Cache entries automatically expire after a set duration, forcing fresh reads.
- Lesson 1384 — Caching to Reduce Load
- Time-bound
- Set realistic deadlines (avoid vague "someday")
- Lesson 1184 — Identifying Actionable Improvements
- Time-bound retention
- Delete data after its purpose is fulfilled
- Lesson 1901 — Data 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 1858 — Setting Boundaries and Saying No
- Time-boxed
- Fixed maximum duration prevents endless meetings
- Lesson 1600 — What Are Agile Ceremonies?Lesson 1603 — Daily Standup: Goals and FormatLesson 1841 — Safe-to-Fail Experiments and Innovation Time
- Time-critical opportunities
- A competitor launches tomorrow, and you need a minimum viable response today
- Lesson 42 — Balancing Debt and Delivery
- Time-sensitive features
- Security patches or compliance updates benefit from obvious dates
- Lesson 1552 — Calendar Versioning and Alternative Schemes
- Time-to-fix
- (or mean time to repair) measures how long broken builds stay broken.
- Lesson 657 — Build 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 962 — Time-to-Live and Expiration Policies
- Time-to-market is critical
- (competitive pressure, MVP validation)
- Lesson 1541 — Evaluating 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 1636 — Running Technical Discussions
- Timebox ruthlessly
- Allocate specific time slots: "We have 30 minutes to decide our database strategy.
- Lesson 1636 — Running Technical Discussions
- Timeline commitments
- Marketing campaigns, sales demos, contractual obligations
- Lesson 1542 — What is Release Planning
- Timeout + Retry
- Lesson 1102 — Combining Resilience Patterns
- Timeout rates
- reveal how often operations exceed acceptable wait times.
- Lesson 1209 — Error 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 1112 — Fallacy 1: The Network is ReliableLesson 1318 — Service Mesh and Communication InfrastructureLesson 1320 — Handling Partial Failures and Timeouts
- Timestamp
- Last-modified datetime (less reliable due to clock skew)
- Lesson 919 — Optimistic Locking with VersioningLesson 1285 — Domain Events for Context Integration
- Timestamp-based
- The build tool compares the modification time of source files against their output files (like compiled binaries).
- Lesson 664 — Incremental Builds
- Timing
- Ask for consent when relevant, not all at once during onboarding.
- Lesson 1902 — Informed Consent and User Control
- Timing Issues
- Lesson 571 — Why E2E Tests Are Fragile
- Timing matters critically
- Invalidate too aggressively and you lose cache benefits (performance tanks).
- Lesson 976 — The Two Hard Things in Computer Science
- Timing uncertainty
- You can't reliably distinguish between a slow node and a dead one
- Lesson 1414 — The Distributed Consensus Problem
- Tivoization prevention
- Hardware can't use technical restrictions to prevent users from running modified GPL software
- Lesson 1866 — The GNU GPL Family
- TLS certificate
- acts like a digital passport that proves your server's identity and enables encrypted HTTPS connections.
- Lesson 1077 — Certificate Management and Mixed Content
- TLS handshake
- the same protocol that secures HTTPS, but extended to authenticate the *client* (not just the server).
- Lesson 996 — Certificate-Based AuthenticationLesson 1070 — Transport Layer Security (TLS) Fundamentals
- To add forgotten changes
- Lesson 67 — Amending Commits
- To engineers
- "This simplifies our data model, eliminates 2,000 lines of workaround code, and uses proven technology"
- Lesson 1796 — Effective Technical Advocacy
- To executives
- "This reduces our AWS costs by 30% annually and eliminates our top reliability risk"
- Lesson 1796 — Effective Technical Advocacy
- To product managers
- "This unblocks three features currently stuck in your backlog and reduces user-facing errors"
- Lesson 1796 — Effective Technical Advocacy
- TODO or FIXME markers
- "TODO: Replace with async API call in next sprint"
- Lesson 374 — When to Write Comments
- Token rotation
- means issuing a *new* refresh token every time one is used—the old refresh token becomes invalid.
- Lesson 1013 — Token Refresh and Rotation
- TOML
- (Tom's Obvious, Minimal Language) balances readability and simplicity.
- Lesson 735 — Configuration File Formats and Parsing
- Too fast (<50ms)
- Attackers can try millions of passwords quickly
- Lesson 1003 — Work Factors and Adaptive Hashing
- Too few interfaces
- Clients depend on methods they don't use, violating ISP.
- Lesson 220 — Balancing 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 1665 — Balancing Granularity
- Too many fields
- Dozens of instance variables that seem unrelated
- Lesson 337 — Bloaters: Large Class and God Object
- Too many interfaces
- Your codebase becomes cluttered with one-method interfaces.
- Lesson 220 — Balancing ISP with Interface Proliferation
- Too many network calls
- If a simple business operation requires 10+ service calls, you've likely over-decomposed.
- Lesson 1312 — Getting Service Granularity Right
- Too minimal
- `calculate(10, 5)` — What do these numbers mean?
- Lesson 438 — Test 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 438 — Test Data: Realistic vs. Minimal
- Too slow (>1s)
- Your login system becomes unresponsive under normal load
- Lesson 1003 — Work Factors and Adaptive Hashing
- Tooling and Automation
- Lesson 1573 — Managing Multiple Active Release Lines
- Tooling dependencies
- Build pipelines, deployment tools, or monitoring systems tied to one provider
- Lesson 1539 — What 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 1748 — Preventing Recurrence with Systemic Fixes
- Top: End-to-End (E2E) Tests
- The fewest tests, validating complete user workflows through the entire system.
- Lesson 407 — The Testing Pyramid Concept
- topics
- (categories of events), partitioned for parallelism and replicated for fault tolerance.
- Lesson 1317 — Event Streaming with KafkaLesson 1358 — Publish-Subscribe Pattern
- Topology doesn't change
- Servers move, get replaced, and network paths shift regularly.
- Lesson 1111 — Introduction to the Fallacies of Distributed Computing
- Total cost is manageable
- You can build a replacement incrementally while the old system runs.
- Lesson 1765 — The Economics of Legacy Refactoring
- TOTP (Time-Based One-Time Passwords)
- Apps like Google Authenticator or Authy generate temporary 6-digit codes that refresh every 30 seconds.
- Lesson 994 — Multi-Factor Authentication (MFA)
- trace
- ) as it flows through your entire system, creating a timeline of connected events (called **spans**).
- Lesson 1146 — What is Distributed TracingLesson 1147 — Traces, Spans, and Context Propagation
- Trace Business Processes
- Lesson 137 — Document Analysis and System Archaeology
- trace ID
- (the overall journey) and a **span ID** (this specific step).
- Lesson 1146 — What is Distributed TracingLesson 1148 — Trace IDs and Correlation
- Traces
- track a single request's journey across multiple services.
- Lesson 1136 — Metrics vs Logs vs Traces
- Track
- Log the decision, update requirements documentation, communicate to the team
- Lesson 162 — Change Request Processes
- Track alert quality metrics
- measure your signal-to-noise ratio.
- Lesson 1158 — Alert Fatigue: Reducing False Positives
- Track bug origins
- Discover when problematic code was introduced
- Lesson 118 — Git Blame: Tracing Code Origins
- Track data transformations
- as values move through the system
- Lesson 1752 — Reading and Understanding Legacy Code
- Track systematically
- using a dedicated list or dashboard
- Lesson 577 — Quarantining and Flaky Test Management
- Track trends over time
- – Store results to visualize performance evolution across weeks or months
- Lesson 1203 — Continuous Performance Testing
- tracking
- (or sometimes "upstream tracking").
- Lesson 79 — Tracking BranchesLesson 162 — Change Request ProcessesLesson 936 — Data Mapper Pattern
- Tracking down bug origins
- "When did this problematic code first appear?
- Lesson 122 — Understanding 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 1890 — Trade Secrets vs Patents: Choosing a Strategy
- Trade-off
- You can't access protected members of the adaptee, only public ones.
- Lesson 257 — Class vs Object AdaptersLesson 531 — Setting Up Test DatabasesLesson 782 — Resource Granularity Trade-offsLesson 1313 — Synchronous vs Asynchronous CommunicationLesson 1394 — Externalizing State
- trade-offs
- .
- Lesson 32 — Non-Functional Requirements as ConstraintsLesson 111 — Commit Message Body: The Why, Not the WhatLesson 296 — Implementing Internal vs External IteratorsLesson 557 — Choosing E2E Testing ToolsLesson 942 — Inheritance Mapping StrategiesLesson 967 — Read-Through CachingLesson 1109 — Request Hedging and RedundancyLesson 1365 — Choosing a Message Broker: RabbitMQ, Kafka, and Others (+3 more)
- Trade-offs and risks
- Honest assessment of downsides and concerns
- Lesson 1686 — Design Documents and RFCs
- Trade-offs are unavoidable
- improving one fairness metric may worsen another
- Lesson 1913 — The Impossibility of Fairness
- Traditional
- Plan everything upfront, resist changes, measure success by adherence to plan
- Lesson 1579 — Responding to Change Over Following a Plan
- Traditional approach (wrong)
- Lesson 1268 — Dependency Inversion in Practice
- Traditional monolithic web applications
- where the backend and frontend are tightly coupled
- Lesson 1016 — Sessions vs Tokens: Choosing the Right Approach
- traffic controller
- at a busy intersection.
- Lesson 299 — Mediator vs Observer: Choosing the Right PatternLesson 1622 — Review Timing and Response Expectations
- Traffic distribution
- weights your test scenarios to match production proportions.
- Lesson 1214 — Designing Realistic Load Tests
- Traffic smoothing
- Spikes in requests don't overwhelm downstream services
- Lesson 1316 — Message Queues for Async Communication
- Transaction 1
- Alice checks if anyone else is on-call (sees Bob), then removes herself.
- Lesson 912 — Write Skew and Serialization Anomalies
- Transaction 2
- Bob checks if anyone else is on-call (sees Alice), then removes himself.
- Lesson 912 — Write Skew and Serialization Anomalies
- Transaction Rollback
- Lesson 532 — Managing Test Database State
- Transitions
- have intricate rules that benefit from encapsulation
- Lesson 311 — State Pattern vs Conditional Logic
- transitive dependencies
- libraries you don't directly use, but must be present for your direct dependencies to work.
- Lesson 668 — Direct vs Transitive DependenciesLesson 678 — Handling Transitive Dependencies
- Transitive vulnerabilities
- hide deep in your dependency tree.
- Lesson 1885 — Open 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 35 — Communicating Trade-offs to Stakeholders
- Translates data formats
- between incompatible systems if needed
- Lesson 1776 — Implementing the Facade Layer
- Translation correctness
- Does your adapter convert domain objects into proper SQL/JSON/file formats?
- Lesson 524 — Testing Adapter Layers
- Translation happens at boundaries
- through well-defined APIs or events
- Lesson 1306 — Domain-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 1772 — Managing Technical Debt During Refactoring
- transparency
- because the pattern's whole point is uniform treatment.
- Lesson 267 — Composite Trade-offs: Transparency vs. SafetyLesson 757 — Statelessness in RESTLesson 763 — Layered System ArchitectureLesson 1591 — Definition of DoneLesson 1907 — Third-Party Data Sharing
- Transparency and Open Communication
- by extending it across team boundaries.
- Lesson 1830 — Collaboration Over Silos
- Transparency is critical
- document which definition you prioritized and why
- Lesson 1913 — The Impossibility of Fairness
- Transport cost is zero
- Serialization, network overhead, and infrastructure cost money and time.
- Lesson 1111 — Introduction 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 637 — Popular CI Platforms
- Treat each invocation independently
- Design as if every call is the first call ever.
- Lesson 1522 — Stateless Function Design
- Tree Shaking and Bundling
- Lesson 1524 — Managing Dependencies and Package Size
- Trending toward depletion
- Increase review rigor, add monitoring, plan reliability sprints
- Lesson 1176 — Calculating and Tracking Error Budgets
- Triage
- The on-call engineer (from your rotation) assesses severity.
- Lesson 1165 — Incident Response Workflow
- Triage and validation
- – Confirm the issue truly warrants emergency action
- Lesson 1569 — The 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 494 — Triangulation: Adding Tests to Drive Generalization
- Trigger Detection
- Lesson 632 — The CI Workflow: Commit to Verification
- Triggers
- When should this build run?
- Lesson 638 — Build Configuration FilesLesson 898 — The Consistency Property
- Trivial accessors
- Simple getters/setters that just return or assign a field often don't need dedicated tests.
- Lesson 597 — Excluding Code from Coverage
- Trivial getters and setters
- like `getName()` or `setAge(value)` rarely break.
- Lesson 403 — When Not to Test: Diminishing Returns
- Troubleshooting Runbooks
- map symptoms to diagnostic steps.
- Lesson 1685 — Runbooks and Operational Documentation
- Trunk-Based Development
- (TBD) is a branching strategy where everyone works on a single main branch—the "trunk.
- Lesson 83 — Trunk-Based DevelopmentLesson 646 — Working on the Trunk vs Feature Branches
- Trunk-Based with Tags
- Lesson 1570 — Branching Strategies for Hotfixes
- trust boundaries
- they move from your application to monitoring systems, requiring protection in transit and at rest.
- Lesson 1040 — Security Logging and AuditabilityLesson 1045 — A04: Insecure Design
- Try pushing again
- Now your history includes their commits plus yours, and Git will accept the push
- Lesson 80 — Handling Push Rejections
- Try-lock patterns
- let services attempt to acquire a lock without blocking, allowing them to do other work if unavailable.
- Lesson 921 — Application-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 1503 — The Twelve-Factor App Methodology
- Two-way sync
- allows both systems to accept writes, requiring conflict resolution rules.
- Lesson 1778 — Data Migration and Synchronization
- Type prefixes
- `feature/user-login`, `bugfix/checkout-error`, `hotfix/security-patch`
- Lesson 89 — Branch Naming Conventions and Policies
- Type safety
- Leverage language features like type hints, generics, or interfaces
- Lesson 855 — SDK Design PrinciplesLesson 1133 — Structured 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 854 — The Role of Client SDKs
- Type specifications
- "Give me integers" or "Give me lists of strings"
- Lesson 614 — Input Generation Strategies
U
- Ubiquitous Language
- a shared vocabulary that developers, domain experts, and stakeholders all use consistently.
- Lesson 1280 — DDD Strategic Design Overview
- UI layouts and styling
- change constantly based on design feedback.
- Lesson 403 — When Not to Test: Diminishing Returns
- uncertainty
- exists and planning for it with adaptable structures.
- Lesson 8 — Engineering for ChangeLesson 13 — Iterative and Incremental ModelsLesson 1609 — Story Points and Relative Estimation
- uncertainty and risk
- key engineering concerns you've learned about.
- Lesson 10 — SDLC Phases: Requirements, Design, ImplementationLesson 14 — Agile SDLC: Adaptive and Collaborative
- Unchecked exceptions offer flexibility
- and cleaner code.
- Lesson 1087 — Checked vs Unchecked Exceptions
- Unclear
- Lacking context needed to identify attacks
- Lesson 1050 — A09: Security Logging and Monitoring Failures
- Unclear intent
- Readers must guess what the value represents
- Lesson 352 — Replace Magic Numbers with ConstantsLesson 1749 — Defining Legacy Code
- Unclear Interfaces
- Struggling to figure out what to pass into a function or what it should return?
- Lesson 507 — TDD as a Design Tool
- Unclear ownership
- No one feels responsible for keeping docs current.
- Lesson 1705 — Why Documentation Becomes Outdated
- Uncovered branches
- Conditional statements where only `if` or only `else` was tested
- Lesson 590 — Reading Coverage Reports
- Understand
- at a glance
- Lesson 382 — What is Code Complexity?Lesson 1229 — Stakeholder Concerns as Drivers
- Understand context
- Find the commit message explaining *why* a change was made
- Lesson 118 — Git Blame: Tracing Code Origins
- Understand the system
- at a glance—you see the forest, not just the trees
- Lesson 1220 — Architecture as Structure
- Understand their constraints
- (budget, timeline, existing commitments)
- Lesson 1812 — Identifying and Engaging Stakeholders
- Understand your access patterns
- Heavy read workloads benefit from denormalization.
- Lesson 868 — Balancing Normalization and Performance
- Understanding design decisions
- "Why was this function written this way three years ago?
- Lesson 122 — Understanding File History with Git Log --follow
- Understanding is faster
- New team members can focus on one section without understanding everything
- Lesson 166 — Separation of Concerns
- Understanding others' perspectives
- Before proposing a solution, understand what others care about.
- Lesson 1794 — Influence Without Authority
- Undo/Redo
- Keep executed commands in a stack; reverse them on demand
- Lesson 290 — Command Pattern: Encapsulating Requests
- Uneven load distribution
- Popular users or "heavy" sessions concentrate on specific servers, defeating the purpose of load balancing.
- Lesson 1392 — Session Affinity and Its Problems
- Unexpected dependencies
- Code you modify might be used in ways you're not aware of.
- Lesson 202 — Why Modification is Risky
- Uniform distribution
- Hash functions distribute data evenly, preventing any single partition from becoming overloaded (avoiding hotspots from range-based partitioning).
- Lesson 1398 — Partitioning Strategies: Hash-Based
- Uniform interface
- (consistent way to interact with resources)
- Lesson 755 — What REST Is and Why It MattersLesson 761 — Self-Descriptive MessagesLesson 763 — Layered System Architecture
- 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 1888 — Patent Risks in Software Development
- UNION
- (or **UNION ALL** if duplicates don't matter) lets the database run separate indexed lookups, then merge results
- Lesson 884 — Query Rewriting for Performance
- UNION ALL
- if duplicates don't matter) lets the database run separate indexed lookups, then merge results
- Lesson 884 — Query Rewriting for Performance
- unique
- to each usage context.
- Lesson 275 — Intrinsic vs Extrinsic State in FlyweightLesson 1001 — Salt: Preventing Rainbow Table Attacks
- Uniqueness first
- Your key must uniquely identify the cached resource.
- Lesson 961 — Cache Keys and Lookup Mechanisms
- Unit of Work pattern
- acts like a transaction coordinator that sits between your business logic and the database.
- Lesson 938 — Unit of Work PatternLesson 955 — ORMs in Domain-Driven Design
- Unit tests
- are cheap: they run in milliseconds, are easy to write, and pinpoint exact problems.
- Lesson 407 — The Testing Pyramid ConceptLesson 409 — The Cost-Confidence Trade-offLesson 412 — The Testing Trophy AlternativeLesson 523 — Integration Tests vs Unit TestsLesson 529 — Balancing Test ScopeLesson 1494 — Testing Configuration Code
- Unknown unknowns
- Surprises you can't anticipate (high uncertainty)
- Lesson 1615 — Dealing with Estimation UncertaintyLesson 1648 — Why Estimation is Hard
- Unmet needs
- Problems competitors solve poorly—your opportunity
- Lesson 140 — Domain Research and Competitive Analysis
- Unmonitored
- Nobody reviews them until after an incident
- Lesson 1050 — A09: Security Logging and Monitoring Failures
- Unnecessary coupling
- Changes to methods you don't use can still break your code
- Lesson 215 — Interface Segregation Principle: No Client Should Depend on Unused MethodsLesson 216 — Fat Interfaces and Their Problems
- Unpredictability
- Server A and Server B were provisioned identically, but manual tweaks mean they now behave differently.
- Lesson 1474 — Configuration Drift and Its Problems
- Unprotected
- Attackers can modify or delete logs covering their tracks
- Lesson 1050 — A09: 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 597 — Excluding Code from Coverage
- Unsigned updates
- mean you can't verify that a software update truly came from the legitimate vendor.
- Lesson 1049 — A08: Software and Data Integrity Failures
- Untrusted deserialization
- happens when your application accepts serialized objects from external sources without validation.
- Lesson 1049 — A08: Software and Data Integrity Failures
- Unused indexes
- The query optimizer ignored your index, possibly due to low selectivity (lesson 875) or type mismatches
- Lesson 878 — Using Query Execution Plans to Validate Indexes
- Unused parameters
- Methods ignoring half their class's fields suggest parts don't belong together
- Lesson 183 — Measuring Coupling and Cohesion in Practice
- Upcasting
- transforms older event versions into the current schema when reading from the event store.
- Lesson 1355 — Event Schema Evolution
- Update
- with a condition: "SET name = 'Alice', version = 6 WHERE id = 123 **AND version = 5**"
- Lesson 919 — Optimistic Locking with Versioning
- Update Anomalies
- When redundant data exists, updating it becomes risky.
- Lesson 860 — What is Normalization?
- Update contracts
- in your testing suite to reflect both versions
- Lesson 552 — Contract Versioning and Evolution
- Update immediately
- Change comments in the same commit as code changes
- Lesson 381 — Maintaining Comments During Refactoring
- Update patterns
- Do these data pieces change independently?
- Lesson 782 — Resource Granularity Trade-offs
- Update plans
- Adjust backlog, timelines, and communicate changes
- Lesson 158 — Scope Creep and Change Control
- Update severity
- levels as you learn which issues truly require immediate response
- Lesson 1162 — Alert Evaluation: Regular Review and Refinement
- Update the board first
- Team members should update their task board *before* standup, making the spoken updates faster and more accurate.
- Lesson 1604 — Making Standups Work
- Update the original class
- to use the new class (through composition)
- Lesson 198 — Refactoring to SRP: Extracting Classes
- Updating
- for security patches or compatibility
- Lesson 11 — SDLC Phases: Testing, Deployment, Maintenance
- Upfront design
- means planning your architecture, classes, and relationships before writing code.
- Lesson 512 — Emergent Design vs. Upfront Design
- Urgent reviews
- For hotfixes or release blockers, agree on a shorter window (e.
- Lesson 1622 — Review Timing and Response Expectations
- 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 1064 — Preventing XSS Through Output Encoding
- Usability
- Lesson 130 — Usability and Accessibility RequirementsLesson 1245 — Usability and Accessibility
- Usability requirements
- define how easy and pleasant your software should be to use.
- Lesson 130 — Usability and Accessibility Requirements
- USE
- Apply to CPUs, disks, network interfaces, memory, database connections
- Lesson 1138 — RED and USE Methods
- Use ARIA labels
- when available – improves accessibility *and* test stability
- Lesson 563 — Locator Strategies and Best Practices
- Use Behavior Verification when
- Lesson 484 — When to Use State vs Behavior Verification
- Use build scripts when
- Lesson 659 — Build Scripts vs Build Tools
- Use build tools when
- Lesson 659 — Build Scripts vs Build Tools
- Use Builder when
- Lesson 252 — Choosing Between Creational Patterns
- Use case
- Loading large images, database connections, or heavy resources only when accessed.
- Lesson 278 — Types of Proxies: Virtual, Protection, and RemoteLesson 769 — Redirection Status Codes: 3xx RangeLesson 1435 — Docker Networking FundamentalsLesson 1457 — Services and Network Abstraction
- use cases
- .
- Lesson 823 — REST vs RPC vs GraphQL: Core Trade-offsLesson 974 — Cache-as-SoR (System of Record)Lesson 1275 — Use Cases: Application Business RulesLesson 1279 — Testing in Clean ArchitectureLesson 1732 — Remote Debugging and Attaching to Running Processes
- Use choreography when
- Lesson 1378 — Hybrid Approaches
- Use clear titles
- "API Error Rate (last 15min)" beats "errors_total"
- Lesson 1144 — Dashboard Design Principles
- Use compression
- Enable gzip or Brotli compression for HTTP responses.
- Lesson 1114 — Fallacy 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 1858 — Setting Boundaries and Saying No
- Use data and evidence
- to support proposals (performance metrics, cost projections, risk assessments)
- Lesson 1821 — Technical Strategy and Vision
- Use database transactions
- for data migrations when possible
- Lesson 721 — Database Rollbacks and Schema Compatibility
- Use Defensive Programming when
- Lesson 176 — Fail Fast and Defensive Programming
- Use deprecation warnings
- Add HTTP headers like `Sunset: Sat, 31 Dec 2024 23:59:59 GMT` to responses.
- Lesson 853 — API Sunset and End-of-Life
- Use descriptive names
- Call your interfaces by what they do for the client: `IDocumentRenderer`, `IReportGenerator`, `INotificationSender`.
- Lesson 217 — Splitting Interfaces by Client Needs
- Use evidence, not volume
- The engineer who talks loudest or longest doesn't win.
- Lesson 1815 — Managing Disagreement Constructively
- Use Facade when
- Code clarity and reduced coupling matter more than micro-optimizations, or when the Facade actively optimizes subsystem interactions.
- Lesson 280 — Performance Trade-offs in Structural Patterns
- Use Fail Fast when
- Lesson 176 — Fail Fast and Defensive Programming
- Use Fallback Values
- Lesson 1108 — Handling Dependency Unavailability
- Use Flyweight when
- You have many similar objects and memory is constrained—the pattern pays for itself at scale.
- Lesson 280 — Performance Trade-offs in Structural Patterns
- Use for
- Database files, application state that must persist across container restarts.
- Lesson 1434 — Managing Container State and Data
- Use Layer 4 when
- Lesson 1390 — Layer 4 vs Layer 7 Load Balancing
- Use Layer 7 when
- Lesson 1390 — Layer 4 vs Layer 7 Load Balancing
- Use lighter runtimes
- Compiled languages (Go, Rust) often cold-start faster than interpreted ones
- Lesson 1521 — Cold Starts and Warm Instances
- Use named configuration patterns
- Instead of positional parameters, accept a single object with named properties.
- Lesson 388 — Managing Function Parameters
- Use optimistic locking when
- Lesson 914 — Pessimistic vs Optimistic Locking
- Use orchestration when
- Lesson 1378 — Hybrid Approaches
- Use parameterized command APIs
- Functions that separate the command from arguments without invoking a shell
- Lesson 1057 — Command Injection and OS Command Execution
- Use persistence when
- Messages represent critical business events (payments, orders)
- Lesson 1360 — Message Durability and Persistence
- Use pessimistic locking when
- Lesson 914 — Pessimistic vs Optimistic Locking
- Use plain statements
- if the template makes simple requests sound awkward or robotic
- Lesson 144 — The 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 141 — Handling Conflicting Stakeholder Needs
- Use Prototype when
- Lesson 252 — Choosing Between Creational Patterns
- Use Proxy when
- The overhead is negligible compared to what you're deferring, caching, or protecting against.
- Lesson 280 — Performance Trade-offs in Structural Patterns
- Use real services for
- Lesson 576 — Handling External Services
- Use semantic versioning
- Breaking SDK changes increment the major version (e.
- Lesson 857 — SDK Versioning and Compatibility
- Use separate queries
- Instead of one giant JOIN, issue multiple focused queries (one per collection).
- Lesson 947 — Cartesian Product Explosion
- Use Singleton when
- Lesson 252 — Choosing Between Creational Patterns
- Use specific image tags
- Avoid `latest` tags to ensure reproducible, auditable builds
- Lesson 1440 — Docker Security Best Practices
- Use State Verification when
- Lesson 484 — When to Use State vs Behavior Verification
- Use story points when
- Lesson 1649 — Story Points vs Time-Based Estimates
- Use structured exploration
- Don't let the loudest voice win.
- Lesson 1813 — Facilitating Technical Discussions
- Use stubs/mocks for
- Lesson 576 — Handling External Services
- Use test doubles
- for dependencies you haven't built yet
- Lesson 514 — Growing Object-Oriented Software Guided by Tests
- Use the Socratic method
- Instead of lecturing, ask: "What do you think happens when this fails?
- Lesson 1785 — Teaching Others Through Legacy Code Reviews
- Use time-based estimates when
- Lesson 1649 — Story Points vs Time-Based Estimates
- Use unique names
- Generate random directory or file names to avoid conflicts when tests run in parallel
- Lesson 535 — Testing File System Operations
- Use vertical slicing
- Deliver the simplest working version first, then enhance
- Lesson 1662 — Task Sizing and the Two-Day Rule
- Use when
- Performance matters more than reliability (metrics, non-critical logs).
- Lesson 1361 — Delivery 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 1922 — Balancing Business Pressure with Professional Standards
- user
- of your code, not just its builder.
- Lesson 399 — Testing as a Design ToolLesson 1018 — OAuth2 Roles and Authorization Flow
- User attributes
- department, clearance level, location, employment status
- Lesson 1028 — Attribute-Based Access Control (ABAC)
- User awareness
- Would users be surprised or feel betrayed if they knew?
- Lesson 1909 — Surveillance and Tracking Ethics
- User Communication
- Inform users honestly: "Search temporarily unavailable; browse our featured products instead.
- Lesson 1090 — Error Recovery and Graceful Degradation
- User Expectations
- Would a reasonable user expect their data to be shared this way?
- Lesson 1907 — Third-Party Data Sharing
- User Feedback Signals
- Lesson 1709 — Documentation Health Metrics
- User namespace
- Maps container user IDs to different host user IDs
- Lesson 1427 — Namespaces and Control Groups
- User Notification
- Lesson 1906 — Data Breach Response and Transparency
- User rights
- Right to access, rectify, erase ("right to be forgotten"), port data, and object to processing
- Lesson 1908 — Privacy Regulations (GDPR, CCPA)
- User trust
- Visitors feel safer knowing your site minimizes unnecessary permission requests.
- Lesson 1076 — Permissions-Policy and Feature Control
- User-based partitioning
- All posts, comments, and activity for `user_42` go to the same partition
- Lesson 1399 — Partitioning by Entity or Tenant
- User-facing features
- Complete workflows that users recognize as distinct capabilities
- Lesson 1775 — Identifying Strangulation Boundaries
- Using Weak Algorithms
- Relying on outdated algorithms like MD5 or DES that can be cracked.
- Lesson 1043 — A02: Cryptographic Failures
- Utility functions and helpers
- might be fine with 70-80%, especially if they're simple and well-tested through integration tests.
- Lesson 596 — Setting Meaningful Coverage Thresholds
V
- Vague names
- Generic terms like `data`, `info`, `process`
- Lesson 348 — Rename Method and Rename Variable
- Valid range or options
- What values are actually allowed?
- Lesson 731 — Documentation and Configuration Schemas
- Validate
- against strict rules (reject, don't sanitize when possible)
- Lesson 1039 — Trust Boundaries and Input Validation
- Validate assumptions
- Real user feedback during maintenance shows if your requirements were accurate
- Lesson 17 — Feedback Loops Across the SDLC
- Validate that recent changes
- haven't already addressed your task
- Lesson 649 — Integrating Before Starting New Work
- Validate understanding
- You demonstrate your interpretation; they correct misunderstandings immediately
- Lesson 138 — Prototyping for Requirements Discovery
- Validate your boundary
- Lesson 1775 — Identifying Strangulation Boundaries
- Validating architectural approaches
- ("Will this microservice split work?
- Lesson 1844 — Proof of Concepts and Spike Solutions
- Validation in CI/CD
- Add automated checks that compare your spec against actual API behavior.
- Lesson 845 — Maintaining OpenAPI Specs Over Time
- Validation rules
- Min/max values, string patterns, array lengths, allowed enums
- Lesson 839 — Defining Schemas with JSON Schema
- Validation tokens
- (like ETags in HTTP) work similarly—store a hash or checksum with the data.
- Lesson 982 — Dealing with Stale Data
- Value vs. Effort Quadrants
- , you might still struggle to choose between similarly-ranked items.
- Lesson 155 — Weighted Scoring Models
- Values have correct types
- (ports are numbers, URLs are valid, booleans are true/false)
- Lesson 730 — Configuration Validation at Startup
- Variable and function naming
- reflects changing domain understanding.
- Lesson 1780 — Reading Legacy Code as Historical Documentation
- Variables
- make those arguments reusable and type-safe, especially important when values come from user input.
- Lesson 809 — Arguments and Variables
- velocity
- , **quality**, and **people**.
- Lesson 38 — The Cost of Technical DebtLesson 1656 — Velocity and Capacity Planning
- Velocity metrics
- Are teams shipping faster with the new patterns?
- Lesson 1810 — Measuring Progress Toward Vision
- Vendor
- (bundle) third-party code directly into your repository
- Lesson 680 — Vendor Dependencies and Private Packages
- vendor lock-in
- migrating away becomes expensive and time-consuming.
- Lesson 1510 — Cloud Portability and Vendor Lock-in Trade-offsLesson 1512 — Managed DatabasesLesson 1518 — Evaluating Managed Service Trade-offs
- Vendoring
- means copying dependency source code directly into your project's repository.
- Lesson 680 — Vendor Dependencies and Private Packages
- Verbose output
- Include stack traces, variable values, timing information
- Lesson 1128 — Logging in Local Development
- Verifiable
- "Authentication system complete" (you can demo it)
- Lesson 1659 — Identifying Milestones and Deliverables
- Verification
- Anyone can confirm the artifact matches the claimed source
- Lesson 686 — What is a Reproducible Build?Lesson 992 — Username and Password Authentication
- Verification Period
- Lesson 1779 — Completing the Strangler: Decommissioning Legacy
- Verifies the outcome
- by checking side effects (database changes, files created, etc.
- Lesson 536 — Testing with Real Message Brokers
- verify
- that your software actually does what it's supposed to do.
- Lesson 11 — SDLC Phases: Testing, Deployment, MaintenanceLesson 471 — Test Double Libraries and Frameworks
- Verify checksums and signatures
- when available, ensuring packages haven't been tampered with during transit.
- Lesson 1885 — Open Source Security and Supply Chain Risks
- Verify interactions
- Check that the expected calls actually happened
- Lesson 483 — Behavior Verification: Testing Interactions
- Version compatibility
- Your old and new versions must coexist gracefully.
- Lesson 711 — Rolling Deployments
- Version consistency
- No more "works in Package A but breaks Package B"
- Lesson 684 — Monorepo Dependency Management
- Version control
- Tracking every change made, who made it, and when—so you can recover from mistakes
- Lesson 6 — Process and DisciplineLesson 43 — What is Version Control and Why Git?Lesson 544 — Fixture Files and Data FormatsLesson 708 — Pipeline as CodeLesson 737 — Environment-Specific Configuration FilesLesson 1488 — Introduction to Configuration Management
- Version control them
- Runbooks evolve with your systems
- Lesson 1685 — Runbooks and Operational Documentation
- Version identifiers
- Include version numbers in URLs (`/api/v2/users`) or headers
- Lesson 552 — Contract Versioning and Evolution
- version number
- with each event (e.
- Lesson 1348 — Event Store DesignLesson 1687 — Changelog and Release Notes
- Version skew
- Module A updated its API, Module B still uses the old format
- Lesson 522 — What Are Module Boundaries
- Versioning
- Include schema versions when needed: `user:123:v2` allows cache invalidation when your User model changes.
- Lesson 961 — Cache Keys and Lookup MechanismsLesson 982 — Dealing with Stale DataLesson 1314 — RESTful Inter-Service CommunicationLesson 1371 — Handling Saga Isolation Anomalies
- Vertical axis
- How much value (business impact, user benefit) will this deliver?
- Lesson 154 — Value vs. Effort Quadrants
- Vertical scaling
- is simpler initially—no changes to your application architecture needed, just more powerful hardware.
- Lesson 1240 — Scalability: Horizontal and Vertical
- Vertical scaling (scale up)
- Add more power to existing machines—more CPU, RAM, or faster disks.
- Lesson 1217 — Scalability 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 1240 — Scalability: 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 1661 — Vertical SlicingLesson 1679 — Saying No to Stakeholders Effectively
- Viewport sizes
- represent the visible area where your application renders.
- Lesson 568 — Mobile and Responsive Testing
- Violates 1NF
- A `Student` table with a `PhoneNumbers` column containing "555-1234, 555-5678"
- Lesson 861 — The 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 861 — The 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 861 — The Normal Forms (1NF, 2NF, 3NF)
- Violations of law
- (fraud, safety violations, environmental crimes)
- Lesson 1921 — Whistleblowing 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 282 — Performance Overhead of Structural Patterns
- Virtual Machines
- run a full operating system on top of a hypervisor.
- Lesson 1424 — Containers vs Virtual Machines
- Virtual or containerized filesystems
- provide complete isolation, especially useful when testing system-level file operations or permissions.
- Lesson 535 — Testing File System Operations
- Visibility drops
- You report "still working on it" for days, obscuring real progress
- Lesson 1662 — Task Sizing and the Two-Day Rule
- visible
- .
- Lesson 1492 — Configuration Drift DetectionLesson 1593 — The Kanban BoardLesson 1843 — Knowledge Sharing Mechanisms
- Visual hierarchy
- Lead with a quick example, follow with common use cases, then link to comprehensive API references.
- Lesson 1695 — Progressive 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 1135 — Querying and Analyzing Structured Logs
- Visualize aging
- Highlight items that have been in-progress longer than expected.
- Lesson 1595 — Managing Flow and Cycle Time
- Visualize relationships
- between different attack vectors
- Lesson 1082 — Attack Trees and Risk Prioritization
- Visualizing debt accumulation
- Show how deferring certain refactorings makes future changes exponentially more expensive— debt compounds with interest.
- Lesson 1772 — Managing 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 421 — Security Tests: Finding Vulnerabilities
W
- Wait a moment
- If possible, step away for a few minutes before reviewing
- Lesson 101 — Self-Reviewing Before Submission
- Wait for stability
- Ensure all images, fonts, and async content have loaded completely before capturing.
- Lesson 581 — Managing Visual Test Stability
- Wait step
- Ensure services are healthy and accepting connections
- Lesson 539 — CI/CD Integration with Real Dependencies
- Wait Strategies
- Don't assume services are ready immediately—poll or wait for health endpoints before running tests
- Lesson 537 — Network and Service Discovery in TestsLesson 918 — Lock 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 566 — Handling Dynamic and Conditional UI
- Warm storage (archived logs)
- Move older logs (30-90 days) to cheaper, slower storage.
- Lesson 1126 — Log Retention and Storage
- Warning signs
- Lesson 1642 — Indicators of Psychological Safety
- Wasted effort
- Time spent building unused features could have been spent on real, immediate needs
- Lesson 170 — You Aren't Gonna Need It (YAGNI)Lesson 599 — The 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 220 — Balancing ISP with Interface Proliferation
- Watch the video
- to observe the sequence of events leading to the problem
- Lesson 578 — Screenshot and Video Debugging
- Waterfall
- moved sequentially through phases and **Agile** shortened iterations, DevOps and Continuous Delivery make the SDLC feel almost continuous.
- Lesson 15 — DevOps and Continuous Delivery in the SDLCLesson 16 — Choosing an SDLC Model for Your ProjectLesson 17 — Feedback Loops Across the SDLC
- Waterfall approach
- Plan every room, build the entire structure, then move in at the very end
- Lesson 13 — Iterative and Incremental Models
- Waterfall model
- applies this same sequential logic to software development.
- Lesson 12 — Waterfall Model: Sequential DevelopmentLesson 13 — Iterative and Incremental ModelsLesson 14 — Agile SDLC: Adaptive and Collaborative
- Waterfall's
- rigorous upfront planning and documentation—mistakes are costly.
- Lesson 16 — Choosing 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 1930 — Automated and Manual Accessibility Testing
- WCAG 2.1 Level AA
- compliance, as it balances comprehensive accessibility with practical implementation and satisfies most legal requirements.
- Lesson 1928 — WCAG 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 1048 — A07: Identification and Authentication Failures
- Weak passwords
- Users choose memorable (predictable) passwords
- Lesson 992 — Username and Password Authentication
- WebAuthn
- is a web standard that lets users authenticate using biometrics, security keys, or device credentials.
- Lesson 997 — Passwordless Authentication Methods
- Weigh priorities
- (if you only have 20 minutes, speed wins)
- Lesson 30 — Trade-off Analysis and Decision Making
- Weighted selection
- Explicitly specify probabilities for different input classes
- Lesson 616 — Controlling Input Distribution
- Welcome changing requirements
- , even late in development
- Lesson 1580 — The Twelve Principles Behind the Agile Manifesto
- What
- do they want to do?
- Lesson 144 — The User Story FormatLesson 371 — Avoiding Encodings and Hungarian NotationLesson 661 — Build Tool Configuration FilesLesson 746 — Access Control and Audit Logging for SecretsLesson 1228 — What Are Architectural DriversLesson 1536 — Cost Allocation and Tagging StrategiesLesson 1547 — Managing Release DependenciesLesson 1687 — Changelog and Release Notes
- What are our constraints
- (Deadline, team size, budget?
- Lesson 1826 — Pragmatism and Trade-off Thinking
- What can you do
- Requirements specify what authenticated users can access or modify.
- Lesson 129 — Security and Compliance Requirements
- What changed
- Summarize the actual modifications.
- Lesson 102 — Providing Context in Pull Request Descriptions
- What dependencies became problematic
- Tight coupling usually emerges when teams didn't anticipate future changes or lacked design guidance.
- Lesson 1783 — Learning from Technical Debt Accumulation
- What didn't go well
- Identify pain points, blockers, or friction in the process.
- Lesson 1590 — Sprint Retrospective
- What do I do
- (Links to runbooks or recent changes)
- Lesson 1160 — Alert Context: Including Diagnostic Information
- What do we gain
- (Performance, maintainability, developer experience?
- Lesson 1826 — Pragmatism and Trade-off Thinking
- What edge cases exist
- Tests for empty lists, null values, boundary conditions reveal considerations
- Lesson 404 — Testing as Documentation
- What goes in
- Required and optional parameters, headers, body schema
- Lesson 831 — Reference Documentation Structure
- what happened
- , while interaction-based testing (using mocks) focuses on **how it happened**.
- Lesson 482 — State Verification: Testing OutcomesLesson 1123 — Writing Effective Log Messages
- What inputs are valid
- Test names and setup show example parameters
- Lesson 404 — Testing as Documentation
- What it automates
- Integration and validation.
- Lesson 630 — CI vs Continuous Delivery vs Continuous Deployment
- What it was
- A clear description of the alternative approach
- Lesson 1702 — Documenting 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 1783 — Learning from Technical Debt Accumulation
- What shortcuts were taken
- Look for missing tests, hardcoded values, or skipped validations.
- Lesson 1783 — Learning from Technical Debt Accumulation
- What SLAs should target
- Service level objectives often use p95 or p99 ("99% of requests under 200ms")
- Lesson 1143 — Percentiles and Aggregation
- What they need
- Deep technical detail, implementation specifics, and architectural decisions.
- Lesson 1632 — Audience Awareness in Technical Communication
- What to Expose
- Lesson 273 — Implementing Facades: Design Decisions
- What went poorly
- Gaps in observability, unclear runbooks
- Lesson 1742 — Learning from Production Incidents
- What went well
- Celebrate successes and effective practices worth repeating.
- Lesson 1590 — Sprint RetrospectiveLesson 1742 — Learning from Production Incidents
- What will we improve
- Commit to specific, actionable changes for the next sprint.
- Lesson 1590 — Sprint Retrospective
- What's broken
- (You already know this from earlier lessons)
- Lesson 1160 — Alert Context: Including Diagnostic Information
- What's reversible
- (Can we change this decision later if needed?
- Lesson 1826 — Pragmatism and Trade-off Thinking
- What's the cost
- Does this flexibility make the code harder to understand now?
- Lesson 187 — Anticipating Change vs. Over-Engineering
- What's the evidence
- Do requirements hint at this change?
- Lesson 187 — Anticipating Change vs. Over-Engineering
- What's the expected behavior
- Assertions demonstrate correct outputs
- Lesson 404 — Testing as Documentation
- What's the lifetime
- Code living for years justifies greater upfront investment.
- Lesson 284 — Maintainability vs Initial Effort
- What's the organizational cost
- Training, migration effort, ecosystem maturity.
- Lesson 1254 — Continuous Learning and Technology Evaluation
- What's their technical level
- (Beginner, intermediate, expert in this domain?
- Lesson 1689 — Audience-Driven Documentation
- What's your primary problem
- Are you dealing with incompatible interfaces (Adapter)?
- Lesson 286 — Pattern Selection Criteria
- When
- to create branches (new feature?
- Lesson 82 — What Are Branching Strategies and Why Do They MatterLesson 87 — Release Branching vs Continuous DeploymentLesson 148 — Writing Clear Acceptance CriteriaLesson 418 — Acceptance Tests: Validating Business RequirementsLesson 445 — The Given-When-Then PatternLesson 639 — Build Triggers and WebhooksLesson 746 — Access Control and Audit Logging for SecretsLesson 1542 — What is Release Planning (+2 more)
- When integrating third-party components
- ("This new payment provider—what data flows through it?
- Lesson 1083 — Integrating Threat Modeling into Development
- When introducing an ORM
- Lesson 957 — Migration Strategies
- When Loyalty Ends
- Your obligation to your employer stops when asked to do something illegal, unethical, or harmful.
- Lesson 1896 — Client and Employer Obligations
- When removing an ORM
- Lesson 957 — Migration Strategies
- When to prioritize portability
- Lesson 1510 — Cloud Portability and Vendor Lock-in Trade-offs
- When to run them
- Lesson 423 — Smoke and Sanity Tests: Quick Health Checks
- When to use
- When nested objects are immutable or intentionally meant to be shared (like configuration objects or read-only resources).
- Lesson 248 — Shallow vs Deep Copying in PrototypesLesson 830 — Types of API DocumentationLesson 1173 — Common SLI Metrics: Availability, Latency, and Throughput
- When to use it
- Lesson 1020 — Implicit and Client Credentials Grants
- Where
- branches come from (always from `main`?
- Lesson 82 — What Are Branching Strategies and Why Do They MatterLesson 1194 — What is Profiling and When to Profile
- Where capacity issues hide
- Slow tail latencies often indicate resource contention, retries, or downstream failures
- Lesson 1143 — Percentiles and Aggregation
- WHERE Clauses
- Lesson 871 — Identifying Columns to Index
- Where did it happen
- Provide context (component, user, transaction)
- Lesson 1123 — Writing Effective Log Messages
- Where do I look
- (Links to relevant dashboards, logs, traces)
- Lesson 1160 — Alert Context: Including Diagnostic Information
- Where to look
- (relevant dashboards, logs, or runbooks)
- Lesson 1155 — Actionable Alerts: The 'What Now?' Test
- Which fields to include
- Lesson 779 — Designing Resource Representations
- 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 129 — Security and Compliance Requirements
- 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 1921 — Whistleblowing and Legal Protections
- Whitelist Trusted Origins
- Explicitly list allowed origins:
- Lesson 1068 — Cross-Origin Resource Sharing (CORS) Security
- Who
- needs this feature?
- Lesson 144 — The User Story FormatLesson 746 — Access Control and Audit Logging for SecretsLesson 1026 — Access Control Lists (ACLs)Lesson 1536 — Cost Allocation and Tagging StrategiesLesson 1547 — Managing Release DependenciesLesson 1562 — Targeting and SegmentationLesson 1565 — Monitoring and Observability for FlagsLesson 1689 — Audience-Driven Documentation
- Who are you
- Requirements define how users prove their identity: passwords, multi-factor authentication, biometrics, or single sign-on.
- Lesson 129 — Security and Compliance Requirements
- Who's hurting
- High p95/p99 values reveal outliers that averages mask
- Lesson 1143 — Percentiles and Aggregation
- Whole team attends
- Everyone hears the same information simultaneously
- Lesson 1603 — Daily Standup: Goals and Format
- Why
- you made the change (not just what)
- Lesson 109 — Writing Effective Commit MessagesLesson 144 — The User Story FormatLesson 163 — Version Control for RequirementsLesson 1608 — Adapting Ceremonies to Your TeamLesson 1638 — Writing Technical ProposalsLesson 1675 — Managing Stakeholder ExpectationsLesson 1687 — Changelog and Release NotesLesson 1831 — Codifying and Evolving Principles
- Why decisions were made
- "Using bubble sort here because dataset is always < 10 items"
- Lesson 375 — Self-Documenting Code vs Comments
- Why did it change
- Connect your work to the bigger picture.
- Lesson 102 — Providing Context in Pull Request Descriptions
- Why does it matter
- Include relevant data to make decisions
- Lesson 1123 — Writing 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 991 — The Three Factors of Authentication
- Why it's deprecated
- This approach exposed tokens in browser history, logs, and referrer headers.
- Lesson 1020 — Implicit and Client Credentials Grants
- Why this breaks everything
- Lesson 1613 — The Dangers of Velocity Misuse
- 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 64 — Merge Strategies and Options
- Why you dismissed it
- Specific technical, cost, or contextual reasons
- Lesson 1702 — Documenting Alternatives Considered
- Wide scope
- (across methods or classes): Longer, descriptive names like `customerAccountBalance` are essential
- Lesson 370 — Variable Scope and Name Length
- will
- break existing clients:
- Lesson 847 — Breaking vs Non-Breaking ChangesLesson 914 — Pessimistic vs Optimistic Locking
- Will requirements change
- If your subsystem's interface is likely to evolve, an Adapter now saves refactoring nightmares later.
- Lesson 284 — Maintainability vs Initial Effort
- Windows uses `YYMM`
- Windows 2004 (released April 2020, though confusingly named)
- Lesson 1552 — Calendar Versioning and Alternative Schemes
- With external services
- Wrap all external calls in error handling that accounts for timeouts, network failures, and unexpected responses.
- Lesson 1092 — Error Handling at System Boundaries
- With psychological safety
- , teams unlock their creative potential: that junior engineer questions why everyone assumes a microservices approach.
- Lesson 1852 — Psychological Safety for Innovation
- within a partition
- .
- Lesson 1345 — Event Ordering and CausalityLesson 1362 — Message Ordering and Partitioning
- without
- changing its external behavior.
- Lesson 361 — Running Tests During RefactoringLesson 1292 — Inter-Module Communication Patterns
- 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 1852 — Psychological Safety for Innovation
- Work aging
- Tasks sitting idle in one column for days signal a blockage.
- Lesson 1597 — Identifying and Resolving Bottlenecks
- Work Breakdown Structure
- is a hierarchical decomposition of your entire project into smaller, progressively more detailed components.
- Lesson 1658 — Work Breakdown Structures (WBS)
- Work Distribution
- Multiple workers pull from the same queue, naturally load-balancing tasks across the pool.
- Lesson 1359 — Message Queues and Point-to-Point Messaging
- Work solo for
- Lesson 1630 — When to Use Pairing vs Mobbing
- Work-related inventions
- Anything you create using company resources, time, or that relates to the company's business
- Lesson 1891 — Employee Agreements and Intellectual Property
- Work-sample assessments
- focus on actual job skills rather than whiteboard algorithms that may favor specific educational backgrounds.
- Lesson 1853 — Inclusive Hiring and Onboarding Practices
- Workarounds
- "Setting timeout to 5000ms because third-party service sometimes stalls"
- Lesson 374 — When to Write CommentsLesson 1684 — Code 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 380 — Inline Documentation for Complex Logic
- Workflow complexity matters
- Multi-step processes where available actions change (e.
- Lesson 797 — HATEOAS Trade-offs and Maturity Models
- working directory
- (where you edit files normally) and the **repository** (the `.
- Lesson 45 — Creating Your First RepositoryLesson 46 — The Three States: Working Directory, Staging Area, and Repository
- Working infrastructure
- The surrounding systems, deployment pipelines, and integrations can remain intact.
- Lesson 1765 — The Economics of Legacy Refactoring
- Working within competence boundaries
- Equally important is recognizing when you're out of your depth.
- Lesson 1924 — Maintaining 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 381 — Maintaining Comments During Refactoring
- Wraps an external system
- (database driver, HTTP client, message queue)
- Lesson 1267 — Implementing Adapters
- writable layer
- on top.
- Lesson 1425 — Container Images and LayersLesson 1429 — Container Storage and Volumes
- Write an acceptance test
- that describes a complete user scenario or business requirement
- Lesson 514 — Growing Object-Oriented Software Guided by Tests
- Write conflicts
- Two leaders might accept different updates to the same data simultaneously
- Lesson 1403 — Multi-Leader and Leaderless Replication
- Write fast tests
- by avoiding slow dependencies (databases, networks, file systems)
- Lesson 473 — The Cost-Benefit Trade-offs of Test Doubles
- write skew
- two transactions read overlapping data, make decisions based on what they read, then write to *different* rows.
- Lesson 909 — Snapshot Isolation ExplainedLesson 912 — Write Skew and Serialization Anomalies
- Write throwaway code
- explicitly marked as experimental
- Lesson 520 — Uncertain 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 900 — The Durability Property
- Write-back
- offers faster write operations since you're not blocked by cache updates.
- Lesson 978 — Write-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 978 — Write-Through and Write-Back Invalidation
- Write-through
- guarantees immediate consistency between cache and database.
- Lesson 978 — Write-Through and Write-Back InvalidationLesson 1384 — Caching 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 978 — Write-Through and Write-Back Invalidation
- writes
- (inserts, updates, deletes) because the database must update both the table *and* all relevant indexes.
- Lesson 869 — What Indexes Are and How They WorkLesson 1350 — CQRS Pattern Overview
- Writing tests alongside code
- (or before, with TDD), not after features are "done"
- Lesson 1835 — Building Quality In
- Wrong guesses
- Your prediction about future needs is often incorrect, making the work useless
- Lesson 170 — You Aren't Gonna Need It (YAGNI)
- Wrong reason
- "Syntax error" or "Test file not found" or "Variable undefined"
- Lesson 490 — Seeing the Test Fail for the Right Reason
X
- XML format
- and typically uses **HTTP POST** as its transport mechanism.
- Lesson 799 — RPC Protocols: XML-RPC, JSON-RPC, and gRPC
- XML injection
- exploit user input that gets directly embedded into queries or documents without proper validation.
- Lesson 1058 — LDAP and XML Injection
Y
- YAML
- are great for structured, hierarchical data like objects or nested records.
- Lesson 544 — Fixture Files and Data FormatsLesson 638 — Build Configuration FilesLesson 735 — Configuration File Formats and Parsing
- 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 594 — Reading Coverage Reports
- Yellow/Orange
- Partially covered branches (one path taken, another missed)
- Lesson 590 — Reading Coverage Reports
- you
- will always see your own changes, but others might not immediately.
- Lesson 1404 — Consistency in Replicated SystemsLesson 1513 — Managed Message Queues and Event Streams
- You can prevent regression
- Document the reproduction steps as a test case to ensure the bug never returns
- Lesson 1720 — The Importance of Reproducibility
- You can test hypotheses
- Change one variable, reproduce the bug, and immediately see if your theory was correct
- Lesson 1720 — The Importance of Reproducibility
- You can tolerate downtime
- scheduled maintenance windows are acceptable
- Lesson 1408 — CP 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 1720 — The Importance of Reproducibility
- You control both sides
- If you can modify both interfaces, just make them compatible directly
- Lesson 258 — When to Use the Adapter Pattern
- You control direct dependencies
- through your build configuration file.
- Lesson 668 — Direct 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 320 — When Visitor Adds vs Removes Flexibility
- You introduce new bugs
- because you don't understand the side effects of your changes
- Lesson 1717 — Understanding vs. Guessing Solutions
- You lose confidence
- from your team when half-understood fixes break production
- Lesson 1717 — Understanding vs. Guessing Solutions
- You lose institutional knowledge
- embedded in "ugly" code (like edge case handling and business rules)
- Lesson 1757 — When to Rewrite vs Refactor
- You need runtime decisions
- The factory can choose *which* concrete class to instantiate based on parameters or configuration
- Lesson 235 — Factory Method vs Direct Instantiation
- You need runtime flexibility
- – Which concrete class to instantiate depends on configuration, user input, or other dynamic factors
- Lesson 242 — Factory Pattern Trade-offs
- You need testability
- A factory can be swapped with a test double; you can't swap `new`
- Lesson 235 — Factory Method vs Direct Instantiation
- You repeat past mistakes
- without the benefit of accumulated wisdom
- Lesson 1757 — When to Rewrite vs Refactor
- You want explicit control
- – no "magic" or framework surprises
- Lesson 478 — Mock Frameworks and Hand-Rolled Doubles
- You waste time
- trying fixes that don't address the actual cause
- Lesson 1717 — Understanding vs. Guessing Solutions
- You're hiding dependencies
- – Clients shouldn't know about all the concrete classes that might be created
- Lesson 242 — Factory Pattern Trade-offs
- Your changes are visible
- Team members can see exactly what you modified
- Lesson 90 — What is a Pull Request?
- Your current branch's tip
- the latest commit on the branch you're merging into
- Lesson 59 — Three-Way Merges
- Your direct team
- Daily standups, real-time Slack updates
- Lesson 1676 — Communication Strategies for Different Stakeholders
- Your manager
- for team-level or project concerns
- Lesson 1920 — Speaking 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 1714 — Reading Error Messages and Stack Traces
Z
- Zero-defect mindset achievements
- "Sarah's thorough testing caught three critical bugs before production"
- Lesson 1839 — Celebrating Quality Wins
- Zero-Downtime Creation
- requires careful orchestration—new tenant resources are provisioned in the background, validated, and only activated once fully ready.
- Lesson 1533 — Tenant Onboarding and Provisioning
- Zero-downtime deployments
- Gradual traffic shifting between versions
- Lesson 1323 — Service Discovery FundamentalsLesson 1504 — Stateless Application Design
- Zero-trust architectures
- Every connection requires cryptographic proof
- Lesson 996 — Certificate-Based Authentication