En el último mes, he estado entretenida e interesantemente ocupado.
Desarrollé, de principio a fin, una plataforma a medida para llevar la Planificación Estratégica. No solo tiene el BSC, los objetivos, las fichas de clientes, proyecciones de ingresos, etc. Cuatro perspectivas, 19 objetivos, 52 fichas, metas 2025-2026-2027 y semáforos que se calculan solos. Backend en FastAPI con SQLAlchemy, Alembic y PostgreSQL; frontend en React con Vite y TypeScript; un ETL que carga el dato real en vez de que alguien lo tipee de nuevo. Además, tiene un motor IA de sugerencias de planes de acción, basado en research contextual, resultados de NPS y toda la información relevante para el proceso. Y acá está la parte que me importa: la IA no escribe libre. Propone llamando a una herramienta con esquema fijo, obligada a usar solo los objetivos, KPIs y gerencias que existen en el catálogo, a citar la evidencia numérica del hallazgo y a no repetir un plan que ya está. Los números los sigue pintando la app desde la base. La IA pone la prosa.
En paralelo, desarrollé una pequeña app de pendientes personales: Tránsito. Que sigue mi manera personal de llevar el listado eterno de cosas por hacer —bandeja estilo GTD, matriz de Eisenhower y un tickler para lo que no es hoy—. Partió como app de escritorio en Tauri y terminó siendo webapp: Astro en modo server, React, Postgres en Neon, PWA instalable en el teléfono, un cron que despierta el tickler, un bot de Telegram para capturar sin abrir nada y un servidor MCP para capturar desde donde escribo. 159 pruebas contra una base real, en un esquema que se crea y se destruye en cada corrida.
También, llevé el presupuesto del área a una versión online. Compartida para todo el equipo con: login, cloudflare tunnel, postgres y un stack tecnológico de primera. FastAPI, Alembic, respaldo automático a xlsx por timer, y el “login” en realidad es Cloudflare Access: la app verifica el JWT firmado y no la cabecera, que cualquiera que le hable directo al puerto podría inventar.
Y, por último, y el que me tiene más orgulloso, un CRM. Este no partió desde cero. Por supuesto, que Oportunidades, Personas, Tareas y sincronización de Correo y Calendario, ya estaban, pero ahora es una suite completa. Twenty CRM, self-hosted. Y acá me corrijo, porque lo venía diciendo mal: no es un fork. Corre la imagen oficial y no le toco una línea al código —todo lo mío vive alrededor, por su API REST, la Metadata API, SQL directo cuando la API no alcanza y jobs en Node sin una sola dependencia—. Es incómodo al principio (no hay campos fórmula, no hay rollups, todo se calcula con jobs) y es la razón por la que puedo actualizar la versión sin que se me caiga nada encima. Versión local en mi Mac, Docker, y empezó la diversión.
Módulo de formularios de captura: un Worker en Cloudflare como único borde de entrada, que valida, deduplica por correo y, si el CRM se cae, guarda el lead en una cola en vez de perderlo. El formulario es un snippet HTML autocontenido que se pega en las landings y se guarda el gclid y los utm en una cookie antes de que el visitante escriba su nombre. Sistema de tickets para consultas online y requerimientos de colaboradores y clientes: canal, audiencia, doce categorías, prioridad, estado y SLA. Chatbot (classic) con una KB para responder a las solicitudes, reglas de derivación —editables desde el CRM, sin tocar código— y una IA de fondo que clasifica las consultas y responde algunos requerimientos; nuestra central. El clasificador es Claude Haiku y solo propone: la validación contra los enums y la derivación son deterministas y auditables, y queda registrado si clasificó la IA o un humano y con qué confianza. El chatbot es selector, no generador: el modelo elige qué pregunta aplica y responde verbatim la respuesta canónica. Cero alucinación. Cuando no sabe, deriva y crea el ticket con toda la transcripción adentro.
Pero eso no es todo, un módulo de marketing completo. Mailing masivo con relay en Resend; un pequeño módulo de encuestas, listas de correo, temas de desuscripción (bajarse del newsletter sin bajarse de las encuestas), rebotes y quejas que entran por webhook firmado, tope por envío como freno de mano contra el clic accidental y un enlace de baja que con GET muestra un botón y solo ejecuta con POST, porque los escáneres de correo abren todos los links. Y lo más genial, un sistema de atribución offline para campañas de Google Ads. Es decir, podemos tener el ROI de las campañas claramente establecido. Un job baja el costo por campaña con GAQL, otro resuelve gclid→campaña consultando los clics día por día (límite de la API, no mío) y le pega la campaña a la persona, y el ROI y el CPL se recalculan dentro del CRM. La subida de conversiones de vuelta a Google está escrita y es idempotente, pero frenada por una decisión de negocio; y el ROI es bruto hasta que Finanzas entregue los márgenes. Lo digo porque me cargan los posts donde todo funciona.
Ah, y la migración desde el legacy: 7.170 personas, 1.740 oportunidades, 1.193 empresas, 4.521 tareas, 7.016 notas. Antes hubo una auditoría del modelo viejo: 421 campos, la mitad muertos. Migrar no es copiar, es decidir qué no llevas. Todo, por API y sin tocar una celda de Excel.
¿Qué me llevo de todo esto?
- El criterio profesional es irremplazable. Claude, me sugirió muchas cosas que sonaban bien, pero no eran atingentes al negocio. Fui yo quien, con mi conocimiento, destilé para que funcionaran.
- Hoy, el código del software es commodity.
- El relacionamiento dentro de la organización -y fuera-, son vitales para lograr este tipo de objetivos. Hay que recuperar la capa humana en el uso de la IA.
- La disposición de la gerencia de TI. Nosotros no estamos acostumbrados a darle una maquina virtual a un “no programador”, para que haga pruebas de software. Se abrió esa puerta y se une al punto 3. Gracias.
- Hacer code review con otro modelo. En este caso, fue Kimi K3. Permite lidiar con otros sesgos y hubo buen feedback en la discusión entre ambos modelos.
- Revisar siempre.
- Diseñar mi obsolescencia ha sido un paso vital y estratégico en mi carrera.
Como corolario, puedo decir que lo pasé muy bien y que esta será mi senda. Aprendí muchísimo acerca de la construcción de software, definiciones de problemas, pero falta todavía.
Lo que si está claro es que esto supone un ahorro brutal para las organizaciones. Identificar personas dispuestas a desarrollar soluciones a problemas internos, a una fracción del costo, en este caso un plan Claude Max 5X, supone un tremendo desafío de infraestructura, datos, arquitectura y seguridad. Como también, un diseño de incentivos adecuado y protección de propiedad intelectual. Pero eso, será parte de mi próxima negociación de contrato. ¿Cierto?