I’ve been trying to write a blog post about following “best practices” and how eventually you end up breaking them. But I couldn’t find the right words until I randomly stumbled upon a concept from Japanese martial art: Shuhari.
It is known that, when we learn or train in something, we pass through the stages of shu, ha, and ri. These stages are explained as follows. In shu, we repeat the forms and discipline ourselves so that our bodies absorb the forms that our forebears created. We remain faithful to these forms with no deviation. Next, in the stage of ha, once we have disciplined ourselves to acquire the forms and movements, we make innovations. In this process the forms may be broken and discarded. Finally, in ri, we completely depart from the forms, open the door to creative technique, and arrive in a place where we act in accordance with what our heart/mind desires, unhindered while not overstepping laws.
To me, this explains everything I see in the software development industry.
First, we follow the rules. Learn best practices. Read the Gang of Four. “Keep it simple, stupid”, “Do not repeat yourself”. shu.
Then, we rebel and break the rules. NoSQL, React, Rails and many others were the expression of breaking the established best practices. ha.
Finally, we transcend the rules. There are no rules and no breaking the rules. You just do. ri.
A beginner following tech Twitter or Hacker News nowadays will be very confused. Some people preach best practices, others are loudly recommend breaking them. (Unfortunately you rarely see anything from those who transcend them.)
People who grew up writing simple HTML and JS see React as breaking the rules. People who grew up writing React see HTMX as breaking the rules. And this process will never end.
We need to realize is that everyone is on a different stage of this process. It doesn’t help the beginner to be thrown into “ha”: it will only confuse them.
So should you follow the best practices of clean code? Well, yes and no: “Let clean code guide you. Then let it go.”
Hello! This text lives here to convince you to subscribe. If you are reading this, consider clicking that subscribe button for more details.
I write about programming, software design and side projects Subscribe