Te refieres a la deuda técnica .
Todos acumulamos deudas técnicas en los productos que desarrollamos con el tiempo; La refactorización es una de las formas más comunes y efectivas de reducir esta deuda técnica, aunque muchas empresas nunca pagan su deuda técnica. Estas compañías tienden a encontrar su software extremadamente inestable en el futuro, y la deuda técnica se vuelve tan espantosa que no puede pagarla gradualmente, porque tomaría demasiado tiempo pagarla de esa manera.
La deuda técnica tiene el término, porque sigue los mismos comportamientos de la deuda. Obtiene la deuda, y mientras continúe gastando (creando funciones) y sin pagar esa deuda, solo crecerá. Al igual que la deuda, cuando es demasiado grande, llega a puntos en los que puede desear deshacerse por completo con tareas peligrosas como reescrituras completas. También, como la deuda real, ya que se acumula hasta cierto punto, dificulta su capacidad de gastar (crear funciones) por completo.
Solo para incluir otro término en la mezcla, la cohesión se refiere a qué tan bien encaja un sistema, micro al nivel de línea o macro al nivel del sistema. Un sistema altamente cohesivo hará que todas sus piezas encajen muy bien y parezca que un ingeniero lo escribió todo. Su referencia anterior a alguien simplemente pegando su código hasta el final estaría violando la cohesión de ese sistema.
Gestión de la deuda técnica
Hay muchas maneras de administrar la deuda técnica, aunque, como la deuda real, el mejor enfoque es pagarla con frecuencia. Desafortunadamente, como la deuda real, ocasionalmente es una mejor idea acumular más por un período corto, donde, por ejemplo, el tiempo para comercializar una característica puede duplicar o triplicar sus ingresos. La parte difícil es sopesar estas prioridades en competencia, así como identificar cuándo el ROI de las deudas no vale la pena para la función dada frente a cuándo lo es.
Entonces, a veces vale la pena acumular la deuda por un período corto, pero rara vez es así, y como con todas las deudas, cuanto más corto sea el período, mejor. Entonces, eventualmente (preferiblemente rápidamente ) después de acumular deuda técnica, debe pagarla, estos son enfoques comunes:
- Refactorización
- Esto le permite tomar fragmentos de código que solo se dieron cuenta de que estaban fuera de lugar a la mitad o después de que se completó la implementación, y colocarlos en su lugar correcto (o uno más correcto de todos modos).
- Volver a escribir
- Esto es como una bancarrota. Limpia la pizarra, pero comienzas con nada y tienes la oportunidad de cometer los mismos errores, o incluso los más grandes. Enfoque de alto riesgo y alta recompensa para la deuda técnica, pero a veces es su única opción. Aunque rara vez es así, muchos te lo dirán.
- Descripción de la arquitectura
- Este es más un enfoque activo de pago de deuda técnica. Esto se logra al tener a alguien con autoridad sobre los detalles técnicos para detener una implementación, independientemente de los planes y cronogramas del proyecto para garantizar que acumule menos deuda técnica.
- Congelación de código
- Congelar el código de cambios puede permitirle respirar donde su deuda no sube ni baja. Esto le da tiempo para planificar su enfoque para reducir la deuda técnica con la esperanza de tener el ROI más alto en su enfoque.
- Modularización
- Esto es como un enfoque de nivel 2 que solo está disponible cuando emplea ya sea Arquitectura general para tener un sistema modular o Refactorización para avanzar hacia uno. Cuando tiene un sistema modular, puede pagar la deuda en partes enteras del sistema de forma aislada. Esto le permite realizar reescrituras parciales , refactorizaciones parciales , así como minimizar la tasa de deudas técnicas acumuladas porque el aislamiento mantiene la deuda solo en aquellas áreas donde entraron las características, en lugar de extenderse por todo el sistema.
- Pruebas automatizadas
- Las pruebas automatizadas pueden ayudarlo a administrar su deuda técnica, ya que pueden ayudarlo a identificar puntos problemáticos en el sistema, con suerte antes de que la deuda en esas áreas haya crecido mucho, pero incluso después del hecho, aún pueden informar a los ingenieros de esas áreas peligrosas. Puede que no se haya dado cuenta. Además, una vez que tiene pruebas automatizadas, puede refactorizar más libremente las cosas sin preocuparse por romper demasiado. No porque los desarrolladores no rompan las cosas, sino porque descubrirán cuándo lo hacen , confiar en probadores manuales en sistemas altamente endeudados tiende a tener un historial pobre para encontrar problemas.