It is decreed by a merciful Nature that the human brain cannot think of two things simultaneously.
—Sir Arthur Conan Doyle
There’s no getting away from it: concurrency complicates matters. It is a challenge when doing test-driven development. Unit tests cannot give you as much confidence in system quality because concurrency and synchronization are systemwide concerns. When writing tests, you have to worry about getting the synchronization right within the system and between the test and the system. Test failures are harder to diagnose because exceptions may be swallowed by background threads or tests may just time out with no clear explanation.
It’s hard to diagnose and correct synchronization ...