En pocos sectores, para casi cada pregunta, se puede responder con un depende como el nuestro. Sin embargo, ya son varias las veces que he visto comentarios, artículos o videos tratando de dar una solución mágica que soluciona todos los problemas de todo el mundo.
Nunca seré suficientemente bueno
El principal problema con estas recetas mágicas es que nos hacen sentir que no somos suficientemente buenos. Que no importa lo que hagamos y lo bien que sigamos a raja tabla todos y cada uno de los consejos que nos den, la realidad nos acaba golpeando en la cara dándonos cuenta de que en nuestro contexto esas recetas no funcionan siempre.
Casi siempre existen trade-offs donde tenemos que elegir entre dos opciones que no nos gustan del todo ninguna de ellas.
Es muy pretencioso pensar que algo que ha funcionado para una persona, en un contexto concreto y para una situación determinada, va a funcionar para todo el mundo.
Pero aun así nos aferramos a ello pensando que si hacemos todo lo que nos dicen, todo saldrá bien.
SPOILER ALERT: No.
Y claro, esto es muy frustrante. Queremos hacer las cosas bien, perfectas a poder ser, pero la realidad es que muchas veces no es posible hacer las cosas “perfectas” y tenemos que conformarnos con hacerlas de la mejor forma posible que nuestro contexto no permita y no por ello sentirnos culpables.
El contexto importa
Salvo que estés trabajando en la NASA o en algún campo relativamente nuevo donde todo es incertidumbre, la realidad es que prácticamente todos nos enfrentamos a los mismos problemas en nuestro día a día.
Lo que cambia todo, es el contexto.
Lo que hace que lo que a mí me funciona a ti no, es el contexto.
Lo que convierte una “buena” decisión en una “mala”, es el contexto.
Lo que hace, por tanto, que no existan recetas mágicas, es el contexto.
Personalmente hace tiempo que acepté esto y pese a seguir trabajando cada día para interiorizarlo, me siento mucho más tranquilo y seguro de mí mismo.
Tu contexto es distinto al mío y, por tanto, nuestras opciones, decisiones y problemas también.
Dejemos de buscar algo que no existe y empecemos a tratar de entender nuestro contexto, lo que nos ayudará a tomar mejores decisiones sin tener que estar frustrados pensando que no lo estamos haciendo suficientemente bien.
Imaginemos una receta mágica
El término receta es una analogía muy fácil de extrapolar a un ejemplo real del día a día y que me gustaría explorar con vosotras.
Imaginemos que queremos hacer nuestro postre favorito. Tras una par de búsquedas por internet damos con él, empezamos a leer los ingredientes y nos damos cuenta de que la receta tiene 10 ingredientes.
Cada uno de ellos con unas proporciones muy precisas y que deben ser incorporados en un orden muy concreto.
Idealmente en nuestra cabeza nos hubiera encantado que nuestra receta solo tuviera 3 ingredientes, que se pudieran mezclar en cualquier orden y que en cuestión de minutos el postre estuviera listo, pero la vida se abre paso y las cosas no suelen ser tan fáciles.
Imaginemos una receta mágica en nuestro día a día
Ahora extrapolemos esto a nuestro día a día.
Imaginemos que queremos mejorar nuestra productividad creando un proceso que se encarga de sincronizar todos los usuarios de nuestra empresa, trayéndolos de diversas fuentes, normalizándolos, extrayendo la información más relevante, para finalmente enviar unos emails y una serie de notificaciones por Slack.
Nuestra “receta” tiene más de 5 “ingredientes”, cada uno de ellos con una responsabilidad muy concreta y que deben ser ejecutados en un orden específico.
¿Hace esto que nuestra receta sea mala? NO.
¿Nos gustaría que no hicieran falta tantos ingredientes? POR SUPUESTO.
He perdido la cuenta de la cantidad de veces que he oído y he leído cosas como que si estás desarrollando una clase a la que se le inyecta muchas dependencias es un smell
. Al principio me afectaba hasta el punto de frustrarme mucho porque pese a estar haciendo todo lo que había leído como buenas prácticas, algo estaba haciendo mal ya que no era de capaz de evitar este smell
.
Daba igual que todas estas dependencias tuvieran una responsabilidad única, estuvieran bien testeadas y no estuvieran acopladas dentro de mi clase, seguía teniendo un smell que no podía solucionar sin tener que renunciar a otras decisiones que había tomado.
Claro que se me ocurrían posibles soluciones a mi “problema”, pero cada de ellas tenía un trade-off
que me gustaba menos aún:
- Si agrupaba estas dependencias tenía que introducir más indirección en mi código.
- Si juntaba responsabilidades eliminando dependencias, estaba haciendo muy código más complejo y menos testeable.
Con el tiempo me di cuenta de que no había nada mal en mi “receta”, simplemente mi contexto era diferente y punto.
¿Me gustaría tener un proceso más sencillo con menos dependencias? OBVIO.
¿Me gustaría tener tests más sencillos y con menos preparación debido a la cantidad de dependencias? TOTALMENTE.
Otros ejemplos de recetas mágicas
- Si tienes
poco dominio
en tu aplicación no lo estás haciendo bien.- Pues depende, hay contextos donde ocurre lo contrario y casi todo es infra. Y no pasa nada.
- Si tienes una
cobertura muy alta
es que tienes muchos tests.- Pues depende tu contexto, si haces TDD la cobertura es una consecuencia, no algo buscado y, por tanto, un porcentaje alto no implica nada malo.
- Si usas una
arquitectura
en tu aplicación estás metiendo una complejidad innecesaria en tu aplicación.- Una vez más depende, si tu aplicación es muy simple no tiene sentido, pero si es compleja sí que tiene sentido.
- Si usas muchos
mocks/stubs/spies
en tus tests es un smell.- Pues depende. Si tienes que testear una clase que tiene muchas dependencias y no puedes hacer uso de la infra real por tu contexto, pues tampoco pasa nada.
Vive y deja vivir.
Estamos saturados de información y tanto la gente que escribimos como la gente que leemos debemos tener cuidado.
Cuando escribimos o decimos cosas en público es importante hacerlo de una forma que no genere frustración en el otro lado. Empatizar y dejar claro que nuestro contexto no tiene por qué ser el mismo y que no estamos en posesión de una verdad absoluta.
Cuando leemos o escuchamos opiniones/artículos/ponencias, es importante tener en cuenta que no todo lo que se dice es aplicable a nuestro contexto y que no pasa nada. Lo importante es conocer suficientes puntos de vista como para poder generar un sentido crítico propio.