Una de las cosas con las que me he encontrado como tech guy de founders ambiciosos es que muchas veces quieren arrancar corriendo en el diseño de sistemas, pero algo que aprendes rápido cuando toca llevar ideas al mundo real a través de un sistema, es que es imposible diseñar un sistema efectivo desde el escritorio. Creo que se asemeja mucho a cuando uno está aprendiendo un deporte.

La primera vez que tratas de hacer burpees, seguramente los vas a hacer de una manera muy ineficiente. Por una parte, tus músculos tal vez no están optimizados en composición para ese tipo de carga de trabajo. Por otra parte, todavía no tienes la interocepción para entender cómo funciona tu cuerpo en un patrón de movimiento nuevo, y tal vez tu corazón no es lo suficientemente fuerte para ese tipo de ejercicio cardiovascular. Entonces, primero tienes que hacerlo así, ineficiente, porque no tienes otra manera de hacerlo, y solo a medida que vas haciendo burpees iteración tras iteración, puedes volver tu cuerpo eficiente para eso. El burpee número mil que hagas en tu vida va a ser mucho más eficiente calóricamente que el primero.

Pasa algo similar con los sistemas: tendemos a diseñar el sistema que cubra todos los casos y automatice todo, pero esto no es posible; primero tienes que hacer tu proceso de negocio de manera manual, ineficiente, e ingenua. Esto te va a transformar lo suficiente para entender cómo automatizarlo de manera útil.

Aunque hoy más que nunca pareciera que el código es desechable, uno sabe que el código en producción es un pasivo: cada línea, cada archivo, cada servicio, cada engranaje del sistema que diseñas, se puede volver un problema más adelante en el camino. Entonces, todas las partes son culpables hasta que se demuestre lo contrario, y no existe mayor satisfacción que tener componentes o servicios blindados que sabes que son muy sólidos y no tienen bugs.

Ese hardening, poder llegar a un producto pulido y util, cuesta mucho trabajo. Lo difícil nunca ha sido el código, son las iteraciones que tienes que ponerle. Tienes una cantidad de energía, de tiempo y de oportunidades finita. No trates de sacar todo from one shot. Trata de salir rápido con algo manual donde te va a requerir mucho trabajo, y entiende dónde está la demanda latente. Si es que la hay, si tienes la suerte de que la haya, construye hacia allá.

Sistemas blindados. Y no solo blindados en el sentido de tener código seguro. Blindados como unidades lógicas del negocio importantes. Porque, bueno, algo que aprenderás muy rápido es que con un lenguaje Turing Complete puedes escribir el set de instrucciones que se te ocurra, pero ese set de instrucciones puede no tener nada de sentido. Entonces, no te confundas, porque el hecho de que puedas poner algo en código no significa que es correcto.