Earlier quoted context omitted.
Until you need to add another server, or 10 or 100... Not to mention it's another set of skills you need to have. It's a tradeoff. (I'm not talking about "we may need 100 servers next year because we'll have all this traction by then" -- I'm talking about "our load is growing at 1.5x every month or next month we need X capacity") I just finished booting up two new clusters with 5 and 15 nodes, respectively and cycled…
Most startups hope that they'll suddenly need to increase capacity by 100x, but it nearly never happens. Most vendors can provide dedicated servers within a few minutes (if you don't order too many at once), so scaling is still possible in the vast majority of cases. Even if you always have to scale up for 1-2 hours per day, using dedicated hardware that's idle the rest of the day is probably cheaper in most cases.
1. You can get started for dirt-cheap or in some cases, free
2. There's a common API for requesting new instances and performing maintenance tasks
3. There are extra services available to help build your apps such as SES, S3, and RDS to name but a few I found very helpful.
I'm not saying anything in this thread is wrong. But in software engineering, we say "write the code that only you can write", which is a suggestion (but not a rule) to use pre-built libraries instead of trying to make your own. Perhaps we should also say, "run the instances that only you can run".