La maggior parte delle persone scatta migliaia di foto ogni anno senza riguardarle mai, almeno in gran parte. Popsa aiuta a individuare quelle che contano davvero e le trasforma in ricordi tangibili, oggetti che le persone conserveranno e sfoglieranno ancora e ancora.
Le nostre app mobile eseguono modelli di machine learning direttamente sui dispositivi dei clienti per analizzare le foto (senza caricarle nel cloud), individuare persone e momenti significativi e progettare un layout che racconti una storia. Dall’esterno sembra tutto molto semplice: ed è proprio questo l’obiettivo.
Dietro questa semplicità c’è una grande complessità: app iOS, Android e web, servizi backend che gestiscono pagamenti e evasione degli ordini, infrastrutture che gestiscono l'elaborazione delle immagini e le consegne in oltre 50 Paesi. Questi sistemi custodiscono le foto più personali delle persone ed elaborano i loro pagamenti. Devono restare affidabili e sicuri e la comprensione di come si collegano tra loro non può diventare obsoleta.
Questa comprensione "vive" nella documentazione, che spiega come i sistemi si integrano tra loro, quali sono le convenzioni e dove si trovano i confini sensibili. È ciò che permette a un team di gestire, proteggere e ampliare sistemi complessi senza dipendere dalla singola persona che ha creato ciascun componente. Tuttavia, mantenere aggiornata questa documentazione è un problema con cui ogni team di tecnici si è scontrato prima o poi; e noi non facciamo eccezione.
Ho lavorato in abbastanza team di sviluppo per sapere bene come vanno le cose. Uno dei membri del team decide che "Da oggi in poi la documentazione sarà sempre aggiornata!". Segue uno sforzo intenso. Vengono create pagine, registrate convenzioni, disegnati schemi di architettura. A volte si passa a un nuovo sistema (GitHub, Confluence, Coda), ridando slancio all'iniziativa. Per qualche settimana, magari un paio di mesi, tutto sembra funzionare alla perfezione.
Poi la documentazione inizia a deteriorarsi.
Non necessariamente perché i membri del team smettono di interessarsene, ma perché l’evoluzione del software non è lineare. Puoi assorbire decine di modifiche incrementali senza che la documentazione si disallinei troppo, ma poi esegui il refactoring del livello di autenticazione, migri a un nuovo framework o ristrutturi un’API. La documentazione era corretta quando è stata scritta, ma nel frattempo la codebase è cambiata. Ad esempio, abbiamo appena eseguito il refactoring della nostra app iOS passando da un flusso di navigazione lineare a uno basato su tab. Dopo una modifica di questa portata, intere sezioni della documentazione descrivono potenzialmente un sistema che non esiste più. In una parola: la documentazione può disallinearsi molto facilmente.
La maggior parte dei tecnici sa che questo può essere un problema; di recente, però, il nostro team si è fermato a riflettere su come affrontarlo considerando la documentazione come un sistema, anziché come un’attività da svolgere.