After a lot of thinking and years of experience if it is one thing I have realized it is this, Behind every successful project is a set of really good people.
Software development is like running a kitchen, if you have great cooks and great helpers in your kitchen, no matter how bad the recipes are the dishes will turn out fine. If you have bad cooks no matter how good and detailed your recipes are the dishes are ruined (Read “Big Macs vs. The Naked Chef ” Joel Spolsky).
There are other factors too like using a good methodology and using the right tools, but I think these other factors just add up to 10% .
Like a real good chef a really good programmer is agile, if he finds that there is no Source control, he will just set on up on his machine (or commandeer an old machine set up Linux and SVN on it), if he finds that there is no Wiki, he will set up a TiddlyWiki, if the requirements don’t make sense he will contact the user to clear things up. If he doesn’t have the right tools he will just get it, now it will help if the right tools are already in place.
It also helps to have a good project lead who will be open to adopting new practices but that goes back to having good people on your team, after all a project lead is also part of your team right ?