Construí una Plataforma de $2M Con un Arquitecto y IA — Así es Cómo
El año pasado, entregamos una plataforma valuada en $2 millones. ¿El equipo de ingeniería completo? Un arquitecto senior y Claude Code. Sin equipo offshore. Sin ejército de contratistas. Solo una persona que sabía qué estaba construyendo, emparejada con una IA que realmente podía escribir código de producción.
No estoy escribiendo esto para promocionar IA. He sido víctima del ciclo de hype suficientes veces. Estoy escribiendo esto porque lo que pasó en este proyecto cambió fundamentalmente cómo pienso sobre la composición del equipo, la estimación de proyectos, y qué es realmente posible cuando emparejas conocimiento arquitectónico profundo con desarrollo asistido por IA. Los números no mienten — alcanzamos hitos que habrían tomado a un equipo tradicional de 6-8 ingenieros aproximadamente 18 meses, y lo hicimos en menos de 5 meses.
Permíteme caminar a través exactamente cómo.
Tabla de Contenidos
- El Proyecto: Qué Estábamos Realmente Construyendo
- Por Qué un Arquitecto en Lugar de un Equipo Completo
- Cómo Claude Code Realmente se Ajusta a un Flujo de Trabajo Real
- El Stack Tecnológico y Decisiones de Arquitectura
- Lo Que Claude Code Hizo Bien
- Dónde Claude Code Falló y Qué Hicimos al Respecto
- La Economía: Desglose de Costos y ROI
- Lecciones para Equipos Considerando Desarrollo Acelerado por IA
- Preguntas Frecuentes
El Proyecto: Qué Estábamos Realmente Construyendo
No puedo nombrar al cliente — territorio de NDA — pero puedo describir la plataforma. Es un producto B2B SaaS en el espacio logístico. Arquitectura multi-inquilino. Paneles de control de seguimiento en tiempo real. Control de acceso complejo basado en roles abarcando organizaciones, equipos y usuarios individuales. Integración con 14 APIs de terceros diferentes (transportistas, procesadores de pagos, bases de datos aduanales). Un portal orientado al cliente y un sistema administrativo interno.
El tipo de proyecto donde, en una configuración de agencia típica, te abastecerías con un líder técnico, 2-3 desarrolladores senior, un par de niveles medios, una persona dedicada a DevOps, y tal vez un ingeniero de QA. La estimación original del cliente de otra agencia era $3.2M durante 20 meses con un equipo de 9.
Proponemos $2M, 5 meses, un arquitecto. Pensaron que estábamos locos. Honestamente, yo también, un poco.
Por Qué un Arquitecto en Lugar de un Equipo Completo
Aquí está la cosa contraintuitiva sobre equipos pequeños: la sobrecarga de comunicación en un proyecto de 9 personas es enorme. Fred Brooks escribió sobre esto en 1975 y sigue siendo cierto. Con 9 ingenieros, tienes 36 canales de comunicación potenciales. Las reuniones se multiplican. Los conflictos de fusión se convierten en un ritual diario. Alguien siempre está bloqueado esperando la revisión de PR de otra persona.
Con un arquitecto, todo el estado del sistema vive en la cabeza de una persona. No hay impuesto de cambio de contexto por explicar tu enfoque en una solicitud de extracción. Sin diseño por comité. Sin sesiones de planificación de sprint de dos horas.
Pero una persona solo puede escribir tan rápido. Una persona solo puede retener tantos archivos en la memoria de trabajo. Una persona se cansa a las 6 pm y comete errores a las 8 pm.
Ahí es donde entra Claude Code. No como reemplazo del arquitecto, sino como un multiplicador de fuerzas. El arquitecto toma cada decisión. Claude Code ejecuta a una velocidad que de otro modo requeriría 4-5 desarrolladores.
El Rol del Arquitecto
Nuestro arquitecto — llamémoslo Marcus — tiene 15 años de experiencia. Ha construido sistemas en esta escala antes. Su trabajo en este proyecto fue:
- Decisiones de diseño de sistemas y arquitectura
- Definición de límites de módulos y contratos de datos
- Escribir el código de ruta crítica (autenticación, procesamiento de pagos, orquestación de canalizaciones de datos)
- Revisar y refinar todo lo que Claude Code produjo
- Arquitectura de infraestructura e implementación
- Auditorías de seguridad
Lo que no hizo: escribir puntos finales CRUD de boilerplate, construir componentes de UI a partir de diseños, escribir pruebas unitarias para lógica simple, crear migraciones de base de datos, o scaffolding de nuevos servicios. Claude Code manejó todo eso.
Cómo Claude Code Realmente se Ajusta a un Flujo de Trabajo Real
Permíteme ser específico sobre lo que "usar Claude Code" realmente se veía día a día, porque los materiales de marketing no capturan la realidad.
Marcus comenzaría cada mañana definiendo el trabajo del día de manera estructurada. No indicaciones vagas como "construye un sistema de gestión de usuarios". En su lugar, creaba lo que comenzamos a llamar "resúmenes de arquitectura" — documentos detallados que especificaban:
- La responsabilidad y límites del módulo
- Modelos de datos con tipos de campo exactos y relaciones
- Contrato de API (puntos finales, formas de solicitud/respuesta)
- Reglas de negocios y casos extremos
- Expectativas de manejo de errores
- Qué módulos existentes necesitaba integrar
Luego alimentaría estos a Claude Code en fragmentos. Una sesión típica se veía así:
# Marcus trabajaría en el directorio del proyecto con Claude Code CLI
# Primero, estableciendo contexto
claude "Lee a través de /src/modules/shipment/ y /src/lib/database/schema.ts.
Necesito que entiendas los patrones existentes antes de que construyamos el
módulo de facturación."
# Luego, la instrucción de construcción real con el resumen de arquitectura
claude "Construye el módulo de facturación siguiendo el resumen de arquitectura en
/docs/briefs/invoicing.md. Sigue exactamente los mismos patrones que el
módulo de envío para capa de servicio, capa de repositorio, y manejadores de ruta.
Usa el middleware de manejo de errores existente. Escribe pruebas para toda
lógica de negocio en la capa de servicio."
Claude Code entonces generaría el módulo — típicamente 15-30 archivos incluyendo tipos, esquemas, servicios, repositorios, manejadores de rutas, middleware, y pruebas. Marcus revisaría la salida, haría correcciones e iteraría. Todo el ciclo para un módulo de complejidad media tomó aproximadamente 2-3 horas en lugar de los 2-3 días que tomaría a un desarrollador senior.
El Ciclo de Iteración
Aquí está lo que nadie te dice sobre desarrollo asistido por IA: la primera salida raramente está lista para producción. Está tal vez 70-80% ahí. Pero ese 20-30% restante es donde la experiencia del arquitecto realmente importa.
Marcus desarrolló un ritmo:
- Generar — Claude Code produce la implementación inicial
- Revisar — Marcus lee a través de cada archivo, marcando problemas
- Refinar — Correcciones específicas alimentadas de vuelta a Claude Code
- Fortalecer — Marcus maneja manualmente secciones críticas de seguridad
- Probar — Ejecuta las pruebas generadas, agrega casos extremos que Claude perdió
Este ciclo típicamente pasó a través de 2-3 ciclos por módulo. En el tercer mes del proyecto, Claude Code estaba produciendo código de primer paso que estaba más cerca del 85-90% listo para producción, porque la base de código tenía suficientes patrones establecidos para que los siguiera.
El Stack Tecnológico y Decisiones de Arquitectura
Elegimos el stack deliberadamente para maximizar la productividad asistida por IA:
- Next.js 14 (App Router) — para el portal del cliente y panel administrativo
- Node.js con Fastify — para la capa de API (separada de Next.js)
- PostgreSQL — base de datos primaria
- Redis — caché, gestión de sesiones, pub/sub en tiempo real
- Drizzle ORM — acceso a base de datos de tipo seguro
- Turborepo — gestión de monorepo
- Vercel — implementación de frontend
- AWS (ECS Fargate) — API y trabajadores en segundo plano
Optamos por Next.js específicamente porque los patrones están bien establecidos y Claude Code tiene datos de entrenamiento profundos sobre convenciones de App Router. Esto importa más de lo que la gente piensa. Si hubiéramos elegido algo exótico como un backend basado en Rust con HTMX, la calidad de salida de IA habría caído significativamente. Puedes aprender más sobre cómo abordamos el desarrollo Next.js a escala.
Drizzle ORM fue una opción deliberada sobre Prisma para este proyecto. Claude Code genera mejores esquemas de Drizzle porque son solo TypeScript — sin DSL personalizado para equivocarse. Además, la historia de migración es más simple cuando estás generando muchos cambios de esquema rápidamente.
// Ejemplo: Claude Code generó este esquema de factura
// en el primer paso con correcciones mínimas necesarias
import { pgTable, uuid, varchar, decimal, timestamp, pgEnum } from 'drizzle-orm/pg-core';
import { relations } from 'drizzle-orm';
import { shipments } from './shipments';
import { organizations } from './organizations';
export const invoiceStatusEnum = pgEnum('invoice_status', [
'draft', 'pending', 'sent', 'paid', 'overdue', 'cancelled', 'refunded'
]);
export const invoices = pgTable('invoices', {
id: uuid('id').primaryKey().defaultRandom(),
organizationId: uuid('organization_id').notNull().references(() => organizations.id),
shipmentId: uuid('shipment_id').references(() => shipments.id),
invoiceNumber: varchar('invoice_number', { length: 50 }).notNull().unique(),
status: invoiceStatusEnum('status').notNull().default('draft'),
subtotal: decimal('subtotal', { precision: 12, scale: 2 }).notNull(),
taxAmount: decimal('tax_amount', { precision: 12, scale: 2 }).notNull().default('0'),
totalAmount: decimal('total_amount', { precision: 12, scale: 2 }).notNull(),
currency: varchar('currency', { length: 3 }).notNull().default('USD'),
dueDate: timestamp('due_date', { withTimezone: true }).notNull(),
paidAt: timestamp('paid_at', { withTimezone: true }),
createdAt: timestamp('created_at', { withTimezone: true }).notNull().defaultNow(),
updatedAt: timestamp('updated_at', { withTimezone: true }).notNull().defaultNow(),
});
export const invoiceRelations = relations(invoices, ({ one, many }) => ({
organization: one(organizations, {
fields: [invoices.organizationId],
references: [organizations.id],
}),
shipment: one(shipments, {
fields: [invoices.shipmentId],
references: [shipments.id],
}),
lineItems: many(invoiceLineItems),
}));
Lo Que Claude Code Hizo Bien
Seamos específicos. Aquí está donde Claude Code genuinamente aceleró el desarrollo:
Boilerplate y Operaciones CRUD
Este es el obvio. Generar puntos finales REST, esquemas de validación de solicitud (usamos Zod), serializadores de respuesta, métodos de servicio básicos — Claude Code noqueó estos en minutos. En todo el proyecto, estimamos que había aproximadamente 180 puntos finales de API. Tal vez 140 de ellos eran operaciones estándar de CRUD o consulta que Claude Code generó con revisión mínima.
Generación de Pruebas
Claude Code escribió aproximadamente 2,400 pruebas en todo el proyecto. ¿Fueron todas perfectas? No. Aproximadamente el 15% necesitó rework significativo. Pero tener el 85% de tu suite de pruebas generada y funcionando es un enorme ahorrador de tiempo. Marcus enfocó su energía de prueba en pruebas de integración y los casos extremos difíciles que Claude Code no pudo anticipar.
Desarrollo de Componentes de UI
El portal del cliente tenía aproximadamente 60 vistas de página únicas. Para cada una, Marcus proporcionaría la referencia de diseño de Figma y el contrato de API, y Claude Code generaría los componentes React, hooks para búsqueda de datos (usamos TanStack Query), manejo de formularios con React Hook Form + Zod, y estados de carga/error. La salida fue consistentemente buena — tal vez 75% precisa en píxeles en primera generación.
Migraciones de Base de Datos y Evolución de Esquema
A medida que los requisitos evolucionaban (y siempre lo hacen), Claude Code manejó migraciones de esquema suavemente. Describe el cambio que necesitas, y genera el archivo de migración, actualiza el esquema, actualiza consultas afectadas, y ajusta los tipos de TypeScript. Lo que solía ser una sesión de refactorización cuidadosa de 45 minutos se convirtió en un ciclo de revisión y aprobación de 10 minutos.
Documentación
Claude Code generó documentación de API, comentarios de código en línea, archivos README, e incluso documentos de runbook para operaciones. Marcus revisaría y ajustaría, pero la salida de base fue genuinamente útil. Terminamos con mejor documentación que el 90% de los proyectos que he visto, simplemente porque el costo de generar la era tan bajo.
Dónde Claude Code Falló y Qué Hicimos al Respecto
Esta sección importa más que las historias de éxito. Si planeas usar IA de esta manera, necesitas saber dónde están los muros.
Lógica de Negocio Compleja Con Múltiples Dependencias
El motor de enrutamiento de envíos — que necesitaba considerar disponibilidad de transportista, optimización de costos, requisitos aduanales, ventanas de entrega, y restricciones de capacidad simultáneamente — estaba más allá de lo que Claude Code podía manejar bien. Generaría algo que parecía plausible pero tenía errores de lógica sutiles que podrían costar dinero real.
Marcus escribió este módulo a mano. Tomó aproximadamente dos semanas. Este es exactamente el tipo de trabajo que justifica tener un arquitecto senior en lugar de intentar IA a través de todo.
Código Crítico para Seguridad
Nunca confiamos en Claude Code con flujos de autenticación, procesamiento de pagos, o encriptación sin revisión línea por línea. Y gracias a Dios — ocasionalmente generaba validación de JWT que era técnicamente funcional pero perdía casos extremos como sesgo de reloj de expiración de token, o no sanitizaba adecuadamente entradas antes de consultas de base de datos a pesar de usar un ORM.
Regla de oro: si un bug en este código podría perder dinero o exponer datos, un humano lo escribe y otro humano lo revisa.
Consistencia Arquitectónica de Largo Alcance
En el mes tres, la base de código era lo suficientemente grande que Claude Code a veces "olvidaría" patrones establecidos antes, incluso con contexto proporcionado. Podría usar un enfoque diferente de manejo de errores en un módulo versus otro. Marcus tuvo que ser vigilante para capturar estas inconsistencias.
Mitigamos esto manteniendo un documento "convenciones" vivo que fue incluido en cada sesión de Claude Code. Piénsalo como una guía de estilo, pero para patrones arquitectónicos.
Optimización de Rendimiento
Claude Code genera código que funciona pero no siempre genera código que sea rápido. Consultas de base de datos que hacen N+1 búsquedas. Componentes React que se redibujan innecesariamente. Puntos finales de API que cargan más datos de lo necesario.
Marcus pasó aproximadamente el 20% de su tiempo de revisión en optimización de rendimiento. No es un obstáculo, pero algo para presupuestar.
La Economía: Desglose de Costos y ROI
Aquí está la parte que todos quieren ver. Números reales.
| Categoría de Costo | Equipo Tradicional (Est.) | Acelerado por IA (Real) |
|---|---|---|
| Salarios de ingeniería (18 mo / 5 mo) | $1,890,000 | $175,000 |
| API de Claude Code / suscripción | $0 | $12,400 |
| Infraestructura (dev/staging) | $48,000 | $8,200 |
| Gestión de proyectos | $216,000 | $0* |
| QA / Prueba | $180,000 | $22,000** |
| Diseño (contratado) | $120,000 | $95,000 |
| DevOps / Configuración de infraestructura | $96,000 | $35,000 |
| Total | $2,550,000 | $347,600 |
Marcus se autogestionó usando Linear para seguimiento de tareas. Sin sobrecarga de PM.
*Contratación de un especialista de QA para las últimas 6 semanas.
Los costos de Claude Code se desglosan aproximadamente a $2,500/mes. Es el plan Max ($100/mes para la suscripción) más costos de API para sesiones extendidas. Algunos días Marcus quemaría $150-200 en llamadas de API durante sesiones de generación pesada. La mayoría de los días era $40-80.
El proyecto fue facturado a $2M. Nuestro costo total de entrega fue bajo $350K. Te dejaré hacer las matemáticas de margen.
Comparación de Velocidad
| Hito | Cronograma Tradicional | Cronograma Acelerado por IA |
|---|---|---|
| Arquitectura y Diseño | 6 semanas | 3 semanas |
| Plataforma Núcleo (auth, multi-tenancy, API base) | 10 semanas | 3 semanas |
| Desarrollo de Características (todos los módulos) | 32 semanas | 10 semanas |
| Integraciones (14 APIs de terceros) | 12 semanas | 4 semanas |
| Prueba y QA | 8 semanas | 3 semanas |
| Despliegue y Fortalecimiento | 4 semanas | 2 semanas |
| Total | 72 semanas | 25 semanas |
Lecciones para Equipos Considerando Desarrollo Acelerado por IA
Después de este proyecto, he estado pensando mucho sobre qué significa esto para cómo construimos software hacia adelante. Aquí está lo que le diría a cualquier equipo o agencia considerando este enfoque.
Aún Necesitas un Arquitecto Senior. Tal Vez Más Que Nunca.
IA no elimina la necesidad de experiencia — amplifica cualquier experiencia (o falta de) que traigas. Un desarrollador junior usando Claude Code enviará código de calidad junior más rápido. Un arquitecto senior usando Claude Code enviará código de calidad senior a una velocidad que anteriormente era imposible.
El peor escenario posible es un desarrollador de nivel medio que cree que es senior usando IA para generar código que no puede evaluar adecuadamente. Es así como obtienes una base de código que se ve bien en la superficie pero se desmorona bajo carga.
Convención Sobre Configuración, En Todas Partes
Cuanto más predecibles sean los patrones de tu base de código, mejor se desempeña IA. Usamos la misma estructura de archivo, convenciones de nombres, y organización de código en cada módulo. Esta consistencia pagó dividendos masivos a medida que Claude Code aprendía a igualar patrones existentes.
Si estás trabajando con una arquitectura de CMS sin cabeza, tener convenciones estrictas para tipos de contenido, rutas de API, y estructuras de componentes hace que el código generado por IA sea dramáticamente más confiable.
Invierte en Resúmenes de Arquitectura
La calidad de la salida de Claude Code se correlacionó directamente con la calidad de los resúmenes de arquitectura de Marcus. Las instrucciones vagas produjeron código vago. Los resúmenes detallados con modelos de datos explícitos, reglas de negocio, y requisitos de integración produjeron código que estaba cerca de estar listo para producción.
Estimamos que Marcus pasó aproximadamente el 30% de su tiempo escribiendo resúmenes de arquitectura y revisando salida, y el 70% del tiempo que un equipo tradicional habría pasado en implementación real fue manejado por Claude Code.
Desarrollo Asistido por IA Cambia Modelos de Precios
Si eres una agencia, esta es la conversación incómoda. Cuando un arquitecto puede entregar lo que solía requerir un equipo de 8, ¿cómo precias? Creemos en precios basados en valor — el cliente paga por el resultado, no por las horas. La plataforma vale $2M independientemente de si tomó 1 persona o 10 construirla.
Si estás interesado en cómo este tipo de enfoque podría funcionar para tu proyecto, nuestra página de precios desglosa cómo pensamos sobre alcance de proyectos en esta nueva realidad.
No Todo Proyecto se Ajusta a Este Modelo
Esto funcionó porque:
- Los requisitos fueron bien definidos (logística es un dominio maduro)
- Teníamos un genuino arquitecto senior disponible
- El stack tecnológico era mainstream (gran datos de entrenamiento de IA)
- El cliente nos confió para entregar sin microgestionar el tamaño del equipo
Los proyectos con requisitos ambiguos, componentes pesados en R&D, o dominios especializados (dispositivos médicos, instrumentos financieros con requisitos regulatorios) necesitan más juicio humano y deben ser dotados de personal en consecuencia.
Para proyectos construidos con frameworks como Astro donde el ecosistema es más nuevo y los datos de entrenamiento de IA son más delgados, verás menos aceleración de herramientas de IA comparadas con proyectos React/Next.js.
Preguntas Frecuentes
¿Cuánto cuesta Claude Code realmente por mes para uso pesado de desarrollo?
En este proyecto, promediamos $2,500/mes todo incluido. La suscripción de Claude Max es $100/mes (o $200/mes para el nivel superior a partir de principios de 2025), y el uso de API para sesiones de agente de Claude Code se suma dependiendo de cuánto código estés generando. Los días pesados golpean $150-200 en costos de API. Los días ligeros de revisión y refinación eran $40-80. Anthropic también ha introducido el plan Max en $200/mes que incluye uso significativo que podría reducir costos variables.
¿Puede un desarrollador junior usar Claude Code de la misma manera?
No, y esto es importante. Claude Code amplifica tu nivel de habilidad existente — no reemplaza el conocimiento arquitectónico. Un desarrollador junior usando Claude Code generará código más rápido, pero no capturarán los bugs sutiles, problemas de seguridad, problemas de rendimiento, o inconsistencias arquitectónicas que un ingeniero senior detecta inmediatamente. Necesitas a alguien que pueda evaluar la salida, no solo aceptarla.
¿Qué pasa con la calidad del código — es el código generado por IA mantenible?
Depende enteramente de las restricciones que le des. Nuestro código generado pasó las mismas reglas de lint, verificación de tipos, y estándares de revisión de código que el código escrito por humanos. El truco es establecer patrones fuertes temprano en el proyecto para que la IA tenga buenos ejemplos a seguir. Mantuvimos un documento de convenciones vivo que fue incluido en cada sesión de Claude Code. Seis meses post-lanzamiento, el equipo manteniendo la plataforma no ha reportado carga de mantenimiento inusual.
¿Funciona este enfoque para proyectos orientados al frontend?
Sí, con advertencias. Claude Code es excelente generando componentes React, manejo de formularios, hooks de búsqueda de datos, y código de gestión de estado. Es menos confiable en producir diseños CSS pixel-perfectos a partir de diseños — necesitarás más ciclos de iteración para pulido visual. Encontramos que fue aproximadamente 75% preciso en generación de UI de primer paso comparado con 85-90% para código de backend.
¿Cómo manejas revisión de código cuando solo hay un desarrollador?
Marcus revisó cada línea de código generado por IA él mismo. También trajimos a un especialista en seguridad contratado para dos sesiones de auditoría enfocadas durante el proyecto (semana 12 y semana 22). Para la fase final, un especialista de QA se unió por seis semanas. La falta de revisión de código entre pares es un riesgo genuino — lo mitigamos con herramientas automatizadas (modo estricto de TypeScript, ESLint con reglas agresivas, Vitest con umbrales de cobertura) y auditorías externas.
¿Qué pasa cuando Claude Code genera código buggy?
Sucede regularmente. El primer paso raramente es perfecto. Construimos esta expectativa en el flujo de trabajo — generar, revisar, refinar, fortalecer. La mayoría de los bugs fueron capturados durante el ciclo de revisión de Marcus. La suite de pruebas automatizada (también en gran medida generada por IA pero revisada por humanos) capturó problemas de regresión. La insight clave es que debuguear código generado por IA es más rápido que escribir código correcto desde cero, porque estás comenzando con algo que es principalmente correcto.
¿Es esto solo viable para proyectos greenfield, o funciona con bases de código existentes?
Claude Code realmente funciona bien con bases de código existentes porque puede leer y entender patrones existentes. En este proyecto, los módulos posteriores se beneficiaron de tener módulos anteriores como referencia. Desde entonces hemos usado Claude Code para adiciones de características en proyectos de clientes existentes con buenos resultados. La clave es proporcionarle suficiente contexto sobre convenciones y patrones existentes. Si tu base de código es inconsistente o está mal documentada, las adiciones generadas por IA heredarán esa inconsistencia.
¿Volverías a hacer esto?
Absolutamente. Ya lo estamos haciendo. Dos más proyectos están corriendo con este modelo ahora — uno con un solo arquitecto, otro con dos ingenieros para un sistema más complejo. La economía es demasiado convincente para ignorar. Pero quiero ser claro: esto no se trata de reemplazar desarrolladores. Se trata de cambiar la proporción de arquitectos senior a salida. Aún necesitas experiencia humana. Solo necesitas menos tipeo humano. Si estás considerando un proyecto y quieres explorar cómo este modelo podría verse, comunícate con nosotros — estamos felices de hablar a través de si es un ajuste.