"We make approximately one assumption every 10 lines of code, or even if I'm off by a factor of 2 or 3, one assumption every 20 to 30 lines of code." - Manny LehmanThese assumptions about very complex software systems and environments result in unexpected behavior.
Keep track of all your assumptions throughout requirements planning, design, coding, and testing. Also, record the implications of each assumption - where in the product does the assumption manifest itself? Isolate such implications by encapsulating each assumption.
Reference:
Lehman, M., "Software Engineering, the Software Process and Their Support," Software Engineering Journal, September 1991.