Sobre story points, horas y demás yerbas de estimación

Ayer en una clase de Ingeniería de Software en @untref un alumno me consulto sobre «la tendencia a dejar de utilizar story points».

En lo personal desconocía esa tendencia, pero si me constan un par de cuestiones al respecto de los story points.

  1. Los story points son uno de los artefactos peor entendidos y más mal utilizados de la ingeniería de software. Ejemplos clásico: gente que estima en story point para luego «traducirlos» a horas.
  2. Los story points son herramientas surgidas en un contexto con ciertas condiciones, valores y principios. Como suele ocurrir, utilizar una herramienta fuera del contexto y las condiciones en las que fue pensada, podría no dar los resultados esperados.
  3. En lo personal me animo a decir que me han resultado una herramienta útil pero que hoy en día, intento no utilizarlos. Los story points nos ayudan a lidiar con ítems de distinta complejidad/tamaño. Si logramos particionar los ítems de forma tal que todos tengan «el mismo tamaño», entonces podremos directamente hablar de cantidad de ítems y prescindir de los story points.
  4. Lo que definitivamente no me ha funcionado es estimar/planificar utilizando horas. No digo que no funcione en general, sino que a mi, con el conjunto de prácticas que utilizo(pair-programming, mobbing, gestión de alcance variable, etc), no me funciona. Más aún, en un punto resulta incompatible.

En fin, cada médico con su librito.

Infra para TPs

Desde que comencé a dictar la materia Ingeniería de Software (allá por 2012), siempre apunté por un enfoque muy práctico y lo más parecido posible a la práctica profesional. Entre otras cosas esto implica construir software y ponerlo a correr, en nuestro caso en un ambiente cloud. Para esto he utilizado distintas herramientas/servicios/plataformas a lo largo del tiempo. Comencé con Heroku, luego Okteto , fly.io, Azure y Render. También hay algunas otras que evalué y que por uno y otro motivo descarté sin llegar a utilizarlas en el curso.

Siempre he procurado utilizar servicios que resulten gratuitos para los estudiantes, llegando incluso a pagar yo mismo por el servicio.

Hoy en día estoy usando tres plataformas Render , Neon y un Kubernetes sobre Digital Ocean. En caso de Render y Neon, ambas ofrecen un free tier. Mientras que en el caso de Digital Ocean es posible acceder a 200 dólares de crédito si se cuenta con el GitHub Student Developer Pack. Esta oferta de GitHub incluye un interesante set de recursos gratuitos para estudiantes entre los que se incluyen cursos, licencias y accesos a servicios como Heroku, Digital Ocean y Azure entre otros.

Iniciativa: «El estado de TDD»

Mis colegas residentes en España, Matheus Marabesi y Emmanuel Valverde Ramos, ambos practicantes y estudiosos de TDD, están llevando adelante una encuesta sobre el uso de dicha técnica. En realidad esta encuesta es parte de una iniciativa más amplia que empezaron tiempo atrás: https://thestateoftdd.org/.

Creo que la encuesta es un recursos valioso para todos aquellos que practicamos TDD o que intentamos investigarlo, por ello invito a todos aquellos que practican TDD o que tal vez no lo practican pero les gustaría hacerlo, a que completen la encuesta disponible aquí.

Nuevo proyecto: DevCamp

La semana pasada comencé un nuevo proyecto con uno de mis clientes favoritos. De forma muy resumida me dijeron: «Necesitamos que entrenes a estos jóvenes profesionales que recientemente se unieron a la organización y que a la pasada resuelvan esta problemática de negocio»

No es la primera vez que hago un proyecto de este tipo, en el pasado desarrollé iniciativas similares para Auth0, Onapsis y Southworks. Este tipo de proyectos es sin duda mi preferido, está en muy alineado con lo que hago en la universidad y sinceramente creo que me sale bien (esto lo digo basado en el feedback de participantes e involucrados).

Esta iniciativa tiene como objetivo que los participantes puedan sumarse a un equipo y trabajar con cierta autonomía, aportando valor de manera armónica sin generar ruido en el equipo. Esto requiere tener ciertos conocimientos técnicos y ciertas habilidades «blandas». En este contexto trabajamos sobre prácticas tales como: versionado, coding conventions, Test-Driven Development, Specification By Example, estimación, reporte, versionado e integración continua, diagnóstico y troubleshooting entre otras.

El proyecto recién comienza y durará entre 6 y 8 semanas al cabo de las cuales esperamos que los participantes se sumen a equipos de de desarrollo de la organización. Continuará…

Proyecto trunco: Devs No Ops

La semana pasada cerré un proyecto que había comenzado a mediados de julio. Quien me contrató fue el gerente del área de desarrollo y la idea era ayudar a mejorar el proceso de delivery implementando prácticas de lo que comúnmente se denomina «DevOps» (automatización de pruebas, builds, deploys, etc, etc).

Propuse hace un primer piloto (formalizado en la contratación de un paquete de horas) trabajando con uno de los equipos de desarrollo para entender la dinámica de software delivery de la organización. El panorama parecía prometedor pues detecté muchas oportunidades de mejora tanto en el área de desarrollo como en operaciones y por ello decidimos hacer un acuerdo de trabajo hasta fin de año.

Ya desde el comienzo el trabajo con el área de operaciones no parecía fácil, bastante resistencia y excusas diversas amparadas en regulaciones del sector. Sin embargo, confiaba en poder «subirlos al barco», pues ya he lidiado con escenarios de este tipo en varias ocasiones.

Lamentablemente, no logramos que operaciones «se suba al barco». Más aún, en un punto es como que decidieron patear en contra, negando permisos, dilatando decisiones e ignorando pedidos. Nunca me había pasado algo así. Con lo cual logramos implementar algunas mejoras con los equipos de desarrollo (versionado, análisis estático de código, automatización del build, etc, etc) pero fue muy poco lo que pudimos avanzar más allá de las prácticas que los developers realizan en sus máquinas de desarrollo. Obviamente que tampoco pudimos avanzar en las cuestiones de colaboración dev<->ops que se plantean dentro del paradigma DevOps. Es por esto que un proyecto que inicialmente estaba pensado para durar hasta diciembre, decidimos cortarlo en octubre, el contexto organizacional no estaba listo aún para encarar una transformación de este tipo.

Como siempre, intento ver el vaso medio lleno y por eso incluso en este caso que bien podría interpretarse como un proyecto fallido creo que hay lecciones aprendidas, las dos más importante que me llevo en este caso son:

  • Reafirmo que si el área de «Ops» no compra, es muy poco probable llegar a buen puerto. A partir de esto, yo debería asegurarme que la gente de Ops esté involucrada desde el momento cero (incluso antes de confirmar la contratación).
  • Si la organización no se percibe como una empresa de tecnología, tal vez sea mejor no meterme, mi forma de trabajo no calza bien en esos casos. Como me dijo una vez mi colega Sergio Villagra, hay proyectos que mejor no hacerlos 🙂

Clase abierta bancando la #EducaciónPública

A partir del veto de la Ley de Financiamiento Universitario se están desarrollando diversas actividades en las universidades nacionales.

Es por eso que hoy, luego de más de 20 años de docencia universitaria, di por primera vez una clase pública. Luego de hablarlo con mi equipo docente decidimos que era el momento y la forma más apropiada de hacer visible nuestra posición y nuestro apoyo al reclamo universitario.

Configuramos el aula pública con una pizarra móvil y los escalones de explanada a modo de asiento. Con el ruido ambiente de la Avenida Paseo Coló, nuestra clase de Ingeniería de Software 2 comenzó a las 8:00 AM. Éramos los únicos en la explanada de la facultad pero hacia las 9:00 AM se fueron sumando otros cursos.

En la clase me acompañaron Kevin, Joaquin y Alejo, miembros de mi equipo docente. El tema que abordamos fue medio conceptual y bastante polémico: hablamos de modelos de branching, integración continua, trunk-based development y monorepos.

Creo que a pesar de la constante amenaza de lluvia, la clase salió muy bien en parte porque no llovió.

Como la situación no mejore, me temo que volveremos a repetir la experiencia.

Sobre la investigación en Informática

En estos tiempos en que la educación y sistema científico Argentino están sometidos a desfinanciamiento y cuestionamientos varios, quiero compartir un poco de información general y algunas cuestiones de mi caso.

Al hacer investigación, en primer lugar uno debe encontrar un tema de investigación y debe empezar a estudiar para encontrar algún punto concreto donde potencialmente hacer un aporte. Ya estudiar un tema implica recursos, de mínima hay que leer publicaciones científicas, las cuales en su gran mayoría no son de acceso gratuito. En general los centros de investigación y universidades suelen tener suscripciones pagas para poder dar acceso a sus investigadores. En Argentina, hay ciertas suscripciones cuyo acceso lo gestionaba el ministerio de ciencia y técnica y lo disponibilizaba para diversas instituciones públicas. En este momento, varias de esas suscripciones han caído (no las renovaron). En fin, de alguna forma el investigador estudia, encuentra una idea dónde hacer un aporte y comienza entonces «el camino hacia el aporte». Esto que describo aquí de forma lineal puede no ser tan así, dependiendo del caso puede ser una cuestión más «iterativa», con idas y vueltas.

Ya teniendo un tema (o al menos una pista de por dónde ir) hay que poner manos a lo obra, lo cual puede implicar actividades muy distintas dependiendo del área de investigación. En mi caso, yo trabajo en Ingeniería de Software Empírica, lo cual no suele requerir ningún equipamiento particular, ni compuestos químicos, ni tampoco un laboratorio. Nos basta con una computadora. En este sentido podríamos pensar que para mi caso esta parte del trabajo es relativamente «barata» en términos comparativos con otras disciplinas. Básicamente trabajamos con gente y con datos. Puede que necesitemos de algunas herramientas no gratuitas (software licenciado, algún servicio online, etc), pero en general de costo bastante accesible (algunos cientos de dólares). Es importante destacar que dentro de la informática hay otras temáticas muy distintas (por ejemplo todo lo relacionado a Inteligencia Artificial) y que pueden tener necesidades de recursos/infraestructura también muy distintas.

No voy a entrar en detalles pero básicamente aplicamos el método científico y en algún punto llegamos algún hallazgo que consideramos que agrega valor y «expande la frontera del conocimiento». Es momento de publicar, pues según las reglas del sistema la real medida de avance es la publicación. Escribimos un artículo y lo enviamos a una conferencia o a una revista. La publicación tiene dos objetivos: validación y difusión. Para publicar, ya sea en una conferencia o en una revista, hay que pasar por un proceso de revisión por pares. Los revisores evaluarán nuestro artículo considerando diversas dimensiones que obviamente incluyen el valor de nuestro aporte, pero también la rigurosidad del proceso de investigación y la presentación (o sea, qué tan bien escrito está el artículo). En el «caso feliz», nuestro artículo será aceptado para publicación lo cual nos pondrá muy contentos pero traerá seguramente aparejado un desembolso de dinero. En el caso de las conferencias tendremos que afrontar los gastos de la participación en la conferencia que básicamente son la inscripción y la logística de participación (traslado, alojamiento, viáticos, etc). Simplemente a modo de ejemplo: en agosto participé del CLEI 2024, una conferencia internacional que se realizó en Bahía Blanca. Tuve que viajar a Bahía Blanca y alojarme allí 2 noches. Asimismo la inscripción me costo 260 dólares. Redondeando tuve un gasto total de 400 dólares, de los cuales 340 salieron de mi bolsillo. La universidad solo me pudo aportar unos 60 dólares. Claro que hay conferencias más económicas pero también las hay más caras. Personalmente he participado en conferencias de 100 dólares y en conferencias de más de 1.000. Asimismo he participado en conferencias en Argentina, Brazil, Bolivia, Escocia, España y Finlandia y en todos los casos la mayor parte de los costos los afronte de mi bolsillo. A diferencia de lo que suele ocurrir con las conferencias de industria, donde los speakers tienen la entrada bonificada y en ocasiones también algunos viáticos, en las conferencias académicas hay que pagar, sobre todo los autores deben pagar pues el proceso de publicación no es gratuito. Publicar en una revista, puede en algunos casos, resultar menos oneroso, pues no hay costos de logística ni inscripción, pero en general hay que pagar a la revista. Si bien hay revistas en las que puede publicase gratuitamente, hay muchas otras en las que el costo publicación requiere un desembolso. Un costo implícito en todo este proceso es el tiempo que deben dedicar los investigadores, un tiempo que hoy en día en Argentina es remunerado muy pobremente.

Hoy sí marcho, #UniversidadPública

No suelo hacer paro ni tampoco marchar en movilizaciones. No es que no adhiera a los reclamos que motivan estas acciones, sino que simplemente no terminan de convencerme este tipo de expresiones. Dudo de su efectividad.

Sin embargo hoy sí marcho porque creo que estamos en un situación insostenible, sin precedentes y muy riesgosa. No para mí en particular sino para nuestra sociedad en general. Los hechos concretos son que los salarios docentes (y creo que los no docentes también) no han tenido actualizaciones relevantes y acorde a la inflación del último año. Esto ha provocado una pérdida muy importante del poder adquisitivo. Asimismo ha traído como consecuencia que ya tengamos docentes dejando sus puestos en la universidad pública, ya sea para trabajar en universidades privadas o incluso en universidades del exterior. Y ni hablar de la situación de los investigadores. Conozco casos concretos, con nombre y apellido, y temo que este fenómeno se generalice. Aún cuando el gobierno diga que no piensa cerrar las universidades públicas, la realidad es que las está desfinanciando (al igual que hace con otros sectores).

Sin duda hay cuestiones a mejorar pero la actitud del actual gobierno no va en línea a mejorar nada. La universidad pública, a pesar de todas las falencias que pueda tener, ha sido siempre uno de los pocos caminos de movilidad social e igualación de oportunidades. Y esto para mí está hoy en día en riesgo.

Claro que uno puede entender la situación «excepcional» del país, pero sinceramente parece que la cuestión se extiende mucho más allá. El gobierno actual, no solo no otorga financiamiento suficiente sino que tampoco da visibilidad hacia adelante. Creo que la situación podría ser distinta si el gobierno dijera «hoy no hay plata y debemos ajustar, pero el año próximo restauraremos el presupuesto«, pero no es el caso, ya que en el presupuesto presentado para el año próximo nada se ve de esto. A esto se suman las mentiras de los funcionarios que pretenden desacreditar el reclamo y que no hacen más que generar violencia. Comparten cifras incorrectas que nada tienen que ver con la realidad.

Y no me vengan con ganzadas del tipo «¿Y porque no te marchaste contra gobiernos anteriores?«, porque la situación actual no tiene precedentes como tampoco la tiene la actitud impresentable de los funcionarios hablando sin saber y mintiendo.

Trabajo en la universidad pública desde hace más de 20 años. Vengo haciendo toda la carrera docente escalón por escalón. Comencé como colaborador no rentado, luego fui ayudante de segunda (mientras era estudiante), ayudante de primera (cuando me recibí), concurse como JTP y finalmente hoy en día soy profesor adjunto. Actualmente trabajo en dos universidad públicas (UBA y UNTreF), en un caso con dedicación simple y en el otro semi-exclusiva, son unas 30 horas semanales que reparto entre docencia, investigación y extensión. Tengo excelentes evaluaciones de los cursos a mi cargo, dirijo trabajos finales de carrera y colaboro en el consejo asesor del departamento. Desde el año 2016 trabajo en investigación, publicando consistentemente 2 o 3 artículos artículos formales cada año. Así y todo, mi salario apenas llega a cubrir la canasta básica. No es sostenible. Personalmente tengo la posibilidad de trabajar en el sector privado y hoy en día la informática es una actividad muy bien paga, pero no ocurre lo mismo con todas las disciplinas. Hoy colegas que la están pasando muy mal y lo que se está destruyendo hoy en día puede llevar mucho tiempo recuperarlo.

Es por todo esto, por mis colegas docentes, por mi estudiantes, por mis hijos y por nuestra sociedad que hoy marcho a defender la universidad pública.

Libro: Hexagonal Architecture Explained

Hace un par de días terminé de leer este libro, escrito por el mismo Alistair Cockburn, descubridor de este patrón. Curiosamente la publicación inicial fue hace unos 20 años en algunos artículos informales. A lo largo de todos esto años fueron apareciendo diversas publicaciones sobre la arquitectura hexagonal, algunas de ellas del propio Alistar, pero recién hace un par meses fue publicado este libro.

El libro está muy bien. Explica claramente la técnica/patrón, no solo desde un punto de vista práctico y con ejemplos de código sino también desde un punto de vista conceptual.

Lo leí en el kindle con lo cual no tengo en claro la extensión del libro pero creo que aproximadamente la mitad del libro son reproducciones de artículos previamente publicados con algunas correcciones/comentarios. No pretendo hacer un juicio sobre esto, solo describo el hecho.

Una cuestión que me gustó mucho del libro es que deja bien claro el alcance del patrón lo cual me parece muy necesario ya que he visto muchas publicaciones de otros autores incluyendo cuestiones que claramente no son parte del patrón. Un ejemplo muy habitual de esto es decir que el interior del hexágono (o sea la lógica de negocio) se estructura de acuerdo a un estilo Domain-Driven Design, algo que yo suelo hacer pero que está más allá de la arquitectura hexagonal, o sea, la arquitectura hexagonal no se mete en qué hacemos dentro del hexágono.

En lo personal creo que si alguien pretende simplemente aplicar la arquitectura hexagonal en un proyecto, no necesita leer todo el libro, posiblemente con leer la primera parte o algunos de los artículos (recientes) del propio Alistair puede ser suficiente. Sin embargo, para aquellos curiosos que quieran ir más allá y hacer el ejercicio de profundizar en el patrón, sus implicancias y sus conexiones, este libro es un pieza fundamental.

Mis Notas de la 10 Pines Conf 2024

El viernes pasado estuve participando de la 10 Pines Conf, un evento cerrado para miembros de 10 Pines y algunos invitados externos, que desde hace un par de años la gente de 10 Pines organiza con motivo del día del programador.

Más allá de escuchar muy buenas charlas, tuve la oportunidad de reencontrarme con varios colegas, algunos de ellos ex-alumnos de mis materias/cursos.

Una curiosidad que me llamó la atención es que hoy en día hay en 10 Pines varias personas que fueron alumnos mios en distintos contextos (UBA, UNTreF y UNQ).

De todo lo que escuché hubo 2 charlas que me gustaron mucho. La que dió EmilioG sobre LiveView Native, una herramienta del ecosistema Exilir/Phoenix para crear aplicaciones móviles. Una de las cuestiones que me más me gusto de la charla es que Emilio arranco haciendo una demo en vivo y recién luego de eso explicó como funcionaba la herramienta. La otra charla que me gustó mucho fue la que dieron FacuG, ErnestoA y LucasW que contaron su experiencia haciendo un plugin de IntelliJ, mucha data valiosa.

Una cuestión interesante de esta conferencia es que la hacen en la oficina de 10 Pines utilizando las salas de reuniones. Esto hace que el orador esté sentando a la mesa junto con su audiencia. De esta forma las charlas son «chicas» generando cierto ambiente de cercanía con el orador y permitiendo a todos preguntar y profundizar en algunas cuestiones. En línea con esto, en la charla de Emilio no éramos más de 10 personas mientras que en la de FacuG, rondaba las 20 (con gente de pie alrededor de toda la mesa.)

Agradezco a EmilioG por la invitación y ojalá tengamos muchas más 10 Pines Conf (y también me inviten 😉 )