Startups guide to design a Scalable Product

ScalabilityIn today’s world with around 2.2 billion global internet users with an expected yearly growth rate of about 8% and around 2 billion global mobile internet users with an expected yearly growth rate of 11% (as per the ITU’s Measuring the Information Society 2013 Report), with billion being invested on Information and Communication Technology infrastructure and services globally; there has been a steep rise in products targeting niche markets. This has given rise to vividly alluring and out-of-the-box products for both the web and the mobile markets. Consumers are now demanding products that are simple to perceive and operate by them. This avidity to reach out the customers with a technology they’ll like to use has made startups gasping for products which are simple, innovative and scalable.

Yes, scalability of products has become a major concern for entrepreneurs today. Since I interact with many of the entrepreneurs from the tech startup community, I came to realize that many of them have no clue or slightly vague idea to what scalability in technological terms will mean for their product and what do they need to discuss with their technical co-founders or their product developers (in case they are thinking to outsource the initial development).

So I thought let me shed some light on scalability. How it should be looked at when you are developing by yourself or when you are outsourcing your product development to a vendor?

So what is Scalability?

In layman terms, it is synonymous to increasing or expanding a system’s capacity or capability.

Technically, it is difficult to define scalability of a system as a generic property of a system. Thus it needs to be defined for those particular dimensions or properties of a system that are deemed important. For example, for a web product, scalability might be defined as the product’s capability to handle a particular set of users (say 1-1000) beyond which we may choose to one or both of the below options (as the case may require):

  1. Use a better server (i.e. with better processor or upgrade existing memory etc), this is also called to scale vertically or scale up.
  2. Use three servers in a cluster rather than one, this is also called to scale horizontally or scale out.

I won’t be digging too deep into this as it is beyond the scope of this discussion.

Now let’s have an overview of the things to keep in mind while designing a system/product so that we would be able to maintain its scalability.

Let us start by viewing the environment design aspect first:

By environment design I’m referring to externalScalability factors factors that a software designer must account before working on software design so as to leverage and accommodate these factors within the software. This would include everything from type of application server being used to server hardware to using cloud based solutions (Amazon AWS, Rackspace etc). Let me give you an example of how a combination of these factors placed right can help build a scalable system.

Say we have a web product and targeting around 500 users in a couple of month time. Now if we choose to have a Tomcat Server, a MySQL Database and a mailing server on the same server hardware, as well as we are sourcing static resources from within the application server. This combination should hold onto the no. of target users for the time being. Let’s see how we can effectively scale this environment as the number of users’ increases:

  1. For a 10-20% increase, I would say the scaling up could be a better proposition.
  2. For a 50-60% increase, we may be looking at scaling up with using a CDN (content delivery network) for static resource deployment thereby reducing the no. of requests on the same server.
  3. For a 100% increase or more, my suggestion would be to scale out rather than scale up i.e. to say we distribute the application server, database server and mailing server in separate server hardware. Probably if my application allows deploying of web services and use a different interfacing and backend server (may be use Tomcat to deploy web services and use Apache Web server to deploy the UI of the application).

Now let us have an overview of the software design aspect and how is the environment design related to this:

Design an architecture that will support both scale up and scale out. You need to create something which enables you to scale up initially and eventually scale out. For example, you may start using a CDN (like Amazon or CloudFlare etc) and mailing service (like Amazon SES or SendGrid etc) from the start, this will help to scale up easily and also lower your environment cost (as you don’t need a very high end server now).

Use of asynchronous processing on the frontend will do increase your no. of requests per page but the response time will decrease as the data loaded per request in small.

If possible, use SOA (Service Oriented Architecture) to design your backend, so that you may eventually scale out without changing much of the code (just change the configuration).

Considerations for self and outsourced development

Well whether you are developing your own product or outsourcing it to a third party, all of the discussion above should help put your point forward to the teams. In both the cases, you need to have a well defined scalability matrix for your product before you start the development. This should have scenarios for both scale up and scale out and will also let you know if any loop holes are left. If possible get you product architect to highlight key features which enables scalability and link those to the matrix. If possible do benchmarking and load testing before you deploy on production. This will also help to budget the environment cost at different stages of product lifecycle. Being more specific for outsourced development via third party, get in-built statistics and alerts for scalability features so that you know in advance which stage of the matrix are you on and what your transition period to the next stage is.

Well I do hope this post will give you at least some insight for building or at least designing scalable products for your venture. I have tried to it as simple and non-technical it can be. Stay tuned for more tech savvy post under this series.

Vipul Meehnia is a software professional, entrepreneur and visionary with 6 years of experience in delivering innovative world-class products in various markets globally. Besides being an ideating machine and researcher, he likes to share his views on various topics at vipulmeehnia.com.

Comments:

Find Any Data's picture
Really useful article. Thanks
Image CAPTCHA
Log in also lets you receive 'likes' and 'responses' to your comments.