I recently listened to “Uncle ” Bob Martin giving a podcast on Software Craftsmanship on Software Engineering Radio, and decided to pick up his book Clean Code – A Handbook of Agile Software Craftsmanship. I was struck by the forward by James O. Coplien of Denmark on the 5S Principles and how they tied to maintenance instead of production in Total Productive Maintenance (TPM). Furthermore, these principles as applied to the maintenance floor apply equally well to software:
- Seiri (organization). You need to be able to find things easily. In software, proper naming helps you find things easily.
- Seiton (tidiness; systematize). Everything has its appropriate place. Code should be where it is expected to be, and if not, refactor to get it there.
- Seiso (cleaning; shine). Keep the workplace clean for easier thinking (think grease, wires, etc.). In code, leaving commented-out code and inappropriate comments increases mental clutter that has to be overcome.
- Seiketso (standardization). The group agrees on how to keep the work place clean. Consistent coding standards and patterns apply here.
- Shutsuke (self-discipline). Having the internal discipline to follow the practices and to reflect on one’s work.
If you take a moment to really think about these parallels between the factory maintenance floor and the code we have to work in, these practices that reduce mental clutter on the factory floor apply equally well to developers working with code. Less clutter means higher productivity and later mistakes. For me, it was like a light bulb turned on.
One of his major points is that in coding, we spend 90% of our time reading, and only 10% of our time writing. Thus, what we do to improve the efficiency of reading carries further weight. Unfortunately, we are measured (subjectively or objectively) in terms of writing productivity, passing the costs on to fellow programmers later on.
It reminds me of what I wrote earlier while musing on Steve Krug’s Don’t Make Me Think as applied to web site design and usability. By writing clean code, we require later developers to not have to think more deeply than necessary when reading and using our code by reducing misdirection and mental clutter.
I’m on page 21 of the book now, and looking forward to working through it in continuing to improve my own software craftsmanship.