Qué hacer cuando mi compañero no trabaja

Ayer recibí esta consulta de un alumno:

Te escribo para hacerte una consulta, de algo que me viene pasando en todas las materias en las que tuve que hacer trabajos grupales.
El problema es que no sé como manejar el tema cuando mi compañero de grupo no hace las cosas, o las deja para último momento. Siempre trato de alentarlo y ayudarlo en sus dificultades, pero cuando la otra persona no se dispone se complica. A veces pienso en que debería «retarlo», porque es algo que nos afecta a ambos, pero ese es un rol que no me corresponde, yo no manejo sus tiempos ni demás.
Me imagino que con tu experiencia académica y en la industria te habrá pasado muchas veces. Te pido algún consejo, que seguramente me será de ayuda a lo largo de toda mi carrera.
….
¡Ja! Efectivamente he enfrentado este tipo de situaciones en reiteradas ocasiones.
Antes de entrar a ver posibles soluciones dejemos en claro el problema. A mi entender podemos tener dos situaciones:
  1. Mi compañero no trabaja
  2. Mi compañero trabaja, pero se traba y no logra completar su trabajo
Es importante hacer la distinción, pues la forma de abordar la situación puede ser distinta para cada caso.
Más allá de estas dos situaciones, la consecuencia suele ser que se genera cierta tensión en el grupo y a la larga el resultado es:
  1. Termino haciendo el trabajo yo solo (posiblemente trabajando mucho más de lo que debiera)
  2. No llegamos a cumplir con la consigna, lo cual suele acarrear un calificación negativa.
Luego de este análisis preliminar, veamos entonces algunas recomendaciones que a mi entender aplican a todos los casos.

1. Mejor prevenir que curar
Mi primer recomendación es mirar con quien armamos el grupo de trabajo. En este sentido soy de una postura conservadora: más vale malo conocido que bueno por conocer. Yo en estos contexto académicos prefiero trabajar con alguien que ya conozco, aún cuando sepa que tiene «ciertos defectos», pues ya sé a que atenerme y puedo planificar en consecuencia.

2. Organización del trabajo
Una vez que el grupo está constituido y la consigna del trabajo a desarrollar está clara, el grupo debería hacer una lista de tareas, estimarlas y planificarlas. Cuando digo planificar me refiero a determinar: quién hará la tarea, y cuando la hará. Esto implica que cada integrante asuma un compromiso. Si luego ese compromiso no es cumplido habrá que analizar que ocurrió ¿surgió un imprevisto?¿llevó más tiempo de lo esperado?¿o ni siquiera se comenzó a trabajar en la tarea?
3. Visibilidad
Por un lado es importante que cada miembro del grupo de visibilidad sobre el estado de sus tareas al resto de los integrantes. Pidiendo ayuda en caso de problemas y avisando en caso de retrasos.
Por otro lado, dependiendo de la materia, puede resultar útil e importante, dar visibilidad a los docentes de cómo avanza el grupo, pues para algunas materias (generalmente las de gestión) la interacción de los miembros del grupo de trabajo es parte de los temas de estudio.
4. Comunicación constante
No basta con dar visibilidad, esa visibilidad debe ser frecuente, sin temer a generar «spam», más vale que sobre a que falte.
5. Adaptación
Si damos visibilidad de forma frecuente, podremos ser capaces de detectar problemas y adaptar nuestros planes en consecuencia. Si un integrante del grupo no pudo completar sus tareas, entonces podremos repriorizar, hacer una sesión de trabajo conjunto o asignarla a otro miembro del grupo.
6. Trabajo de pares
Si bien puede parecer una pérdida de tiempo que dos personas trabajen al mismo tiempo en la misma tarea, la realidad es que en muchísimas ocasiones, esto permite avanzar mucho más rápido, pues al trabajar en parejas la gente se enfoca mucho más en la tarea en cuestión y si uno se traba tiene un compañero a su lado para ayudarlo. Herramientas como Google Hangout, Team Viewer y Skype permiten trabajar en forma conjunta estando físicamente separados.
Bueno, espero que estas recomendaciones les resulten útiles al lector y que no dude en contactarme si se encuentra en una situación que no sabe como manejar.

Batalla Naval en Algo3

La semana pasada publicamos el trabajo práctico final de Algo3 de este cuatrimestre. El trabajo consiste en la construcción de una aplicación que es una variante del clásico Batalla Naval.

Yo tengo a mi cargo dos grupos, de 3 alumnos cada uno. Ambos equipos estan trabajando en Java.  En la primera charla que tuve con los grupos fui bien claro respecto de la expectativas en la forma de trabajo. Hablé con ambos grupos juntos e hicimos un poco de «community programming» (una especie de pair programming pero de a muchos más) para hacer el setup del proyecto: crear estructura de carpetas, ant, etc, y codeamos la clase casillero haciendo TDD.

Luego les comparti un .zip de lo que hicimos para que lo tomaran como base. Eso les permitió no tener que andar «peleando» con Java y Ant y concentrase en lo importante para nuestra materia: la programación orientada a objetos.

 

Hay gente que miente, gente que roba y gente que no respeta las convenciones

Esta frase me surgió espontáneamente esta tarde mientras daba clase en Algo3. Sonó un poco extrema, a punto tal que motivó algunas risas, pero a esta altura del cuatrimestre los alumnos ya me conocen lo suficiente y saben que para mi no es chiste.

Con el correr de los años me doy cuenta que gradualmente me he vuelto cada vez más radical en algunos temas. Sin duda las diversas lecturas y prácticas de Extreme Programming han tenido algo que ver en esta cuestión.

Personalmente me he ido convenciendo que si una práctica es beneficiosa entonces llevarla al extremo maximiza los beneficios. Y estoy convencido que esto va mucho más allá del desarrollo de software.

Satisfacción del cliente más allá del entregable

Hace un tiempo comenté que estaba muy contento con mi experiencia como Producto Owner. Dicha experiencia positiva no se debió solamente a que recibí un producto acorde a mis expectativas, sino que también resultó fundamental la forma en que se desarrollo el proyecto. Yo suelo referirme a esto como «experiencia de cliente» y es lo que muchas veces hace la diferencia entre un proveedor de servicios de software y otro. Esta «experiencia de cliente» tiene que ver con cuán fácil le resulta al cliente trabajar con el proveedor y dado que me es difícil dar una definición concreta comparto algunas cuestiones que para mi son importantes para tener una buena experiencia de cliente:

  • El proveedor me da visibilidad contínua del estado del proyecto y los siguientes pasos
  • Cuando tengo inquietudes el proveedor me responde en tiempos razonables para mi negocio
  • El proveedor siempre está bien predispuesto a incorporar el feedback que le doy
  • El proveedor entiende las necesidades de mi negocio y sabe adaptarse a los cambios que este requiere

Todas estas cosas se cumplieron durante el desarrollo de SEAL y por ello mi experiencia como Product Owner fue muy positiva.

Creo que en parte, el haber cumplido con los puntos mencionados tuvo que ver en gran medida con metodologia de trabajo utilizada. Usamos un proceso tipo Scrum con las siguientes particularidades:

  • Iteraciones semanales
  • Una reunión de Demo/Planning semanal, de 1 hora, en la que primero repasábamos el trabajo realizado en la iteración pasada y luego planificábamos la iteración siguiente.
  • Luego de cada reunión de Demo/Planning el equipo enviaba dos mails:
  • Una retrospectiva cada X cantidad de iteraciones para mejorar dinámica de trabajo
  • Todo el tiempo el producto estaba disponible en un ambiente de prueba donde podía entrar a ver/probar funcionalidades
  • Ante cada situación que pudiera implicar un retraso o un desvio de expectativas el equipo me informaba para que tuviera la chance de repriorizar
  • Usamos una herramienta de gestión para administrar el backlog de proyecto
  • Utilizamos burndown charts para tener una visión del estado actual de la iteración y proyectar evolución

Sinceramente me he sentido muy cómodo trabajando de esta forma y por ello espero volver a trabajar así en futuros proyectos.

SEAL: Se buscan colaboradores

Si bien Aníbal y Martín han hecho un gran trabajo y tienen la intención de continuar colaborando con el desarrollo del producto, hay algunas cuestiones que requieren habilidades especiales o bien un esfuerzo importante.

Varias de estas cuestiones serán parte del alcance de algún futuro trabajo profesional de alumnos de Fiuba (ya hay algunos que han manifestado su interés), pero hay una cuestión en particular que dudo que alumnos «promedio» de Fiuba puedan manejar: la estética. Voy a ser sincero, la UI del sistema apesta, no sólo no es cómoda sino que tampoco es visualmente atractiva. Pero es algo que era de esperar, la formación que nos da Fiuba no trata estas cuestiones. Históricamente las casas de estudio de ingeniería se han ocupado que no falten en el plan de estudios materias de ciencia básica y ciencia aplicada, pero cosas de diseño y usabilidad, bien gracias. En fin, no perdamos el foco. El punto es que nos vendría bien contar con una mano de alguien que se dé maña con cuestiones de UI.

Por otro lado, la aplicación está hecha en Python, pero ni Aníbal, ni Martín, ni yo somos expertos en Python. Por esto nos vendría bien la colaboración de un experto Python para hacer una revisión de la aplicación y ver que hayamos aplicado apropiadamente las prácticas y convenciones del lenguaje.

 

Presentación formal del sistema de corrección: SEAL

El viernes pasado Aníbal y Martín realizaron la presentación formal del sistema de corrección de trabajos de programación y con ello completaron sus estudios para el graduarse de ingenieros en informática.

El nombre formal del sistema es SEAL: Sistema de Entregas Automatizadas Libre, un nombre apropiado en el sentido que representa lo que hace el sistema, pero desde el punto de vista comercial no tiene mucha onda (ya estamos trabajando en buscar un mejor nombre).

Como suele suceder en la presentación de los trabajos finales de carrera, la mayor parte de la audiencia son familiares de los alumnos que presentan y por lo tanto es poco lo que entienden de lo que se presenta. Siendo conscientes de esto, Aníbal y Martín prepararon una presentación muy didáctica para explicar su trabajo. Básicamente utilizaron la metáfora de un viaje a la luna para explicar el desafio que para ellos representaba hacer este trabajo de fin de carrera. Personalmente me gusto mucho la presentación, respeto los tiempo, resultó entretenida y expuso de forma adecuada el trabajo realizado.

Ha sido un gusto para mi trabajar con Aníbal y Martín, espero haberles aportado al menos un granito para su formación profesional. Al mismo tiempo les agradezco por haber confiado en mi para guiarlos en el trabajo.

¡Mi felicitaciones a los flamantes ingenieros!

presentacion_seal

El material utilizado en la presentación está disponible aquí.

Presentación formal del sistema de corrección

Llegó el gran momento, la presentación formal del sistema que significa no solo un hito en la vida del sistema como producto, sino que también es fin de una etapa para quienes lo construyeron: Martín y Aníbal. Con la presentación del sistema estos dos alumnos FIUBA terminan su estudios de Ingeniería en Informática. Por el momento, me limitó a copiar la invitación formal que se distribuyo entre la comunidad FIUBA y la semana próxima daré más detalles sobre la publicación del sistema.

El viernes 26/04 a las 18 horas, los estudiantes Aníbal Alejandro Lovaglio y Matín Mauro Zucchiatti presentarán en el Lab. E del Departamento de Computación su Trabajo Profesional «SEAL (Sistema de Entregas Automatizadas Libre)», que realizaron con la tutoría del Ing. Carlos Fontela y el Ing. Nicolas Paez como co-tutor.

Resumen:
El presente trabajo se enmarca en la problemática de corrección de trabajos prácticos en las materias de programación. La mayor parte de la producción a evaluar se trata de programas de computadora, y resulta claro que la funcionalidad de los desarrollos constituye el núcleo de la atención dedicada por los docentes a la hora de corregir las entregas. Sin embargo, esta porción del trabajo muchas veces hace perder tiempo valioso que debiera utilizarse para revisar aspectos conceptuales, como el diseño de las soluciones o la separación de incumbencias dentro de los distintos núcleos de abstracción de dicho
diseño. Es decir que muchas veces se invierte tiempo en ver que las entregas funcionen, o cumplan con casos de pruebas, pero lo que realmente importa no es que funcione, sino cómo está construido, y cómo funciona.
Existiendo ahora tantas herramientas que nos permitirían hacer esto de manera automática, es imperativo que se abandone el trabajo artesanal de testing y que se pueda dedicar el tiempo de los docentes en cosas que requieran del criterio de una persona.

Breve descripción de la metodología, indicadores, etc. que llevaron para su gestión
La gestión del proyecto se hizo usando una metodología basada en Scrum, pero adaptada a las condiciones del equipo de trabajo, ya que los tiempos dedicados al proyecto no eran regulares y la interacción entre los miembros del equipo está limitada por las circunstancias laborales de cada uno. De cualquier manera se usó el desarrollo guiado por user stories, y se midió el avance por burndown chart de proyecto.
El desarrollo del proyecto fue pensado en una única fase, con el objetivo del proyecto cumplido a su fin.
Se trabajó con un servidor de integración continua, que después de cada commit, compila, comprueba la sanidad del nuevo código y redespliega la aplicación, poniendo disponible la nueva versión.

Están todos invitados.

El desafio de liberar un producto

En estos dias estoy trabajando en la liberación como producto del sistema de corrección de tareas de programación que desarrollaron unos alumnos de FIUBA bajo mi dirección. El producto, desde el punto de vista técnico ya está listo, de hecho ya lo estamos usando en Algo3, pero liberarlo como producto requiere de ciertas cuestiones, que hoy en día me doy cuenta que no suelen ser parte de la formación académica (o al menos no lo fueron de la mia).

El primer lugar tenemos una cuestión legal: la licencia. Si bien tenemos en claro que queremos que sea open source, no tenemos en claro las diferencias entre las distintas licencias. Al mismo tiempo, ocurre que nuestro producto está basado en otros componentes de software que tienen ciertas licencias y que deberíamos respetar. Por último, si bien queremos que sea open source, queremos que quienes decidan extender el producto respeten ciertos condiciones, por ejemplo que lo desarrollado siga siendo open source.

Por otro lado si uno pretende que el producto tenga cierto grado de adopción, es necesario que los interesados en utilizarlo cuenten con información básica sobre las funcionalidades del producto, sus requerimientos para ejecución, el procedimiento de instalación, cómo proceder en caso de problemas, roadmap de producto, etc. ¡Ah! y un tema no menor, el manual de usuario, ya sea en formato tradicional de texto o en formato de video.

Al ser un producto open source, es posible que los potenciales usuarios quieran extenderlo y/o personalizarlo, en ese caso es necesario proveer información técnica comenzando por cómo armar un ambiente desarrollo para el producto.

Por último una cuestión no menor: el nombre del producto. Generalmente cuando uno arranca un proyecto le pone un nombre, pero el nombre del producto es algo conceptualmente distinto del nombre del proyecto. El nombre del producto impacta directamente en varias cuestiones como ser la URL del sitio del producto y los diversos elementos de márketing.

 

Cambiando la forma en que enseñamos: primero la tarea y luego clase

Generalmente el docente dicta una clase y luego le da a los alumnos algún texto para profundizar/repasar el tema visto en clase. Casi sin quererlo la semana pasada invertí esta dinámica y obtuve interesantes resultados. Paso a explicar:

Resulta que la semana pasada en EIS comenzamos a estudiar las técnicas y herramientas de análisis. Vimos modelado de dominio, diagramas de estado, visual story mapping y teníamos que ver también user stories. Como no nos alcanzó el tiempo para ver este último tema, les dije a los alumnos que lo investigaran por su cuenta.

La clase siguiente abordamos el tema de user stories, pero dado que los alumnos ya habían investigado al respecto, los invité a que ellos mismo preparan una clase al respecto. Salí del aula para buscar un café y los dejé para que prepararan la clase. Al regresar, expusieron el tema de una forma que me sorprendió, la exposición fue correcta y bastante completa. Faltó mencionar algunas cosillas, pero sinceramente estuvo mucho más completa que lo que yo había esperado.

Una vez finalizada la exposición de los alumnos, volvimos a repasar los conceptos vistos, profundizando en algunos puntos, destacando otros y mencionando algunas cosillas que habían faltado.

La experiencia me resultó por demás interesante y estoy convencido que a los alumnos les resulto más entretenido y al mismo tiempo el tema les quedó mucho más claro.