Digamos que usted es un mecánico especializado en la personalización de automóviles, incluso construyéndolos desde cero si el cliente lo requiere. Hay un cliente que vuelve a su tienda de vez en cuando para poner siempre algo nuevo y brillante en su limusina de gran tamaño.
Una vez que entra para tener un buen sistema de sonido instalado. Realiza diligentemente la tarea pasando cables y conectándolo todo correctamente. Sale un día después, está contento y paga generosamente, como siempre.
Al mes siguiente regresa, pero esta vez quiere instalar un cine en casa completo. Una vez más, tomas la limusina. Como profesional, vuelves a visitar el sistema de sonido y facilitas el mantenimiento instalando un sistema de tubos para pasar los cables alrededor del automóvil. De esta forma, los cables están protegidos y son más fáciles de extraer, y si necesita agregar más, también será fácil de hacer. Así que arrancas los cables viejos, instalas el tubo y pasas el sistema de sonido y los cables adicionales para el cine, lo cierras todo y listo.
Al darse cuenta de que el cliente no le pidió que reemplazara el viejo sistema de sonido, se quita parte del costo de los reemplazos y de los tubos. Sin embargo, todavía ganas dinero con el trato, pero no tanto como lo hubieras hecho si hubieras unido el sistema como lo hiciste la primera vez.
Un mes más tarde regresa, esta vez quiere un sistema de iluminación y quiere nuevos altavoces que hayan dañado los antiguos a principios de semana.
Debido a que mantuvo todo bien y ordenado, puede pasar rápidamente los nuevos cables de iluminación a través de su tubo, instalar el sistema y reemplazar el altavoz. Esta vez, sin embargo, ha terminado mucho más rápido, la refactorización valió la pena al mantenerlo en la cima de su juego.
Su competidor que se estaba riendo de usted por arrancar cables perfectamente buenos e instalar todos estos tubos adicionales todavía está luchando para que su cliente esté satisfecho. Claro que lo hizo más rápido que usted la mayoría de las veces, pero a medida que pasa el tiempo, sus clientes se quejan de que cada vez hay más demoras y que la calidad general del trabajo es degradante.
Al observar esto, se da cuenta de que su objetivo no solo es permanecer en el negocio, sino ser el arma principal, es equilibrar lo que hace para satisfacer las demandas del cliente y lo que hace para facilitar su vida en el futuro. Muy rara vez un cliente pagará por ambos, por lo que debe administrar de cerca. Usted apuesta que haciendo las cosas de manera proactiva, incluso a costa de hacer las cosas dos veces, mantendrá los costos de mantenimiento en un porcentaje estable y controlado de su productividad.
El software es el mismo, excepto que los programadores pueden jugar con cinta adhesiva digital durante MUCHO tiempo antes de que los clientes y gerentes sientan realmente los efectos. Desafortunadamente para ese momento, el costo de volver a hacer las cosas bien crece exponencialmente con respecto a la cantidad de cinta adhesiva presente y la edad promedio de dicha cinta adhesiva.
Por eso es importante que sigamos refactorizando el sistema. Muy a menudo la experiencia nos mostrará una nueva forma más eficiente de hacer lo mismo o podemos combinar una funcionalidad similar y explotar redundancias en lugar de simplemente copiarlas. Así es como mantenemos el sistema delgado y malo. El tiempo mostrará que re-factorizar constantemente el sistema para satisfacer las demandas mantendrá la productividad constante al controlar la cantidad colocada en mantenimiento.
Colocar cinta adhesiva aumentará momentáneamente la productividad a costa de llevar un sistema subóptimo. La deuda técnica se incurre cuando se favorece la productividad inmediata en detrimento de los otros aspectos de un sistema. La analogía de la deuda es buena porque al igual que los intereses sobre el capital prestado consumen las ganancias, el tiempo prestado para hacer las cosas rápidamente conlleva un mayor mantenimiento y aumenta la fragilidad del sistema, lo que obliga a un equipo a gastar recursos adicionales en mantenimiento en lugar de crear. Al igual que su pariente financiero, si los préstamos continúan sin disminuir, la mayoría de los recursos se gastan en el pago de intereses, dejando muy poco para mejoras. La deuda técnica va a consumir los recursos técnicos hasta el punto en que la mayoría de los recursos se gasten simplemente manteniendo el sistema funcionando para detener todas las otras mejoras posibles.
Entonces, en última instancia, las preguntas no son si deberíamos hacerlo o no, sino que es ético dejar que los gerentes y los clientes crean que pueden confiar en cifras de productividad artificialmente infladas con el uso de cinta adhesiva digital. Algunos pensarían que es una decisión comercial, pero, francamente, esto es así solo porque los gerentes no lo entienden. Al final, alguien tendrá que pagar la deuda ya sea mediante una refactorización pesada o migrando a un nuevo sistema. En última instancia, para nosotros, los programadores, mantener los sistemas mantenibles, no debería tener que pedir volver a factorizar, ya que es una parte inherente del trabajo, no comprender esto es no comprender de qué se trata la ingeniería de software. Dicho esto, me doy cuenta de que existen sistemas que ya han incurrido en una deuda importante y el pago de esta deuda requerirá decisiones de los pagadores. Su trabajo es tal situación es al menos hacer su parte para dejar de pedir prestado. Esta deuda fue incurridaPOR NOSOTROS tal vez porque no lo sabíamos mejor, porque estábamos presionados para hacerlo, aún así, asumimos esta deuda y, muy a menudo, las personas a quienes les entregamos la deuda no la entienden, por lo tanto, no pueden manejarla adecuadamente.
Aquí está su software, todo listo, espero que les guste ... Pero por cierto, maximicé su tarjeta de crédito haciéndolo, espero que no les importe ... cya