In our case, we have colocated machines in several cities, with DNS switching. It made the replication far more challenging, but we are free of the SPoF of one datacenter's Internet connection. We will eventually get to the point where we are willing to pay for two direct copper T-1's (or future equivalent) from different ATM entry points into one rack, but, until then, spreading servers out around the Net is the way to go.
I wouldn't say that our development team is larger, although I'll agree that they have to work harder (yes, Java is Awful Damn Wordy!!!). Honestly, market demand hasn't made Java programmers (here) cheaper, but what it has done is made it easier to manage overseas teams.
Again, I'll state my PoV: a great programmer can make a scripted / lightweight system run rings around a J2EE deployment in 95% of applications. However, the more intricate and interconnected the transaction requirements of the business rules, the more you need a well-defined definition layer that insulates you from your Real World. Yes, said great programmer can write one if needed, but the level of app I'm describing also has to be defended against requirement creep by dozens of stakeholders, and I don't know of many such programmers who will subject themselves to such a challenge willingly.
Don Wilde
"There's more than one level to any answer."