$ cat herramientas.md
Herramientas
Soy de los que no tienen una lista de logos, pero sí puedo decir qué uso, por qué, y qué evitaría si puedo elegir.
Lo que uso por defecto
Python para casi todo lo que requiere lógica de negocio, automatización o procesamiento de datos. Tiene sus problemas, pero el ecosistema y la velocidad de desarrollo son difíciles de superar.
Go cuando necesito algo rápido, concurrente y con binarios autónomos. Es tedioso de escribir comparado con Python, pero el resultado es predecible y las sorpresas en producción son menores.
Docker siempre. La reproducibilidad no es opcional. Si algo no corre igual en local y en producción, es un problema en ciernes.
Terraform / OpenTofu para infraestructura. IaC sin estado compartido gestionado correctamente (remote state, locking) me parece irresponsable a cualquier escala no trivial.
PostgreSQL como primera opción de base de datos relacional. Sólido, predecible, con capacidades que la mayoría de proyectos no llegan a necesitar. Cambio a otra cosa solo cuando hay una razón concreta.
Linux en el servidor. Sin discusión.
Lo que uso con criterio
Kubernetes cuando el problema lo justifica. Si tienes tres servicios y tráfico predecible, probablemente sea demasiado. Si gestionas múltiples clusters de cliente con requisitos distintos, tiene sentido. He operado ambos escenarios.
Kafka para streaming real y desacoplamiento de sistemas con tasas de producción variables. Para una simple cola de mensajes, hay opciones más sencillas.
Elasticsearch cuando la búsqueda es un requisito de primer orden. No como base de datos, no como sustituto de SQL.
Ansible para configuración de máquinas y bootstrapping. Lo he visto crecer hasta ser un infierno de roles y variables. Lo mantengo acotado.
Lo que tengo en el radar
Nix / NixOS para entornos de desarrollo reproducibles. La promesa es real, la curva de aprendizaje también.
Temporal para orquestación de workflows duraderos. Más sólido que reinventar maquinas de estados con colas de mensajes.
Lo que evito si puedo elegir
Stacks sobre-ingenierizados para el tamaño del problema. Microservicios cuando un monolito bien estructurado funciona. Abstracciones prematuras que hacen el código más difícil de entender sin ningún beneficio real.
Herramientas que resuelven problemas que todavía no tengo.