Miyamoto Musashi was a 17th-century samurai who never wrote software. He claimed never to have lost a fight. Losing a fight meant serious body damage, and it was quite an accomplishment to be alive with all limbs in place at the age of 70. A romantic novel series about Musashi depicts his early life, fights, and mental development. It is a wonderful read and also vividly portrays his fighting approach, which his personal book describes. His personal book is the Go Rin No Sho, in English The Book of Five Rings (I have the Thomas Cleary translation, Shambhala, 2000), which he wrote at age 70. That book outlines his approach as clearly as he can make it, describing mental states, specific moves, and the use of large groups. It is short, clear, and wonderfully absent of the usual Zen doubletalk, "Be by not being, fight by not fighting, win by losing," and so on. I include Musashi here because three characteristics of his fighting style match my software development style, and he describes them so well:
The first recommendation is to use any and all schools and techniques, without great attachment. At the time of his writing, warriors formed schools around particular stances, styles, weapons, and tactics. His view was that each had its merits and weaknesses; one should use the range of them without getting stuck in any one. The same is true in software design techniques. Don't get stuck in UML, RUP, CMM, SEI, XP, CRC (insert your favorite school's or tool's acronym here). Use whichever you need at the instant you need it. Discover what you need at different moments, so you can develop a tool- and method-attack strategy that will tell you which one to pick up and when to put it down. The second recommendation is to reflect on what you do and how you do it. Reflective practice has been discussed throughout this book. The third recommendation is to pay more attention to winning than to looking good. Winning the software development game is shipping the software. If you can do so without process, do so. My favorite-ever recommendation to a group was: "What? You have a five-week project, with three developers who have done this before in the same technology? You don't need a development coordinatorjust do it and go home." Musashi said, "Do not do anything useless." Musashi cared about winning the game, which in his case was life-or-death. I am attached to delivering the software. The prettiness of the dance doesn't matter if the software comes out at the wrong time. In the following, notice that even in the 17th century, Musashi describes Shu-Ha-Ri and the importance of developing skill. The "opponent" in software development is the problem to be solved. "Killing the opponent" is delivering the software and winning the game. Here are some of his words (or Cleary's translation of them), presented as individual excerpts. The Book of Five Rings
Applying Musashi to Software DevelopmentI share three views with Musashi. I differ on the fourth. Appropriate Tool, Appropriate TechniqueKnow your tools, know what you need at the moment, and you will know how to get value out of the tools at your disposal, even if they aren't perfect. You can even profitably use tools that were not originally constructed for software development. Here is how I work in two different circumstances. When given a CASE tool to use, I first exclude from use all of the tool's capabilities that do not lend value to the project at hand. Although this is an underutilization of an expensive tool, my goal is not to use a tool to its maximum, it is to deliver software. On a different project, we may select as our primary strategy having the CASE tool create the final code. On this project, we plan on extending the tool as we need to so that it performs the job we want it to do. Know your favorite tools and techniques for key tasks without getting overly attached to any one. Learn to adapt to whatever is available. Direct SolutionSee if you can just "cut off your opponent's arm with a single blow," as in sword fighting. In software terms, see if you can just "do it and go home." Avoid waste. When you have to feint, block, and parry, understand that you are doing that because there is no alternative. Do just enough of it to win. Avoid flamboyant showmanship, because it does not help deliver the system. In software development, look for simple solutions to your process problems just as you look for simple solutions to your technical problems. Recall the one-sentence summary of Crystal Clear: "Put the people in a room with printing whiteboards, give them access to user experts, and have them deliver running tested software every two months." If you can do that, then just do that. Reflection and Skill DevelopmentContinue to develop your skill, and take time to reflect at regular intervals. Microtouch InterventionI do part company with Musashi in one area. He was in the business of killing or getting killed. I am in the business of helping people deliver software. There is a dramatic difference. I like to cut quickly to the heart of the problem but keep the people fully intact. Arm-chopping is not an effective intervention strategy. I am after the smallest possible changes to the people on a project that accomplishes the job: micro-touch intervention. (Actually, I suspect Musashi would agree with me, if he were in my business.) Microtouch intervention is based on two ideas:
Better understanding, smaller interventions. Two centuries ago, syphilis patients died. A century ago they underwent near-fatal arsenic treatments. These days they are given antibiotics. Early antibiotics were broad-spectrum bacteria killers; nowadays the antibiotics are targeted to the specific bacteria they are to kill. Early computers were made with large vacuum tubes. Then, they were made with transistors. Now they are made with only a few thousands of atoms, recently even just single atoms. Less energy is needed to effect a needed change the better we understand what we are doing. When we understand enough, we need only move molecules small distances, and the consequences will ripple out to produce the macro-effect we are interested in. In software development, we are still in the amputation stage. As we better understand the forces underlying our profession, we can make smaller and smaller changes to improve a situation. I know that asking people to change their personal habits is a big request, so I prefer to change team seating or a few job assignments and let the human communications mechanism effect the much larger changes. Small changes add up. I find it remarkable that just aligning many, microscopically small magnetic domains in a metal converts a nonmagnet to a strong magnet. Aligning people's purposes has the same effect on a project. Imagine many people, working to their own value systems, pursuing whatever goals happen to hit them each day. They will sometimes, almost randomly, help each other or thwart each other. Suppose you ask each person to make a tiny change, one that they find acceptably small. You can arrange the changes so that the people thwart each other less, help each other more. They are oriented in the same direction. With almost no energy change, the project team achieves a resulting power all out of proportion to the changes made (this is shown graphically in Figure 3-17 and Figure 3-18). This is summed up in Kent Arett's statement, "Paint the vision and get motivated people, and it's 'Game Over.'" (see "Fewer and Better" on page 195). Microtouch intervention has its limits, of course. Sometimes, the correct move is not to continue with microtouch intervention but to replace the entire project structure with a new one. This happened once when we saw that a 30-person, colocated team could deliver the same as the failing 300-person multinational team. The art, of course, is knowing when to rebuild the project and when microtouch intervention will work. Makes me wonder how Musashi would express that. |