◧ UX e accessibilità

Caricamento e feedback: far capire all'utente cosa succede

Gestire attese, conferme e aggiornamenti nelle interfacce: spinner, barre di avanzamento, skeleton, interfacce ottimistiche e lettori di schermo.

Quando si preme un pulsante e non succede nulla, la reazione è quasi sempre la stessa: lo si preme di nuovo. Il risultato può essere un ordine duplicato, un messaggio inviato due volte, un modulo inviato a metà. Molti problemi di usabilità nascono non da ciò che l'interfaccia fa, ma dal fatto che non lo comunica.

La prima delle euristiche di usabilità più note riguarda proprio questo: il sistema deve sempre tenere informato l'utente su ciò che sta accadendo, con un riscontro appropriato e in tempi ragionevoli.

Quanto può durare un'attesa

Una regola pratica molto usata nella progettazione di interfacce distingue tre soglie, di origine ormai classica:

Tempo di risposta Percezione Che cosa mostrare
Fino a circa 0,1 secondi Reazione istantanea Nulla di speciale: basta il cambiamento visibile
Fino a circa 1 secondo Il flusso del pensiero non si interrompe, ma il ritardo si nota Un segnale discreto, come il pulsante che cambia stato
Oltre qualche secondo L'attenzione rischia di spostarsi altrove Un indicatore di avanzamento e, se possibile, una stima

Sono ordini di grandezza, non misure esatte, ma aiutano a scegliere il tipo di riscontro giusto.

I tipi di indicatore

Riscontro immediato sull'elemento

Il primo riscontro deve arrivare sul punto dove l'utente ha agito. Un pulsante premuto può cambiare aspetto, mostrare un piccolo indicatore e diventare temporaneamente non attivabile, per evitare il doppio invio. Il testo può cambiare da «Invia» a «Invio in corso…».

Spinner

L'indicatore rotante dice «sto lavorando» ma non dice quanto manca. Va bene per attese brevi e di durata imprevedibile. Per attese lunghe diventa frustrante: dopo dieci secondi di rotazione, l'utente non sa se il sistema è bloccato.

Barra di avanzamento

Quando la durata è stimabile, come in un caricamento di file o un'esportazione, una barra con la percentuale o con il numero di elementi elaborati rassicura molto di più. Anche una stima approssimativa, come «circa due minuti», è meglio di niente, purché sia onesta.

Skeleton screen

Invece di una pagina vuota con uno spinner al centro, si mostra la struttura della pagina in grigio chiaro, con i blocchi dove compariranno titoli, immagini e testo. L'utente capisce subito che cosa sta per arrivare, e il passaggio al contenuto reale è meno brusco. Lo skeleton deve corrispondere al layout finale: se il contenuto vero ha una forma diversa, la pagina «salta» quando si carica.

Interfacce ottimistiche

Per azioni che quasi sempre riescono, come mettere un «mi piace» o spuntare un'attività, si può aggiornare subito l'interfaccia come se l'operazione fosse già andata a buon fine, e sincronizzare con il server in background. L'esperienza sembra istantanea.

La condizione è gestire bene il caso di errore: se il server rifiuta l'operazione, l'interfaccia deve tornare allo stato precedente e spiegarlo chiaramente. Non è un approccio adatto ad azioni importanti o irreversibili, come un pagamento: lì l'utente deve sapere con certezza com'è andata.

Conferme e messaggi di stato

Al termine di un'azione serve una conferma proporzionata:

  • per azioni frequenti e di poco conto, un breve messaggio temporaneo, come «Salvato»;
  • per azioni importanti, una pagina o una sezione di conferma con i dettagli, come numero d'ordine e riepilogo;
  • per azioni che si possono annullare, il messaggio può offrire «Annulla» per alcuni secondi.

I messaggi temporanei, a volte chiamati toast, hanno un difetto: spariscono. Se contengono informazioni importanti o un'azione come «Annulla», devono restare abbastanza a lungo, essere raggiungibili con la tastiera e non scomparire mentre l'utente ci sta interagendo.

Accessibilità: anche chi non vede deve saperlo

Uno spinner o un messaggio verde che appare in un angolo sono invisibili per chi usa un lettore di schermo, se non vengono annunciati. Il criterio WCAG 4.1.3 sui messaggi di stato chiede che queste informazioni siano comunicate alle tecnologie assistive senza spostare il focus.

Lo strumento principale è una regione live:

<div role="status" aria-live="polite" id="stato-salvataggio"></div>

Quando uno script inserisce del testo nell'elemento, per esempio «Modifiche salvate», il lettore di schermo lo legge non appena ha finito ciò che stava dicendo. Per gli errori urgenti si può usare role="alert", che interrompe la lettura in corso: va usato con parsimonia. La regione deve essere presente nella pagina prima che il messaggio venga inserito, altrimenti alcuni lettori di schermo non la rilevano.

Anche gli indicatori di caricamento hanno bisogno di un testo: «Caricamento dei risultati in corso» annunciato all'inizio e «20 risultati trovati» alla fine sono molto più utili di un'animazione silenziosa.

Errori frequenti

  • pulsanti che restano attivi durante l'invio, causando ordini doppi;
  • spinner infiniti quando la richiesta è fallita, senza messaggio di errore;
  • messaggi di conferma che spariscono in due secondi;
  • contenuto che si sposta quando si caricano immagini o annunci, facendo perdere il punto di lettura;
  • aggiornamenti di risultati e filtri non annunciati ai lettori di schermo.

In sintesi

  • Ogni azione dell'utente merita un riscontro visibile, proporzionato al tempo di attesa.
  • Gli spinner vanno bene per attese brevi; per quelle lunghe servono avanzamento e stima.
  • Gli skeleton screen e le interfacce ottimistiche rendono l'attesa più fluida, se usati con criterio.
  • I pulsanti devono impedire il doppio invio e i fallimenti devono produrre un messaggio chiaro.
  • Le regioni live con role="status" rendono conferme e stati accessibili ai lettori di schermo.
MM
Marco Marzaduri

Marco Marzaduri si occupa di cybersecurity, informatica forense e sviluppo web. Laureato in informatica e in psicologia, unisce l'analisi tecnica alla comprensione del fattore umano.

Leggi anche