Di recente ho iniziato a lavorare su un progetto in cui una vecchia applicazione monolitica viene migrata in un'architettura basata su microservizi.
La base di codice legacy è molto disordinata ("spaghetti code") e spesso una funzione apparentemente semplice (ad esempio denominata "multiplyValueByTen") si rivela successivamente come "migliaia di righe di codice di convalida che coinvolgono 10 tabelle in 3 diversi schemi".
Ora il mio capo mi chiede (giustamente) di stimare quanto tempo ci vorrebbe per scrivere la funzione X nella nuova architettura. Ma ho difficoltà a trovare una stima realistica; spesso sottovaluto enormemente il compito a causa dei motivi che ho indicato sopra e mi imbarazzo perché non riesco a finire in tempo.
La cosa ragionevole potrebbe davvero entrare nel codice, annotare ogni ramo e chiamare ad altre funzioni e quindi stimare il costo del tempo. Ma c'è davvero una minuscola differenza tra documentare il vecchio codice e scrivere effettivamente la nuova versione.
Come dovrei affrontare uno scenario come questo?
Mentre capisco perfettamente come funziona il refactoring del codice legacy, la mia domanda non riguarda "come eseguire refactoring / riscrivere?" ma di dare una risposta realistica a "quanto tempo ci vorrebbe per refactoring / riscrivere la parte X?"