Topic domain

Software Engineering

Practices for building and changing software over time.

Articles
80
Clusters
8
Foundational
24
Intermediate
32
Advanced
24

Turning problems into specified behavior.

  1. Preconditions and Postconditions as the Function Contract
  2. Specifying Behaviour as a State Machine with Guards
  3. Inductive Invariants Over Reachable States
  4. Specifying Partial Failure, Atomicity, and Retry Semantics
  5. Liveness and Fairness in Temporal Specifications
  6. Refinement: When an Implementation Satisfies a Specification
All 10 in this cluster →

Testing

10

Test design, doubles, and suite economics.

  1. Deriving Test Inputs from Equivalence Partitions and Boundaries
  2. Test Oracles and Where Expected Values Come From
  3. Stubs, Fakes, and Mocks: What Each Double Actually Verifies
  4. Fixture Isolation and the Cost of Shared Test State
  5. Coverage Criteria and What They Cannot See
  6. Property-Based Testing and How Shrinking Finds the Minimal Case
All 10 in this cluster →

Behavior-preserving change at scale.

  1. The Equivalence Relation That Refactoring Depends On
  2. Extract Function and the Preconditions the Compiler Checks
  3. Why Textual Renaming Fails and Syntax Trees Do Not
  4. Characterization Tests as a Refactoring Safety Net
  5. Seams: The Places Where Behavior Can Be Substituted
  6. Branch by Abstraction and the Cost of Two Live Paths
All 10 in this cluster →

Defect detection and knowledge transfer.

  1. What a Unified Diff Hunk Actually Encodes
  2. Diff Algorithm Choice and the Noise It Adds to a Review
  3. Splitting a Change into Units That Can Be Reviewed Independently
  4. Which Defects a Diff Reader Can Actually Detect
  5. The Semantics of a Code Review Approval
  6. Reviewing Tests in the Same Diff as the Code
All 10 in this cluster →

Branching models and history hygiene.

  1. What a Commit Contains and Why Its Hash Is Content-Addressed
  2. Three-Way Merge and How the Merge Base Is Chosen
  3. Fast-Forward, Merge Commits, and What First-Parent History Hides
  4. Rebase as Patch Replay and Why Every Id Changes
  5. Branch Lifetime and the Cost of Divergence
  6. Squash, Fixup, and How a Commit Series Is Composed
All 10 in this cluster →

Selection, upgrades, and supply risk.

  1. What a Version Range Selects: The Interval Algebra Behind Caret and Tilde
  2. Resolution as Constraint Search: Why Dependency Solving Is NP-Hard
  3. Lockfiles: Recording the Resolved Graph Without Re-Resolving It
  4. When One Graph Contains Several Copies of the Same Package
  5. Install Scripts: The Code That Runs Before the Package Does
  6. How a Package Name Becomes a Download: Registry Lookup Order and Confusion
All 10 in this cluster →

Reference material that stays true.

  1. The Contract Elements a Function Reference Entry Has to State
  2. How Doctest Decides Whether a Documented Example Passed
  3. Changelogs as a Curated Projection of Commit History
  4. Heading Anchors and the Silent Failure of Fragment Links
  5. What an API Doc Generator Can Recover From Source Alone
  6. Stable Error Codes as Documentation Identifiers
All 10 in this cluster →

Planning, estimation, and incident learning.

  1. Cycle Time, Work-in-Progress Limits, and Little's Law in Delivery Queues
  2. Aggregating Task Estimates: Why Summed Ranges Come Out Too Narrow
  3. Critical Path, Float, and Why the Longest Chain Sets the Date
  4. Calibrating Interval Estimates Against Recorded Outcomes
  5. Forecasting Completion Dates from Historical Throughput
  6. Severity Tiers, Escalation Timers, and the Cost of a Page
All 10 in this cluster →

All Software Engineering articles