Historia de caso
Diez años, el mismo código: lo que mantener Kapa desde 2015 me enseñó sobre el software que dura
En 2015 acepté la plataforma de un cliente siendo un desarrollador de nivel medio, con una promesa honesta y mucho por aprender. Una década, una evolución sin reescritura y 26 servicios después, así se ve en la práctica el software que dura.
En 2015, un amigo con el que jugaba Dota 2 me contó que su hermano estaba buscando un programador. Yo era un desarrollador de nivel medio en ese entonces. Sabía algo de PHP y suficiente JavaScript con jQuery como para ser peligroso.
Su hermano era Ka Kei Ho, y no quería un script ni una landing page. Quería una plataforma: un servicio por suscripción donde las empresas piden diseño gráfico ilimitado y un equipo real lo entrega. En ese entonces se llamaba Kapa99; hoy la marca es simplemente Kapa. Pagos, gestión de tareas, manejo de archivos, el flujo de trabajo de una agencia completa.
Le dije la verdad: nunca había construido algo de ese tamaño, y me iba a exigir habilidades que solo tenía a medias. CSS con profundidad real, servidores, modelado de bases de datos, saber qué construir primero, y la resistencia mental para llevar un sistema de cero a producción. Después le dije la otra mitad: si me lo confiaba, me comprometía a terminarlo.
Confió en mí. Llegaron los archivos de diseño y me corrió un sudor frío. El UX era excelente, lleno de interacciones, pensado con cuidado por Ka Kei y su diseñador, Juan Carmona. Estaba claramente por encima de lo que yo sabía construir ese día. Ese era justamente el punto.
Versión 1: no era bonita, pero funcionaba
Mi rutina durante la siguiente etapa de mi vida: trabajo a tiempo completo de día, Kapa de noche, y los fines de semana para estudiar lo que la semana hubiera dejado al descubierto. Compré una suscripción a Laracasts y aprendí Laravel de Jeffrey Way, siguiendo una serie llamada “Let’s Build a Forum” que empezaba exactamente donde yo estaba parado. PHP, bases de datos, caché, patrones de diseño, todo a la vez.
Recuerda que esta era la época pre-IA. Sin Claude, sin ChatGPT, sin autocompletado que escribe funciones. Libros, foros, Stack Overflow y una cantidad poco razonable de persistencia.
La primera versión salió con Laravel 4, jQuery, CSS plano y MySQL. No era el mejor código de su época. Pero funcionaba, y funcionaba sin drama, porque yo había probado ese sistema hasta quedarme sin maneras de romperlo. Esa primera versión sin glamour operó un negocio real durante cuatro años y acumuló el activo más valioso que puede tener un producto: feedback de gente usándolo a diario.
2019: evolucionar sin reescribir
A los cuatro años, Ka Kei y Juan produjeron un rediseño visual completo. Un Kapa nuevo que no se parecía en nada al primero: más pulido, con más interacciones, más profesional. El primer commit de esa nueva era tiene fecha del 25 de noviembre de 2019. Lo único que sentí fue entusiasmo por construir un diseño de ese nivel.
La jugada tentadora era reescribir todo. Hicimos algo más acotado: partimos el sistema en dos, para que cada parte pudiera evolucionar a su propio ritmo.
- El sitio de marketing y el blog se fueron a Astro, React, TypeScript y Markdown, desplegados en Cloudflare Pages para que carguen rápido en cualquier parte del mundo.
- La aplicación se quedó en un droplet de DigitalOcean: Laravel, Vue, TypeScript, Redis, MySQL, con Stripe y PayPal manejando las suscripciones.
El otro gran cambio fue la automatización. La operación había crecido más allá de lo que la coordinación manual podía manejar, así que construimos bots con Laravel y Supervisor para hacer lo que los humanos hacían a mano:
- Colas de prioridad. Kapa tiene dos planes cuya diferencia principal es el tiempo de entrega, y los pedidos de 24-48h saltan la fila automáticamente.
- Asignación de tareas que empareja cada pedido con el diseñador que mejor hace ese tipo de trabajo, balanceado contra su carga actual.
- Una sincronización bidireccional con Trello, porque varios clientes amaban Trello y no querían dejarlo. Lo que pasaba en un lado aparecía en el otro.
- Reportes de suscripciones por vencer, y una lista de tareas menores que nadie extraña hacer a mano.
Lo más difícil que he construido
Un pedido de logo no hace las mismas preguntas que una tarjeta de presentación, la portada de un libro o una plantilla de PowerPoint. Cada servicio necesita su propio formulario de pedido, y Kapa lanzó con unos 12 servicios. Hoy ofrece 26.
Hardcodear 26 formularios nunca fue una opción. La respuesta fue un sistema que llamé atributos: componentes de formulario independientes que se combinan, en un orden y pasos específicos, en la experiencia de pedido de cada servicio. Un selector de color. Una galería conectada a Unsplash con su propio buscador. Grupos de checkboxes, galerías de imágenes con y sin etiquetas, subida de archivos con drag-and-drop, sliders de rango, datepickers, dropdowns de marca. Piezas independientes, compuestas como Lego en formularios que se sienten diseñados a mano.
En ese momento no había nada en el mercado que se acercara, así que lo construí desde cero. Sigue siendo el corazón del producto.
También es donde debo mi mayor confesión. En lo profundo de ese código vas
a encontrar expresiones como task.value.value, un .value por cada capa
de anidamiento. Esa sección es anterior a TypeScript en el proyecto, y
hasta hoy no he logrado tiparla. Es potente y flexible, y al mismo tiempo
frágil. Cuando la extiendo, sigo el razonamiento de la persona que inventó
ese mecanismo. Esa persona era yo, diez años más joven, y hemos aprendido
a trabajar juntos.
Otras dos construcciones merecen mención. Un componente de anotación de imágenes donde cualquiera puede hacer clic en cualquier punto de una imagen y dejar un comentario, que suena simple hasta que calculas posiciones proporcionalmente en todos los tamaños de pantalla. Y el tablero kanban, optimizado a lo largo de muchas noches para aguantar la carga de clientes agencia que delegan todo su trabajo de diseño, sin congelar el navegador.
La noche que se llenó el disco
El peor incidente en diez años empezó como empiezan todos: el sitio caído y SSH sin dejarnos entrar. Yo estaba en la calle, sin computadora.
Ka Kei estaba en su máquina, y es usuario de Linux desde hace muchos años.
Así que hicimos lo único sensato: pensar juntos mientras él intentaba.
Después de varios intentos consiguió una sesión y encontró la causa. El
disco estaba al 100% y /tmp estaba repleto de archivos temporales.
El culpable era mi propio componente de subida drag-and-drop. Guardaba los
archivos en /tmp, y cuando el usuario guardaba su tarjeta, los movía al
object storage de DigitalOcean y limpiaba detrás de sí. Un diseño prolijo
que ignoraba dos preguntas que nunca nos hicimos: qué pasa cuando un
usuario abandona una tarjeta en borrador para siempre, y qué pasa cuando
muchos usuarios suben archivos al mismo tiempo. Se nos escapó. Después
optimizamos ese pipeline y no volvió a pasar.
Dos lecciones se me quedaron. Los incidentes no vienen del código del que desconfías; vienen del happy path en el que creíste. Y un cliente técnico vale oro: ese día, Ka Kei fue nuestro monitoreo, nuestra guardia y nuestras manos remotas, todo a la vez.
Aburrida a propósito: la arquitectura que sobrevivió
Nadie escribiría una charla de conferencia sobre la arquitectura de Kapa,
y exactamente por eso ha durado. Controladores. Modelos gordos, aunque los
blogs de la época dijeran que no: query scopes, relaciones y métodos
pequeños de propósito único. No hay nada como leer $user->owns($board)
meses después y entenderlo al instante. Sin capa de repositorios, porque
los modelos alcanzaban. El módulo de notificaciones de Laravel. Observers
de modelos para limpieza en cascada, de modo que borrar una tarea se lleva
sus mensajes, adjuntos y actividad. La facade Cache, que es una pequeña
obra maestra de diseño de API. Colas para sincronización, correo y
notificaciones. Y muy pocos events y listeners, porque me gusta saber
desde dónde se disparan las cosas.
Ninguna de esas capas es invento mío. Todas vienen con el framework. Eso es una ventaja, y es la razón por la que elegí Laravel después de probar Yii, Express y Meteor. Mi regla para las herramientas no ha cambiado desde entonces: un framework debería sentirse como superpoderes, como si él y tú fueran en la misma dirección. La mayoría de los días, la documentación respondía mis preguntas antes de que Stack Overflow tuviera que hacerlo. ¿Necesitas un controlador? Documentación. ¿Un modelo? Documentación. ¿Formatear fechas entre backend y frontend? Bueno, ahí sí Stack Overflow, porque las fechas son delicadas en todos los lenguajes jamás creados. Gané una buena cantidad de reputación en Stack Overflow durante esos años, que se convirtió en mi primera forma de devolverle algo a los desarrolladores de los que había estado aprendiendo.
Una herejía más: Kapa no es una single-page app. Renderiza en el servidor con Blade, y Vue aparece solo donde la interacción en tiempo real se gana su lugar. Publicar un comentario sin recargar. Abrir una tarjeta en un modal. Asignar un diseñador desde adentro de la tarea. Todo lo demás es renderizado tradicional del servidor, con los datos que cada pantalla necesita pasados como props.
Lo que te enseña una década
La tecnología es quizás un tercio de la historia. Kapa me hizo crecer como profesional y como persona: priorizar con el alcance completo en mente, encontrar cuellos de botella, operar servidores, manejar DNS, y desarrollar el criterio para saber qué trabajo importa. Ka Kei es un genio recortando el trabajo que no va a necesitar, y yo aprendí a ponerme en los zapatos de la persona que opera la plataforma. Esa combinación es la razón por la que esta sociedad funciona, y ya van diez años.
Ese proyecto también cambió mi vida de una forma que ninguna línea de código muestra. Los ingresos de Kapa pagaron mi migración de Venezuela a Chile cuando las cosas se pusieron difíciles allá, con apagones de un día entero y escasez de agua y gas. El software a medida suena abstracto hasta que cambia vidas a ambos lados del contrato.
La parte que no esperaba: la IA puede leerlo
Este es el remate de 2026. Hoy, las herramientas de IA entienden el código de Kapa sin ninguna reescritura. Lo extienden, lo evolucionan, lo navegan como lo haría un senior recién contratado. No porque el código sea ingenioso. Porque es convencional. La estructura predecible y las convenciones del framework resultan legibles para las máquinas por la misma razón por la que son legibles para los humanos.
Las decisiones aburridas de 2015 siguen pagando dividendos en la era de la IA.
Kapa está en producción desde 2015. Ha atendido a casi 5,000 usuarios, procesado casi 15,000 tareas de diseño, almacenado más de 117,000 archivos adjuntos y alojado más de 100,000 comentarios. Creció de 12 servicios a 26, sobrevivió un incidente de disco lleno y ha tenido exactamente un ingeniero. Si estás evaluando software a medida y te preguntas si puede durar una década sin una reescritura: puede. Solo tiene que estar construido como si pensara quedarse.
¿Estás pensando en un proyecto así?
Pide una auditoría gratuita de 15 minutos de tu web o infraestructura actual. Te respondo con lo que construiría, lo que evitaría y un rango de presupuesto realista.
Sigue leyendo
Cómo contratar a un ingeniero de software freelance sin salir quemado
Una guía de campo desde el otro lado de la mesa: qué revisar antes de la primera llamada, las preguntas que exponen a un ingeniero flojo en diez minutos, las señales de alarma escondidas en las propuestas, y cómo armar el trato para que un mal resultado salga barato.
Cuándo dejar Excel y pasar a un sistema a la medida
Las hojas de cálculo sostienen más negocios que cualquier categoría de software, hasta que empiezan a costarte horas, errores y clientes sin que lo notes. Estas son las señales que busco, cuánto cuesta en la práctica que se rompan y qué implica de verdad reemplazar una.