Valorie’s first day back at work was yesterday, and the principal at her school led a discussion about the following parable:
Once upon a time there was a town that was built just beyond the bend of a large river. One day some of the children from the town were playing beside the river when they noticed three bodies floating in the water. They ran for help and the townsfolk quickly pulled the bodies out of the river.
One body was dead so they buried it. One was alive, but quite ill, so they put that person into the hospital. The third turned out to be a healthy child, who then they placed with a family who cared for it and who took it to school.
From that day on, every day a number of bodies came floating down the river and, every day, the good people of the town would pull them out and tend to them – taking the sick to hospitals, placing the children with families, and burying those who were dead.
This went on for years; each day brought its quota of bodies, and the townsfolk not only came to expect a number of bodies each day but also worked at developing more elaborate systems for picking them out of the river and tending to them. Some of the townsfolk became quite generous in tending to these bodies and a few extraordinary ones even gave up their jobs so that they could tend to this concern full-time. And the town itself felt a certain healthy pride in its generosity.
However, during all these years and despite all that generosity and effort, nobody thought to go up the river, beyond the bend that hid from their sight what was above them, and find out why, daily, those bodies came floating down the river.
– Dennis Connor, Gonzaga University. He’s unaware of its origin…
This story led to a rousing discussion among the teachers, and I realized that it’s true outside its intended circle (lawyers in training). It’s just as relevant to software engineering as it is to any other field of endeavor.
As a simple example, think of computer security. Issuing patches is equivalent to tending the bodies coming from the river. Eventually you get pretty good at it, and can be rightly proud of your work. But issuing patches ignores the root causes of the problem; it just deals with the symptoms. Sometimes you’ve got to go beyond the bend in the river to find the source of problems. In many ways, XP SP2 is an example of going beyond the bend – it’s an attempt to preemptively thwart the bodies from coming down the river.
And this goes way beyond that. How many times have you spent fixing bug after bug after bug in a particular component without spending the time to look at the root cause of those bugs? Maybe taking a step back could let you eliminate entire classes of bugs. Maybe there’s an underlying class that’s too hard to use and instead of applying band-aid after band-aid, the right thing to do is to throw away the old code and replace it?