The waterfall which makes Agile pundits go blind
DISCLAIMER: this is a bitter post. If you get offended by this post, I'm sorry, though I had to write this. If you want to leave a comment, please do so, but as it's my blog, I'll remove comments which I think are inappropriate
The last month or so I've been on the 'alt.net' mailinglist which later became 'lists' as the original one, altnetconf, was renamed to cli_dev (for whatever reason) and some group started a new one, altdotnet. I can't say I had a good time. In fact it was more or less a pain in a lot of occasions. I don't mind a sharp debate, and we all can agree on everything, but from the start I've never felt to be accepted as a person who has a valuable opinion. At least not by some more hardcore Agile/XP/TDD people.
As you probably have understood, I left both of the lists and won't come back. Earlier this week I decided to leave the cli_dev list, after a painful thread about the usefullness of comments in code. It's an old debate, so from the start everyone participating would know that it would likely last forever and the basic dumb arguments would be placed on the table. What made it so painful was that it never became a discussion between professionals. There wasn't any serious debate which could all bring us forward. Instead it ended with bickering why some of the posted examples (one of them was mine) were bad, and more importantly: they were used to bash the code and with that the programmer. I've spend almost two decades in newsgroups and mailinglists now so these kind of debates aren't new to me, but as I'm not a teenager anymore (far from that ), I started to wonder why on earth was this even happening.
The point of such a mailinglist falls apart if debates aren't used to get things forward, to express ideas and learn from other people's arguments why they've chosen their point of view. A lot of the discussions weren't about debating arguments, but hammering down opponents, as if there were achievements to gain from doing so. The cli_dev list particulary was a big pain because of the endless debates about what 'Alt.net' meant, why or why not there should be a manifesto, who had the right to call the shots of what would be included in such a manifesto etc. etc. I think the comment debate was the last push I needed to call it a day on that list.
The other list, altdotnet, was OK for a while, however it turned out that the group of people participating in the discussions actually started to look like the same group who did the debates on cli_dev. The end result was that the discussions became more and more painful. The reason was that you had to be very careful with your formulation to avoid awaking the TDD/Agile people who simply want to b*tch about anything that's not TDD/Agile.
This morning I made a mistake: I used the W word in a post. What's the W word? The W word is Waterfall. The W word makes Agile pundits go blind, at least for a couple of minutes. It will make them go blind for any words you might have written after using the W word. What did I do? I used the W word in a short silly overexxagerated-to-get-it-across-example:
Every movement/pressure to go into a given direction in general causes a reaction among people who disagree: they will try to go into a different direction. Waterfall, while being great for systems which must not fail like your MRI scanner or wafersteppermachine or your satellite robot, it sucks when you have to deal with clients who change their minds 10 times a day and who sold their tiny brain at e-bay last year.
A silly example, but I made an error: I stated that Waterfall was great for a situation. I meant it as an example of how one movement can cause the creation of a counter-movement. This is sociology 101. All of a sudden, I was back in the seat meant for the Waterfall lovers and I found myself defending Waterfall, something I don't want to do, because I don't like the methodology that much (read: I in general don't see a lot of cases where it can be successful)
I don't know why some people keep on pushing the 'Bouma likes Waterfall' message, while it's not true. Perhaps it serves their agenda. This latest 'debate' this morning made me realize: "What on earth am I doing here? Why am I writing posts on a mailinglists which has people who like to offend me?" and decided to leave the altdotnet mailinglist as well. It was a sad ending for me, as I had great expectations when I joined the lists a month ago.
I did learn something though. What surprised me to no end was the total lack of any reference/debate about computer science research, papers etc. except perhaps pre/post conditions but only in the form of spec#, not in the form of CS research. Almost all the debates focused on tools and their direct techniques, not the computer science behind them. In general asking 'Why' wasn't answered with: "research has shown that..." but with replies which were pointing at techniques, tools and patterns, not the reasoning behind these tools, techniques and patterns. Answering Why with pointing to techniques, tools and patterns is creating a cyclic debate: the Why question is asked to understand the reasoning why some tools/techniques/patterns/practises are used. Pointing back at tools/techniques/patterns/practises isn't going to make you any wiser, as you then only learn tricks, because you can't put any argument on the table why you use pattern X, use technique Y and practise Z.
There's nothing wrong with applying tool T or pattern P to solve a problem you're facing. However if someone asks you why T or P are used, you should be able to answer that question with solid arguments, and not with "T was shiny, open source and l33t and P is used by everyone else in the group".
For example: if you say "You should use the principle of Separation of Concerns (SoC)", what exactly do you mean? It's not as obvious as it sounds. Please read the paper N Degrees of Separation: Multi-Dimensional Separation of Concerns by Tarr, Ossher, Harrison. It's an example how some 'technique' isn't as general usable as you might think: one has to think it through.
That kind of debates weren't on the alt.net mailinglists, they stalled on the level of 'thou shall use SoC", but what it meant exactly wasn't really worked out, as it was apparently assumed that everyone would know what it means. Referring to the paper didn't help, no-one picked it up. This is just an example of what I noticed.
I do think that it's important. I'm not totally finished with how I would call it, but the process looks like some years ago a separate software engineering world has been created (not only on .net, it's much wider) which isn't connected with the computer science world, but instead is focused inwards, looking for answers in the own world instead of in the computer science world: ideas aren't driven by science and research, ideas are driven by what you can do with a tool, with a technique, a pattern. The consequence is that the result of working on that idea has its root in the tool, technique or pattern, not in fundamental research in computer science. This result causes other ideas, which causes other results etc. etc.
Is this bad? I don't know, but if these two worlds drift apart, and the more I think about it, the more this is going on already, the consequences could be severe: the world in which research is taking place isn't feeding the world which applies techniques/tools/patterns with fundamentals, that world of techniques/tools/patterns is feeding themselves with 'fundamentals', which is actually cyclic reasoning: the fundamentals aren't fundamentals, they were the results of applying fundamentals, which doesn't make them fundamental per se.
With this insight, I also understood all of a sudden why there is even an 'alt.net': it's simply a movement which wants to use a different set of techniques/patterns/tools/practises than Microsoft prescribes to its customers via its product catalog. Leaving the lists behind with that in the back of my head wasn't such a loss after all: it's the science which counts, not the technique/tool/pattern/practise. Always keep asking Why, and search for fundamental answers. Only then you'll gain wisdom, instead of just knowledge.