Having once worked at a company that followed the above approach, I wholeheartedly recommend it. Developers have a local dev environment. Code is committed to HEAD in CVS. The communal dev server is updated from CVS daily or more often, so breakage is noticed quickly. Then QA does it's thing, and updating the live site is as simple as 'cvs update -r whatever; check db schema; apachectl restart'
I was the newest developer at the company, and I updated the production servers more than once. In fact, it was so easy I was at first a bit scared about the whole process. (The boss didn't like production to throw 500 errors... Imagine that! :-)