Twenty years ago I sat in a lecture hall and heard a man, whose name I have forgotten, tell me that software was in crisis. Most software projects fail, he told us. He went on to explain why. I thought, since we understood the reasons, things were bound to change pretty soon.
Ten years later I was starting to conclude that things would never change when my boss put a book about Extreme Programming on my desk. I read it, it was simple, it made sense. Now things would change. Ten years on and Extreme Programming, now rebranded as Agile, has become the standard. Companies proudly proclaim their Agile credentials - they have iterations, stories rather than long documents, they don't design the software, they just write it, they may even write the tests first. And yet still projects are failing. What is going on?
Writing software is hard. It's as simple as that. To be able write it well is a rare skill. When I talk to colleagues and ask them how many really good software engineers they have worked with over the years, they can count them on the fingers of one hand. The mixture of skills is very difficult to find in one person - technical, pragmatic, analytical, questioning, collaborative, humble, pedantic, obsessive. In those same conversations with colleagues, we conclude that a small team of really good engineers is infinitely more valuable than any number of average ones. They will build software that works. That is the principle on which my company is based.