This is only my personal experience, according to a specific real scenario problem. Corporate environments might differ.
Today we had to define how we were going to develop in our company sharepoint 2010 solutions. Actually Sharepoint 2010 has been here for more than one year, but only with one developer, so the developer was working directly via remote access to the TEST environment.
Now, there is 2 developers and soon there will be more.
At the beginning they were thinking, well now there is 2 developers, so better have a full dev farm environment, and the starting idea was one Ad server, one sql server, and one sharepoint server.
But then we realized that we would have problems with this approach, and biggest problem is debugging, If one developer is debugging, the productivity of the other one will be reduced, because the other one will have to wait to debug its own code.
At the end, it was decided that every developer will have its own development farm.
one develop server with sharepoint 2010, vs 2010 and sp designer
one sql server
one ad server.
Both developers will be connected to a central source control, everytime one needs a component from the other, its just check-in then get latest version and deploy in other developer’s farm.
In that way, we can restore the current information from the production database to replicate the current deployment. And we can develop in our own farms without disturbing the other.