Articles
Developer Advocate Interview: Build a Live Demo and Explain Your Technical Choices
Build a small Developer Advocate API demo, explain design choices to two audiences, and recover honestly from a live failure with a clear request and response.
A developer advocate demo is easy to make impressive for thirty seconds and surprisingly hard to make useful for a developer. In an interview, the stronger demonstration is a small product story whose request, response, failure, and recovery are visible. This guide gives you an original live-demo exercise you can run without vendor credentials, plus a way to explain each technical choice to both developers and nontechnical interviewers. It is practice material, not a report of a particular company's interview assignment. Roboflow's employer-authored Developer Advocate posting is one concrete example of a role that values projects, demos, tutorials, and technical communication; its described project phase belongs to that job, not to every developer advocate process.
If you want a related rehearsal before building the exercise, try Demonstrate project impact and teach something. The goal here is narrower: show one API interaction in five minutes and make an interviewer understand why you built it that way.
What should a live demo prove?
Imagine the prompt: “Teach a developer to integrate our event-status API.” You have ten minutes to prepare and five minutes to present. You could make a dashboard with animations, but that would conceal the integration. Instead, build a page with a button that fetches a status, displays a request ID, and offers a deliberate failure toggle. A viewer should leave knowing which endpoint was called, what a successful response means, what a failure looks like, and what they would do next. The page is only the teaching surface; the contract and the explanation are the work.
The exercise below uses a tiny local HTTP server and static HTML. It does not call Roboflow or any employer API. That separation matters: it lets you demonstrate communication and error handling without implying access to proprietary systems or presenting an invented prompt as a candidate report. In a real interview, use the product and time limit in the invitation. If the interviewer gives a sandbox, use its official documentation and credentials. If none are provided, a local mock with an explicit contract is more honest than a secretly pre-recorded success path.
Define a single user story: “An integrator needs to see whether a sample event was accepted.” The success response has event_id, status, and request_id. The failure response is HTTP 503 with a request ID and a retryable message. MDN's Fetch guide is useful here because fetch() resolves for HTTP error statuses; the client must inspect response.ok. A candidate who treats every resolved promise as success can produce a persuasive but false green demo.
Build the smallest runnable teaching artifact
For your rehearsal, use Python's standard-library http.server and a static browser page. Make the page show one “Check status” button and one “Simulate service outage” checkbox. The server can listen on 127.0.0.1:8765; no cloud account, token, or package install is required. These endpoints define the original teaching fixture:
GET /api/status?fail=0 -> 200 {"event_id":"evt_demo_42","status":"accepted","request_id":"req_demo_ok"}
GET /api/status?fail=1 -> 503 {"error":"temporarily_unavailable","request_id":"req_demo_fail"}
The browser checks response.ok, records the HTTP status, and renders the request ID even when a request fails. Those choices make the failure observable and give a support engineer a useful identifier. The mock keeps values fixed so you can rehearse the same explanation twice. Do not call the fixed sample data a real ingestion result. A developer advocate should say, “This response is simulated; in the production integration I would show the documented response schema and a real sandbox result.”
Keep the teaching path short. First show the page before a request, then click once for the 200 response. Point to the URL and JSON fields in the browser's network panel if time allows. Toggle the outage, click again, and narrate the 503 result. Finally, say what the client should do: keep the user informed, retain the request ID, and retry according to the product's documented policy rather than blindly hammering the endpoint. MDN's HTTP status reference identifies 503 as service unavailable; it does not supply a retry policy for your hypothetical API. Do not invent one.
| Demo moment | What the viewer sees | What you explain |
|---|---|---|
| First load | No event state yet | The integration begins with an unknown state, not a fabricated success. |
| Success request | HTTP 200, accepted event, request ID | These fields are the contract the sample client needs. |
| Outage request | HTTP 503 and visible error | An HTTP response is not necessarily a successful operation. |
| Recovery decision | User-facing message and request ID | You need product-specific retry guidance and an observable support trail. |
This table is also a rehearsal checklist. If one row is invisible in the actual demo, make it visible before adding any styling. The test is whether someone who has never seen the API can repeat the main integration path afterward.
Explain your technical choices rather than narrating clicks
An interviewer can already see that you clicked a button. Explain why you made the choice. “I used one endpoint so we can inspect the full request-to-result path in five minutes.” “I used a deterministic mock because I have no sandbox credentials and want a repeatable failure case.” “I show the request ID because debugging needs a way to correlate a user report with server logs.” Each sentence links a choice to a developer need.
Then name the trade-offs. The mock cannot prove service reliability, authentication, latency, schema compatibility, or production retry behavior. The fixed event ID is pedagogical; a real app would avoid assuming an ID format. The sample client handles an HTTP error response, but it should also handle a network error in which there is no response at all. A good demo can say, “That second failure is outside today's five-minute scope; I would add a catch path and test it before shipping a tutorial.” This sounds more credible than suggesting that one green request validates the entire integration.
The contrast between HTTP error and network failure is worth rehearsing. For a 503, the server answered and may provide a request ID. For a disconnected network, the browser request may reject and no server-generated ID may exist. Do not assign the same recovery to both. If the product exposes rate-limit headers or idempotency keys, teach those from its documentation in a real demo; this generic exercise deliberately does not imply either exists.
You can also explain why the client is plain JavaScript. A framework would be legitimate, but in a short interview it might shift attention to build tooling and state management. Here, plain HTML and JavaScript expose fetch, response.ok, and rendering. In a longer workshop, you might add TypeScript types, component tests, and accessible loading states. The right answer depends on audience and time. The point is to show an intentional choice, not to claim that a framework is wrong.
Give two versions of the same explanation
A developer interviewer wants the integration boundary: request method and path, response shape, HTTP status handling, error branch, and what the sample does not prove. Give the technical version in roughly one minute: “The client calls /api/status. On 200, it reads event_id, status, and request_id; on non-2xx it reads the error body and displays an explicit failure. I check response.ok because fetch does not reject merely because the server answered 503. This is a local mock, so authentication and production retries are intentionally out of scope.”
A product or community interviewer may ask why the same lesson matters. Say: “A new integrator can copy the happy path, but the first outage is where trust is lost. This example makes the support trail and honest failure state visible. A tutorial based on it would add the real API's authentication, documented retry advice, and a troubleshooting section.” The two explanations are consistent. One describes the contract; the other describes the learner's path. Do not turn the second into vague claims that the demo “improves adoption” without evidence.
This is the developer advocate skill many work samples try to reveal: you need enough engineering depth to avoid teaching a false integration, and enough teaching judgment to remove distractions. An Amplify Partners interview with hiring leaders discusses work samples and the mix of technical and communication skills as a hiring perspective. It is not a current universal interview script, and it does not validate the specific mock exercise here.
What if the live demo fails?
It should be possible for this demo to fail deliberately. That is part of its value. If the server is down by accident, pause, state the observed error, and inspect one layer at a time: is the process running, is the browser on 127.0.0.1:8765, did the request reach the server, and did the browser receive an HTTP response? Avoid pretending a broken request was expected. The interviewer can learn more from a calm diagnosis than from a frantic reset.
For a real product demo, keep a backup artifact: a short screenshot of the expected response, a documented sample payload, and a concise explanation of what you would verify after the session. Disclose when you switch to it. A backup helps maintain the teaching objective, but it is not evidence that the live integration worked. If you changed code shortly before the interview, freeze it and rehearse from a clean start. A final check should include the failure branch, not just the polished success path.
Suppose an interviewer challenges the deterministic mock: “Why not connect to a live API?” A strong reply is conditional. “If a sandbox and test credentials are provided, I would prefer a real call and keep the mock for controlled error teaching. Without them, the mock makes the contract explicit and avoids an unverifiable claim.” That answer acknowledges the trade-off instead of treating the mock as a substitute for every real test.
Rehearse a five-minute delivery and a deeper follow-up
In the first thirty seconds, name the user problem and evidence boundary. In the next ninety, run the success path and show the contract. Spend the next minute on the 503 path. Use the final two minutes to explain trade-offs and invite a technical follow-up. The timing is an editorial practice structure, not a claimed employer time limit. Rehearse with someone who has not seen the code: ask them to summarize the endpoint and the recovery decision. If they remember the color of the button but not the error handling, revise the story.
For a deeper technical conversation, prepare five questions. Why can fetch resolve on 503? What would a timeout mean for an operation that may have reached the server? What information belongs in a log or support report? Which parts of the mock need replacement before publication as an official tutorial? How would you measure whether developers can actually complete the integration? Answer each with the observable boundary and a next test. Avoid promising exactly-once outcomes, retry safety, or adoption lift unless the product provides the required contract and data.
One useful self-review is to record a rehearsal and count unsupported claims. Phrases like “production ready,” “guaranteed,” and “users love this” need evidence or removal. Replace them with what the artifact demonstrates: one deterministic response path, one deliberate HTTP failure, a visible request ID, and a clear list of untested production concerns. That precision helps a hiring team see how you would represent its product publicly.