Evite marcações duplicadas: porque falham os sistemas, e o modelo que não pode falhar

A dupla marcação quase nunca acontece porque um calendário «cometeu um erro». Acontece porque o software verificou se uma vaga estava livre, e reservou-a, como dois passos separados com um intervalo entre eles — e um segundo cliente escapuliu-se por esse intervalo. Feche esse intervalo e o resto do calendário pode ser tão simples ou elaborado quanto quiser. Deixe-o aberto, e nenhuma quantidade de polimento no widget de marcações impede que duas pessoas acabem ocasionalmente na mesma cadeira.

Onde a diferença realmente aparece

A sequência habitual por trás de quase qualquer marcação: verificar «esta vaga ainda está livre?», receber «sim», depois escrever a marcação. Uma leitura, depois uma escrita — e entre as duas, por muito breve que seja, uma janela. Um segundo pedido que verifica a mesma vaga durante essa janela também vê «sim, ainda livre». Ambos passam a acreditar que estão a marcar uma vaga aberta, porque no momento em que cada um olhou, estava.

Não consegue perceber, clicando numa demonstração numa tarde de terça-feira tranquila, se a verificação e a escrita por baixo estão em segurança unidas ou perigosamente separadas — o calendário parece idêntico de qualquer das formas.

Porque "basta um calendário mais bonito" não resolve

Muito software de marcações é, por baixo do widget, um construtor de formulários genérico que nunca foi concebido para duas pessoas a reclamarem a mesma coisa finita ao mesmo tempo. A escolha de data pode ser fluida, a disponibilidade parecer em tempo real, o ecrã de confirmação limpo — e o back end continua a verificar com uma leitura e a escrever com uma escrita separada e posterior. Tráfego real e simultâneo encontra a costura.

O modelo que realmente fecha a lacuna

Deixe de tratar «verificar» e «reservar» como duas operações: execute de novo a verificação de disponibilidade e escreva a marcação dentro de uma única transação de base de dados que bloqueia as linhas dessa vaga. O pedido que chegar primeiro termina a sua verificação-e-escrita sem interrupção; o segundo espera a sua vez, e depois volta a verificar face à nova realidade. Não sobra nenhuma janela em que informação desatualizada de «ainda disponível» possa ser usada — é a base de dados que impõe a ordem, e não o código da aplicação a torcer para que nada entre em corrida.
Reservas e agendamento no painel de administração Olmira

O que acontece realmente quando duas pessoas clicam em «reservar» ao mesmo tempo

1

Os dois pedidos chegam quase ao mesmo tempo

2

Um pedido obtém o bloqueio primeiro

3

O primeiro pedido volta a verificar e escreve, tudo de uma vez

4

O segundo pedido volta a verificar face à nova realidade

5

O segundo cliente é avisado de imediato

Como a Olmira trata disto

O motor de marcações da Olmira executa a reverificação de disponibilidade e a gravação da marcação como um só passo, dentro de uma única transação de base de dados bloqueada — por isso, quando dois clientes vão atrás do mesmo horário ao mesmo tempo, uma marcação é confirmada e à outra é dito, antes de qualquer dinheiro se mover, que o horário acabou de sair. O mesmo bloqueio cobre o recurso subjacente, e não apenas o serviço que está a ser vendido, pelo que dois serviços diferentes que partilham uma sala ou um membro da equipa também não o podem duplicar entre si sem que ninguém dê por isso. Uma salvaguarda separada e mais pequena apanha o acidente mais comum — o mesmo cliente a fazer duplo clique em «marcar» — e pede-lhe que confirme, em vez de criar silenciosamente duas marcações. Veja como tudo encaixa na página de marcações.

Guias relacionados

Equipa, salas, equipamento

Faltas: o que move realmente o número

Um calendário que diz a verdade sobre o que está livre

Horários reais, verificados e bloqueados no momento em que são reservados — não um palpite baseado no que a página carregou há um segundo.