Enumerate edge cases against a fixed checklist — empty, absent, boundaries, huge, weird text, duplicates, repeated/concurrent calls, stale state, time, failing dependencies — before declaring code complete. Use after the happy path of any new or changed function, handler, parser, validator, CLI, or data transformation works, and when reviewing one, before reporting done. Not for test structure or mocking decisions (see test-design).