Como não errar ao criar um sistema contábil em uma startup
- Em uma empresa de fintech, não perder de vista o fluxo de dinheiro é o básico. Ainda assim, algumas startups acabam perdendo alguns centavos em cada transação.
- Startups seguem a filosofia de "fazer funcionar, fazer direito e fazer rápido" e não constroem um sistema de escrituração por partidas dobradas.
- Esses erros geram reclamações de usuários e atrapalham o crescimento da empresa.
- A equipe de suporte ao cliente tentou resolver o problema compensando manualmente as transações incorretas.
A importância de um sistema contábil
- O dinheiro é gerado quando se move, e rastrear isso é algo complexo.
- Um sistema de escrituração simples mostra o fluxo de fundos, mas não consegue explicar o motivo.
- Um sistema de partidas dobradas pode resolver isso ao rastrear tanto a origem quanto o destino do dinheiro.
O modelo de dados de um sistema de partidas dobradas
- Um sistema de partidas dobradas é composto por três entidades: contas, lançamentos e transações.
- As contas representam mudanças de valor, e os lançamentos representam o fluxo de fundos entre contas.
- As transações garantem que os lançamentos estejam corretamente pareados.
Dois sistemas contábeis
- O sistema contábil é a interface do ledger vista de fora, enquanto o sistema de engenharia é a implementação do ledger.
- O sistema contábil exige alta disponibilidade e baixa latência, enquanto o sistema de engenharia exige forte consistência e precisão dos dados.
Como os lançamentos funcionam
- Um lançamento pode estar em um de três estados: pendente, descartado ou lançado.
- Os lançamentos são sempre criados no estado pendente, e lançamentos descartados podem ser substituídos por lançamentos efetivados.
Como as transações funcionam
- Uma transação só é efetivada quando os lançamentos são efetivados ou descartados.
- Se uma transação falhar parcialmente, ela pode ser cancelada semanticamente por meio de um lançamento de compensação.
Como as contas funcionam
- Uma conta está ligada a vários lançamentos, e o saldo total deve corresponder à soma dos saldos individuais de todos os lançamentos.
- A forma de calcular o saldo total varia conforme o saldo normal da conta.
Conclusão
- Um ledger é um exemplo claro de um problema difícil de ciência da computação disfarçado de área não técnica.
- Construir um sistema de partidas dobradas é difícil sem o contexto adequado, mas isso permite tomar decisões melhores.
1 comentários
Comentários do Hacker News
No caso dos clientes da Synapse, muito dinheiro desapareceu. Bancos precisam controlar rigidamente o fluxo dos fundos, mas fintechs juntam todo o dinheiro em contas FBO e constroem um ledger para rastreá-lo. No caso da Synapse, os saldos dos clientes registrados no ledger eram maiores do que os fundos reais nas contas FBO. É mais provável que isso tenha sido causado por um ledger defeituoso do que por fraude. Recomenda-se não colocar dinheiro em contas de depósito de fintechs e usar um banco de verdade. Fintechs frequentemente afirmam que os depósitos têm seguro FDIC, mas isso só protege no caso de falência do banco subjacente.
Trabalhando no Google, aprendeu-se sobre obter escalabilidade sacrificando confiabilidade ou precisão. Ao processar milhões de consultas, algumas podem falhar, e isso mostra uma diferença de postura de engenharia. Ao abrir o Gmail, erros acontecem com frequência, mas os usuários resolvem o problema atualizando a página. Se a durabilidade do armazenamento for de 99.99999%, 200 entre 2 bilhões de clientes ainda podem ter transtornos.
Enfatiza-se a importância do conhecimento de domínio na liderança de engenharia. Se você trabalha em uma empresa financeira, precisa entender finanças; o mesmo vale para jornalismo ou comércio. Organizações bem-sucedidas incluem perguntas não técnicas relacionadas ao domínio nas entrevistas da equipe técnica.
É importante contratar as pessoas certas. Em vez de contratar alguém apenas porque conhece bem estruturas de dados e algoritmos, deve-se contratar quem consegue de fato construir o que é necessário. Pode ser útil que engenheiros tenham formação em outras áreas. Resolução de problemas e engenharia acontecem por meio de uma compreensão profunda do setor e da colaboração com especialistas.
Compartilha-se a experiência de ter construído um sistema de cobrança em uma startup de internet/telecomunicações. A lógica de cobrança foi implementada em dois lugares, o que dificultou manter a sincronização. As faturas eram revisadas manualmente para evitar erros, e a lógica duplicada servia para prevenir falhas. Essa experiência levou à compreensão da importância da contabilidade por partidas dobradas.
Há muitas opiniões defendendo sistemas contábeis de entrada única. Embora a contabilidade de entrada única possa ser mais fácil, é melhor usar partidas dobradas. Procura-se material sobre contabilidade para programadores.
Existe um mal-entendido sobre o princípio "make it work, make it right, make it fast". "make it right" é a segunda etapa, e o trabalho para até que o sistema funcione corretamente. A otimização só começa depois que todos os problemas forem resolvidos.
Quando não há testes, pode surgir o problema de perder dinheiro em transações. Ao construir sistemas financeiros, é errado tratar esse tipo de problema como normal.
Se a ideia é reinventar partes de um banco, vale a pena consultar sistemas já validados. Por exemplo, é possível se basear no esquema central de transações de depósitos bancários usado por instituições financeiras pequenas e médias nos Estados Unidos.
Software que lida com dinheiro deve ser tratado com extremo cuidado, e é preciso reconhecer erros do passado. O escândalo dos Correios do Reino Unido mostra as consequências reais desse tipo de problema.