Debito Tecnico

Il Debito Tecnico è una metafora per indicare le eventuali conseguenze derivanti dalla frettolosa definizione di un’architettura software e da un altrettanto frettoloso sviluppo wikipedia

il termine “technical debt” è stato utilizzato per la prima volta da Ward Cunningham, parlando della complessità di far evolvere nel lungo periodo un sistema progettato tenendo conto solo dell’immediato

il debito tecnico può portare a conseguenze costose, fino al fallimento del progetto.

tuttavia, nel contesto di lavoro reale, una carta dose di "debito tecnico" non è eludibile e fa parte del gioco, occorre in ogni caso mantenerlo monitorato e avere un piano per ripagarlo, cioè mantenerlo entro limiti di guardia.

Il DT non è solo legato alla qualità del codice e dei test, ma anche alla gestione del progetto, del team, delle specifiche e delle stime delle tempistiche.

Cunningham idividua gradi di gravità del debito:

Grade one: framework changes and evolution. Oggi, praticamente, nessun software viene scritto da zero, preferendo sempre l’adozione di un framework che fornisce quante più funzionalità possibili. Ma ogni framework evolve (i più utilizzati evolvono anche con estrema rapidità) e per quanto sia garantita una retro-compatibilità, escluse ovviamente le nuove funzionalità, prima o poi arriverà il cosiddetto “breakdown time” in cui non sarà più possibile garantirla. Va da sé che per ovviare a tale problema e sfruttare a pieno le nuove caratteristiche bisogna adattare una corretta strategia di aggiornamento e dedicare tempo e risorse ad essa.

Grade Two: lazy developers. meno tipicamente all’incapacità degli sviluppatori di gestire e far evolvere codice scritto da altri. è dovoto al fatto che modificare codice scritto da altri è più difficile che modificare il proprio codice perché molte informazioni sul motivo delle scelte operate e sul loro contesto non sono trasmesse.

Grade Three: pragmatic law. occorre riconoscere che non c’è mai abbastanza tempo per sviluppare la soluzione perfetta. Bisogna riuscire a gestire correttamente il bilanciamento tra qualità, di quanto sviluppato, e tempo a disposizione, evitando di realizzare qualcosa di inutile che dovrà poi essere re-implementato. Tuttavia, nel caso in cui la stima sia troppo distante dalla realtà e il commitment non è rinegoziabile, si cade quasi sempre nella tentazione di produrre codice di bassa qualità per rispettare i tempi, aumentando esponenzialmente il debito tecnico.

Grade Four: cannot move forward. Arrivati a questo punto, la complessità del sistema realizzato(DT) è, con molta probabilità, affetta da diversi problemi (bug) su cui bisogna intervenire. Gli stakeholder notano ed evidenziano le lacune. Bisogna “pagare il debito accumulato” e fronteggiarne il costo (cost of servici the debt), esattamente come avviene con gli interessi della carta di credito, quando, per esempio, si va in rosso con il conto. paradossalmente, è il grado che si raggiunge più facilmente.

riassumendo: è sempre meglio ridurre il numero di features realizzate, ma gestire il livello di qualità stabilito, piuttosto che realizzare molte più features rinunciando però ad una costruzione solida e ben testata. il conto prima o poi si paga!


Tags:
Development

Blog Disclaimer:

Le opinioni espresse nel mio blog sono solo questo: mie opinioni.

In nessun modo rappresento le opinioni dei miei clienti in questa sede.


Notice: Undefined variable: browserName in /var/www/taziomirandola.it/lib/Visitors.php on line 86

Notice: Undefined variable: browserName in /var/www/taziomirandola.it/lib/Visitors.php on line 96

Deprecated: strripos(): Non-string needles will be interpreted as strings in the future. Use an explicit chr() call to preserve the current behavior in /var/www/taziomirandola.it/lib/Visitors.php on line 96

Notice: Undefined index: HTTP_ACCEPT_LANGUAGE in /var/www/taziomirandola.it/lib/Visitors.php on line 39

Fatal error: Uncaught TypeError: Argument 1 passed to safe_text() must be of the type string, null given, called in /var/www/taziomirandola.it/lib/Visitors.php on line 39 and defined in /var/www/taziomirandola.it/lib/Visitors.php:162 Stack trace: #0 /var/www/taziomirandola.it/lib/Visitors.php(39): safe_text() #1 /var/www/taziomirandola.it/lib/Visitors.php(124): Visitors::getData() #2 [internal function]: Visitors::log() #3 {main} thrown in /var/www/taziomirandola.it/lib/Visitors.php on line 162