Religion Doesn't Belong in Software Development
Apparently there is a religious war going on between two factions of software developers. You have your big-design-up-front folks, and your agile folks, and if what I'm seeing in the blogosphere is any indication, they are engaged in a bitter war for religious superiority. I'm going to tell you why they're both wrong.
I cannot stand developers who get religion, especially when it's about stupid things like how to format the code (answer: pick something that everybody can live with and move on; no, your particular way isn't better than anybody else's way), how much to document the code (answer: as much as necessary, which is not as much as you think, but no more), or any of the other things we developers fight about instead of actually building the software. Religion about the development process is pretty stupid, too.
Greg's first rule of development process: if your process has a name by which it is recognized far and wide, your development organization has religion.
That's right. Agile, Scrum, XP, Waterfall, Rational, Test-First; all of those are religion, and I'm sure there are many others, as well. If you ever interview at a place and they say "We do Scrum here" or "We are an Agile shop", etc, run away, because the development group has got religion and you don't want that.
Why is religion bad? Well, by its very nature, it is rigid and inflexible, and represents in the mindsets of its practitioners the idea that they don't have to think about this stuff any more, the process takes care of it all.
Except, it doesn't, and you have to think about this stuff, constantly. The main problem is, no matter how much some developers want it to be so, one process does not fit all. For instance, if you are starting from scratch, good luck getting to your first version in any kind of useful time frame with no design up front. In that situation, you have to develop a foundation for the software, and doing it the Agile way is just not helpful because you must have some agreement at some level of what the hell you're doing before you can start doing it.
If are past that, and are evolving an existing product, then the approach you should take depends on, well, a lot of things, and there's no way any intelligent developer would say "Let's do XP" or "We need this big specification phase first" without knowing all of those things, which should be evidence that perhaps you can't use the same process for all projects.
Greg's second rule of development process: Do what works for your project right now.
I have seen various processes come and go (and come back with new names) over the years, and if I've learned anything, it's that there's really nothing new under the sun. Every so often, somebody comes up with the One True Way that nobody could ever have thought of before, and they give it a name, and suddenly it's the hot new thing. Except it's not hot, it's not new, and it can't be the One True Way. So, instead of searching for the One True Way, I've been searching for the ways that work, and the answer is: It depends.
The bottom line is, have smart and experienced developers in charge of the process, don't subscribe to one religion, and Do What Works. Sometimes that's doing a big design up front and sometimes it's doing iterative refinement in small chunks. Most of all, don't decide that what you've been doing works so well that you give it a name and write a book about it. That way lies madness.
6 Comments:
I would have to work very hard to find a point with which I am in disagreement with.
Good post, Greg.
Well said!! (well, minus the bit about religion being defined as not thinking - but that's a topic for another time)
There are too many variables in a given development shop for a cookie cutter "methodology" to ever fit exactly - including, developer personality, organizational culture, tools, etc......biggest take-away: you don't stop refining / shaping your development processes....ever.
But, if I right a book, I could make money, and start my own religion.
It worked for L. Ron Hubbard.
My friend Jeff Lash makes a similar point in "Adapt your product management practice" at http://www.goodproductmanager.com/2008/09/04/adapt-your-product-management-practice/
You should never blindly follow a method but adapt it to the needs of your team, your project, and your company. However, it is hard to deny the value of agile methods: mostly, they focus on results instead of meetings and documents. And who wants more meetings and documents?
I don't have a problem with agile methods. "agile" is an excellent adjective. I just don't like Agile™ methods. :)
Steve - how about instead of assuming we have to "adapt a method" to meet our needs, we think of methods as a collection of ideas that we can toss in to our tool box, for later use, if and only if they make sense in a particular setting....
When you talk about adapting a method - it sounds like because there's a book and a buzzword behind it, it is automatically the starting point for any discussion about software process... which isn't *AS* wrong as what was described in the original post - but it's in the same territory, as it is yielding a chunk of the brainwork to a method, just because it is a method....
Post a Comment
<< Home