Two services at a fintech company deploy independently — or so the
team believes. Service A handles account balances. Service B handles
transactions. A database table, account_snapshots, is read
by both. When Service A’s team changes the schema of that table to add a
pending_balance column and restructures how
current_balance is computed, Service B’s queries begin
returning wrong results. Neither team changed Service B. Neither team
broke a test. Production transactions reported incorrect available
balances for six hours before anyone traced the cause.
The services were deployed independently. They were not developed independently. They shared state. The coupling was real; it was just invisible.