cswork / libraryOpen practice workspace

Articles

DuckDuckGo Engineering Interview: Paid Projects, Written Decisions, and Technical Review

Prepare for DuckDuckGo engineering interviews with paid project guidance, written decisions, technical review practice, and timing and AI-use questions.

A useful way to prepare for a DuckDuckGo engineering interview is to make one real project easy to examine: explain what you owned, why you chose an approach, what evidence supports the result, and what you would revise. Start with your actual invitation, then rehearse your most meaningful project contribution so it survives questions about implementation and judgment.

The bookmark-import example below is an invented practice exercise with locally checked results. It is neither a DuckDuckGo assignment nor a claim about questions you will receive.

What DuckDuckGo Publishes About Its Engineering Process

Official facts, checked September 9, 2026: DuckDuckGo describes six general stages: application review, a talent-acquisition conversation, a first project, a colleague interview, a second project, and final interviews. Projects are paid, asynchronous, and role-specific; higher-level roles can involve a third. The company says it does not use live coding or academic puzzles. Engineering candidates’ first projects include discussing a significant past contribution, and reviewers use a competency rubric. DuckDuckGo’s hiring process

The same page says project briefs specify compensation, with a flat PayPal payment within 30 days of timely submission. Completion does not guarantee employment. It also expects accurate representation of experience and transparency about AI use. Your invitation should settle deadlines, deliverables, and any additional tool restrictions. Official payment and AI guidance

Do not assume that an impressive repository can compensate for an unclear account of your own work.

What the 2026 Candidate Reports Can Actually Tell You

Candidate reports: A Senior Backend entry posted August 4, 2026, describes paid asynchronous projects and a lengthy engineer discussion during a process the author says lasted three months. A Senior iOS entry posted July 17, 2026, describes written project material, a technical discussion, and a later implementation exercise. These are separate anonymous accounts for different positions, not independently verified identities or a universal interview sequence. Read the dated DuckDuckGo entries on Glassdoor

Use them to identify questions for your recruiter: what will reviewers receive, what does the discussion cover, and how should you plan your availability? Do not convert one person’s document length or meeting duration into a requirement. A candidate’s frustration with feedback is also a personal observation, not evidence of how your application will be evaluated.

The practical implication is modest: prepare the written artifact and the explanation together. If your document describes a tradeoff that you cannot explain without reading it aloud, the preparation is unfinished.

Choose a Project You Can Explain Without Borrowed Authority

Choose a project where you can identify a consequential decision you made. A modest import tool with a clear correctness problem may support a better discussion than an enormous platform where your involvement was peripheral. Reviewers need enough context to understand the work, but every paragraph should eventually connect to something you observed, decided, implemented, or learned.

Write down your ownership boundary before preparing slides or prose. For example: “I owned duplicate detection and the import report; another engineer built the settings interface; product defined which export formats mattered.” This makes collaboration visible without turning shared outcomes into personal achievements.

Then choose one difficult moment. Perhaps the initial requirements treated two bookmarks as duplicates even though their fragments identified different sections. Perhaps an apparently successful import could silently lose records. A useful narrative explains how you recognized the problem, what options you considered, and why the chosen behavior matched the intended user experience.

Avoid invented precision. If no retention experiment existed, do not claim that the importer improved retention. If colleagues informally tested it, describe that feedback as informal. You can demonstrate strong judgment through the measurement you chose and the limitation you recognized, even when a polished business metric is unavailable.

Turn a Weak Project Story into a Defensible One

Consider this original practice scenario: an offline bookmark importer accepts absolute HTTP or HTTPS URLs, preserves input order for newly added entries, and treats identical URL strings as duplicates. It does not fetch pages. This deliberately narrow model is not a complete URL-security policy or production bookmark application.

A weak account might say: “I built a scalable, privacy-friendly importer that handled messy data and improved the experience.” Each adjective invites a question the account has not answered. What scale was tested? What data left the machine? Which messy inputs were handled? How was the experience evaluated?

A more defensible practice account is: “I defined exact-string duplicate handling so the importer would preserve query strings and fragments. In a seven-record fixture, three distinct allowed URLs were added, two repeated URLs were counted as duplicates, and two disallowed inputs were rejected. Repeating the fixture against that destination added nothing. The check did not establish crash recovery, large-file performance, or user satisfaction.”

The second account identifies a decision, gives reproducible evidence, and limits the conclusion. When adapting this pattern, replace the example with your own truthful experience; do not adopt the fictional ownership as a personal accomplishment.

Our local Python exercise checked five groups of expectations: first-run counts, rerun counts, preservation of fragment differences, preservation of query differences, and empty-input behavior. On the rerun, five valid input occurrences are already present and two inputs remain rejected. Calling all seven “duplicates” would erase an important distinction in the report.

An interviewer can now challenge the policy. Why preserve fragments? Because the exercise treats them as potentially meaningful destinations. Why not normalize host casing or default ports? Because this small implementation deliberately avoids claiming semantic equivalence between differently written URLs. That choice may retain redundant entries, but its behavior is easier to state and test.

The discussion becomes stronger when you identify what would change your decision. A product requirement for semantic deduplication would justify a documented canonicalization policy and additional fixtures. It would not justify silently stripping every query string because the output looked cleaner.

Structure Written Decisions Around Evidence

For practice, prepare a short decision note with four parts: the user problem, the alternatives, the selected behavior, and the evidence that could overturn the choice. Use the real project brief to decide the final submission format. A personal template should help you think; it should not override requested sections or file limits.

In the importer example, the problem is preventing accidental loss while reducing exact repeats. The alternatives include exact matching, aggressive normalization, and asking the user to resolve every possible duplicate. The selected behavior preserves distinctions and reports counts. Evidence that might change the choice includes repeated user confusion or a verified export format with explicit equivalence rules.

Attach the smallest useful evidence. A test result should identify the input, the expected behavior, and the observed result. A screenshot should establish a particular interface state. An architecture sketch should expose ownership and data movement. Ten loosely related artifacts can be harder to review than two that directly support the central decision.

Evidence to prepareReview question
Duplicate policy: two URLs differing only by fragment.Why should these remain distinct?
Import result: three added, two duplicates, two rejected.How is each category defined?
Rerun result: destination contains the first three URLs.Why are zero new records expected?
Failure boundary: disk writes are outside this fixture.What changes after a partial write?
Ownership: your component and collaborators are named.Which decision was personally yours?

Treat uncertainty as something actionable. “Large files are untested” is honest but incomplete. Add the next check: measure peak memory with representative inputs and decide whether keeping all distinct URLs in a set remains acceptable. The next step should follow from the risk, not simply promise more testing.

Practice the Technical Review as a Conversation

Start with a concise overview and let the other person choose a branch. Rehearse describing the importer without code, then explain one implementation path in detail. Switching between those levels is useful practice for discussing work with people who have different technical context.

Ask a practice partner to challenge the following original questions:

What happens if the program stops halfway through writing? The in-memory fixture does not answer that. A production design needs a persistence strategy and recovery semantics. For a small file, you might consider writing a temporary output and replacing the destination after validation, while checking the actual filesystem guarantees. For a database, transaction boundaries and unique constraints raise different questions.

Does zero new records prove a safe retry? It proves only the tested duplicate behavior for the supplied destination. It does not prove that the first run durably committed, that concurrent writers cannot race, or that error reports survive interruption. Separate the observed invariant from these untested conditions.

What grows with the input? Tracking distinct strings consumes memory proportional to the accumulated unique data, and long strings also matter. An answer of “linear complexity” is incomplete if it ignores the existing destination and the size of each record. Describe what you would measure before proposing a more complicated design.

How would you respond to a reviewer who prefers normalization? Restate the user problem you both want to solve, identify one concrete counterexample, and propose comparing policies against explicit acceptance cases. Defending a decision means explaining its conditions, not refusing to change it.

When you discover a mistake during rehearsal, revise the document too. Otherwise you may submit one claim and defend another. Keep a brief change note connecting the correction to its reason, especially when it changes expected output or scope.

Confirm the Brief Before Investing More Time

Use a compact personal checklist before beginning a paid project: required files, completion criteria, submission channel, timezone, expected effort, compensation details, and permitted tools. Record ambiguities that could alter the result. Resolve material contradictions with the recruiter; ordinary implementation choices can become clearly stated assumptions.

Distinguish effort from elapsed time. A project that requires several focused work sessions still needs room for reading, checking instructions, packaging, and a final review. If you have another offer deadline, communicate the actual date instead of assuming your preferred schedule is already understood.

For any permitted AI assistance, keep an accurate record of its role and your verification. “Used an assistant to suggest edge cases; I selected the fixtures and checked the results” is more informative than a vague statement that AI helped. Never describe generated reasoning as a decision you independently made, and never include confidential project material merely to make an example more convincing.

Review the recruiting privacy policy when deciding what material to share. Before sending, reopen the exact submitted package in a clean location. Check that instructions name real files, commands match the contents, links are accessible to the intended reviewer, and results correspond to that version. The final read should follow the reviewer’s path, rather than the path you remember taking while building.

Sources and Further Reading