Saltar al contenido

Cómo afrontar las entrevistas técnicas como ingeniero sénior

Qué cambia en las entrevistas técnicas sénior: preparación de diseño de sistemas, narrativa conductual y demostrar criterio más que competencia.

7 min de lectura
Pizarra con un diagrama de arquitectura de sistema durante una entrevista técnica

La entrevista de nivel sénior es otro juego

Las entrevistas junior y de nivel medio evalúan si sabes programar. Las entrevistas de nivel sénior evalúan si sabes pensar. La parte de código sigue presente, pero pierde peso. El diseño de sistemas, la toma de decisiones arquitectónicas, la comunicación entre equipos y el liderazgo técnico pasan a primer plano.

Este cambio agarra desprevenidos a muchos ingenieros con experiencia. Llevas años construyendo sistemas, pero descomponer un problema ambiguo en una pizarra y contra el reloj es una habilidad distinta. El ingeniero que diseña sistemas elegantes en su trabajo diario puede tropezar en una entrevista simplemente porque nunca ha practicado explicar en voz alta su proceso de toma de decisiones.

Prepararse a nivel sénior tiene menos que ver con memorizar algoritmos y más con estructurar cómo comunicas ideas complejas. Esta guía cubre la preparación práctica que realmente importa.

Diseño de sistemas: la estructura antes que las soluciones

La ronda de diseño de sistemas es el plato fuerte de la entrevista sénior. Te plantean un problema vago —«diseña un acortador de URLs», «diseña un sistema de chat en tiempo real»— y se espera que navegues desde los requisitos hasta la arquitectura en 45 minutos.

El error es saltar directo a las soluciones. Lo que realmente se evalúa es tu capacidad de pensar de forma estructurada en medio de la ambigüedad.

tstypescript
// A framework for approaching system design interviews
interface DesignFramework {
  step: string;
  timeAllocation: string;
  activities: string[];
}
 
const systemDesignFlow: DesignFramework[] = [
  {
    step: "Requirements Clarification",
    timeAllocation: "5-7 minutes",
    activities: [
      "Identify functional requirements (what the system does)",
      "Identify non-functional requirements (scale, latency, consistency)",
      "Clarify scope: what's in, what's out",
      "Establish rough numbers: DAU, QPS, storage",
    ],
  },
  {
    step: "High-Level Design",
    timeAllocation: "10-12 minutes",
    activities: [
      "Draw core components and their interactions",
      "Identify data flow: write path and read path",
      "Choose communication patterns: sync, async, event-driven",
      "Call out key technology choices and WHY",
    ],
  },
  {
    step: "Detailed Design",
    timeAllocation: "12-15 minutes",
    activities: [
      "Deep dive into 2-3 critical components",
      "Data model and schema design",
      "API design for key endpoints",
      "Caching strategy and invalidation",
    ],
  },
  {
    step: "Scaling and Tradeoffs",
    timeAllocation: "8-10 minutes",
    activities: [
      "Identify bottlenecks under load",
      "Horizontal scaling strategy",
      "Database partitioning / sharding approach",
      "Failure modes and mitigation",
    ],
  },
];

Al entrevistador le importa menos si eliges Redis o Memcached y más si eres capaz de argumentar por qué elegirías uno sobre el otro dadas las restricciones. Cada decisión debería venir acompañada de una declaración de compromiso: «Elegí X sobre Y por Z, a costa de W».

Cálculos de estimación rápida

Las preguntas de estimación no son preguntas trampa. Evalúan si sabes razonar cuantitativamente sobre sistemas. Practícalas hasta que te salgan de forma natural.

tstypescript
// Common estimation building blocks
const estimationCheatSheet = {
  storage: {
    textMessage: "~100 bytes",
    tweet: "~300 bytes (with metadata)",
    photo: "~200 KB (compressed)",
    video1Min: "~10 MB (compressed)",
    userProfile: "~1 KB",
  },
  throughput: {
    ssdRead: "~100K-500K IOPS",
    hddRead: "~100-200 IOPS",
    networkWithinDC: "~1-10 Gbps",
    databaseQuerySimple: "~10K QPS per node",
    cacheRead: "~100K-1M QPS (Redis)",
  },
  latency: {
    l1Cache: "~1 ns",
    ram: "~100 ns",
    ssdRandom: "~100 μs",
    networkWithinDC: "~0.5 ms",
    networkCrossContinent: "~100 ms",
    databaseQuery: "~1-10 ms",
  },
  scale: {
    secondsPerDay: 86400,
    secondsPerMonth: "~2.5M",
    bytesPerGB: "~1e9",
    bytesPerTB: "~1e12",
  },
};
 
// Example estimation: "Design a system that handles 100M DAU"
function estimateLoad(): void {
  const dau = 100_000_000;
  const actionsPerUser = 10;
  const dailyActions = dau * actionsPerUser; // 1 billion/day
  const qps = dailyActions / 86400; // ~11,574 QPS
  const peakQps = qps * 3; // ~35K QPS (3x peak multiplier)
  const storagePerAction = 500; // bytes
  const dailyStorage = dailyActions * storagePerAction; // 500 GB/day
  const yearlyStorage = dailyStorage * 365; // ~180 TB/year
}

Explica el cálculo en voz alta, paso a paso. El entrevistador quiere ver tu razonamiento, no solo el número final. Redondea sin miedo: la precisión no importa, el orden de magnitud sí.

Preguntas de comportamiento: el marco STAR-L

Las entrevistas de comportamiento a nivel sénior evalúan liderazgo, resolución de conflictos y toma de decisiones técnicas. El marco STAR (Situación, Tarea, Acción, Resultado) es el estándar, pero a nivel sénior se le añade una L: Lecciones aprendidas.

tstypescript
// ❌ Bad: Vague, unfocused answer
const badAnswer = {
  question: "Tell me about a time you disagreed with a technical decision",
  response:
    "I disagreed with my manager about using microservices. " +
    "I thought we should use a monolith. We discussed it and " +
    "eventually went with microservices. It worked out okay.",
};
tstypescript
// ✅ Good: Structured STAR-L response
interface BehavioralResponse {
  situation: string;
  task: string;
  action: string;
  result: string;
  learnings: string;
}
 
const strongAnswer: BehavioralResponse = {
  situation:
    "Our team of 4 was building a new payment processing service. " +
    "The tech lead proposed splitting it into 6 microservices from " +
    "day one. We had no existing infrastructure for service orchestration.",
  task:
    "I needed to advocate for a simpler architecture without " +
    "undermining the tech lead's authority or creating team friction.",
  action:
    "I wrote a one-page RFC comparing both approaches with specific " +
    "tradeoffs: deployment complexity, latency overhead, debugging " +
    "difficulty. I proposed starting as a modular monolith with clean " +
    "module boundaries that could be extracted later. I presented it " +
    "as 'how do we get to market fastest with the option to split later' " +
    "rather than 'your idea is wrong.'",
  result:
    "We shipped the monolith in 3 months instead of the estimated 6 " +
    "for microservices. After 8 months, we extracted the notification " +
    "module into its own service when load patterns justified it. " +
    "The other modules stayed monolithic.",
  learnings:
    "Framing matters more than being right. Writing the RFC forced me " +
    "to quantify my intuition, which made the conversation productive " +
    "instead of opinion-based. I also learned that 'defer the decision' " +
    "is often the best architecture advice.",
};

Prepara entre 8 y 10 historias que cubran: desacuerdos técnicos, fracasos de proyecto, impacto de mentoría, colaboración entre equipos, manejo de la ambigüedad, entrega bajo presión e influencia sin autoridad formal. Cada historia debería poder adaptarse a distintos enfoques de pregunta.

La ronda de código a nivel sénior

Seguirás programando. Pero las expectativas cambian. Un código limpio y funcional es apenas el punto de partida. El entrevistador se fija en cómo descompones el problema, cómo manejas los casos límite, cómo comunicas tu enfoque y cómo pruebas tu solución.

tstypescript
// The approach matters more than speed
// Demonstrate: problem decomposition, edge case handling, testing mindset
 
// Example: Design a rate limiter
interface RateLimiterConfig {
  maxRequests: number;
  windowMs: number;
}
 
class SlidingWindowRateLimiter {
  private windows: Map<string, number[]> = new Map();
  private config: RateLimiterConfig;
 
  constructor(config: RateLimiterConfig) {
    this.config = config;
  }
 
  isAllowed(clientId: string): boolean {
    const now = Date.now();
    const windowStart = now - this.config.windowMs;
 
    // Get or initialize request timestamps for this client
    let timestamps = this.windows.get(clientId) || [];
 
    // Remove expired timestamps
    timestamps = timestamps.filter((t) => t > windowStart);
 
    if (timestamps.length >= this.config.maxRequests) {
      this.windows.set(clientId, timestamps);
      return false;
    }
 
    timestamps.push(now);
    this.windows.set(clientId, timestamps);
    return true;
  }
 
  // Production consideration: memory cleanup
  cleanup(): void {
    const now = Date.now();
    for (const [clientId, timestamps] of this.windows) {
      const valid = timestamps.filter(
        (t) => t > now - this.config.windowMs
      );
      if (valid.length === 0) {
        this.windows.delete(clientId);
      } else {
        this.windows.set(clientId, valid);
      }
    }
  }
}
 
// Verbalize tradeoffs while coding:
// "I'm using a sliding window for accuracy. A fixed window would be simpler
// but allows 2x the rate at window boundaries. The tradeoff is memory —
// we store individual timestamps instead of a counter."

Habla mientras programas. Explica lo que vas a hacer antes de hacerlo. Cuando detectes un caso límite, dilo explícitamente: «Necesito manejar el caso en que…». Esto demuestra el pensamiento diagnóstico que distingue a los ingenieros sénior de quienes simplemente escriben código.

Preguntas para hacerle al entrevistador

Las preguntas que haces revelan tu nivel de seniority más que las respuestas que das. Los candidatos junior preguntan por el stack tecnológico y los beneficios. Los candidatos sénior preguntan por la cultura de ingeniería, los procesos de toma de decisiones y los desafíos organizacionales.

tstypescript
const seniorQuestions: string[] = [
  // Engineering culture
  "How do architectural decisions get made here? Is there an RFC process?",
  "What does the on-call rotation look like, and how are incidents handled?",
 
  // Team dynamics
  "How much autonomy do engineers have in choosing technical approaches?",
  "What's the ratio of planned work to interrupt-driven work?",
 
  // Growth and impact
  "What does a successful first 90 days look like for this role?",
  "Can you describe a recent technical decision the team made that was controversial?",
 
  // Organizational health
  "How does the engineering team handle technical debt?",
  "What's the deployment frequency, and what does the release process look like?",
];

Estas preguntas también te ayudan a evaluar si la empresa es la adecuada para ti. Una empresa que no puede responder «¿cómo manejan la deuda técnica?» te está diciendo algo importante sobre su madurez de ingeniería.

La metahabilidad: la entrevista como colaboración

El cambio de mentalidad más importante a nivel sénior es tratar la entrevista como una sesión de diseño colaborativa, no como un examen. No estás demostrando que puedes resolver el problema: estás demostrando cómo lo abordarías en el día a día del trabajo.

Haz preguntas aclaratorias. Propón alternativas y discute los compromisos entre ellas. Reconoce la incertidumbre de forma explícita: «No estoy seguro de cuál es el mejor enfoque aquí, pero mi instinto me dice X por Y». En empresas de calibre sénior, los entrevistadores evalúan si quieren trabajar contigo, no si memorizaste la solución óptima.

Los ingenieros que reciben ofertas sénior no son los que dan respuestas perfectas. Son los que logran que el entrevistador sienta que acaba de tener una discusión de diseño productiva con un futuro colega.

Puntos clave

Las entrevistas técnicas de nivel sénior evalúan el criterio, la comunicación y el liderazgo, no solo la capacidad de programar. Prepararse para el diseño de sistemas significa practicar la descomposición estructurada en voz alta, no memorizar arquitecturas. Prepararse para las preguntas de comportamiento significa tener historias específicas y cuantificadas, listas en formato STAR-L.

La ronda de código todavía importa, pero el estándar es distinto: código limpio, razonamiento verbalizado, identificación proactiva de casos límite y conciencia de producción. Y las preguntas que haces al final son tu oportunidad de demostrar un pensamiento de nivel sénior sobre la cultura de ingeniería y la salud organizacional.

La preparación se acumula. Dedica menos tiempo a problemas difíciles de LeetCode y más tiempo a articular los compromisos arquitectónicos, contar historias convincentes sobre tu experiencia y practicar el ritmo colaborativo de una conversación técnica de nivel sénior.

Wilfredo Rujel

Wilfredo Rujel

Ingeniero de Software Full Stack

Compartir esta publicaciónX