Blog
Build in Public
20 aprile 20269 min

40 commit per rendere tre schermate identiche: perché l'uniformazione invisibile cambia tutto

Tre schermate. Attività. Memo. Eventi. Tutte e tre mostrano essenzialmente la stessa cosa: un titolo, un contenuto, le persone che vi hanno accesso, una cartella di riferimento, promemoria, etichette. Eppure, in TAMSIV, queste tre schermate avevano ciascuna il proprio layout, il proprio ordine di sezioni, il proprio modo di visualizzare le stesse informazioni. 40 commit dopo, finalmente si assomigliano. Ecco perché questa uniformazione invisibile cambia tutto.

Punti chiave da ricordare

  • Le tre schermate di dettaglio (attività, memo, eventi) condividono ora la stessa struttura: stesso ordine di sezioni, stessa resa delle etichette, stesso albero di accesso.
  • Un componente dedicato TaskAccessTree mostra in due rami chi ha accesso a un contenuto: il ramo "proprietario" e il ramo "gruppi condivisi".
  • Un componente dedicato GroupMembersSection unifica l'elenco delle persone che vedono il contenuto quando è condiviso in un gruppo.
  • Il breadcrumb delle cartelle genitore è nascosto quando è vuoto, per evitare uno spazio bianco inutile.
  • Le etichette sono precedute da un hashtag e raggruppate sotto un'intestazione esplicita, addio alla tabella anarchica.

Perché uniformare tre schermate che già funzionavano

La domanda è legittima. Se le tre schermate già funzionavano, perché spendere 40 commit per renderle identiche? La risposta è in una parola: carico cognitivo.

Quando usi TAMSIV quotidianamente, passi da un'attività a un memo e poi a un evento a volte in meno di un minuto. Se ogni schermata mostra le stesse informazioni in un ordine diverso, il tuo cervello deve riorientarsi ad ogni transizione. Cerchi l'etichetta in alto sull'attività, la ritrovi in basso sul memo, non la trovi più affatto sull'evento. Moltiplica questo per 20 o 30 consultazioni al giorno, e l'attrito invisibile finisce per pesare.

Al contrario, quando le tre schermate si assomigliano, il tuo cervello impara una sola volta dove si trova ogni cosa. Il titolo è in alto. L'albero di accesso è subito sotto. La cartella genitore segue. Le etichette vengono dopo. Il contenuto principale occupa il centro. I promemoria e la cronologia scendono in basso. Tre schermate, una sola mappa mentale.

L'albero di accesso: due rami, zero ambiguità

L'informazione più critica su una schermata di dettaglio è "chi vede cosa". Prima del refactor, ogni schermata rispondeva a questa domanda a modo suo. La schermata delle attività elencava una cartella assegnata con un badge. La schermata dei memo mostrava un elenco piatto di membri. La schermata degli eventi mostrava una sezione "Partecipanti" staccata dal resto.

Il nuovo componente TaskAccessTree sostituisce queste tre logiche con una struttura a due rami chiaramente etichettati:

  • Ramo "proprietario": la persona che ha creato l'attività o il memo. Visualizzazione minimale, avatar più nome, niente di più.
  • Ramo "gruppi condivisi": ogni gruppo in cui il contenuto è visibile, con l'elenco dei membri interessati sotto forma di avatar impilati. Se l'attività è condivisa in tre gruppi, vengono visualizzati tre sotto-rami.

Il vantaggio di questa struttura a due rami è che risponde a due domande diverse senza mescolarle. Chi è il proprietario: ramo 1. Chi vede il contenuto oltre al proprietario: ramo 2. Nessuna confusione possibile. Un utente può capire a colpo d'occhio chi ha accesso, senza leggere una sola riga di testo.

Quando la gerarchia breadcrumb scompare

Un altro dettaglio di refactor, invisibile quando tutto va bene ma orribile quando appare: il breadcrumb delle cartelle genitore. Se la tua attività è organizzata in Famiglia > Spesa > Supermercato, la schermata mostra questo percorso in alto come un breadcrumb. Perfetto.

Problema: alcune attività non sono organizzate in nessuna cartella. Sono nella radice. Il breadcrumb mostrava allora uno spazio vuoto, poi una freccia, poi niente, poi il titolo. Un artefatto visivo che dava l'impressione che la schermata fosse caricata male.

La soluzione è banale, a pensarci bene: se l'elenco dei genitori è vuoto, non renderizziamo il componente. Due righe di codice, un bug visivo in meno, e la schermata respira. È tipicamente il tipo di rifinitura che nessun utente noterà consapevolmente, ma che tutti sentiranno inconsciamente come "questa app è curata".

Le etichette precedute da hashtag

I tag venivano visualizzati senza prefisso né intestazione. Un elenco piatto di parole poste sotto il contenuto. Visivamente, si mescolavano al testo principale e non venivano immediatamente identificati come etichette.

Il nuovo rendering aggiunge due cose semplici:

  1. Un'intestazione "Tag" sopra l'elenco, in modo che l'occhio sappia subito di cosa si tratta.
  2. Un prefisso # davanti a ogni etichetta, una convenzione presa in prestito dai social network e che tutti conoscono.

Il risultato è immediato: un'attività che ha cinque etichette mostra ora una riga chiara come #urgente #spesa #weekend #famiglia #pasto, impossibile da confondere con testo normale.

Lo stesso ordine di sezioni su tutte e tre le schermate

Su ogni schermata, le sezioni seguono ora questo ordine:

  1. Titolo e stato (o data per un evento)
  2. Albero di accesso (TaskAccessTree)
  3. Cartella genitore assegnata (con la stessa mappa visiva ovunque)
  4. Etichette (con intestazione e prefisso #)
  5. Contenuto principale (descrizione, testo memo, dettagli evento)
  6. Promemoria e ricorrenza (se applicabile)
  7. Allegati (se presenti)
  8. Cronologia e attività (commenti, reazioni)

Passare da un'attività a un memo e poi a un evento offre ora una continuità visiva totale. Impari una volta dove cliccare, poi non impari più nulla. Un guadagno di pochi millisecondi per consultazione, che diventa minuti al giorno e ore al mese per un utente regolare.

Le funzionalità invisibili rendono le app che conserviamo

Nessuno lancerà TAMSIV domani dicendo "oh fantastico, la schermata di dettaglio dell'attività è allineata con quella del memo". Le funzionalità invisibili non si annunciano. Non si vendono. Si percepiscono.

Questo sprint di 3 giorni e 40 commit non produce alcuno screenshot di marketing. Nessun nuovo pulsante da mostrare. Nessuna animazione cinematica. Eppure, è esattamente il tipo di lavoro che fa la differenza tra un'app che si installa e si dimentica, e un'app che si conserva e si raccomanda.

I 10 giorni precedenti, era un sistema completo di email transazionali. I 3 giorni successivi, è stata l'uniformazione delle tre schermate di dettaglio. E domani, sarà qualcos'altro di altrettanto invisibile. L'app cresce, ma sempre in silenzio.

Cosa permetterà questo refactor in seguito

L'altro beneficio di questa uniformazione è che apre la strada a funzionalità future molto più rapidamente. Quando le tre schermate condividono la stessa struttura, aggiungere una nuova sezione (ad esempio un riquadro "tradotto automaticamente" per un memo vocale in una lingua diversa) si fa una sola volta e si applica ovunque.

Prima del refactor, aggiungere una sezione trasversale significava codificarla tre volte, con tre varianti di stile e tre posizioni da negoziare. Dopo, è un componente condiviso che si inietta in tutte le schermate di dettaglio. Il costo marginale di aggiungere una nuova funzionalità è diviso per tre.

Questo è il vero beneficiario nascosto di questa settimana: non l'utente di oggi che vedrà solo un'app più coerente, ma lo sviluppatore singolo che costruirà le prossime 40 funzionalità in un terzo del tempo.

E intanto, 22 vecchi reindirizzamenti SEO

Parallelamente all'uniformazione delle schermate, ho corretto un problema di reindirizzamento sul sito. Le prime traduzioni del blog avevano lasciato 22 slug obsoleti in DE, ES, IT e PT, che restituivano 404 su Google. Ogni slug obsoleto è ora reindirizzato in modo permanente (301) alla sua versione attuale.

Il file x-default della sitemap è stato anch'esso corretto, affinché i motori di ricerca comprendano quale sia la versione canonica di ogni articolo quando la lingua dell'utente non è determinabile.

Si tratta di 22 righe in un file di reindirizzamento Next.js, 22 errori di indicizzazione in meno, e potenzialmente 22 percorsi di visitatori ritrovati invece di persi.

Domande frequenti

Uniformare le schermate di dettaglio rende l'app più veloce?

Tecnicamente, marginalmente. I componenti condivisi vengono renderizzati in cache in modo più efficiente, e il bundle Javascript diminuisce di circa il 3% grazie alla deduplicazione del codice. Ma il vero guadagno è cognitivo, non tecnico: l'utente si sente più veloce perché naviga con meno attrito mentale.

Perché non hai fatto questa uniformazione prima?

Perché finché le tre schermate si evolvevano separatamente e non si sapeva ancora quali sezioni sarebbero emerse come trasversali, tentare di uniformare sarebbe stato prematuro. Era necessario prima che ogni schermata scoprisse le proprie esigenze, e poi estrarre i pattern comuni una volta che fossero stabili.

Che impatto ha per chi usa TAMSIV per la prima volta?

Un nuovo utente impara prima la schermata delle attività. Prima del refactor, doveva poi reimparare la schermata dei memo e la schermata degli eventi. Dopo, riconosce istantaneamente gli elementi, e la sua curva di apprendimento passa da tre livelli a uno solo. L'onboarding è diviso per tre in tempo percepito.

Un utente noterà la differenza?

Probabilmente non consapevolmente. Il refactor è progettato per essere invisibile. Ma se si chiede a un utente che usava l'app prima e dopo di nominare cosa è cambiato, spesso dirà "l'app mi sembra più coerente" o "trovo le mie informazioni più facilmente", senza saper spiegare esattamente perché.

Il refactor ha rotto qualcosa nella versione mobile?

Un audit completo è stato effettuato dopo il deployment. Nessuna regressione funzionale rilevata. Le animazioni di transizione tra le schermate sono state persino leggermente fluidificate perché i componenti condivisi permettono un rendering più prevedibile da parte di React Native.

Disponibile sul Play Store, 6 mesi e 780+ commit

TAMSIV è disponibile in produzione su Google Play dal 2 aprile. Gratuito, 6 lingue, sviluppatore singolo. L'app continua ad evolversi ogni giorno, prevalentemente in silenzio. Sono l'80% invisibile che la fa rimanere installata.