Analogía de Proyectos de desarrollo (Para no-programadores)

17/03/2017
Artículo original

Me gustan muchos las analogías, las uso mucho para explicar cosas complejas de forma simple.

Hace tiempo que estoy tratando de encontrar una analogía para explicarle a los sponsors de nuestros proyectos por qué es tan complejo hacer un sistema informático grande, sin bugs (errores) y en tiempo y forma.

Creo que encontré una analogía en el querido Excel, el cual de paso todos saben usar.

Supongamos que cuando nos piden un proyecto, nos están pidiendo no mas y no menos que una planilla de excel que realize ciertos cálculos, supongamos para el ejemplo que se trata de un excel que calcule el costo de mantenimiento de un auto.

image

Bien, ¿simple no? para hacer este proyecto informático lo único que tenemos que hacer es poner varias filas con distintos costos y luego sumarlos

Nafta = 1000

Aceite = 1000

Lavadero = 1000

Patente = 1000

Total = 4000

Que simple fue! :) el tema es que esto equivale a un programa que imprima “hola” en la pantalla. El típico programa requiere mucho más que un mensaje y 4 cuentas.

¿Qué pasa si ahora nos dicen que ese excel tiene que ser el excel más detallado del país porque va a usarse para el cálculo del PBI e inversión en combustible y explotación de hidrocarburos? Bueno lo vamos a tomar con más responsabilidad y claramente hay que hacerlo lo más detallado posible.

Nos damos cuenta rápido que para eso no vamos a tardar 5 minutos sino que un poco más ya que tenemos que tener en cuenta 2 mil variables complejas, las cuales incluyen por ejemplo el clima, la economía del país, la proyección de ganancias de la sociedad, la importación de autopartes, el precio del petróleo, el precio del peaje sujeto a la paritaria del gremio, etc (así por 2 mil).

image

Bien, tenemos la brillante idea de decir, ok… pongo a 200 personas, cada una se encarga de calcular 10 variables, deja el valor del costo cada una en una celda y después sumo todo? facilísimo no? bien acá empiezan los problemas.

Project management

Nos tenemos que poner de acuerdo cuáles 10 variables me tocan a mi y cuáles 1990 le tocan al resto. Nos tenemos que poner de acuerdo en qué celda cada uno de nosotros va a dejar el valor del costo, además de si tenemos que dejar un valor o un rango, además de cuál es el precio de base (dólares, pesos, reales?), etc.

De las 10 variables que les toca a cada uno, no sería bueno que si yo justo soy licenciado en ciencias de la atmósfera me toque el costo relacionado con el clima? y si yo soy ingeniero en petróleo quizás sería bueno que me toque el cálculo del combustible? si obvio, entonces nos tenemos que dividir bien las variables y esto obviamente lleva tiempo y análisis. Cuánto? 1 día? una semana? no es mejor empezar a calcular cualquier variable y ahorrarnos este tiempo de análisis o es mejor analizar bien (tardar una semana) y luego ejecutar cada uno el costo más idóneo a su área de experiencia?

Ahora bien, supongamos que nos pusimos de acuerdo, ya sabemos los costos que calculan cada una de las personas, ¿Cuánto se va a tardar en hacer el excel?

image

Bueno podemos estimar mas o menos cuanto se tarda en cada uno de los costos y después sumarlos, a los que son más complejos los podemos multiplicar por 2 en el tiempo promedio y a los fáciles por 0.5 o sino podemos preguntarles a las personas que son las que los van a calcular para que estimen el tiempo o analizar en detalle cada uno y entender bien el costo de cada una de sus sub-partes y hacer una estimación mejor….. otro bardo.

Todo esto es lo que tiene que hacer un project manager, y uno bueno sirve mucho y uno malo puede hacer cualquier desastre y a veces hasta no hay, están las 200 personas mirándose y esperando que se definan las variables solas.

Desarrolladores

Cada una de las personas que se encargan de algún costo (combustible supongamos) tiene diferente niveles de conocimiento de excel, de matemáticas, de responsabilidad y foco.

Puede que haya una persona que se sepa todas las formulas de excel de memoria pero sea apurada y olvide algún detalle en el costo del combustible como podría ser la variabilidad del precio del petróleo.

Puede ser que haya otra que sí tenga estos detalles en cuenta, pero no sepa muchas fórmulas de excel y resuelva todo con sumas y restas.

Puede ser que alguien realice todo el cálculo en una celda con una super fórmula inentendible o puede ser que sea muy prolijo y divida todo en sub costos bien definidos y claros.

Puede ser que sea muy distraída y no solo se olvide algún detalle en la fórmula sino que confunda una suma de un término con una multiplicación, o que si tiene que multiplicar algo por PI (3.14) le pifie y ponga (4.14) o peor aun que le pifie en algún decimal imperceptible (3.1475).

Puede ser que sea muy bueno en todo, pero extremadamente obsesivo y por consiguiente muy lento porque esté chequeando todo todo el tiempo y caiga en la “parálisis por análisis”.

image

Todas estas variables combinadas bien ejecutadas hacen a un buen programador. Que no es otra cosa más que la combinación de ser responsable, sistemático, tener conocimiento del tema y de las herramientas en cuestión y un buen trade-off entre solución buena vs solución perfecta.

Documentación

¿Prefieren que el excel sea una chorrera de números sin ningún detalle de qué significa cada uno o una tablita hermosa con todos las descripciones y gráficos de qué se está calculando en cada paso? yo prefiero lo segundo, pero para eso necesitamos más tiempo, a veces por tener el proyecto antes no se documenta y realmente se tiene antes…. hay que ver si en un año entendemos esos 300 mil números en un excel de 8000 filas por 22 columnas.

Por eso es importante documentar, al menos algo, no exageradamente, para tener un pantallazo de qué es cada cosa, luego podemos ver la fórmula en la celda y sabemos de qué se trata, un mapa básico.

image

Control de Calidad

OK terminamos el excel, cargamos los datos de mi auto y me da 1522 pesos por mes

Y?

Qué se yo si está bien. ¿Cuánto margen de error tiene?

¿Cómo se que alguien no le pifió en alguna de las 8000 cuentas? ¿Cómo se si no hay un error grotesco como ser que se olvidaron de agregar el costo del seguro por mes?

Bueno por eso hay que testear. En caso del excel, podríamos ver si cada uno de los sub-costos del auto, están en un rango correcto, un costo negativo no tiene sentido. Podríamos agarrar un auto y usarlo un mes y ver el costo real de cada cosa y contrastarlo con lo que dice el excel, para ver si mas o menos es correcto o podríamos hacer algo más extremo y decirle a otro programador que calcule otras 10 variables a ver si le dan igual a las 10 que calculó el otro programador, y que pasa si le da distinto? se la podemos dar a un tercero… bueno, todo es to es un bardo, pero hay que hacerlo y sí, se tarda mucho más pero cuando entregamos la planilla de costos del auto, podemos estar seguros que como lo probamos con rigurosidad no puede tener más de un 10% de error.

image

Supongamos que terminamos la planilla, re documentada, re probada y contrastada con un auto real y la entregamos y anda perfecta.

Al año siguiente vienen desde el gobierno y nos dicen que ahora como hay autos eléctricos modifiquemos los costos porque hay que tener en cuenta otra cosas. Acá tenemos 2 opciones.

1) Si hicimos las cosas bien y tenemos un excel ordenado y detallado, no es más que agregar un par de líneas y modificar otras, ¿Cómo nos damos cuenta en donde tocar? porque tenemos la explicación en la celda de al lado que dice “seguro/neumáticos/etc”, vamos y modificamos la celda de combustible y le agregamos los detalles del costo eléctrico.

Como habíamos probado todo, probarlo de nuevo no es tan dífícil, menos si las pruebas están en otro excel super detallado y nos dicen “este valor tiene que estar entre 10 y 12”, es cuestión de hacer los cambios, verificar la variación y listo.

2) ¿Qué pasa si hubiésemos optado por no documentar y no probar?

Bueno tendríamos un excel que no entiende nadie, y no nos quedaría otra que empezar a descular qué hay en cada celda, y eso es super engorroso y propenso a errores.

image

Ok, después de husmear una semana nos damos cuenta de que como hay una celda que tiene el número 54 y justo en esa fecha el costo del petróleo era de 54 dólares es muy probable que esa celda sea el costo del combustible, vemos el resto de la fórmula y tiene sentido, OK cambiamos esa entonces.

Tocamos en el lugar correcto? aha ni idea, creo que si.

¿Cuánto tiene que dar el valor del excel total? aha ni idea, no habíamos hecho pruebas antes así que no sabemos…

¿Cómo sabemos si el excel nuevo es correcto? no se, pero tenemos fe, usamos el paradigma de programación orientada a fe.

image

Lo mejor de todo!, ¿Aprovechamos ahora ya que entendemos el excel y de paso lo documentamos y guardamos las pruebas o nos la jugamos a que es la última vez que alguien nos pide un cambio y no gastamos tiempo en eso? (Entienden a donde voy no?)

Hay equipos que se la pasan haciendo cambios en un excel gigante sin documentar ni probar, y la única forma de hacer eso bien es depender de que los genios tengan todo en la cabeza y no fallen nunca. No digo que esté mal, funciona, pero… ¿Que pasa si uno de estos genios muere? al horno.

image

Puedo seguir eternamente con la analogía del excel. Pero creo que me comprendieron.

Hacer un sistema informático es parecido, hacer uno extremadamente simple es fácil y lo hace 1 personas y no requiere mucha documentación ni testing y es fácilmente modificable, pero cuando queremos algo 100 veces más grande la complejidad en coordinación, detalle y probabilidad de arrastre de error se hace cada vez más alta (y nuestro cerebro es limitado), por eso hay que hacerlo de la forma más profesional posible, para que, si después nos piden el mismo sistema pero 1000 veces más grande, podamos modificarlo y no depender del genio del excel que descule las fórmulas y en la virgen María a la cual le vamos a prender dos mil velitas para que esté correcto el resultado. 

En el mejor del los casos, si tenemos a algún genio, lo ponemos  hacer otro excel nuevo que lo va a divertir más y ampliar su conocimiento…. ni hablar si de repente se vuelve referente de ambos proyectos y de paso nos ahorramos contratar a un segundo genio y no va que la pase bien y recomiende el trabajo a sus amigos genios.

image