Gdzieś między Radomiem a wsią teściów, zasięg spadł do jednej kreski, tak jak zawsze na tym odcinku. Trzyletni syn Kasi obudził się w foteliku rozpalony i płaczliwy, do celu było jeszcze z pół godziny. Pierwsza myśl nie dotyczyła gorączki. Dotyczyła tego, czy dała mu już tę dawkę, czy to była poprzednia, i ile właściwie godzin minęło. Telefon pokazywał jedną kreskę zasięgu, może dwie, na granicy działania. Nieważne. Otworzyła DoseNest, zobaczyła ostatni wpis, godzina 18:40, jeszcze przed wyjazdem, policzyła w głowie i podała kolejną dawkę zgodnie z planem. Bez kółka ładowania. Bez komunikatu o braku połączenia. Bez konieczności logowania się od nowa, gdy zasięg wróci. Apka nie potrzebowała internetu bardziej, niż potrzebuje go kalkulator w telefonie.
To nie szczęśliwy przypadek. To cały sens tego, jak zbudowana jest ta apka, i nie stało się to przez pomyłkę.
Większość rodzin trafia w wersję tego samego momentu prędzej czy później, nawet bez wyjazdu do teściów. Poczekalnia u pediatry na wsi, gdzie cała przychodnia dzieli jedną kreskę zasięgu. Piwnica u babci, gdzie router piętro wyżej ledwo sięga. Korytarz szpitala, gdzie gościnne wifi chce numeru sali, którego jeszcze nie masz, bo wciąż siedzisz na izbie przyjęć. Pytanie zawsze brzmi podobnie: czy to, co muszę teraz sprawdzić, po prostu zadziała, czy będzie się ładować, czekając aż jakiś serwer gdzieś odpowie.
Ekran, którego nigdy nie zobaczysz w DoseNest
Otwórz pierwszy raz większość apek zdrowotnych albo rodzicielskich, a znasz ten schemat, zanim jeszcze zaczniesz cokolwiek wpisywać. Załóż konto. Podaj maila. Poczekaj na kod weryfikacyjny, który czasem przychodzi po minucie, a czasem nie przychodzi wcale. Wybierz hasło, potem inne, bo pierwsze nie miało znaku specjalnego. Gdzieś w tym wszystkim apka łączy się z serwerem, tylko po to, żeby wpuścić Cię do środka, co znaczy, że pierwsza rzecz, jakiej od Ciebie oczekuje, to działające połączenie z internetem, zanim jeszcze zapiszesz choćby jedną dawkę czegokolwiek.
Otwórz DoseNest pierwszy raz, a nic z tego się nie dzieje. W całym procesie wdrożenia nie ma pola na maila. Nie ma pola na hasło. Nie ma przycisku „załóż konto" do kliknięcia. Dodajesz pierwsze dziecko po imieniu, dodajesz lek, zapisujesz dawkę. To cały dystans między pobraniem apki a zaczęciem jej używania.
To nie jest skrót, który wzięliśmy, pomijając krok, co i tak wyskoczy później, schowany w ustawieniach. Poszukaj ekranu rejestracji gdziekolwiek w apce, na każdym etapie, a go nie znajdziesz, bo nigdy nie istniało konto po stronie serwera, do którego można by się zapisać.
Nie tylko dzieci. Nikt tu nie ma konta.
Pisaliśmy już wcześniej, dlaczego dzieci w tej apce nigdy nie dostają własnego logowania: bez maila, bez hasła, dodane tylko po imieniu, wewnątrz konta rodzica. To jedna warstwa tego tematu. Tu jest szersza: nikt go nie ma. Ani sześciolatek, ani rodzic trzymający telefon. W DoseNest nie ma procesu rejestracji dla nikogo, dorosłych też to dotyczy.
Jedyne dane logowania w całym systemie to te, które już chronią Twój telefon, cokolwiek już służy Ci do jego odblokowania: Face ID, kod, odcisk palca. Nie ma osobnego hasła do DoseNest do wymyślenia, pytania pomocniczego o pierwsze zwierzę z dzieciństwa, linku „nie pamiętam hasła" do klikania o drugiej w nocy, gdy w drugiej ręce trzymasz termometr. Jeśli wejdziesz do swojego telefonu, wejdziesz do historii leczenia swojej rodziny. Nic więcej nie stoi między Tobą a tymi danymi, i nic nikomu nie da się ukraść, zgadnąć ani zresetować.
Podaj telefon opiekunce na wieczór albo babci pilnującej dzieci na weekend, a zasada się nie zmienia. Nie potrzebują własnego konta DoseNest, żeby zapisać dawkę albo sprawdzić, co już podano. Potrzebują telefonu i tego, czym rodzic już go odblokowuje. To mniej model bezpieczeństwa zaprojektowany dla apki, a bardziej sposób, w jaki działałby wspólny zeszyt na kuchennym blacie, tylko że nigdy nie kończą mu się kartki i nikt nie zaleje kawą wpisów sprzed miesiąca.
Gdzie naprawdę żyją te dane
DoseNest zbudowany jest na Expo z lokalną bazą SQLite, siedzącą na samym urządzeniu, tej samej kategorii technologii, jakiej używa wiele apek działających offline, żeby przechowywać dane bez zależności od połączenia sieciowego. Profil każdego dziecka, każdy lek, każda zapisana dawka żyje wewnątrz tego pliku bazy, na Twoim telefonie. Nie ma bazy użytkowników po stronie serwera gdzieś indziej, która by to odzwierciedlała, bo nie ma serwera trzymającego kopię danych Twojej rodziny w ogóle.
Typowa wersja kończy się krokiem, o którym większość rodziców w ogóle nie myśli: serwer w chmurze, a często też kilka usług firm trzecich podłączonych do niego, do analityki, raportowania błędów albo marketingu. Wersja DoseNest kończy się krok wcześniej. Dane wędrują z telefonu do pliku bazy, też na telefonie, i tam kończy się droga. Nie ma kolejnego kroku, bo nigdy go nie zbudowaliśmy.
Offline to tu nie ustawienie. To cały fundament.
Wiele apek reklamujących się hasłem „działa offline" ma na myśli coś węższego, niż brzmi. Możesz zobaczyć to, co już zostało pobrane, bez zasięgu, ale nowy wpis zrobiony offline czeka w kolejce, aż połączenie wróci, żeby zsynchronizować się z serwerem, na którym i tak miał wylądować. To naprawdę użyteczny wzorzec dla wielu programów. Wciąż jednak zbudowany jest wokół serwera w centrum, do którego akurat chwilowo nie masz dostępu.
DoseNest nie ma takiej kolejki, bo nie ma po drugiej stronie serwera, do którego kiedykolwiek trzeba by dotrzeć. Zapisanie dawki to zapis do pliku, który już jest na telefonie, i to ta sama czynność, niezależnie od tego, czy masz szybkie wifi, jedną kreskę zasięgu, czy telefon w trybie samolotowym dziesięć tysięcy metrów nad ziemią. Nic w samym działaniu się nie zmienia. Nie ma późniejszej synchronizacji, o którą trzeba się martwić, bo nigdy nie było luki do zasypania.
Widać to też w mniejszych, mniej dramatycznych momentach. Poczekalnia u pediatry na wsi, gdzie cała przychodnia dzieli jedną kreskę zasięgu. Piwnica u babci podczas burzy, gdy sprawdzasz chore dziecko dwa piętra od routera. Korytarz szpitala, gdzie gościnne wifi chce numeru sali, którego jeszcze nie masz. Żadne z tego niczego nie zmienia w otwieraniu DoseNest i zapisywaniu dawki, w sposób, który wyraźnie miałby znaczenie dla apki czekającej na odpowiedź skądś indziej.
Świadomy wybór, nie brakująca funkcja
Nic z tego nie stało się dlatego, że ekran logowania i synchronizacja w chmurze były gdzieś na liście i po prostu nigdy nie powstały. Zostały pominięte celowo, z powodów, które mają tyle wspólnego z tym, jak apka się używa o drugiej w nocy, co z samą prywatnością danych.
Wiele oprogramowania kończy z kontem i serwerem z tego samego cichego powodu: to szablon, z którego powstało. Narzędzia budowane dla zespołów, albo dla czegokolwiek, co musi synchronizować się między setkami urządzeń firmy, naprawdę potrzebują centralnego serwera, który utrzymuje spójną kopię u wszystkich. Gdzieś po drodze ten wzorzec stał się domyślnym punktem startu dla niemal wszystkiego, także dla wielu apek, które tak naprawdę muszą działać tylko dla jednej rodziny, na jednym telefonie, naraz. DoseNest zaczął z drugiej strony: co naprawdę, technicznie, jest potrzebne, żeby zapisać dawkę. Odpowiedzią okazał się plik bazy danych i nic więcej, więc to właśnie zbudowaliśmy.
Kompromis, powiedziany wprost: brak konta w chmurze oznacza też brak automatycznej kopii zapasowej i brak wbudowanego sposobu na przeniesienie historii na nowy telefon samym zalogowaniem się. Jeśli telefon zginie, się zepsuje albo zostanie wyczyszczony, zapis na nim znika razem z nim, tak samo jak zniknęłyby notatki w papierowym zeszycie, gdyby zniknął sam zeszyt. To realne ograniczenie, nie ukryte.
Jedynym mostem, jaki celowo zbudowaliśmy nad tą konkretną luką, jest eksport PDF przygotowany na wizytę u pediatry: podsumowanie historii leczenia dziecka jednym dotknięciem, które możesz zapisać, wydrukować albo przenieść na nowy telefon w starym stylu, trzymając plik tam, gdzie go później znajdziesz. To nie jest automatyczna synchronizacja w chmurze i nie udajemy, że jest. Bliżej temu do skserowania papierowej karty pacjenta przed zmianą lekarza, wbudowanego dlatego, że wiemy, że ten kompromis jest realny, nie dlatego, że o nim zapomnieliśmy.
Nie ma tu też niczego do wycieku, w tym sensie, w jakim to słowo się zwykle rozumie. Wycieki danych z popularnych aplikacji to realna, powtarzająca się kategoria wiadomości, o której niemal każdy czytał przynajmniej jeden nagłówek. DoseNest nie jest w stanie takiego wycieku doświadczyć, nie dzięki jakiejś dodatkowej warstwie szyfrowania nałożonej na bazę siedzącą gdzieś na serwerze, ale dlatego że nigdzie nie ma bazy danych historii leczenia Twojej rodziny po stronie serwera, którą dałoby się w ogóle naruszyć. Najprostszy sposób na ochronę danych, których nigdy nie chciałeś ujawniać, to nigdy nie zbierać ich centralnie.
Powiązany artykuł: Pisaliśmy już wcześniej, dlaczego dzieci konkretnie nie potrzebują własnego logowania w DoseNest, zobacz Dzieci nie potrzebują konta, żeby być w systemie. Tamten tekst dotyczy tego, kto może zalogować się do apki. Ten dotyczy czegoś pod spodem: gdzie same dane żyją, gdy już zostaną zapisane, na tym telefonie, i nigdzie indziej.
Do celu zostało jeszcze z dziesięć minut, kiedy Kasia podała synowi tę drugą dawkę. Zasięg wrócił do pełnych kresek jakiś kilometr przed bramą teściów, tak jak zawsze na tej trasie. Nic nie musiało się zsynchronizować, bo nic nigdy nie potrzebowało do tego sieci. To cała idea, doprowadzona do końca: nie funkcja, którą zauważasz, gdy działa, tylko apka, która nigdy nie zażądała od Ciebie bycia online, żeby zająć się własnym dzieckiem.
Nic do zalogowania. Nic do synchronizacji.
Każda dawka zostaje właśnie tu, na tym telefonie, niezależnie od tego, czy masz pełny zasięg, czy żadnego. 7 dni za darmo, potem prosta subskrypcja.
Pobierz w App Store →