#Ramanichandran novels 2016 software
Since these needs change, software must change.Ĭhanging software means doing new work, and this is usually done in the context of existing work that was already completed. Software must be able to change if it is to remain valuable, because its value comes from its ability to meet a need of an organization or individual. TDD drives the issue to one of bug prevention (much more time-efficient) rather than bug detection.
#Ramanichandran novels 2016 code
Without TDD, defects in the code will largely be dealt with after development is over, requiring much re-investigation of the system after the fact.Traditionally developers have worked in an environment of considerable uncertainty, and thus have spent time writing code that ends up being unnecessary, which wastes their time. The tests themselves require precision in our understanding of a requirement and thus lead to code that satisfies the exact need and nothing more.When tests are written as the specification that guides development, they keep the team focused on what is actually needed.
Anything that wastes time or delays value must be rooted out and corrected. What he wanted was a cheesecake topped with strawberry preserves, which he has always thought of as “strawberry cheesecake.” All this waste and delay could have been avoided if the requirements had been communicated with more detail and accuracy.įor most organizations the primary costs of developing software are the time spent by developers and testers doing their work, and the effect of any delays caused by errors in the development process. Again the boss in unhappy with the result. So you try another version where the plain cheesecake is topped by sliced strawberries. The boss stops by to sample the product and says “no, no, not strawberries in the cake, I meant on the cake.” So you try again, this time making a plain cheesecake base and adding chopped up strawberries, stirring them in. He says “I did not ask for strawberry flavored cheesecake, I asked for a strawberry cheesecake. You finish the dish and invite your boss to try it.
You prepare a graham-cracker crust, and a standard cheesecake base to which you add strawberry syrup as a flavoring. You work as a chef in the restaurant, and the owner has told you to add strawberry cheesecake to the menu. The process of writing acceptance tests provides an excellent framework for this collaboration, and is the responsibility of everyone in the organization. The best way we know to ferret out the hidden assumptions, different uses of terms, different understanding, missing information, and the all-important “why” of a requirement (which is so often simply missing) is by engaging in a richly communicative collaboration involving developers, testers, and businesspeople. When she asked why I did that, I replied “they had eggs.” “Clip” means to attach (clip one thing to another) and to remove (clipping coupons).Ī joke we like: My wife sent me to the store and said “please get a gallon of milk - if they have eggs get six.” So I came back with 6 gallons of milk. Communication is an extremely tricky thing, and there can be extremely subtle differences in meaning with even the simplest of words. One major source of mistakes is misunderstanding. It will have great business value and, in his determination, is the most valuable thing to have the culinary staff work on. He made this decision based on customer surveys, or the success of his competitors at selling this particular dessert, or some other form of market research that tells him this added item will sell well and increase customer satisfaction ratings. It is the responsibility of project/product management.Īs a restaurant owner, the boss has determined that the next thing that should be added to the menu is strawberry cheesecake. This is an issue of product portfolio management and business prioritization, and we do not mean to minimize its importance it is crucial. How the business makes this decision is out of scope for us, and if they make the wrong one we will certainly build the wrong thing. Our assumption is that this decision has been made, and made correctly before we begin our work.
This means “the right thing” is the thing that has been chosen by the business to be the next most important thing, in terms of business value, that we should work on. We'll describe each "do", noting where and if TDD has an impact, and then do the same thing with the skills.Įverything the team does must be traceable back to business value. This context has to do with the 6 things that we must accomplish (do) and the 8 skills that the team must have in order to accomplish them.
This post is not about TDD per se, but rather a context in which TDD can demonstrate its place in and contribution to the value stream.