
System design concepts: Los 10 conceptos más importantes que debes conocer 2025

Juan Correa
Desarrollador de Software Senior
En este artículo de system design concepts, vas a aprender los 10 conceptos más esenciales que necesitas dominar para diseñar sistemas de software robustos y escalables.
Tanto si te estás preparando para una entrevista técnica como si deseas mejorar tus habilidades en system design, este artículo te proporcionará una base sólida.
Table of Contents
Conceptos técnicos y no técnicos
Desarrollar software implica una combinación de conocimientos técnicos y habilidades interpersonales. En esta sección, exploraremos los conceptos clave que todo diseñador de sistemas debe conocer.
Lista de conceptos no técnicos
Los conceptos no técnicos son todos aquellos que se relacionan con el diseño de sistemas, pero no son técnicos en sí mismos. Algunos ejemplos son:
- Requerimientos: Los requerimientos significa entender los qué y para qué del sistema. Puedes verlo como la razón de existir del mismo.
- Requerimientos no funcionales: Los requerimientos no funcionales son los aspectos de calidad del sistema, como la seguridad, la escalabilidad, la disponibilidad, el rendimiento, etc.
- Requerimientos funcionales: Los requerimientos funcionales, como su nombre dice, son las funcionalidades o características que debe tener el sistema para resolver el problema.
- Usuarios: Los usuarios son las personas que van a utilizar el sistema. Por ejemplo:
- Un usuario final si diseñas el sistema de una app como producto.
- Otro sistema que consume tu API o tus servicios.
- Otros desarrolladores si creas una biblioteca o un framework.
- Clientes: Los clientes son quienes pagan, toman decisiones o se benefician por el sistema. A veces los usuarios y los clientes son la misma persona, pero no siempre. Ejemplo: el usuario es quien utiliza la aplicación de banca en línea, y el cliente es el banco.
- Stakeholders: Los stakeholders son todas las personas o grupos que tienen un interés en el sistema. Por ejemplo:
- Usuarios.
- Clientes.
- Desarrolladores.
- Inversionistas, etc.
- Cultura: Lo creas o no, la cultura de una empresa o de un equipo influye en cómo se diseña un sistema. Por ejemplo, si la empresa es muy jerárquica, es probable que los procesos de aprobación sean más lentos. Si la empresa es muy innovadora, es probable que se acepten más riesgos.
Es importante que consideres los aspectos no técnicos al diseñar un sistema, ya que te ayudarán a entender el contexto en el que estás trabajando y a tomar mejores decisiones.
No somos robots o maquilas de código, aunque muchos dueños de negocio así lo crean - eso habla de su cultura y sus valores como seres humanos, pero ese es otro tema.
Somos humanos que resolvemos problemas para otros humanos usando tecnología.
Ten siempre en mente esto y serás un mejor desarrollador de software.
Ya me desvié un poco, pero quería recalcar la importancia de los aspectos no técnicos en el diseño de sistemas.
Lista de conceptos técnicos
Los conceptos técnicos son todos aquellos que se relacionan con la tecnología y el diseño de sistemas. Algunos ejemplos son:
- System design: El significado de system design puede implicar varios conceptos, pero podemos simplificarlo diciendo que es el proceso de diseñar la arquitectura de un sistema para resolver un problema.
- Arquitectura de software: La arquitectura de software es la estructura de un sistema, que incluye componentes, módulos, interfaces y datos. Es la base para la construcción de un sistema.
- Componentes: Los componentes son las partes de un sistema que se pueden reutilizar, por ejemplo: una librería, un módulo, un servicio, una API, etc.
- Módulos: Los módulos son partes de un sistema que se pueden separar y reemplazar, por ejemplo: un módulo de autenticación, un módulo de facturación, un módulo de envío, etc.
- Interfaces: Las interfaces son los puntos de comunicación entre los componentes y los módulos de un sistema, por ejemplo: una API REST, una cola de mensajes, un bus de eventos, etc.
- Datos: Los datos son la información que se almacena y se procesa en un sistema, por ejemplo: una base de datos, un sistema de archivos, un sistema de caché, etc.
System design concepts para entrevistas técnicas
Si estás preparándote para una entrevista técnica de system design, es importante que conozcas los conceptos más importantes que te pueden preguntar.
Aquí te dejo una lista de los 10 conceptos más importantes que debes conocer:
Protocolos de comunicación
Un protocolo de comunicación es un conjunto de reglas que definen cómo se comunican dos sistemas.
Algunos ejemplos de protocolos de comunicación son:
- HTTP: Es un protocolo de transferencia de hipertexto que se utiliza para la comunicación entre un cliente y un servidor en la web.
- TCP: Es un protocolo de control de transmisión que se utiliza para la comunicación entre dos sistemas en una red.
- WebSockets: Es un protocolo de comunicación bidireccional que se utiliza para la comunicación en tiempo real entre un cliente y un servidor en la web.
- gRPC: Es un protocolo de comunicación de procedimiento remoto que se utiliza para la comunicación entre dos sistemas en una red.
Cuando diseñas un sistema, debes considerar cómo se van a comunicar los diferentes componentes y módulos, así como qué protocolos de comunicación vas a utilizar.
Load balancer o balanceo de carga
Load balancer o balanceo de carga es un componente que distribuye las peticiones entre varios servidores para que no se saturen.
Algunos ejemplos de load balancers son:
- Nginx: Es un servidor web y un proxy inverso que se utiliza para el balanceo de carga en la web.
- HAProxy: Es un balanceador de carga de código abierto que se utiliza para el balanceo de carga en la web.
- AWS ELB: Es un balanceador de carga de Amazon Web Services que se utiliza para el balanceo de carga en la nube.
Cuando diseñas un sistema que va a recibir muchas peticiones, debes considerar cómo vas a distribuir esas peticiones entre varios servidores para que no se saturen y asegurar la disponibilidad del sistema.
Caching o cache
Caching o cache es un componente que almacena datos en un tipo de memoria de acceso rápido para acelerar el acceso a los mismos.
Algunos ejemplos de caches son:
- Memcached: Es un sistema de almacenamiento en caché de memoria distribuida que se utiliza para acelerar el acceso a los datos en la web.
- Redis: Es un sistema de almacenamiento en caché de memoria distribuida que se utiliza para acelerar el acceso a los datos en la web.
- Varnish: Es un servidor de almacenamiento en caché de HTTP que se utiliza para acelerar el acceso a los datos en la web.
Cuando diseñas un sistema que va a acceder a los mismos datos muchas veces, debes considerar cómo vas a almacenar esos datos en caché para acelerar el acceso a los mismos y mejorar el rendimiento del sistema.
Bases de datos
Las bases de datos son sistemas de almacenamiento de datos que se utilizan para almacenar y recuperar información en un sistema.
Es un concepto de system design que debes estar familiarizado si eres desarrollador de software.
Algunos ejemplos de motores de bases de datos son:
- MySQL: Es un sistema de gestión de bases de datos relacional que se utiliza para almacenar y recuperar información en un sistema.
- PostgreSQL: Es un sistema de gestión de bases de datos relacional que se utiliza para almacenar y recuperar información en un sistema.
- MongoDB: Es un sistema de gestión de bases de datos no relacional que se utiliza para almacenar y recuperar información en un sistema.
- Redis: Es un sistema de almacenamiento en caché de memoria distribuida que se utiliza para almacenar y recuperar información en un sistema.
- Casandra: Es un sistema de gestión de bases de datos no relacional que se utiliza para almacenar y recuperar información en un sistema.
- DynamoDB: Es un sistema de gestión de bases de datos no relacional que se utiliza para almacenar y recuperar información en un sistema.
Y muchos más.
Cuando diseñas un sistema, debes considerar qué tipo de base de datos vas a utilizar, cómo vas a almacenar y recuperar la información, y cómo vas a escalar la base de datos para soportar el crecimiento del sistema.
Si bien no es necesario conocer todos los motores de bases de datos, es importante que tengas un conocimiento general de los diferentes tipos de bases de datos y sus características para poder elegir la mejor solución para tu sistema.
Lo más importante es comprender si es mejor usar una base de datos relacional o no relacional (SQL o NoSQL) y cuáles son las ventajas y desventajas de cada una.
Tolerancia a fallos o fault tolerance
La tolerancia a fallos o fault tolerance es la capacidad de un sistema para seguir funcionando en caso de que falle uno de sus componentes.
Algunos ejemplos de técnicas de tolerancia a fallos son:
- Replicación: Es la técnica de duplicar los componentes de un sistema para que si uno falla, el otro pueda seguir funcionando.
- Balanceo de carga: Es la técnica de distribuir las peticiones entre varios servidores para que si uno falla, los otros puedan seguir funcionando.
- Respaldos: Es la técnica de hacer copias de seguridad de los datos para que si se pierden, se puedan recuperar.
Vale la pena mencionar monitoreo y alertas, ya que son fundamentales para detectar y solucionar problemas antes de que afecten a los usuarios.
Cuando diseñas un sistema, debes considerar cómo vas a garantizar la tolerancia a fallos del sistema para que siga funcionando en caso de que falle uno de sus componentes.
Escalabilidad horizontal y vertical
La escalabilidad horizontal y vertical son dos técnicas para aumentar la capacidad de un sistema.
La escalabilidad horizontal es la técnica de aumentar la capacidad de un sistema añadiendo más servidores, mientras que la escalabilidad vertical es la técnica de aumentar la capacidad de un sistema añadiendo más recursos a un servidor.
Este es uno de los conceptos de system design más importantes y repetitivos en entrevistas técnicas.
Algunos ejemplos de técnicas de escalabilidad horizontal son:
- Balanceo de carga: Es la técnica de distribuir las peticiones entre varios servidores para aumentar la capacidad del sistema.
- Replicación: Es la técnica de duplicar los componentes de un sistema para aumentar la capacidad del sistema.
- Particionamiento: Es la técnica de dividir los datos en varias partes para aumentar la capacidad del sistema.
Algunos ejemplos de técnicas de escalabilidad vertical son:
- Aumento de recursos: Es la técnica de añadir más CPU, memoria, almacenamiento, etc. a un servidor para aumentar la capacidad del sistema.
- Optimización de código: Es la técnica de mejorar el rendimiento del código para aumentar la capacidad del sistema.
- Compresión de datos: Es la técnica de reducir el tamaño de los datos para aumentar la capacidad del sistema.
Vale la pena mencionar también el tema de los costos de un sistema, ya que la escalabilidad horizontal suele ser más costosa que la escalabilidad vertical.
Cuando diseñas un sistema, debes considerar cómo vas a escalar el sistema para soportar el crecimiento del mismo y garantizar la disponibilidad del sistema.
Disponibilidad o availability
La disponibilidad o availability es la capacidad de un sistema para estar disponible y accesible para los usuarios en todo momento.
Algunos ejemplos de técnicas de disponibilidad son:
- Balanceo de carga: Es la técnica de distribuir las peticiones entre varios servidores para garantizar la disponibilidad del sistema.
- Replicación: Es la técnica de duplicar los componentes de un sistema para garantizar la disponibilidad del sistema.
- Respaldos: Es la técnica de hacer copias de seguridad de los datos para garantizar la disponibilidad del sistema.
Cuando diseñas un sistema, si la disponibilidad es un requisito importante, entonces haz un análisis de riesgos y considera cómo vas a garantizar la disponibilidad del sistema en caso de que falle uno de sus componentes.
Es posible que debas sacrificar otros aspectos como la escalabilidad para garantizar la disponibilidad del sistema.
Fiabilidad o reliability
La fiabilidad o reliability es la capacidad de un sistema para funcionar correctamente y sin errores.
Algunos ejemplos de técnicas de fiabilidad son:
- Pruebas de software: Son pruebas que se realizan para garantizar que el software funcione correctamente y sin errores.
- Monitoreo y alertas: Son técnicas que se utilizan para detectar y solucionar problemas antes de que afecten a los usuarios.
- Respaldos: Son copias de seguridad de los datos que se utilizan para recuperar la información en caso de que se pierda.
Cuando diseñas un sistema, si la fiabilidad es un requisito importante, entonces debes concentrarte en cómo vas a garantizar que el sistema funcione correctamente. Por lo común, esto implica afectar otros aspectos como la escalabilidad.
Es un trade-off que debes siempre mencionar y discutir con tu equipo y con los stakeholders.
DNS
DNS o Domain Name System es un sistema de nombres de dominio que se utiliza para traducir los nombres de dominio en direcciones IP.
Algunos ejemplos de servicios de DNS son:
- Cloudflare: Es un servicio de DNS que se utiliza para traducir los nombres de dominio en direcciones IP.
- Google Cloud DNS: Es un servicio de DNS de Google Cloud Platform que se utiliza para traducir los nombres de dominio en direcciones IP.
Es importante que comprendas este concpeto porque así es como los usuarios acceden a tu sistema a través de un nombre de dominio en lugar de una dirección IP, u otro sistema que consume tu API o servicios.
Esto implica temas de seguridad ya que los DNS pueden ser atacados y redirigir a los usuarios a sitios maliciosos.
Seguridad o security
La seguridad o security es la capacidad de un sistema para protegerse contra amenazas y ataques. También incluye la protección de los datos y la privacidad de los usuarios.
La seguridad es un concepto fundamental en system design y debes tenerlo en cuenta en todo momento.
Algunos ejemplos de técnicas de seguridad son:
- Firewalls: Son sistemas de seguridad que se utilizan para proteger un sistema contra amenazas y ataques.
- Cifrado: Es la técnica de convertir la información en un código secreto para protegerla contra amenazas y ataques.
- Autenticación: Es la técnica de verificar la identidad de un usuario para proteger un sistema contra amenazas y ataques.
- Autorización: Es la técnica de controlar el acceso a los recursos de un sistema para protegerlo contra amenazas y ataques.
- Auditoría: Es la técnica de monitorear y registrar las actividades de un sistema para protegerlo contra amenazas y ataques.
- Pruebas de seguridad: Son pruebas que se realizan para identificar y corregir vulnerabilidades en un sistema.
- Actualizaciones de seguridad: Son actualizaciones que se realizan para corregir vulnerabilidades en un sistema.
Otro concepto relacionado es OWASP, que es una organización que se dedica a identificar y corregir vulnerabilidades en aplicaciones web. Ofrecen información y herramientas para proteger las aplicaciones web contra amenazas y ataques.
Todo sistema debe tener en cuenta la seguridad en alguna medida, pero si es particularmente sensible y prioritario, entonces debes dedicarle más tiempo y recursos, incluso sacrificar otros aspectos como la escalabilidad.
Por ejemplo, el cifrado de datos puede afectar el rendimiento del sistema, pero es necesario para proteger la información de los usuarios.
System design concepts con ejemplos reales
Para entender mejor los conceptos de system design, es importante que los veas en acción.
Aquí te dejo algunos ejemplos de conceptos de system design basados en casos reales:
Ejemplo de load balancing o balanceo de carga en Netflix
Recuerda que un load balancer o balanceo de carga es un componente que distribuye las peticiones entre varios servidores para que no se saturen.
Eureka de Netflix es un ejemplo práctico de load balancing. Como se detalla en su blog, distribuye peticiones entre varios servidores para asegurar la disponibilidad del sistema y escalar eficientemente.

Abordan el problema de la disponibilidad y la escalabilidad con un sistema de balanceo de carga que distribuye las peticiones entre varios servidores y asegura la disponibilidad del sistema.
Ejemplo de caching cache en Facebook
El caching o caché es un componente que almacena datos en un tipo de memoria de acceso rápido para acelerar el acceso a los mismos.
Facebook emplea caching para reducir la latencia y escalar operaciones de lectura. Según su blog, utilizan técnicas avanzadas de invalidación para garantizar la consistencia de los datos.

Abordan el problema de la consistencia de los datos con un sistema de caché consistente que garantiza que los datos sean consistentes en todos los nodos.
Ejemplo de escalabilidad en Instagram
La escalabilidad es la capacidad de un sistema para crecer y soportar un alto volumen de tráfico.
Un ejemplo real de escalabilidad son las soluciones que usa Instagram en diferentes componentes:
- Usan PostgreSQL para almacenar los datos (usuarios, metadatos de fotos, etiquetas, etc) y hacen sharding para escalar horizontalmente con diferentes bases de datos.
- Todas las instancias de PostgreSQL se ejecutan en un master-replica usando streaming replication.
- También usan Redis con un master-replica para el feed, actividades de feed, sesiones del sistema y otros sistemas relacionados.
- Para soportar una alta demanda de requests, utilizan nginx para load balancing y gunicorn para WSGI server (Web Server Gateway Interface).
Ejemplo de security o seguridad en Pinterest
La seguridad es la capacidad de un sistema para protegerse contra amenazas y ataques así como proteger los datos y la privacidad de los usuarios.
Pinterest implementa un framework de control de acceso granular para asegurar datos en entornos de Big Data. Este enfoque permite proteger información sensible y escalar el sistema de manera segura como lo explican en su blog Securely Scaling Big Data Access Controls At Pinterest.

Lo utilizan para:
- Proteger datos sensibles de los usuarios.
- Principalmente en un entorno de Big Data.
- Escalar el sistema para soportar el crecimiento.
Siguientes pasos para aprender system design
En este artículo te he compartido los principales conceptos y algunos ejemplos de system design que debes conocer si estás preparándote para una entrevista técnica o quieres diseñar un sistema de software.
Si quieres profundizar en estos conceptos y aprender más sobre system design, te recomiendo que sigas estos pasos:
- Practica con ejemplos reales: Busca casos de estudio de empresas conocidas y analiza cómo han diseñado sus sistemas para resolver problemas de escalabilidad, disponibilidad, seguridad, etc.
- Participa en proyectos de system design: Únete a proyectos de system design en tu empresa o en comunidades de desarrollo para poner en práctica tus conocimientos y aprender de otros.
- Lee libros y artículos sobre system design: Hay muchos libros y artículos sobre system design que te pueden ayudar a profundizar en los conceptos y técnicas de diseño de sistemas.