Breve guía sobre la presupuestación del desarrollo de aplicaciones

Cotización temprana de sistemas

Breve guía sobre la presupuestación del desarrollo de aplicaciones

Copyright © 2002 Ernesto De Spirito

Este artículo fue primero publicado en el Boletín para Desarrolladores de Software

SMImport - Componentes VCL nativos para importar datos

Índice

Boletín Pascal. Newsletter gratuito para programadores Delphi (y Kylix) con artículos, noticias, trucos, componentes y enlaces a nuevo contenido Delphi en la red.

El problema

Un cliente nos solicita un sistema a medida para su empresa. Realizamos entonces un estudio inicial -- muchas veces gratis -- en el que hablamos con el cliente para saber qué es lo que quiere, entrevistamos todos los involucrados, conseguimos copia de todos los formularios (comprobantes, planillas, etc.) que se manejan en la empresa, y todas esas cosas, y determinamos los requerimientos del sistema. Terminado el estudio inicial, en ese punto el cliente nos pide una cotización de todo el desarrollo, pero ¿Como hacemos? ¿Cómo cotizamos lo que todavía no hemos ni diseñado? ¿Cómo calculamos el tiempo de todo un desarrollo basados en un estudio inicial? ¿Es el momento de cotizar? ¿Podemos estimar con un relevamiento cuánto nos llevará el diseño y construcción del sistema?

Comprendamos al cliente

A veces uno le puede hacer entender a los clientes que no se puede saber cuánto tiempo llevará (y costará) la construcción de un sistema, si primero no se lo ha diseñado, y que no se puede saber cuánto tomará el diseño si primero no se realizó el análisis de lo que se relevó, etc... Entienden todo eso, que las etapas, que los informes, que los puntos de control, que la calidad del trabajo, pero por lo general igual después de un relevamiento inicial quieren conocer el costo total del proyecto porque necesitan ese dato de antemano, aunque sea un estimado (lo más ajustado a la realidad posible), antes de decidirse a encarar el proyecto, pues necesitan saber de antemano si podrá afrontar los costos de todo el proyecto y planificar el flujo de efectivo.

Contratación por Ajuste Alzado

Hay que comprender la necesidad del cliente, pero no se puede contratar todo el desarrollo del sistema por ajuste alzado o llave en mano.

Ajuste alzado es una modalidad de contratación en la que se fija un precio fijo y cerrado para la ejecución de un proyecto. Los trabajos incluirán todo aquello necesario para que el sistema se considere completo y quede puesto en marcha. Llave en mano es como el ajuste alzado pero se supone que el precio incluye todos los trabajos hasta el último detalle, o sea, hasta cumplir el último capricho del cliente). Esta suposición obviamente está prohibida por la legislación de cualquier país civilizado, pero el término llave en mano se sigue utilizando (sólo como una forma de dar a entender que los trabajos son de buena calidad y de gran nivel de sus detalles de terminación).

La modalidad de contratación por ajuste alzado es apta para casos en que los trabajos se encuentran perfectamente definidos y detallados. Por ejemplo, sería apata para contratar una etapa del desarrollo de un sistema a partir de la etapa anterior. Por ejemplo, a partir de un estudio inicial podemos presupuestar sin problemas un análisis, con base a un análisis podemos presupuestar un diseño conceptual, a partir de un diseño conceptual podemos presupuestar un diseño detallado, y así sucesivamente con todas las etapas...

Alternativas

Pero el ajuste alzado no es apto cuando el proyecto no está definido a priori o cuando está sujeto a eventualidades o es cambiante. Entonces, tras un estudio inicial, habiendo totavía muchas cosas por definir, no podemos fijar un monto global para el proyecto por ajuste alzado. El cliente bien que querría eso ;) pero para nosotros es inaceptable. Se presentan entonces las siguientes alternativas:

  1. Ir contratando etapa por etapa (o hasta puede ser uniendo etapas) por ajuste alzado. Conveniente para nosotros porque nos resultará fácil hacer estimaciones de lo que viene en base a lo ya hecho, pero generalmente no para el cliente que quiere fijar un monto global para todo el proyecto desde el primer momento o un estimado muy cercano a la realidad.

  2. Contratación del desarrollo del sistema por la modalidad de coste y costas. Con este sistema de contratación, el contratista le factura al cliente lo que los trabajos han costado. Mucho más conveniente para nosotros pues es riesgo cero ya que directamente ni siquiera tenemos que presupuestar (salvo por ejemplo dar precios de elementos básicos de costo como el valor hora del analista, diseñador, programador, capacitador y otros), pero se repite la dificultad para el cliente expresada en el punto anterior, además que requiere gran confianza del cliente en nosotros, o ejercer gran control sobre el avance de nuestros trabajos.

  3. Contratación del desarrollo del sistema por la modalidad de límite de costo. En base a un estudio inicial, en muchos casos puede estimarse los tiempos y costos del proyecto a ojo de buen cubero y el desarrollo del sistema se realizará buscando cumplir con esos parámetros (se explica mejor abajo). Esta modalidad continúa siendo favorable a nosotros pues no presenta riesgos, y permite al cliente fijar un precio global al inicio del proyecto. Al igual que en el caso anterior, requiere gran confianza o control de parte del cliente.

  4. Combinaciones híbridas de las anteriores.

Contratación por Límite de Costo

En esta modalidad de contratación se estiman los tiempos y costos a ojo de buen cubero (explicamos eso más adelante) y después el desarrollo trata de ajustarse a esos parámetros. En otras palabras, si por ejemplo se fijan dos meses de plazo de ejecución y dos mil pesos de costo, pues el cliente tendrá un sistema de dos meses y de dos mil pesos. En otras palabras, es como si el cliente nos dijera "hazme el mejor sistema que puedas y que cumpla los objetivos planteados, en dos meses y dos mil pesos, que es lo que puedo pagar."

Dentro de este sistema se considerarán trabajos adicionales todo aquello que el cliente quiera y que nos saque de los límites prefijados, así que cuando el cliente nos venga con un "domingo siete" de esos que ya conocemos, debemos decirle que con eso nos salimos del presupuesto original, y dejarle que él decida si paga la diferencia, si no se hace, o si se recorta por otro lado para compensar.

Por las características de este sistema de contratación, la estimación de tiempos y costos hasta se puede negociar con el cliente para fijar el tiempo de desarrollo y el precio final. En definitiva lo que se negocia es si el sistema traerá sólo básico o si será un sistema con todos los lujos. Lo habitual es presenter tres alternativas (una económica, una mediana y una costosa) y dejar que el cliente decida.

Estimación del costo de un sistema a ojo de buen cubero

¿Se puede estimar el costo de un sistema a mano alzada con base a un estudio inicial? Sé que muchos van a decir categóricamente que no. Sería como decir cuánto costará construir una casa con sólo hecharle un vistazo a un croquis... Pero, precisamente, por eso es que sí se puede. Aunque un constructor no tenga un plano definitivo, y no haya hecho un cálculo de materiales y mano de obra para saber cuántos ladrillos, cuánta arena, cuánta cal, cuánto cemento, etc. llevará una obra, igual sabe que para el costo de una vivienda de una determinada metodología constructiva existe una relación entre precio por metro cuadrado y calidad, de modo que dado un nivel de calidad deseado (que define el precio por metro cuadrado) y la cantidad de metros cuadrados (que se obtiene de unas mediciones sobre el croquis), se calcula con una simple multiplicación el costo total de la obra. El tiempo de construcción también es función de la cantidad de metros cuadrados y la calidad de los trabajos.

Lo mismo ocurre con los sistemas. El problema aquí es ¿cuál es el equivalente de los metros cuadrados? Tenemos que obtener una medida cuantitativa que represente el estudio inicial, así como los metros cuadrados son una medida cuantitavia que representa al croquis. ¿Qué valor cuantitativo que se puede obtener o estimar sin problemas en base a un estudio inicial tiene fuerte correlación con el costo de un sistema y el tiempo de desarrollo? Bueno, pues el parámetro que se toma habitualmente es la cantidad de tablas, que multplicándolo por el precio por tabla (que se conoce de antemano en base a la experiencia) nos dará el costo total del sistema.

Obtener la cantidad de tablas en base a un estudio inicial no es tan simple como medir un croquis con un escalímetro, pero tampoco es imposible hacer un borrador de las tablas y sus relaciones en función de lo que nos imaginamos del sistema, sumándole un margen de error razonable en función de la experiencia. Por ejemplo si tras el estudio inicial identificamos unas 40 tablas pero sabemos por experiencia que en sistema de este tamaño por lo general es normal que en etapas posteriores surjan un 20% de tablas más, y si tomamos un 5% como margen de error, entonces en nuestros cálculos tomaremos 50 tablas.

Queda por último establecer la función que nos dará el precio por tabla. La forma más simple es la sumatoria de elementos de costos (siendo algunos de ellos coeficientes obtenidos por la experiencia) multiplicados por los precios unitarios de esos elementos de costos. Por ejemplo:

    Cantidad promedio de horas de análisis y diseño por tabla
    x  Valor hora de análisis y diseño
  + Cantidad promedio de horas de programación por tabla (incl.
    creación, carga de datos de prueba, diseño de formularios,
    diseño de listados, depuración, detalles, prueba, puesta a
    punto, etc.)
    x  Valor hora de programación
  + Cantidad promedio de horas de carga inicial de datos por tabla
    x Valor hora de operador
  + Cant. prom. de horas de conversión de datos existentes por tabla
    x Valor hora de conversión de datos
  + Cantidad promedio de horas de preparación documentación por tabla
    x Valor hora de documentador
  + Cantidad promedio de horas de capacitación por tabla
    x Valor hora de capacitación del usuario
  + Costos fijos y variables / Cantidad de tablas
  -------------------------------------------------------------------
  Precio por tabla

La cantidad de horas de cada elemento de costo depende de muchos factores como la complejidad del sistema, la experiencia con las tecnologías a emplear, la calidad del trabajo y el nivel de sus detalles de terminación, el lugar y las condiciones de trabajo, capacitacías y coordinaciones necesarias (aumenta en función de la cantidad de miembros del equipo), imprevistos, etc. La sumatoria de los tiempos obviamente sirve para estimar el tiempo total de desarrollo.

Los valores hora dependen de la región, el tipo de trabajo, el bolsillo del cliente, el lugar y las condiciones de trabajo, etc. y otras consideraciones como por ejemplo las posibilidades de reventa del sistema.

Cabe mencionar que si bien le hemos dado bastante detalle a los cálculos, el nivel de detalle en realidad lo fija uno según el caso y su experiencia, pero el detalle es importante a la hora de justificar los costos, de determinar los tiempos y costos de las etapas, de medir después el avance del proyecto (sobre todo para cobrar) y hacer un buen control de costos, de fijar precios de referencia para los trabajos adicionales, y para después hacer análisis de costos y mejorar nuestros parámetros de cara a cotizaciones futuras.
 

JfControls Library - para Delphi y C++ Builder