Software-as-a-Service (SaaS) is an extremely efficient model for product development since the delivery components and upgrade cycles are controlled by the vendor (an inordinate amount of time is spent supporting configuration environments with installed applications). There’s one edge case with SaaS product that isn’t talked about much: unusually large customers.
In the installed software world, unusually large customers typically require more expensive or exotic hardware and the problem is somewhat solved. With SaaS it isn’t as easy because SaaS applications are often sharded whereby clusters of customers are grouped on the same database, but individually delineated. As the customer base of the product grows, the SaaS company adds more and more shards. This breaks down with an unusually large customer when the customer is so large as to not fit in an isolated shard or with the standardized hardware used to power the other shards is not powerful enough.
Modern technologies like Cassandra and HBase provide amazing scalability across a cluster of machines and solve the scale problem. Unfortunately, the tools to develop against them aren’t as simple and powerful as tools for standard databases like MySQL and PostgreSQL, but they are rapidly improving.
Some ideas to deal with the unusually large customer edge cases with SaaS products include the following:
- Data size allotments with fees for additional storage
- Setting upper-bound limits for certain categories of data and not allowing overages
- Isolating the account to a dedicated shard
My recommendation is to think through scalability limits early on and address them in advance of customers reaching them.
What else? What thoughts do you have on large customers as edge cases with SaaS products?