Friday, September 29, 2006
« Lovely blog post about Agile Methodologi... | Main | CSLA .NET 2.1 is available »

This post is in response to some comments in my previous post, which linked to Steve Yegge’s blog entry about Good Agile and Bad Agile.

One commenter, JH, makes a perfectly valid observation: criticizing Waterfall and Agile without offering an alternative isn’t very productive. So…

Actually, truth be known, I used Waterfall and several variations of it for many years - with success. We collected requirements, analyzed them, did our design, our development, testing - all the stuff you are supposed to do. And you know, the projects worked out pretty darn well.

Why? I don't honestly think it was Waterfall that did it. It was the fact that I was working with a motivated team of reasonably talented developers who really cared about doing a good job. In order to do a good job building software it is so amazingly clear that you need to understand the need (requirements/analysis), translate them to software (design/development) and make sure the result actually works (testing).

MSF, by and large, is just Waterfall in a spiral, with some different documents and techniques. Agile is just Waterfall in random order, and with a few different techniques and tools. In the end it all comes down to gathering requirements, analyzing them, translating that into a design, doing some coding and some testing and away you go. You can rearrange the pieces on the board, but they are the same pieces.

Every consulting company I’ve worked for has had its own Methodology (or Framework, or whatever they chose to call it). Each of them was some merger of concepts, techniques and tools from Waterfall, MSF, RUP, Agile and various other Methodologies with which the creators were familiar. And each of them worked just fine.

The primary issue I have with Methodology (capital “M”) is that following the Methodology ceases being a means to an end, and becomes blind Doctrine. The steps in the process cease being tools used for a reason, and become mere Ritual.

“Why are you doing X?”

“Because the Methodology said to!”

“But there’s a better approach. If you just used this technique …”

“You aren’t questioning the infallibility of our Methodology are you? This Methodology was written by the Great PooBah, and has been handed down unchanged through time!”

“What? No, I was just suggesting…”

“HERETIC! Burn him at the stake!”

If you can somehow keep your Methodology from becoming Doctrine and Ritual, then you can be successful – with almost any Methodology, I think. Unfortunately it seems that human nature has an intrinsic desire to conform to Doctrine and Ritual – you can see it in the dogmatic positions of so many Methodologists out there.

As Clemens points out, within a given team, assuming reasonably sized teams, I think you can pick almost any Methodology and do quite well. With the right people, even the Cowboy approach works great in most cases, and it is quite clear that Agile can work fine too. So does Waterfall by the way.

But across teams? You must have some level of formal structure. Some level of formalized communication and process and coordination and authority. I know, that all sounds very ugly, and not at all fun, but it is unavoidable. Conflicting schedules, overlapping dependencies and competing political interests require a higher level of structure in these cases.

Traditional Waterfall presupposes lengthy blocks of time for each step, and isn’t practical in today’s world – even (especially?) across teams. However, a modified Waterfall, along the lines of the MSF spiral, works really well in my experience. Assembling a cross-project team, composed of representatives from the more tactical teams (regardless of their Methodology of choice) for the purposes of coordination and mediation is absolutely critical.

So my “Methodology” of choice? At a team level, pick the techniques and tools that work within your specific environment, with your specific team members – with all their varied talents and capabilities. Take the best from Waterfall, MSF, RUP, Agile and anything else you can find. Some techniques work in one setting and fail horribly in another.

At the level of a large project, or cross-project effort, some variation of Waterfall or one of its modern descendents really is, in my view, the right answer. Few other Methodologies provide sufficient structure and formalization of process to make such efforts manageable.

Friday, September 29, 2006 8:28:48 AM (Central Standard Time, UTC-06:00)  #    Disclaimer  |  Comments [9]  | 

Friday, September 29, 2006 10:39:33 AM (Central Standard Time, UTC-06:00)
Oh man .. this totally took the words out of my mouth.

YOU ARE SO RIGHT.

Rocky - it takes years and many projects to get this maturity to realize that it's the people more than the methodology that matters.

Good post.
Friday, September 29, 2006 11:16:52 AM (Central Standard Time, UTC-06:00)
I think that your choice of the "best of" each Methodology is absolutely correct. Now I am in the boat that I think that you and your Agilist protagonists are actually arguing the same side. I don't think that any Methodology (again, using the M) ever claims to be the be-all and end-all for all situations. A recent RUP book I read mentioned that explicitly.

http://www.amazon.com/Rational-Unified-Process-Made-Easy/dp/0321166094/sr=8-1/qid=1159549540/ref=pd_bbs_1/102-4533066-8933744?ie=UTF8&s=books

Agile is no different.

Just as you don't use every piece of the .NET Framework for EVERY project, these methodologies are just frameworks that give you the tools to get to where you want to go more quickly rather than trying to develop these procedures from scratch. None of them claim that you have to follow every step and that you have to conform your business to their methodology. They all state that you should "use what works". "Here's some tools, use them to your own benefit".

I think that arguing that Agile is wrong because it does things from a differing perspective is ignorant in that Agile implements many of the SAME tools used by other methodologies and may, in fact, be the "right" way under certain circumstances. Consultants (especially) should be cogniscent that they are at the mercy of the culture of the company they go to work for. A small project with a small team of dev's may be best suited for Agile; who knows. Ruling it out before you start is limiting your own toolkit you have available to fulfill the needs of "the man".

Sam Gentile seems to do fairly well with Agile on his team, even from within what you would expect to be strictly an MSF shop (pun intended). I think he's just doing what works as well. I'd bet he's not following strict Agile doctrine but doing exactly what you said, using what works for his team.
JH
Sunday, October 01, 2006 2:17:48 PM (Central Standard Time, UTC-06:00)
I read Rocky’s post, and the link in his post. Google is the way to go, isn’t it?!

The thing is, interestingly, you wonder, if you can only categorize the google way into two categories: XP way, or, well, let’s say, non-XP way, which category you put it in?

I guess, it is the trick here, isn’t it: XP somehow brain-washed us to think it this way, XP way or non-XP way. In reality, it is the developers, the team, not the Process or, the “Methodology”.

However, isn’t it also the core of the original message from the classic XP? I guess part of the reason of P is not process is because it is anti-process.

You pointed out one thing: consulting background, especially consulting for design phase. By itself, it is more in line with UP per se, not XP per se. I guess that must be a factor for not feeling comfortable with XP?

However, also as you pointed out, pragmatism, results. XP is all about results (ironically, it has its embarrassing record in its birth record, man, it is not a perfect world. It is humorous to point the out, but also cruel though. But it is good also, so that we all know, “all depends”). UP/RUP can be configured to keep things running, keep the momentum, and not get cancelled (release often is the ultimate way to avoid being cancelled), and deliver the final product(s) smoothly – if you do that, as I can see obviously did, as any experienced developer/architect/consultant would, then, it is UP configured as XP/Agile, or agile (lower case “a”), or, just configured plain right and good.

Just to be fair to XP, techniques of extensive unit testing (not UI though, that is too much; also, not most of the property methods, that is also too much) and refactoring techniques -- those are brought in, put on the table, and made visible, by XP. Before XP, those things are too “low level” to be even widely discussed seriously.

Also, when UP/RUP/UML was at its marketing peak and create huge enthusiasm, XP came out and provided a much needed balance and saved a lot of projects. It sounds paradoxical: the extreme programming moderated the unified process.

Sunday, October 01, 2006 9:34:21 PM (Central Standard Time, UTC-06:00)
Agile Methodology is being used successfully by expert OOPs practitioners for projects of certain duration (2 or 3 months) within a certain context (Requirements are changing continuously). Agile Methodology showed the value of automated tests and daily builds to Morts. Fact is that they were applying some methodology versus applying no methodology which is always a good thing. At least, it is giving some structure/discipline/framework where none existed. There is a cost (i.e., Quality) to Agile Methodology; it is being admitted by its practitioners.
http://vikasnetdev.blogspot.com/2006/09/design-is-back-long-live-design.html

Not everyone has been successful. Here are confessions of a failed Xper i.e, me. :)
http://vikasnetdev.blogspot.com/2006/09/confessions-of-failed-extreme.html
Saturday, October 07, 2006 12:56:18 AM (Central Standard Time, UTC-06:00)

Vikas said: “At least, it is giving some structure/discipline/framework where none existed”.

That remind me a weird observation of TDD in .net.

Basically, it is the downside of the same fact that Vikas pointed out.

In java, TDD represents the lightweight force -- it attracts guys who are tired of heavy process stuff. As a result, most practitioners in java TDD tend to cut corners: 100% unit testing, GUI unit testing, property unit testing? -- shut up and give me break! That is so “natural”; that goes without saying: come on, this is XP!

However, in .net TDD attracts guys who can waste time!!! -- I am sorry to say this, but it is the insight I got after a lot of surprises I got from .net’s TDD guys – TDD in .net represents process, not anti-process. It is very weird and sometimes even shameful and dishonest, in the sense that TDD is anti-process -- how can a person abuse TDD to drive the agenda to create a heavy hierarchy!

This weirdness in .Net TDD is that classic VB’s RAD is much more lightweight, so, people who likes lightweight will not be attracted to TDD. And people is the determining factor of a (sub)culture. So, TDD in .Net is pro-process!

Combining the above factor with another factor that TDD, by its default configuration, is against consulting designing, it is no wonder a person who is working on consulting framework design, and has a healthy dose of classic VB RAD sense, will be antipathy about TDD in .Net.

I am with you, Rocky ;-)
Saturday, October 07, 2006 1:23:28 AM (Central Standard Time, UTC-06:00)
I was not sarcastic when I say “I am with you” ;-), let’s me explain:

1. We can re-interpret XP/TDD to such way that it supports or even requires using framework. It is really very simple: using a “metaphor” in XP/TDD really means picking a framework among a few well-known frameworks. Consulting in design phase means to establish the “metaphor” for a project. It requires tear apart well-known frameworks and combine those parts together.

2. The pro-process factors, which are minimal in XP’s origin (small talk), and are still heath in java (because it is fighting with heavy processes), become absolutely ridiculous in .Net -- because XP/TDD is actually fighting the classic VB RAD, go figure! So, it is right to cut those pro-process craps in TDD in .net.
Friday, October 13, 2006 12:23:36 PM (Central Standard Time, UTC-06:00)
I just think one should consider the task at hand before choosing a methodology. A few cases come to mind:

1. Software product for a startup: The team define the requirements and implement them
2. Software product for version 10 with 1000 developers
3. Implementing a custom system for one business specifically
4. Implementing a package for one business specifically

There are a lot more permutations of this, but consider the objectives. In the first two it is to sell as many copies as possible, in the second two your objective is to support a business process and have users behave differently on the Monday of go-live.

Obviously they will require different methodologies and techniques in requirements creation or facilitation.

What I often miss from software development methodologies (rup etc) is everything that goes on before you get to requirements.

There are two questions I ask of every methodology:
1. How do you know you are complete?
2. How do you know it is correct?

Regarding number one, is it when nobody in the room or on the team can come up with any more requirements? Or, is it when you have a way of systematically ensure you have captured everything?

Number two, is it enough to check against the written documentation of requirements, or do you need something else not captured in the software development methodologies?

I know I make the same mistake as the original blog and not offering any alternatives. I have found mine, but it with take too long to include it here.

I just wanted to shed some light and add variation to the debate!-)

Cheers,
Knut
Knut
Tuesday, October 17, 2006 6:07:42 PM (Central Standard Time, UTC-06:00)
Right on the money Rocky. Here's what I wrote about this topic a year ago:

http://devauthority.com/blogs/devprime/archive/2005/10/26/586.aspx

The Herasy of Agile Documentation

The dirty secret of methodologies is that methodologies weren't originally really invented to make development easier or better, but as a reliable way to throw a couple of knowledgeable people and a small army of dimwits at a project and still end up with reasonable (or least reproduceable) results... or a lot of C.Y.A. paperwork in case of a failure.

In a sense, design and development approaches need to be tailored to the environment, the technology, and the team. A change in any one of these factors could render large parts of most methodologies useless. From my experience, there is no one-size-fits-all solution, and the greatest benefit any project can get is good experience leading it. Through experience, people use an observational process to refine what works and what doesn't - patterns by any other name. Methodologies then, are basically attempts to formalize experience and persist it to paper, but unless that experience covers the programming field in general, it's only going to apply to specific cases. The more specialized the methodology, the worse it's going to work in a realistic environment elsewhere. The more generic it is, the more accepted and widely used it can become, but it won't solve as many specific problems.

There's a lot more rambling in the post, but you get the gist :-)

-Rob
Friday, December 08, 2006 7:49:19 PM (Central Standard Time, UTC-06:00)
Your views about methodologies seem very well-considered. Thank you for writing about them.

Your perspective is very convincing, but it presupposes that talented, methodical, OO/GUI/DB developers are readily available, easy to come by, and do not demand high salaries. Unfortunately, that is often not true. For example in the U.S., many development groups in institutions of public education (from elementary to university) simply cannot afford the salaries required to attract expert developers. Further, such insulated environments do not experience the driving force of market competition to drive quality. In many cases, my opinion is that the methodology represents a contract that ensures a minimum amount of quality. It's a sad perception, but I believe it's a realistic one.
Comments are closed.