Connascence of Timing
Connascence of Timing (CoTm) happens when the success of two or more calls depends on the timing of when they occur. The concept is not very different from CoEO, but here we have an explicit relation with the point in time the call gets executed, not just before or after.
One of the most classic occurrences of CoT is race conditions in multithreading. You'll find another example when you see in the code something like Wait
, Sleep
, or Timeout
followed by an actual arbitrary explicit timespan.
The problem with CoTm is that we usually are not in control of the time, so it obviously has the potential to introduce great flakiness into the system. And intermittent problems are usually the hardest to identify and resolve. That's why we feel that it's always a good idea to try to avoid CoTm like the pox, when possible.
Sometimes, however, we can't really get rid of it. For example, think of some integration tests for a Service Bus. We always...