Auth0 is a truly symmetric service: it is offered as a service (both on public and private clouds controlled by Auth0) or it can be deployed on your own cloud environment.
Across all these environments you will enjoy the same experience and functionality. You can start in one, and then move to another one. You can use our service for development and QA, but then run in production with your own dedicated instance. From an application perspective, the impact is reduced to a new URL, and minor configuration settings.
We envisioned Auth0 as an appliance. A black box that you plug to power and network and "it just works" with minimal setup, configuration and hassle.
Why would you run Auth0 yourself? There are many reasons. The most common one are regulatory constraints and policies, such as those found in certain industries: healthcare, financial services are good examples.
But being able to run anywhere, has many advantages. Our own cloud service is multi-cloud: it currently runs on Azure and Amazon Web Services simultaneously, and in different geo-locations. This gives us additional resiliency and fault tolerance, because we are relying on highly independent components.
Having the ability to move your workloads freely between environments, means we can be closer to where our customers need us.
And last, but certainly not least, it means we are free to host in the most economically advantageous environment in any point in time.
Designing software to run on private clouds controlled by customers and on a public cloud controlled by Auth0 is very different. There are scenarios in the public cloud that are rarely faced in private clouds controlled by customers. Multi-tenancy is one of those considerations. But it is entirely possible to design a public cloud service (capable of multi-tenancy) and shrink-wrap it to a private, like we did.