Across companies interview questions & answers

20 real Across companies interview questions with full model answers — Technical, Behavioral, Product & growth, System design. Drawn from the same verified bank ChannelPulse drills from (650 Across companies questions in total).

BehavioralEasyAcross companiesEngineering ManagerPeople Leadership

1. Have you promoted someone on your team?

Model answer

Situation

Yes. In one case, an engineer on my team had been operating at the next level for some time, but their impact was not consistently visible outside the immediate project group. They had delivered important work and were increasingly influencing design decisions, while the promotion process required sustained evidence of broader scope and outcomes. I needed to support their growth without promising an outcome I could not guarantee.

Task

My responsibility was to determine whether the promotion case was supported by the level expectations, help the engineer close any real gaps, and represent the evidence accurately during calibration.

Action

  • I began by reviewing the role expectations with the engineer and comparing them with concrete examples of their work. We identified strengths in technical judgment and delivery, and a gap in demonstrating influence across team boundaries.
  • We agreed on a stretch assignment that addressed a real business need: leading the design and rollout of a shared service change used by two partner teams. I clarified the engineer’s decision rights, named partner stakeholders, and made sure the assignment did not become unrecognized work on top of an unreasonable workload.
  • I coached them on communicating trade-offs, inviting dissent in design reviews, and keeping partner teams informed. I did not take over the work; I used regular check-ins to help them reflect on what was working and where they needed to adjust.
  • I gathered evidence throughout the cycle: the problem’s scope, decisions made, partner feedback, operational results, and how the engineer enabled others. I checked that the evidence mapped to the promotion criteria rather than relying on confidence, visibility, or one successful launch.
  • During calibration, I advocated with specific examples and addressed questions directly. I also made clear what evidence supported the case and where the engineer’s impact had come from, so the promotion was recognized as their achievement.

Result

The promotion was approved, and the engineer took on a broader technical leadership role with clearer expectations. The partner teams adopted the shared change, and [insert an accurate outcome such as reduced incidents, faster delivery, or adoption]. I learned that strong promotion support starts well before the review meeting: it means creating fair opportunities, giving candid feedback, and making the evidence legible.

What interviewers listen for

  • A decision grounded in level criteria, not tenure or favoritism.
  • Coaching and stretch work with appropriate support and recognition.
  • Specific evidence, honest calibration, and respect for the employee’s ownership.
BehavioralEasyAcross companiesDirector of Product Design

2. What are your most important values as a leader?

Model answer

Situation

A value I have had to put into practice is candor with care. During a period of rapid growth, a team I led was moving quickly, but designers were hesitant to raise concerns about unclear priorities and uneven critique. The result was polite agreement in meetings and avoidable surprises later.

Task

I wanted to create an environment where people could disagree early, receive specific feedback, and still feel accountable for delivering strong work. I also needed to model that behavior myself, especially when the uncomfortable feedback was about my decisions.

Action

  • I clarified the values I expected to see in day-to-day work: respect for users, ownership of outcomes, direct communication, and generosity toward colleagues.
  • I changed critiques from subjective reactions to discussions grounded in user needs, evidence, and the decision the team needed to make.
  • I made space for dissent by asking quieter participants for their perspective before the group converged, and by separating idea quality from the person presenting it.
  • I gave feedback privately when it was personal, promptly when it could help, and specifically enough that the person knew what to do next.
  • I invited feedback on my own leadership and followed up visibly. For example, when people said I was entering reviews too late, I changed the cadence so they could get earlier direction without losing ownership.
  • I held the same standards across levels and functions, while adapting support to each person’s experience and context.

Result

The team surfaced risks earlier, critiques became more useful, and designers had greater clarity about both autonomy and expectations. I would support that claim with concrete evidence from the team, such as engagement feedback, reduced rework, or improved delivery predictability. These values are not slogans to me: they are choices about how we make decisions, give feedback, and treat people when the work is under pressure. I have learned that psychological safety and a high bar reinforce each other when candor is paired with respect and follow-through.

What interviewers listen for

  • Values are specific and visible in your decisions.
  • You create safety without lowering accountability.
  • You can describe feedback, growth, and evidence of impact.
BehavioralEasyAcross companiesDesign Manager

3. How do you manage a team?

Model answer

Situation

In one example I’d use, I led a team of six designers working across onboarding and core product workflows. We had strong individual craft, but priorities shifted frequently, decisions were revisited late, and partner teams were unclear about who owned which outcomes. That was slowing delivery and making the team feel reactive.

Task

I needed to improve focus and decision quality without turning design management into more process. The constraint was that product and engineering still needed to respond quickly to new evidence and business changes.

Action

  • I met with each designer and key product and engineering partners to understand where work was getting stuck. I combined those conversations with project and delivery data rather than assuming the issue was simply capacity.
  • I aligned the group around a small set of quarterly outcomes and asked each project team to define its target user, success metric, decision owner, and major risks before moving into detailed design.
  • I introduced lightweight weekly critiques focused on the question the work needed to answer. For example, a critique on onboarding compared two ways to explain permissions, instead of giving disconnected visual feedback.
  • I clarified decision rights with product and engineering: designers owned experience recommendations, while shared decisions on scope and technical constraints were made together. I encouraged designers to bring options and evidence, not wait for me to approve every screen.
  • I protected regular one-to-ones for coaching and career growth, and adjusted support to experience level. When a project was at risk, I helped the designer escalate the trade-off early rather than quietly absorbing the extra work.

Result

In this example, the team reduced late design rework by about 25% over two quarters and improved on-time delivery from roughly 70% to 85%, while maintaining usability outcomes. More importantly, designers reported clearer ownership and more useful partner conversations. I learned that managing a team is less about adding ceremonies and more about making priorities, decision-making, and growth explicit. I’d replace these figures with the results from my own experience.

BehavioralEasyAcross companiesSenior Director of Engineering

4. What is the largest team you have managed?

Model answer

Situation — The largest organization I managed was [N people across M teams], responsible for [products, platforms, or business outcomes]. It operated across [locations or functions], and the scale mattered because our decisions affected [customers, revenue, reliability, or delivery]. I distinguish direct reports from the broader organization whose outcomes I was accountable for.

Task — My responsibility was to deliver [specific outcome] while maintaining execution quality and building an organization that could operate effectively at that scale. The central challenge was preserving alignment without turning every decision into an escalation to me.

Action

  • I organized the work around [customer journeys, product domains, or platform ownership], with clear leaders and interfaces rather than relying on a large shared queue.
  • I clarified decision rights: teams owned local implementation; senior leaders resolved cross-team priorities, architectural boundaries, and investment trade-offs.
  • I established a small operating cadence: quarterly outcomes, monthly dependency and risk reviews, and regular talent and succession discussions. I kept reviews focused on decisions and exceptions, not status recitation.
  • I invested in managers through coaching, hiring, and succession planning. For example, when [specific team or delivery issue] surfaced, I worked with the responsible leader to diagnose and resolve it rather than taking ownership away from them.
  • I used a consistent set of measures—[delivery, customer, reliability, and talent metrics]—to spot differences between teams while avoiding a one-size-fits-all process.

Result — We achieved [quantified business or engineering outcome], while [quality, engagement, or delivery measure] improved or remained stable. The organization became less dependent on my direct intervention: leaders made more decisions at the right level, and I could focus on portfolio trade-offs and developing the next layer of leadership. I learned that team size is less important than clear accountability, strong managers, and an operating system that scales.

CodingEasyAcross companiesStaff EngineerOnsite

5. Build a simple app in Xcode.

Model answer

import React, { useState } from 'react';
import {
  FlatList,
  Pressable,
  SafeAreaView,
  StyleSheet,
  Text,
  TextInput,
  View,
} from 'react-native';

// App.js for a React Native project that can be built and run from Xcode.
export default function App() {
  const [text, setText] = useState('');
  const [tasks, setTasks] = useState([]);

  function addTask() {
    const title = text.trim();
    if (!title) return;
    setTasks((current) => [
      ...current,
      { id: `${Date.now()}-${Math.random()}`, title, done: false },
    ]);
    setText('');
  }

  function toggleTask(id) {
    setTasks((current) =>
      current.map((task) =>
        task.id === id ? { ...task, done: !task.done } : task,
      ),
    );
  }

  return (
    <SafeAreaView style={styles.container}>
      <Text style={styles.heading}>My tasks</Text>
      <View style={styles.inputRow}>
        <TextInput
          accessibilityLabel="New task"
          placeholder="Add a task"
          value={text}
          onChangeText={setText}
          onSubmitEditing={addTask}
          style={styles.input}
        />
        <Pressable accessibilityRole="button" onPress={addTask} style={styles.button}>
          <Text style={styles.buttonText}>Add</Text>
        </Pressable>
      </View>
      <FlatList
        data={tasks}
        keyExtractor={(item) => item.id}
        ListEmptyComponent={<Text style={styles.empty}>No tasks yet.</Text>}
        renderItem={({ item }) => (
          <Pressable onPress={() => toggleTask(item.id)} style={styles.taskRow}>
            <Text style={item.done ? styles.done : styles.task}>{item.title}</Text>
            <Text>{item.done ? 'Done' : 'Tap to complete'}</Text>
          </Pressable>
        )}
      />
    </SafeAreaView>
  );
}

const styles = StyleSheet.create({
  container: { flex: 1, padding: 20, backgroundColor: '#fff' },
  heading: { fontSize: 28, fontWeight: '700', marginBottom: 20 },
  inputRow: { flexDirection: 'row', gap: 8, marginBottom: 16 },
  input: { flex: 1, borderWidth: 1, borderColor: '#aaa', borderRadius: 8, padding: 12 },
  button: { backgroundColor: '#2457d6', padding: 12, borderRadius: 8, justifyContent: 'center' },
  buttonText: { color: '#fff', fontWeight: '700' },
  taskRow: { paddingVertical: 14, borderBottomWidth: 1, borderColor: '#eee' },
  task: { fontSize: 17 },
  done: { fontSize: 17, textDecorationLine: 'line-through', color: '#777' },
  empty: { color: '#777', marginTop: 20 },
});
  • This is a small React Native task app; open the iOS project in Xcode to select a simulator or device, build, and run. A native Swift-only app would require Swift, so this JavaScript implementation assumes a React Native project.
  • The MVP supports adding and completing tasks. Before shipping, I would add persistence, accessibility testing, and UI tests.

Complexity: Adding a task is O(1); toggling a task is O(n) due to immutable list update. Space is O(n) for n tasks.

CodingEasyAcross companiesPrincipal Engineer

6. Write a JavaScript function that debounces rapid user input.

Model answer

function debounce(fn, delayMs) {
  let timerId;

  function debounced(...args) {
    const context = this;
    clearTimeout(timerId);
    timerId = setTimeout(() => {
      timerId = undefined;
      fn.apply(context, args);
    }, delayMs);
  }

  // Allow callers to cancel a pending invocation.
  debounced.cancel = () => {
    clearTimeout(timerId);
    timerId = undefined;
  };

  return debounced;
}

// Example: run the search only after input has been quiet for 250 ms.
const search = debounce((query) => {
  console.log("Searching for:", query);
}, 250);

search("ca");
search("cat"); // Only this call runs if no further input arrives for 250 ms.
  • Each call resets the timer; the wrapped function runs once after input stops for the delay.
  • apply preserves the caller's this and arguments; cancel() clears pending work.
  • Complexity: O(1) time per call and O(1) space, excluding the timer managed by the runtime.
CodingEasyAcross companiesData Science ManagerTechnical interview

7. Write a SQL query to count the number of entries in each category from a table.

Model answer

// Count rows by category, equivalent to SQL:
// SELECT category, COUNT(*) FROM entries GROUP BY category;

function countByCategory(entries) {
  const counts = new Map();

  for (const entry of entries) {
    const category = entry.category;
    counts.set(category, (counts.get(category) ?? 0) + 1);
  }

  // Return one result per category, including its count.
  return Array.from(counts, ([category, count]) => ({ category, count }));
}

// Example
const entries = [
  { category: "books" },
  { category: "games" },
  { category: "books" }
];

console.log(countByCategory(entries));
// [{ category: "books", count: 2 }, { category: "games", count: 1 }]
  • Iterate once and increment a map entry for each category.
  • In SQL, the equivalent is SELECT category, COUNT(*) FROM entries GROUP BY category.

Complexity: Time O(n) for n rows; space O(k) for k distinct categories.

CodingEasyAcross companiesStaff EngineerTech screen

8. Determine whether three given side lengths form a valid triangle.

Model answer

// Returns true only when three finite, positive lengths form a triangle.
function isValidTriangle(a, b, c) {
  if (![a, b, c].every(Number.isFinite)) return false;
  if (a <= 0 || b <= 0 || c <= 0) return false;

  // The sum of any two sides must be strictly greater than the third.
  return a + b > c && a + c > b && b + c > a;
}

// Examples:
console.log(isValidTriangle(3, 4, 5)); // true
console.log(isValidTriangle(1, 2, 3)); // false
  • Reject non-positive or non-finite inputs, then apply the strict triangle inequalities.
  • Equality is invalid because it forms a degenerate, flat triangle.

Complexity: Time O(1), space O(1).

Product & growthMediumAcross companiesVP of Product

9. How do you balance customer-requested roadmap items against long-term product strategy?

Model answer

Clarify & scope

I see customer requests as evidence about a problem, not as a specification. My job is to understand the underlying need, decide whether it fits our strategy, and make a transparent choice about what we will—and will not—build.

User segments & pain points

I first identify who is asking: target-segment customers, prospects, a strategically important account, or users outside our intended market. Then I ask what they are trying to accomplish, how often the problem occurs, what workaround they use, and what outcome is at risk. A request from one large account may represent a broad unmet need—or a bespoke workflow with high maintenance cost.

Goals & success metrics

I connect the need to our product strategy and measurable outcomes: activation, retention, expansion, acquisition, or reduced cost to serve. I also capture urgency and the cost of delay, especially for reliability, compliance, or a renewal-critical issue. Guardrails include complexity, support burden, and the opportunity cost of delaying strategic work.

Solutions

I separate the request from the problem and consider alternatives: a product capability, configuration or API, workflow improvement, documentation, or a deliberate non-build. For example, when several customers ask for custom reporting, the need may be faster access to trusted data. A reusable self-serve reporting capability could serve the segment better than building a separate report for each account.

Recommendation: Favor the smallest reusable solution that advances strategy and solves a validated customer problem. Make an exception for a one-off request only when its strategic or economic value clearly outweighs the cost and it does not compromise the product’s coherence.

Prioritization & trade-offs

I compare requests with strategic bets using impact, evidence, reach, urgency, confidence, and effort—not revenue or executive volume alone. I make the trade-off explicit: what we would displace, what the customer gains, and what costs we accept. I communicate the decision and rationale directly, including a credible alternative or revisit condition when we say no.

MVP, measurement & rollout

I validate uncertain demand with discovery or a lightweight prototype, then ship a bounded MVP to the relevant segment. I measure adoption and the intended outcome alongside reliability, support burden, and effects on strategic work. At the VP level, consistency matters: a clear strategy and decision process help teams handle requests fairly while still leaving room to learn and change course when evidence warrants it.

Product & growthMediumAcross companiesVP of Product

10. How do you structure voice-of-customer programs to identify valuable opportunities without being overwhelmed by requests?

Model answer

Clarify & scope

I’d design voice of customer (VoC) to find recurring, valuable problems and improve decisions—not to turn every request into a roadmap item. The program should connect customer evidence to customer outcomes and company strategy, while making it easy to close the loop with customers.

User segments & pain points

I’d capture evidence across distinct groups: prospects who chose us or a competitor, new users, retained customers, churned customers, and strategic accounts. I’d also distinguish buyer, administrator, and end-user perspectives. Each piece of feedback should have context: segment, role, use case, severity, frequency, and whether it is observed behavior or a stated preference.

Goals & success metrics

  • North Star: high-confidence opportunities identified and validated, not volume of feedback collected.
  • Program metrics: coverage of priority segments, time from signal to insight, number of opportunities validated, and share of roadmap investments tied to evidence.
  • Guardrails: research burden on customers and teams, over-representation of large accounts, and requests that create one-off complexity.

Solutions

I’d combine qualitative and quantitative signals: structured interviews, support and sales themes, churn and win-loss analysis, product analytics, and targeted surveys. I’d maintain a searchable repository with consistent tags and a named owner. Product managers should synthesize themes and validate underlying needs; they should not simply forward a request queue.

Recommendation: create a regular opportunity review that evaluates evidence and strategic fit, rather than ranking individual feature requests by vote count.

Prioritization & trade-offs

For each opportunity, assess reach, pain severity, frequency, strategic fit, expected impact, confidence, and cost. A request from one large customer may matter, but I’d test whether it reflects a broader need or a justified strategic exception. I’d distinguish table stakes, differentiated opportunities, and bespoke asks, and make exceptions explicit.

MVP, measurement & rollout

I’d pilot the program in one product area: monthly synthesis, quarterly opportunity review, and a feedback loop to customers whose input influenced a decision. I’d monitor whether teams can trace major bets to evidence and whether validated opportunities lead to adoption or retention improvements. I’d also tell customers when we are not pursuing a request—and why—so VoC builds trust rather than expectations of a promised feature.

Product & growthMediumAcross companiesVP of Engineering

11. How have you partnered with Product to deliver a roadmap, and how have you maintained that collaboration as complexity increased?

Model answer

Clarify & scope I treat the roadmap as a shared set of customer and business outcomes, not a list of feature promises. At the start, I align with Product on strategy, target segments, constraints, and the time horizon we can forecast responsibly. I would typically use a longer-range view for direction and a more detailed near-term plan for commitments.

User segments & pain points I ask Product to identify the priority user and the job they need to complete. For example, a roadmap aimed at improving activation should make clear whether the problem is confusing setup, missing integrations, slow performance, or lack of trust. Engineering contributes evidence about system behavior, architecture constraints, and the cost or risk of possible solutions; Product brings customer research and market context.

Goals & success metrics We agree on a North Star or outcome metric and a small number of guardrails before choosing solutions. For activation, that might be the percentage of new accounts completing a key workflow within seven days, with support contacts, latency, and reliability as guardrails. We also define leading indicators, owners, baselines, and how we will measure impact after release.

Solutions I work with Product and Design to compare a few options: improve the existing flow, build a capability for the highest-value segment, or invest in platform work that unlocks several roadmap items. We estimate customer value, confidence, effort, dependencies, and operational risk together.

Recommendation: choose the smallest solution that tests the most important assumption and advances the outcome, while making any foundational investment explicit rather than hiding it as incidental engineering work.

Prioritization & trade-offs As complexity increases, I establish a joint planning cadence and a shared view of dependencies, capacity, risks, and decision owners. I ask teams to surface uncertainty early and separate committed work from exploratory bets. When a new priority arrives, Product and I review what it displaces and communicate the impact to stakeholders. I avoid letting a roadmap become a fixed contract when customer evidence or technical risk has materially changed.

MVP, measurement & rollout We launch behind a flag or to a limited cohort when practical, instrument the success and guardrail metrics, and define a decision date. We expand, iterate, or stop based on results. My leadership role is to create the conditions for candid partnership: Product owns problem and priority, Engineering owns technical integrity and delivery options, and both leaders own the outcome.

Product & growthMediumAcross companiesDesign Manager

12. Design a podcast platform.

Model answer

Clarify & scope

I’d first clarify whether we’re building for listeners, creators, or both. I’ll assume the goal is a differentiated podcast platform for listeners, with enough creator support to keep the catalog healthy. I’d focus the first release on discovery, listening, and returning to a show—not on competing with every feature of mature platforms.

User segments & pain points

I’d start with curious listeners who know what they like but struggle to find their next show. They may discover a podcast through a friend or social post, but have difficulty judging whether it is relevant, finding a good episode to start with, or remembering where they left off. Dedicated fans are another important segment, but their needs—queues, speed controls, and library management—are better served by a strong listening foundation.

Goals & success metrics

The North Star would be weekly listeners who complete a meaningful amount of audio. I’d pair that with:

  • Discovery-to-play conversion and first-week return rate.
  • Episode completion and saves or follows per active listener.
  • Time to first relevant play, to assess discovery quality.
  • Guardrails: crash-free sessions, unwanted recommendations, and creator catalog coverage.

Solutions

I’d consider three connected ideas: personalized recommendations with clear explanations; curated collections and topic-based search; and episode pages that show a concise description, length, and a suggested starting point for new listeners.

Recommendation: Build a focused discovery-to-listening loop. Let people select a few interests, offer a small set of explainable recommendations, and make it easy to sample, follow, and resume a show. I would avoid an opaque recommendation feed as the only entry point; it can feel compelling but makes relevance and user control hard to understand.

flowchart LR
  A[Choose interests] --> B[Explore recommendations]
  B --> C[Preview episode]
  C --> D[Listen]
  D --> E[Follow or save]
  E --> F[Resume and get relevant picks]
Diagram

Prioritization & trade-offs

I’d prioritize by listener impact, confidence, and build effort. Search and a reliable player are foundational; sophisticated creator analytics can follow. I’d balance personalization against privacy and novelty against familiar, trusted choices.

MVP, measurement & rollout

Launch to a small cohort, compare against a control, and track both listening quality and retention—not just plays. Interview users who abandon recommendations, review performance by new versus experienced listeners, and expand only when discovery improves without increasing quick skips or negative feedback.

System designMediumAcross companiesPrincipal Engineer

13. How do you choose between microservices and a monolithic architecture?

Model answer

1. Start with the decision, not the trend

I would not choose microservices because a company has millions of users, nor assume a monolith cannot scale. I would ask what is limiting the organization today: release coordination, independent scaling, fault isolation, team ownership, or simply unclear boundaries. Then I would compare the operational cost of distributed systems with the value of independent deployment and ownership.

2. Choose a modular monolith when

  • The product and domain boundaries are still changing, or a small number of teams can coordinate effectively.
  • Most workloads share similar scaling needs, and transactions across modules are valuable.
  • The organization lacks mature observability, on-call practices, platform automation, or service ownership.
  • The main pain is code structure rather than deployment coupling. A modular monolith with enforced module APIs, dependency rules, and separate data-access boundaries can address this without network calls.

A monolith can be horizontally scaled behind a load balancer if it is stateless at the application tier. Database contention or a single hot workload may need targeted solutions; splitting every module into a service is not automatically the answer.

3. Choose microservices when the benefits are concrete

  • A domain has a stable boundary and can own its data and API independently.
  • Teams need independent release cadence or different scaling profiles—for example, a bursty ingestion service versus a latency-sensitive query service.
  • Failure isolation is important, and the organization can manage timeouts, retries, circuit breakers, contracts, tracing, and on-call rotations.
  • Regulatory or security constraints require a distinct trust boundary.

The cost is distributed failure, eventual consistency, duplicated operational tooling, API versioning, network latency, and more complex local development. If teams cannot own a service in production, creating it may increase rather than reduce organizational load.

flowchart TD
  A["Identify current constraint"] --> B{"Clear domain boundary?"}
  B -->|"no"| C["Modular monolith"]
  B -->|"yes"| D{"Independent scale, release, or failure need?"}
  D -->|"no"| C
  D -->|"yes"| E{"Team can own on-call and operations?"}
  E -->|"no"| F["Improve platform and ownership first"]
  E -->|"yes"| G["Extract one service incrementally"]
  G --> H["Measure outcomes and revisit"]
Diagram

4. Evaluate with evidence

I would score candidate boundaries against domain stability, independent scaling, release bottlenecks, fault-isolation value, data ownership, and team readiness. Use evidence such as deployment lead time, cross-team change frequency, incident blast radius, per-component resource utilization, and time spent coordinating releases. For example, if image processing consumes 40% of compute but has a distinct lifecycle and can accept asynchronous results, it may be a strong extraction candidate. If three teams frequently need one atomic transaction across proposed services, that boundary is probably wrong or requires a deliberate consistency redesign.

5. Migrate incrementally

First modularize the code and make ownership explicit. Then extract one bounded context using a strangler approach: define an API, instrument it, route a small share of traffic, and compare correctness, latency, and cost. Avoid dual writes; use an outbox or a controlled data migration with reconciliation. Establish service SLOs, dashboards, alerts, runbooks, and rollback before increasing traffic. Preserve compatibility during the transition and remove the old path only after confidence is high.

6. Leadership and decision rule

At Principal level, I would make the choice an organizational design decision as much as a software design decision. Align teams around domain ownership, funding for platform capabilities, and explicit production responsibility. Review the architecture as product shape and team structure change.

My default is a well-modularized monolith until a specific, measurable pressure justifies a service boundary. I would accept the added complexity of microservices only when the expected gain in independent delivery, scaling, or isolation exceeds the ongoing cost. Success is measured by faster safe delivery, lower blast radius, and appropriate resource use—not by the number of deployable units.

System designMediumAcross companiesVP of Engineering

14. How do you conduct design reviews and handle feedback when opinions differ, and can you describe how you reached consensus in a specific case?

Model answer

1. Requirements & scale

I’d explain design reviews as a way to make decisions explicit, expose failure modes, and build shared ownership—not as a forum where the most senior person wins. For a specific example, consider a multi-region customer profile service where teams disagreed between active-active writes and a simpler single-writer design.

  • Functional: Serve profile reads globally and accept updates with clear conflict behavior.
  • Non-functional: Target 99.95% availability, p95 reads below 100 ms, and recovery from a regional outage within 15 minutes.
  • Illustrative scale: At 20,000 reads/s and 1,000 writes/s, read traffic dominates. With 2 KB records, replicated storage and cross-region transfer are significant ongoing costs.

2. High-level architecture

flowchart TD
  subgraph Client
    A["Web and mobile clients"]
  end
  subgraph EdgeCDN["Edge and CDN"]
    B["Global edge"]
  end
  subgraph LoadBalancer["Load Balancer"]
    C["Regional routing"]
  end
  subgraph APIServices["API and Services"]
    D["Profile API"]
    E["Write coordinator"]
  end
  subgraph Cache["Cache"]
    F["Regional read cache"]
  end
  subgraph Datastores["Datastores"]
    G["Primary region SQL"]
    H["Read replicas"]
  end
  subgraph MessageQueue["Message Queue"]
    I["Replication stream"]
  end
  subgraph Workers["Workers"]
    J["Replica apply workers"]
    K["Failover controller"]
  end
  A -->|"profile request"| B
  B -->|"nearest healthy region"| C
  C -->|"read or write"| D
  D -->|"cached read"| F
  D -->|"write request"| E
  E -->|"single-writer transaction"| G
  G -->|"committed changes"| I
  I -->|"replication events"| J
  J -->|"replica updates"| H
  K -->|"promote after fencing"| H
Diagram

3. API design

  • GET /v1/profiles/{customerId} serves a regional read, with a documented freshness indicator if needed.
  • PATCH /v1/profiles/{customerId} accepts an idempotency key and entity version; stale writes return 409 Conflict rather than silently overwriting.
  • GET /internal/regions/health reports replication lag and failover readiness for operations.

4. Data model & storage

The chosen design used a relational primary in one write region, read replicas elsewhere, and a regional cache. Profile rows include customer_id, version, and updated_at; writes use optimistic concurrency. Replication events carry the source version. The customer ID is the partition key for both database access and event ordering. This favors well-understood consistency for infrequent writes while allowing globally distributed reads.

5. Deep dive

In reviews, I send a short design doc in advance: problem, requirements, proposed design, alternatives, open questions, failure modes, and a decision owner. In the meeting, I time-box context, invite the strongest objection first, and separate facts from preferences. In this case, one team favored active-active writes for regional autonomy; another highlighted conflict resolution and duplicated operational burden. I asked both to define the failure and user experience they were optimizing for. We modeled a network partition and a simultaneous edit to the same profile, then compared the operational consequences.

sequenceDiagram
  participant Reviewer as Design reviewers
  participant Owner as Design owner
  participant Doc as Decision record
  participant Ops as Operations
  Reviewer->>Owner: Challenge assumptions and failure cases
  Owner->>Reviewer: Compare options against agreed requirements
  Ops->>Reviewer: Validate recovery and on-call implications
  Reviewer->>Owner: Agree on single-writer proposal with conditions
  Owner->>Doc: Record decision, dissent, risks, and revisit triggers
Diagram

We reached consensus on single-writer with regional reads, plus a tested promotion procedure and explicit replication-lag monitoring. Consensus did not mean everyone preferred it; it meant the group agreed it met the requirements and understood the costs. I recorded the dissenting view and a revisit trigger: sustained write latency or a product requirement for regional write autonomy.

6. Scale, bottlenecks & trade-offs

Active-active can reduce write latency and improve regional autonomy, but demands conflict semantics, more complex failover, and careful handling of partitions. Single-writer is easier to reason about but depends on cross-region replication and tested promotion. I’d avoid promising zero data loss unless replication is synchronous, which would add write latency and reduce availability during a partition. Reviews should end with an owner, decision date, risks, actions, and measurable validation plan. After launch, compare actual latency, lag, failover time, and incident rate with the assumptions in the design; revisit decisions based on evidence, not authority.

System designMediumAcross companiesMachine Learning Engineering ManagerSystem Design

15. How would you design a key-value store?

Model answer

1. Requirements & scale

Functional requirements

  • Put, get, and delete values by key; support conditional writes and batch operations.
  • Replicate data across nodes, recover from failures, and provide configurable durability.
  • Support TTL and expose clear consistency guarantees.

Non-functional requirements

  • Low latency (p99 under 10 ms in-region), high availability, horizontal scale, and predictable behavior during partitions.
  • Assume 10 million requests/second globally, 100 million keys, and average value size of 1 KB.

Back-of-the-envelope: At 10M requests/s and an 80/20 read/write split, writes are 2M/s. At 1 KB per value, raw data is about 100 GB; with three replicas, roughly 300 GB before indexes and overhead. Write traffic is approximately 2 GB/s globally, distributed across regions. These assumptions imply a partitioned, replicated service rather than a single database.

2. High-level architecture

Clients route to a region and then to the responsible shard. Each shard has a leader and replicas; a partition map directs requests and is cached by clients or gateways. A durable log supports recovery and replication. A metadata control plane manages membership and rebalancing.

flowchart TD
  subgraph Client
    C[Client SDK]
  end
  subgraph Edge_CDN[Edge CDN]
    E[Regional Gateway]
  end
  subgraph Load_Balancer[Load Balancer]
    LB[Request Router]
  end
  subgraph API_Services[API Services]
    API[KV API]
    META[Metadata Service]
  end
  subgraph Cache[Cache]
    PC[Partition Map Cache]
  end
  subgraph Datastores[Datastores]
    L[Partition Leaders]
    R[Replica Nodes]
    WAL[Write Ahead Log]
  end
  subgraph Message_Queue[Message Queue]
    Q[Replication Stream]
  end
  subgraph Workers[Workers]
    W[Repair and Rebalance]
  end
  C -->|key request| E
  E --> LB
  LB --> API
  API --> PC
  PC -->|partition mapping| L
  L -->|replicate writes| Q
  Q --> R
  L --> WAL
  META --> PC
  W -->|repair or move partitions| L
  W --> R
Diagram

3. API design

  • PUT /v1/kv/{key} — write value; optional If-Match, TTL, and idempotency token.
  • GET /v1/kv/{key} — read value and version; optional consistency level.
  • DELETE /v1/kv/{key} — write a tombstone, not an immediate physical removal.
  • POST /v1/kv:batchGet and POST /v1/kv:batchPut — amortize network overhead.
  • GET /v1/metadata/partitions — internal partition-map refresh.

Return version/ETag and explicit errors for conflict, throttling, unavailable quorum, and expired data.

4. Data model & storage

Store (key, value, version, expires_at, tombstone) in a durable LSM-tree engine. Hash keys to virtual partitions using consistent hashing; virtual partitions make node additions and removals manageable. Each partition has three replicas across failure domains. Store the partition map and ownership epochs in a strongly consistent SQL or consensus-backed metadata store. Keep hot partition mappings in memory; do not cache values by default unless the product can tolerate invalidation complexity.

5. Deep dive

For a write, the router finds the current partition leader and attaches its ownership epoch. The leader checks the epoch, appends the mutation to its write-ahead log, and replicates it. With a quorum of two out of three replicas, it acknowledges a durable write; asynchronous mode can acknowledge after local persistence but has a larger data-loss window. Reads can go to the leader for linearizable semantics, or to replicas for lower latency and eventual consistency. The API must state which mode is used; mixing silent semantics is a correctness bug.

sequenceDiagram
  participant C as Client
  participant G as Gateway
  participant L as Leader
  participant R as Replicas
  C->>G: PUT key value
  G->>L: Route with partition epoch
  L->>L: Validate epoch and append log
  L->>R: Replicate mutation
  R-->>L: Quorum persisted
  L-->>G: Version and success
  G-->>C: Acknowledge
Diagram

On leader failure, a consensus protocol elects a new leader and advances the epoch, fencing the old one. Tombstones prevent deleted keys from reappearing during replica repair; garbage-collect them only after the retention window and replication safety checks. Background workers detect replica divergence with checksums and repair incrementally.

6. Scale, bottlenecks & trade-offs

Partition by key hash to spread load, but monitor skew and allow hot-key mitigation through request coalescing, rate limits, or selectively replicated read copies. Use replication across availability zones; regional replication is asynchronous unless the application explicitly pays the latency cost for cross-region quorum. During a partition, choose availability or strong consistency per operation—do not claim both. Rebalancing is throttled so it cannot saturate disk or network. Capacity planning uses measured bytes per key, write amplification, compaction headroom, and peak—not average—QPS. I would roll out with shadow traffic, fault injection, and recovery-time objectives, and assign clear ownership for client SDKs, storage nodes, and the control plane.

System designMediumAcross companiesPrincipal Engineer

16. How do you handle service-to-service communication in distributed systems?

Model answer

1. Requirements & scale

  • Functional: Services need request/response calls for low-latency decisions and asynchronous messaging for work that can be decoupled. Support service discovery, identity, deadlines, retries, and schema evolution.
  • Non-functional: Encrypt traffic, authenticate every caller, isolate failures, provide observable request context, and define reliability objectives per dependency.
  • Assumptions: 100 services, 20,000 inter-service requests/second at peak, and 2 KB average request plus response. That is roughly 40 MB/s before protocol overhead. Assume 99.95% availability for synchronous critical paths.
  • These figures determine connection-pool sizes, queue capacity, and observability sampling; I would validate them against production traces.

2. High-level architecture

flowchart TD
  subgraph Client
    A[Web and mobile clients]
  end
  subgraph EdgeCDN[Edge and CDN]
    B[Gateway]
  end
  subgraph LoadBalancer[Load balancer]
    C[Service discovery]
  end
  subgraph APIServices[API and services]
    D[Order service]
    E[Payment service]
    F[Inventory service]
  end
  subgraph Cache[Cache]
    G[Local and shared cache]
  end
  subgraph Datastores[Datastores]
    H[Service databases]
  end
  subgraph MessageQueue[Message queue]
    I[Durable event log]
  end
  subgraph Workers[Workers]
    J[Async consumers]
  end
  A -->|HTTPS request| B
  B -->|route| D
  D -->|discovery and RPC| C
  C -->|endpoint| E
  D -->|reserve inventory RPC| F
  E -->|read or write| H
  F -->|lookup| G
  D -->|publish event| I
  I -->|deliver event| J
  J -->|idempotent update| H
Diagram

The gateway handles client-facing concerns; internal services communicate directly through service discovery rather than hairpinning every call through the gateway. Use gRPC or HTTP with consistent conventions for synchronous calls, and a durable broker for asynchronous events.

3. API design

  • POST /v1/orders/{id}:authorize — synchronous, deadline-bounded authorization command.
  • GET /v1/inventory/{sku} — read inventory with an explicit freshness contract.
  • POST /v1/events — internal event ingestion where broker-native publishing is unavailable.
  • Event envelope: event_id, event_type, schema_version, occurred_at, trace_id, and payload.
  • Require idempotency keys on commands that may be retried. Propagate trace context and caller identity, not end-user credentials by default.

4. Data model & storage

  • Each service owns its transactional database and is the authority for its data; avoid cross-service table access.
  • Store outbox records in the same transaction as business changes. A relay publishes them to the broker, preventing the database-commit/message-publish dual-write loss.
  • Use a durable, partitioned log keyed by aggregate ID when per-entity ordering matters. Keep event schemas backward-compatible and versioned.
  • Cache only data with a defined staleness tolerance. Do not use a cache as the source of truth for financial or inventory reservations.

5. Deep dive

For synchronous calls, set an end-to-end deadline and allocate a smaller budget to each dependency. Propagate the remaining deadline so work stops before it can no longer help the caller. Retry only transient, safe-to-repeat operations, with bounded exponential backoff and jitter; cap attempts and retry at one layer to prevent retry amplification. Use circuit breakers and concurrency limits to fail fast when a dependency is saturated. A fallback is appropriate only when its semantics are safe, such as displaying stale recommendations—not silently approving a payment.

For asynchronous work, acknowledge a message only after its effect is durably recorded. Expect at-least-once delivery: deduplicate using event_id or make handlers idempotent. Quarantine poison messages in a dead-letter queue, alert on age and growth, and provide a replay procedure. An outbox relay plus consumer deduplication closes the common crash windows.

sequenceDiagram
  participant O as Order service
  participant DB as Order database
  participant R as Outbox relay
  participant Q as Event log
  participant W as Consumer
  O->>DB: Commit order and outbox row
  R->>DB: Read unpublished rows
  R->>Q: Publish event with event id
  Q->>W: Deliver at least once
  W->>DB: Deduplicate and apply effect
  W->>Q: Acknowledge after commit
Diagram

6. Scale, bottlenecks & trade-offs

  • Use regional service discovery, connection pooling, load balancing, and autoscaling based on concurrency, latency, and queue lag—not CPU alone.
  • Replicate broker partitions and databases across failure domains; test failover and restore procedures. Add bulkheads so a slow dependency cannot consume every worker or connection.
  • Synchronous RPC gives immediate decisions but couples availability and latency. Events improve isolation and throughput but introduce eventual consistency and operational complexity.
  • Prefer consistency for irreversible commands and clearly communicate eventual consistency for read models. Measure p50/p95/p99 latency, timeout and retry rates, saturation, queue lag, duplicate handling, and error-budget burn.
  • At Principal level, I would establish shared libraries and paved-road defaults without hiding behavior, agree contracts and ownership with service teams, and roll out through canaries and fault-injection tests. The key is making failure semantics explicit rather than treating communication as a transport choice.
TechnicalEasyAcross companiesDesign Manager

17. What is your knowledge of design?

Model answer

I think of design as the practice of making a product or service useful, understandable, and valuable for people—and feasible for the organization to deliver. It is not just visual polish. It connects user needs, business intent, technology, and the end-to-end experience.

  1. Start with evidence. I define the user, context, and problem before committing to a solution. I combine research, behavioral data, support feedback, and business goals, while being explicit about what we know versus what we assume.
  2. Frame the right problem. I translate evidence into a focused opportunity and identify the outcomes that matter. A team can execute a polished solution to the wrong problem, so framing is a design deliverable, not just a kickoff activity.
  3. Explore options. I use sketches, flows, prototypes, and service blueprints at the fidelity appropriate to the question. Early prototypes help test comprehension and desirability; later work needs to resolve edge cases, accessibility, content, and interaction details.
  4. Evaluate and refine. I use methods such as usability testing, experiments, analytics, and expert review. I look beyond task completion to failure modes, comprehension, trust, and differences across user segments.
  5. Deliver a coherent system. Strong design includes interaction patterns, visual hierarchy, content, accessibility, responsive behavior, and implementation guidance. Design systems improve consistency and speed, but should not prevent teams from addressing a real user need that the system does not yet support.
flowchart LR
  A[Understand users] --> B[Frame opportunity]
  B --> C[Explore options]
  C --> D[Prototype and test]
  D --> E[Ship and measure]
  E --> A
Diagram

As a Design Manager, I’d make this a team capability rather than a sequence only designers own. I align partners on outcomes, create space for critique and research, help designers make trade-offs, and ensure work is measured after launch. I also distinguish craft quality from impact: both matter, but attractive execution cannot compensate for an inaccessible or ineffective experience.

I’d watch for common pitfalls: treating stakeholder opinion as user evidence, relying on a single metric, testing too late, and optimizing one screen while ignoring the broader journey. Good design is iterative judgment: make the best decision with current evidence, expose uncertainty, and learn quickly.

TechnicalEasyAcross companiesPrincipal Engineer

18. Which cloud providers have you worked with, and which services do you use regularly?

Model answer

I would answer this from my actual experience rather than imply hands-on depth I do not have. A concise, credible structure is:

  • Providers and depth: Name the providers you have used in production, and distinguish leading a design from operating services directly. For example: “I have operated production workloads on AWS and have evaluated Azure for a separate use case.” Replace that with your truthful experience.
  • Services used regularly: Group by capability, then name the services and what you used them for: compute and containers (EC2, ECS/EKS, or Lambda); storage and databases (S3, RDS, DynamoDB); networking and edge (VPC, load balancers, CloudFront); messaging (SQS, SNS, or Kafka); and identity, secrets, and observability (IAM, Secrets Manager, CloudWatch). Use equivalents for the provider you actually know.
  • Depth and judgment: Give one concrete example: the workload, scale, service choice, operational responsibility, and a trade-off you made. Explain what you owned—architecture, deployment, reliability, cost controls, or incident response.
  • Portability: Be specific about what you kept portable, such as container images and Terraform, versus where you deliberately used provider-native capabilities. Portability has a cost; I would not claim that every component should be cloud-agnostic.

A strong answer might sound like: “My deepest production experience is with [provider], especially [two or three services]. I use them for [workload], and I have owned [specific operational responsibilities]. One trade-off I made was [decision] because [constraint]; we measured the result using [reliability, delivery, or cost metric]. I have [level of experience] with [other providers], but I would not present that as equivalent depth.”

Interviewers listen for honest calibration, practical operational knowledge, and the ability to connect service choices to workload requirements—not a long inventory of product names.

TechnicalEasyAcross companiesDirector of Data Science

19. Do you have experience with Spark?

Model answer

I’d answer this candidly and at the right level of detail for my actual experience. For example, if I had hands-on production experience, I’d say:

“I’ve used Spark for distributed data processing, primarily for large-scale feature and analytics pipelines. One representative project involved processing [data volume] of event data to produce [output] for [model or decision]. I owned [my part], and we chose Spark because the workload required distributed joins and aggregations that were not practical on a single machine.”

Then I’d describe the engineering choices rather than just name the tool: how I chose partition keys, handled skew and late-arriving data, controlled shuffle costs, and validated results against a trusted baseline. I’d mention the operational outcome—such as runtime, cost, freshness, or reliability—using metrics I can substantiate. For a Director role, I’d also explain how I set team standards for testing, observability, ownership, and cost review, and when I would choose a simpler SQL or managed-service solution instead.

If my experience were limited, I’d say so directly: “I’ve had limited hands-on Spark ownership, but I understand its distributed execution model and have worked with teams building Spark pipelines. I can discuss the design and trade-offs, and I would be transparent about where I’d rely on an experienced platform engineer.” I’d then give a concrete example of adjacent distributed-data work and explain how I’d close the gap.

What interviewers listen for:

  • Specific, verifiable scope and personal contribution—not just familiarity with Spark terminology.
  • Sound judgment about when Spark is appropriate and how to manage cost, performance, and reliability.
  • Leadership beyond implementation: team capability, production ownership, and measurable outcomes.
TechnicalMediumAcross companiesVP of Engineering

20. How do you organize product development so team members have clear goals and remain accountable for them?

Model answer

I organize product development so teams can connect their daily decisions to a customer outcome, while making ownership and progress visible. The mechanism is not a goal cascade of arbitrary individual targets; it is aligned team outcomes with clear individual responsibilities.

  1. Set direction. Leadership agrees on a small set of company outcomes and explains why they matter. Product and engineering leaders translate these into team-level objectives with measurable results, boundaries, and explicit non-goals. Teams should understand how their work contributes and where they have autonomy.
  2. Define the problem together. The product manager brings customer evidence and business context; engineering assesses feasibility, dependencies, risk, and operating cost; design tests usability. The trio agrees on the user problem and success measure before settling on a solution. This reduces teams being held accountable for delivering a feature that does not solve the problem.
  3. Make ownership explicit. Name a directly responsible individual for each outcome or initiative, and clarify who decides scope, technical design, launch readiness, and priority conflicts. Keep goals at the team level where results depend on collaboration; use individual ownership for concrete decisions and deliverables, not to create local optimization.
  4. Create a visible execution loop. Break work into measurable increments, publish owners and dependencies, and review progress, evidence, and risks on a predictable cadence. If a metric is off track, the team proposes a response; leadership removes organizational blockers or changes priority. Update goals when assumptions change, and record why.
  5. Close the loop on impact. Measure both leading indicators and customer outcomes—for example, activation completion and downstream retention, not just feature shipment. Pair outcome metrics with guardrails such as reliability, support contacts, privacy, and team sustainability.
flowchart TD
  A["Company outcomes"] --> B["Team objective and key results"]
  B --> C["Customer problem and evidence"]
  C --> D["Owned experiments and increments"]
  D --> E["Review results and guardrails"]
  E --> F["Adapt scope or priority"]
  F --> B
Diagram

I would avoid too many objectives, goals that teams cannot influence, and using metrics as individual performance quotas. Accountability means teams have the context and authority to act, make commitments transparently, and learn from results—not that they are punished for every outcome affected by market conditions or dependencies.

Practice these out loud, don't memorise them

Reading an answer is not the same as being able to give one under pressure. ChannelPulse plays the interviewer, asks the follow-ups, and scores each answer with feedback and a model answer so you can hear the gap between what you said and what lands.

Get ChannelPulse Browse all questions