Como lidar com cliente relutante?
Um pouco de contexto
Estou desenvolvendo um sistema de gestão para um cliente. O sistema já existe há anos no mercado, mas era server-desktop e agora estamos transformando em um sistema 100% web.
Hoje o sistema roda com um banco de dados com dezenas de tabelas, algumas com milhões de registros por empresa. Porém o sistema não parece ter sido bem desenvolvido: em uma das empresas o servidor roda em uma máquina com i7 10ª geração e 16GB de RAM e ainda assim está ficando lento. O banco atual é SQL Server e estou construindo agora com PostgreSQL.
O conflito
O cliente foi o desenvolvedor das primeiras versões do sistema e está me passando tabelas, fluxos, rotinas e processos, que eu transformo em código.
Eu gosto de desenvolver sistemas que eu não vá ter medo de mexer em 3 meses, então fiz algumas sugestões para melhorar a arquitetura:
- Dividir tabelas gigantes (algumas com mais de 65 campos) em tabelas semânticas.
- Mudar como o usuário de suporte é identificado.
Para compreender melhor o que vou dizer a seguir é importante saber que os usuários são vinculados a uma empresa, porém o usuário de suporte não deve pertencer a nenhuma empresa pois ele deve ter acesso a todas as empresas.
Atualmente, a proposta do cliente para o usuário de suporte seria:
- Ter duas tabelas:
USUÁRIOSeSUPORTE. - A tabela
SUPORTEteria apenas um registro com nome e hash da senha. - Para identificar suporte, o usuário deveria informar 0 no campo Id na tela de login, logo não existe nenhum registro de usuário 0 no banco de dados.
Eu sugeri:
- Uma tabela
USUÁRIOcom os dados gerais e uma flagisSupport. - Uma tabela intermediária (
EnterpriseUser) relacionando o usuário à empresa. - Usuários de suporte não são linkados a nenhuma empresa e é possível ter múltiplos usuários de suporte.
Eu acho que oque sugeri é muito melhor e ainda deixa a forma como o sistema funciona muito mais clara e previsível.
Ambas as sugestões foram rejeitadas:
- A primeira: “não faz sentido ter tabelas 1:1”.
- A segunda: “sua solução é mais complicada”.
A pergunta
O que devo fazer?
- Seguir o que o cliente me passou, apenas transformando o sistema em web, mesmo sabendo que é lento e menos escalável?
- Implementar minha solução e tentar convencer novamente o cliente de que é a melhor opção, garantindo escalabilidade e facilidade de manutenção no futuro?
Também gostaria de saber se estou equivocado em pensar que minha abordagem é melhor para o futuro do sistema.