The seam bug
Two subsystems agreed on everything except the shape of the data between them.
What happened
A component that generated trade signals and a component that consumed them were built at different times, by different sessions of work, against slightly different assumptions about the message format passing between them. Each side was individually correct. Each side's tests passed. But the producer wrote one schema and the consumer parsed another — so a class of perfectly valid signals was silently dropped at the seam. No crash, no error log, no alert: the consumer simply found nothing it recognized and moved on, every single time.
Why nobody noticed
Silence is ambiguous. A strategy producing no trades looks identical to a strategy whose trades are being eaten — from the outside, both are a quiet log. The absence of something is the hardest signal to monitor, because every monitoring instinct is built around events, and this failure produced none. The system was 'working' by every dashboard it had.
How it was caught
By refusing to accept silence at face value. The diagnostic that worked was replaying history through the producer's own code — not a reimplementation, the actual module — and proving that signals should have fired during the quiet window. That converted 'maybe no opportunities occurred' into 'something between A and B is eating signals', which is a bounded search instead of a mystery. From there, walking the seam found the schema mismatch in minutes.
What transfers
- Integration points fail differently than components: both sides can be correct and the seam still wrong. Test the seam itself — a message written by the real producer, parsed by the real consumer.
- Silence must be made falsifiable. For every 'nothing happened', build a way to answer: is nothing happening, or is something being dropped? Expected-activity checks (heartbeats, minimum-signal alarms) exist for exactly this.
- When diagnosing, replay with the system's own code. If you rewrite the logic to test it, you are testing your rewrite, not the system.