In the midst of all the methodology wrangling... I've always felt that there is a…
I once used a hammer and it didn’t work. Therefore, people should never use hammers.
If you find that reasoning satisfactory, then you may also appreciate the following statements:
- We tried pair programming and it didn’t work.
- We tried test-driven development and it didn’t work.
- We tried Scrum and it didn’t work.
- We tried User Stories and they didn’t work.
- We tried Personas and they didn’t work.
- We tried Specification by Example and it didn’t work.
- We tried continuous delivery and it didn’t work.
- We tried baseball and it didn’t work.
There is a notion of logical validity. An argument may be logically valid even it if is untrue or unprovable. Validity is a question of structure. The following structure and example are taken from the Rational Wiki page about logical validity.
- If X then Y
- Therefore, Y
And the example:
- If there is creation there must be a creator.
- There is creation.
- Therefore, there is a creator.
So, is there a creator? Maybe. We can’t tell just by looking at the sample argument. We can tell that the argument is structurally valid.
Logical validity is prerequisite for an argument to be considered logically sound. To be sound, an argument must be valid; but a valid argument is not necessarily sound.
With that background, what do you think of the opening assertion of this post? “I once used a hammer and it didn’t work. Therefore, people should never use hammers.”
I think the argument is logically valid:
- If hammers don’t work, then people shouldn’t use them.
- Hammers don’t work.
- Therefore, people shouldn’t use them.
But I question the logical soundness of the argument. The part of the statement that stands out for me is the phrase “it didn’t work.” What is the definition of “it works?”
My first impulse is to consider the possibility that the hammer did not function properly as a hammer. This could occur due to a fault in the design or manufacture of the hammer. Even so, such a fault would not condemn all hammers categorically. By this definition, as long as a hammer does what hammers normally do, then it “works.”
If we assume the hammer did what hammers normally do, then what might the speaker have meant by saying “it didn’t work?”
Most likely, they meant they did not achieve the result they expected or wanted when they used the hammer. That may be so, but is it reasonable to conclude from that experience that hammers are categorically useless?
A hammer is a kind of tool. A tool is something that aids in accomplishing a task. Hammers are designed to aid people in accomplishing the task of driving nails.
If “it didn’t work” means “I didn’t accomplish my task,” then is the tool to blame? Setting aside faults in design or manufacture, we can assume a hammer always does that which hammers are designed to do: They apply blunt force to a target. We can further assume that a hammer has no goals, hopes, fears, intentions, or ulterior motives. It just strikes whatever you swing it at, whether or not you’ve selected an appropriate target and whether or not you’ve swung the hammer with skill. To say that a hammer “didn’t work” is meaningless.
One can also consider the following to be tools, in the sense they are things that aid in accomplishing tasks:
- pair programming
- test-driven development
- User Stories
- Specification by Example
- continuous delivery
If we want a tool to help us accomplish a task, it seems to me we need to follow a two-step process:
- Choose the right tool for the job
- Use the tool properly
Otherwise, it won’t “work.”