¿Cómo es una entrevista de System Design? Guía para developers
Una entrevista de System Design puede parecer intimidante, pero si tienes a mano un mapa para navegarla, seguramente te sentirás más cómodo y tranquilo.
Probablemente, en tu carrera como desarrollador, te relaciones con el diseño de sistemas de varias maneras: en una primera etapa, te permitirá abordar los problemas de desarrollo con más confianza y aplicar los principios de diseño a tu trabajo diario. A medida que avances, tengas más experiencia y seniority, el diseño de sistema se convertirá en una parte central de tus procesos de entrevista y, dependiendo del rol, también en una parte fundamental de tu trabajo diario.
En este artículo, aprenderás las claves para pasar con éxito tu entrevista de diseño de sistemas: cuáles son conceptos fundamentales y qué hacer y qué no hacer durante una entrevista. Te daremos todos los tips para que puedas avanzar en la búsqueda de un nuevo trabajo como programador. ¡Comencemos!
¿Qué es una entrevista de System Design?
En una entrevista de diseño de sistemas, los entrevistadores te pedirán que diseñes una aplicación a escala web. ¡Pero cuidado! No se trata solo de mostrar tus conocimientos sobre sistemas y arquitectura, sino también de cómo intercambias con tu entrevistador para construir juntos una solución.
Las entrevistas sobre diseño de sistema serán diferentes según el rol y el seniority que vayas a desempeñar, pero te recomendamos seguir esta estructura para encarar bien el problema y manejar el tiempo de forma eficiente:
¿Cómo es una pregunta de System Design?
Puedes darte cuenta de que el desafío que recibiste en la entrevista es una pregunta sobre diseño de sistemas de una manera bastante simple: el entrevistador comenzará con una descripción general de alto nivel de una aplicación o servicio. Es probable que te consulten si estás familiarizado con el tema y, luego te pidan que lo diseñes.
Veamos algunos ejemplos de preguntas:
- ¿Cómo diseñarías Instagram/Youtube/WhatsApp?
- ¿Por qué crees que el marco X encaja mejor que el marco Y en esta aplicación?
- Queremos diseñar un servicio de análisis de datos que haga X…
- ¿Cómo crearías el sistema de suministro de noticias para Facebook?
- ¿Cómo diseñarías un servicio global de transmisión de video?
- Diseña un servicio de acortamiento de URL (TinyURL)
¿Cómo superar una entrevista de System Design?
Tienes que recordar que en este tipo de entrevistas se evaluará tanto lo que sabes sobre conceptos técnicos, compensaciones, mantenibilidad e identificación de cuellos de botella como la manera en que te comunicas con tu entrevistador.
La regla es sencilla: si eres capaz de trabajar con tu entrevistador para resolver el problema y de mostrar con claridad tus ideas, podrás construir soluciones de forma colaborativa junto a tu futuro equipo.
Pasos para superar una entrevista de System Design
Conozcamos los 4 pasos que te ayudarán a crackear tu entrevista:
1. Comprende el problema y establece el alcance del diseño
Es tu momento de hacer las preguntas aclaratorias que te ayuden a comprender el desafío: quiénes son los usuarios, qué necesitan y cuáles son las entradas y salidas del sistema. Preguntar sobre estos puntos te permitirá enfocarte y dimensionar el alcance del diseño.
Muchas veces, el planteamiento del problema es poco preciso a propósito porque buscan que seas tú quien solicite los requisitos. Las entrevistas de este tipo son básicamente una conversación abierta que no tiene una solución correcta, por lo que es bueno comenzar con algunas suposiciones básicas. Imaginemos que, en vez de pedirte que diseñes Google Analytics, te plantean un desafío que comienza así: “Quisiéramos crear un servicio de análisis que pueda hacer lo siguiente…”.
¿Qué preguntas esperan escuchar de tu parte en una entrevista de System Design? Veamos algunos ejemplos:
- ¿Cuáles son los casos de uso? ¿Quiénes usarán el servicio?
- ¿Por cuánto tiempo necesitamos almacenar los datos? (te ayudará a identificar el almacén de datos: en memoria o en disco, NoSQL o SQL, en columnas o series temporales, etc.)
- ¿Cuál es la escala de las métricas que buscamos obtener?
- ¿Es necesario que haya un cliente web?
2. Haz una propuesta de diseño de alto nivel
Es clave que confirmes si tu enfoque satisface las necesidades y restricciones antes de saltar a la implementación. Conversa con tu entrevistador de la misma forma que lo harías con los miembros de tu equipo frente a un problema real.
- Puedes comenzar con un diseño de alto nivel siguiendo estos pasos:
- Identifica los componentes para resolver el problema real: ¿Cuáles son? ¿Cómo se relacionan?
- Divide tu sistema completo en 6 ó 7 componentes principales.
- Analiza el rol y la responsabilidad de cada uno y cómo va a interactuar o comunicarse entre sí.
3. Profundiza el diseño
Cuando confirmes que estás en el camino correcto, entra en detalles:
- Discute el frontend, el backend, las redes, el almacenamiento en caché, el equilibrio de carga, la cola, la base de datos, las llamadas a API externas, la interacción del usuario, los procesos fuera de línea, etc.
- Comenta con tu entrevistador qué tecnologías o bases de datos puede usar en su sistema.
Como no siempre hay una respuesta única, deberás poder justificar cada decisión que tomes.
4. Identifica los puntos de mejora
Puedes terminar tu entrevista haciendo un resumen de tu diseño, identificando los cuellos de botella y los posibles puntos de mejora.
Por ejemplo, qué tipo de fallas puede haber en tu sistema y cuáles serían las posibles soluciones. ¿Hay alguna copia de seguridad de los datos en caso de que el servidor falle y se pierda todo? Si algún componente falla, ¿cuál es la solución para ejecutar el sistema sin problemas?
Claves para afrontar tu entrevista de diseño de sistemas
Ya tienes en claro cuáles son los pasos a seguir durante una entrevista de System Design. Ahora, toma nota de algunos consejos indispensables adicionales:
- Conversa con tu entrevistador: piensa que es un miembro del equipo que lideras con quien tienes que alcanzar una posible solución.
- Expresa tus pensamientos de manera clara: tómate el tiempo para explicar tus ideas y enfoques. La comunicación es una de las habilidades blandas que se evalúan en estas instancias. Si puedes explicárselo al entrevistador, también puedes hacerlo en tu equipo.
- Justifica tus decisiones: el razonamiento crítico y la argumentación son claves para un diseño de software exitoso. En ocasiones, es más importante la argumentación sobre tu decisión que la elección en sí.
- Usa enfoques conocidos: si te enfrentas a un problema, piensa en enfoques estándar para ofrecer soluciones. No te enredes con enfoques que no conoces demasiado.
- Mantente actualizado sobre las soluciones actuales: debes tener en cuenta si en el mercado se están adoptando ciertas prácticas de diseño o de productos con más frecuencia que otras.
- Sé flexible: puede que necesites cambiar tus objetivos a medida que cambien los requisitos. Si notas que el entrevistador está muy interesado en saber algo particular del sistema, comienza por esa parte aunque no sea la que más importe a ti.
Errores a evitar durante tu entrevista de System Design
- Memorizar la resolución de un ejercicio.
- Apresurarse y entrar en detalles antes de tiempo.
- No mantener las cosas simples.
- Estar cerrado a soluciones alternativas.
Los candidatos que superan las entrevistas de system design, no siempre tienen años de experiencia trabajando en sistemas a gran escala. Estamos hablando de una disciplina que existe hace unos quince años y, como todo en la ingeniería de software, está evolucionando rápidamente.