Black belt software development

Damien Hampton
26Brains
Published in
2 min readOct 17, 2016

The Boss: “This software project has gone £50,000 over budget, it’s 12 weeks late, and I want to know why!”

“I think we spent too much time thinking about automated testing”, said no team member, ever.

I’ve been thinking a lot about software development recently — what works and what doesn’t and why is everything so damned hard?!

I read David Heinemeier Hansson’s article on the death of TDD and, whilst I think I understand where he is coming from, my concern with his article is that some developers might read it and think that they don’t need to worry about learning things, like testing, that improve the quality of their code.

Many software developers seem to only know what they learnt at university, which is just not good enough for the modern developer. A developer who has never written a test, has never become comfortable writing tests, is rarely going to be a good thing.

There are things that software developers can learn from the way karate is taught.

If you learn karate, you learn basic moves. You learn stances, punches, kicks, blocks, throws. The stances are hard and low and not representative of how one would fight. The basic moves are exaggerated because if you can do the exaggerated moves, you can do the moves better in a more natural fighting stance. The basic moves stretch you to improve your fighting.

And you repeat them.

Over and over and over. Building muscle memory. And you think about them. And you meditate over them. And you think about how to apply them to real-world situations.

I think of software development techniques in the same way. We should practice techniques, we should keep practicing, over and over until it becomes natural. We should think about them, we should meditate over them and think of the best ways to apply them.

SOLID design principles, unit tests, TDD, BDD and pair programming are all examples of basic techniques that a developer should learn. Knowing these techniques can only make you a better developer, even if you choose not to use them.

--

--