assumptions are the worst enemy of programmers. i got stuck mid way in the win32 welding patch just because i assumed that the handle passed in the parent's window procedure is of the parent window where in reality it was not (later i found that the assumption was actually right). This happens most of the time, just that the things that we assume, the implicit knowledge isn't something which can cause problems.
as programmers our job is to make sure that there are no assumptions built into the design and the code of our programs. our job is to question assumptions and make way through them.
it's not easy to avoid frustration when you feel cornered in a new project, and at that moment it's important that you keep a curious attitude to poke around the code and wonder "did i check this possibility, or what does this variable do?".