Como desenvolver um SaaS multi cliente?
Quando uso o termo "cliente", refiro-me a pessoa ou empresa que contrata um software como serviço.
Durante minha trajetória como desenvolvedor, tive a oportunidade de desenvolver apenas softwares pensados para um único cliente. Seja um produto distribuído de forma individual, onde cada cliente tem um servidor e banco de dados próprios, ou o software foi criado exclusivamente para uma empresa, em ambos os casos, lidando apenas com autenticação de usuários.
No primeiro caso, tínhamos muitos problemas de versionamento de código, precisávamos manter vários repositórios de frontend, pois cada cliente possuía uma customização, e as migrações no banco de dados sempre davam problema. Era uma startup pequena, com apenas 4 pessoas ao todo (CEO, CTO, Dev mobile e eu como Fullstack). A melhor forma de fazer nem sempre era a mais rápida, então, no fim, a cada release, eu tinha medo de quebrar algo que estava funcionando.
Recentemente, decidi me aventurar no universo de SaaS e tentar transformar um MVP em um negócio rentável. Visando evitar os problemas relatados acima, penso em criar um sistema onde existam papéis variando entre:
- User: Funcionalidades gerais do sistema
- Company Admin: Responsável pelo cadastro de novos usuários e gestão de acesso dos usuários vinculados à empresa
- System Admin: Responsável pelo cadastro de novos clientes, suporte a clientes e controle de acesso das empresas em geral
O sistema deve ser único, ou seja, deve ser executado no mesmo servidor com o mesmo banco de dados para todos os assinantes e suportar vários clientes com seus respectivos usuários, sendo impossível um cliente interferir nos dados de outro cliente, com exceção do administrador do sistema que pode interferir em qualquer cliente ou usuário para fins de suporte.
Como nunca implementei algo parecido, tenho uma sensação de estranheza, como se algo estivesse errado. Gostaria de feedback se é uma boa lógica a ser seguida, sugestões, se conhecerem métodos que julguem ser melhores e relatos de boas práticas a serem seguidas, e mais práticas a serem evitadas.
Vc já pensou em usar algo como o Strapi num primeiro momento? Te agiliza um trampo gigantesco em codar todas as entidades e relacionamentos.
É o que eu usaria pelo menos se ainda não tivesse 100% de certeza que meu SaaS daria certo...