I've been thinking a lot about methodologies lately. This is partly just because it's a subject that's always interested me. Figuring out how you design & build your software is just as interesting as actually building and designing it (to me at least). It seems like a vast field, the theoretical aspect to development, and something that is often controversial.
The other thing that's got me thinking about it is that at work I'm being asked to build a system using a methodology that's pretty foreign to me. Although, in my professional life, I've rarely used formal methodologies, I've found that I've naturally used an
Agile-like approach of my own (and the companies I've worked for). After reading a lot about
Scrum lately, I've found it matches pretty closely how I've always worked, as well as adding a few extra controls (such as consistent length of iteration) which make life even easier.
Basically, I find it very difficult to create systems without the following things:
- A single technical owner, and a single business owner (or at least the minimal group on each side).
- Extremely important is direct and constant interaction between these two, especially in regards to requirements. To me, assembling requirements is a bargaining process. If business goes off and tries to figure out their requirements, they'll miss some really important issues relating to the reality of what they're asking.
- The ability to manage constantly changing requirements
- An iterative process, i.e. a feedback loop. The client needs to see the system to understand what their requirements are
The methodology I'm being asked to use is based on
Waterfall. With the possible exception of the first point, it has none of the above. The preferred method of communication is via documentation. Requirements are locked down as much as possible, and there is no iterative process built in to the methodology.
While I'm sure I'll find a way to work within these contraints, I can't help wondering if I've missed the point of Waterfall (or similar) approaches. Agile is suffering from a backlash at the moment, with people playing the "No Silver Bullet" card (similar to some of the reaction to OO in the 90's). I don't want to jump on the Agile bandwagon and become one of the people who in their rabid evangelism actually harm the reputation of the very thing they're trying to advocate.
So what is your methodology of choice? What methodologies have you used and what works for you? What do you like / dislike about particular methodologies? (I'm sure this is a good way of starting a
Holy War :)