We're in that "New Year's Resolution" phase of the year, and I'm running into more people going on diets or going to the gym. I'm also running into people adopting a software methodology of some sort. In a way, they're both "fitness kicks".
I see two predominant flavors of methodology—"agile" and "process improvement". You might equate agile with speedwork or running—getting lean, dieting, and trying to build up speed. Process improvement usually corresponds with some formal process initiative, like CMMI or Unified Process. Here, you might equate CMMI with weightlifting—building up strength for heavy lifting.
There can be overlap between CMMI and Agile implementations; it's the SDLC version of cross-training. Being strong doesn't necessarily imply being slow, while being quick doesn't imply being weak. There are some who argue that agile processes have to be emergent, which might imply that they aren't repeatable—if the conditions change, the agile process would change. Even if you think the two philosophies are somewhat exclusive of each other, I think most people can see room for overlap.
The overlap between the two brings us back to training, though. I suspect many of you know people who've tried to adopt running and overtrained or injured themselves. Afterwards, they dropped running as an activity. Likewise, I've seen people try to adopt an agile methodology very aggressively, later to sour on it. I've seen people adopt an aggressive weightlifting program, injure themselves, and get turned off of weightlifting; I've also seen people try to start at CMMI level three in twelve months, only to get burned out.
Whether you're trying to improve yourself or your software development process, there seem to be a few common tips:
- Have realistic expectations—Arnold Schwartzenegger and Jerry Rice didn't get where they are overnight.
- Sometimes a coach can help—but be careful to get the right one.
- Figure out your goals first—then pick a program that fits it.
- There are a lot of programs out there that work—find something that fits your needs and tailor it in a lightweight fashion. Building your own program from scratch is a lot of work, and it's easy to overlook something important.
If your program is too complicated or too hard, it becomes easier to backslide or abandon the program entirely.