After 2 days coaching on test first development within a legacy code-base (lots and lots of refactoring) it really hit home just how difficult it can be to do something simple. The English language doesn't help, because simple implies it should be easy, but in reality simplicity is extremely challenging. I suspect this holds true in many fields (physics springs to mind, how long did it take for e=mc²).
I'm left wondering whether it is something inherent in human nature that leads us to strive complexity or whether it is actually the way we are educated. Certainly, with regards to software engineering the majority of the agile techniques and practises appear to contradict what is being taught in universities. The comment I hear most often when coaching Test First Development is that the difficulty is in thinking backwards, suggesting that the practise itself isn't difficult per se, but it's the way we think that needs rewired.
Of course, not knowing what the problem is makes it difficult to formulate a solution - now there''s a real challenge for agile