Product Crafter Emilio Carrión
English
Spanish

Programar es como cocinar

Tienes que mantener la cocina limpia

Desarrollar software es, en muchos aspectos, parecido a cocinar. Sigues una serie de instrucciones y buenas prácticas llamadas recetas para coger un conjunto de ingredientes y crear algo nuevo. Y, al igual que cuando cocinas, desarrollar crea desperdicio y suciedad que hay que ir limpiando a la vez que se avanza.

Cuando la cocina se ensucia

Imagina que estás en tu cocina, preparando la cena. Hoy se te ha antojado ese plato que tanto te gusta pero que es muy elaborado de hacer. Ya que tenías parte de la tarde libre has decidido darte un capricho y cocinarlo.

Empiezas con la tabla de cortar, sigues con la batidora, las sartenes, las ollas. Poco a poco vas usando y ensuciando cada una de las herramientas de las que dispones. Harina por aquí, salsas por allá, todo va quedando perdido.

Y, depende del tipo de cocinero que seas, pueden ocurrir dos cosas.

Si eres el tipo de persona a la que le gusta tener todo ordenado y limpio seguramente ya hayas empezado a limpiar los cacharros conforme los has ido utilizando. Has ido recogiendo, fregando y guardando cada cosa que usabas manteniendo así la cocina ordenada.

Por otro lado, puedes ser del tipo de persona que no es tan ordenada (yo soy de estos), que ha ido usando y dejando por ahí los cazos y las cucharas llenas de restos que ahora ocupan gran parte de la encimera. Sin embargo, te ha quedado una comida riquísima. Estás satisfecho con el trabajo. Ahora toca recoger todo mientras la comida reposa. Limpias y guardas lo que has usado y sales de la cocina.

Cuando no la limpias

Pese a lo que os podáis imaginar, ambos estilos de cocina están bien. Cada persona tiene su forma de hacer las cosas y el resultado ha sido el mismo: una cena bien hecha.

Al día siguiente llegas de nuevo (seas del tipo de cocinero que seas) y la historia vuelve a comenzar. Ollas, sartenes, otra cena bien hecha.

Sin embargo, hay un tercer tipo de cocinero.

Imagina que eres del tipo desordenado, pero al final de tu hazaña cometes un error muy grave. Te vas sin recoger y limpiar la cocina. Dejas todo por medio lleno de restos de comida.

Aunque te vas igual de feliz, porque al fin y al cabo el resultado ha sido el mismo: una cena bien hecha.

Cuando vuelves a ella

El problema viene cuando vuelves a la cocina al día siguiente. Justo el día que vienen tus padres a cenar, tiene que quedar todo perfecto.

Llegas a la cocina y te encuentras con el empastre. Maldices por un momento a tu yo del día anterior y empiezas a limpiar.

Conforme vas apilando cacharros bajo el grifo te das cuenta de algo importante. Al dejar los restos de comida todo el día ahí se han resecado y te está costando demasiado limpiarlos, ni siquiera con agua caliente. Miras el reloj. No te da tiempo, tus padres están al llegar. Ya te imaginas la cara de tu madre al ver el panorama.

Si hubieras limpiado el día anterior no estarías en esa situación.

Cocinar es como programar

Pues desarrollar software es lo mismo, por gracioso que parezca.

Cuando programamos, muchas veces tomamos atajos. Hacemos las cosas de una forma rápida para sacar funcionalidades y validar nuestro producto. En el camino generamos desperdicio y ensuciamos nuestro código al igual que hacemos con nuestra cocina.

Este desorden se manifiesta a menudo en forma de deuda técnica y complejidad accidental. Sin embargo, no es malo por sí solo, es un precio que pagamos para desarrollar de una manera más ágil e iterativa. Es a lo que podemos llamar código de prototipado.

El problema viene cuando actúas como el tercer tipo de cocinero, que genera desperdicio y caos y luego se va de la cocina sin mirar atrás. Cuando vuelves a ese código que no has limpiado te das cuenta del grave error que has cometido. El sprint te cae encima y tu equipo llama a la puerta esperando ver las nuevas funcionalidades terminadas. Tú, mientras tanto, sigues limpiando el estropicio que dejaste ahí la última vez que estuviste por esa parte del código.

Por eso, hemos de ser conscientes de la deuda que generamos y hemos de actuar como los dos primeros tipos de cocineros. Podemos ser más o menos ordenados de entrada, hasta que tenemos nuestra cena hecha, ese no es el problema. La clave está en que, después de haber acabado, y antes de salir corriendo de la cocina, hemos de hacer un repaso a nuestro entorno de trabajo y dejar las cosas más o menos ordenadas.

Así, la próxima vez que nos asomemos por ahí, no nos pasaremos una semana entendiendo y limpiando código para atacar los nuevos cambios.

Haciendo eso estaremos convirtiendo nuestro código de prototipado en código productivo que puede sobrevivir a ser cambiado en el futuro.

Así que tanto la próxima vez que cocines, como la próxima vez que programes, ten en cuenta limpiar antes de acabar e irte. El yo del futuro de lo agradecerá.

TL;DR

Imagina que has cocinado una deliciosa cena, pero al terminar, dejas la cocina hecha un desastre. Al día siguiente, cuando necesitas usarla de nuevo, te enfrentas al caos y a una tarea aún más ardua: limpiar los restos secos y los utensilios abandonados.

Lo mismo sucede con el código. A menudo, en nuestro afán por terminar rápidamente una tarea, dejamos un código desordenado y lleno de atajos. Esto puede funcionar temporalmente, pero a la larga, volveremos a ese código y nos encontraremos luchando con el desorden que hemos creado.

Es esencial dedicar tiempo a limpiar y organizar nuestro código antes de pasar a la siguiente tarea. Al hacerlo, convertimos nuestro código de prototipado en código productivo que puede mantenerse y modificarse fácilmente en el futuro.

Así que la próxima vez que te encuentres terminando una tarea de desarrollo, recuerda la importancia de limpiar antes de irte. Tu yo del futuro lo agradecerá cuando vuelva a necesitar trabajar en ese código.