It's very, very hard for us to admit that we're wrong, let alone that we have no clue what we're doing. The first step of course is being able to admit that you've got a problem and before you can admit you have a problem you need to be able to recognise that you've got one. I came to the shocking realisation the other day, that I was guilty of not really know what I was doing. I came across a subtle bug in some of my code; my unit tests were passing but in production things weren't working as I expected. I dug deeper and got a vague idea of what was happening, then I engaged in shotgun programing. I knew I was doing it too. I had no idea what I was doing, and I knew it. I just started hacking away at my code, solving one problem and introducing another. Basically I knew where the problem was and as if it were some small animal rustling in the bushes nearby I just blasted away its general direction and just hoped I hit it, whatever it was. I eventually solved the problem, and eventually understood what was going on; but it was touch and go there for a while. The problem wasn't so much my trial and error approach, that did eventually solve the problem. It was more that I had no idea why I was trying the solutions I was trying, more specifically why I thought they were plausible I was just pointing in the general direction of the problem and letting loose.