Designing systems is a very delicate task, one mistake (which goes un-noticed) may not only rise your costs of operations, but may also prevent you from achieving a remarkable up time, if you are deploying a private cloud on a public infrastructure (public cloud), it is required that you carefully select each and every component with better understanding otherwise your costs of operations would rise and may result in unnecessary downtime and customer dissatisfaction.
Some people, design system with little knowledge, they might know the technology well, but they lack the experience of Large Scale integrations, when you are playing with Huge (virtual) resources, you should know the pros and cons of the same. Some people love to Experiment, on development platforms, it is acceptable, but on Production, it looks like a big joke.
It is not easy to design an environment for SaaS based products, if you get the CPU correct, you would mess up with networks, if you work out the network issues, you would end up fighting high disk i/o’s, you may do well on security, but system abuse should be considered well in advance.
A good system design requires less revisions, offers a stable platform and is backed by an acceptable SLA. Systems should be designed based on your needs and not by what others or big players are doing, you would end up in doing the same mistake as others are doing.