Czego naprawdę dotyka usunięcie licznika
Usunięcie licznika opróżnia tu 33 tabele. Wczoraj opróżniało 25.
Tych osiem, które pominęło, powstało dzień wcześniej, między 11:10 przed południem a 15:10 po południu.
Jak działa usuwanie
Właściciel może usunąć swój licznik. Potrzeba do tego POST-a, tokenu właściciela i przepisanego ręcznie numeru licznika, bo cofnąć się nie da. Nic nie jest odkładane na bok: kopia w cieniu byłaby przeciwieństwem tego, o co poproszono, a odnośniki eksportu stoją nad przyciskiem dla każdego, kto jej chce.
Potem lista tabel jest opróżniana w jednej transakcji, tabela główna na końcu, a do archiwum trafia nagrobek, żeby numer nigdy nie mógł trafić do kogoś innego. Jeśli jakaś część zawiedzie, całość się wycofuje. Nic nieusunięte jest lepsze niż usunięte w połowie.
Nad tą listą stoi w pliku:
„Każda tabela, która wie coś o tym liczniku. Jako lista, a nie rozrzucone po kodzie: czego tu brakuje, zostaje jako osierocony wiersz, i nikt tego nie zauważa."
Opisała własny przypadek dzień naprzód
Wczoraj pojawiło się sześć nowych tabel dla nowej funkcji — czas na stronie, głębokość przewijania, strony wyjścia — oraz dwie inne. Między 11:10 a 15:10.
Lista usuwania była tego samego dnia ruszana, żeby dopisać inną nową tabelę. Tych osiem przyszło po tym, a lista już się nie poruszyła. Od wczorajszego popołudnia usunięcie zostawiało więc 4840 wierszy danych o zachowaniu, rozrzuconych po ośmiu tabelach, należących do ludzi, którzy prosili o zapomnienie.
To nie jest opowieść o niedbalstwie. Ktoś napisał tę listę, dokładnie zrozumiał, dlaczego jest listą, zapisał, co się dzieje, gdy zostaje w tyle — i tego właśnie dnia dopisał do niej jedną tabelę. A i tak została w tyle, bo trzymanie dwóch rzeczy w rytmie przez pamiętanie o tym to coś, co ludzie robią niezawodnie aż do popołudnia, w którym tego nie robią.
Naprawa, i ta druga naprawa
Osiem nazw jest teraz na liście. Wstawiono je na ich alfabetyczne miejsca, a nie dopisano na końcu, bo lista posortowana pokazuje lukę, a lista dopisywana nie.
To ta mała naprawa. Ta, o którą chodzi, to skrypt, który pyta bazę, które tabele niosą numer licznika, czyta listę z pliku źródłowego zamiast ją powtarzać, i porównuje jedno z drugim. Kto zakłada tabelę, puszcza go raz. Nie da się go zapomnieć tak, jak zapomina się listy, bo on niczego nie przechowuje — wyprowadza odpowiedź ze schematu za każdym razem.
Przy pierwszym uruchomieniu znalazł jeszcze coś: 25 wierszy w ośmiu kolejnych tabelach, których numer licznika nie stoi ani w tabeli działającej, ani w archiwum. Nie usunięte liczniki — te zostawiają nagrobek. Numery nienależące do niczego, w większości oczywiste numery testowe sprzed czasu sprawdzania archiwum. Zapisano je do pliku poza katalogiem sieciowym, a potem usunięto.
Do czego to się uogólnia
Każda lista, którą trzeba trzymać w rytmie z czymś innym, kiedyś z tego rytmu wypadnie, a luka będzie niewidoczna, bo lista, której brakuje wpisu, wygląda dokładnie jak lista kompletna.
Obroną nie jest dyscyplina. Jest nią wyprowadzanie jednej strony z drugiej i sprawdzanie, czy się zgadzają — i puszczanie tego sprawdzenia w chwili, gdy ktoś dokłada rzecz, a nie w chwili, gdy ktoś się zastanawia.
Komentarz nad listą miał rację we wszystkim prócz jednego słowa. Powiedział, że nikt tego nie zauważa. Ktoś zauważył, dzień później, bo poszedł sprawdzić skryptem, a nie pamięcią.