1 pontos por GN⁺ 2024-11-30 | 1 comentários | Compartilhar no WhatsApp

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

 
GN⁺ 2024-11-30
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.