Etiquetas

, ,

No sé si os pasa a todos, yo creo que sí, pero tenía serios problemas de organización y productividad en el desarrollo de Menéame. Quizás sea un caso especial, es un sistema complejo:

  • software relativamente grande y soy básicamente el único programador responsable de todos los módulos,
  • diversidad de lenguajes, PHP para la web, Python para scripts y programas «off line», Perl por herencia de hace años,
  • base de datos grande e imposible de hacer alteraciones de las tablas por el tamaño de las mismas (ya veremos con el MySQL 5.6),
  • mucha manipulación de datos en la base de datos,
  • interacciones complejas de usuarios,
  • muchos controles de entradas y acciones de usuarios «externos»,
  • los usuarios piden muchas modificaciones, correcciones y detectan bugs que ni se te pasaron por la cabeza que podían ocurrir,
  • cada vez que se implementa una nueva característica (cada vez más complejas), aparecen nuevos bugs y sobre todo, los usuarios demandan muchas modificaciones y ań nuevas características complementarias.

Con todo esto, a veces me ocurría que me bloqueaba porque no sabía por dónde comenzar, o que pasos seguir, o cuál era el trabajo pendiente, cuáles son importantes, cuáles son urgentes, y cuáles secundarios que pueden esperar hasta tener ese momento de inspiración. Soy bastante desorganizado, y odio profundamente usar programas (los tipos «gestión de tickets») para esto. Ya demasiado tengo con ventanas de editores, consolas de administración y páginas de manuales para encima tener que estar buscando una ventana perdida para ir leyendo y apuntando lo que estoy haciendo.

Así que hice lo natural para mí, la pantalla del ordenador es para las herramientas fundamentales para programar, la gestión «personal» fuera de la pantalla. Eso es, gestionarla con papel y boli, que siempre tengo al lado del teclado y me resulta más cómodo y hasta me ayuda mucho a ordenar las ideas. Hace unas pocas semanas me metí en un trabajo muy gordo, programar los subs de usuarios y decidí ser estricto en apuntar todo. Pero no sabía cómo hacerlo, hasta que se me ocurrió una idea sencilla y que la practiqué rigurosamente. Tengo un  cuaderno y apunto allí dos secciones diferentes.

En la primera voy apuntando todas las funcionalidades que debo implementar. Éstas no dejan de crecer, fundamentalmente por lo que piden los usuarios. El orden es estricto, siempre a continuación. Apunto qué debo implementar y luego agrego marcas o comentarios al margen sobre su urgencia, dependencias, es importante (esto es con una flecha), etc. Escribo con letras grandes y dejando suficiente espacio, no me entran más que unas 5 a 8 notas por página.

Anotaciones de trabajos pendients

Es muy importante que cada tarea a hacer sea autocontenida y que no requieran más de unas pocas horas de programación. Si requieren más de 4 u 8 horas, las especifico con menor granularidad. Cada día releo la lista completa, y voy tachando las que he terminado (no sólo ayuda a organizar, también motiva y hace sentir bien el ir eliminando las tareas). Esto no tiene nada de especial con lo que se hace en cualquier software de tareas o tickets, salvo que está en papel y no en la pantalla. No sé al resto de la gente, pero nunca pude gestionar estas listas con programas.

Lo importante es lo siguiente. Al sentarme a programar selecciono qué tarea hacer, y en el siguiente folio a la lista de tareas apunto:

  • una pequeña subdivisión de lo que debo programar (si es complejo),
  • qué debo verificar (por ejemplo «controlar asignación variable x», «ver dependencias con top-link.py», «probar funcionalidad x», etc.),
  • cualquier duda que tengo sobre lo que estoy haciendo,
  • tachar lo escrito como pendiente o que tenía dudas y las he solucionado,
  • si tengo que interrumpir el trabajo por alguna razón, apunto qué estabas mirando en ese momento,
  • arranco el folio del cuaderno una vez acabado el trabajo.

La tarea actual

Al  hacerlo en la página siguiente a la lista de tareas pendientes me obligo a no hacer crecer esa lista hasta que haber acabado la actual (o al menos a no agregar más allá del espacio libre que te queda en el folio). Al apuntar las dudas y problemas evito introducir (aún más) bugs porque me olvidé de verificar algo, o de tener en cuenta las dependencias. El apuntar lo que estaba haciendo antes de alejarme del ordenador es de gran ayuda para, junto con las otras notas anteriores, ubicarme rápidamente en lo que estabas haciendo.

Cuando acabo tarea, arrancar el (o los folios) es  un gran motivador y «golpecito en la espalda», es como quitarte un peso de encima y me hace sentir bien por el trabajo hecho. Es serio, lo de arrancar el folio es clave. Además, ahora puedo volver a mirar la lista de tareas pendientes, tachar lo que acabo de hacer y decidir la siguiente.

Algunos podrán pensar que es una desventaja tener que recorrer varios folios (tampoco debes permitir tener más de unos pocos) hasta encontrar la nota que debes tachar cuando la has acabado, pero para mí es una ventaja: me obliga a leer las cosas pendientes, y me sirve otra vez para priorizar y darme cuenta en dónde estoy.

Bueno, quizás esto sea una tontería, pero después de muchos años programando, encontré un sistema que no me molesta, que me ayuda a organizar y a concentrarme cuando me vuelvo a sentar a programar, y que me hace sentir bien al acabar cada trabajo. Y es muy fácil, sólo un cuaderno de los pequeños, el overhead es mínimo, muy útil y eficiente, y no te vuelve loco con tanta pantalla y demoras para abrir programas o cargar desde sitios remotos.

Además, cuando estoy agobiado, puedo leerlo y hacer anotaciones en el baño. Es más útil que tuitear 😉