Shu-Ha-Ri is a Japanese martial arts concept describing the three stages of learning. When you start doing martial arts you learn by repeating the same techniques over and over. You are at a Shu level of learning. Later you start using other techniques and putting them together. You are reflecting over your techniques and figuring out what works for you. You are now at a Ha level. At some point it all comes natural to you and you don’t even think about what you are doing. It’s all reflex. You are at a Ri level.

The same concept can, with some imagination, be used in the software industry. Often I find myself in situations where I’m having problems explaining my points of view when it comes to technical decisions. This mostly occurs when I am talking to PMs (of course) and sometimes when I am talking to fellow developers.

When talking to business minded PMs the answer is always to focus on the business aspect of the problem. This is a good way to think about software in general by the way. You are in a business, and even if you think unit testing is the most important thing in the world, it is not. Money is. Luckily making money and making quality software usually coincides. (But not always)

Discussing technical practices together with my fellow developers is a whole other issue. Let me give you a contrived example:

In most cases I advocate using some kind of presentation pattern when developing a user interface. To me the reasons are pretty obvious; separation of concerns, testability, maintainability and so on. Sometimes you will find complex logic stuffed inside the code behind file with no separation of anything (Yes I’m talking about you Mr. ASP.NET Web Forms). Data access, business logic and user interaction logic all stuffed into a big pile of mud. This is where I step in and tell the developer that he should separate the code into several classes to keep the concerns separated and the code testable and maintainable. I continue my rant by explaining some of the intricacies of the different presentation patterns and how lovely test first development is. The developer will sit quietly and try to absorb all the information. The next time I look at the code nothing has changed. I got what I deserved.

Why?

I am talking to a Shu level developer as he was a Ha or Ri level developer. The attempt to communicate this way is futile. It is blatantly obvious that you need to communicate differently depending of the level the developer is at. Still I keep forgetting it. This post is to remind myself.

A little tip:

If you find yourself in an argument with a fellow developer and your crushing arguments seem to have no impact, consider that you might be on different levels. You might even be the Shu level person in the discussion. Well. No. That doesn’t make sense ;)

F Share