← Back to home

System Design Interview: La entrevista

Cover Image for System Design Interview: La entrevista
5 min readLevel:

En System Design Interview por Alex Xu se abordan muchos temas interesantes desde una perspectiva conceptual. No es un manual de consulta per sé. Es un libro en el que encontrarás ideas y esbozo a soluciones por las que otros, muy probablemente, han tenido que pasar para diseñar sistemas que usamos en nuestro día a día. En cada capítulo del libro se plantea un problema y se aborda la solución como un proceso de diseño desde 0.

Aunque mi enfoque es más didáctico y con afán de obtener un entendimiento más profundo de sistemas conocidos. Es importante entender que el enfoque de todo el libro es el de explicar cómo abordar una entrevista técnica de diseño de sistemas. Por ello, haré un breve resumen de las técnicas que se describen para afrontar dichas entrevistas.

Por otro lado, tampoco se pretende resumir el libro y mucho menos substituirlo.

La entrevista

La entrevista es una simulación de resolución de un problema real donde el entrevistador y el entrevistado colaboran para resolverlo y obtener una solución que se ajuste a los objetivos definidos.

¿Cómo preparar la entrevista técnica?

En el libro se describen 4 fases importantes que se han de abordar en un tiempo que ronda los 45 min a una hora. Cada entrevista puede ser diferente por lo que la manera de abordarla también.

Las 4 fases

1. Entender el problema y establecer el alcance del diseño.

En esta fase es donde se nos plantea el problema a diseñar y en el que tenemos que realizar todas las preguntas necesarias. Una de las características más importantes que se espera de un ingeniero es la de realizar las preguntas correctas, hacer las asunciones correctas, y adquirir toda la información necesaria para proseguir con la diseño del sistema.

Para esbozar el alcance del diseño y que tanto el entrevistador como el entrevistado estén alineados es muy importante que en esta fase se hagan preguntas como:

  • ¿Qué es lo que se quiere construir?
  • ¿Qué volumen de tráfico va a tener el producto? ¿Diariamente? ¿Mensualmente?
  • ¿Cómo va escalar el proyecto en corto, medio y largo plazo?
  • ¿Cuál es el stack que usa la compañía? ¿Con qué sistemas ya cuentan?
  • ¿Qué limitaciones y requisitos se presentan? ¿Cómo ha de actuar el sistema bajo ciertas circunstancias?
  • ¿Qué persistencia se quiere dar a los datos en el sistema?
  • ¿Qué tipo de datos se van a manejar? ¿Datos personales? ¿Datos públicos?

Cada sistema es diferente y cada sistema requiere de un solución diferente. Por esta razón, las preguntas han de ser diferentes. No nos podemos aventurar a hacer un diseño sin tener respuestas específicas al problema planteado. De ahí la importancia de realizar las preguntas adecuadas.

Se espera que esta fase dure alrededor de 3 a 10 min.

2. Propuesta de un diseño a alto nivel y obtener la aceptación.

En esta fase se espera que el entrevistado haga un esbozo de la arquitectura del sistema de forma general para entender las diferentes partes que lo conforman y obtener la aceptación por parte del entrevistador.

También se espera que el entrevistado trabaje codo a codo con el entrevistador para definir un primer esbozo de lo que será el diseño final. Es importante que en esta fase se realicen asunciones y estimaciones teniendo en cuenta la respuesta obtenidas en la fase anterior.

Algunas preguntas que puedes considerar responderte:

  • ¿Qué tipo de almacenamiento necesitaremos? ¿Relacional, key-value,...?
  • ¿Qué latencia nos podemos permitir? ¿CDNs? ¿Cache?
  • ¿A qué SLA nos tenemos que comprometer? ¿Consistencia o disponibilidad?

Para realizar las estimaciones se aconseja conocer y tener cierta facilidad para calcular las requisitos de almacenamiento y de memoria, conocer las latencias típicas de las operaciones más comunes, conocer algunas implementaciones o servicios de terceros (third parties). Esto te ayudará a cuantificar y a razonar las decisiones tomadas.

Se espera que esta fase dure alrededor de 10 a 15 min.

3. Diseño en profundidad.

En esta fase el entrevistador y el entrevistado ya han llegado a un acuerdo en los objetivos y el alcance está claro. Llegados a este punto, sólo queda trabajar y analizar en profundidad aquellos componentes más relevantes del sistemas. Hay que encajar las piezas que conformarán el sistema con sus debidas justificaciones y las relaciones entre éstas.

Se espera que esta fase dure alrededor de 10 a 25 min.

4. Conclusión.

En esta fase se espera que el entrevistador haga alguna pregunta o de libertad al entrevistado de discutir otros puntos que a priori son menos relevantes o incluso discutir de posibles mejoras que se podrían realizar sobre el diseño pactado para mejorar la estabilidad, fiabilidad, consistencia, disponibilidad o cualquier otra característica que pueda afectar al rendimiento del sistema.

Se espera que esta fase dure alrededor de 3 a 5 min.

Consideraciones importantes

En todas las fases se espera que el entrevistado hablé en voz alta e incluso interactúe si fuese preciso con el entrevistador para hacerle sentir parte del equipo y conseguir así que la solución sea lo más consensuada posible y que no se salga del alcance esperado por el entrevistador.

Aprendizaje

Como he mencionado con anterioridad, el enfoque que tiene el libro no es compartido con el que le he querido dar yo. Sin embargo, de este enfoque también podemos extraer un buen aprendizaje a la hora de diseñar sistemas: la capacidad de análisis del problema y el razonamiento de la solución son claves.

Si quieres leer y aprender más sobre este libro, este post hace referencia a los capítulos: “Chapter 2: Back-of-envelope estimation” y “Chapter 3: A framework for system design interviews”. Puedes conseguir el libro aquí.

If you find any kind of error, something that it's not clear enough or you want me to drill down in more detail, don't hesitate to contact me.