21 aprile 2026
Non è over‑engineering: è solo codice che non conosci ancora
Quando la “leggibilità” diventa resistenza al cambiamento, la soluzione non è tornare indietro ma normalizzare i pattern moderni (con criterio).
Spesso etichettiamo come over‑engineered ciò che è semplicemente nuovo ai nostri occhi: funzioni CSS usate in modo inusuale, logical properties, pattern moderni che risolvono problemi reali (come overflow e layout fragili). Il punto non è evitare le novità, ma ridurre l’attrito: educazione, convenzioni condivise e adozione progressiva. Così ciò che oggi sembra “difficile da leggere” domani diventa standard di team.
Capita spesso: apri una PR, vedi una riga di CSS “strana”, e la reazione istintiva è «è difficile da leggere». In molti casi però non stiamo guardando del codice inutilmente complicato. Stiamo guardando qualcosa di semplicemente non familiare.
Questa distinzione è importante perché influenza direttamente come evolvono i nostri progetti e, soprattutto, come funziona la collaborazione: se tutto ciò che non riconosciamo al primo sguardo viene respinto, il team resta bloccato su un set di soluzioni “comode” ma non necessariamente migliori.
Over‑engineering vs unfamiliar: come riconoscerli
Quando è davvero over‑engineering
Parliamo di over‑engineering quando:
- la soluzione introduce complessità senza un problema reale da risolvere;
- aggiunge concetti o astrazioni che il progetto non userà (o userà una volta sola);
- rende difficile la manutenzione perché richiede troppe regole implicite.
In sintesi: più costo che beneficio.
Quando è solo unfamiliar
È “unfamiliar” quando:
- la soluzione risolve un problema concreto (robustezza del layout, accessibilità, internazionalizzazione…);
- usa strumenti moderni che non fanno parte del “vocabolario” quotidiano del team;
- sembra criptica perché non abbiamo ancora creato un’abitudine visiva e mentale attorno a quel pattern.
Qui la complessità non è gratuita: è spesso spostata (da runtime a compile-time, da bug a prevenzione, da workaround a funzionalità nativa).
Il punto dolente: la frizione in team e in code review
Il vero problema non è che esistano pattern moderni. È la frizione che nasce quando:
- qualcuno li introduce;
- qualcun altro li vede per la prima volta;
- la review diventa «cambialo perché non so cos’è».
Questo è tossico per l’evoluzione tecnica: una code review dovrebbe valutare correttezza, coerenza e valore, non la sola familiarità.
Un esempio tipico: l’uso delle logical properties (margin-inline, padding-block, ecc.). Funzionano, sono standard, aiutano con layout più “internazionalizzabili” e coerenti con la direzione di scrittura. Eppure vengono spesso respinte solo perché “non si usano qui”.
Normalizzare i pattern moderni: come ridurre l’attrito
La chiave è far sì che certe soluzioni diventino attese, non “sorprese”. Alcune leve pratiche:
1) Educazione mirata (non teoria infinita)
Meglio 10 minuti su un pattern utile che ore di panoramica. Scegliete ciò che vi serve davvero:
- logical properties quando il design lo giustifica;
- funzioni CSS (
min(),max(),clamp()) per gestire dimensioni fluide; - nuove unità o strategie layout quando risolvono bug ricorrenti.
2) Convenzioni scritte
Basta poco: una pagina di “CSS conventions” nel repo.
- Quando usare le logical properties.
- Perché preferire
min()/max()/clamp()in certi casi. - Esempi brevi, copiabili.
Così la review non diventa un dibattito ogni volta.
3) Adozione progressiva e coerente
Se un pattern è buono, usatelo in più punti coerenti, non in un solo file “esotico”. La ripetizione lo rende familiare.
Un esempio pratico: usare min() (o clamp()) per prevenire overflow e gestire dimensioni responsivi può evitare una classe intera di bug. Se diventa una scelta ricorrente, dopo poche settimane nessuno lo percepisce più come “difficile”.
4) Code review: cambiare la domanda
Sostituite:
- “Non lo capisco, quindi no”
con:
- “Quale problema risolve?”
- “È coerente con le convenzioni?”
- “Possiamo aggiungere un commento o una nota in docs se serve?”
La familiarità si costruisce, non si pretende.
Una regola semplice: se funziona e riduce bug, vale la pena conoscerlo
Molte funzionalità moderne del CSS non sono “gimmick”: sono strumenti che ci permettono di scrivere layout più solidi e meno fragili, riducendo workaround e comportamenti imprevedibili.
Se un costrutto è nuovo e ti sembra illeggibile, non è automaticamente over‑engineering. Potrebbe essere solo il segnale che il team ha bisogno di normalizzare quel pattern: un po’ di contesto, una convenzione, qualche esempio riutilizzabile.
Alla fine, la leggibilità non è una proprietà assoluta del codice. È un accordo condiviso tra le persone che lo mantengono.