Running into challenging situations or problems is a fact of life in software development. From complex coding constructs to tricky phantom bugs, programmers spend many hours traversing their own minds in search of the right answer. At times the problem seems obvious, while on other occasions, it seems to hide behind a subtle impenetrable veil. Sometimes on these occasions, without provocation, the solution arrives like a rushing tidal wave. Why is this?