Domanda

Al momento sto lavorando con un prodotto piuttosto vecchio che è stato gravato da un sacco di debiti tecnico di programmatori poveri e le pratiche di sviluppo poveri in passato. Stiamo iniziando a ottenere una migliore e la creazione di debito tecnico ha rallentato notevolmente.

ho identificato le aree dell'applicazione che sono in cattive condizioni e posso stimare il costo di fissare quelle zone, ma sto avendo un momento difficile stimare il ritorno sugli investimenti (ROI).

Il codice sarà più facile da mantenere e sarà più facile per estendere in futuro, ma come posso fare per mettere una figura di dollaro su questi?

Un buon punto di partenza sembra come tornare indietro nel nostro sistema di bug tracking e stima dei costi sulla base di insetti e le caratteristiche relative a tali settori "cattivi". Ma che sembra in termini di tempo e non può essere il miglior predittore di valore.

Qualcuno ha effettuato un'analisi di questo tipo in passato, e hanno qualche consiglio da darmi?

È stato utile?

Soluzione

I gestori si preoccupano di fare $ attraverso la crescita (in primis per esempio le nuove caratteristiche che attirano nuovi clienti) e (secondo) attraverso l'ottimizzazione del ciclo di vita del processo.

Guardando il tuo problema, la vostra proposta rientra nella seconda categoria: Questo sarà senza dubbio restare indietro obiettivo # 1 (e quindi ottenere la priorità verso il basso anche se questo potrebbe risparmiare soldi ... perché il risparmio di denaro < strong> implica di spendere soldi (la maggior parte del tempo, almeno; -)).

Ora , mettendo un $ figura sulla "debito tecnica cattivo" potrebbe essere girato in testacoda più positivo (assumendo che la segue si applica nel tuo caso): "se investiamo nella rielaborazione dei componenti X, potremmo introdurre funzionalità di Y più veloce e quindi ottenere più clienti Z".

In altre parole, valutare il costo del debito tecnica contro costo della perdita di opportunità commerciali .

Altri suggerimenti

Sonar ha un ottimo plugin ( debito tecnico plug ) per analizzare il codice sorgente di cercare solo come una metrica. Mentre non si può specificamente essere in grado di usarlo per il tuo compilazione, in quanto è uno strumento di Maven, dovrebbe fornire alcune buone metriche.

Ecco un frammento del loro algoritmo:

Debt(in man days) =
    cost_to_fix_duplications +
    cost_to_fix_violations + 
    cost_to_comment_public_API +
    cost_to_fix_uncovered_complexity + 
    cost_to_bring_complexity_below_threshold


 Where :

 Duplications = cost_to_fix_one_block * duplicated_blocks

 Violations   = cost_to fix_one_violation * mandatory_violations

 Comments     = cost_to_comment_one_API * public_undocumented_api

 Coverage     = cost_to_cover_one_of_complexity * 
                         uncovered_complexity_by_tests (80% of
                         coverage is the objective)

 Complexity   = cost_to_split_a_method *
                         (function_complexity_distribution >=
                          8) + cost_to_split_a_class *
                         (class_complexity_distribution >= 60)

Credo che tu sia sulla strada giusta.

Non ho dovuto calcolare questo, ma ho avuto qualche discussione con un amico che gestisce una grande organizzazione di sviluppo software con un sacco di codice legacy.

Una delle cose che abbiamo discusso sta generando alcune metriche sforzo grezzi dalla analisi VCS impegna e li utilizzano per suddividere una stima approssimativa di ore programmatore. Questo è stato ispirato da Evidence-based Scheduling .

In questo mining tali dati avrebbe permesso di identificare anche il clustering di quando viene mantenuto il codice e si confronti con il completamento bug nel sistema di tracciamento (se non si è già benedetto con una stretta integrazione tra i due e registrazioni accurate).

Una corretta ROI deve calcolare il pieno ritorno, per cui alcune cose da considerare sono: - la riduzione dei costi di manutenzione (ovviamente) - costo opportunità per l'attività di inattività o mancate nuove caratteristiche che non potevano essere aggiunto in tempo per un rilascio - capacità di generare nuove linee di prodotto a causa di refactoring

Ricordate, una volta che si dispone di una regola per derivare i dati, si può avere argomenti su esattamente come per calcolare le cose, ma almeno hai alcuni figure alle sementi discussione!

+1 per l'attenzione di jldupont sulla perdita di opportunità commerciali.

Vi suggerisco di pensare a quelle opportunità come percepito dal management. Che cosa pensano colpisce la crescita dei ricavi - nuove funzionalità, time to market, la qualità del prodotto? Relative paydown debito per quei piloti aiuterà gestione comprendere i guadagni.

Concentrandosi sulle percezioni di gestione vi aiuterà a evitare falsi numerazione. ROI è una stima, e non è migliore rispetto alle ipotesi formulate nella sua stima. Gestione sospetterà argomenti esclusivamente quantitativi perché sanno c'è qualche qualitativo lì da qualche parte. Ad esempio, nel breve periodo il costo reale del vostro paydown debito è l'altro il lavoro dei programmatori non stanno facendo, piuttosto che il costo in denaro di quei programmatori, perché dubito che stai per assumere e formare nuovo personale solo per questo . Sono i miglioramenti in tempi di sviluppo futuro o la qualità più importante che caratterizza questi programmatori sarebbero altrimenti essere aggiunta?

Inoltre, assicurarsi di aver compreso l'orizzonte per il quale il prodotto viene gestito. Se la gestione non sta pensando a due anni da oggi, non si cura di benefici che non appariranno per 18 mesi.

Infine, riflettere sul fatto che le percezioni di gestione hanno permesso questo prodotto per arrivare a questo stato, in primo luogo. Che cosa è cambiato che renderebbe la società più attenta al debito tecnico? Se la differenza è si - sei un manager migliore rispetto i suoi predecessori - tenere a mente che il vostro team di gestione non è abituato a pensare a queste cose. Devi trovare il loro appetito per esso, e concentrarsi su quegli elementi in grado di distribuire i risultati che si preoccupano. Se lo fai, è possibile ottenere la credibilità, che è possibile utilizzare per farli pensare a ulteriori modifiche. Ma l'apprezzamento dei guadagni potrebbe essere un po 'in crescita.

Posso solo parlare di come fare questo empiricamente in un processo iterativo e incrementale.

È necessario raccogliere metriche per valutare il vostro migliore / storia-point costo dimostrato. Presumibilmente, questo rappresenta il sistema subito dopo la zangola architettonica iniziale, quando la maggior parte del disegno di prova ed errore è stato fatto, ma l'entropia ha avuto meno tempo per causare la carie. Trovare il punto della storia del progetto quando la velocità / squadra-size è la più alta. Utilizzare questo come il costo / punto di riferimento (zero-debito).

Nel corso del tempo, come si accumula debito tecnico, la velocità / squadra-size inizia a diminuire. La diminuzione percentuale di questo numero rispetto alla vostra linea di base può essere tradotto in "interesse" viene pagato su ogni nuovo punto storia. (Questo è veramente interessi pagati sul tecnico e debito conoscenza)

refactoing disciplinato e ricottura provoca il l'interesse sul debito tecnica per stablize ad un certo valore superiore a vostra linea di base. Pensate a questo come l'interesse dello stato stazionario il proprietario del prodotto paga sul debito tecnico nel sistema. (Lo stesso concetto vale per il debito della conoscenza).

Alcuni sistemi raggiungono il punto in cui il costo + interessi su ogni nuovo punto storia supera il valore del punto di funzione in fase di sviluppo. Questo è quando il sistema è in bancarotta, ed è il momento di riscrivere il sistema da zero.

Credo che sia possibile utilizzare l'analisi di regressione per prendere in giro il debito e la conoscenza del debito a parte tecnica (ma non l'ho provato). Ad esempio, se si assume che il debito tecnica è strettamente correlata con alcune metriche del codice, per esempio la duplicazione del codice, si potrebbe determinare il grado l'interesse pagato è in aumento a causa del debito tecnica contro il debito della conoscenza.

Essendo uno sviluppatore per lo più solitario o in piccoli team di questo è fuori del mio campo, ma per me una grande soluzione per scoprire dove si spreca il tempo è cronometraggio molto, molto dettagliato, per esempio con un pratico strumento task-bar come < a href = "http://www.allnetic.com/" rel = "nofollow noreferrer"> questa che può anche filtrare quando si va al bagno, e possibile esportare tutto per XML.

Può essere scomodo in un primo momento, e una sfida per introdurre ad una squadra, ma se la tua squadra può accedere ogni quindici minuti che spendono a causa di un bug, errore o equivoco nel software, si accumulano una base di impressionante, vero e proprio dati -life su ciò che il debito tecnica è in realtà costando dei salari ogni mese.

Lo strumento ho collegato è il mio preferito perché è semplice morto (non ha nemmeno bisogno di una base di dati) e fornisce l'accesso ad ogni progetto / oggetto attraverso l'icona barra delle applicazioni. inserendo anche le ultime informazioni sul lavoro svolto può essere fatto lì, e cronometraggio è letteralmente attivato in secondi. (Io non sono affiliato con il fornitore.)

Potrebbe essere più facile da stimare la quantità che è costata in passato . Una volta fatto questo, si dovrebbe essere in grado di venire con una stima per il futuro con gamme e di logica anche i vostri capi in grado di capire.

Detto questo, non ho molta esperienza con questo genere di cose, semplicemente perché non ho mai visto ancora un direttore disposto ad andare così lontano nel fissare Codice. E 'sempre stato qualcosa che abbiamo appena sistemare quando dobbiamo modificare il codice cattivo, quindi refactoring è effettivamente un costo nascosto su tutte le modifiche e correzioni di bug.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top