FREE LESSON · Applications & software architecture · 3 OF 4

Software Testing, Monitoring and Debugging

Evidence across the lifecycle — Tests, telemetry, and debugging

Different evidence catches different uncertainty.

Unit tests isolate rules; integration tests check boundaries; end-to-end tests exercise a thin critical path; property tests explore invariant-preserving input spaces. In production, logs describe events, metrics summarize populations, and traces connect one request across components. None is a substitute for a clear hypothesis.

Test before release for known risks; observe after release for the reality you failed to imagine.

Debug from the earliest wrong fact

Reproduce the user-visible symptom, attach a correlation identifier, and compare expected versus actual state at each boundary. Find the first representation that is wrong, not the loudest downstream exception. Form a hypothesis, predict another observable consequence, and intervene narrowly.

A stack trace tells you where code noticed a problem, not necessarily where the problem began.
Open this lesson in the interactive course →