بیشتر باگها از جایی آغاز میشوند که وضعیت عوض میشود
در یک سامانهی مالی، همهچیز ساده به نظر میرسید. کاربر درخواست برداشت میداد، موجودی کیف پول بررسی میشد، مبلغ کم میشد و نتیجه در پایگاه داده ذخیره میشد. اما گاهی دو درخواست نزدیک به هم، هر دو موفق میشدند و موجودی نهایی با چیزی که انتظار میرفت نمیخواند. در جایی دیگر، پردازشگر پیام یک رویداد را دوبار میدید و دوبار روی وضعیت سفارش اثر میگذاشت. در نمونهای دیگر، یک کش قدیمی باعث میشد تصمیمی بر اساس دادهای گرفته شود که دیگر معتبر نبود.
وجه مشترک این خطاها معمولاً یک چیز است: وضعیت تغییرپذیر. همانجایی که دادهای مشترک وجود دارد و چند مسیر مختلف میتوانند آن را بخوانند، تغییر دهند، یا بر اساس نسخهای قدیمی از آن تصمیم بگیرند. بسیاری از خطاهای دشوار نرمافزاری نه از الگوریتمهای عجیب، بلکه از همین نقطه آغاز میشوند: از جایی که وضعیت عوض میشود و ما کنترل کافی روی این تغییر نداریم.

