And as a related question, what factors determine how much of your programming is split up between development and maintenance? I know this is a highly subjective question, but I'm wondering where software application development tools can add the most benefit, on making the development faster or making the maintenance easier? Thank you for your time, and please let at least a few people answer before closing, I'll choose a winner!
I think it depends on what your job function is. Some work for consulting firms where their purpose is to generally crank out new projects. They don't do much maintenance. Others maintain legacy applications - just about all they do is maintenance.
For developers in a shop which owns and pushes forward an existing code base release after release, it can depend what part of the team they find themselves on.
I'm at a company that pushes forward an existing code base (that went live at the end of 2003). At least 30% of every iteration is maintenance for the team, more when we do technology upgrades.
Depends on where you are in the software project life cycle. The closer you get to the end of life the higher maintenance percentage will be.
I wouldn't place my bet on tools but rather on developing maintainable systems by using sane software development methodologies.
If you are comming at it from the point of view of where to put effort into tools, I'd say without a doubt that would be into maintanence. Any accepeted piece of software is going to spend way more sheer time being used than being written. I'm always comming into contact with old code that is opaque, complicated, or just plain horribly written. Anything that helps me with that stuff is worth its weight in gold.
OTOH: If you can't figure out your own newly-written code, you really ought to find another line of work.
Frankly, I think looking to "make development faster" is a bad goal. Cutting corners there can cause effort spent everywhere else to baloon. Better to spend more time on development, and get it right.
Most "maintenance" is simply the long tail of development--adjusting software to meet real-world challenges.
The whole point of agile practices, in fact, is to blur the line between up-front development and maintenance, taking the best features of each: the careful planning and testing of development, but in the form of short-burst, limited-scope, reality-driven maintenance patches.
The only effective way to reduce development time is to reduce scope. Which, incidentally, also results in a more maintainable system.