Joel Spolsky came up with a twelve-item checklist in August, 2000 that provides a rough measure of – in his words – "how good a software team is":

Do you use source control? Can you make a build in one step? Do you make daily builds? Do you have a bug database? Do you fix bugs before writing new code? Do you have an up-to-date schedule? Do you have a spec?

Steve McConnell enumerated Software's Ten Essentials in 1997, ten things that every software project should have:

A product specification A detailed user interface prototype A realistic schedule Explicit priorities Active risk management A quality assurance plan Detailed activity lists Software configuration management Software architecture An integration plan

These are great lists. But Spolsky's list is 6 years old; McConnell's is almost 10 years old! Does your software project meet all these criteria?

The lists are still highly relevant and definitely worth revisiting today. But I wonder if the field of software development has advanced far enough that we can take any of the items on this list for granted. I also wonder if any new practices have emerged in the last 6 years that aren't accounted for on either list.

So here's my question to you: what core set of practices constitutes modern software development in 2006?