20 real Duolingo interview questions with full model answers — Technical, System design, Behavioral, Coding. Drawn from the same verified bank ChannelPulse drills from (38 Duolingo questions in total).
38 Duolingo questions in the bank
5 categories covered
4 roles: Technical Program Manager, Engineering Manager, Director of Technical Program Management, Product Manager
BehavioralMediumDuolingoEngineering Manager
1. Describe how you incorporated team feedback into a process change.
Model answer
Situation — In a team of 12 engineers, we had inconsistent release-readiness practices. Some projects had thorough launch plans, while others discovered missing dashboards or rollback steps late in the process. Engineers felt a proposed checklist might become bureaucracy, and Product wanted faster releases.
Task — I owned improving release quality without adding a heavyweight approval gate. I wanted a process the team would actually use, so incorporating feedback from the people doing the work was as important as defining the initial proposal.
Action
I first gathered examples rather than prescribing a solution: I reviewed recent incidents and asked engineers, Product, and SRE which release steps had prevented problems and which felt like overhead.
I summarized the themes back to the team. The main concern was not having a checklist; it was duplicating information across documents and treating every change as equally risky.
I proposed a two-week pilot with a short release template covering owner, user impact, key metrics, rollback plan, and dependencies. For low-risk changes, the template was optional and lightweight; high-risk launches required an explicit readiness review.
I invited two engineers who had raised concerns to co-design the template. For example, we replaced a mandatory meeting with an async review unless a launch crossed a risk threshold, and linked to existing dashboards instead of asking teams to copy metrics into a new document.
I made feedback visible: after each pilot release, we tracked completion time, checklist usage, escaped incidents, and team-reported friction. I reviewed the results at the end of the pilot and shared what we changed based on feedback.
I kept the process reversible. We agreed to revisit it after a month and remove steps that did not reduce risk or improve coordination.
Result — Adoption reached 90% for launches where the template applied, average preparation time fell by about 20% after we removed duplicate documentation, and we caught two missing rollback plans before launch. We did not have enough data to claim the process alone reduced incidents, so I kept tracking that outcome rather than overstating success. The main lesson was that process changes stick when the team can see their feedback alter the design and when the process is proportional to risk.
What interviewers listen for
Listening before deciding, especially to skeptical stakeholders.
A measured pilot, visible feedback loop, and willingness to revise.
Outcomes that balance quality, speed, and team experience.
BehavioralMediumDuolingoEngineering Manager
2. Describe a time you gave difficult feedback to an underperforming engineer and helped improve their performance.
Model answer
Situation
At a prior organization, I managed a team of eight engineers supporting a customer-facing service. One engineer who had previously been reliable began missing commitments and submitting changes that regularly needed substantial rework. That created delays for two partner teams, and I wanted to address the impact early without turning a performance issue into a surprise or undermining the person’s dignity.
Task
I owned making expectations clear, understanding what was behind the change, and helping the engineer return to consistent performance. I also had to protect team delivery and be fair to peers who were carrying extra review and support work.
Action
I prepared specific examples rather than general judgments: two missed milestones, recurring test gaps, and a design review where risks were not surfaced. I explained the impact on partner commitments and asked for their perspective before drawing conclusions.
I learned that the engineer was unclear about the team’s quality bar and had been trying to handle a growing project scope alone. We agreed on a short improvement plan with measurable expectations: break work into weekly milestones, raise risks within a day, include tests for changed behavior, and request design review before implementation on ambiguous work.
I made the plan supportive, not merely corrective. We held a weekly 1:1 focused on blockers and progress, paired them with a senior engineer for the first design review, and negotiated a narrower delivery scope with product rather than letting hidden work accumulate.
I kept the feedback direct and documented the expectations and check-in dates. I also told them what would happen if progress did not improve, so there would be no ambiguity about accountability.
I checked that the team’s process was not contributing to the issue: we clarified ownership and added a lightweight milestone review for all projects of similar size.
Result
Over the next six weeks, the engineer met the agreed milestones, their changes passed review with fewer major revisions, and partner teams got predictable updates. They later took ownership of a small feature end-to-end. I learned to combine empathy with explicit standards: support is most useful when the person knows exactly what success looks like and when progress will be reviewed.
What interviewers listen for
Timely, evidence-based feedback and clear expectations.
Empathy without lowering the performance bar.
A measurable plan, follow-up, and accountability.
BehavioralMediumDuolingoEngineering Manager
3. How would you handle a situation where an engineer on your team submits code without adequate test coverage?
Model answer
Situation — On a team of seven engineers, a change to our lesson-progress service was submitted with only a happy-path test. The feature touched retry behavior and could affect whether learners received credit for completed work, so the missing coverage created a meaningful risk. The engineer was capable and moving quickly, but our review expectations had not been made explicit for this type of change.
Task — I needed to protect learners and the release while addressing the gap in a way that improved the engineer's judgment and the team's standards, rather than turning code review into a blame exercise.
Action
I first reviewed the change with the engineer and asked them to walk me through expected behavior for duplicate requests, timeouts, and partial failures. That surfaced an untested retry case that could award credit twice.
I explained the user and operational risk, then agreed that we would hold the rollout until we had coverage for the failure modes. I kept the scope focused on the behavior at risk rather than asking for a blanket coverage percentage.
I paired with the engineer on the first test, then asked them to add the remaining cases and describe which layer best protected each invariant. That made the discussion coaching, not just a list of review demands.
I clarified our team review checklist for state-changing code: test normal behavior, retries/idempotency, and relevant failure paths; document the intended invariant. I also checked whether our existing test utilities made those cases unnecessarily hard to write.
I followed up privately after the merge, recognized the engineer's response, and used the example in a team discussion without naming them. I made clear that reviewers share responsibility for catching gaps, too.
Result — We added tests for duplicate submissions and retry-after-timeout behavior before releasing, and the staged rollout showed no duplicate-credit events. In the following quarter, our review sampling found fewer changes missing failure-path tests, while review time stayed roughly stable. I learned to distinguish a one-off omission from a system problem: the best outcome was a safer release and a clearer standard that engineers could apply independently.
What interviewers listen for: immediate risk management, specific and respectful feedback, coaching rather than punishment, clear standards, and follow-through on whether team practices improved.
BehavioralMediumDuolingoEngineering Manager
4. How do you explain complex engineering ideas clearly to non-technical team members?
Model answer
Situation — I led a team building a change to our account recovery flow. The proposal involved replacing a synchronous dependency with an asynchronous process, which improved reliability but changed what users would experience after submitting a request. Product, Support, and Legal needed to approve the rollout, and the technical discussion was becoming difficult to follow.
Task — I needed to explain the design and its risks clearly enough for non-engineers to make informed decisions, without oversimplifying the trade-offs or turning the meeting into a technical lecture.
Action
I started with the user problem and the decision we needed to make: should we show immediate confirmation and complete recovery asynchronously, or keep the user waiting for a synchronous result?
I used a simple before-and-after diagram. I described the old flow as “the user waits while every system responds” and the new flow as “we accept the request, then notify the user when it is complete.” I avoided leading with queues, retries, and service boundaries.
I connected the design to outcomes each group cared about: fewer failed requests for users, fewer confusing support cases, and a clear audit trail for Legal.
I was explicit about the trade-off: asynchronous completion improves resilience, but it means the confirmation message must not imply that the account is already recovered. I showed the exact proposed copy and asked Support to challenge it.
I shared a small set of measures—completion rate, time to completion, duplicate requests, and support contacts—and explained what threshold would trigger a rollback.
I paused for questions and checked understanding by asking stakeholders to summarize the user-visible change and remaining risks in their own words.
Result — We aligned on a staged rollout with clear customer messaging and a rollback threshold. In the first month, completion improved from 92% to 98%, while recovery-related support contacts fell 18%; we also caught and fixed a notification edge case before broad release. I learned that clarity is not removing technical nuance: it is choosing the right level of detail so people can make the decision they own.
What interviewers listen for
Audience-aware communication without condescension.
Clear trade-offs, user impact, and decision ownership.
Evidence that communication changed alignment or outcomes.
BehavioralMediumDuolingoEngineering Manager
5. Describe a disagreement with a product manager or cross-functional partner and how you resolved it.
Model answer
Situation
In a previous role, a product manager and I disagreed about whether to include a configurable workflow in a customer launch. The request came from a large prospect and was important commercially, but the proposed implementation would have added branching behavior to a service that was already difficult to operate. I was responsible for the engineering team building the service, and the launch date had been communicated externally.
Task
I needed to help the team meet the customer need without committing us to a fragile design or letting the disagreement turn into a relationship problem. The key tension was near-term deal value versus delivery risk and the future cost of supporting a one-off capability.
Action
I first made sure I understood the underlying user problem rather than arguing about the requested solution. In a joint conversation with the PM and customer-facing partner, we learned that the prospect needed one approval step to vary by region; they did not need a general-purpose workflow builder.
I brought evidence: an estimate of the original scope, the operational failure modes, and the maintenance burden of adding arbitrary branches. I also acknowledged the cost of missing the launch and asked the PM to clarify which customer outcome was essential.
I proposed options with explicit trade-offs: deliver the full configurability later, decline the request, or ship a limited region-based rule behind a feature flag with audit logging and a migration path. We agreed on the constrained version because it met the immediate need while limiting the new state space.
I asked engineering and product to jointly define acceptance criteria, an owner for the follow-up decision, and a post-launch review date. I made sure the team’s estimate included testing and operational readiness, not just implementation.
After launch, I shared the observed usage and support data with the PM. We used that evidence to decide whether broader configuration was worth investing in, rather than letting the temporary solution silently become a permanent platform.
Result
We met the customer’s launch date with the limited capability, avoided building a general workflow engine for an unproven need, and recorded no related production incidents in the initial rollout. The partnership improved because we treated the conflict as a shared problem to solve, not a contest over who owned the decision. I learned that the fastest path to alignment is often to clarify the user need and compare viable options together.
What interviewers listen for
Curiosity about the partner’s goals before advocating a solution.
Clear articulation of risk, alternatives, and trade-offs.
Shared ownership, follow-through, and evidence after the decision.
CodingMediumDuolingoEngineering Manager
6. Add a simple feature or adjust translation hints in a web experience using a programming language of your choice.
Model answer
// Add accessible, click-to-reveal translation hints to lesson elements.
// Example markup: <p data-translation-hint="The word means 'to eat'.">comer</p>
function addTranslationHints(root = document) {
const items = root.querySelectorAll("[data-translation-hint]");
items.forEach((item, index) => {
// Avoid adding duplicate controls if this function runs more than once.
if (item.dataset.hintInitialized === "true") return;
item.dataset.hintInitialized = "true";
const hintId = `translation-hint-${index}`;
const hint = document.createElement("span");
hint.id = hintId;
hint.textContent = item.dataset.translationHint;
hint.hidden = true;
const button = document.createElement("button");
button.type = "button";
button.textContent = "Show hint";
button.setAttribute("aria-expanded", "false");
button.setAttribute("aria-controls", hintId);
button.addEventListener("click", () => {
const isVisible = !hint.hidden;
hint.hidden = isVisible;
button.setAttribute("aria-expanded", String(!isVisible));
button.textContent = isVisible ? "Show hint" : "Hide hint";
});
item.append(" ", button, " ", hint);
});
}
// Run once the document is ready, including when this script loads late.
if (document.readyState === "loading") {
document.addEventListener("DOMContentLoaded", () => addTranslationHints());
} else {
addTranslationHints();
}
I attach one button per lesson element that has a data-translation-hint value; textContent prevents hint text from being interpreted as HTML.
The button toggles visibility and updates aria-expanded, so keyboard and screen-reader users can use the feature. A data flag prevents duplicate controls if initialization runs again.
Complexity: Initialization is O(n) for n hint elements; each toggle is O(1). Added DOM space is O(n).
CodingHardDuolingoEngineering Manager
7. Build a ranked trie autocomplete service for Duolingo vocabulary suggestions with efficient prefix lookup and bounded result storage.
Model answer
class RankedTrieAutocomplete {
constructor(maxResultsPerPrefix = 10) {
if (!Number.isInteger(maxResultsPerPrefix) || maxResultsPerPrefix < 1) {
throw new Error("maxResultsPerPrefix must be a positive integer");
}
this.maxResultsPerPrefix = maxResultsPerPrefix;
this.root = this.createNode();
this.scores = new Map();
}
createNode() {
return { children: new Map(), top: [] };
}
normalize(word) {
return word.trim().toLocaleLowerCase();
}
// Scores are monotonic: an existing word can keep or improve its score.
// This lets each node retain only its bounded top-K candidates.
add(word, score) {
const normalized = this.normalize(word);
if (!normalized || !Number.isFinite(score)) {
throw new Error("word must be non-empty and score must be finite");
}
const previous = this.scores.get(normalized);
if (previous !== undefined && score <= previous) return false;
this.scores.set(normalized, score);
let node = this.root;
const path = [node];
for (const char of Array.from(normalized)) {
if (!node.children.has(char)) node.children.set(char, this.createNode());
node = node.children.get(char);
path.push(node);
}
// Update the word wherever it is already retained, or insert it if eligible.
for (const current of path) {
const existing = current.top.findIndex(item => item.word === normalized);
if (existing !== -1) current.top.splice(existing, 1);
current.top.push({ word: normalized, score });
current.top.sort((a, b) => b.score - a.score || a.word.localeCompare(b.word));
if (current.top.length > this.maxResultsPerPrefix) current.top.pop();
}
return true;
}
suggest(prefix, limit = this.maxResultsPerPrefix) {
if (!Number.isInteger(limit) || limit < 0) {
throw new Error("limit must be a non-negative integer");
}
const normalized = this.normalize(prefix);
let node = this.root;
for (const char of Array.from(normalized)) {
node = node.children.get(char);
if (!node) return [];
}
return node.top.slice(0, Math.min(limit, this.maxResultsPerPrefix));
}
}
// Example
const trie = new RankedTrieAutocomplete(3);
trie.add("apple", 12);
trie.add("app", 8);
trie.add("application", 15);
trie.add("apricot", 10);
console.log(trie.suggest("app"));
Each trie node stores at most K ranked suggestions; prefix lookup walks the prefix and returns its cached results.
Scores must only increase for an existing word. If scores can decrease, rebuild the affected index or retain more candidates; a dropped candidate may otherwise need to re-enter a node's top K.
Complexity: insert O(L × K log K); lookup O(P + K); storage O(N + K × N) references in the worst case, where L is word length, P prefix length, and N trie nodes.
Product & growthMediumDuolingoProduct Manager
8. What are three products you like least, and why?
Model answer
How I’d frame the answer
I’d treat “like least” as a question about product choices and trade-offs, not an invitation to criticize teams. I’d choose products I’ve used enough to discuss concretely, acknowledge that they serve real needs, and distinguish my experience from a universal verdict.
1. X (formerly Twitter)
I value its real-time public conversation, but I find the experience can make it difficult to separate useful information from repetition, outrage, and low-quality engagement. The tension is understandable: maximizing time spent can conflict with helping users find trustworthy, relevant updates. I’d want to understand how the product balances discovery, user control, and content quality—not assume that simply reducing engagement is the answer.
2. A major airline’s mobile app
In routine situations, it can be perfectly adequate for booking or checking in. During a delay or cancellation, though, the user’s need changes sharply: they need clear options, confidence that a new itinerary is confirmed, and help taking action quickly. When status, rebooking, and support are split across screens or channels, the experience feels least reliable at the moment it matters most. That points to a service-recovery problem, not merely a visual-design problem.
3. HP Smart, the printer companion app
It supports a complex product category, but setup and troubleshooting can feel more complicated than the everyday job—printing or scanning a document. Users may have to reason about device discovery, network setup, permissions, ink, and account states before completing a simple task. Some complexity is inherent to printers; the product opportunity is to guide users through it with clearer diagnosis and fewer unexplained choices.
What I’d emphasize
These examples reflect moments when a product’s complexity or incentives can get in the way of the user’s goal. I wouldn’t claim that my preferences represent the whole market: I’d validate the issues with behavioral data, support contacts, and research across user segments. I’d also name what each product does well, because strong PM judgment means understanding the value and constraints alongside the friction.
If asked to improve one, I’d choose the airline app’s disruption experience. It has a clear high-stakes user need, a measurable task outcome, and an opportunity to coordinate product, operations, and customer support—not just add another feature.
Product & growthMediumDuolingoProduct ManagerProduct Case
9. Name three apps you like least, choose one to improve, and sketch a wireframe for the improvement.
Model answer
Clarify & scope
I’d name apps I use enough to explain specific friction, while noting that “least liked” is a personal judgment. My examples are X, HP Smart, and the United Airlines app. I would choose United for improvement because disruption recovery is a high-stakes moment where a better product can save users time and reduce avoidable support demand.
User segments & pain points
The priority user is a traveler whose flight has been delayed or canceled and who needs to reach a destination. They may be under time pressure, have limited connectivity, and be unsure whether an itinerary change is confirmed. Their job is not to browse flight information; it is to understand the situation and take the best available next step.
Goals & success metrics
My North Star would be successful self-service recovery: the share of eligible disrupted travelers who confirm a viable alternative itinerary without needing an agent. Guardrails would include rebooking errors, time to confirmation, and contacts to support. I’d segment results by disruption type, airport, and traveler needs so an average improvement does not conceal a bad experience for a subgroup.
Solutions & wireframe
I’d consider a single recovery hub, proactive push notifications with deep links, and clearer explanations of rebooking options. Recommendation: start with the recovery hub and proactive notification; it reduces the need to hunt across separate status, booking, and help screens.
┌────────────────────────────────────┐
│ Flight disrupted · Updated 2:14 PM │
│ We’re sorry. Your flight is delayed│
│ │
│ You can choose: │
│ │
│ [ Rebook: 6:40 PM · 1 stop ] │
│ [ Rebook: Tomorrow · nonstop ] │
│ [ Keep current flight ] │
│ │
│ Your bags: No action needed │
│ Hotel / meal options │
│ │
│ [ Confirm selected option ] │
│ Talk to an agent │
└────────────────────────────────────┘
Prioritization & trade-offs
I’d prioritize by user impact, frequency, confidence, and implementation effort. I’d first establish accurate, timely itinerary options with operations; a polished screen is useless if inventory is stale. The trade-off is between a fast self-service choice and making sure users understand constraints such as connections, bags, or fare rules.
MVP, measurement & rollout
I’d test a prototype with disrupted travelers, then launch to a small set of routes where rebooking data is reliable. I’d compare task completion and support contacts against a control, monitor errors and complaints, and expand only if users are more successful without creating operational or fairness problems.
10. What design changes would you make to this flow to improve it?
Model answer
Clarify & scope
I’d first ask to see the flow, understand its intended outcome, and identify the target user and platform. Since no screen or flow is provided, I’ll assume it is a key task funnel—such as sign-up, checkout, or booking—and describe how I’d assess and improve it. I’d avoid prescribing UI changes before locating the actual friction.
User segments & pain points
I’d map the flow for the primary user, then check whether new and returning users behave differently. I’d look for moments where people hesitate, make errors, repeat work, or abandon. For a checkout example, a new customer may be blocked by account creation, while a returning customer may be slowed by outdated delivery or payment details.
Goals & success metrics
My North Star for this change would be successful task completion per eligible user. I’d pair it with:
Step-to-step conversion and overall completion rate.
Time to completion and error or validation rate.
Downstream quality, such as successful fulfillment or fewer support contacts.
Guardrails: cancellations, fraud, accessibility issues, and user satisfaction.
I’d define the denominator and attribution window before comparing results.
Solutions
I’d generate a few hypotheses tied to observed friction:
Remove unnecessary fields and defer nonessential questions until after the task.
Make the next step, total cost, and requirements clear before users commit.
Add inline validation, sensible defaults, and a clear recovery path for errors.
For checkout, I might offer guest checkout while preserving a clear, optional path to create an account. I’d test that against the current experience rather than assume fewer screens automatically improve completion.
Recommendation: prioritize the change that addresses the largest measured source of abandonment while preserving trust and task quality. I’d prototype it, test it with users, then run an experiment if traffic allows.
Prioritization & trade-offs
I’d rank opportunities by reach, expected impact, confidence, and effort. I’d favor a small, reversible change with strong evidence over a redesign that adds risk. I’d also check that faster completion does not come at the expense of informed consent, accessibility, or downstream outcomes.
MVP, measurement & rollout
I’d instrument exposure and each meaningful step, establish a baseline, and validate event quality. I’d release to a small share of traffic, compare completion and guardrails with a control, and break results down by device and user segment. If the primary metric improves without harming quality, I’d expand gradually; if not, I’d inspect where the funnel changed and iterate.
What interviewers listen for: evidence-based diagnosis, a clearly chosen user, measurable outcomes, and ownership of both the experience and its risks.
System designMediumDuolingoTechnical Program ManagerTechnical interview
11. How would you walk through and extend an authentication and account-creation system design to address different scenarios?
Model answer
1. Requirements & scale
Functional requirements
Create accounts with email/password, verified email, and optional social or enterprise identity providers.
Authenticate users, issue and refresh sessions, support logout, MFA, password reset, account recovery, and account disablement.
Prevent duplicate identities and abuse; provide audit events and administrative controls.
Support web and mobile clients, plus service-to-service identity where needed.
Non-functional requirements
High availability for login, strong confidentiality and integrity, and auditable security controls.
Low latency: target p95 under 250 ms for a regional login excluding third-party identity-provider time.
Passwords are never stored or logged in plaintext. Tokens are short-lived or revocable, and secrets are protected in a key-management system.
Consistent identity uniqueness and safe recovery matter more than availability during a conflicting write.
Back-of-the-envelope estimates
Assume 50 million registered accounts and 5 million daily active users. At 10 authentication attempts per active user per day, that is 50 million attempts/day, or about 580 average requests/second. A 10x peak is approximately 6,000 requests/second. Assume 100,000 signups/day: about 1.2 average signups/second, with a 20x peak near 25/second. At 2 KB of core account metadata per user, 50 million accounts require about 100 GB before indexes and replicas; audit and event retention will be substantially larger. Authentication traffic is small in bandwidth, but password hashing makes compute capacity and abuse controls important.
2. High-level architecture
flowchart TD
subgraph Client
W[Web client]
M[Mobile client]
end
subgraph EdgeCDN[Edge and CDN]
E[WAF and rate limits]
end
subgraph LoadBalancer[Load Balancer]
LB[Regional load balancer]
end
subgraph APIServices[API and Services]
GW[Identity API]
AUTH[Auth service]
RISK[Risk and MFA service]
NOTIFY[Notification service]
IDP[External identity providers]
end
subgraph Cache[Cache]
RC[Redis rate limits and challenges]
end
subgraph Datastores[Datastores]
DB[(Identity SQL database)]
TOK[(Session and token store)]
AUD[(Audit log store)]
KMS[Key management system]
end
subgraph MessageQueue[Message Queue]
Q[Identity events queue]
end
subgraph Workers[Workers]
VER[Verification worker]
MAIL[Email and SMS worker]
RPT[Audit and analytics worker]
end
W -->|HTTPS requests| E
M -->|HTTPS requests| E
E -->|Filtered traffic| LB
LB -->|Identity API calls| GW
GW -->|Authentication operations| AUTH
AUTH -->|Risk and MFA checks| RISK
AUTH -->|Rate-limit and challenge state| RC
AUTH -->|Account and credential reads/writes| DB
AUTH -->|Session issue and revoke| TOK
AUTH -->|Signing keys| KMS
AUTH -->|OAuth authorization| IDP
GW -->|Transactional events| Q
Q -->|Verification jobs| VER
VER -->|Send verification| MAIL
MAIL -->|Email or SMS delivery| NOTIFY
Q -->|Audit and product events| RPT
RPT -->|Append events| AUD
Diagram
3. API design
POST /v1/accounts — create an account; require an idempotency key and return a pending-verification state.
POST /v1/accounts/verify-email — consume a one-time verification token.
POST /v1/sessions — authenticate with password, MFA challenge, or an approved identity-provider flow.
POST /v1/sessions/refresh — rotate a refresh token and return a new access token.
DELETE /v1/sessions/{sessionId} — revoke one session; DELETE /v1/sessions revokes all sessions.
POST /v1/password-resets and POST /v1/password-resets/complete — initiate and complete recovery without revealing whether an account exists.
POST /v1/mfa/challenges and POST /v1/mfa/verify — initiate and complete MFA.
Use TLS, strict input validation, generic authentication errors, request correlation IDs, and no credentials or tokens in logs. Return an access token with a short lifetime, such as 10 minutes, and a rotated refresh token held securely by the client.
4. Data model & storage
Use a relational database as the source of truth because account identity uniqueness, credential updates, and recovery state require transactions and constraints. Core tables:
identities(identity_id, account_id, provider, normalized_subject, email) with a unique constraint on (provider, normalized_subject) and an appropriate uniqueness policy for verified email.
credentials(account_id, password_hash, hash_version, updated_at); store an Argon2id hash with a unique salt, never the password.
Partition large session and audit datasets by account ID or time, based on access patterns. Use Redis only for ephemeral rate limits and short-lived challenges, not as the durable account store. Store audit events in append-only storage with retention controls; encrypt sensitive fields and manage signing/encryption keys in KMS.
5. Deep dive
Account creation and authentication
Normalize the identifier and validate input. Apply IP, device, and identifier-based rate limits; use risk signals or a CAPTCHA step-up when abuse risk is high.
In one SQL transaction, create a pending account and identity, enforce uniqueness, and write a verification event to an outbox. A worker publishes the event and sends a short-lived, single-use verification link. Store only a hash of the verification token and expire it, for example, after 30 minutes.
On verification, atomically consume the token and transition the account to active. The API response should not reveal whether an arbitrary email already exists; use consistent resp
System designMediumDuolingoDirector of Technical Program ManagementTechnical interview
12. How would you extend an authentication and account-creation system design to handle different scenarios?
Model answer
1. Requirements & scale
Functional requirements
Create accounts with email/password, verified email, passkeys, social identity, or enterprise SSO.
Sign users in, issue and refresh sessions, sign out, and revoke sessions across devices.
Support MFA, account recovery, account linking, and safe handling of duplicate identities.
Protect endpoints from bots, credential stuffing, enumeration, and abuse.
Non-functional requirements
High availability for sign-in; strong consistency for credential, recovery, and identity-link changes.
Low latency: target p95 under 250 ms for a regional sign-in excluding external identity-provider latency.
Never store plaintext passwords; protect PII and secrets; audit sensitive actions.
Make registration and sign-in idempotent, observable, and safely recoverable.
Back-of-the-envelope: Assume 10M monthly active users, 2M account creations/month, and 20K peak authentication requests/second during a major event. At an average 2 KB of relational data per account, core account records are about 20 GB before indexes and replication. At 2M signups/month and a 1 KB audit/event record, signup events are about 2 GB/month. Authentication traffic is roughly 40 MB/s at 2 KB/request before protocol overhead; external provider and email traffic is asynchronous and separately rate-limited.
2. High-level architecture
flowchart TD
subgraph Client[Client]
U["Web and mobile"]
end
subgraph Edge[Edge and CDN]
W["WAF and bot defense"]
end
subgraph LB[Load Balancer]
L["Regional gateway"]
end
subgraph Services[API and Services]
I["Identity API"]
P["Policy and risk engine"]
T["Token service"]
N["Notification service"]
end
subgraph Cache[Cache]
R["Rate limits and nonce cache"]
end
subgraph Stores[Datastores]
D["Account SQL primary"]
S["Session store"]
O["Audit object store"]
end
subgraph Queue[Message Queue]
Q["Signup and security events"]
end
subgraph Workers[Workers]
V["Verification and risk workers"]
end
U -->|"HTTPS and OIDC"| W
W -->|"filtered requests"| L
L -->|"auth API calls"| I
I -->|"risk checks"| P
I -->|"rate and nonce checks"| R
I -->|"identity records"| D
I -->|"session changes"| S
I -->|"mint or validate tokens"| T
I -->|"outbox events"| Q
Q -->|"async events"| V
V -->|"email or push request"| N
V -->|"append audit data"| O
Diagram
3. API design
POST /v1/accounts — create an account; accept an idempotency key and return a pending-verification state.
POST /v1/auth/sessions — authenticate with a supported credential and return tokens or an MFA challenge.
POST /v1/auth/mfa/challenges and POST /v1/auth/mfa/verify — start and complete MFA.
POST /v1/auth/token/refresh — rotate refresh tokens and detect reuse.
POST /v1/auth/recovery and POST /v1/auth/recovery/confirm — begin and complete recovery without revealing account existence.
DELETE /v1/auth/sessions/{id} — revoke a session; support revoking all sessions for a compromised account.
POST /v1/identities/link — link a verified external identity after re-authentication.
4. Data model & storage
Use a relational database for transactional identity invariants: Account(account_id, status, created_at), Identity(identity_id, account_id, provider, normalized_subject, verified_at), Credential(account_id, password_hash, hash_version), MfaFactor(factor_id, account_id, type, encrypted_secret_ref), and Session(session_id, account_id, refresh_hash, expires_at, revoked_at). Enforce uniqueness on (provider, normalized_subject) and normalized email where product policy requires it. Store passwords with Argon2id and per-user salts; keep encryption keys in a KMS, not in the database.
Partition sessions by account_id or session ID as access patterns require; keep account and identity writes strongly consistent. Use a distributed cache only for short-lived nonces and rate-limit counters, never as the authority for identity. Use a durable queue plus transactional outbox for verification and audit events; retain immutable security audit records in append-only storage. Index provider subject and normalized email for lookup, with careful privacy controls.
5. Deep dive
The crux is treating each identity provider as a credential for an account—not assuming email alone proves two identities belong to the same person. On social sign-in, validate issuer, audience, signature, nonce, and state; look up the stable provider subject. If absent, create a pending identity and require verified ownership or an explicit linking flow. Never silently merge accounts because email strings match. For enterprise SSO, bind the tenant and issuer, validate OIDC/SAML assertions, and apply tenant policy for MFA and provisioning.
For account creation, make the request idempotent, persist the account and outbox event in one transaction, then send verification asynchronously. Return the same neutral response for existing and new addresses to reduce enumeration. Recovery tokens are random, short-lived, single-use, stored hashed, and invalidate or rotate sessions after successful recovery.
sequenceDiagram
participant C as Client
participant I as Identity API
participant D as SQL Store
participant Q as Event Queue
participant W as Worker
C->>I: Create account with idempotency key
I->>I: Validate input and apply abuse limits
I->>D: Transaction: account plus outbox event
D-->>I: Commit
I-->>C: Pending verification response
I->>Q: Publish outbox event
Q->>W: Deliver verification event
W->>C: Send single-use verification link
Diagram
6. Scale, bottlenecks & trade-offs
Keep authentication stateless at the API tier and scale it horizontally; use regional routing and multi-zone database replication. The
System designHardDuolingoEngineering Manager
13. Design a real-time notification system that can engage millions of users without degrading reliability.
Model answer
1. Requirements & scale
Functional requirements
Accept events from product services and deliver in-app, push, email, or SMS notifications according to user preferences.
Support templates, scheduling, deduplication, priority, retries, delivery status, and per-user limits.
Allow clients to fetch or acknowledge in-app notifications and users to update preferences.
Non-functional requirements
Durable acceptance, multi-channel isolation, tenant and user privacy, and observable delivery outcomes.
Target p99 under 1 second for enqueue-to-provider handoff for urgent push; email and non-urgent campaigns may be asynchronous.
Degrade gracefully when a provider, queue, or downstream channel is unhealthy; do not block core product requests.
Estimates: Assume 50M monthly active users, 10 notifications per user per day, and a 5x peak factor. That is 500M notifications/day, about 5.8k/sec average and 29k/sec peak. At 1 KB of event metadata each, raw event storage is about 500 GB/day; indexes and replication can multiply this several times. If 20% are push payloads averaging 2 KB, peak outbound payload bandwidth is roughly 12 MB/sec before protocol overhead. Provider rate limits, rather than compute, are likely to be the main bottleneck.
2. High-level architecture
flowchart TD
subgraph Client
C[Mobile and web clients]
end
subgraph EdgeCDN
E[API edge and auth]
end
subgraph LoadBalancer
L[Regional load balancer]
end
subgraph APIServices
A[Notification API]
P[Preference service]
T[Template and policy service]
end
subgraph Cache
R[Preference and template cache]
end
subgraph Datastores
D[Notification SQL store]
O[Event object store]
end
subgraph MessageQueue
Q[Partitioned channel queues]
end
subgraph Workers
W[Fanout and channel workers]
X[Provider adapters]
end
C -->|fetch and acknowledge| E
E -->|authenticated requests| L
L --> A
A -->|read preferences| P
P --> R
A -->|persist status| D
A -->|durable event| O
A -->|enqueue delivery job| Q
T --> R
Q -->|channel jobs| W
W -->|policy and template lookup| R
W --> X
X -->|provider delivery| D
X -->|push email SMS| C
Diagram
3. API design
POST /v1/notifications — accept a notification with an idempotency key, recipient or audience, template, priority, and expiry.
GET /v1/users/{userId}/notifications?cursor=... — page through in-app messages.
POST /v1/notifications/{id}/ack — record read or dismissed state.
PUT /v1/users/{userId}/preferences — update channel and category settings.
GET /v1/notifications/{id} — return delivery status for authorized callers.
4. Data model & storage
Use a relational store for notification metadata, preferences, templates, and auditability; partition large delivery-status tables by time and recipient hash. Keep rendered payloads or long-lived event history in object storage. Use a partitioned durable queue for delivery jobs and a cache for frequently accessed preferences and templates. A delivery record contains notification_id, user_id, channel, status, attempt, next_attempt_at, provider_id, and timestamps. Enforce an idempotency constraint on the producer key and recipient/channel combination where appropriate.
5. Deep dive
The critical path is durable acceptance without coupling product traffic to flaky providers. The API validates the request, resolves policy, writes an outbox record in the same database transaction as the notification, and returns an accepted ID. An outbox publisher moves records to the queue; this avoids the dual-write failure where the database commits but enqueueing fails. Workers render templates, re-check preferences and expiry, then call a provider adapter with bounded timeouts. Retries use exponential backoff with jitter; permanent errors go to a dead-letter queue. Provider callbacks update delivery status asynchronously. Use a stable idempotency key because queue delivery is at least once, not exactly once.
6. Scale, bottlenecks & trade-offs
Partition queues by channel and recipient hash to spread load while preserving useful ordering per user. Autoscale workers on queue age and provider throttling, not just CPU. Apply per-provider token buckets and circuit breakers; fail over only when the alternate provider supports the channel and duplicate-delivery risk is acceptable. Cache preferences briefly, but re-check high-risk opt-outs before send. Keep in-app delivery available through durable storage even if push providers fail. Replicate databases across zones and use regional queues; choose a home region per user to avoid conflicting preference writes. The design favors durable acceptance and eventual delivery over synchronous confirmation. Explicitly cap fanout, campaign rate, retries, and storage retention to prevent a single large campaign from overwhelming transactional traffic.
System designHardDuolingoEngineering Manager
14. Design an experimentation platform that can safely run hundreds of concurrent A/B tests.
Model answer
1. Requirements & scale
Functional requirements
Define experiments, variants, eligibility, traffic allocation, targeting, metrics, and start or stop times.
Assign users consistently, record exposures and outcomes, analyze results, and support holdouts and mutual exclusion.
Allow hundreds of concurrent experiments without conflicting configuration or overwhelming the product’s request path.
Non-functional requirements
Assignment must be deterministic, low latency, highly available, auditable, and consistent for a given user and experiment version.
Separate configuration and analysis from online assignment. Guard against sample-ratio mismatch (SRM), logging loss, privacy violations, and unsafe launches.
Estimates: Assume 100M daily active users, 20 eligible decisions per user per day, and a 4x peak. That is about 2B assignments/day, or 23k/sec average and 93k/sec peak. At 100 bytes per exposure, raw exposure data is about 200 GB/day before indexes and replication. Hundreds of experiments multiply evaluation and event volume, so assignment should be stateless and exposure logging asynchronous.
2. High-level architecture
flowchart TD
subgraph Client
C[Web and mobile SDKs]
end
subgraph EdgeCDN
E[Config edge cache]
end
subgraph LoadBalancer
L[Regional load balancer]
end
subgraph APIServices
A[Assignment service]
M[Experiment management API]
I[Metrics and analysis API]
end
subgraph Cache
R[Versioned experiment configs]
end
subgraph Datastores
D[Experiment SQL store]
W[Warehouse and event lake]
end
subgraph MessageQueue
Q[Exposure event stream]
end
subgraph Workers
X[Validation and metric workers]
Y[Report and alert workers]
end
C -->|fetch config| E
E -->|cached config| C
C -->|assignment request| L
L --> A
A -->|read snapshot| R
M -->|publish versioned config| D
D -->|validated config| R
C -->|exposure event| Q
Q -->|stream events| X
X -->|write events| W
W -->|aggregate metrics| Y
Y -->|results and alerts| I
Diagram
3. API design
POST /v1/experiments — create a draft with variants, allocation, eligibility, metrics, and guardrails.
POST /v1/experiments/{id}/validate — check conflicts, power assumptions, schema, and safety rules.
POST /v1/experiments/{id}/publish — publish an immutable configuration version.
GET /v1/config?app=...&platform=... — retrieve a signed, versioned client configuration.
POST /v1/exposures:batch — submit exposure events with event IDs for deduplication.
GET /v1/experiments/{id}/results — return validated metrics, uncertainty, and health checks.
4. Data model & storage
Store experiment definitions and immutable versions in SQL, with audit history and ownership. A version contains experiment ID, hash salt, unit of randomization, eligibility predicate, variant weights, layer, and effective interval. Publish snapshots to a replicated low-latency cache or edge distribution tier. Store exposure and outcome events in a durable stream, then partition the warehouse by event date and experiment ID. Keep analysis inputs and outputs reproducible by recording config version, SDK version, and metric-definition version on each event.
5. Deep dive
For assignment, canonicalize the randomization unit and compute a stable hash of experiment_id + version_salt + unit_id. Map the unsigned hash to a uniform interval, then assign by cumulative variant weights. This makes assignment deterministic without a per-user database read and supports stable allocation when the configuration version is unchanged. Use a separate hash namespace for each experiment. For experiments that must not overlap, define a layer and assign the user to one experiment within that layer; do not rely on teams to avoid collisions manually.
Configuration publication is an atomic snapshot: validate it, assign a monotonically increasing version, then distribute it. SDKs use a last-known-good snapshot during a control-plane outage, with explicit expiry behavior for safety-sensitive tests. Record exposure only when the user actually qualifies for the treatment, not merely when the config is fetched. Events carry an idempotent event ID and are analyzed with deduplication. The analysis pipeline checks SRM, missing exposure, delayed conversions, sample size, and guardrails before presenting a result.
6. Scale, bottlenecks & trade-offs
Stateless assignment services scale horizontally and can be bypassed by SDK-side evaluation using signed cached configs. Central evaluation provides faster policy changes and uniform behavior; client-side evaluation reduces latency and request load but needs careful versioning and privacy controls. Keep assignment highly available, but fail closed or use a safe default for experiments that can affect payments, safety, or access control. Experiments must never be an authorization mechanism.
Protect the event stream with batching, backpressure, bounded SDK queues, and clear loss monitoring. At-least-once delivery plus warehouse deduplication is usually preferable to expensive exactly-once claims. Use regional config distribution and data residency rules for privacy; centralize only approved aggregates. Enforce launch limits, ownership, review for high-risk metrics, and automatic stop conditions on error rate, latency, or business guardrails. Alert on config propagation lag and SRM. The main trade-off is flexible targeting versus evaluation cost and explainability: constrain the targeting language and precompute or compile predicates rather than allowing arbitrary user code.
System designHardDuolingoEngineering Manager
15. How would you scale an ad-serving or monetization pipeline to support high-throughput bidding and decision-making?
Model answer
1. Requirements & scale
Functional requirements
Accept an ad opportunity, apply eligibility and policy, select a winner, return a decision or creative, and record delivery and outcome events.
Support campaigns, budgets, pacing, targeting, frequency caps, creative review, pricing, and advertiser reporting.
Integrate with external bidders under strict deadlines and isolate failures by bidder.
Non-functional requirements
Target p99 decision latency below 100 ms end to end, with a tighter internal budget for candidate selection and scoring.
Handle bursty traffic, protect user privacy, avoid overspend, and fail gracefully without disrupting the publisher experience.
Estimates: Assume 100k ad requests/sec average and 5x peak, or 500k/sec. At 1 KB of request metadata, peak ingress is about 500 MB/sec before compression. If each request fans out to five bidders, that is 2.5M outbound bid calls/sec at peak. At 500 bytes per impression event and 10B impressions/day, raw event volume is about 5 TB/day. The design must aggressively filter, batch, and stream rather than synchronously query reporting stores.
2. High-level architecture
flowchart TD
subgraph Client
C[Publisher apps and pages]
end
subgraph EdgeCDN
E[Edge validation and routing]
end
subgraph LoadBalancer
L[Regional request balancer]
end
subgraph APIServices
A[Ad decision API]
G[Eligibility and scoring]
B[Budget and pacing service]
N[Bidder gateway]
end
subgraph Cache
R[Campaign and creative cache]
F[Frequency cap cache]
end
subgraph Datastores
D[Campaign SQL store]
O[Impression event lake]
end
subgraph MessageQueue
Q[Decision and event stream]
end
subgraph Workers
W[Pacing and billing workers]
X[Reporting and fraud workers]
end
C -->|ad opportunity| E
E -->|validated request| L
L --> A
A --> G
G -->|candidate lookup| R
G -->|cap check| F
A -->|external bid request| N
N -->|parallel bidder calls| A
A -->|winner and creative| C
A -->|decision event| Q
Q -->|durable events| O
Q -->|spend and outcomes| W
Q -->|fraud signals| X
D -->|campaign updates| R
W -->|budget updates| D
Diagram
3. API design
POST /v1/ad-decisions — receive a publisher opportunity and return a winner, no-fill, or fallback response.
POST /v1/bid-request — send a standards-compatible request to an external bidder through the gateway.
POST /v1/bid-response — validate and score bidder responses within the request deadline.
POST /v1/events:batch — ingest impression, click, conversion, and billing events.
POST /v1/campaigns and PATCH /v1/campaigns/{id} — manage campaign configuration, budgets, and targeting.
4. Data model & storage
Use SQL for campaign configuration, advertiser accounts, billing rules, and audit history. Publish immutable, versioned campaign snapshots to regional memory caches for the hot path. Store short-lived frequency caps in a low-latency distributed key-value store keyed by user or device and campaign, with TTL. Keep auction decisions and event logs in a partitioned stream and columnar object storage, partitioned by event date and region for analytics. Maintain a compact request-scoped candidate record containing campaign ID, bid, eligibility reason, creative ID, and configuration version.
5. Deep dive
The request path must be bounded and mostly memory-resident. Validate and normalize the request, apply privacy and consent rules, retrieve candidates from cached targeting indexes, then filter by policy, budget availability, frequency caps, and creative status. Call external bidders in parallel with a strict deadline, for example a 50 ms bidder budget inside a 100 ms overall p99 target. Each bidder has an independent timeout, concurrency limit, circuit breaker, and response validator. Score valid bids using price plus quality and policy adjustments; use deterministic tie-breaking and an explicit no-fill or house-ad fallback. Return the result before doing analytics or billing work.
Budget safety is the hard consistency problem. Maintain regional spend reservations or token buckets to prevent every region from spending against the same stale balance. Reserve a small quota per region, reconcile spend asynchronously from billable events, and pause or tighten campaigns when reconciliation lag or overspend risk crosses a threshold. Log the decision and configuration version before responding when required for billing, but keep the durable write asynchronous if the business contract permits it; otherwise use a replicated low-latency log with a defined fail-closed policy.
6. Scale, bottlenecks & trade-offs
Scale decision workers horizontally by region and isolate traffic by publisher, format, and bidder. Candidate indexing and cache hit rate matter more than raw CPU; bound candidate sets and use approximate indexes where exact scans are too expensive. Apply per-bidder bulkheads so slow external partners cannot consume all sockets or tail latency. Queue events with partition keys that balance throughput while preserving needed ordering for billing; use idempotent event IDs and reconciliation to handle at-least-once delivery.
Replicate configuration globally but keep spend reservations and sensitive user-level caps regionally scoped where possible. Strong global consistency reduces overspend but adds latency and creates availability dependencies; regional quota allocation gives fast decisions at the cost of some unused budget and bounded overspend risk. Prefer a small conservative budget buffer over a synchronous global write on every impression. Sample non-billable diagnostics, but do not sample events required for billing or compliance. Monitor p50/p99 decision latency, timeout and no-bid rates, fill rate, effective revenue per thousand impressions, cache hit rate, spend variance, event lag, and fraud rate. Roll out scoring changes with shadow evaluation, c
TechnicalEasyDuolingoEngineering Manager
16. What is your team's mission statement?
Model answer
A team mission statement should explain who the team serves, what outcome it owns, and how that outcome supports the organization. It should be stable enough to guide decisions, but specific enough to rule some work in or out.
Example answer: “Our mission is to help product teams deliver reliable customer experiences by providing secure, self-service platform capabilities that reduce the time and effort required to launch and operate services.”
I would then explain how the team uses that mission:
Connect it to users: Name the team’s primary users—such as product engineers, internal operators, or end customers—and their most important unmet need.
Define the outcome: Pair the mission with a small set of measures. For this platform example, I might track service adoption, median time to onboard a service, deployment failure rate, and developer satisfaction. I would balance speed metrics with reliability and security guardrails.
Use it to prioritize: When choosing between a one-off integration and a reusable capability, ask which better advances the mission across the user base. A mission is useful only if it helps the team make real trade-offs.
Keep it aligned: Review it with product, design, and partner teams as company strategy or user needs change. If the mission is unclear to the team, I would refine it with them rather than treat it as a slogan handed down by management.
Leadership angle: I would make sure the team can explain how its roadmap and day-to-day work connect to the mission, while staying open to evidence that the mission or measures need to change.
TechnicalMediumDuolingoEngineering Manager
17. How do you keep a team delivering consistently high-quality engineering work over time?
Model answer
I treat consistent engineering quality as a system the team owns, not a final inspection step. The goal is a sustainable delivery cadence: useful changes reach users regularly without accumulating avoidable defects or exhausting the team.
Set a shared quality bar. Agree on lightweight expectations for design, tests, security, observability, and operational readiness. Tailor the bar to risk: a copy change and a data-migration service should not face identical review requirements.
Make work small and visible. Break initiatives into independently reviewable increments, limit work in progress, and surface dependencies early. Small changes reduce review latency and make rollback safer.
Build quality into the workflow. Require meaningful tests at the appropriate layer, automated linting and CI checks, peer review, and staged deployment for higher-risk changes. Keep ownership clear: the author remains responsible for operating what they ship.
Use production signals to learn. Review escaped defects, change failure rate, recovery time, flaky-test rate, review time, and delivery lead time together. No single metric is a target; for example, raising test coverage without reducing risk can reward low-value tests.
Improve the system, not just individual behavior. After incidents or repeated rework, run blameless reviews, identify contributing process or design weaknesses, and assign follow-up owners. Reserve capacity for maintenance and reliability work, then make the trade-off explicit with product partners.
Keep the cadence sustainable. Regularly ask the team what is slowing delivery, coach engineers through reviews and design discussions, and adjust commitments when priorities or staffing change. I would rather reset scope early than repeatedly normalize overtime.
I would explain the result in terms of both speed and quality—for example, a shorter median lead time alongside stable or lower change-failure and escaped-defect rates. I would also call out the team impact: clearer ownership, fewer surprises, and more confidence in estimates.
flowchart LR
A[Prioritize and scope] --> B[Design and review]
B --> C[Build with tests]
C --> D[Automated CI checks]
D --> E[Stage and release]
E --> F[Monitor production]
F --> G[Learn and improve]
G --> A
Diagram
What interviewers listen for: a quality bar matched to risk, sustainable delivery rather than heroics, metrics with guardrails, and a learning loop that improves the engineering system.
TechnicalMediumDuolingoEngineering Manager
18. How do you maintain code quality and testing standards across a fast-moving engineering team?
Model answer
Operating principle
I treat code quality as a team-owned delivery capability, not a gate that slows delivery at the end. The goal is fast, safe change: clear standards, automated feedback, and engineering judgment for risks automation cannot assess.
Practices
Set a small, explicit quality bar. Agree on conventions for readability, API compatibility, security, observability, and test expectations. Document defaults and exceptions; avoid turning preferences into mandatory rules.
Put fast checks on every change. Require formatting, linting, type checks, unit tests, and security or dependency checks in CI. Keep the pull-request path short; run slower integration, performance, and end-to-end suites on suitable schedules or risk triggers.
Test behavior and risk, not coverage percentages. Use unit tests for logic, contract and integration tests at boundaries, and a small set of end-to-end tests for critical journeys. Track coverage as a diagnostic, not a target that encourages low-value tests.
Make review useful and timely. Use small pull requests, clear ownership, review checklists for risky areas, and rotating reviewers. Automate style feedback so reviewers focus on design, correctness, and maintainability.
Give teams safe ways to ship. Use feature flags, canaries, progressive rollout, monitoring, and rollback procedures. Add post-incident fixes to tests or tooling so the same class of defect is harder to repeat.
Manage the system with evidence. Review CI duration and flakiness, escaped defects, rollback rate, change failure rate, and time to restore. Assign owners to quality improvements and revisit the measures so teams do not optimize for a single metric.
flowchart TD
A[Change proposed] --> B[Automated fast checks]
B --> C{Checks pass}
C -->|No| D[Fix or clarify]
D --> A
C -->|Yes| E[Risk based review]
E --> F[Merge and progressive rollout]
F --> G[Monitor production signals]
G --> H[Learn and improve tests]
H --> A
Diagram
Leadership and trade-offs
I would calibrate the bar to the service’s risk: a payment or identity change deserves stronger contract, security, and rollout checks than a low-impact internal tool. I would partner with senior engineers to make standards practical, and give teams ownership of their service-level test strategy. If CI becomes a bottleneck, I would first measure which checks are slow or flaky, then parallelize, cache, or move appropriate checks rather than simply removing safeguards.
What interviewers listen for: a balance of speed and safety; measurable outcomes; practical, layered testing; team ownership; and learning from production failures.
TechnicalMediumDuolingoTechnical Program ManagerOwnership panel
19. Can you describe a time when you identified an unaddressed gap in a process or execution, what you did to address it, and how it affected the team…
The full question
Can you describe a time when you identified an unaddressed gap in a process or execution, what you did to address it, and how it affected the team or project?
Model answer
Situation
During a multi-team API launch, each team had a delivery plan, but there was no owner for validating that the API contract worked end to end across producers and consumers. The gap became visible when one team treated a field as optional while a downstream integration assumed it was always present. The launch date was approaching, and resolving the issue late could have caused customer failures or a last-minute delay.
Task
I took responsibility for closing the execution gap: establish shared contract ownership, identify whether the issue affected the launch, and create a repeatable way to catch similar problems earlier without turning the process into a bureaucratic gate.
Action
I confirmed the failure mode with the service owners and traced which consumers relied on the field. I separated the immediate launch risk from the broader process weakness so we could address both.
I brought the producer and consumer leads together to agree on the contract’s intended behavior, including nullability, defaults, and compatibility expectations. I documented the decision in the API specification and assigned an owner for future changes.
For the immediate risk, I asked the teams to add a compatibility test using representative consumer payloads. We also added a temporary defensive handling path so an unexpected missing value would not fail the whole request.
I introduced a small contract-readiness step in the program checklist: identify consumers, confirm schema compatibility, and name the approver for breaking changes. I kept it proportional to risk rather than applying the same ceremony to every internal change.
I reviewed the checklist with engineering leads after the release and incorporated their feedback, including removing a duplicate review that did not catch additional issues.
Result
In this example, the teams resolved the launch blocker before customer exposure, and the added test caught two similar compatibility issues in later integrations. The change also clarified who could approve contract changes, reducing repeated alignment work. I learned that finding an execution gap is only valuable if I address the immediate risk and create a lightweight mechanism that prevents recurrence.
What interviewers listen for
How you noticed and validated the gap.
Whether you acted across organizational boundaries without overstepping ownership.
A concrete fix, lasting process improvement, and measurable impact.
TechnicalMediumDuolingoTechnical Program ManagerPanel interview
20. Tell me about a time you had to establish a new process or improve an existing one.
Model answer
Situation
At a previous organization, several engineering teams were delivering a customer-facing platform migration, but each team tracked readiness differently. Dependencies and launch criteria were scattered across spreadsheets and meeting notes, so late integration issues were common. As the program manager, I saw that the process—not just individual execution—was creating schedule risk.
Task
I was responsible for creating a lightweight operating process that made cross-team readiness visible without adding so much ceremony that teams slowed down. We needed earlier risk detection and a launch decision based on shared evidence.
Action
I diagnosed the failure points by reviewing recent delivery misses and interviewing engineering, product, and operations leads. The recurring issues were unclear owners, dependencies discovered too late, and inconsistent definitions of “ready.”
I designed a shared milestone and dependency tracker with a directly responsible owner, due date, upstream/downstream link, confidence, and evidence for each milestone. I kept team-level task management in existing tools rather than duplicating it.
I introduced a weekly exception-based review. Teams reported changes in confidence, blocked dependencies, and decisions needed; green items did not require status narration. This kept the meeting focused on actions rather than presentations.
I established explicit launch gates for integration testing, operational readiness, and customer support. I partnered with engineering and operations leads to define measurable evidence for each gate and named the decision owner.
I piloted the process with two teams, incorporated feedback, then expanded it. For example, when an API contract dependency slipped, the tracker exposed its impact on two downstream teams early enough to agree on a temporary compatibility path.
Result
Over the next two quarters, teams surfaced critical blockers earlier, and the program had fewer late launch surprises; in this example, the target outcome was reducing late dependency escalations by roughly one-third. The shared gates also made launch decisions faster because leaders could see evidence and residual risk in one place. I learned to standardize the minimum information needed for decisions, while letting teams keep their preferred execution tools.
Process:
flowchart LR
A[Review misses] --> B[Find process gaps]
B --> C[Define owners and gates]
C --> D[Pilot with teams]
D --> E[Review exceptions]
E --> F[Measure and refine]
Diagram
What interviewers listen for: a real problem diagnosis, your personal ownership, stakeholder adoption, sensible process overhead, and measurable improvement. Replace the illustrative outcome with a result you can substantiate.
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.