¿Cómo calcular el ROI de un framework de desarrollo? Resumen La construcción o incorporación de un framework de desarrollo de aplicaciones a nuestros proyectos requiere realizar una inversión en esfuerzo y recursos, tanto para su desarrollo o adquisición, como para su incorporación al proceso. Lo primero que debemos preguntarnos, como en cualquier otra situación donde se requiere realizar una inversión, es cuál es el retorno de la inversión (ROI) que vamos a obtener. Si bien, al menos intuitivamente, se advierte que la utilización de un framework debería redundar en una mayor productividad y calidad en el desarrollo, es necesario analizar en forma precisa el ROI de un framework en nuestros proyectos para tomar una decisión informada. Como cada proyecto es único e irrepetible, no sirve tener un valor que se pretenda aplicar a todos los proyectos, precisamos contar con algún método para estimar cuál es el ROI de un framework de desarrollo para nuestros proyectos concretos. En este artículo analizaremos primero un enfoque teórico para entender el ROI potencial de un framework de desarrollo en un proyecto, para luego describir otro enfoque más práctico y contrastable con datos reales. En ambos casos con resultados donde se observan ahorros potenciales que van desde el 10% al 25% del costo de un proyecto. Finalmente presentaremos los resultados concretos al aplicar el análisis a Baufest Productivity Framework, nuestro framework probado para el desarrollo de aplicaciones .NET de misión crítica. Introducción A diferencia de lo que sería comenzar un desarrollo iniciado de cero, la utilización de un framework de desarrollo nos permite comenzar nuestro proyecto sobre una sólida arquitectura de aplicación definida, implementada y probada. Este hecho impacta a priori sobre tres factores importantes que influyen en el resultado de un proyecto: Resuelve los riesgos tecnológicos y la complejidad de la arquitectura. Disminuye el nivel de conocimiento, experiencia y capacidad requerido para las personas del equipo de proyecto. Reduce el time to market acelerando la salida a producción. ¿Pero cómo impactan exactamente estos factores en los resultados y el costo total de un proyecto de desarrollo? Los costos de un proyecto de desarrollo están dados fundamentalmente por el costo de la “mano de obra” o cantidad de esfuerzo requerido para llevar adelante el proyecto. Si queremos analizar el ROI desde una perspectiva del costo, necesitamos comprender cuál es el impacto que tiene un framework en el esfuerzo total del proyecto. Para esto, debemos analizar cuál es el efecto que tienen los factores afectados por el framework en el resultado del proyecto. Desde una perspectiva del valor generado, el menor tiempo para la salida a producción con una aplicación sólida y de buena calidad, o bien permite llegar al mercado antes para generar nuevos ingresos a la organización, o permite que se ahorre antes reduciendo costos al hacer más eficiente algún proceso operativo. © Copyright 2009 Un enfoque teórico (el ROI potencial) COCOMO II es uno de los proyectos que mejor trabajo hizo en identificar y estudiar estadísticamente los efectos de los distintos factores (cost-drivers) que influyen en el resultado de un proyecto basándose en una completa base de datos de proyectos. Como resultado, COCOMO II plantea un modelo de estimación cuya ecuación de esfuerzo se expresa en función de esos factores: Esfuerzo = A × (Tamaño) FactoresDeEscala ×( ∏ FactorMultiplicador ) i Esfuerzo = Cantidad de esfuerzo en horas hombre o meses hombre Tamaño = Tamaño/Cantidad de funcionalidad del proyecto medido en puntos de función o KSLOCs FactoresDeEscala = Factores del proyecto que influyen exponencialmente en el esfuerzo final FactorMultiplicadori = Factor del proyecto que influye linealmente en el esfuerzo final A = constante de productividad Ecuación 1 - Ecuación de estimación de esfuerzo COCOMO II En este modelo, alguno de los factores identificados tienen un efecto exponencial (factores de escala) y otros un efecto lineal (factores multiplicativos) sobre el esfuerzo final del proyecto. Cada factor de la ecuación se califica según las características del proyecto, en un rango cualitativo que va desde “Muy Bajo”, pasando en el medio por “Nominal”, hasta “Muy Alto” o “Extra Alto”. Cuando una característica del proyecto es la normal o la típica, el factor se califica como “Nominal”. Cuando una característica varía de lo normal, el factor se califica hacia “Bajo” o hacia “Alto” en función de criterios definidos para cada factor. Finalmente, cada calificación se traduce en un valor numérico que representa el impacto cuantitativo en el proyecto y que es el que se utiliza en la ecuación. El modelo define 5 factores de escala y 17 factores multiplicativos. Dentro de este conjunto de factores que identifica COCOMO, podemos encontrar aquellos que están relacionados directamente con los beneficios de la utilización de un framework: Código Nombre Arquitectura y resolución de riesgos Tipo Racional del impacto positivo Factor de Escala Usar un framework incorpora al proyecto una arquitectura madura, ya implementada y probada, eliminando los riesgos. PLEX Experiencia en la plataforma Factor Multiplicador Un framework incorpora en el proyecto el conocimiento con el que fue construido y que trae consigo sobre la plataforma, elevando la experiencia sobre la que nos apoyamos LTEX Experiencia en el lenguaje y las herramientas Factor Multiplicador Un framework incorpora al proyecto el conocimiento con el que fue construido y que trae consigo sobre el lenguaje y las herramientas, elevando la experiencia sobre la que nos apoyamos RESL Caracterización del Factor RESL – Rating del nivel de resolución de riesgos de arquitectura Valor PLEX – Rating del nivel de experiencia en la plataforma y tecnología de desarrollo Muy Bajo Little (20%) Bajo Some (40%) Nominal Often (60%) 7,07 5,65 4,24 <= 2 meses Valor LTEX – Rating del nivel de experiencia en el lenguaje y las herramientas 1,19 <= 2 meses Valor 1,20 6 meses 1,09 6 meses 1,09 1 año Alto Generally (75%) 2,83 3 años 1,41 Extra Alto Full (100%) 0,00 6 años 1,00 0,91 0,85 1 año 3 años 6 años 1,00 0,91 0,84 Tabla 1 - Factores de COCOMO II afectados por un framework de desarrollo © Copyright 2009 Muy Alto Mostly (90%) n/a n/a Si mantenemos fijos todos los otros factores en sus valores nominales, es decir, en sus valores típicos o normales, y analizamos cómo varía el resultado cuando se modifican los 3 factores afectados, podremos observar cuál sería el impacto de un framework en el costo total del proyecto fundamentándonos en la sólida base estadística de proyectos de COCOMO II. Con esta idea en mente, tomamos 3 escenarios de proyecto para analizar, con la intención de representar un caso base, un caso medio y un mejor caso de proyectos que utilizan framework. De un escenario a otro, se pondera en forma creciente el impacto positivo en los factores de proyecto mencionados, partiendo desde un escenario de proyecto sin framework (caso base), donde no hay ningún impacto positivo porque no se utiliza un framework, hasta un escenario en donde los 3 factores mencionados son impactados en forma positiva y considerable por la utilización de un framework (mejor caso): Caracterización del Factor Muy Bajo Bajo Nominal Alto Muy Alto Extra Alto Caracterización del Factor Muy Bajo Bajo Nominal Alto Muy Alto Extra Alto Caracterización del Factor Muy Bajo Bajo Nominal Alto Muy Alto Extra Alto RESL – Rating del nivel de resolución Little (20%) Some (40%) Often (60%) Generally (75%) Mostly (90%) Full (100%) RESL – Rating del nivel de resolución Little (20%) Some (40%) Often (60%) Generally (75%) Mostly (90%) Full (100%) RESL – Rating del nivel de resolución Little (20%) Some (40%) Often (60%) Generally (75%) Mostly (90%) Full (100%) 5,65 6 meses 4,24 1 año 2,83 3 años 1,41 6 años 0,00 4,24 1 año 2,83 3 años 1,41 6 años 0,00 7,07 <= 2 meses 5,65 6 meses 4,24 1 año 2,83 3 años 1,41 6 años 0,00 en la plataforma y tecnología de desarrollo 7,07 <= 2 meses 5,65 6 meses en la plataforma y tecnología de desarrollo 7,07 <= 2 meses Valor LTEX – Rating del nivel de experiencia en el lenguaje y las herramientas 1,19 <= 2 meses 1,09 6 meses Valor LTEX – Rating del nivel de experiencia en el lenguaje y las herramientas 1,19 <= 2 meses 1,09 6 meses 1,19 <= 2 meses 1,09 6 meses 1,00 1 año 0,91 3 años 0,85 6 años n/a 1,20 1,09 1,20 1,09 1,20 1,09 1,00 0,91 0,84 n/a de riesgos de arquitectura Valor PLEX – Rating del nivel de experiencia Valor 1,00 1 año 1,00 0,91 3 años 0,91 0,85 6 años 0,84 de riesgos de arquitectura Valor PLEX – Rating del nivel de experiencia n/a n/a Valor Proyecto nominal + de riesgos de arquitectura Valor PLEX – Rating del nivel de experiencia en la plataforma y tecnología de desarrollo 1,00 1 año 0,91 3 años 0,85 6 años n/a Valor LTEX – Rating del nivel de experiencia en el lenguaje y las herramientas 1,00 0,91 0,84 n/a Valor + + + Proyecto con framework (+RESL +PLEX +LTEX) Proyecto con framework (+RESL) Utilizando la ecuación de esfuerzo de COCOMO con estos factores para calcular el esfuerzo total de proyecto, podemos representar el esfuerzo total asociado a cada uno de los 3 escenarios a medida que va creciendo el tamaño del proyecto y comparar los resultados. También podemos visualizar en forma relativa el porcentaje (%) de ahorro sobre el caso base asociado a cada escenario de proyecto, a medida que el tamaño del proyecto aumenta. Como unidad de medida para el tamaño del proyecto, utilizaremos puntos de función, que en promedio tienen una equivalencia de 55 líneas de código en lenguaje C# por cada punto de función implementado. Esfuerzo según tamaño del proyecto Esfuerzo (meses-hombre) 300 250 Proyecto Nominal 200 Con framework (+RESL) 150 100 Con framework (+RESL +PLEX +LTEX) 50 0 0 500 1000 1500 2000 2500 3000 3500 Puntos de Función Ilustración 1 – Comparación del esfuerzo total según tamaño del proyecto (calculado con COCOMO II) Ahorro según tamaño del proyecto Ahorro en esfuerzo 30% 28% 28% 27% 26% 25% 22% 20% Con framework (+RESL) 15% 10% 9% 5% 11% 14% 13% 12% Con framework (+RESL +PLEX +LTEX) 4% 0% 0 500 1000 1500 2000 2500 3000 3500 Puntos de Función Ilustración 2 – Comparación del ahorro en esfuerzo sobre el caso base según tamaño del proyecto (calculado con COCOMO II) © Copyright 2009 El tamaño de los proyectos más comunes de hoy en día varía por lo general entre los 500 y 2000 puntos de función (o entre 27 mil a 110 mil líneas de código .NET). Dentro de este rango podemos observar que la reducción en el esfuerzo o costo de un proyecto típico que genera un framework de desarrollo puede variar en promedio entre un 11% y un 26% de ahorro. Para concluir, debemos observar que todo el análisis realizado hasta el momento está enfocado sólo en la perspectiva del costo, es decir que únicamente analiza el ahorro logrado en el proyecto para construir una aplicación. Sin embargo, estamos dejando de lado en este análisis la perspectiva del valor generado a la organización, que se potencia con la reducción de costos y tiempos del proyecto, permitiendo que al acelerar la salida a producción de una solución sólida, se generen nuevos ingresos más rápido y por más tiempo, o que se ahorre antes reduciendo costos al hacer más eficiente algún proceso operativo. Estos beneficios adicionales harán sin duda que el rango del 11% al 26% de ahorro en el proyecto sea solo un piso para el retorno total de la inversión en la organización. © Copyright 2009 Un enfoque más práctico Supongamos que hacemos un experimento en donde implementamos una misma funcionalidad de aplicación de dos maneras distintas, una vez con framework y otra vez sin framework. Luego medimos la cantidad de líneas de código (SLOCs) requeridas en cada caso. Si la cantidad de líneas de código requeridas para implementar una misma funcionalidad con framework es menor a la cantidad requerida para implementarla sin framework, el esfuerzo de codificación también será menor en la misma proporción. Sin embargo, la codificación no es la única actividad, a veces ni siquiera la más importante, que se lleva a cabo en un proyecto y que se suma al esfuerzo total. Para calcular cuánto ahorro en todo el proyecto representa esta reducción en codificación, es necesario saber entonces cuánto porcentaje (%) del esfuerzo total representan las actividades de codificación en nuestros proyectos. Esta información podemos obtenerla de los proyectos ya realizados. De esta manera, si tenemos el porcentaje de reducción de líneas de código que genera un framework, y el porcentaje de esfuerzo de codificación sobre el esfuerzo total del proyecto, podemos calcular el ahorro en el esfuerzo total (o costo) del proyecto de la siguiente manera: ⎛ ⎝ %ReduccionFramework = ⎜1 − %EsfuerzoCodificacion = SLOScConFramework ⎞ ⎟ SLOCsSinFramework ⎠ EsfuerzoCodificacion EsfuerzoTotal ⇒ % AhorroEsfuerzo = %ReduccionFramework × %EsfuerzoCodificacion Ecuación 2 - Ecuación del ahorro de esfuerzo del proyecto por reducción en la codificación Como ejemplo, supondremos que tenemos un framework que reduce la cantidad de líneas de código a escribir a un 80% de lo que sería necesario escribir sin framework y utilizaremos información estadística de proyectos de la industria tomada de la base de datos del ISBSG (International Software Benchmarking Standards Group) para obtener el porcentaje de esfuerzo de codificación: Esfuerzo por actividad (proyectos in-house) Other 17% Project Management 7% Business Analysis 3% Architecture 9% QA, Testing 16% Programming 48% Ilustración 3 – Distribución típica del esfuerzo por actividad en un proyecto (fuente ISBSG) Reemplazando los valores en la cuenta: %ReduccionFramework = (1 − 80% ) = 20% × % 8 4 ≅ % 0 2 ≅ % 0 1 ⇒ o z r e u f s E o r r o h A % %EsfuerzoCodificacion = 48% Ecuación 3 - Ejemplo de cálculo de ahorro de esfuerzo por reducción en la codificación © Copyright 2009 También podemos calcular y representar el esfuerzo total según el tamaño del proyecto, medido en cantidad de puntos de función, y comparar la cantidad de ahorro generado. Para calcular el esfuerzo requerido según el tamaño de proyecto, necesitamos conocer la productividad (esfuerzo requerido por unidad de tamaño de proyecto) de la organización. Para este ejemplo tomaremos el promedio de la industria obtenido también de la base de datos del ISBSG que define la métrica Project Delivery Rate o PDR como: PDR = HorasDeEsfuerzo Horas ⇒ PDRPr omedioIndustria = 11 PuntoDeFuncion PuntosDeFunción Esfuerzo según tamaño de proyecto Esfuerzo (meses-hombre) 300 250 200 Con framework 150 Sin framework 100 50 0 0 500 1000 1500 2000 Puntos de Función 2500 3000 3500 Ilustración 4 - Comparación del esfuerzo total según tamaño del proyecto (calculado con datos de industria - ISBSG) Nuevamente como en el caso anterior, debemos tener en cuenta en el análisis el valor generado para la organización por acelerar la salida a producción de una solución que permitirá obtener nuevos ingresos más rápido y por más tiempo, o ahorrar antes reduciendo costos al hacer más eficiente algún proceso operativo. Adicionalmente, también es importante destacar el ahorro generado en el proyecto por la reducción de las actividades de arquitectura, testing y QA, que se da por el hecho de contar con un framework ya probado que incorpora una arquitectura aplicativa lista para usar y reduce la cantidad de líneas de código a testear. Si sumamos todo esto a los beneficios que ya analizamos, podemos afirmar sin dudas que el 10% de ahorro del ejemplo será solo un piso en el ahorro total del proyecto y en el retorno de la inversión. © Copyright 2009 El ROI de Baufest Productivity Framework en un proyecto tipo Aplicando el experimento planteado sobre Baufest Productivity Framework, se implementó una misma funcionalidad de aplicación una vez con el framework y otra vez sin el framework. Luego se midió la cantidad de líneas de código que se requirieron escribir en cada caso para conocer el porcentaje (%) de reducción de líneas de código que genera Baufest Productivity Framework. La funcionalidad implementada, de un tamaño equivalente a 56 puntos de función, fue basada en algunos escenarios funcionales de un banco ficticio: Login Logout Consultar saldo de cuentas Consultar movimientos de cuentas Realizar transferencia entre cuentas La medición de líneas de código arrojó que Baufest Productivity Framework redujo la cantidad de líneas de código a escribir a un 73%. Si tomamos nuevamente como base la información de proyectos de la industria (ISBSG) para obtener el porcentaje de esfuerzo de codificación, Baufest Productivity Framework supondría un ahorro en el proyecto de un 13% solo por la reducción en el esfuerzo de codificación: %ReduccionFramework = (1 − 73% ) = 27% ≅ % 3 1 ⇒ o z r e u f s E o r r o h A % %EsfuerzoCodificacion = 48% Ecuación 4 - Ahorro de esfuerzo con Baufest Productivity Framework solo por reducción en la codificación Sin embargo, Baufest Productivity Framework no es entregado como un producto suelto, sino que como parte integral de nuestra propuesta de valor, incluimos el servicio de desarrollo de hasta 50 puntos de función de funcionalidad real de aplicación que implementamos con el framework y junto con nuestro cliente, como parte de la transferencia de conocimiento y acompañamiento en el proyecto. De este modo, al ahorro ya calculado en el proyecto del 13%, se suma también que además el proyecto comenzará con 50 puntos de función ya desarrollados y dejando una arquitectura lista. Tomando en cuenta esto último, los 50 puntos de función iniciales del proyecto se obtienen con esfuerzo 0 (cero). Podemos volver a calcular y representar nuevamente el esfuerzo en relación al tamaño del proyecto para comparar el ahorro en forma absoluta. También podemos visualizar en forma relativa el porcentaje (%) de ahorro de esfuerzo en relación al tamaño del proyecto: Esfuerzo según tamaño del proyecto Esfuerzo (meses-hombre) 250 200 Con Baufest Productivity Framework 150 100 Sin framework 50 0 0 500 1000 1500 2000 2500 3000 3500 Puntos de Función Ilustración 5 - Comparación del esfuerzo total con Baufest Productivity Framework según tamaño del proyecto © Copyright 2009 Ahorro según tamaño del proyecto 30% Ahorro en esfuerzo 25% 20% 20% 18% 17% 15% 15% 14% 10% Con Baufest Productivity Framework 5% 0% 0 500 1000 1500 2000 2500 3000 3500 Puntos de función Ilustración 6 - Ahorro en esfuerzo con Baufest Productivity Framework según tamaño del proyecto Recordando que el tamaño de los proyectos más comunes de hoy en día varía por lo general entre los 500 y 2000 puntos de función (o entre 27 mil a 110 mil líneas de código .NET), el beneficio que genera Baufest Productivity Framework desde el punto de vista del costo en un proyecto típico, va desde un 15% a un 21% de ahorro. Como en los casos anteriores, en este análisis también es importante reconocer el valor ganado por la organización al acelerar la salida a producción de una solución que permite generar nuevos ingresos más rápido y por más tiempo, o que ahorra en los costos haciendo más eficiente algún proceso operativo. También el ahorro en el esfuerzo de las actividades de arquitectura, testing y QA del proyecto por contar con un framework ya probado que incorpora una arquitectura aplicativa lista para usar y reduce la cantidad de líneas de código a testear. Nuevamente, si sumamos todo esto a los beneficios ya analizados, el 15% al 21% de ahorro será solo un piso para el retorno de la inversión que brinda Baufest Productivity Framework. Si el precio a pagar por incorporar un framework como Baufest Productivity Framework es menor al ahorro que genera de entre el 15% al 21%, como piso en un proyecto típico, sin duda la inversión tendrá un retorno seguro. Si querés que te ayudemos a calcular cuál sería el ROI de Baufest Productivity Framework en TU proyecto de desarrollo, podés contactarnos a productivity@baufest.com © Copyright 2009