Director of Technical Program Management interview questions & answers
20 Director of Technical Program Management interview questions with complete model answers, spanning Behavioral, Technical, System design. The bank holds 77 Director of Technical Program Management questions in total, tagged by round and difficulty.
77 Director of Technical Program Management questions in the bank
3 categories: Behavioral, Technical, System design
Asked at Across companies, Harvey AI, Capital One, Samsung, MongoDB and more
BehavioralEasyDirector of Technical Program ManagementHR interview
1. Did you read the Netflix Culture Memo, particularly its section on honest, productive feedback?
Model answer
Situation — Yes, I’m familiar with Netflix’s Culture Memo, including its guidance on honest, productive feedback. I see that guidance as a useful operating principle, not a license to be blunt without judgment: feedback should help the person and the organization make better decisions.
Task — In my leadership roles, I’ve had to create conditions where people can surface problems early, disagree directly, and still maintain trust—especially when delivery pressure makes it tempting to soften or delay difficult messages.
Action
I aim to give feedback promptly, privately when it is individual feedback, and with a specific example. I describe the behavior and its impact, then invite the other person’s perspective rather than assuming intent.
For example, on a multi-team program, a senior lead repeatedly presented dates as committed before engineering had validated the dependencies. That created avoidable downstream re-planning. I met with the lead and said, in substance, “When the date is shared before dependency owners confirm it, the other teams plan against a commitment we may not be able to meet. What is driving the need to publish it early?”
I learned the lead was under pressure to provide certainty to executives. We agreed to distinguish a forecast from a committed date, name the assumptions, and set a decision point for confirming the plan. I also modeled this in executive reviews so the change did not feel like an individual correction alone.
I asked for feedback on my own role, including whether my program process was making it harder to raise risks. I adjusted the review format to make unresolved assumptions and dissent visible before dates were escalated.
I follow up to see whether the behavior and outcome change. If the same issue persists after clarity, support, and feedback, I address the accountability question directly.
Result — The teams had fewer date reversals and leaders received more useful forecasts, including uncertainty and options rather than false precision. My takeaway is that honesty is most productive when it is timely, concrete, two-way, and tied to a path forward.
What interviewers listen for
Familiarity with candor, context, and accountability—not just bluntness.
A specific example and observable impact.
Openness to receiving feedback and changing the system.
BehavioralMediumDirector of Technical Program Management
2. Tell me about a time you were asked to do something you felt was wrong.
The full question
Tell me about a time you were asked to do something you felt was wrong. What did you do?
Model answer
Situation
In one launch, a senior leader asked the team to skip a required security review so we could meet a public release date. The feature handled sensitive customer data, and the review was a control intended to catch issues that testing alone might miss. I was accountable for coordinating the launch, but I did not own the security approval.
Task
I needed to protect customers and the company without turning the disagreement into a personal confrontation or abandoning the business goal. I also needed to make the decision and its consequences visible to the right decision-makers.
Action
I first asked what was driving the request: the date was tied to a partner commitment, and the team believed the review would delay launch by two weeks. That clarified the underlying need rather than treating the request as simply unreasonable.
I spoke with the security lead to understand the actual minimum review requirements, the risks of proceeding, and whether any work could run in parallel. I did not represent myself as the person authorized to waive the control.
I brought the leader a short options memo: keep the date and reduce scope to the portion already reviewed; move the date and launch the full experience; or run a limited, explicitly approved pilot after the required checks. I documented customer impact, residual risk, owners, and the decision needed.
I recommended the limited pilot only if Security approved the controls and we had monitoring, a rollback trigger, and a cap on exposure. When the review identified a data-retention issue, I made that finding and its remediation a launch gate rather than arguing that schedule pressure justified accepting it.
I kept product, engineering, security, and the partner team aligned on the revised plan and communicated the change early, with a named owner and daily status until the issue was resolved.
Result
We launched the reviewed scope on the original date and delayed the affected portion until the retention issue was fixed and verified. We avoided an unreviewed exposure while preserving the partner commitment, and we later added security review timing to launch planning so it was not treated as a last-minute surprise. I learned to challenge the request respectfully, distinguish the underlying goal from the proposed shortcut, and make risk ownership explicit.
What interviewers listen for
Principled judgment without unnecessary escalation or blame.
Clear respect for accountable control owners.
Practical alternatives that balance customer safety and business outcomes.
BehavioralMediumDirector of Technical Program Management
3. Tell me about a difficult situation you faced with a stakeholder.
Model answer
Situation
I led a cross-functional program to replace a legacy workflow used by several business units. A senior stakeholder in one unit wanted a broad set of custom features before launch, while engineering was concerned those requests would expand the scope and put the committed date at risk. The stakeholder had a legitimate concern: their team depended on a workflow that the first release did not fully reproduce.
Task
I needed to resolve the disagreement in a way that protected the business-critical use case, kept the program deliverable, and preserved a productive relationship. As the program lead, my job was to create a decision process—not to decide feature priority by seniority.
Action
I met with the stakeholder one-on-one to understand the operational impact behind each request. I asked which user journey would fail, how often it occurred, and what workaround the team could tolerate.
I worked with product and engineering to separate launch blockers from preferences and to estimate the cost, dependencies, and risk of each item. We found that one request was necessary for a regulated workflow; two others were usability improvements with workable interim options.
I brought the group a fact-based trade-off: include the regulated path in the launch, defer the lower-impact customizations, and commit to a dated follow-up decision after usage data. I made the impact on timeline and other teams visible rather than presenting scope as free.
When the stakeholder still disagreed, I documented the options, recommendation, and residual risk, then asked the accountable product executive to make the priority decision. I ensured the stakeholder’s concern was represented accurately and did not frame escalation as a win-or-lose outcome.
After the decision, I confirmed owners, acceptance criteria, and a review date with the stakeholder, and I shared progress regularly so they could see that deferred work had not disappeared.
Result
We delivered the critical workflow on the planned date, and the stakeholder’s team adopted it without relying on an unsafe workaround. We deferred the other requests transparently and used post-launch evidence to prioritize follow-up work. The relationship improved because the stakeholder had a clear voice in the decision and knew how concerns would be handled.
What interviewers listen for
Empathy and curiosity before defending a plan.
Objective prioritization, explicit trade-offs, and appropriate escalation.
Accountability for the relationship after the decision is made.
BehavioralMediumDirector of Technical Program Management
4. How do you foster a culture of accountability in a remote or distributed team?
Model answer
Situation — In a remote organization spanning several time zones, I led a portfolio team of roughly 40 engineers and partners across three regions. Work was slipping between handoffs: status updates were inconsistent, decisions were hard to find, and teams sometimes discovered missed commitments only at program reviews.
Task — I needed to improve accountability without creating a culture of surveillance or adding meetings. The goal was reliable ownership and early escalation while preserving autonomy across teams.
Action
I started by making expectations explicit. For each major outcome, we named one directly responsible owner, agreed on a measurable result and date, and recorded dependencies and decision-makers in a shared program brief.
I established a lightweight operating cadence: asynchronous weekly updates covering progress, next milestone, confidence, and asks; a short cross-team review for unresolved risks; and written decisions in a searchable place. I made the format consistent so updates were easy to scan across time zones.
I distinguished accountability from blame. When a commitment was at risk, I asked what had changed, what options remained, and what help was needed—not who was at fault. I modeled this by surfacing my own program risks early and documenting corrective actions.
I set an escalation agreement: owners should flag a forecasted miss as soon as confidence falls, with impact, options, and a recommendation. I coached managers to resolve local issues directly while bringing cross-org trade-offs to the right decision-maker.
I reviewed the system after a few cycles. Where updates were becoming status theater, I removed fields that did not support decisions and used milestone evidence rather than activity reports.
Result — Over the next two quarters, the portfolio improved on-time milestone delivery from 72% to 89%, and the median time to surface a material dependency risk fell from about two weeks to three days. Teams reported clearer ownership without an increase in standing meetings. I learned that remote accountability comes less from monitoring people than from making commitments, decision paths, and help requests visible and safe to raise early.
What interviewers listen for
Clear ownership and measurable commitments, not activity tracking.
A psychologically safe approach to missed commitments and escalation.
Operating mechanisms that work across time zones and reduce coordination overhead.
Evidence of organization-wide impact and willingness to adjust the process.
BehavioralMediumDirector of Technical Program Management
5. Have you encountered a team that did not want to participate with the PMO, and how did you handle it?
Model answer
Situation — In one example, a platform engineering team was reluctant to participate in the PMO’s planning and status process. They saw it as extra reporting that would take time from delivery, and they were concerned that their technical work would be reduced to misleading red/amber/green indicators. Their work was on the critical path for several product launches, so the disconnect created real risks for both teams.
Task — I needed to establish enough shared visibility to manage dependencies and surface risks early, without imposing a process that the engineering team considered bureaucratic or that disrupted delivery.
Action
I started by listening to the team lead and engineers to understand what specifically felt wasteful. I learned they were duplicating updates in multiple tools and being asked for commitments before technical discovery was complete.
I made the purpose explicit: the goal was to resolve cross-team dependencies and escalate decisions, not to inspect individual productivity. I also acknowledged that our process had contributed to the frustration.
I partnered with the team lead to pilot a lighter approach for one release: one source of truth, a short weekly dependency-and-risk review, and confidence ranges for work that was still being explored.
I worked with product and dependent teams to distinguish decisions they needed immediately from status information that could wait. For example, we escalated an API contract decision rather than asking the engineers to provide false precision on the entire delivery date.
I reviewed the pilot after a few weeks, removed fields that were not helping decisions, and shared follow-ups and owners so participation visibly led to action.
Result — The team joined the planning cadence, and stakeholders gained earlier visibility into dependencies without requiring duplicate reporting. In a real interview, I would quantify the outcome with verified measures—for example, changes in time to resolve blockers, missed milestones, or reporting effort. The lesson I took away is that adoption comes from demonstrating value and adapting the operating model, not from enforcing attendance.
Director-level signals: Show the organizational stakes, acknowledge the PMO’s role in the friction, make a deliberate process trade-off, and measure both delivery outcomes and process cost.
What interviewers listen for
You build trust rather than escalating resistance as a compliance issue.
You preserve useful governance while tailoring it to the team’s needs.
You can show evidence that the process improved decisions or delivery.
BehavioralMediumDirector of Technical Program Management
6. How do you ensure accountability across teams that do not report to you directly?
Model answer
Situation
I led a cross-organizational program spanning engineering, security, data, and operations, with contributors reporting into different leaders. Early on, teams agreed to milestones, but dependencies slipped without early notice because no one had a complete view of ownership or the impact of a missed commitment. I could not solve that by directing people; I had to make accountability work through the operating model.
Task
I owned predictable delivery and timely escalation while preserving functional leaders’ authority over staffing and technical decisions.
Action
I converted the program plan into a small set of outcome-based milestones, each with one directly responsible owner, clear acceptance criteria, dependencies, and a target date. Shared ownership was not used as a substitute for a named decision-maker.
I aligned the plan with each functional lead and asked them to validate capacity and sequencing. Where the plan exceeded available capacity, I surfaced the choice—scope, date, or staffing—instead of silently assuming teams would absorb it.
I set a lightweight weekly review focused on milestone confidence, upcoming decisions, and risks. Owners could report green, yellow, or red, but a status needed evidence and a recovery action to be useful.
When a dependency went red, I brought the affected owners together quickly, clarified the downstream impact, and agreed on a recovery plan or escalation. For example, when a security review threatened a release gate, we agreed on an earlier design review and a fixed response window rather than asking either team to skip controls.
I kept a decision and action log visible to all partners, followed up directly on missed commitments, and escalated unresolved cross-org trade-offs with options and a recommendation—not blame.
Result
The program had earlier visibility into dependency risk, fewer last-minute surprises, and clearer decisions about what could realistically ship. Functional leaders retained control of their teams, while owners understood what they had committed to and how their work affected the whole outcome. I learned that accountability without direct authority comes from clarity, transparent follow-through, and fair escalation—not from adding more status meetings.
Director-level signals
Explain how you establish ownership, connect commitments to capacity, and make escalation a decision tool rather than punishment.
What interviewers listen for
Clear owners and measurable acceptance criteria.
Cross-team follow-through without overstepping authority.
Early, evidence-based escalation and organizational learning.
BehavioralMediumDirector of Technical Program ManagementBusiness interview
7. Can you share examples of how you managed C-level stakeholders and lessons you learned from those experiences?
Model answer
Situation — I led a multi-quarter platform modernization involving several product and engineering organizations. The work required investment from multiple executives, and the leaders had different priorities: one was focused on customer-facing delivery, another on reducing operational risk, and a third on controlling near-term spend. Without alignment, teams were likely to optimize locally and miss the program’s intended outcome.
Task — I owned the operating cadence and executive alignment: make the choices understandable, surface risks early, and secure timely decisions without turning every delivery issue into an executive escalation.
Action
I started by meeting each executive to understand their goals, constraints, and preferred level of detail. I translated those perspectives into a common set of outcomes, including customer impact, reliability, delivery timing, and cost.
I created a concise program brief that connected the investment to measurable business results. It separated facts, assumptions, risks, and decisions needed, so the leadership conversation focused on choices rather than status narration.
I established a regular review cadence with a one-page dashboard and a decision log. I kept routine execution detail with the teams and reserved executive time for cross-org dependencies, risk acceptance, and trade-offs that required their authority.
When a dependency threatened the launch date, I presented options with consequences: reduce scope, add capacity at a cost, or move the date. I made a recommendation, explained its assumptions, and asked the accountable executive to decide by a specific date.
I closed the loop after each decision by communicating it to affected teams, confirming owners, and checking whether the expected outcome materialized. I also raised bad news early, with a mitigation plan, rather than waiting for a polished status report.
Result — The executives aligned on a phased investment and a smaller initial scope, allowing teams to deliver the critical capability while controlling risk and cost. The program met its agreed launch milestone, and the shared dashboard reduced late surprises and repeated decision cycles. I learned that executive management is less about presenting more information and more about making the few consequential choices clear, timely, and actionable.
What interviewers listen for
Ability to tailor communication without changing the underlying facts.
Clear recommendations, options, and decision rights.
Early escalation with mitigation, not surprise or blame.
Evidence of alignment translating into execution and business outcomes.
System designMediumDirector of Technical Program Management
8. Design a social media app.
Model answer
1. Requirements & scale
Scope: I’ll design a consumer social app centered on profiles, following, posts with photos or short videos, and a personalized home feed. I’ll assume public posts are visible to followers, with privacy controls, blocking, and reporting. Messaging and live video are out of scope.
Functional: Create and view posts; follow and unfollow accounts; load a ranked feed; like and comment; view profiles; upload media; delete content; enforce privacy and moderation decisions.
Non-functional: Feed reads should have p95 latency below 300 ms before media transfer; post creation should acknowledge within 500 ms; high availability; durable posts; authorization correctness; and graceful handling of viral content.
Illustrative scale: 100M monthly active users, 20M daily active users, and 15 feed loads per daily user gives 300M feed requests/day, or about 3,500 average QPS. At a 10× peak, plan for roughly 35,000 QPS. At 3M posts/day and an average 1 MB of uploaded media per post, raw media ingest is about 3 TB/day, or roughly 1.1 PB/year before replication and derivatives. CDN delivery is essential; serving media directly from application servers would be too costly and fragile.
2. High-level architecture
flowchart TD
subgraph Client[Client]
App[Mobile and Web App]
end
subgraph Edge[Edge CDN]
CDN[CDN and WAF]
end
subgraph LB[Load Balancer]
Gateway[API Gateway]
end
subgraph Services[API and Services]
Feed[Feed Service]
Post[Post Service]
Graph[Social Graph Service]
Media[Media Service]
Safety[Safety Service]
end
subgraph Cache[Cache]
Redis[Redis Feed and Profile Cache]
end
subgraph Stores[Datastores]
SQL[(SQL User and Post Metadata)]
GraphDB[(Sharded Follow Store)]
FeedDB[(Feed Timeline Store)]
Object[(Object Storage)]
Search[(Search Index)]
end
subgraph Queue[Message Queue]
Events[Durable Event Stream]
end
subgraph Workers[Workers]
Fanout[Feed Fanout Workers]
Pipeline[Media and Safety Workers]
end
App -->|API requests| CDN
CDN -->|Dynamic requests| Gateway
CDN -->|Cached media| Object
Gateway -->|Feed reads| Feed
Gateway -->|Post and profile actions| Post
Gateway -->|Follow actions| Graph
Gateway -->|Upload authorization| Media
Gateway -->|Reports and blocks| Safety
Feed -->|Timeline lookup| Redis
Feed -->|Timeline fallback| FeedDB
Feed -->|Hydrate post IDs| SQL
Post -->|Write metadata| SQL
Post -->|Publish post event| Events
Graph -->|Follow edges| GraphDB
Media -->|Signed upload URL| Object
Events -->|Post and follow events| Fanout
Events -->|Media processing events| Pipeline
Fanout -->|Read followers| GraphDB
Fanout -->|Write timelines| FeedDB
Pipeline -->|Scan and transcode| Object
Pipeline -->|Index safe content| Search
Safety -->|Moderation state| SQL
Diagram
A typical feed response returns post metadata and CDN media URLs, not media bytes through the API. The diagram separates metadata processing from media delivery and asynchronous fanout.
3. API design
GET /v1/feed?cursor=...&limit=20 — return ranked items and an opaque pagination cursor.
POST /v1/posts — create a post referencing uploaded media; accept an idempotency key.
POST /v1/media/upload-url — issue a short-lived signed upload URL.
PUT /v1/users/{id}/follow and DELETE /v1/users/{id}/follow — follow changes.
POST /v1/posts/{id}/likes and DELETE /v1/posts/{id}/likes — idempotent like/unlike.
DELETE /v1/posts/{id} — delete a post and trigger asynchronous cleanup.
4. Data model & storage
SQL: User and post metadata, privacy state, moderation status, and transactional ownership checks. Partition posts by author_id with time-based indexes; use replicas for read scale.
Graph store: Adjacency lists for followers and followees, sharded by user ID. This supports efficient follower lookup and graph traversal.
Timeline store: Per-user ordered post IDs with ranking features and timestamps, partitioned by user_id; retain a bounded recent window.
Object storage: Original and transcoded media, addressed by immutable object key. Keep media out of relational rows.
Redis: Hot feed pages, profile summaries, and counters with bounded TTLs. Cache is an optimization, never the system of record.
Search index: Discoverable public content only; apply privacy and deletion filters before returning results.
5. Deep dive
I’d use hybrid feed fanout. On a normal post, the post service commits metadata and emits an event through an outbox so a database commit cannot silently lose the event. Workers find the author’s followers and append the post ID to their timeline partitions. A feed read fetches a page of IDs, hydrates metadata in batches, filters blocked, deleted, or newly private content, ranks candidates, and returns a cursor.
Pure fanout-on-write makes reads fast but makes a post by a celebrity with millions of followers expensive. Pure fanout-on-read avoids that write amplification but makes every feed request merge and rank many followee timelines. So I’d fan out to followers for ordinary accounts and keep high-follower accounts out of the precomputed timeline; the feed service merges their recent posts at read time. The threshold is configurable and based on measured write cost and read latency, not hard-coded product policy.
sequenceDiagram
participant C as Client
participant P as Post Service
participant D as SQL Store
participant Q as Event Stream
participant W as Fanout Worker
participant G as Graph Store
participant T as Timeline Store
participant F as Feed Service
C->>P: Create post with idempotency key
P->>D: Commit post and outbox event
P-->>C: Return post ID
D->>Q: Publish post-created event
Q->>W: Deliver event at least once
W->>G: Read follower pages
W->>T: Append post ID to timelines
C->>F: Request feed with curso
Diagram
System designMediumDirector of Technical Program Management
9. What data models and APIs would you design to support a real-time food delivery service?
Model answer
1. Requirements & scale
Functional requirements
Customers browse restaurants and menus, place and pay for orders, and track delivery in real time.
Restaurants accept or reject orders and provide preparation status; couriers receive offers and update location and delivery status.
Support cancellation, refunds, notifications, and operational intervention.
Non-functional requirements
Order placement must be durable and idempotent; status updates should appear within seconds.
Target 99.95% availability for ordering, graceful degradation for discovery, and strong privacy controls.
Back-of-the-envelope estimates
Assume 10 million daily active customers and 2 orders per customer per week: about 2.9 million orders/day, or 34 average orders/second. At a 10x peak, plan for 350 order writes/second.
If 1 million active deliveries publish a location every 5 seconds, that is 200,000 location updates/second. At 100 bytes/update, raw ingress is about 20 MB/second before protocol overhead.
At 2 KB per order, 2.9 million orders/day produce about 6 GB/day, or 2.2 TB/year before indexes and replicas. Retain operational data according to legal and business requirements.
2. High-level architecture
flowchart TD
subgraph Client["Client"]
C["Customer app"]
R["Restaurant app"]
D["Courier app"]
end
subgraph Edge["Edge / CDN"]
CDN["CDN and WAF"]
end
subgraph LB["Load Balancer"]
LB1["Regional API gateway"]
end
subgraph Services["API / Services"]
O["Order service"]
M["Menu and discovery"]
P["Payment service"]
Dispatch["Dispatch and ETA"]
Track["Tracking gateway"]
end
subgraph Cache["Cache"]
Redis["Redis menu and session cache"]
Geo["Geospatial courier index"]
end
subgraph DB["Datastores"]
SQL["Order SQL database"]
Catalog["Catalog and restaurant database"]
Loc["Location time-series store"]
end
subgraph Queue["Message Queue"]
Events["Order and location event streams"]
end
subgraph Workers["Workers"]
Notify["Notification workers"]
Analytics["Analytics and settlement"]
end
C -->|"browse and order"| CDN
R -->|"menu and preparation updates"| CDN
D -->|"location and delivery updates"| CDN
CDN -->|"HTTPS and WebSocket"| LB1
LB1 --> O
LB1 --> M
LB1 --> Track
O -->|"authorize payment"| P
O -->|"transaction"| SQL
M -->|"catalog read"| Catalog
M -->|"hot menu read"| Redis
Track -->|"latest courier position"| Geo
Track -->|"location history"| Loc
O -->|"order events"| Events
Track -->|"location events"| Events
Events --> Notify
Events --> Dispatch
Events --> Analytics
Dispatch -->|"nearby courier lookup"| Geo
Diagram
3. API design
GET /v1/restaurants?lat=&lon=&radius=&cursor= — search nearby restaurants with a stable cursor.
GET /v1/restaurants/{id}/menu — return menu and availability, with an ETag for caching.
POST /v1/orders — create an order using an Idempotency-Key; validate prices and availability server-side.
GET /v1/orders/{id} — retrieve the authoritative order state and estimated delivery time.
POST /v1/orders/{id}/accept and /reject — restaurant decision, conditional on the current state.
POST /v1/couriers/{id}/locations — ingest timestamped, sequenced location updates.
GET /v1/orders/{id}/tracking — initial snapshot; a WebSocket or server-sent-event stream carries subsequent updates.
4. Data model & storage
Use SQL for transactional order state, payments references, and state transitions. Core tables: Order(order_id, customer_id, restaurant_id, status, subtotal, currency, created_at, version), OrderItem(order_id, item_id, name_snapshot, quantity, unit_price), and Delivery(order_id, courier_id, status, eta, updated_at). Snapshot item names and prices so later menu edits do not rewrite history. Partition large order tables by time and region; shard by order_id if a single database outgrows capacity.
Keep restaurant/menu data in a relational catalog initially, with Redis caching popular menus. Use a geospatial index for current courier positions and a time-series or object store for retained location history. Store payment credentials with a compliant payment provider; keep only provider tokens and transaction references. Stream domain events to a durable queue for notifications, dispatch, and analytics.
5. Deep dive
Treat ordering as a state machine, not a collection of loosely coordinated API calls. A typical path is CREATED → PAYMENT_AUTHORIZED → RESTAURANT_ACCEPTED → PICKED_UP → DELIVERED; rejection or cancellation leads to explicit terminal or refund states. Enforce transitions with optimistic version checks and an outbox record committed in the same SQL transaction as the order. A publisher retries outbox delivery, so a database commit cannot silently lose its event. Consumers deduplicate by event ID.
sequenceDiagram
participant App as Customer app
participant API as Order API
participant DB as SQL and outbox
participant Pay as Payment provider
participant Bus as Event stream
participant Rest as Restaurant app
App->>API: POST order with idempotency key
API->>DB: Persist order as PENDING
API->>Pay: Authorize payment
Pay-->>API: Authorization result
API->>DB: Commit state and outbox event
DB-->>Bus: Publish OrderPlaced
Bus-->>Rest: Deliver order offer
Rest->>API: Accept or reject
API->>DB: Validate and persist transition
API-->>App: Updated order state
Diagram
Payment authorization is an external side effect, so use a saga: on restaurant rejection, void the authorization; if capture fails after delivery, raise a reconciliation task rather than pretending the order succeeded. Tracking should tolerate delayed or out-of-order GPS updates by comparing sequence numbers and timestamps. Push frequent locations to the live index, but downsample history for retention and analytics.
6. Scale, bottlenecks & trade-offs
Partition traff
System designMediumDirector of Technical Program ManagementTechnical interview
10. 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 designHardDirector of Technical Program Management
11. How would you build a scalable product-recommendation system that handles sparse data and the cold-start problem?
Model answer
1. Requirements & scale
Functional requirements
Recommend relevant products for home, product detail, search, and email surfaces; return ranked items with explanations or reason codes where useful.
Learn from impressions, clicks, carts, purchases, hides, and returns; support new users and new products with sparse interaction history.
Apply inventory, eligibility, diversity, and business constraints before showing recommendations.
Non-functional requirements
Target p99 under 100 ms for online ranking, resilient fallback when personalization is unavailable, and measurable incremental business impact.
Enforce privacy and consent rules; prevent leakage from future events into training data.
Back-of-the-envelope estimates
Assume 50 million daily active shoppers and 20 recommendation requests/day: 1 billion requests/day, about 11,600 average requests/second. At 5x peaks, plan for roughly 58,000 requests/second.
With 100 million products and 64-dimensional float embeddings, one embedding copy is 100M × 64 × 4 bytes ≈ 25.6 GB; replicas, indexes, and metadata multiply this.
At 10 billion impressions/day and 200 bytes/event, raw event data is about 2 TB/day before compression and indexes.
2. High-level architecture
flowchart TD
subgraph Client["Client"]
Shopper["Web and app"]
Merchant["Merchant catalog feeds"]
end
subgraph Edge["Edge / CDN"]
EdgeAPI["API edge and WAF"]
end
subgraph LB["Load Balancer"]
Gateway["Regional gateway"]
end
subgraph Services["API / Services"]
RecoAPI["Recommendation API"]
Candidate["Candidate generation"]
Rank["Ranking and constraints"]
CatalogSvc["Catalog and eligibility"]
EventSvc["Interaction ingestion"]
end
subgraph Cache["Cache"]
UserCache["User profile cache"]
ItemCache["Item embedding cache"]
FeedCache["Precomputed feed cache"]
end
subgraph DB["Datastores"]
Catalog["Product catalog SQL"]
Vector["Vector and ANN index"]
Features["Online and offline feature store"]
Lake["Impression event lake"]
end
subgraph Queue["Message Queue"]
Stream["Interaction event stream"]
end
subgraph Workers["Workers"]
Featurize["Feature and embedding jobs"]
Train["Distributed model training"]
Evaluate["Experiment and evaluation jobs"]
end
Shopper -->|"context and placement"| EdgeAPI
EdgeAPI --> Gateway
Gateway --> RecoAPI
Gateway --> EventSvc
RecoAPI --> Candidate
Candidate -->|"similar items"| Vector
Candidate -->|"user signals"| UserCache
Candidate --> FeedCache
Candidate --> Rank
Rank --> ItemCache
Rank --> CatalogSvc
CatalogSvc --> Catalog
EventSvc -->|"impressions and outcomes"| Stream
Merchant -->|"product changes"| Catalog
Stream --> Lake
Stream --> Featurize
Featurize --> Features
Featurize --> Vector
Lake --> Train
Features --> Train
Train --> Evaluate
Evaluate -->|"approved model"| Rank
Diagram
3. API design
GET /v1/recommendations?user_id=&placement=&context=&limit= — return ranked, eligible products and reason codes. Use an opaque request ID for attribution.
POST /v1/events/impressions — log displayed items, positions, model version, and experiment assignment before outcomes arrive.
POST /v1/events/interactions — record click, add-to-cart, purchase, hide, or return with event ID and timestamp.
GET /v1/products/{id}/similar — retrieve item-to-item recommendations for anonymous or new users.
POST /v1/catalog/products:batchUpsert — ingest merchant changes with validation and idempotency.
GET /v1/experiments/{id} — expose assignment and status for authorized analysis clients.
4. Data model & storage
Keep a canonical Product(product_id, category, brand, price, availability, attributes, content_embedding_version) in a transactional catalog. Store events as Interaction(event_id, user_or_session_id, product_id, event_type, timestamp, placement, position, model_version, experiment_id) in an append-only stream and lake. Preserve impression logs: without them, training on clicks alone creates exposure bias.
Use a feature store for user and item aggregates, with separate offline and online views. User features include category affinity, recent views, and purchase recency; item features include category, price band, text/image embedding, popularity, and inventory. Key online values by user or session ID; key item values by product ID. Use an approximate-nearest-neighbor index for candidate retrieval and a cache for popular or precomputed lists. Shard event data by time and a hashed user key, and retain raw events only as long as policy and use cases require.
5. Deep dive
Address sparsity with a candidate-and-rank architecture rather than asking one model to score every product. Generate candidates from complementary sources: co-view/co-purchase item-to-item graphs, collaborative embeddings for users with history, semantic product embeddings, category/popularity trends, and editorial or campaign lists. Deduplicate candidates, enforce inventory and policy constraints, then rank a few hundred with features such as user affinity, price match, freshness, availability, and predicted conversion. Apply diversity constraints so the top results do not collapse into one brand or category.
Cold start needs explicit paths. For a new user, use session context, selected interests, referrer, coarse locale, and contextual/popular recommendations; avoid pretending the model has a user embedding. For a new product, use its title, category, attributes, images, price, and merchant quality to create content embeddings and category candidates before interaction history accumulates. Blend exploration into eligible inventory, with caps to protect user experience. Train with temporal splits, point-in-time features, and impression-aware negatives; clicks are biased by previous ranking, position, and exposure.
sequenceDiagram
participant App as Shopper app
Diagram
System designHardDirector of Technical Program Management
12. How would you build a machine-learning pipeline that scales across distributed systems?
Model answer
1. Requirements & scale
Functional requirements
Ingest batch and streaming data, validate and transform it, train reproducible models, evaluate them, register artifacts, and deploy to online or batch inference.
Support feature reuse, lineage, access control, retries, backfills, and rollback across teams and cloud regions.
Non-functional requirements
Jobs must be fault-tolerant and horizontally scalable; data and model versions must be reproducible.
Online inference should meet a use-case-specific latency target—for example, p99 under 100 ms—while batch freshness may be minutes or hours.
Protect sensitive data and provide auditability, cost controls, and clear ownership.
Back-of-the-envelope estimates
Assume 100 teams each publish 10 GB/day of training data: 1 TB/day, or about 365 TB/year before replication and retention policies.
If 50 online models serve 2,000 requests/second each at peak, the platform must support 100,000 inference requests/second. At 2 KB per response, payload egress is about 200 MB/second.
A 100 TB dataset scanned once per day requires roughly 1.2 GB/second sustained aggregate read throughput; parallelism and locality matter more than a single large worker.
2. High-level architecture
flowchart TD
subgraph Client["Client"]
Prod["Product and data clients"]
SDK["Training SDK and CLI"]
end
subgraph Edge["Edge / CDN"]
Auth["Identity and policy"]
end
subgraph LB["Load Balancer"]
GW["Platform API gateway"]
end
subgraph Services["API / Services"]
Ingest["Ingestion and validation"]
Orchestrator["Workflow orchestrator"]
Registry["Feature and model registry"]
Serve["Online model serving"]
Monitor["Monitoring and drift service"]
end
subgraph Cache["Cache"]
FeatureCache["Online feature cache"]
ModelCache["Model artifact cache"]
end
subgraph DB["Datastores"]
Lake["Versioned data lake"]
Meta["Metadata and lineage SQL"]
FeatureStore["Offline feature store"]
end
subgraph Queue["Message Queue"]
Stream["Event and job queue"]
end
subgraph Workers["Workers"]
Prep["Distributed transform workers"]
Train["Distributed training workers"]
Eval["Evaluation and promotion workers"]
Batch["Batch inference workers"]
end
Prod -->|"events and datasets"| Auth
SDK -->|"submit jobs and models"| Auth
Auth --> GW
GW --> Ingest
GW --> Orchestrator
GW --> Registry
GW --> Serve
Ingest -->|"validated records"| Stream
Stream -->|"partitioned jobs"| Prep
Prep -->|"versioned outputs"| Lake
Prep -->|"feature values"| FeatureStore
Orchestrator -->|"workflow metadata"| Meta
Orchestrator -->|"schedule"| Stream
Stream --> Train
Train -->|"candidate artifacts"| Lake
Train -->|"register candidate"| Registry
Registry --> Eval
Eval -->|"promoted version"| ModelCache
Serve --> FeatureCache
Serve --> ModelCache
FeatureStore -->|"training joins"| Train
Batch -->|"predictions"| Lake
Serve -->|"latency and outcomes"| Monitor
Monitor -->|"drift alerts"| Orchestrator
Diagram
3. API design
POST /v1/datasets — register a dataset location, schema, owner, and access policy.
POST /v1/pipelines/runs — start a versioned pipeline run with code, parameters, data references, and resource limits.
GET /v1/runs/{run_id} — inspect stage status, logs, metrics, and lineage.
POST /v1/features and GET /v1/features/{entity}/{id} — publish feature definitions and retrieve online values.
POST /v1/models/{name}/versions — register an immutable artifact and its evaluation report.
POST /v1/models/{name}/deployments — deploy a version with traffic percentage and rollback target.
POST /v1/predict/{model} — perform authenticated online inference with a request ID and optional feature timestamp.
4. Data model & storage
Store raw and transformed data in an object-store lake with immutable snapshots, schema metadata, and partitioning by event date and relevant region or tenant. Use a catalog for schema evolution and a SQL metadata store for DatasetVersion, PipelineRun, FeatureDefinition, ModelVersion, Evaluation, and Deployment. Each model version should point to exact code, container image, parameters, training-data snapshot, feature definitions, and metrics.
Use an offline feature store optimized for large training joins, and an online key-value store keyed by (entity_type, entity_id, feature_version) for low-latency serving. Cache model artifacts locally on serving nodes. Separate metadata and payload storage so large artifacts do not burden transactional queries. Enforce tenant-aware authorization and retention at the dataset and feature level.
5. Deep dive
The essential correctness issue is preventing training-serving skew and making runs reproducible. Define feature transformations once, test them on historical and live data, and record feature definitions and timestamps in each training snapshot. For time-dependent predictions, perform point-in-time joins: a training example may use only feature values that were available at prediction time, not values written later. Validate schema, null rates, ranges, freshness, and join coverage before allocating expensive training resources.
A workflow orchestrator models each pipeline as an idempotent DAG. Persist stage inputs and outputs; retry transient failures with bounded exponential backoff; checkpoint large jobs; and isolate retries to failed partitions. Workers read data close to storage and write immutable outputs. Use queue-based scheduling with quotas, priorities, and admission control so one team cannot exhaust the cluster. Evaluation compares a candidate against the current model on offline quality, latency, fairness, and safety thresholds before it can be promoted.
sequenceDiagram
participant User as ML engineer
participant API as Platform API
participant Or as Orchestrator
participant Lake as Versioned data lake
Diagram
System designHardDirector of Technical Program Management
13. How would you architect a highly scalable image-sharing platform similar to Instagram?
Model answer
1. Requirements & scale
Functional requirements
Users can create accounts, upload photos with captions, follow accounts, view a personalized feed, like and comment, and receive notifications.
Users can set account visibility; private content is visible only to approved followers. Users can delete content and report abuse.
Feeds are cursor-paginated and rank recent or relevant posts. The system supports image resizing, moderation, and search by account or hashtag.
Non-functional requirements
Highly available feed and image delivery; graceful degradation when ranking or notifications are unavailable.
Low latency: feed API p95 below 300 ms excluding image transfer; CDN image-cache hits usually below 100 ms to nearby users.
Durable media, secure authorization, privacy enforcement, abuse prevention, and eventual consistency for likes and feed propagation.
Independent scaling of image bytes, feed reads, uploads, and background processing.
Back-of-the-envelope estimates
Assume 100 million daily active users, 10 feed opens per user per day, and 150 million photo posts per day. That yields 1 billion feed requests/day, about 11.6k average QPS; at a 5x peak, roughly 58k QPS. If each feed returns 20 items, that is about 232k item candidates/second average before caching and ranking optimizations.
At 150 million posts/day and 2 MB average original image size, raw uploads are about 300 TB/day, or 3.5 GB/s average ingress; a 10x peak approaches 35 GB/s. One-year originals alone are about 110 PB before replicas, derivatives, and retention effects. Image delivery is much larger: at 1 billion feed opens/day and 20 images/open, 20 billion image requests/day; CDN caching is essential to avoid serving this entirely from origin.
2. High-level architecture
flowchart TD
subgraph C[Client]
App[Mobile and Web App]
end
subgraph E[Edge and CDN]
CDN[Image CDN]
WAF[WAF and Rate Limits]
end
subgraph L[Load Balancer]
LB[Regional API Load Balancer]
end
subgraph S[API and Services]
Auth[Identity Service]
Upload[Upload Service]
Post[Post Service]
Feed[Feed Service]
Social[Graph and Engagement Service]
Rank[Ranking Service]
Mod[Moderation Service]
end
subgraph CCH[Cache]
FeedCache[Feed Cache]
Redis[Redis Social Counters]
end
subgraph D[Datastores]
SQL[Account and Post SQL]
Graph[Follow Graph Store]
Blob[Object Storage]
Search[Search Index]
end
subgraph Q[Message Queue]
Events[Durable Event Bus]
end
subgraph W[Workers]
Media[Image Transform Workers]
Fanout[Feed Fanout Workers]
Notify[Notification Workers]
Safety[Moderation Workers]
end
App -->|API requests| WAF --> LB
App -->|Image GET| CDN
LB --> Auth
LB --> Upload
LB --> Post
LB --> Feed
LB --> Social
Upload -->|signed upload URL| App
App -->|direct image upload| Blob
Blob -->|object-created event| Events
Upload -->|upload metadata| SQL
Post -->|post metadata| SQL
Post -->|post-created event| Events
Feed -->|candidate IDs| FeedCache
Feed -->|follow lookup| Graph
Feed -->|rank candidates| Rank
Social --> Redis
Social --> Graph
Events --> Media
Events --> Fanout
Events --> Notify
Events --> Safety
Media -->|variants| Blob
Media -->|variant ready| SQL
Fanout -->|feed entries| FeedCache
Safety -->|moderation status| SQL
Post --> Search
Blob -->|origin fetch on cache miss| CDN
Diagram
Clients upload bytes directly to object storage using short-lived signed URLs, avoiding API servers as a bandwidth bottleneck. APIs handle authorization, metadata, feed reads, and actions; asynchronous workers handle derivatives, fanout, moderation, and notifications.
3. API design
POST /v1/uploads — request a signed upload URL; includes content type, size, and idempotency key.
POST /v1/posts — create post metadata after upload; references the uploaded object and caption.
GET /v1/feed?cursor=...&limit=20 — return ranked feed items and an opaque next cursor.
GET /v1/users/{id}/posts?cursor=... — retrieve a profile timeline.
PUT /v1/users/{id}/follow and DELETE /v1/users/{id}/follow — follow or unfollow idempotently.
PUT /v1/posts/{id}/like and DELETE /v1/posts/{id}/like — idempotent engagement operations.
POST /v1/posts/{id}/comments — add a comment; enforce limits and abuse controls.
DELETE /v1/posts/{id} — delete a post and enqueue asynchronous media and index cleanup.
Use OAuth-style access tokens, request IDs, per-user rate limits, and idempotency keys for writes. The server must enforce private-account authorization; a guessable media URL is not an authorization mechanism.
4. Data model & storage
SQL:User(user_id, privacy, status), Post(post_id, author_id, created_at, caption, media_state, visibility), and Follow(follower_id, followee_id, state). Use a distributed SQL or sharded relational store for transactional account and post metadata. Partition posts by author_id with time-oriented indexes; avoid a single global write hotspot.
Graph store: adjacency lists for follower and followee lookups, partitioned by user ID. Keep the relationship source of truth separate from derived feeds.
Object storage: originals and immutable variants, keyed by media ID and size/format. Store metadata in SQL; use lifecycle policies for deleted or stale objects.
Feed store/cache: per-user ordered post IDs with score and timestamp, partitioned by user_id; Redis for hot feeds, counters, and short-lived coordination. Treat counters and feed entries as rebuildable derived data.
Search index: account names, captions, and hashtags, populated asynchronously; apply privacy and moderation filters at query time.
5. Deep dive
Feed generation: use a hybrid fanout model. For ordinary accounts, publish events are pushed into followers’ feed stores, making reads fast. For very high-follower accounts, do not
System designHardDirector of Technical Program Management
14. How would you design a music-streaming and recommendation service like Spotify?
Model answer
1. Requirements & scale
Functional requirements
Users discover music, manage a library and playlists, and stream on-demand or curated tracks across devices.
Provide search, recommendations, playback controls, offline downloads, subscription entitlements, and creator/catalog ingestion.
Resume playback across devices and record play, skip, save, and completion events for personalization and royalty reporting.
Non-functional requirements
Playback should start quickly, continue through transient network issues, and protect licensed content.
Catalog and search are highly available; playback authorization and subscription rules must be reliable. Recommendations can degrade gracefully.
Back-of-the-envelope estimates
Assume 100 million daily listeners, averaging 2 hours/day at 160 kbps: 100M × 7,200 sec × 20 KB/sec ≈ 14.4 PB/day of audio egress. CDN delivery is essential.
At 20 tracks/hour/listener, that is about 4 billion play events/day, or 46,000 events/second on average and potentially 5–10x at peaks.
If a 4-minute track averages 5 MB, 100 million tracks require roughly 500 TB of primary audio before transcoded versions, replicas, and backups.
2. High-level architecture
flowchart TD
subgraph Client["Client"]
App["Mobile and desktop apps"]
Device["Connected devices"]
end
subgraph Edge["Edge / CDN"]
CDN["Audio CDN"]
WAF["API edge and WAF"]
end
subgraph LB["Load Balancer"]
Gateway["Regional API gateway"]
end
subgraph Services["API / Services"]
Identity["Identity and entitlements"]
CatalogSvc["Catalog and search"]
Playback["Playback and manifests"]
Library["Library and playlists"]
Reco["Recommendation service"]
Rights["Rights and availability"]
end
subgraph Cache["Cache"]
RecCache["Home feed cache"]
Session["Playback session cache"]
SearchCache["Catalog cache"]
end
subgraph DB["Datastores"]
CatalogDB["Catalog SQL and search index"]
UserDB["User and playlist database"]
Blob["Encrypted audio object store"]
Feature["User and track feature store"]
end
subgraph Queue["Message Queue"]
Events["Playback and interaction stream"]
end
subgraph Workers["Workers"]
Encode["Ingest and transcode workers"]
RecoTrain["Recommendation training"]
Analytics["Royalty and analytics workers"]
end
App -->|"browse and control"| WAF
Device -->|"playback control"| WAF
WAF --> Gateway
Gateway --> Identity
Gateway --> CatalogSvc
Gateway --> Playback
Gateway --> Library
Gateway --> Reco
CatalogSvc --> CatalogDB
CatalogSvc --> SearchCache
Library --> UserDB
Reco --> RecCache
Reco --> Feature
Playback --> Rights
Playback --> Session
Playback -->|"signed manifest"| CDN
CDN -->|"audio segments"| App
CDN -->|"audio segments"| Device
Blob -->|"origin segments"| CDN
Events --> RecoTrain
Events --> Analytics
Blob --> Encode
Encode -->|"transcoded audio"| Blob
App -->|"play and skip events"| Events
RecoTrain --> Feature
Diagram
3. API design
GET /v1/search?q=&type=&cursor= — paginated catalog search with filters.
GET /v1/tracks/{id} — track metadata, availability, and playback eligibility.
POST /v1/playback/sessions — authorize a track or playlist and return a short-lived signed manifest.
POST /v1/playback/sessions/{id}/events — report start, progress, completion, and error events with sequence numbers.
GET /v1/me/home — personalized shelves, with cached results and a fallback for recommendation failure.
GET /v1/me/playlists/{id} and POST /v1/me/playlists — retrieve or update a user's playlist using optimistic concurrency.
POST /v1/me/library/{track_id} — save or remove a track idempotently.
4. Data model & storage
Represent Track(track_id, artist_ids, album_id, duration, market_rights, audio_asset_id, metadata_version) and AudioAsset(asset_id, codec, bitrate, object_key, checksum) separately so rights and metadata changes do not rewrite audio blobs. Store audio masters and transcoded segments in encrypted object storage, with CDN copies governed by license and expiration policy.
Store users, subscriptions, playlists, and playlist ordering in a transactional database. A playlist can use (user_id, playlist_id, position) with a stable item ID and version; for very large collaborative playlists, partition by playlist ID and handle reorder conflicts explicitly. Index catalog metadata in a search engine. Keep play events in a durable stream and analytical lake, while online listening history and recommendation features live in low-latency stores. Apply retention and privacy rules to behavioral data.
5. Deep dive
Playback should not send full audio through application servers. The playback service checks identity, subscription, market rights, track availability, and device limits, then returns a short-lived, signed manifest referencing segmented audio. The client fetches segments from the nearest CDN point of presence, using adaptive bitrate variants and a small local buffer. Tokens bind access to a user, device, track or session, and expiry; DRM and key management protect licensed content. Segmenting enables retries and bitrate adaptation without restarting the track.
Playback events are asynchronous and deduplicated using event IDs and session sequence numbers. They drive resume position, recommendations, fraud detection, and royalty accounting, but client events are not automatically trusted as proof of a payable play. Reconcile against server-issued sessions, duration thresholds, anti-abuse signals, and rights rules. The recommendation service can combine collaborative signals, content and contextual features; precompute home shelves for active users and retrieve a fresh reranked set at request time.
sequenceDiagram
participant Client as Playback client
participant API as Playback API
participant Rights as Entitlement service
participant CDN as Audi
Diagram
TechnicalEasyDirector of Technical Program Management
15. Do you know NPV (net present value)?
Model answer
Definition: Net present value (NPV) is the value today of expected future cash flows, less the upfront investment. It accounts for the fact that a dollar received in the future is worth less than a dollar today.
Formula:
NPV = Σ [CF_t / (1 + r)^t] - Initial Investment
CF_t is the net cash flow in period t, and r is the discount rate that reflects time value of money and risk. Be explicit about whether cash flows are annual, monthly, nominal, or inflation-adjusted; the rate and periods must use consistent assumptions.
Decision rule: A positive NPV suggests the investment is expected to create value relative to the chosen hurdle rate. When comparing alternatives, use the same horizon and assumptions, and consider constraints such as strategic importance, capacity, and risk—not NPV alone.
Example: Suppose a project costs $100,000 today and returns $60,000 at the end of each of the next two years. At a 10% discount rate, the NPV is approximately $60,000 / 1.10 + $60,000 / 1.10² - $100,000 = $4,132. Under those assumptions, it clears the hurdle, but the margin is small enough that sensitivity analysis matters.
How I’d use it as a TPM: I’d partner with finance and product to define the cash flows, include implementation and operating costs, and test scenarios for adoption, timing, and risk. I’d report the assumptions and range—not just a single point estimate—and revisit them as actual delivery and usage data arrive.
Watch-outs: NPV can look precise while depending on uncertain assumptions; it can undervalue strategic options or benefits that are hard to monetize; and it does not by itself show payback timing or compare projects with different resource constraints. I’d pair it with sensitivity analysis, payback period, and strategic fit.
TechnicalMediumDirector of Technical Program Management
16. How do you balance rapid feature deployment with long-term system stability and security?
Model answer
I treat speed and stability as a system-design and operating-model problem, not as opposing goals. The aim is to make changes small, observable, reversible, and safe to release, while protecting time to address structural risk.
Set explicit guardrails. Agree on service SLOs, error budgets, security and privacy requirements, and severity-based release criteria. If a service is consuming its error budget too quickly, reduce risky change until reliability recovers; do not silently waive the target.
Reduce change risk. Encourage small, independently deployable changes; automated tests; code review; dependency and vulnerability scanning; and staged rollouts. Use feature flags to separate deployment from customer exposure, with owners and expiry dates so flags do not become permanent complexity.
Make production observable. Instrument key user journeys and technical signals—latency, errors, saturation, adoption, and security events. Define automated rollback or pause thresholds before a launch, and ensure responders know who can make the call.
Invest in prevention. Reserve capacity for recurring defects, patching, dependency upgrades, threat modeling, and technical debt that increases incident or delivery risk. Prioritize that work using customer impact, likelihood, blast radius, and cost of delay.
Sequence the rollout. Start with internal users or a small canary, compare against a control or baseline, expand only when metrics remain within guardrails, and retain a rollback path. For high-risk changes, use a launch review that includes operations, security, and product—not just feature owners.
Learn and adjust. Review incidents and near misses without blame, track repeat causes, and feed corrective actions into roadmaps and engineering standards.
flowchart LR
A[Build small change] --> B[Automated tests and security checks]
B --> C[Canary with feature flag]
C --> D[Observe SLO and security signals]
D --> E{Within release guardrails?}
E -->|Yes| F[Expand rollout]
E -->|No| G[Pause or rollback]
G --> H[Diagnose and remediate]
H --> A
Diagram
The trade-off is deliberate: I may defer a lower-value feature or reduce initial scope to pay down a defect pattern that threatens availability or security. I would make that choice with data—error-budget burn, incident impact, defect recurrence, and customer value—and communicate the cost of both options. At Director level, I also align teams on shared release criteria and fund platform capabilities that make safe delivery the default rather than an extra manual process.
TechnicalMediumDirector of Technical Program Management
17. How do you identify and mitigate risks before they affect a program’s critical path?
Model answer
1. Establish where risk can affect the critical path
I start by making the critical path explicit: milestones, dependency owners, required dates, and the work with no schedule float. Then I identify risks across technology, dependencies, people, security, vendors, and decision-making—not just risks already recorded by teams.
2. Find risks early
Run focused reviews with engineering leads and partner teams; ask what assumptions could fail, what is least understood, and what has no fallback.
Map dependencies and handoffs. A late API contract, environment, or security review can be more critical than the largest engineering task.
Use evidence: unresolved design decisions, defect trends, flaky tests, staffing gaps, lead times, and milestone variance.
Score risks by probability, impact, proximity, and detectability. Prioritize risks that could consume remaining schedule float or block multiple teams.
Record each material risk with a named owner, trigger, mitigation, contingency, and decision date. A risk without an owner or trigger is just a concern.
3. Act before the schedule is threatened
I prefer reducing uncertainty early: prototype the riskiest integration, secure a vendor commitment, parallelize independent work, or make a reversible design decision. I protect the critical path by defining fallback scope and decision deadlines in advance—not by assuming teams can simply work harder. I review the risk register weekly, and more often near a major launch, using changes in triggers and dependency status to escalate while options remain.
flowchart LR
A[Map milestones and dependencies] --> B[Identify assumptions and failure modes]
B --> C[Assess probability, impact, and timing]
C --> D[Assign owner, trigger, and mitigation]
D --> E[Track leading indicators]
E --> F{Risk threatens critical path?}
F -->|No| E
F -->|Yes| G[Execute contingency or escalate decision]
Diagram
4. Measure whether mitigation is working
Track risk exposure over time, milestone confidence, critical-path float, dependency readiness, mitigation completion, and time from trigger to decision. I also check whether mitigations create new risks, such as reducing scope in a way that increases operational load.
At Director level, the goal is not a green status report; it is earlier, better decisions across organizational boundaries. I make trade-offs visible, bring the right decision-makers together, and escalate with options and consequences while the program still has room to respond.
TechnicalMediumDirector of Technical Program Management
18. How do you manage dependencies between engineering, product, and operations teams?
Model answer
I manage dependencies as owned work with explicit contracts, dates, and decision points—not as informal assumptions in a project plan.
Map the dependency network early. During planning, I bring engineering, product, and operations together to identify inputs, outputs, sequencing constraints, shared resources, external vendors, and operational gates. I distinguish a true blocking dependency from coordination or a preferred sequence.
Define each handoff. For every material dependency, I record the providing team, consuming team, deliverable, acceptance criteria, needed-by date, owner on both sides, and confidence. For example, “API ready” is too vague; the contract should specify the endpoint, schema stability, test environment, and the consumer’s integration criteria.
Sequence around the critical path. I use a milestone plan or dependency map to identify work that can proceed in parallel, work that needs a stub or mock, and the decisions that could change the sequence. I track dependency age and the effect of slippage on downstream milestones, not just whether a task is marked complete.
Create a cross-functional operating cadence. Team leads review near-term handoffs and blockers regularly; I use a broader program review for critical-path changes, resource conflicts, and decisions requiring leadership. Product confirms scope and acceptance, engineering owns technical readiness, and operations validates support, monitoring, and launch readiness.
Manage changes and escalation deliberately. If a commitment slips, I ask for a revised forecast and impact, then work with affected owners on options: parallelize, use a temporary interface, reduce scope, resequence, or change the milestone. I escalate with a recommendation and decision deadline when teams cannot resolve a trade-off at their level.
flowchart LR
P[Product scope and acceptance] -->|Requirements| E[Engineering design and build]
E -->|API and release candidate| I[Integration and validation]
O[Operations readiness] -->|Runbooks and monitoring| I
I -->|Evidence and risks| D[Launch decision]
D -->|Go or hold criteria| O
D -->|Release feedback| P
Diagram
I keep one source of truth for owners, dates, status, and decisions, and I review it against team-level plans rather than asking teams to maintain conflicting reports. The key measures are on-time dependency delivery, aging blockers, critical-path variance, and handoff defects. The common pitfalls are treating dates as commitments without validating capacity, escalating too late, and optimizing one team’s schedule at the expense of end-to-end readiness.
TechnicalMediumDirector of Technical Program Management
19. If month-over-month viewership were down, how would you find the root cause?
Model answer
I’d treat a month-over-month decline as a symptom to explain, not a diagnosis. First I’d establish that the measurement is comparable, then decompose the change until we find a segment, behavior, or operational event that accounts for it.
Validate the metric and comparison. Confirm the definition of “viewership” (unique viewers, hours watched, starts, or another measure), the event pipeline, time zone, reporting delay, and whether the current month is complete. Compare equivalent periods and account for month length, holidays, seasonality, and major content-release timing. Check whether a tracking, attribution, or dashboard change coincides with the drop.
Decompose the metric. For example, hours watched can be expressed as active viewers × viewing hours per active viewer. Break the change into acquisition/returning users, frequency, session duration, and content starts or completion. Compare the same month last year and use daily or weekly trends to locate when the decline began.
Segment the decline. Slice by geography, device/app version, acquisition channel, new versus returning users, subscription tier, and content category. Separate broad-based deterioration from one cohort or platform. Quantify each segment’s contribution to the overall change so the largest driver is not confused with the most visible one.
Form and test hypotheses. Check release slate and content availability, product or pricing changes, marketing spend, recommendation quality, playback startup/errors, app crashes, and competitor or external events. Correlate timing, then validate with instrumentation, cohort analysis, or controlled tests where possible; correlation alone is not proof.
Choose the response and monitor. If an app release increased playback failures on one device, for instance, I’d coordinate a rollback or hotfix, while protecting unaffected platforms. If the issue is content mix, I’d partner with content and programming teams rather than treating it as an engineering incident. Set an owner, expected recovery signal, and guardrails such as retention, playback quality, and revenue.
flowchart TD
A[Viewership down] --> B[Validate metric and data]
B --> C[Decompose users and usage]
C --> D[Find timing and segments]
D --> E[Rank hypotheses]
E --> F[Validate with evidence]
F --> G[Act and monitor guardrails]
Diagram
I’d communicate the size of the decline, confidence in the cause, and next decision point—not just a list of possible explanations.
TechnicalMediumDirector of Technical Program Management
20. How do you plan projects?
Model answer
Align on the outcome: I start by clarifying the customer or business problem, the measurable result, the executive sponsor, and what is explicitly out of scope. I separate the desired outcome from a preselected solution.
Build a plan with the people doing the work: I bring engineering, product, design, data, security, operations, and dependent teams together to define milestones, deliverables, owners, and decision rights. I make assumptions visible and validate estimates with the teams rather than treating an initial date as a commitment.
Map dependencies and risk: I identify the critical path, external dependencies, technical unknowns, staffing constraints, and operational or compliance risks. For high-impact uncertainty, I create an early spike or prototype with a decision deadline. I maintain a risk register with an owner, mitigation, trigger, and escalation path.
Establish governance proportional to risk: I use a single source of truth for scope, dates, owners, decisions, and status. The team gets a working cadence suited to execution; executives get concise updates on outcomes, confidence, risks, and decisions needed. I escalate with options and consequences, not surprises.
Manage change deliberately: When scope, capacity, or assumptions change, I quantify the impact on outcomes and dates. I bring options—such as reducing scope, moving a milestone, changing sequencing, or adding capacity—to the accountable decision-maker. I record the decision and rebaseline the plan rather than quietly absorbing more work.
Measure and close the loop: I track leading indicators such as milestone confidence, dependency aging, unresolved decisions, and defect trends, alongside lagging measures such as launch date, adoption, reliability, and business impact. After launch, I review outcomes, operational readiness, and lessons learned.
flowchart TD
A[Define outcome and scope] --> B[Align owners and estimates]
B --> C[Map dependencies and risks]
C --> D[Set milestones and governance]
D --> E[Execute and track signals]
E --> F{Change or risk?}
F -- Yes --> G[Evaluate options and decide]
G --> D
F -- No --> H[Launch, measure, learn]
Diagram
Director-level emphasis: I create a system that makes ownership and trade-offs clear across teams, while keeping teams empowered to execute. I judge plan quality by whether it helps the organization make timely decisions and deliver outcomes—not by how detailed the Gantt chart is.
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.