El objetivo del refactoring era optimizar el uso de memoria de la aplicación, corregir algunos bugs (que ya me tenían fuera de quicio) causados por los múltiples hilos de ejecución internos que existían, y disminuir el tiempo de carga. De casi 4 GB de memoria (yes, ¡4 GB!) todo quedó en 1 GB, y de casi 5 minutos de demora, ahora el sistema carga en 75 segundos.
Mi compañero de armas estaba asignado a otro proyecto mientras yo "recomponía" la aplicación, así que no tuvo la oportunidad de participar en la tarea. Sinceramente todos (incluyéndome en la lista) estábamos bastante escépticos de los resultados de semejante proyecto. El problema principal era descubrir la fórmula de cómo decirle a IBM algo así: "lo siento mucho, pero hasta que no termine no puedo darte más actualizaciones", y una vez respondida dicha interrogante (respuesta: "con IBM te jodes, pero no puedes decirle eso") tienes que apelar a tu conciencia de viejo zorro, subirte las mangas, tragar en seco y comenzar por el principio...
Después de los aplausos y el brindis, mi copiloto preguntó: How did you do that?. ¿Cómo se puede hacer un refactoring tan grande sin echarlo todo a perder? ¿Cómo se puede seguir el hilo? ¿Cómo se puede entregar un nuevo release cada día cuando literalmente se están haciendo cambios en las mismas entrañas de la aplicación? La respuesta es simple: yo lo llamo "one foot at a time" o en español "desarrollo paso a paso". En teoría es muy simple, pero la vida me ha demostrado viendo a otras personas (y mirándome a mí mismo) que ejecutarla correctamente es extremadamente difícil.
"One foot at a time" consiste en cambiar una sola cosa a la vez. Los seres humanos no somos computadoras. Nuestro cerebro es pequeño, imperfecto, y propenso a distraerse con la primera mosca voladora que nos pasa por al lado, así que tenemos una tendencia casi irresistible a cometer errores y jodernos el día. Pasito a pasito incrementamos las posibilidades de éxito. Cambia poquito, prueba, cambia otro poquito, prueba...; no hay manera de echar a perder la cosa. Si algo no funciona, pues simplemente tenemos que corregir en el último "cambia poquito" y ya está. Bien fácil... al menos en teoría.
La realidad, sin embargo es bien distinta: cuando estamos allí, monitor delante, y un mar de líneas de código que no nos gustan, caemos constantemente en la tentación de cambiar por doquier todo lo que no pinta bien. A la misma vez..., todo de un solo golpe... y saquen el pañuelo y empiecen a llorar pues se acaba de enredar la cosa.
Y no solo pasa cuando tenemos que cambiar algo... pasa también cuando tenemos que trabajar en esa lista de tareas pendientes que acabamos de recibir por email. No entiendo como las manos se mueven solas para trabajar en las tareas 3, 5, y 8 a la misma vez. O 2, 4, y 7. Y no importa realmente cuán complejas sean... lo que importa es que las estamos adelantando todas a la misma vez... o eso creemos.
Y la mayoría de las veces se vuelve peor. Empezamos 3 tareas a la vez y llega un momento en el que estamos tan perdidos que no sabemos ni siquiera cómo diablos apagar la máquina pues hasta el botón se nos pierde entre tanto reguero. Y, por supuesto, ninguna de las 3 tareas queda completa. Un poco de la primera, casi todo de la segunda, y algunos detalles de la tercera. ¿Pero completa? Ninguna.
Suena estúpido, yo sé, pero como ejercicio analice cada uno de ustedes el trabajo que hace durante un día de desarrollo. Anoten todas las veces en que tratan de cambiar dos cosas a la misma vez, o de "adelantar" dos tareas en paralelo. Si alguno descubre la hoja en blanco al final del día, viene a los comentarios de este artículo, me pone sus datos y yo le mando una Coca Cola y dos chicles de regalo por buen comportamiento escolar. Chances are that I'm gonna keep the Cokes for myself.
La mala noticia de toda esta historia es que esta manía de querer abarcarlo todo a la misma vez es tan pegajosa como la Cola Loca, y tan difícil de dejar atrás como la novia babosa de High School. La buena noticia es que se logra con disciplina y práctica. No hay que ir a la escuela ni leerse 100 páginas de muela. Esto se resuelve como los alcohólicos:
- Primer paso: "Soy un borracho"
- Segundo paso: "Soy un borracho de mierda"
- Tercer paso: "Tengo que parar de beber"
- Cuarto paso: "No bebo más ni carajo"
- Quinto paso: Donde el tipo se jode de verdad y no toca más el alcohol
Me imagino que se lleven la idea. Y a pesar que no estamos hablando de alcohol (aunque el título del post indique lo contrario), el "yo-cambio-todo-a-la-misma-vez" es tan dañino profesionalmente como este.
Por último, cuando se deja de estar enfermo (y justamente cuando nos damos cuenta de ello), misteriosamente el valor y confianza en nosotros mismos salen disparados hacia el techo. A partir de allí no existe nada que no podamos cambiar, no importa cuán grande sea. Todos esos enredos que Pepito formó cuando estuvo trabajando en el proyecto pueden empezar a contar sus días, porque... aquí voyyyyyyyyyyyyyyyy.
Quiero dejar el alcohol!!!
ReplyDeleteEsto ya estuvo muy bueno.
Conmigo te ahorras la coca cola, aunque eventualmente espero ganármela. Me alegra que vuelvas a programar.
ReplyDeleteEsa es la idea: tratar de ganarse la Coca Cola :)
ReplyDelete