Il divario tra due canali non si chiude con la velocità. Si chiude avendo un unico pool di disponibilità da cui ogni canale legge, invece di più copie che credono ciascuna a sé stessa.
Quasi nessuna doppia prenotazione è causata da un sistema lento. È causata dal fatto che la stessa camera viene registrata in più punti contemporaneamente, e ogni punto si fida della propria copia. Finché la verità esiste in più di una versione, c'è sempre un momento in cui due versioni non coincidono — e la velocità rende solo quel momento più breve, mai assente.
Immagina l'ultima camera per un sabato sera, elencata su due canali. Due ospiti prenotano a pochi secondi di distanza. Ogni canale controlla la propria copia della disponibilità, vede la camera libera e accetta. Quando l'istruzione di chiusura raggiunge il secondo canale, la seconda prenotazione esiste già.
Nessuno ha commesso un errore. Entrambi i canali si sono comportati esattamente come previsto. Il guasto è architetturale: a due sistemi è stato permesso di credere di possedere la stessa camera.
Collegare i calendari con iCal è il primo passo più comune, ed è ragionevole. Ma iCal è un formato a estrazione: l'altra parte scarica il tuo file di calendario secondo il proprio programma, tipicamente ogni dieci-venti minuti, e talvolta più a lungo quando la piattaforma è molto occupata. Niente di tutto questo è istantaneo, e niente è garantito.
Passare da iCal a una connessione reale riduce drasticamente la finestra, da minuti a secondi. È un miglioramento vero e rimuove la maggior parte degli incidenti. Ma non rimuove la categoria del problema, perché un design basato sull'invio significa comunque che esistono più copie che vengono riconciliate dopo il fatto.
C'è anche un guasto più sottile che la velocità non può toccare. Alcuni canali applicano i propri aggiustamenti automatici alla disponibilità — per esempio restituendo una camera quando arriva una cancellazione. Se il tuo sistema scrive un numero assoluto nello stesso istante in cui il canale applica la propria variazione, le due operazioni possono arrivare in qualsiasi ordine, e il risultato è talvolta più alto della verità.
La soluzione strutturale è smettere di mantenere copie. La disponibilità viene calcolata da un unico pool di camere reali, e ogni canale è una vista su quel pool, non il proprietario di una sua parte. Quando arriva una prenotazione da qualsiasi parte, il pool si riduce, e ogni canale viene corretto per corrispondere al nuovo numero.
Quest'ultimo punto conta più di quanto sembri. Un sistema che non riesce a leggere lo stato attuale di un canale ha due opzioni: indovinare o dirlo. Indovinare nella direzione di «probabilmente ancora disponibile» è esattamente il modo in cui una camera viene venduta due volte. Rifiutarsi di indovinare è ciò che fa la differenza tra un sistema che di solito ha ragione e uno su cui puoi davvero contare a casa piena.