En este artículo trataremos de informar y mostrar (rompiendo algunos mitos) cómo se estima y cuál es el costo de un sistema a medida. Sin embargo, antes de comenzar a explicar las distintas maneras de estimar el esfuerzo, primero tenemos que definir qué es una estimación.

¿Qué es una estimación de software?

Una estimación de software es una predicción de cuánto tiempo durará y costará el desarrollo y mantenimiento de un proyecto de desarrollo de software a medida.

  • Estimación de tiempo: el esfuerzo puede expresarse en horas/persona.
  • Estimación de costos: se puede expresar en la moneda que se prefiera.

El mayor desafío a la hora de elaborar una estimación es el de realizar predicciones realistas, basándose en información incompleta e incierta. Esto no es una tarea fácil, ya que si no se posee la experiencia adecuada, los márgenes de error pueden ser grandes y las consecuencias no serán muy favorables.

Estimación de software: el costo de un sistema a medida

Identificar objetivos y compromisos

En un proyecto de sistema a medida establecer los objetivos y las promesas (compromisos) son un factor clave debido a que lo más importante no es predecir el resultado, sino determinar si los objetivos comerciales de tu cliente son realistas y alcanzables.

Conocer desde el principio el objetivo que hay que alcanzar, junto con los compromisos establecidos, te permite determinar si el sistema a medida va a estar listo para una fecha dada.

Conocer el alcance funcional del proyecto

Uno de los aspectos más importantes a la hora de saber cuál es el costo de un sistema a medida es entender qué es lo que se quiere desarrollar y qué alcance tiene.

En algunas situaciones, se cuenta con información detallada y documentación que nos permite entender el alcance y lo que conlleva hacer el sistema. Sin embargo, en la mayoría de los casos esto no pasa y es cuando el proceso se vuelve más complejo e incierto. En estos casos, es necesario definirlo.

Definir el alcance funcional

Es importante comenzar a determinarlo por las distintas reuniones y charlas llevadas con el cliente, pensar en la necesidad comercial del negocio y los distintos compromisos. Para lograr esto, se recomienda ejecutar lo siguiente:

  1. Coordinar reuniones para poder alcanzar un entendimiento mayor del negocio. Si es necesario realizar un relevamiento y análisis personalmente;
  2. Investigar sistemas similares que puedan servir como referencia;
  3. Entender la industria a la que el cliente pertenece y el tipo de proyecto;
  4. Validar y priorizar los requerimientos funcionales creados.

Determinar los requerimientos NO funcionales

A diferencia de los requerimientos funcionales que describen “lo que el sistema debe hacer”, es importante considerar los requerimientos no funcionales que describen “cómo” el sistema debe funcionar, ya que varían mucho a la hora de determinar el costo de un software a medida.

Por ejemplo, un requerimiento funcional muy común puede llegar a ser “Mostrar a todos los clientes cargados en una grilla”. Un requerimiento NO funcional que podemos determinar de este sería: “El sistema debe responder con una latencia menor a 3 segundos”.

Requerimientos NO funcionales

  • Escalabilidad
  • Performance
  • Alta disponibilidad
  • Seguridad
  • Usabilidad
  • Interoperabilidad
  • Mantenimiento

La importancia de cada tipo de requerimiento no funcional va a depender del tipo de proyecto y de la industria a la cual el negocio pertenece. Además, es importante aclarar que según el contexto del proyecto, la complejidad para implementarlos puede variar.

Definir prioridades

En muchas ocasiones, las estimaciones y restricciones del proyecto (presupuesto, tiempos, recursos, etc.) pueden dificultar alcanzar los objetivos definidos.

En este tipo de situaciones, es importante conocer y considerar las prioridades más significativas para poder concentrar los recursos de una manera más eficiente y así poder entregar los requerimientos más críticos primero.

En caso de que el peor escenario posible se haga realidad, los requerimientos menos críticos serían pospuestos a otra fase de desarrollo del proyecto. Es importante tener en cuenta el presupuesto de la empresa y cuál sería el costo del sistema en ese momento.

¡Clave importante! Alinea los planes con las estimaciones, objetivos y los compromisos.

Planificación del proyecto

Las estimaciones son la base de la planificación, ya que te permiten determinar si tus objetivos son alcanzables o no. En caso de que no lo sean, los planes deberán reconocer la diferencia y considerar los riesgos altos del proyecto.

Por otro lado, si los objetivos son alcanzables y no hay diferencia entre estos y las estimaciones, entonces los planes asumirán un riesgo bajo y serán diagramados bajo este concepto.

Los siguientes son ejemplos de consideraciones a tomar durante la planificación que dependen de las estimaciones:

  • Identificar el camino crítico del proyecto;
  • Crear una estructura completa del “breakdown” del trabajo (cargar y documentar los requerimientos);
  • Priorizar funcionalidades para la entrega;
  • Dividir el proyecto en iteraciones.

Estrategias para estimar el costo de un sistema a medida

Luego de analizar el tipo de proyecto, su complejidad, la información obtenida y recolectada, la cantidad de requerimientos (funcionales y no funcionales) y el tiempo de entrega de la estimación, es momento de elegir la estrategia correcta.

Estimación de software tradicional

Consiste en estimar un requerimiento y asignarle un valor de tiempo estimado fijo, el cual depende del nivel de complejidad detectada y de la experiencia del profesional que estima.

Para poder ganar más precisión, lo que se suele hacer es dividir el requerimiento en componentes (interfaz de usuario, negocio, base de datos, etc.) y determinar un tiempo para cada uno. Luego, la suma de las estimaciones de cada componente será la estimación total del requerimiento.

Esta estrategia, si bien es la más precisa, no sería la más adecuada en el caso de que haya un gran número de requerimientos o si los tiempos de entrega de la estimación son cortos.

Estimación por orden de complejidad

Esta estrategia de estimación para calcular el costo de un sistema a medida consiste en asignarle una complejidad a cada requerimiento. Esto suele medirse en Story Points: 1,2,3,5,8,13.

Se extrae una cantidad “x” de requerimientos y se estima tradicionalmente. Las estimaciones son promediadas por complejidad, es decir, si hay tres requerimientos de complejidad 2 que fueron estimados, se promedia.

Por último, se toman los requerimientos no estimados y se les asigna el valor estimado por complejidad.

Estimación por analogía

Consiste en estimar basado en el concepto de la experiencia. Los tiempos reales obtenidos por la empresa en proyectos previos son los mejores indicadores de cuánto puede tomar un proyecto de una similar longitud.

Para lograr este tipo de estimaciones se deben cumplir ciertos requisitos:

  1. Tener una vasta experiencia;
  2. Trackear los tiempos de los proyectos previos (mientras más, mejor);
  3. Mantener un repositorio para detectar proyectos similares.

Estimación por equipo

Consiste en dividir los requerimientos en componentes o módulos por especialización. De esta manera, se puede entregar dichos módulos a un equipo de profesionales especializados que se dediquen a estimarlos.

Cada grupo estimará los requerimientos asignados utilizando cualquiera de las estrategias previamente explicadas.

Esta estrategia es recomendada cuando hay una gran cantidad de requerimientos a estimar.

Registrar asunciones

A la hora de estimar, normalmente hay mucha incertidumbre involucrada debido principalmente al desconocimiento de los clientes por el producto que desean/necesitan. Aquí es donde entra la experiencia y la habilidad del analista para poder realizar reuniones y consultas para determinar qué es lo que realmente necesita el cliente.

Sin embargo, muchas veces simplemente no es posible resolver todas las dudas. Por ello, es muy importante registrar todas las asunciones que puedan influenciar la estimación y planificación del proyecto.

Esta es una manera muy práctica y clave a la hora de analizar y estimar proyectos para determinar el costo de un sistema a medida, debido a que reduce el riesgo de cualquier tipo de malentendido (que puede derivar en desarrollar una funcionalidad equivocadamente) causado por ambigüedades o por falta de información.

Costos de la estimación

Algunas de las variables que se incluyen dentro del costo de un software a medida son:

  • la mano de obra;
  • el hardware y software (licencias);
  • los gastos de oficina;
  • las capacitaciones;
  • la metodología que se aplique.

Dicho esto, lo que normalmente se suele hacer, sobre todo en empresas que ofrecen SaaS (Software as a Service o como Servicio), es armar y vender equipos donde cada recurso tiene un costo monetario asignado. Lo que le permite a la empresa ofrecer una modalidad de trabajo mensual por equipo.

Las ventajas de esta forma de trabajar son inmensas:

  1. El cliente tiene más control sobre el equipo ya que incrementa o disminuye el tamaño de este dependiendo de la necesidad que actualmente tenga.
  2. Se ofrece un servicio más personalizado ya que pretende que el cliente y el equipo estén en constante comunicación.
  3. Se asegura una calidad mayor del producto. Esto también se debe a la comunicación estrecha entre cliente y equipo ya que le permite detectar errores o malentendidos con antelación.
  4. En caso de algún atraso, se detecta inmediatamente y permite notificar y manejar las expectativas de una manera más eficiente.

Conclusión

Estimar proyectos de software a medida no es una tarea fácil. Lo recomendable es tener un equipo de profesionales con una vasta experiencia en desarrollo de software y que hayan tenido contacto con la mayor cantidad de industrias posibles, para poder cubrir y estimar los costos de un sistema a medida para cualquier tipo de negocio.

Lo más importante de una estimación es poder llegar a tener un claro entendimiento del alcance, objetivos y compromisos (promesas) y usar las recomendaciones listadas en este artículo con la meta de reducir la mayor cantidad de incertidumbres y lograr una estimación precisa, tanto en tiempo como en costos.

Por Germán Stark. Socio fundador en CAMS Ideas.