What is "Modern Software Development"?
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?