Estima como los mejores, no seas el tipo del clima.

Guía para Estimar Proyectos de Desarrollo de Software.

Si tuvieses un dólar por cada vez que saliste a la calle esperando un día soleado según el pronóstico del clima en las noticias para luego terminar caminando bajo la lluvia sin paraguas, probablemente ¡ya podrías comprarte el último iPhone!… bueno, quizás no tanto, pero lo cierto es que todos detestamos cuando seguimos una estimación con una expectativa y termina siendo totalmente diferente en la vida real. Nos pasa a todos, inclusive a tus clientes.

Si hay una pregunta sin única respuesta y siempre variable en el mundo de la programación es “¿Cuánto tiempo va a tomar?”. Suele pasar cada vez que tenemos que estimar un producto entero, un proyecto o inclusive la implementación de un feature o una corrección de un bug. El tiempo es esa variable que todo cliente necesita controlar y que por más que seamos rigurosos y detallistas, no siempre se cumple al 100% y, a los ojos de tu cliente, terminas pareciéndote al tipo del clima :/ … porque claro, ‘la culpa’ es del programador #sarcasmo. Pero … ¿A qué se debe esto?

Tuvimos la oportunidad de charlar con 10 de nuestros usuarios en Hackealo — desde freelancers hasta project leaders — sobre por qué la estimación parece ser el talón de Aquiles y éstas fueron las principales razones:

  • Los requerimientos suelen ser poco claros.
Por lo general los encargados del negocio tienden a hacerse una idea del resultado final que quieren y no hacen un análisis profundo de todas las implicaciones. Esto se debe a que se suele pensar la solución en función del caso del ‘user’ perfecto pero por más intuitiva que sea la solución siempre es necesario pensar en todos los escenarios posibles.
  • Agregar funcionalidades puede impactar en el resto del código.
Cuando se quiere implementar un nuevo feature se pueden tumbar algunos supuestos ya establecidos en el programa inicial, y por lo general esto no es tenido en cuenta en la concepción y planeación del nuevo feature, obligando al programador a no solo crear lo nuevo sino ajustar lo viejo, y en consecuencia a invertir más tiempo.
  • Clientes fuera de lugar.
Programar no es magia. Es un proceso, con metodologías y organización, inputs y outputs. Cuando el cliente no entiende esto, suele irrespetar los arreglos pactados o frustrarse con los resultados. Es en estos casos cuando aparecen clientes que después de la estimación introduce cambios durante el desarrollo que cree que no van a afectar la estimación global o clientes que no comprenden que las correcciones del sprint anterior afectan el sprint actual y así.
  • Expectativas erradas del cliente.
A veces el cliente espera un producto perfecto y no existe tal cosa. Ni Facebook en su primera versión fue perfecto. Esto suele pasar por lo general con las startups que recién inician un producto de cero. En otras ocasiones el cliente espera que durante la reunión de estimación resuelvas todo en la cabeza en cuestión de minutos y calcules el tiempo de programación en vivo. Pero programar tiene mucho de prueba y error, y al estimar estamos pronosticando pero siempre habrá un margen de error y eso suele no ser visto el cliente.
  • Maldito Ego.
Cuando existe una presión por parte del negocio se suele cometer el error de aceptar los tiempos que nos imponen. Frases como “tiene que estar listo en 1 semana” terminan haciendo que nuestro ego nos juegue una mala pasada y con tal de no quedar mal podemos llegar a aceptar proyectos con tiempos poco realistas.

Probablemente hayas tenido que sufrir alguna de las situaciones mencionadas y si ese es tu caso, queremos compartirte 6 consejos que puedes aplicar para dimensionar mejor tus proyectos y dejar de parecer el tipo del clima ante tu cliente:

1. Comprende lo que eres capaz de hacer.

Estimar es en parte entendimiento del proyecto y en parte conocimiento de qué tanto puedes aportar. Lejos de caer en la idea de “conócete a ti mismo y tu talento”, hablamos de meterle ingeniería a tus destrezas:

  • Conoce tus especialidades: Descubre qué tipo de problemas puntuales sabes resolver bien. Identifica tu fuerte: ¿Debugging? Testing? Diseño de soluciones? Manejo de DBs?. Saberlo no solo te permitirá pronosticar mejor sino saber elegir inteligentemente tus proyectos.
  • Estima por deporte: estimar constantemente tus tareas y luego comparar el tiempo que realmente te tomó, te permitirá conocer tu ritmo de trabajo y tener más precisión la próxima vez que tengas que dimensionar un proyecto.
  • Básate en conocimiento ya adquirido: Lo mucho que puedes aportar también depende de qué tanto puedes hacer en un marco de tiempo. No es necesario empezar siempre de cero. Identifica y ten siempre al alcance desarrollos previos (propios o no) que puedas reutilizar en tus nuevos proyectos, así la próxima vez que estimes sabes que ya tienes tiempo a tu favor.

2. Educa a tu cliente.

Gran parte del problema de por qué tu cliente nunca está satisfecho es por falta de conocimiento de su parte sobre el proceso de desarrollo en general y en particular de cómo vas a intervenir en su proyecto. No se trata de enseñarle a programar, sino de explicarle conceptos básicos como scrum, metodologías ágiles o MVP, y en un nivel más profundo explicarle, con terminologías entendibles para él/ella, cómo vas a encarar la solución (y en un mundo ideal, tratar de involucrarlo en el diseño de la misma). Esto va a permitirle poder colocarse en tus zapatos fácilmente y comprender por qué haces lo que haces cuando lo haces y de la forma en qué lo haces.

Realmente te sorprenderá el poder de un simple video (Ejemplo Spiral Model) o la claridad de una infografía bien hecha (Ejemplo Scrum). ¡Inténtalo!

3. Entiende el por qué del proyecto.

Explicar una idea es un proceso comunicativo complejo. Tener la capacidad de describir con exactitud lo que está en tu cabeza y asegurarte que la otra persona comprendió exactamente lo mismo que estás visualizando en tu mente, requiere de talento (y paciencia!). Probablemente no vas a entregar el producto que tu cliente desea tal cual (aunque admitamos que no todos saben lo que quieren), pero si puedes generar la misma sensación de satisfacción que esperaba inclusive si tu solución dista mucho operativamente de cómo lo imaginó tu cliente. De esto se trata entender el ‘Por qué’. Detrás de cada proyecto hay una razón, un objetivo. Tu cliente cree saber como alcanzar ese objetivo y cuando te lo explica, por lo general habla de la forma que el visualiza…pero el que sabe programar aquí, eres tú. Tu desafío es saber leer entre líneas y entender el objetivo real. Cuando lo descubras y valides que sí es ese, en el peor de los casos al menos igualas sus expectativas.

4. Ten una metodología.

Existen multiples mecanismos para estimar y dimensionar tus proyectos con relativa precisión y seguramente ya tienes un preferido. Sin embargo, aquí te comentamos paso a paso, después de charlar con varios profesionales, lo que concluímos sería una metodología eficaz:

  • Entiende lo que tu cliente necesita, escucha lo que desea: por lo general existe una primera necesidad de comentar todas las ideas que se tiene en la cabeza. Permítele a tu cliente comunicar su necesidad y enfócate en entender qué y por qué quiere lo que quiere y ten en cuenta la forma como lo quiere (tan solo de referencia)
  • Establece las condiciones de trabajo: por lo general al dimensionar proyectos hay 3 variables: tiempo, costo y alcance. Entre más variable sea el tiempo y el costo del proyecto, menos factible es cerrar un entregable pues siempre habrá algo más para hacer. En cambio entre más variable es el alcance, mayor flexibilidad tienes para trabajar. Lo ideal sería trabajar en un marco de tiempo y recursos definido y contar con flexibilidad de resultados. Si puedes instalar esa idea, mejor.
  • Define lo crucial, lo importante, lo urgente y lo ideal: Se trata de hacer un análisis preliminar del output esperado. Esto debería ir acompañado de un análisis técnico: partir el proyecto en etapas, las etapas en tareas y enmarcar las tareas en proceso. Luego priorizar.
  • Plantea junto a tu cliente el entregable ideal a la luz de la priorización.
  • Estima con tu técnica preferida: Aquí te indicamos 5 técnicas que te pueden interesar:
  • Define el entregable real: Una vez ya todos son conscientes de lo que implica en tiempo (y costo) realizar el producto ideal, es hora de acotarlo en función de las variables relevantes para tu cliente (dinero, tiempo o alcance) y llegar a un común acuerdo.
  • Define las instancias de review y entregables parciales: Con el objetivo en la mira, es momento de organizar la forma de comunicar el progreso.
  • Comunica tu proceso de desarrollo y hasta donde puede participar o involucrarse el cliente.

5. Usa herramientas.

Para estimar puedes apoyarte en herramientas externas disponibles en internet. Aquí te mostramos algunas:

Website absurdamente intuitivo para estimar horas y costos de desarrollo.
Simple y práctica calculadora de tiempo para tus proyectos.
Para los amantes de Scrum y Trello, este pluggin es muy útil.
Cuando tu cliente está muy involucrado en el proceso, esta herramienta le permite dar mejor visibilidad al progreso del producto

6. Sé pesimista.

Finalmente, lo mejor que puedes hacer es ser precavido y mantener un margen de tiempo a tu favor. Los imprevistos están siempre a la vuelta de la esquina y es mejor estar preparados. Algunos profesionales recomiendan agregar un 20–30% de tiempo adicional a la estimación puro para destinarlo a imprevistos. Existen múltiples métodos para determinar ese colchón de horas, algunos llevan todas las tareas a su mínima expresión para ser más realistas en determinar cuánto pueden retrasarse, otros usan métodos como el de COCOMO que al final termina apuntando al 30%, pero consideramos que esto ya es decisión personal y está en ti analizar la relación costo/beneficio de tener un margen elevado o no.

Si te pareció interesante, comparte esta nota con tus amigos y ayuda a otro programador a estimar mejor ;-) .. y no dejes de visitar Hackealo, el portal de empleo que siempre esperaste.