It is hard to accurately compare software to any other craft because changes are requested practically forever.  (Nobody asks a woodworker to go back and add a 4th drawer to a dresser that was built 6 months ago.)<p>I find that highly-granular revision control systems go a long way toward avoiding cruft and they remove the temptation to cut corners.  When you are halfway through a huge change and you encounter something that is causing problems, carve out the problem into a <i>separate</i> commit and <i>fix it</i>!  Similarly, if something that was expected to be a simple feature turned out to require general architectural changes, carve out the general changes and commit them <i>first</i>.