Construí una Plataforma de $2M con Un Arquitecto e IA — Así es Cómo
Tu arquitecto envía el módulo de autenticación a las 11 PM de un martes. Sin pull requests esperando revisión. Sin standup al día siguiente para explicar los merge conflicts. Solo un ingeniero senior y Claude Code, moviéndose más rápido que tu último equipo de cuatro personas. Hace cinco meses, los inversores dijeron que esta plataforma logística tomaría 18 meses y medio millón en nómina. La semana pasada, la valoraron en $2 millones. ¿El equipo de ingeniería completo? Una persona que entendía el dominio, emparejada con una IA que escribía código de producción correcto a la primera más a menudo de lo que debería. Sin desarrolladores offshore. Sin facturas de contratistas. Sin tickets de Jira acumulándose. Pero tres modos de fallo casi matan el proyecto — y el tercero nos costó dos semanas que nunca recuperaremos.
No estoy escribiendo esto para promocionar IA. He sido quemado por el ciclo de hype suficientes veces. Estoy escribiendo esto porque lo que pasó en este proyecto cambió fundamentalmente cómo pienso sobre composición de equipos, 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 recorrer exactamente cómo.
Tabla de Contenidos
- El Proyecto: Qué Estábamos Construyendo Realmente
- Por Qué Un Arquitecto En Lugar de Un Equipo Completo
- Cómo Claude Code Realmente Se Ajusta a Un Flujo de Trabajo Real
- La Stack de Tecnología 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 Construyendo Realmente
No puedo nombrar al cliente — territorio NDA — pero puedo describir la plataforma. Es un producto B2B SaaS en el espacio logístico. Arquitectura multi-tenant. Dashboards de seguimiento en tiempo real. Control de acceso basado en roles complejo que abarca organizaciones, equipos, y usuarios individuales. Integración con 14 APIs diferentes de terceros (transportistas, procesadores de pagos, bases de datos aduanales). Un portal para clientes y un sistema de administrador interno.
El tipo de proyecto donde, en un entorno de agencia típico, tendrías que personal con un tech lead, 2-3 desarrolladores senior, un par de nivel medio, una persona dedicada de DevOps, y quizás un ingeniero de QA. La estimación original del cliente de otra agencia fue $3.2M durante 20 meses con un equipo de 9.
Propusimos $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 merge conflicts se convierten en un ritual diario. Siempre alguien está bloqueado esperando la revisión de PR de alguien más.
Con un arquitecto, todo el estado del sistema vive en la cabeza de una persona. No hay impuesto de cambio de contexto al explicar tu enfoque en un pull request. Sin diseño por comité. Sin reuniones de sprint planning de dos horas.
Pero una persona solo puede escribir tan rápido. Una persona solo puede mantener tantos archivos en memoria de trabajo. Una persona se cansa a las 6pm y comete errores a las 8pm.
Ahí es donde Claude Code entra. No como reemplazo del arquitecto, sino como multiplicador de fuerza. 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 a esta escala antes. Su trabajo en este proyecto fue:
- Decisiones de diseño y arquitectura de sistemas
- Definición de límites de módulos y contratos de datos
- Escritura del código de ruta crítica (auth, procesamiento de pagos, orquestación de pipeline de datos)
- Revisión y refinamiento de todo lo que Claude Code producía
- Infraestructura y arquitectura de despliegue
- Auditorías de seguridad
Lo que no hizo: escribir endpoints CRUD boilerplate, construir componentes de UI desde diseños, escribir tests unitarios para lógica sencilla, crear migraciones de base de datos, o hacer scaffold 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 una manera estructurada. No prompts vagos como "construye me un sistema de gestión de usuarios". En su lugar, crearía lo que comenzamos a llamar "architecture briefs" — documentos detallados que especificaban:
- La responsabilidad y límites del módulo
- Modelos de datos con tipos de campo exactos y relaciones
- Contrato API (endpoints, formas de request/response)
- Reglas de negocio y casos edge
- Expectativas de manejo de errores
- Qué módulos existentes necesitaba integrar
Luego alimentaría estos a Claude Code en chunks. 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 "Read through /src/modules/shipment/ and /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 actual con el architecture brief
claude "Build the invoicing module following the architecture brief in
/docs/briefs/invoicing.md. Follow the exact same patterns as the
shipment module for service layer, repository layer, and route handlers.
Usa el middleware de manejo de errores existente. Escribe tests para toda
la 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 ruta, middleware, y tests. Marcus revisaría la salida, haría correcciones, e iteraría. El ciclo completo para un módulo de complejidad media tomaba aproximadamente 2-3 horas en lugar de los 2-3 días que tomaría a un desarrollador senior.
El Bucle 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á quizás 70-80% ahí. Pero ese 20-30% restante es donde importa más la experiencia del arquitecto.
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
- Endurecers — Marcus maneja manualmente secciones críticas de seguridad
- Probar — Ejecuta los tests generados, agrega casos edge que Claude extrañó
Este bucle típicamente pasaba por 2-3 ciclos por módulo. Por el tercer mes del proyecto, Claude Code estaba produciendo código de primer paso que estaba más cercano al 85-90% listo para producción, porque la base de código tenía suficientes patrones establecidos para que los siguiera.
La Stack de Tecnología y Decisiones de Arquitectura
Elegimos la stack deliberadamente para maximizar la productividad asistida por IA:
- Next.js 14 (App Router) — para el portal de cliente y dashboard de administrador
- Node.js con Fastify — para la capa API (separada de Next.js)
- PostgreSQL — base de datos primaria
- Redis — cacheo, gestión de sesiones, pub/sub en tiempo real
- Drizzle ORM — acceso a base de datos type-safe
- Turborepo — gestión de monorepo
- Vercel — despliegue de frontend
- AWS (ECS Fargate) — API y workers de fondo
Usamos 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 la IA hubiera caído significativamente. Puedes aprender más sobre cómo abordamos desarrollo Next.js a escala.
Drizzle ORM fue una elecció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 migraciones es más simple cuando estás generando muchos cambios de esquema rápidamente.
// Ejemplo: Claude Code generó este esquema de facturas
// a primera pasada 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 endpoints REST, esquemas de validación de request (usamos Zod), serializadores de respuesta, métodos de servicio básicos — Claude Code los golpeó en minutos. A través del proyecto, estimamos había aproximadamente 180 endpoints API. Quizás 140 de ellos eran operaciones estándar CRUD o query que Claude Code generó con revisión mínima.
Generación de Tests
Claude Code escribió aproximadamente 2,400 tests a través del proyecto. ¿Eran todos perfectos? No. Aproximadamente el 15% necesitaba rework significativo. Pero tener el 85% de tu suite de tests generada y funcionando es un ahorro de tiempo masivo. Marcus enfocó su energía de testing en tests de integración y los casos edge complicados que Claude Code no podía anticipar.
Desarrollo de Componentes de UI
El portal de 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 API, y Claude Code generaría los componentes de React, hooks para data fetching (usamos TanStack Query), manejo de formularios con React Hook Form + Zod, y estados de loading/error. La salida fue consistentemente buena — quizás 75% pixel-accurate a primera generación.
Migraciones de Base de Datos y Evolución de Esquema
Como los requisitos evolucionaban (y siempre lo hacen), Claude Code manejaba migraciones de esquema suavemente. Describe el cambio que necesitas, y genera el archivo de migración, actualiza el esquema, actualiza queries afectadas, y ajusta los tipos de TypeScript. Lo que solía ser una sesión de refactoring 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 API, comentarios de código inline, archivos README, e incluso documentos de runbook para operaciones. Marcus revisaría y ajustaría, pero la salida base era genuinamente útil. Terminamos con mejor documentación que el 90% de los proyectos que he visto, simplemente porque el costo de generarla 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 ruteo de envíos — que necesitaba considerar disponibilidad de transportistas, 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 se veí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 usar IA para todo.
Código Crítico de Seguridad
Nunca confiamos a Claude Code con flujos de auth, procesamiento de pagos, o encriptación sin revisión línea por línea. Y gracias a esto — ocasionalmente generaba validación JWT que era técnicamente funcional pero extrañaba casos edge como clock skew de expiración de token, o no sanitizaba inputs adecuadamente antes de queries 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
Por el mes tres, la base de código era lo suficientemente grande que Claude Code a veces "olvidaba" patrones establecidos anteriormente, incluso con contexto proporcionado. Podría usar un enfoque diferente de manejo de errores en un módulo versus otro. Marcus tenía que ser vigilante sobre atrapar estas inconsistencias.
Mitigamos esto manteniendo un documento de "convenciones" vivo que se incluía 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 es rápido. Queries de base de datos que hacen fetches N+1. Componentes de React que re-renderizan innecesariamente. Endpoints API que cargan más datos de los necesarios.
Marcus pasó aproximadamente el 20% de su tiempo de revisión en optimización de rendimiento. No es un trato roto, 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 |
| Claude Code API / suscripción | $0 | $12,400 |
| Infraestructura (dev/staging) | $48,000 | $8,200 |
| Gestión de Proyectos | $216,000 | $0* |
| QA / Testing | $180,000 | $22,000** |
| Diseño (contratado) | $120,000 | $95,000 |
| DevOps / Setup de Infraestructura | $96,000 | $35,000 |
| Total | $2,550,000 | $347,600 |
Marcus se auto-gestionó usando Linear para seguimiento de tareas. Sin sobrecarga de PM.
*Contrató un especialista en QA para las últimas 6 semanas.
Los costos de Claude Code se desglosan en aproximadamente $2,500/mes. Eso 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 estaba $40-80.
El proyecto facturó $2M. Nuestro costo total de entrega fue bajo $350K. Te dejaré que hagas las matemáticas de margen.
Comparación de Velocidad
| Hito | Timeline Tradicional | Timeline Acelerado por IA |
|---|---|---|
| Arquitectura & Diseño | 6 semanas | 3 semanas |
| Plataforma Core (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 |
| Testing & QA | 8 semanas | 3 semanas |
| Despliegue & Hardening | 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 en lo que esto significa para cómo construimos software de aquí en adelante. Aquí está lo que le diría a cualquier equipo o agencia considerando este enfoque.
Aún Necesitas un Arquitecto Senior. Quizás Más Que Nunca.
IA no elimina la necesidad de experiencia — amplifica cualquier experiencia (o falta de ella) 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 antes 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 apropiadamente. Así es como consigues una base de código que se ve bien en la superficie pero se derrumba bajo carga.
Convención Sobre Configuración, En Todas Partes
Cuanto más predecibles sean los patrones de tu base de código, mejor funciona 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 mientras Claude Code aprendía a igualar patrones existentes.
Si estás trabajando con una arquitectura de CMS headless, 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 Architecture Briefs
La calidad de la salida de Claude Code se correlacionó directamente con la calidad de los architecture briefs de Marcus. Instrucciones vagas produjeron código vago. Briefs 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 gastó aproximadamente el 30% de su tiempo escribiendo architecture briefs y revisando salida, y el 70% del tiempo que un equipo tradicional habría gastado en implementación actual 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 precios? 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 scoping de proyectos en esta nueva realidad.
No Cada Proyecto Se Ajusta a Este Modelo
Esto funcionó porque:
- Los requisitos estaban bien definidos (logística es un dominio maduro)
- Teníamos un arquitecto genuinamente senior disponible
- La tech stack era mainstream (excelentes datos de entrenamiento de IA)
- El cliente confiaba en nosotros para entregar sin microgestionar el tamaño del equipo
Proyectos con requisitos ambiguos, componentes de investigación pesada, o dominios especializados (dispositivos médicos, instrumentos financieros con requisitos regulatorios) necesitan más juicio humano y deberían ser staffed correspondientemente.
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 comparado con proyectos React/Next.js.
Preguntas Frecuentes
¿Cuánto cuesta Claude Code realmente por mes para desarrollo pesado?
En este proyecto, promediamos $2,500/mes todo incluido. La suscripción Claude Max es $100/mes (o $200/mes para el nivel más alto a partir de principios de 2026), y el uso de API para sesiones agentic de Claude Code se acumula dependiendo de cuánto código estés generando. Días pesados golpean $150-200 en costos de API. Días de revisión-y-refinamiento ligeros fueron $40-80. Anthropic también ha introducido el plan Max a $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 conocimiento arquitectónico. Un desarrollador junior usando Claude Code generará código más rápido, pero no atrapará los bugs sutiles, problemas de seguridad, problemas de rendimiento, o inconsistencias arquitectónicas que un ingeniero senior nota inmediatamente. Necesitas alguien que pueda evaluar la salida, no solo aceptarla.
¿Qué hay sobre la calidad del código — es el código generado por IA mantenible?
Depende completamente de las restricciones que le des. Nuestro código generado pasó las mismas reglas de linting, type checking, 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 se incluía 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 con mucho frontend?
Sí, con salvedades. Claude Code es excelente en generar componentes React, manejo de formularios, hooks de data fetching, y código de gestión de estado. Es menos confiable en producir layouts CSS pixel-perfect desde diseños — necesitarás más ciclos de iteración para pulido visual. Encontramos que fue aproximadamente 75% accurate a primera pasada en generación de UI comparado con 85-90% para código backend.
¿Cómo manejas revisión de código cuando hay solo un desarrollador?
Marcus revisó cada línea de código generado por IA. También trajimos un especialista de seguridad contratado para dos sesiones de auditoría enfocadas durante el proyecto (semana 12 y semana 22). Para la fase final, un especialista en QA se unió por seis semanas. La falta de revisión de código de pares es un riesgo genuino — lo mitigamos con herramientas automatizadas (modo strict de TypeScript, ESLint con reglas agresivas, Vitest con umbrales de cobertura) y auditorías externas.
¿Qué pasa cuando Claude Code genera código buggy?
Ocurre regularmente. La primera pasada raramente es perfecta. Construimos esta expectativa en el flujo de trabajo — generar, revisar, refinar, endurecer. La mayoría de bugs fueron atrapados durante el ciclo de revisión de Marcus. La suite de tests automatizados (también en gran medida generada por IA pero revisada por humanos) atrapó problemas de regresión. La clave es que debuggear código generado por IA es más rápido que escribir código correcto desde cero, porque estás comenzando desde algo que es mayormente correcto.
¿Es esto solo viable para proyectos greenfield, o funciona con bases de código existentes?
Claude Code actualmente 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 cliente existentes con buenos resultados. La clave es proporcionarle suficiente contexto sobre convenciones y patrones existentes. Si tu base de código es inconsistente o pobremente documentada, las adiciones generadas por IA heredarán esa inconsistencia.
¿Harías esto de nuevo?
Absolutamente. Ya lo estamos haciendo. Dos proyectos más están corriendo con este modelo en este momento — uno con un arquitecto singular, 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 ratio de arquitectos senior a salida. Aún necesitas la experiencia humana. Solo necesitas menos de la máquina escribiendo. Si estás considerando un proyecto y quieres explorar qué podría verse como este modelo, contáctanos — somos felices de hablar si es un ajuste.