I am a test manager in my organization. We do mostly manual tests. Before that I was a developer. I find that my understanding of software implementation and architecture is very important for my role. Since I know how the architecture works, how the various components affect each other and in which areas to expect which bugs, I understand better where are the riskier areas and what to test and what not. However perhaps I rely too much on the implementation details, and I tend not to test places where I think the implementation has lower risk of failing. But what if the implementation changes? Perhaps a more black box approach is in order. Also, most testers in my group don't have development experience, so often they test the same module in different locations, even though if you are familiar with the code you understand that its the same module and its very unlikely that it will behave differently in different places. Often they don't test timing or performance issues because they don't understand how multithreading or memory leakages can cause bugs. There are plenty of examples like this. So I have two questions 1. Should testers understand the code? 2. How much should testers rely on implementation details?