𝗟'𝗲𝘀𝗲𝗺𝗽𝗶𝗼 𝘀𝘃𝗼𝗹𝘁𝗼 𝗰𝗵𝗲 𝗻𝗼𝗻 𝗰𝗼𝗻𝗰𝗼𝗿𝗱𝗮𝘃𝗮 𝗰𝗼𝗺𝗲 𝗰𝗼𝗹 𝗽𝗿𝗼𝗽𝗿𝗶𝗼 𝗰𝗮𝗹𝗰𝗼𝗹𝗮𝘁𝗼𝗿𝗲
Gestisco un sito di calcolatori di costi per la ristrutturazione della casa.
Ogni pagina mostra i costi in quattro punti:
- Un widget interattivo.
- Una tabella di riferimento statica.
- Esempi scritti nel testo.
- Una sezione FAQ.
Ho trovato un bug importante. Un esempio scritto indicava che un progetto costava $62.300. Il widget indicava che lo stesso progetto costava $56.779.
C'era una differenza di $5.500.
I numeri non erano casuali. Derivavano da diverse ipotesi implicite. Il testo scritto presupponeva una nuova unità HVAC. Il widget presupponeva l'uso del sistema esistente. Entrambi erano corretti, ma non comunicavano tra loro.
Questo è un errore comune. Quando memorizzi lo stesso dato in due punti diversi, questi tendono a divergere. Non stai solo duplicando contenuti. Stai duplicando dati.
Ho risolto il problema con una regola che chiamo source-first. Si divide in due parti.
Parte uno: Un costo esiste in un solo punto.
Ho smesso di digitare numeri nei miei testi e nelle mie tabelle. Ora, la funzione di calcolo è l'unica fonte. Le tabelle e gli esempi scritti prelevano i numeri direttamente da quella funzione durante il processo di build. Se la funzione cambia, ogni numero sulla pagina cambia automaticamente. Non può esserci un'incongruenza perché i numeri hanno lo stesso valore.
Parte due: Ogni numero deve mostrare la propria origine.
I dati sui costi non sono fatti permanenti. Scadono. Ho aggiunto un piccolo oggetto dati a ogni calcolo. Mostra:
- Lo scenario utilizzato.
- La fonte dei dati.
- La data di accesso.
- Quando i dati dovrebbero essere revisionati.
Questo mantiene l'integrità dei dati. Se i dati alla fonte sono errati, l'intero sito sarà errato. Ma almeno il sito sarà coerente. Un utente nota immediatamente una contraddizione. E questo distrugge la fiducia.
La lezione è semplice:
- Se due punti in una pagina mostrano lo stesso numero, uno dei due dovrebbe importarlo. Non riscriverlo.
- Usa il tuo processo di build per sincronizzare i dati. Questo trasforma un problema di disciplina in un'impossibilità tecnica.
- Smetti di scrivere a mano numeri che una funzione calcola già.
Ho passato una giornata a cancellare numeri invece di scriverli. Il mio codebase è più piccolo e non mente più ai miei utenti.
Fonte: https://dev.to/mark_b5f4ffdd8e7cd58/the-worked-example-that-disagreed-with-its-own-calculator-4cp9