Quando você compartilha uma conta no HiBill, uma coisa pequena, mas real, muda de mãos. A divisão deixa de ser sua. Cada pessoa que abre o link decide o que consumiu, e o valor ao lado do nome dela é dela — não um número que você atribuiu, mas um que ela mesma declarou.

Isso acabou importando mais do que esperávamos quando tentamos construir o caminho de volta.
O beco sem saída
Até esta semana, compartilhar era uma porta de mão única. Dava para desativar o compartilhamento, mas isso só matava o link. A conta continuava como divisão aberta para sempre: controles de divisão escondidos, nenhum jeito de editar como ela se dividia, nenhum jeito de compartilhar de novo a partir da própria conta. Um cadeado com a chave jogada fora.
Ninguém planejou isso. É o formato que sai quando você implementa “compartilhar” e “parar de compartilhar” como as duas pontas de um interruptor e nunca pergunta para que o interruptor serve de verdade. Desativar o compartilhamento responde gente nova ainda pode reivindicar? Não responde de quem é a divisão agora? — e tínhamos dado como certo, sem perceber, que a segunda pergunta se resolvia junto com a primeira.
Não se resolve.
Duas portas que parecem uma
Pense em qual teria sido a solução óbvia: fazer Parar de compartilhar devolver a conta ao que ela era antes. Um botão, nenhum conceito novo, fim do beco sem saída.
Chegamos perto de lançar exatamente isso. Está errado, e vale explicar por quê.
Desligar um link e assumir o poder de editar as partes que outras pessoas reivindicaram são decisões diferentes, com pesos diferentes. A primeira é arrumação — o jantar acabou, ninguém mais precisa reivindicar nada. A segunda muda quem decide quanto cada um deve. Se Parar de compartilhar fizesse as duas coisas, alguém arrumando a casa depois de um jantar ganharia, sem perceber, o poder de reescrever o que outras quatro pessoas disseram que consumiram, tendo apertado um botão que só prometia desligar uma URL.

Então são duas portas. Parar de compartilhar encerra o link. Retomar o controle — uma ação separada, com a sua própria confirmação — volta a transformar a conta numa divisão comum, que é sua.

Quanto custa “retomar o controle”
Esta é a parte que achamos interessante: retomar a divisão não mexe em um único valor.
Todo mundo mantém o valor que reivindicou. O resto que ninguém reivindicou, que estava implicitamente com quem pagou, vira uma linha explícita para quem pagou. Os itens do recibo continuam lá. Calcule os saldos antes e depois e eles são idênticos.
O que muda é a autoridade. Esses valores deixam de ser escolhidos pela própria pessoa, o que significa que agora você pode editá-los.
Parece pouca coisa, e é tudo. Um número que alguém escolheu para si e um número que você atribuiu a essa pessoa valem níveis diferentes de confiança, mesmo quando são o mesmo número. O registro só é útil porque as duas pessoas acreditam nele, e essa crença vem de saber quem tinha permissão para escrever o quê.
Por isso a confirmação diz exatamente isso, em vez de algo tranquilizador sobre nada mudar: todos mantêm o valor atual, mas cada um deixa de escolher a própria parte — você poderá editar a parte de qualquer pessoa.
Devolvendo alguma coisa
Tem uma simetria que só percebemos enquanto construíamos.
Uma parte escolhida pela própria pessoa não tem botões de aprovar ou recusar. Por que teria? Ninguém contesta um valor que escolheu. Esse é o seu consentimento, já dado.
Mas, quando a divisão volta para o seu controle, esse raciocínio cai por terra. A parte não é mais algo que a pessoa escolheu; é algo que agora você pode mudar. Por isso retomar o controle devolve os botões de aprovar ou recusar a todo mundo na conta.
Você ganha o poder de editar a parte de cada um. Cada um ganha o poder de dizer não. Nenhuma das metades funciona com honestidade sem a outra, e teríamos lançado só a primeira se não tivéssemos ido atrás do que a mudança realmente tirava das pessoas.
Um caso que recusamos
Se as reivindicações somarem mais do que a conta — duas pessoas certas de que pediram o prato caro —, você não consegue retomar a divisão até isso ser resolvido.
Poderíamos ter feito os números baterem. Reduzir tudo proporcionalmente, ou travar o resto de quem pagou em zero e seguir em frente. As duas saídas produzem uma conta que fecha e que, discretamente, distorce o que as pessoas disseram.
Uma reivindicação a mais é uma discordância real entre duas pessoas. O lugar certo para resolver é entre elas, não dentro de um ajuste aritmético que esconde o conflito. Então o HiBill diz não, explica por quê e espera.
A lição geral
Continuamos encontrando o mesmo padrão. Um recurso tem um sentido óbvio de ida, alguém constrói, e a volta fica como exercício para o leitor — não por decisão, só porque ninguém perguntou.
Aí a volta acaba carregando uma pergunta que a ida nunca precisou responder. Compartilhar só precisava perguntar “quem pode ver isso?”. Deixar de compartilhar precisava perguntar “de quem é isso agora?”, e não havia resposta no código porque nunca tinha havido resposta na nossa cabeça.
O beco sem saída era o sintoma. A pergunta que faltava era o bug.
Continue lendo
Como funciona o HiBill: o caderninho do dinheiro entre amigos — o modelo inteiro numa leitura só: pessoas, saldos e onde entra uma conta compartilhada.
Como dividir a conta em grupo grande sem fazer conta na mesa — os links para reivindicar vistos do lado da mesa, antes de alguém retomar o controle.
Usando divisões abertas — o passo a passo para compartilhar uma conta, parar de compartilhar e retomar o controle.