Treinta minutos de sabiduría pura y dura

Hace poco descubrí una entrevista muy interesante entre Allen Holub y Robert “Uncle Bob” Martin. Quizá el segundo sea más conocido por Clean Code o la saga de libros Clean, pero Allen cuenta con la experiencia necesaria para darle muy buen curso a la conversación con preguntas, acotaciones y puntos de vista que hacen que la media hora pase sin que nos demos cuenta.

En la entrevista se tocan puntos como:
– Lo que debemos hacer si nos interesa evolucionar como desarrolladores de software
– Libros que deberíamos leer y la importancia de los fundamentos que encontraremos en estos
– La práctica hace al maestro, pero podría tomar algo de tiempo
– Liderazgo y su impacto en el aprendizaje y productividad del equipo
– El trabajo remoto y la necesidad de las interacciones personales
– Puedes invertir tiempo enseñando y te irá bien con eso, pero tienes que aceptar que no vas a convencer a todo el equipo
– Disciplina, estándares y ética

Aquí el video, espero sea de su agrado:

Un saludo,
JD

¿Qué hacer en casos de revisión de código?

No entraré en detalles de la importancia de esta práctica, creo que ya es sabido y se tienen muy buenos artículos al respecto, pero yendo del dicho al hecho… ¿qué hacemos?

Aquí una lista de consideraciones a tener en cuenta:

1. Roles claros: El código se escribe (autor), se revisa (revisor) y aunque al principio no parezca, le pertenece a todos (dueño). Además, el autor no puede ser juez y parte de lo que propone, el revisor puede incluir a otro revisor en caso de que alguna revisión/observación se extienda más de la cuenta, y como dueños somos responsables de la calidad del código.

2. Reglas claras: Para no depender de opiniones y gustos, debe existir un checklist y este debe ser de conocimiento –y uso– general. Además hay que aceptar que –salvo posibles excepciones– no hay nada nuevo por inventar (estilos, nomenclatura, estructuras, etc.), así que el equipo debe acordar el conjunto de reglas a seguir (existen muchas, con casos ya comprobados), las excepciones del caso y cómo abordar cada una de estas.

3. Tiempos de entrega: El tiempo de revisión, entrega de feedback y correcciones no debe comprometer los avances del trabajo, pero de darse el caso, debemos ser conscientes y empáticos sobre las consecuencias del volumen de código a revisar. En caso de no haberse conversado, volver al punto 2.

4. Esquema de revisión: Se deben abordar aspectos de arquitectura (¿se cumple con la estructura y/o diseño propuesto?), estilos (¿se respetan los estándares de nomenclatura, formato, programación o pruebas?), legilibilidad (¿se entiende sin tener que preguntar al creador?), ubicuidad (¿se usa el lenguaje y terminologías del producto?), funcionalidad (¿cumple con lo requerido?) y cobertura (¿las pruebas automatizadas incluyen los casos no exitosos?). Aquí es importante tener en cuenta que cada uno de estos esquemas de revisión deben reflejarse de manera explícita en las reglas respetadas por el equipo. Caso contrario, volver al punto 2.

5. Feedback concreto, respetuoso y de atención rápida: Siempre hay que tener presente que por más que uno desee, no todos tenemos el mismo nivel de conocimiento y entendimiento, así que para acortar esa brecha, cada observación debe ser lo más clara posible. Incluir código de ejemplo y observar de manera propositiva ayudan mucho, pero ayuda mucho más proponer una sesión de revisión conjunta.

Un abrazo,
JD

The Stupidity Manifesto

Antes de hablar, sea para explicar o responder algo, recuerda que no todos experimentaron lo mismo que tú. Y así hayan estudiado o tengan conocimiento de los mismos temas, cada persona tiene su proceso, su forma de entender las cosas y claro, podrías estar equivocado.

Clare Sudbery (she/her) plantea muy bien este tipo de situaciones en The Stupidity Manifesto, el cual por cierto, a pesar de tener un título algo crudo y directo, creo que refleja muy bien el punto al que quiero llegar.

Antes de despedirme les comparto una captura que tomé hace un tiempo en un O’Reilly Live Event, una publicación de Clare y claro, contarles que cada cierto tiempo evalúo situaciones por las que he pasado, reflexiono sobre mi comportamiento y creo que, como es natural, hay cosas en las que debo seguir trabajando.

Aquí el post sobre el manifiesto.

Un abrazo,
JD

¿Por qué el code review toma tanto tiempo?

La respuesta simple es que “hay mucho código por revisar“, y tiene sentido, pues si estamos liberando funcionalidades, sea diaria, semanal o mensualmente, el equipo está escribiendo tanto código como se necesite. Y si además se respeta un procedimiento de construcción adecuado, así se tengan herramientas y/o automatizaciones, se necesitará una validación adicional, y con esto me refiero a la humana.

Ojo, y esto fue mencionado por Fred Brooks hace casi cincuenta años, así se agreguen más personas al proceso, el tiempo siempre jugará en contra o peor, podría incrementarse, sea – y esta es una opinión personal– porque hay reuniones por atender, dudas que resolver o bueno, cosas para ayer.

Entonces solo queda afinar el proceso, quizá definir periodos, horarios de revisión, reglas y puntos que prefiero mencionar en otra publicación, pero –para no alargar esto– lo mínimo a considerar es el tamaño del bloque o tamaño del código a revisar.

Ahora, si no tenemos idea al respecto, un estudio –que, por cierto, tiene algunos años, pero su base de investigación es muy interesante– recomienda manejar un rango de revisión que va entre las 200 y las 400 líneas de código y que el proceso como tal, no debería tomar más de una hora.

Ahora, algunos se preguntarán ¿cómo se mide esto?, por suerte se tienen herramientas cada vez más sofisticadas –y también podríamos hablar de ello–, pero aquí el problema no es ni será la herramienta, sino el acuerdo que debe tomar el equipo sobre lo que a veces llamo “el tamaño de la propuesta de cambio“, donde propuesta cambio (asociada al concepto de changeset, pero de eso podemos hablar otro día) refiere al bloque de código asociado a la funcionalidad que queremos incluir en el producto que estamos construyendo.

Personalmente creo –y obviamente puedo estar equivocado– que debería ser uno de los primeros acuerdos que se deben manejar dentro del equipo, caso contrario se afectará la calidad del producto, y aquí debemos recordar que productos digitales que funcionan hay muchos, pero que funcionen bien, ese ya es otro tema.

Aquí algunas referencias a tener en cuenta:
– Best practices for code review: https://smartbear.com/learn/code-review/best-practices-for-peer-code-review/
– The largest case study of code reviews, ever:https://www.cmcrossroads.com/article/largest-case-study-code-reviews-ever
– Brook’s law: https://en.wikipedia.org/wiki/Brooks%27s_law
– Changeset: https://en.wikipedia.org/wiki/Changeset

Un abrazo,

JD

¿Eres intenso?

Si no eres “intenso” o “intensa”, como muchos podrían esperar o incluso alardear, no hay problema con eso, es una posición que se debe respetar pero recuerda que la intensidad implica altos niveles de presión y energía que, como es natural, pueden ir disminuyendo.

¿Qué nos queda? Ser consistentes.

new beta release in process