Scalability is a Requirement for Startups
Posted by Bob Warfield on December 6, 2007
Dharmesh Shah wonders whether startups should ignore scalability:
You’re worrying about scalability too early. Don’t blow your limited resources on preparing for success. Instead, spend them on increasing the chances that you’ll actually succeed.
It’s an interesting question: should startups worry about scalability, or does that get in the way of finding a proper product/market fit? If you’ve read my blog much you’ll know that I view achieving that product/market fit as the highest priority for a startup, and I’m not alone, Marc Andreesen says it too. I think this is so important that I have advocated some relatively radical architectural ramifications to help facilitate the flexibility of a product so it can evolve towards that ideal even faster.
But where does scalability fit in? Can you achieve that product/market fit without it? For most startups, I think it is either difficult to verify a true product/market fit without it, or worse, you may achieve it only to immediately fall to earth a victim of poor user experience. There are certainly plenty of examples of companies that started out great, seemed to have that product/market fit, but got into persistent hot water because they couldn’t scale out a good user experience when their site began to take off. Fred Wilson writes recently about his love/hate relationship with Technorati, which has been a good example of this.
Here is another question, “How much success do you need to verify product/market fit?” Signing up a few customers to a beta, or even having a large beta is not really enough in my opinion. It’s pretty easy to get a ton of people to try something that sounds sexy and is promoted well. The question is whether that really takes well enough. Marc Andreesen’s Ning is a good example. When they launched their original product it required a fair amount of custom programming to create a custom Social Network. They had 30,000 social networks created even so, but the service wasn’t taking off. Michael Arrington was calling it R.I.P. Then they released a version that eliminated the need for programming and suddenly the product/market fit was there and it took off like a rocket, crossing 100,000 social networks in record time. Clearly Ning had to deal with scalability before they could learn much about their product/market fit.
Google is another great example of this. They had to scale from day one because of the problem they were solving. Om Malik says their infrastructure and ability to scale is actually their strategic advantage. Certainly the nature of the problem Google wanted to solve required scalability from day one. This is how Aloof Schipperke wants to view the question when he says, “Scalability is a requirement, not an optimization.” It’s a bit of a double entendre. One could say it is a requirement that all startups deal with it, or one could say startups need to evaluate whether scalability is a requirement in their domain. I’m in that latter camp. Figure out what success really looks like. When do you know you have product/market fit? Be conservative. What are the requirements to get there? Aloof lumps scalability in with other “ilities”. Can your startup reach product/market fit without security, for example? The answers may surprise you if you’re really honest about it.
Chances are, you may have to do more to be sure about product/market fit than you are comfortable with in release 1.0. You’ll need a phased plan for how to get there. Lest you use this as an excuse to ignore scalability until the last minute, keep in mind that these phased plans should have short milestones. Quarterly or six month iterations at most. Scaling a really poorly architected application can amount to a painful rewrite. So do a phasing plan for scaling. What are the big ticket items you’ll need to enable early so that scaling later is not too hard? There are a few well-known touchpoints that can make scalability easier. I’m not going to go over all of them, you know what I’m talking about: statelessness, RESTful web services, and beware the database. If you don’t know about these things, get some people on your team who do! It’s not hard to start out with a plan in mind about your eventual scalablity and just make sure that along the way you don’t inadvertently shoot yourself in the foot. It usually boils down to securing the two ends of the puzzle with good scalability:
– How will the client side web servers scale?
– How will the database back end scale?
Make a plan for what it will look like when it’s done, and put phased milestones in place to get there over time.
Here’s another key issue. Dharmesh’s original question assumes scalability and user/experience compete for scarce resources. Ed Sim somewhat follows this path too when he writes that it’s hard to sell Scalability. Aren’t we talking about the tradeoffs between UI/Features and Infrastructure (web or DB)? Are the same engineers really doing both things? It seems to me a lot more common to have a “front end” or application group and a “back end” or infrastructure group, even if “group” is a bit grandiose for a couple of people. Take the opportunity to map out how the modules produced by these two groups will communicate. Make that communication architecturally clean so the groups are decoupled. Make the communication work the way it will when you build out scalability, but then don’t build it out at first. This will enable the infrastructure group’s agenda to decouple from the user experience guys.
BTW, if you’re thinking the true competition between the two is you want to hire all user experience people with your capital and no infrastructure, that just sounds like a bad idea to me. It’s hard to deliver good user experience if your infrastructure is lousy, buggy, and doesn’t perform. There are ample studies that show the speed with which your application serves up pages is a big contributor to user experience as well.
I’ve gone down this path before of having essentially two small teams and making sure there was clean communication between their code from the start. My company PriceRadar was lucky enough to land a partnership with AskJeeves early on. Part of the deal was we had to pass a load test that showed we could handle 10,000 simultaneous users hammering our application. At the time, most of my experience and developers were from the Microsoft world, so we were .NET all the way. I remember meeting with the advisory board for a company called iSharp. It was an all-star cast of web application CTO’s and VP’s of Engineering. We went around the table to hear what everyone was doing. I was the only Microsoft guy in the room, and the Unix crowd just laughed when I told them we had to pass this big load test. AskJeeve’s CTO was there as well as the fellow in charge of AOL Instant Messenger and about 10 others. They flat said it was impossible on Unix. In less than a month we had it all working with a distributed grid architecture. The front end guys were never even involved and changed little or no code. The back end guys didn’t sleep much, but they emerged triumphant. And the entire team was about 10 developers, per my small team mentality.
Yes Virginia, you should worry about your scalability, but it need not be all consuming. You can handle it.