@evildictaitor: using arbitrary metrics and a real-world scenario I had to face not too long ago:
we had a release scheduled in 12 months, and the list of new features (and minor bugs) we wanted to add amounted to about 9 months of work, in C#. That would have called for a full rewrite, calling for 14 more months. Adding the same set of features in C++ required almost 22 months (it was UI heavy, and that's where C# really shines).
Result: our only option was to stay with C++, slashing the list of new features and triaging bugs aggressively. The loss will compound over the next few years, unless we can afford to skip a full release cycle (and that will be a major risk anyway). Outsourcing the job is unthinkable and hiring more developers for a contingency is usually not a good idea.
A larger company might have decided to bite the bullet and go the rewrite route, shifting enough developers to the team to make that fit the schedule. The investment would be repaid in a couple of years, with the added bonus of a (possibly) richer feature set and no risk of falling too far behind against the competition. This doesn't seem to be happening, which makes me wonder what I'm missing.