Web application deployment : one version for all clients or each his own

It depends on the approach. It is much easier to maintain thousands servers which are the same with todays technologies (tools for job automation such us docker, puppet, chef, ansible, etc - hundreds of them).

Having a single server for each customer gives you ability to plan resources for each customer more precisely and let them pay for what they really use. It also makes your problem smaller, which has also some advantages.

Imagine you would have 1000 customers on one database with 2TB of data in total. Your developers would have to write SQL queries perfectly to have such database fast enough. This problem is much smaller with a small database for each customer.

Another question to think about might be security. If you have to separate your customers on application level, your developers must be very carefull about what data they select. If you have one database per customer, there is smaller chance to leak another customers data.

On the other hand, having single instance for all customers gives you ability to share resources between your customers and save some money on hardware.

So, this decision should be made at the begining of the project, after making a list of advantages and disadvantages. I would also suggest to create some prototypes, so you know e.g. deployment process, database migrations, etc. will not be a problem for you.

From my experience I personaly suggest to have an instance for each customer if you can deal with managing many instances.


Having separated servers for each customer brings benefits from isolating customers data and allows you have multiple version of application. But there are some drawbacks. You will spend more money on servers (because you cannot share resources between customers easily) and you have do manage deploy pretty well. Also, if you have only one database across all clients, you have to ensure there will be no breaking changes in data structure or requirements of libraries. You need to have some map client - app version to manage too.

I have same version of software for each client in my environment, which help us maintain and scale servers (I can just deploy new server which is identical to others and just add it to loadbalancer). Also I don't have to work with different endpoints for each customer.