Startups and The Problem Of Premature Scalaculation
onstartups.com
onstartups.com
You can also spend a bit of time and lay down a foundation. Sure, in 2 years time you might need to rip it all out but you can certainly cross your T's and dot your I's. Identify slow queries. Figure out whether you think you'll shard or replicate (or both) and whether your current architecture makes it possible. Remove state from your web servers to easily load balance them. Work towards reasonable output caching. These are all things that you can do naturally, while you code, without it being a time-sink.
Bombarding your app with of millions of simulated users and tweaking it to handle it well can be loads of fun. It might even provide the inspiration needed to finish the app in the first place.
Great graphic designers are at times known to indulge in pointless experiments in typography or color. Why can't great hackers indulge in pointless experiments in scalability without suffering the ridicule of their peers?
Developers acting on their own accord must be allowed to be inspired by their hopes and dreams and not always take the straightest path to the goal.
If time should always be spent in the wisest manner without indulging in your own fancy, developers should also stop write complaining blog posts about other peoples code and instead improve their own apps.
There's nothing wrong with that, but you shouldn't do it with your startup. Optimization is inherently limiting -- your product will probably be completely different in three months, and you will most likely find yourself having to reverse or work-around unnecessary decisions that you made early on. I know we did, and now our engineers probably curse my name for it. It has probably cost us dozens of hours (and thousands of dollars).
"Developers acting on their own accord must be allowed to be inspired by their hopes and dreams and not always take the straightest path to the goal."
If your goal is to make awesomely scalable software and learn a lot, then, yeah. If your goal is to build a company, however, you should shed every non-essential and worry about potential problems when they're real problems.
But there is another side of this that the author is not mentioning. For a lot of applications, if it's not going to scale properly, then the great success the company seeks becomes its most dangerous risk. This is because you often can't control the adoption rate of your application.
For many kinds of applications, once the load gets to that critical tipping point, the entire system goes into an unstoppable death spiral of doom. The whole thing won't run. For God knows how long until you do who knows what to make it go again. And what happens to your business during that time?
For some kinds of businesses, that downtime isn't too big of a deal. But for others, it could be enough to make the customers regret they ever signed up with you.
Still, premature optimization is evil, I can't deny it. I think the best solution to the quandary is to have and create tools and skills within the team such that building apps that can scale without too much danger isn't much harder than building plain apps.
"Scalaculation" is a weird word.
As far as premature optimizations, if they're truly premature and moderate/high effort then yea, you're usually better off getting things working quickly first. But I've seen the admonishment of premature optimization often used to turn a blind eye on the technical debt that can result from simply going fast. Successful projects require doing the simplest thing possible that will work while maintaining a conscious effort to keep track of refactoring candidates, performance inefficiencies and other messes that'd otherwise languish under the rug and, maybe, just improving them before proceeding.
But why? I am working on a major app right now that will have 300 total users. Ever. And yet the team wants to make the system scale to handle tens of thousands. Why?
The key is to know your audience. Is it truly realistic that the entire internet will become users? Or is it a smaller group? Scale accordingly.
If you expect a similar situation - do the relevant premature optimization, so you can spend extra profit for bootstrapping :)
My point being that if you've never tried optimizing, it may be worth at least putting a couple of hours into it because progressing down the first couple of steps can be disproportionally beneficial. Also I know nothing about your personal situation so I'm also sort of throwing this out there in general.