Retreaded: FaultyTechniqueDichotomy
Retread of post orginally made on 05 Aug 2004
My main inspiration in life is trying to capture and improve the
way in which we do software development. So I spend a lot of time
talking to people about various techniques they've used, which ones
work well and which ones suck.
As I do this, I often hear about faulty techniques: "FIT wasn't
worth the effort", "never put any logic in stored procedures", "test
driven design led to a chaotic mess". The problem with any report of a
faulty technique is to figure out if the technique itself is faulty,
or whether the application of the technique was faulty.
Let's take a couple of examples. Several friends of mine
commented how stored procedures were a disaster because they weren't
kept in version control (instead they had names like GetCust01,
GetCust02, GetCust02B etc). That's not a problem with stored
procedures, that's a problem with people not using them properly.
Similar a criticism that TDD led to a brittle design on further
questioning led to the discovery that the team in question hadn't done
any refactoring - and refactoring is a critical step in TDD.
Of course if you take all this too far, you get the opposite
effect. I often say "no methodology has ever failed". My reason for
this is that given any failure (assuming you can know
WhatIsFailure) you can find some variation from the
methodology. Hence the methodology wasn't followed and therefore
didn't fail. This issue is compounded even further with self-adaptive
agile methods.
So when you hear of techniques failing, you need to ask a lot
more questions.
Was it the technique itself that had problems, or was some
other thing being missed out. Does the technique have an influence on
this? (Version control is a separate thing to stored procedures, but
it can be harder to use version control with stored procedures due to
nature of tools involved.)
Was the technique used in a context that wasn't suitable for
it? (Don't use wide-scale manual refactoring when you don't have
tests.) Remember that software development is a very human activity,
often techniques aren't suitable for a context because of culture and
personality.
Were important pieces missed out of the technique?
Were people focused on outward signs that didn't correspond to
the reality? This kind of thing is what Steve McConnell called Cargo Cult
Software Engineering..
An interesting aspect of this is whether certain techniques are
fragile; that is they are hard to apply correctly and thus more prone
to a faulty application. If it's hard to use a technique properly,
that's a reasonable limitation on the technique, reducing the context
when it can be used.
There's no simple answer to this problem, since with these
techniques we are as unable to measure compliance as we are unable to
measure their successfulness. The important thing to do is whenever
you hear of a technique failing - always remember the dichotomy.
reposted on 06 Aug 2014
Martin Fowler's Blog
- Martin Fowler's profile
- 1099 followers
