Modern software development is evolving away from the client-server model toward “cloud”-based processing systems that provide access to data and services via the Internet or other networks.  In contrast to prior systems that hosted networked applications on dedicated server hardware, the cloud computing model allows applications to be provided over the network “as a service” supplied by an infrastructure provider.  The infrastructure provider typically abstracts the underlying hardware and other resources used to deliver a customer-developed application so that the customer no longer needs to operate and support dedicated server hardware.  The cloud computing model can often provide substantial cost savings to the customer over the life of the application because the customer no longer needs to provide dedicated network infrastructure, electrical and temperature controls, physical security and other logistics in support of dedicated server hardware. 
Although multi-tenant platforms can provide substantial benefits, they can be relatively difficult to design and develop.  The often competing demands of integration and isolation between tenants, for example, can lead to any number of challenges in design and implementation.  For example, while each tenant writes their own application code for their respective customer-developed application, the “cloud”-based processing system also contains application code which is universal to all of the tenants.  Accordingly, it can be difficult at times to de-bug errors or determine a cause of a side-effect affecting a customer-developed application.