





Better: A Surgeon's Notes on Performance is a terrific book, especially for software developers. Issues of efficiency, ethics, and improving personal performance are all critical to software professionals. “Better” addresses them with insights that forced me to re-examine some of my own ideas and practices. Highly recommended.



I found some folks arguing about whether developers should write messy code . Having observed our amazing midwives “deliver” for the second time, I believe it is often an issue of Informed Choice.Presuming that the client or stake holder bears the entire “cost” of the decision, they deserve the last word. I know more than a few people who argue with this, saying that writing clean code is in the client’s best interests. Well yes, of course it is. And in my experience, so are a number of other practices such as managing a project using Theory P using small teams , and customizing a design for the specific project . But let’s make this really simple: the client is asking for something which—in your professional opinion—is not in their best interests but also is not so ruinously bad that the entire project will absolutely, positively fail.There can be a set of options that are all somewhat reasonable, with some better or much better than others, but none being outright wrong. In midwifery, there is a choice between giving birth in the hospital or at home. There is a choice between having an epidural or going natural. There are choices about what to administer to the newborn as a prophylactic against infection. The mother makes an informed decision on each of these subjects with the assistance of the midwife, and the midwife supports here even if it is a decision that the midwife feels is statistically less than optimum.In software development, a client may wish to design everything up front. I believe with all of my heart this is not the best way to go, but let me tell you: I have managed projects on this basis and succeeded. I think I have done a better job managing projects another way, but I can’t tell you that a project absolutely has to fail if you start this way. Likewise large teams deliver software, and some of the things I have built have had a very high buzzword-to-value ratio.I would argue against these practices in many cases, but if the client is fully informed of the possible outcomes, they must be permitted to control their own destiny.I know there’s a grey area here. If you believe the client wants things so messy and so unhygienic that you don’t have confidence in the project, I will support your decision to say no to the client. I applaud that. But if it’s in that grey area where we are arguing the difference between good and mediocre but serviceable from the client’s perspective, I believe that my responsibility is to provide clients with the information they need to make the decision.So for example, if they demand BDUF, I have to tell them how I think the project will actually go if we walk that line. I need them to “sign a consent form” explaining that they understand the risk that we will deliver something that will meet the written requirements but will not meet their updated, educated requirements once the project is underway. They must be clear on the fact that this choice will be a loss for them if and when they realize that the origional direction was imperfect. I need them looking me straight in the eye and saying “I understand what you are saying, but I am willing to take that chance.”If they argue with me and tell me I’m wrong, that BDUF is always better than iterative, then I know that I am not the right man for them. I know that they are not making an informed choice. And likewise, if asked to do something quick and dirty, I will say “no” if the client tells me they believe it is the best way. But if they understand technical debt, if they know they are making a trade off of now versus later, who am I to reach into their pocket and spend their money as I see fit?Our midwives know much more about giving birth than we did. And they advised us accordingly. But we bore the responsibility for certain decisions, and they ceded those decisions to us, even when they had strong opinions about what was the best thing to do. I think as a software developer I must follow the same path. A midwife will not allow a client to perform a home Caesarian section . There are limits, there are things we know mean instant and irrevocable failure. But where judgment is required, where there is a decision between mediocre, good, and better outcomes, they advise and then allow the client to make the final say.I believe we in software must follow the same path.