The difference is that there are two stages to software development in major companies.
First - there's the software system. When they add new programs they have to determine and define what functionality they're going to add. This is where we get marketing and others and figure out what they going to do. They then get managers in there who look at what people want to accomplish and try to scale the work to what their team can perform in the time required. Furthermore, they then have to understand who's going to test the code, who's going to build it; and how the code is going to get into production.
IE: your basic CMM model
They try to address some definite issues
- Undefined/misunderstood requirements
- Scope creep
- Maintaining the system (all projects)
- Standardizing Processes
Then there's the software development side of things. Here what matters is not what the requirements say - rather we're making the software do SOMETHING. I can't speak for others, but I've found that during development, I try and figure out those items that I don't know how to do (and are required) first. A general skeleton of the code is developed and unit tests are developmented. More meat is added until the code looks like what the user wants.
Even if we look at (some of) XP's issues:
- Pair programming
- Automated Unit Testing
- Code Reviews
And it's obvious (to me) that we're discussing how to develop the code. Not the steps in how to justify the expense, scope it, manage it, etc. Personally, I think that XP is often given as an approach for Software Systems, where quite frankly, I think it will fall on it's face.
However, at the Software Development level I think XP may prove to be effective. Most arguments regarding design and documentation at the code level are flawed. I've seen more comments in code that are out of date - or didn't belong, than I care to imagine. Documentation (other than external documents to be used by other groups) regarding code are worse than these comments, imo.
Furthermore, while CMM has proven, for code generation, to develop bug-free code, it does so at a price-per-line and time-to-market that are unacceptable to nearly all development houses.