Cómo planificar la arquitectura de una app a medida
Cómo planificar la arquitectura de una app a medida: guía técnica paso a paso
Antes de teclear la primera línea de código toca contestar a unas cuantas preguntas que van a condicionar los próximos años de tu aplicación. ¿Monolito o microservicios? ¿SQL o NoSQL? ¿REST o GraphQL? ¿AWS, GCP o Azure? Ninguna tiene respuesta única, y precisamente por eso conviene pensarlas con calma.
Voy a contarte cómo planificar la arquitectura de una app a medida desde la trinchera: con criterios que aplico cuando me siento con un cliente, ejemplos del mercado español y sin disfraces de marketing.
Por qué la arquitectura es la decisión más cara de tu proyecto
Cambiar el color de un botón te lleva diez minutos. Migrar la base de datos cuando ya tienes 50.000 registros en producción te puede comer meses y un presupuesto de cinco cifras. La arquitectura no se ve en las pantallas, pero sostiene todo lo demás: rendimiento, seguridad, capacidad de crecer y la facilidad con la que mañana metes una funcionalidad nueva sin que se caiga el castillo.
El patrón que veo una y otra vez en España: una startup saca un MVP improvisado, gana tracción, y a los dieciocho meses descubre que el sistema cruje. Toca reescribir media aplicación. Ese “ahorro” del primer mes acaba multiplicando el coste por tres, y encima con el negocio ya en marcha, que es la peor situación para tocar cimientos.
Monolito vs microservicios: qué necesitas de verdad
Aquí es donde más decisiones por moda he visto, y donde más caro se paga. Te lo cuento como suelo planteárselo a un cliente.
Arquitectura monolítica
Todo el código vive en una sola aplicación. Un despliegue, una base de datos, un repositorio. Suena anticuado, pero funciona razonablemente bien en muchísimos contextos.
Cuándo tiene sentido:
- Equipos pequeños, entre dos y seis desarrolladores.
- MVPs y primeras versiones del producto, cuando todavía estás aprendiendo qué problema resuelves.
- Apps con lógica de negocio acotada, que sabes que no va a explotar en veinte direcciones.
- Presupuestos donde la simplicidad operativa pesa más que la elegancia distribuida.
Buena parte de las apps a medida que veo en pymes españolas funcionan perfectamente como un monolito bien estructurado: un ERP interno de pedidos, el portal de clientes de una aseguradora regional, la plataforma de reservas de una cadena hotelera. Monolito modular, capas separadas, fronteras claras. Punto.
Arquitectura de microservicios
La app se trocea en servicios autónomos que se hablan entre sí por APIs o colas. Cada servicio gestiona su propia base de datos y se despliega por su cuenta.
Cuándo tiene sentido:
- Equipos grandes con varios squads pisándose los unos a los otros en el mismo repo.
- Necesidad real de escalar un módulo de forma independiente, por ejemplo cuando el motor de pagos recibe diez veces más carga que el de informes.
- Alta disponibilidad estricta, donde no puedes permitir que un fallo localizado tumbe la plataforma entera.
Lo que nadie te cuenta es el coste oculto: los microservicios traen una factura operativa que mucha gente subestima. Hay que orquestar contenedores con Kubernetes, montar observabilidad distribuida con algo tipo Prometheus y Grafana, lidiar con transacciones que cruzan servicios, y tener un perfil DevOps con horas de vuelo. Para una empresa de treinta personas que necesita un CRM a medida, irse a microservicios es como alquilar una nave industrial para guardar la bici. Yo elegiría monolito sin pensarlo demasiado.
La opción intermedia: monolito modular
En la mayoría de proyectos que aterrizan en mi mesa, lo razonable es un monolito bien modularizado, con dominios bien delimitados, que el día de mañana pueda escupir servicios independientes si el negocio lo pide. Es el enfoque que recomendamos cuando se discute qué stack tecnológico elegir para una web a medida: empezar sencillo y mantenerse abierto a evolucionar.
Elegir base de datos: SQL vs NoSQL y cuándo usar cada una
La base de datos es el corazón de tu app. Si te equivocas aquí, las consecuencias tardan meses en asomar y siempre llegan en el peor momento.
Bases de datos relacionales (SQL)
PostgreSQL, MySQL, MariaDB. Datos estructurados, relaciones claras entre entidades, transacciones ACID que garantizan que las cosas o pasan del todo o no pasan.
Encajan bien en:
- Aplicaciones financieras y contables.
- ERPs y CRMs, donde las relaciones entre tablas se vuelven una telaraña.
- Sistemas donde la integridad del dato es innegociable: sanidad, banca, seguros.
- La gran mayoría de aplicaciones empresariales, francamente.
PostgreSQL se ha vuelto el estándar de facto para proyectos nuevos en España, y con motivo. Es potente, gratuito y trae extensiones como PostGIS para datos geográficos o TimescaleDB para series temporales, que evitan tener que meter otro motor distinto solo para esos casos.
Bases de datos NoSQL
MongoDB, DynamoDB, Cassandra. Esquemas flexibles, escalado horizontal nativo y rendimiento muy bueno en lecturas masivas. Tienden a brillar en catálogos de productos con atributos que cambian, en almacenamiento de logs y analítica, en IoT con escritura intensiva o en sistemas de contenidos cuyo esquema no para de mutar.
Enfoque pragmático
Muchas apps acaban combinando las dos cosas, y no pasa nada. Un e-commerce puede tirar de PostgreSQL para pedidos y facturación, y montar Elasticsearch encima para el buscador. No es una elección binaria: lo sano es asignar la herramienta adecuada a cada problema, aunque eso signifique convivir con dos motores.
Diseño de API: REST vs GraphQL
La API es el contrato entre tu frontend y tu backend, y a menudo también con terceros que integran tu plataforma. Tratarla como contrato, y no como un detalle de implementación, te ahorra muchísimos disgustos.
REST
El estándar más extendido, sin discusión. Cada recurso tiene su URL, lo manipulas con verbos HTTP, y casi cualquier desarrollador con dos años de experiencia se mueve con soltura. Fácil de cachear, fácil de documentar, soportado por absolutamente todas las herramientas.
Para la mayoría de apps empresariales a medida, REST con una buena documentación OpenAPI es la opción más sólida. Curva de aprendizaje mínima, tooling maduro y nadie en el equipo se rasca la cabeza al integrar.
GraphQL
Aquí el cliente pide exactamente los datos que necesita en cada petición. Resulta muy útil cuando tienes varios frontends —web, app móvil, una tablet en tienda física— que necesitan vistas distintas del mismo modelo de datos.
Ventajas reales: evita el overfetching, reduce el número de peticiones en interfaces complejas y deja evolucionar el API sin romper a los clientes existentes. Lo que pagas: más complejidad en el backend, cacheado que se complica bastante respecto a REST y la necesidad de gente con experiencia específica en el ecosistema (resolvers, batching, control de N+1).
La decisión práctica
Si tienes un único frontend web y un equipo compacto, REST y a otra cosa. Si vas a servir datos a tres o más clientes con necesidades distintas, GraphQL empieza a justificar la inversión. En medio queda mucho gris, y ahí tendería a tirar de REST con endpoints específicos antes de abrir la caja de Pandora.
Infraestructura cloud: AWS, Google Cloud y Azure
Las tres grandes ofrecen servicios equivalentes para casi cualquier necesidad razonable. La elección depende más del contexto del cliente que del benchmark técnico de turno.
AWS lidera el mercado en España, sobre todo entre startups y empresas con perfil tecnológico marcado. Tiene el mayor catálogo de servicios, la comunidad más activa y la red de partners más profunda. La región eu-south-2 en Aragón ha mejorado bastante las latencias para el mercado ibérico, así que ya no hay excusa de “es que está todo en Irlanda”.
Google Cloud Platform brilla cuando el proyecto tira mucho de datos o machine learning. BigQuery, Vertex AI y las integraciones con el ecosistema Google son difíciles de replicar, y los committed use discounts hacen los precios de cómputo bastante competitivos.
Microsoft Azure es la opción natural si el cliente ya vive en el ecosistema Microsoft: Active Directory, Office 365, Dynamics. Aquí no hay tanto debate técnico como inercia de plataforma, y la inercia, en cloud, pesa.
Factores que importan en España
- Cumplimiento RGPD: las tres tienen regiones en Europa, pero verifica explícitamente que tus datos viven dentro de la UE, no des por supuesto el default.
- Soporte en español: AWS y Azure ofrecen atención en castellano; GCP va más justo en este punto.
- Costes: tira de las calculadoras antes de elegir, y si puedes, simula un mes de uso real. Una configuración mal pensada dispara la factura en cuanto el tráfico sube.
Escalabilidad: diseñar para crecer sin reescribir
Escalar no es solo aguantar más usuarios. Es poder añadir funcionalidades, enchufar nuevos sistemas y adaptarte a giros de negocio sin que la arquitectura se transforme en un cuello de botella. Escalar un monolito mal pensado es como ampliar una casa por la que ya pasan tres familias: cualquier tabique que muevas hace temblar el resto.
Principios que funcionan en el mundo real:
- Separa la lógica de negocio del framework: tu dominio no debería casarse con Django, Laravel ni Spring. Si mañana cambias de framework —y pasa más a menudo de lo que crees—, el núcleo de la aplicación tiene que sobrevivir.
- Versiona la API desde el día uno:
/api/v1/parece pedante cuando solo tienes una versión, pero te ahorra noches en vela cuando aparece la segunda y hay clientes en producción. - Saca los procesos pesados a colas: generación de PDFs, envío de emails masivos, procesado de ficheros… fuera del flujo principal. RabbitMQ, Amazon SQS o Redis con Celery son combinaciones probadas y aburridas, que es justo lo que quieres en infraestructura.
- Cachea con cabeza: Redis para sesiones y datos calientes, CDN para estáticos, caché de queries a nivel de aplicación. Una buena estrategia puede recortar la carga del servidor entre un 60 y un 80%, y no es ninguna exageración.
Seguridad desde el diseño: no es un añadido, es un cimiento
Parchear vulnerabilidades a posteriori sale caro y, peor aún, sale arriesgado. La seguridad se piensa cuando se está dibujando la arquitectura, no cuando ya está la app en producción.
Decisiones arquitectónicas con impacto directo en seguridad:
- Autenticación y autorización centralizadas: apóyate en estándares como OAuth 2.0 y OpenID Connect. No te inventes tu propio sistema de tokens, por favor.
- Cifrado en tránsito y en reposo: TLS en todas las comunicaciones, y cifrado de campos sensibles a nivel de base de datos.
- Principio de mínimo privilegio: cada servicio y cada usuario accede solo a lo que necesita para hacer su trabajo, ni un permiso más.
- Gestión de secretos: nunca, jamás, credenciales en el repositorio. AWS Secrets Manager, HashiCorp Vault o Google Secret Manager hacen este trabajo y te quitan un problema enorme de encima.
- Auditoría: log de accesos y de cambios sobre datos sensibles. En España es obligatorio para cumplir con la LOPDGDD, así que mejor diseñarlo bien que parchearlo en una auditoría.
Si el proyecto maneja datos de salud (ENS) o datos financieros con tarjeta (PCI-DSS), estas medidas no son opcionales y conviene incorporarlas el primer día, no en una segunda fase mítica que nunca llega.
CI/CD: automatizar el camino del código a producción
Un pipeline de integración continua y despliegue continuo no es un capricho reservado a equipos grandes. En cualquier app a medida que vaya a evolucionar —y todas evolucionan— es lo mínimo razonable.
Lo básico que necesitas:
- Repositorio Git con ramas protegidas y revisión de código obligatoria. GitHub, GitLab o Bitbucket, según preferencia del equipo.
- Tests automatizados ejecutándose en cada pull request: unitarios siempre, de integración casi siempre, y end-to-end para los flujos críticos del negocio.
- Build automatizado que genera el artefacto desplegable, normalmente una imagen Docker o un bundle compilado.
- Despliegue automatizado a staging y producción, con un rollback que se pueda disparar sin pensar mucho cuando algo va mal.
Combinaciones habituales en proyectos españoles: GitHub Actions cubre de sobra a equipos medianos, GitLab CI/CD encaja bien cuando quieres todo bajo un mismo techo, y ArgoCD se ha vuelto la referencia para despliegues en Kubernetes con enfoque GitOps.
Un pipeline bien montado reduce los errores en producción y libera al equipo para construir funcionalidades en lugar de apagar fuegos a las nueve de la noche.
Cómo empezar: un proceso de planificación que funciona
Si vas a diseñar la arquitectura de tu app a medida, este es el orden en el que yo abordaría las decisiones arquitectónicas:
- Documenta requisitos funcionales y no funcionales: qué hace la app, cuántos usuarios esperas, qué integraciones tendrá, qué normativa la afecta.
- Define los dominios de negocio: agrupa funcionalidades en módulos con responsabilidades nítidas, antes de elegir tecnologías.
- Elige el patrón de arquitectura: monolito, monolito modular o microservicios, según el tamaño real del proyecto y del equipo —no según el último post de Hacker News.
- Selecciona el stack técnico: lenguaje, framework, base de datos, infraestructura. Cada decisión justificada por el contexto, no por la moda del trimestre.
- Diseña la API y los contratos entre módulos: define cómo se hablan las piezas antes de empezar a teclear.
- Planifica la seguridad y el cumplimiento normativo: RGPD siempre, ENS o PCI-DSS si aplica.
- Monta el pipeline de CI/CD: que el primer commit ya pase por un proceso automatizado, no algo que dejas para “cuando tengamos tiempo”.
Cada paso te deja un entregable revisable, y cada decisión queda explícita y compartida por el equipo. Eso, a la larga, vale más que cualquier framework de moda.
Da el primer paso con un equipo que conoce el terreno
Planificar la arquitectura de una app a medida exige experiencia en proyectos reales y la cintura para equilibrar ambición técnica con presupuesto pragmático. En Tangram Consulting llevamos años acompañando a empresas españolas en estas decisiones, justo antes de que se conviertan en deuda técnica.
Si tienes un proyecto entre manos y quieres apoyarlo en una arquitectura sólida desde el primer commit, cuéntanos en qué estás trabajando. Analizamos tu caso, te ponemos opciones encima de la mesa y nos remangamos contigo en la ejecución.