Building Software

Engineering Fundamentals for the Agent Era

Contents

2

Verification: Testing as the Core Discipline

Why it matters when agents do the typing

Tests are where intent survives after the conversation that produced the code is gone. A test suite gives the same verdict on every run and does not care who is asking. When the same process writes both the code and its tests, both can carry the same misunderstanding, so the engineer's job is to own what the tests assert.

  1. Core 2

    Tests as Executable Specifications

    Test-first thinking without the ritual: every behavior has a test, each test comes from a requirement, and nothing is done until the tests say so.

    A mistake it teaches you to catch: A failing test 'fixed' by changing its expected value to match the buggy output.

    Depth: do
  2. Core 3

    Engineering Robust Tests

    Choosing the right level of test, controlling time and randomness, and building suites that stay fast, deterministic and trustworthy.

    A mistake it teaches you to catch: Everything mocked, so the tests never touch a real database and miss every query bug.

    Depth: do
  3. Property-Based Testing and Test Quality

    Checking invariants across thousands of generated inputs, and measuring whether your tests would actually catch a bug.

    A mistake it teaches you to catch: Code that passes every hand-written example and fails on an input nobody thought of, such as an empty string, a huge number or combining characters.

    Depth: do
  4. Core 4

    Continuous Testing and Fast Feedback

    Running every check on every change so you know within minutes, and ideally seconds, when something breaks.

    A mistake it teaches you to catch: A failing test marked as skipped so the pipeline turns green.

    Depth: do