I haven't played Tennis in several years, but when I did I had a truly awful backhand. I would routinely kill myself trying to run across the court to position myself to hit a forehand.
I'm bringing up my Tennis defficiencies as an analogy for development. I'm seeing too many cases where teams are just killing themselves coming up with one size fits all abstractions or elaborate MDA-ish code generation strategies to avoid, God forbid, writing one-off code that only satisfies the immediate needs. Just like me in Tennis, teams are putting themselves in unnecessarily difficult positions because they're too afraid of their backhand (just writing simple code). I suppose there's an occasional need for large scale codegen and abstraction is definitely important, but sometimes you just need to hit the backhand and write simple, one-off code.
I think you can almost break coding philosophies into two general camps.
- Camp #1: Coding is too hard, so let's not write code anymore. Model Driven Architecture, Executable UML, Business Rules engines, Rapid Application Development
- Camp #2: Coding is too hard, so let's make coding easier and more productive. Refactoring tools, dynamic languages, TDD, Continuous Integration, Ruby on Rails, etc.
Put me in Camp #2. I've also got a theory that Camp #1 is scarred C++ vets or VB guys and Camp #2 is ex-Smalltalkers and the like.