Vía negativa — Mejorando productos por sustracción
Eliminación de fragilidad y riesgo versus construcción y épica.
Artículo publicado originalmente en Junio de 2023 en mi blog. De vez en cuando rescataré en esta newsletter los artículos que he escrito a lo largo de los años y que han generado mayor interés.
Esta semana leyendo un exquisito artículo de Simón Muñoz sobre la importancia de dar forma a nuestro jardín de producto eliminando todo aquello que sobra, recordé este artículo relacionado que escribí el año pasado.
En el mundo del desarrollo de producto, a menudo prevalece la idea de que más es mejor. Añade más funcionalidades, prueba nuevas tecnologías, incorpora los últimos algoritmos, mete inteligencia artificial con calzador, etc. Existe otra perspectiva contraintuitiva que puede ser tan poderosa o más: la vía negativa.
La vía negativa
Esta idea la descubrí en el fascinante libro de Nassim Nicholas Taleb, Antifrágil, al que seguramente volveré varias veces porque hay muchas otras ideas interesantes que aplican al desarrollo de producto.
La vía negativa se enfoca en:
lo que algo no es
qué evitar
qué no hacer
Conocemos más sobre lo que está mal o no funciona que lo que está bien. Taleb argumenta que el conocimiento crece más por sustracción que por adición, dado que lo que sabemos hoy podría resultar ser incorrecto, pero lo que sabemos que es incorrecto no puede resultar ser correcto.
La mayor (y más robusta) contribución al saber consiste en eliminar del mismo aquello que creemos que está equivocado: esto es la epistemología sustractiva. — Nassim Taleb
La «vía negativa» es un enfoque basado en el riesgo. En un mundo de incertidumbre, debemos ser especialmente cautelosos acerca de las cosas que no han sido comprobadas. Para que las cosas sean comprobadas a través del conocimiento negativo, deben resistir la prueba del tiempo. Cuanto más tiempo algo ha estado presente sin evidencia de que sea perjudicial, mayor es la posibilidad de que no sea malo para ti.
Lo erróneo es robusto, lo desconocido es frágil y especulativo.
En la metáfora de la ducha ya vimos las consecuencias de dar bandazos. Si además estos bandazos son de adición de funcionalidades (vía positiva) cuyo valor no ha sido validado y que además incurrirán en un coste basal, el riesgo de alejarnos de nuestro objetivo aumenta.
En el desarrollo de producto, todo esto se puede resumir en una simple premisa:
Para mejorar un producto, a veces, hay que eliminar.
Dime cómo me mides y te diré cómo trabajo
La mayoría de las empresas de producto tienen como cultura premiar solo la adición. Celebramos releases y rara vez premiamos la reducción de riesgo. ¿Cuántas medallas tiene en su pecho aquel que evitó ese mantenimiento que nunca llegó a ocurrir gracias a haber eliminado un código muerto o una funcionalidad en desuso?
La economía actual está diseñada para prosperar por la «vía positiva». Por ejemplo, la mayoría de consultoras solo ganan dinero si generan complejidad donde su continua intervención es necesaria.
Aplicaciones prácticas
Veamos algunas aplicaciones prácticas de la «vía negativa» en el mundo del desarrollo de producto:
Reducir la complejidad del código
Muchas veces intentamos mejorar nuestro software añadiendo más código. Sin embargo, la eliminación de código innecesario o redundante puede ser aún más beneficiosa.
Eliminar código innecesario puede hacer que tu software sea más eficiente, más fácil de entender y más fácil de mantener. Hay un límite para la cantidad de código que puedes eliminar (el código que ya está allí), por lo que la decisión de qué hacer se vuelve más manejable.
Optimizar el rendimiento
Cuando se trata de mejorar el rendimiento de un software, a menudo intentamos añadir más recursos: más memoria, más CPU, etc. Sin embargo, la vía negativa sugiere que, en lugar de añadir, podríamos mirar a lo que podemos quitar.
Quizás algunas partes de tu código están realizando cálculos innecesarios que pueden ser eliminados o modificados para ser más eficientes. O tal vez estás utilizando una dependencia pesada para una sola función, cuando podrías escribir esa función tú mismo y eliminar la necesidad de la biblioteca completa.
Evitar errores
Al igual que con los hábitos negativos, otra forma de aprovechar la «vía negativa» en el desarrollo de software es evitar los errores antes de que ocurran. A menudo, es más beneficioso prevenir los bugs que esforzarse por solucionarlos después de que hayan sucedido.
En lugar de escribir código complicado y luego pasar horas depurando, puedes intentar evitar las posibles fuentes de error en primer lugar. Por ejemplo, utiliza principios de diseño SOLID y prácticas de eXtreme Programming como TDD para detectar y solucionar los errores antes de que se conviertan en problemas.
Experimenta y descarta
No te centres en las funcionalidades que crees que van a funcionar, más bien evita las que sabes que no van a funcionar. Los actos de omisión, es decir, las decisiones de no implementar ciertas características, también son elementos importantes en el proceso de desarrollo de software.
Alguien que parece que entendía esto a la perfección era Steve Jobs.
La gente cree que concentrarse significa decir que sí a lo que tienes que concentrarte. Pero eso no es lo que significa en absoluto. Significa decir «no» a las otras cien buenas ideas que hay. Hay que elegir con cuidado. De hecho, estoy tan orgulloso de las cosas que no hemos hecho como de las que sí. La innovación es decir «no» a mil cosas. — Steve Jobs
(subtítulos solo disponibles en inglés)
Enfoque inverso
Enfoca los problemas en reversa. En lugar de preguntarte cómo alguna funcionalidad o elección de tecnología te puede conducir al éxito, pregúntate cómo podría determinar tu fracaso. Y entonces, dedica tu energía en prevenir esas contingencias.
Conclusiones
La «vía negativa», aunque parece contraintuitiva, representa un enfoque poderoso para la eficiencia y la innovación en el desarrollo de producto. Al enfocarnos en lo que no debemos hacer, qué evitar y qué elementos quitar, podemos lograr productos más robustos, eficientes y manejables.
Esto conduce a un código más limpio, menos propenso a errores y, en última instancia, a un software de mayor calidad. Además, la eliminación de funcionalidades innecesarias o redundantes puede abrir un valioso espacio para la innovación y la mejora.
No obstante, la adopción de la vía negativa requiere un cambio cultural importante. Tradicionalmente, se ha premiado la adición y la acción, mientras que la eliminación y la prevención de riesgos suelen quedar en la sombra.
Debemos buscar formas de incentivar la «vía negativa» en nuestros equipos. Necesitamos aprender a valorar la eliminación de la fragilidad y el riesgo tanto como la adición de nuevas funcionalidades. Y es vital que celebremos y recompensemos el trabajo crítico de aquellos que se esfuerzan por hacer que nuestros sistemas sean más resistentes, menos complejos y, en última instancia, mejor preparados para el futuro.
Si tienes experiencias, ideas o enfoques para fomentar y recompensar la «vía negativa» en tus equipos, estaré encantado de escucharte.