Running an out-of-the-box stack like MAMP may be fine for part-time tinkerers, but if you're writing code for a serious site you'll quickly realise that it's important to develop against the same version of the stack that's running in the production environment. You'd be amazed at how many subtle bugs emerge between two minor point releases of PHP, APC, MySQL or any other of the myriad components. Catching them early is crucial, and the easiest way to do that is to use a virtualised developer environment.
We have a fun concept here that we call a “human test instance”. Anyone can create an entire copy of, running in the cloud, on a subdomain of their choice, on a branch of their choice, with just a few clicks in Hudson. “Human testing” implies that the instance is used by a human to do manual testing, however, we use a human test instance to run automated Selenium tests, and each one also effectively tests the process of running the update functions every day.
Economist developers are a big, distributed lot. At one point we had 4 teams doing development in 4 different timezones from San Francisco to London. As you might imagine, this presents some extremely interesting challenges, like source code control and maintaining communication channels between teams to reduce the amount of toe stepping and work duplication going on. Bazaar & Launchpad The single tool that has had the largest positive impact on code quality and general sanity has been Launchpad.