In my last blog post I talked about scalability and the importance to have only one code base for all customers. But not every customer is like the other, they all have different requirements and needs. But how do we fulfill these different requirements and create a scalable system at the same time?
There are often many ways to do the same thing. If you create a SAAS service I think its best to offer only one way to do things. Make sure that it is a good one though, if possible it should follow a common process, maybe even a standardized process. Part of your work will be to explain why this is the way to do things and to convince your customers that they should do it like that as well. This might also help the customer to fulfill a norm or to straighten out their processes. Some customers may not be convinced. Maybe that only means that your Software is not the right tool for them. And that is fine. Or as the guys from 37signals say We’d rather our customers grow out of our products eventually than never be able to grow into them in the first place.
But there are things that can’t be made equal to all customers. Some things are just different – like the name of customer, their address and such things. They need to be made configurable. The trick here is to make the configuration in such a way that your customer can do it himself. If you need to do it you loose your scalability. You may be able to charge the customer for it but nevertheless the scalability is gone.
Some things are too complicated to configure but are much easier expressed in code. Depending on the business process that you try to sell you might need to have some code adaption. Preferable is of course that you don’t need that at all. Maybe you might also want also to think over your process in order to avoid that. If you have to, then make your system extentable, provide a plugable system. Think for example facebook with its apps.
For the skischools we have found a very simple solution. The system is based on php. Each skischool has a special folder in which they can upload some customized php files and through that extend the functionality of the system. This is not a very sophisticated solution and doesn’t work for all use cases but a very simple one. So far it has been good enough.
Long story short (A summary of what I wrote above)
- Establish a standardized process that you implement with your product. Convince your customer that this is the best way.
- Anything that can’t be standardized should be configurable. Make sure that the customer can do that by himself
- The last option should always be the extention of your software with individual code. Make sure this doesn’t split up your code. Think of a good extension mechanism.