The life cycle of an application is dynamic. In the beginning when the application is new and less known, you can make educated guesses about what kind of bandwidth, storage memory and compute it will need. But new workloads can be bursty and behave unexpectedly. The cloud is perfect for new and emerging applications because they are low risk. You can commit fewer resources than you think you need and then burst into more resources as you watch and learn how it behaves. Emerging applications could be anything from test/development all the way up to the mission-critical application.
As those applications stabilize, they begin to become more predictable and mature. As they evolve the resources required become more predictable and you may benefit from moving the application from the public cloud to an internal environment where it can live out its stable time frame. The costs benefits of agility and scalability can be wasted on stable, mature apps. [Also see: "Gartner: 5 things a private cloud is NOT"]
Legacy applications seem to take too long to go away. They have passed the point of maturation and the resources used are in decline each month. They may be taking up valuable IT manpower, time and space in your internal environment. You can't just make them disappear. Cloud is quickly becoming a perfect-fit retirement home for applications. The biggest benefit is being able to tie real costs to the application, and show the costs back to the owners of the legacy app. They may reveal that the application's usage is not nearly worth it and speed up its decommissioning. After that, the cost simply goes away.
What doesn't work
From patterns we've seen, there are a few types of applications you should beware of moving to the public cloud. They might not achieve a greater ROI in public cloud than they could in private cloud or another internal environment. However, applications are dynamic and there are always exceptions to the rule.
RULE: Mature, stable mission-critical apps should not live in public cloud. As mentioned in the life cycle description, value from cloud typically doesn't come from the stable, predictable time frame of its life. Bursty and growing or declining applications get more value and a higher ROI in the public cloud than stable applications do, which is why it's recommended to host stable apps in your private cloud.