David Chung · spoken interview practice

15 behavioral questions.
Answers you can say aloud.

Complete first-person scripts built from your Lyft, Verdict MMA, FantasyPros, Cox Automotive, and Yellow Pages experience.

Prepared October 5, 2026 · 15 full answers · 15 short versions · 30 follow-up answers

Start with the short answer, then expand if the interviewer wants detail. For the full version, explain the situation, your responsibility, your actions, the result, and what you learned. Timing estimates use 130 words per minute.

These are 15 selected, high-value themes for senior engineering interviews, synthesized from Amazon's senior SDE guidance and Microsoft's interview guidance. They are original practice questions, not a verified frequency ranking or a company's exact question list.

The scripts use saved evidence and user-reported facts. Keep the source notes for deeper follow-ups. Career motivation is draft wording to personalize; earlier-role details and the post-2023 Verdict arrangement still need confirmation. Ads-pin revenue is the product-level USD 2M+ ARR figure you supplied, with measurement details still pending.

Jump to a question

15 of 15 questions

B01Tell me about yourself and walk me through your career.Career

About 90 seconds at 130 words/min · source stories: L02 · F01 · C01 · Y01

30-second version

I'm a senior Android engineer with more than ten years in software engineering. I started in backend and data systems, owned a portfolio of Android apps at FantasyPros, co-founded Verdict MMA, and now work at Lyft on Driver AI, shared speech capabilities, and production reliability. My strength is connecting the mobile experience to the systems and teams behind it.

Full answer · say this

I'm a senior Android engineer with more than ten years in software engineering. My background combines consumer mobile products with backend and data work, which helps me reason about the whole experience rather than just the screen.

I started at Yellow Pages NextHome building a listings API and ingestion pipeline, then worked at Cox Automotive on dealership financing software and offer data. At FantasyPros, I moved into Android product ownership across six apps. I then co-founded Verdict MMA and worked across native Android, web, and backend systems.

At Lyft, I led the Android client for Driver AI from specification through public launch. I also worked on shared speech capabilities reused across three products and on Android Auto reliability. Those projects reinforced that my strongest work is often at the boundary between product behavior, shared contracts, and operational correctness.

For my next role, the direction I'm interested in is senior Android ownership where I can ship useful consumer experiences and improve the foundations other engineers build on. I can go deeper on the Driver AI launch, the shared speech work, or a native reliability problem depending on what would be most relevant to this team.

Follow-up answers (2)

Why move from backend into Android?

My career moved from data and APIs into owning consumer mobile products. The backend background still helps me understand client contracts and asynchronous state. I would add my personal motivation in my own words rather than infer it from the job history.

Why this particular company?

I would connect one specific product or engineering problem from this team to a project I have actually owned. The career summary explains my background; it does not replace a company-specific reason.

B02What achievement are you most proud of?Delivery

About 100 seconds at 130 words/min · source stories: L02

30-second version

A strong example is leading Android delivery of Driver AI from specification through public launch. Alongside the chat and voice client and shared contracts, I aligned client, backend, and data engineering on data collection and coordinated changes with support and the driver team. I'm proud of bringing those responsibilities together through launch.

Full answer · say this

The example I would choose is leading the Android client for Driver AI at Lyft. We started with a substantial product specification, and I was responsible for taking the Android experience through public launch.

The challenging part was that a useful client depended on decisions outside Android. The shared message models had another owner, iOS needed compatible behavior, and the product had to support chat and voice interactions in a driving context.

I wrote the Android specification, negotiated additive chat and tile contracts, and implemented the client experience, including speech input, plan cards, and driving-aware controls. When duplicated messages and backend ownership gaps threatened the launch, I helped resolve those cross-team issues rather than considering my responsibility complete when the Android implementation was ready.

I also aligned client, backend, and data engineering on what data we were gathering, and coordinated the changes with support and the driver team. That was part of carrying the complete driver experience through delivery.

The product launched publicly, and the chat patterns could be reused. I am proud of the combination of hands-on implementation and integration ownership. The lesson was that the quality of a launch depends on owning the seams between teams as carefully as the code within one team.

Follow-up answers (2)

What did you personally own?

The Android specification and client, including chat and speech interactions, plus coordination on shared message contracts and cross-boundary launch blockers. Other teams retained ownership of their services and platform implementations. I also aligned client, backend, and data engineering on data collection and coordinated our changes with support and the driver team.

What metric proves the achievement?

The supported outcome is the public launch and reusable client patterns. I do not have a verified earnings or retention lift to present as a result of my work.

B03Tell me about a project you owned end to end.Delivery

About 70 seconds at 130 words/min · source stories: V03 · V04

30-second version

At Verdict, I owned the Android payment-provider flow from requesting deposit and withdrawal URLs through the hosted experience and callback handling. I made pending, success, failure, and cancellation distinct so the native UI reflected the asynchronous process. End-to-end ownership meant understanding the API and provider behavior as well as the Android screens.

Full answer · say this

At Verdict, I implemented the Android deposit and withdrawal experience for an external payment provider. It is a useful example of end-to-end ownership because the user journey crossed our native app, backend endpoints, and a hosted provider flow.

I started with the client contract: request the provider URL using an amount in cents, then open the hosted experience in our WebView. I wired presenter behavior, loading feedback, failure handling, callbacks, analytics, and navigation back to the tournament lobby.

The important design decision was to make pending a real state. A redirect or an apparently successful browser interaction did not establish that funds had settled. I handled success, pending, failure, back, and close as different transitions rather than forcing them into a binary success-or-error model.

The outcome was a coherent Android flow across those boundaries. The lesson was that end-to-end ownership means understanding what the next system can actually guarantee and making that meaning clear to the user.

Follow-up answers (2)

What was the hardest boundary?

The hosted provider could return navigation events before final settlement. I kept those client events distinct from authoritative payment state, especially for pending flows.

How did you measure conversion?

I do not have a recovered conversion measurement. A proper measurement would connect unique payment attempts to provider settlement over a defined completion window and handle pending attempts consistently.

B04Tell me about a disagreement with a teammate or stakeholder.Leadership

About 80 seconds at 130 words/min · source stories: L06

30-second version

A release owner wanted to revert a change that would start an experiment. I explained bounded exposure, runtime rollback, platform status, and the cost of delaying data collection, then answered their concerns directly. They agreed to retain it. The key was respecting their release accountability and making the risk assessable.

Full answer · say this

At Lyft, a release owner wanted to revert a cherry-picked change that would let us start an experiment. I wanted to retain it because delaying it would delay collecting the data we needed.

I did not treat the disagreement as someone blocking my work. They were accountable for release risk, and my proposal needed to help them make that decision responsibly. I explained the bounded experiment exposure, the runtime rollback control, and the status of the corresponding work on the other platform. I also described the consequence of delaying the change, then answered their follow-up questions directly.

They agreed to retain it. I did not have to bypass them or turn the discussion into an escalation. The result was an agreed release decision with the risk and recovery path made explicit.

What I learned was to start from the other person's responsibility. A persuasive technical argument should make the tradeoff clearer for the person who owns the decision, not just repeat why my preferred outcome is urgent. In a different case, the same process could reasonably lead to a revert.

Follow-up answers (2)

What if they had still said no?

I would respect the release decision and use the fallback, then revisit the experiment timing with the owners. That is how I would handle the hypothetical; in this case, they agreed to retain the change.

How do you know you were right?

The documented outcome is their agreement to retain the change. I would not infer a clean experiment result or an incident-free rollout from that decision alone.

B05Tell me about a failure or a mistake you made.Learning

About 80 seconds at 130 words/min · source stories: L08

30-second version

I let growing voice scope, backend gaps, and on-call work accumulate without making the estimate risk visible early enough. My estimate slipped. I owned the miss, reset the plan, and changed my approach to surface capacity constraints and split work sooner. The mistake was late communication, not simply having too much to do.

Full answer · say this

At Lyft, I underestimated the delivery risk on a voice project. The scope expanded, backend gaps appeared, and I had overlapping on-call responsibilities. I kept absorbing the work without making the impact on capacity and the estimate explicit early enough. My estimate slipped.

I was accountable for that. The fact that some work came from dependencies did not excuse allowing the plan to become misleading. I raised the slip with my manager and re-planned. I also changed the mechanism I used: capacity caveats became explicit, scope changes triggered an earlier conversation, and subsequent work was divided into smaller independently reviewable changes.

I became more deliberate about combining on-call with a major push as well. The outcome was a reset plan and a change in how I communicated scope and capacity.

The lesson was that ownership includes making constraints visible before other people inherit a surprise. Working harder can help in a specific week, but it does not replace giving the team enough information to change scope, sequencing, or staffing. I would handle the communication earlier if I faced that situation again.

Follow-up answers (2)

What was your mistake rather than someone else's?

I did not surface the changed capacity and estimate risk soon enough. Dependencies and on-call were part of the situation; the timing of my communication was my responsibility.

What was the downstream impact?

The reference establishes an estimate slip and replanning. I need to add the actual downstream consequence from memory; I will not invent a missed launch or customer incident.

B06Tell me about difficult feedback and how you responded.Learning

About 80 seconds at 130 words/min · source stories: L09

30-second version

A reviewer told me an 81-file, roughly 1,800-line change was too hard to review. I changed the delivery structure instead of defending the size. Later voice work used six and four pull-request stacks. The feedback changed how I designed review boundaries, although I do not have a measured review-time reduction.

Full answer · say this

At Lyft, I submitted a feature as a change spanning 81 files and roughly 1,800 lines. The reviewer acknowledged the work but said it was too difficult to review as one large change.

The feedback challenged my assumption that completing the implementation meant I had made it ready for the team. I needed to reduce the cost of understanding the change. I moved toward numbered stacks and integration branches, separating responsibilities so reviewers could assess smaller units. Later voice-to-voice work used six pull requests, and alternative-voice work used four.

The result was a concrete change in how I delivered substantial features. The later six-PR and four-PR stacks are concrete examples of that change.

What I learned was that reviewer attention is a shared resource. Now I try to plan the review boundaries while designing the feature: which contract can be reviewed first, which behavior depends on it, and how to keep each step understandable. The feedback helped me see that collaboration quality is part of implementation quality, rather than something added after the code is finished.

Follow-up answers (2)

Did you disagree with the feedback?

The important documented response is that I changed my delivery approach. I would describe my actual initial reaction in my own words rather than manufacture a defensive exchange.

What proves you changed?

The later six-PR voice-to-voice stack and four-PR alternative-voice stack are concrete examples. They establish different review boundaries, not a measured speed improvement.

B07Tell me about influencing other teams without formal authority.Leadership

About 70 seconds at 130 words/min · source stories: L03 · L02

30-second version

At Lyft, I connected duplicated speech infrastructure across Driver AI, navigation, and RiderAI with a real driver need for voice choice. I worked across shared services, APIs, settings, and runtime behavior, and the framework was reused across three products. The influence came from making a useful shared boundary and a concrete feature work together.

Full answer · say this

At Lyft, speech-to-text and text-to-speech work was duplicated across Driver AI, navigation, and RiderAI. Drivers were also asking for navigation voice options. I saw a connection between a reusable platform capability and a feature users actually wanted.

My contribution was to consolidate the speech services and lead Android navigation voice work across service integration, voice profiles, settings, APIs, and runtime behavior. That required coordination beyond one feature implementation. I used reviewable stages so the common foundation and the product changes could be understood separately.

The framework was reused across three products, and the voice-choice release had reported early uptake of more than 600 switchers in roughly ten days. That was initial uptake during a staged release.

The influence story is the alignment around a shared capability that solved a product problem. The lesson was to make the shared proposal concrete enough that other owners could understand the integration boundary and the benefit to their own product.

Follow-up answers (2)

What authority did you have?

I led the Android work and coordinated shared integrations. The evidence does not establish that the other teams reported to me.

What made the proposal useful to them?

It consolidated duplicated speech capabilities into a framework reused across their products. I would add the actual owner discussion for a deeper follow-up rather than infer each team's motives.

B08Tell me about working through ambiguity.Delivery

About 80 seconds at 130 words/min · source stories: L01

30-second version

I took a prototype that generated mobile changes and worked out the operating model needed for broader use: queued workers, authenticated ingress, a GitHub App, recovery, human review gates, and infrastructure ownership. The ambiguity was how to make the workflow operable and accountable, not just whether a model could produce code.

Full answer · say this

At Lyft, I worked on an AI workflow that turned product requests into draft iOS and Android pull requests. The prototype showed that the idea could work, but it left an ambiguous set of production questions: who would run it, how requests would recover, and how generated work would be reviewed.

I approached that by making the operating boundaries explicit. I added a Redis-stream work queue, authenticated webhook ingress, a GitHub App, and human review gates. I addressed restart and cluster failures and aligned the integration with the owning infrastructure team instead of maintaining a parallel operating burden indefinitely.

I also packaged the workflow for broader use. The reference reports sprint adoption and interest from another organization. Those showed that the workflow was useful beyond the original prototype.

The result was a more reviewable and recoverable workflow. My lesson was to break ambiguity into decisions with owners: ingress, execution, recovery, and acceptance. That creates a system other people can reason about, even while the product direction is still evolving.

Follow-up answers (2)

What did you do first?

I would describe the actual implementation sequence from the project record. The supported operating decisions are the queue, security boundary, integration, recovery work, and review gates; their exact order is not established here.

How did you know the AI output was acceptable?

The workflow produced drafts behind human review gates. A stronger quantitative answer needs acceptance, review effort, and defect data from a defined request cohort.

B09Tell me about a production incident you handled.Delivery

About 70 seconds at 130 words/min · source stories: L04

30-second version

An Android Auto release failed on connection. I reproduced it on physical head-unit hardware and isolated the issue to Android 16. That let the team restore unaffected cohorts while validating a targeted fix, reported within roughly three days. I focused on the affected population, actual release behavior, and recovery path.

Full answer · say this

At Lyft, an Android Auto release began failing when drivers connected to a physical head unit. Initially, the mitigation had to be broad because we did not know the affected operating-system cohort.

My responsibility was to reproduce the failure and narrow it enough to support a safe recovery decision. I tested phones on real head-unit hardware, compared OS behavior, and shared logs. I isolated the regression to Android 16. That gave the team a basis for restoring Android Auto for unaffected users while we worked on the specific failure.

I helped test the targeted fix and checked the release candidate, including catching a manifest-test issue in CI. The targeted fix was verified within roughly three days.

The outcome was a narrower blast radius and a verified recovery path. The lesson was that service recovery and root-cause remediation can be separate workstreams. Identifying who is actually affected can restore value before the permanent fix is complete, provided the evidence supports that boundary.

Follow-up answers (2)

Why physical hardware?

The failure happened when connecting Android Auto to a head unit. Testing that actual boundary was necessary to compare phones and OS cohorts meaningfully.

What did you change afterward?

The story bank records a proposal for easier access to signed builds for future reproduction. I would describe it as a proposal unless its implementation is confirmed.

B10Tell me about a difficult technical tradeoff under a deadline.Delivery

About 80 seconds at 130 words/min · source stories: L05 · V07

30-second version

For an Android 10 production-build crash, I kept a revert ready while timeboxing investigation before the release deadline. The team found a desugaring configuration mismatch, and a teammate submitted the upstream fix. The tradeoff was a bounded fix-forward attempt with a reversible fallback, not an open-ended bet on finding the cause.

Full answer · say this

At Lyft, a crash affected production builds on Android 10, and the handoff recommended reverting the change. The tradeoff was between protecting the release immediately and taking a bounded opportunity to repair the cause without removing the feature for another cycle.

I kept the revert available and asked for reproduction details so the investigation would be targeted. I timeboxed the root-cause work against the release deadline rather than allowing it to become an open-ended effort.

The team traced the issue to a minimum-SDK mismatch in the navigation SDK's desugaring configuration. A teammate submitted the upstream build-rule correction. My contribution was the investigation and release decision process, while my teammate owned the upstream patch.

That gave us a specific configuration cause to fix. The lesson was to make the fallback and the decision boundary explicit before pursuing the more uncertain path. Fixing forward can be reasonable when the attempt is bounded and reversible. It becomes risky when the team is committed to it without a clear point at which the safer alternative takes over.

Follow-up answers (2)

Why not revert immediately?

A revert was kept ready. A bounded investigation had value because the failure might be a repairable configuration issue, while missing the release would delay the feature another cycle.

Who fixed the root cause?

A teammate submitted the upstream build-rule correction. My role was the investigation and tradeoff around the release decision.

B11Tell me about putting the customer first.Customer

About 70 seconds at 130 words/min · source stories: V04

30-second version

At Verdict, a declined full-balance withdrawal could fail to refund the player because the reversal incorrectly reused a balance check from the withdrawal path. I removed that inappropriate guard while keeping ledger checks, then tested the full callback sequence and restored balance. The customer outcome was correct financial state, not just a successful API response.

Full answer · say this

At Verdict, I fixed a payment edge case where a player who withdrew their entire balance could have the withdrawal declined and then fail to get the balance restored. It was a technical bug with a directly understandable customer consequence.

The original withdrawal had already reduced the player's balance to zero. The reversal path then reused a check that compared the refund amount with that remaining balance. That check made sense when taking funds out, but it was wrong when returning them.

I removed the inappropriate guard while retaining transactional transfers and ledger sanity checking. I added a regression test that replayed the pending, in-progress, error, and declined callbacks and asserted the debit, refund entries, and restored original balance.

The outcome was corrected behavior for that state transition. The lesson was to evaluate correctness through what the customer should experience at the end of the process. An endpoint returning successfully is not enough if the customer's money remains in the wrong state.

Follow-up answers (2)

How many customers were affected?

The evidence supports the bug and regression test, not a recovered affected-customer count. I would not invent one.

How did you prevent recurrence?

The regression test exercises the callback sequence and checks the final balances and ledger entries. I would keep the guarantee bounded to that tested scenario.

B12Tell me about using data to change a decision.Customer

About 80 seconds at 130 words/min · source stories: L07 · L14

30-second version

An intermittent navigation issue was difficult to prioritize from complaints alone. I used heartbeat telemetry to identify drivers who stayed in freeform mode without an active route for at least a minute. Roughly one percent of the analyzed driver population met that condition. That finding supported escalation and prioritization; it was not a measured post-fix reduction.

Full answer · say this

At Lyft, an intermittent navigation issue could leave a driver in freeform mode without an active route. The complaints were real, but they did not give the team a clear population-level view of the problem.

I wanted a metric that captured the failure rather than just counting navigation events. I analyzed heartbeat telemetry and wrote SQL to identify drivers who remained in the state for at least a minute. That made duration part of the definition, so a brief transition and a sustained problem would not be treated as the same thing.

The analysis found that roughly one percent of drivers in the analyzed population met that condition. I communicated the affected population and duration, which supported escalation and prioritization.

The impact here was making the problem concrete enough to prioritize; the one-percent finding described its scope. The lesson was to define the customer failure carefully enough that the measurement could inform a decision. Being clear about duration and population made the finding more useful than an undifferentiated event count.

Follow-up answers (2)

What was the denominator?

Drivers in the analyzed heartbeat population. I need the original query and time window to state the exact cohort; I would not replace it with all Lyft drivers.

Did the issue improve?

The available story establishes the finding and its influence on prioritization. A post-fix improvement needs a comparable measurement that is not recovered here.

B13Tell me about mentoring or developing another engineer.Leadership

About 80 seconds at 130 words/min · source stories: L11

30-second version

I onboarded two Lyft engineers who shipped production code in their first sprint. I provided spec examples, triage coaching, and review while giving them room to own implementation. One later led a server-driven UI flow with minimal oversight. Their output was theirs; my contribution was helping them become independent.

Full answer · say this

At Lyft, I helped onboard two engineers who shipped production code in their first sprint. My goal was to help them build judgment and ownership, rather than making every decision depend on me.

I gave them a specification template and a worked example so they could see the level of reasoning expected. I also coached on-call triage and handoffs and supported their implementation through review. That combined codebase context with the team's operating practices.

As they built confidence and context, I gave them room to own the work. One later drove a server-driven UI flow with minimal oversight. That is a useful outcome because it shows increasing independence rather than only a completed onboarding checklist.

I keep the attribution clear: they wrote and shipped their production code. My contribution was the structure and coaching around it. The lesson was that mentoring succeeds when the support can taper. I want someone to understand the reasoning behind a decision, know where the important boundaries are, and be able to make the next decision without waiting for me.

Follow-up answers (2)

How did you measure mentoring success?

The concrete signals here are first-sprint production contributions and later ownership with minimal oversight. They are outcomes from two engineers, not a company-wide onboarding-speed metric.

What if the engineer struggled?

I would adjust the size of the task and the amount of context and review, then taper the support as their decisions became more independent. That is a proposed approach, not an additional incident in this example.

B14Tell me about learning something unfamiliar quickly.Learning

About 80 seconds at 130 words/min · source stories: L13

30-second version

Early at Lyft, I took ownership of work in a shared C++ localization library, including projected GPS lag and Android compatibility. I learned the native boundary through the user-visible problem and improved map-error classification and observability. The result was a targeted correction and clearer diagnostics, rather than a claim that I built an automotive OS.

Full answer · say this

Early at Lyft, I took ownership of work in a shared C++ localization library. That was outside the usual Android UI surface, but the behavior affected the location experience drivers saw.

I focused on understanding the boundary through the symptom: projected GPS was lagging. I learned enough of that path to correct the behavior and worked on Android compatibility, including the Android 15 and 16KB work.

I also improved map-error classification and collaborated with iOS on a dashboard. That mattered because learning the code alone was not enough; we needed a diagnostic model that made failures understandable across the teams working on them.

The outcome was a localization correction and clearer observability. The lesson was to learn the unfamiliar system in the context of a concrete user problem, then turn that understanding into a useful boundary for other engineers. It is the same pattern I use when a mobile issue turns out to involve a native library, a shared service, or release configuration.

Follow-up answers (2)

How quickly did you learn it?

The story places it early in my Lyft tenure but does not establish an exact elapsed time. I would give the actual timeline from memory rather than invent a number of days.

What was the learning process?

The supported work connects the projected-GPS symptom, native-library ownership, compatibility, and observability. I would describe the actual debugging tools and collaborators in a technical follow-up.

B15Tell me about work with measurable business impact.Customer

About 90 seconds at 130 words/min · source stories: L15

30-second version

At Lyft, I contributed Android engineering to ads-pin experiences for a map-based advertising product generating more than USD two million in annual recurring revenue. That is product-level revenue, not incremental revenue attributed to my code. My contribution connects Android product delivery to a commercial surface, with the implementation scope kept separate from the business metric.

Full answer · say this

At Lyft, I contributed Android engineering to ads-pin experiences within the map-based advertising product. The product generates more than USD two million in annual recurring revenue, which makes it a clear example of mobile work connected to a commercial outcome.

My role was on the Android experience. The revenue figure belongs to the overall product, so I distinguish the commercial scale from revenue incrementally attributable to my own changes. That distinction matters because the product succeeds through the combined work of engineering, product, and the business.

The engineering challenge is that the advertising surface lives inside a map experience with an existing purpose for the user. The commercial experience needs to coexist with that usefulness. That is the lens I use to explain why this work matters: it connects a consumer interaction to a business, and the quality of the core experience remains part of the engineering responsibility.

My takeaway is to understand the business context of the product I am contributing to and be clear about the level of the result. Product revenue, my individual contribution, and incremental impact are separate pieces of the story.

Follow-up answers (2)

How was the USD 2M measured?

The figure is a user-reported product ARR value, not a measurement recovered in this preparation. Before giving a finance-level explanation, I need the reporting source, as-of date, and whether the organization means contracted recurring revenue or an annualized advertising run rate.

How much revenue did your change add?

I do not have a causal incremental-revenue measurement for my contribution. I would present the USD 2M-plus figure as product scale and describe my Android work separately.

Research & story evidence

The selection covers ownership, collaboration, conflict, feedback, failure, ambiguity, reliability, judgment, customer needs, measurement, mentoring, learning, and commercial impact.

External guidance informs the question selection and answer structure; it does not verify personal accomplishments. Post-2023 Verdict work is labeled as later work and should not be presented as part of the earlier role dates without clarifying the arrangement.