Adsence

miércoles, 9 de enero de 2019

Qué es la deuda técnica y cómo calcularla





La deuda técnica tiene que suceder, pero entender de dónde proviene es la clave para deshacerse de ella antes de que crezca.
En un mundo ideal, cada proyecto se termina a tiempo, y dentro del  presupuesto estimado. Aún mejor, el presupuesto ha permitido a los equipos desarrollar funciones adicionales y probar todo una vez más antes del lanzamiento. En el mundo real, el proceso de desarrollo puede encontrar varias dificultades, y la deuda técnica es uno de los problemas más comunes que puede enfrentar el proyecto. Es esencial comprender qué es la deuda técnica, cómo evaluarla y, especialmente, cómo enfrentarla.

¿Qué es la deuda técnica?


 

La deuda técnica es el trabajo adicional necesario para completar el desarrollo del software. Pero esta noción no se refiere únicamente a los proyectos que están en desarrollo. Este problema a menudo sigue los proyectos que han salido a producción durante algún tiempo. Esto puede ser cualquier cosa, como un módulo escrito en tecnología heredada, que impide que el proyecto incluya una nueva funcionalidad o influya en la estabilidad general del software. En este caso particular, la deuda técnica se puede calcular como el tiempo o el dinero necesario para la refactorización del código de este módulo o para transferirlo a la nueva tecnología. Pero, por lo general, nunca es tan simple y el software incluye una serie de inconvenientes que pueden incluirse en la deuda técnica del proyecto.
No hacer frente a estas deudas lo antes posible puede llevar a más deudas en el futuro, lo que dará como resultado un rendimiento deficiente del software, una dificultad o incluso la imposibilidad de introducir cambios en el software, un mayor riesgo de romper el software después de cada actualización. La gestión de la deuda técnica en una etapa temprana del proceso de desarrollo es crucial.
El uso del término deuda es una referencia prestada del mundo financiero, y al igual que las deudas financieras, las deudas técnicas, si no se resuelven muy rápidamente, pueden generar interés. En otras palabras, la deuda técnica puede generar nuevas deudas técnicas y puede costar mucho al propietario del software y al equipo de desarrollo.
Ahora que sabemos qué es la deuda técnica, ¿cómo la obtenemos?

¿Qué causa la deuda técnica?

 

Para abordar mejor la deuda técnica, es esencial comprender qué los causó en primer lugar. Cuatro mayor razones conducen a técnicas deuda :
·    Concepción pobre:   Al desarrollar una aplicación, la velocidad a la que el equipo o la compañía entrega el producto puede marcar una diferencia real; después de todo, una aplicación o software se desarrolla para responder a un problema en particular o para enfrentar un desafío específico de manera oportuna. Es importante utilizar el producto cuando la necesidad todavía está allí. La prisa en entregar más rápido a menudo resulta en un software mal diseñado. El producto de software no está bien pensado y el desarrollo se centra principalmente en desarrollar las funcionalidades. Puede haber un acuerdo previo al inicio del proyecto entre los propietarios del producto y el equipo de desarrollo para lanzar las primeras funciones más rápidamente y asignar tiempo para corregirlas más tarde y así reducir el tiempo de comercialización. Esta concepción puede ser a nivel tecnológico o nivel de negocio, pues si bien las necesidades son cambiantes deberian tener al menos similitudes entre el planteamiento inicial y su resultado final (de ahi la importancia del analista de negocio y conceptos de arquitectura empresarial).
·    Programación deficiente:   Subestimando el   proceso de estimación de desarrollo de software. A menudo causa deuda técnica. El enfoque de un equipo de desarrollo está en el respeto de las estimaciones de tiempo y se acumulan una gran cantidad de malas prácticas que en última instancia se tendrá que pagar. Esta es una de la principales causas, cuando las necesidades comerciales se contraponen con las necesidades del proyecto y se trata de cumplir las espectativas comerciales por sobre las espectativas tecnologicas.
·    Malas prácticas de desarrollo:   Es crucial que el equipo de desarrollo tenga un conjunto de prácticas y convenciones para que no exista una diferencia significativa en el diseño y la implementación de una característica a otra. La falta de buenas prácticas y convenciones de desarrollo llevará a los desarrolladores a implementar su diseño, a reconstruir la misma lógica una y otra vez, y a formatear su código de la forma que deseen, en lugar de la forma en que comúnmente se acepta en el proyecto de software en particular.
·    Tecnología obsoleta:   A medida que la tecnología evoluciona, los estándares de software se vuelven más altos cada día. Con cada mejora , nuevas técnicas. La deuda puede surgir .
Ahora que entendemos qué es la deuda técnica y cómo obtenemos deuda técnica en nuestros proyectos, veamos formas de medir la deuda técnica.
Tipos de deuda técnica
Hemos explorado qué es la deuda técnica. Esto es importante para medir la deuda técnica con precisión, ya que la estimación de la deuda técnica depende de su naturaleza. los más común tipos de técnica las deudas son:
·    Formato de código fuente:   Esto es muy común, pero afortunadamente, es el más fácil de solucionar. El uso de la herramienta y la plantilla adecuadas durante e incluso mejor antes de comenzar el proceso de desarrollo puede reducir drásticamente este tipo de deuda técnica.
·    Cobertura de prueba baja:   La cobertura de prueba es una medida esencial de la calidad del código, especialmente cuando usamos la metodología Agile para respaldar el proceso de desarrollo. Las pruebas aseguran que cada parte del código se comporte de la manera deseada. Un nivel muy bajo de la cobertura de la prueba reduce la certeza de la precisión del comportamiento del software y dificulta la resolución de problemas cuando ocurren.
·    Falta de modularidad:   Esto generalmente resulta de un diseño de código pobre. Algún código a veces sirve diferente lógica de negocios. Cuantos más códigos escriban los desarrolladores, más falta de modularidad puede causar el cuello de botella. Es más difícil administrar software que tiene lógicas en todos los códigos y partes de códigos que manejan varias lógicas.
·    Complejidad de código:   La complejidad se puede medir de varias maneras diferentes, pero mide la dependencia y la longitud de la ruta para realizar una operación. Un largo el camino conduce al complejo código.
·    Ausencia de la documentación:   La documentación es parte de las mejores prácticas de desarrollo de software. El software es a menudo impulsado a evolucionar. Es importante que el código escrito siempre sea comprendido en todo momento por todas las personas que puedan estar involucradas en el proceso de desarrollo.
Ahora que hemos identificado los tipos de deudas técnicas, veamos cómo estimarlas.
Estimación de la deuda técnica
Ahora que hemos visto qué es la deuda técnica y hemos revisado los tipos de deudas técnicas, es crucial encontrar el enfoque correcto para medir la deuda técnica. De ninguna manera debe calcularse manualmente, ya que hacerlo requerirá ingresar al código y detectar todos los problemas internos y luego estimar cada posible problema uno por uno. No solo lleva mucho tiempo proceder de esa manera, sino que es casi imposible estimar los códigos en evolución. En el momento en que se realiza la medición de la deuda técnica, los códigos ya tienen un estado diferente.
Un enfoque es realizar un análisis estático de código usando herramientas que apoyan el análisis. La siguiente es una lista de las herramientas más populares utilizadas:
·    Coverity
·    SonarQube
·    Checktyle

Hay dos formas de medir la deuda técnica. El primero es obtener una relación de deuda técnica según el volumen del código, y el segundo es utilizar directamente las estimaciones proporcionadas por las herramientas (como SonarQube), junto con la lista de deudas técnicas y sus referencias al código, SonarQube da una estimación en días u horas necesarios para arreglar esta deuda. Para el enfoque de ratio, podemos utilizar las estimaciones iniciales o, mejor aún, el tiempo total necesario para desarrollar el software hasta ahora y extrapolar el valor de acuerdo con el ratio de deuda técnica. El tiempo necesario para el desarrollo es muy preciso, por lo que medir la deuda técnica en función de la relación puede proporcionar una estimación precisa del trabajo necesario para solucionar los problemas.
La medición de la deuda técnica nos da una aproximación del tiempo necesario para solucionar la deuda técnica. Arreglar las deudas técnicas cuesta dinero, y el equipo de desarrollo necesitaría días hábiles adicionales para solucionarlos. Cuantas más deudas técnicas deban arreglarse, más tiempo necesitará el equipo de desarrollo para solucionarlas. Dejar las deudas técnicas dentro del código no es una opción, ya que las deudas técnicas, si no se corrigen, conducirán a más deudas técnicas que harían que los cambios futuros sean cada vez más difíciles. Aunque el intento de reducir las deudas técnicas puede ser costoso, no abordarlas en una etapa más temprana costará más dinero en el futuro.
Cómo reducir o eliminar la deuda técnica
Ser ágil es la mejor manera de administrar la deuda técnica y reducirla cuando aparece. Cuanto antes abordemos el problema, menos intereses tendremos que pagar con el tiempo. Para abordar la deuda técnica, los equipos de desarrollo de software pueden utilizar el siguiente enfoque.
·    El más rápido de resolver:   Reparar deudas que requieren poco tiempo para arreglarlas es una excelente manera de eliminar gradualmente las deudas técnicas. Las deudas como el formato de código se pueden resolver en poco tiempo, formando una plantilla y aplicando estas plantillas a todos los códigos que se han desarrollado hasta ahora, luego integre estas plantillas en las herramientas utilizadas por los desarrolladores.
·    Prioridad:   También es importante abordar los problemas por prioridad. Todos los problemas que pueden conducir a problemas más importantes deben abordarse rápidamente y deben priorizarse para evitar la acumulación.
·    Actualización de tecnología:   Cuando la tecnología obsoleta conlleva una deuda técnica, es importante actualizar el software a las versiones más recientes de los frameworks, servidores de aplicaciones, bases de datos, etc. Incluso es importante incluir cada evolución estable de un framework utilizado, por ejemplo, para tener siempre la última actualización. Y para traer pequeños cambios sin romper el software.
·    Refactorización:   Revisar la arquitectura del software y los códigos de refactorización a menudo puede ser útil cuando no queremos terminar con códigos duplicados o que carezcan de modularidad.
Estos son enfoques útiles para reducir o eliminar la deuda, pero ¿cómo manejar la deuda técnica en procesos ágiles? Como el equipo de desarrollo debe aspirar a resolver la deuda técnica, la deuda técnica debe ingresarse en la cartera de productos como una historia de usuario y debe priorizarse como cualquier otra historia de usuario. La priorización debe tener en cuenta el impacto de no gestionar la deuda técnica identificada al comienzo de una nueva iteración. Al decidir qué historias incluir en la próxima iteración de desarrollo, debemos analizar si posponer la corrección técnica de la deuda para la próxima iteración es más o menos ventajoso a largo plazo. Como regla general, deberíamos abordar todos los problemas críticos tan pronto como se identifique.
Pensamientos finales
Tener una deuda técnica en algún momento del proceso de desarrollo del software es bastante habitual. Sin embargo, la gestión de la deuda técnica es importante para evitar su acumulación en el tiempo. A veces, se puede requerir que acepte una cierta cantidad de deuda técnica, pero en última instancia, debe mantenerse a un nivel aceptable en el que no perjudiquen el rendimiento ni la experiencia general de los usuarios de productos de software.
Contrariamente a la estimación del tiempo de desarrollo, la estimación de la deuda técnica se basa en el código existente que a menudo evoluciona. Entonces es necesario tener un buen enfoque para estimar la deuda técnica incluida en el software desarrollado. Debido a la naturaleza siempre cambiante del código y al volumen de códigos que se evaluarán, no es posible realizar una estimación manual. Entonces es necesario trabajar con las herramientas adecuadas que permitan un cálculo automático de las estimaciones técnicas de la deuda.
Aunque hacer frente a la deuda técnica puede costar dinero, dejar las deudas técnicas en el software costará más dinero en el futuro.
Tener una relacion fuerte entre la parte comercial y la operativa es crucial pues es una de las situaciones mas complejas, por un lado puedes obtener el "tiempo necesario" para el proceso de desarrollo y por otro te puedes quedar fuera de mercado, por ello como parte del proceso de administracion de proyectos es realmente importante contar con el equipo adecuado para poder minimizar la incertidumbre y que éste equipo pueda re aprender y evolucionar con el tiempo.