In a pure multi-tenant architecture a single instance of the hosted application is capable of servicing all customers (tenants). Unlike more classical web applications or web services “in the cloud” which behave the same way for each requests, a multi-tenant architecture is designed to allow tenant-specific configurations at the UI (branding), business rules, business processes and data model layers. This is has to be enabled without changing the code as the same code is shared by all tenants, therefore transforming customization of software into configuration of softwre. As you can imagine, this drives the clear need for "metadata driven everything". The other main challenge is being able to co-locate (mingle and “de-mingle”) persistent data of multiple tenants in the same data infrastructure.