Ti riferisci al debito tecnico .
Tutti accumuliamo debito tecnico nei prodotti che sviluppiamo nel tempo; il refactoring è uno dei modi più comuni ed efficaci per ridurre questo debito tecnico, sebbene molte aziende non paghino mai il proprio debito tecnico. Queste aziende tendono a trovare il loro software anni estremamente instabili lungo la strada e il debito tecnico diventa così raccapricciante che non è possibile pagarlo in modo incrementale, perché ci vorrebbe troppo tempo per ripagarlo in quel modo.
Il debito tecnico ha il termine, perché segue gli stessi comportamenti del debito. Ottieni il debito, e finché continui a spendere (creando funzionalità) e non pagando quel debito, crescerà solo. Proprio come il debito, quando diventa troppo grande si arriva a punti in cui si potrebbe desiderare di versarlo interamente con compiti pericolosi come riscritture complete. Inoltre, come il debito reale, poiché si accumula fino a un certo punto, ostacola la tua capacità di spendere (creando funzionalità) del tutto.
Solo per aggiungere un altro termine al mix, coesione si riferisce a come un sistema, un micro a livello di linea o una macro a livello di sistema, si uniscono. Un sistema altamente coeso avrà tutti i suoi pezzi perfettamente combinati e sembrerà che un ingegnere abbia scritto tutto. Il tuo riferimento sopra a qualcuno che ha appena incollato il proprio codice alla fine violerebbe la coesione di quel sistema.
Gestione del debito tecnico
Ci sono molti modi per gestire il debito tecnico, anche se come il debito reale l'approccio migliore è quello di ripagarlo frequentemente. Sfortunatamente come il debito reale, a volte è meglio accumulare di più per un breve periodo, dove ad esempio il time to market per una funzione può raddoppiare o triplicare le entrate. La parte difficile è soppesare queste priorità concorrenti e identificare quando il ROI dei debiti non vale la pena per la caratteristica data rispetto a quando lo è.
Quindi a volte vale la pena accumulare il debito per un breve periodo, ma raramente è così, e come per tutti i debiti, più breve è il periodo, meglio è. Quindi alla fine (preferibilmente rapidamente ) dopo aver accumulato debito tecnico, devi pagarlo, questi sono approcci comuni:
- refactoring
- Ciò consente di prendere frammenti di codice che sono stati realizzati solo per essere collocati in modo errato a metà o dopo il completamento dell'implementazione e di metterli nel loro posto corretto (o comunque uno più corretto).
- Riscrivere
- Questo è come un fallimento. Pulisce l'ardesia, ma inizi con niente e hai tutte le possibilità di fare gli stessi errori, o anche quelli più grandi. Approccio ad alto rischio e alto rendimento al debito tecnico, ma a volte è la tua unica opzione. Anche se questo è più raramente il caso di quello che molti ti diranno.
- Panoramica sull'architettura
- Questo è più di un approccio attivo di pagamento del debito tecnico. Questo viene fatto avendo qualcuno con autorità sui dettagli tecnici per fermare un'implementazione indipendentemente dai piani di progetto e dai programmi per garantire che accumuli meno debito tecnico.
- Blocco del codice
- Il congelamento del codice delle modifiche può consentire di respirare dove il debito non aumenta o diminuisce. Ciò ti dà il tempo di pianificare il tuo approccio alla riduzione del debito tecnico nella speranza di avere il ROI più elevato sul tuo approccio.
- La modularizzazione
- Questo è come un approccio di livello 2 disponibile solo quando si utilizza Panoramica dell'architettura per avere già un sistema modulare o Refactoring per spostarsi verso uno. Quando si dispone di un sistema modulare, è quindi possibile ripagare il debito in parti intere del sistema in modo isolato. Ciò consente di effettuare riscritture parziali , refactoring parziale , nonché di ridurre al minimo il tasso di indebitamento tecnico dovuto al fatto che l'isolamento mantiene il debito solo nelle aree in cui sono state introdotte le funzionalità, anziché diffondersi nel sistema.
- Test automatizzati
- I test automatizzati possono aiutarti a gestire il tuo debito tecnico, perché possono aiutarti a identificare i punti problematici nel sistema, si spera prima che il debito in quelle aree sia cresciuto molto, ma anche dopo il fatto possono ancora rendere gli ingegneri consapevoli di quelle aree pericolose che potrebbe non essersi già reso conto. Inoltre, una volta che hai i test automatizzati, puoi più liberamente riformattare le cose senza preoccuparti di rompere troppo. Non perché gli sviluppatori non rompano le cose, ma perché lo scopriranno quando si rompono le cose , fare affidamento su tester manuali in sistemi altamente indebitati tende ad avere scarsi risultati per trovare problemi.