What is this?
In its most simplest of definitions a race condition occurs when two competing events of equal importance arrive at their intended des
tinations out of order creating havoc in the system which they reside in. Condition B fired before Condition A, but we all know that Condition A needs to happen before B in order to be successful.
Asking any developer about a Race Condition will yield one of two responses; A) confusion as to how this could have happened in my code or B) a challenge to solve a tricky problem. I come from a development background; things like serialization, threading, events, timers and variables make sense to me. Over the course of the last few years I have seen my role evolve into that of Development Manager, Project Lead and Product Manager. There have been dabblings of other roles in the mix as well, QA, Trials, Sales, etc, but at its core it has been these three.
As different as these roles are from my development background I keep coming back to how similar they are and how every aspect of these professions has their own Race Conditions that affect them, do it right and you’re golden, try and do one before the other thinking it will save you time and effort and you might be widely surprised by the results. The only major difference between race conditions in the developer world and race conditions in other roles are that as a developer the race condition is primarily in your code, it’s tangible; you can feel it, change it and recompile it. For all other roles in the Software Delivery Process it’s not, it could be your team, your customers or your strategy.
Go back to the two responses from our hypothetical developer; confusion or opportunity. Will I deny this could ever happen in my code, defiant to the end, pushing back on the QA guy to run the test over and over again, not wanting to look at my code knowing it could be something really, really hard to fix? Or will I look at this as an opportunity to fix something that clearly wasn’t working, clearly created an inconsistent result in the part of a critical system and clearly affected a lot of people? Now what if the race condition wasn’t the code, but was a slip in a conversation to a customer about a new feature that really isn’t slated until the next release? I could turn the customer off completely – nope next release, gotta wait – leaving them dazed and confused or I could reap the opportunity – look we can’t do it now, we’re not sure how it’s quite going to come together, you sound interested what are your thoughts, interested in being a trial site?
It’s not always this simple, but sometimes it is, the above scenario could be played out a thousand different ways, and that is the best part about a Race Condition – there is no one way to approach or solve the problem – you just have to realize it’s a challenge waiting to be cracked.