Staff-level interview prep: docs, SDKs, community, content, launches, and measuring developer success.
A startup launches an API. The API is technically excellent — low latency, clean REST design, powerful features. Six months later, only 47 developers have integrated it. The docs are a Swagger page with no examples. The SDK is an auto-generated wrapper that throws cryptic errors. The Discord has 200 members and three unanswered questions from last week. The founder is baffled: "The product is great. Why isn't anyone using it?"
This is the problem Developer Relations solves. The gap between building a great API and having developers actually succeed with it is enormous. That gap is filled by a specific kind of engineer — one who can write production code, explain complex systems clearly, stand on a conference stage, manage a community of thousands, and translate developer pain into product decisions. That engineer is you.
DevRel is not marketing dressed up in a hoodie. It is not "the person who tweets." It is a full engineering discipline built on three pillars:
| Pillar | What it means | Concrete output |
|---|---|---|
| Community | Build and sustain the ecosystem of developers who use your platform | Discord/Slack management, contributor programs, champions network, events |
| Content | Create the learning paths that take developers from zero to production | Docs, tutorials, blog posts, videos, conference talks, quickstart guides |
| Code | Build the tools and examples that make the platform delightful to use | SDKs, CLI tools, sample apps, cookbooks, integration guides, error messages |
A staff-level DevRel engineer doesn't just execute within one pillar — they design the system that connects all three. The community surfaces pain points. Content addresses those pain points. Code eliminates the pain entirely. And the cycle repeats, getting tighter with each iteration.
It is 9:00 AM. You open your laptop at Stripe/Twilio/Vercel/Anthropic. Here is what today looks like:
9:00 AM — Triage community channels. Three new questions on Discord. One is a genuine bug in the Python SDK (missing retry logic on 429s). One is a developer confused by the auth flow docs. One is a feature request that 14 people have thumbed-up. You file the bug, draft a docs PR for the auth confusion, and add the feature request to the feedback tracker with community signal strength.
10:30 AM — SDK review. The platform team shipped a new endpoint yesterday. You review the auto-generated SDK method. The parameter name is max_completion_tokens_limit — you rename it to max_tokens. The error message on invalid input says "400 Bad Request" — you change it to "max_tokens must be between 1 and 4096. You passed -1." You add a code example to the docstring. These changes take 20 minutes and save 10,000 developers from confusion.
1:00 PM — Content creation. You are writing a tutorial: "Build a RAG chatbot in 15 minutes." You have the working code. Now you are agonizing over paragraph three because the concept of embeddings needs to be explained without assuming the reader knows what a vector is. You delete your draft and start with: "Imagine you could turn any sentence into a point on a map, where similar sentences are nearby..."
3:00 PM — Launch prep. The new streaming API ships next Tuesday. You are writing the migration guide, updating three quickstart guides, recording a 5-minute demo video, briefing the support team on expected questions, and coordinating the blog post with marketing. You have a checklist of 23 items and 14 are done.
5:00 PM — Metrics review. Weekly DevRel standup. Time-to-first-API-call dropped from 22 minutes to 8 minutes after the new quickstart shipped. Discord response time is averaging 3.2 hours (target: 2 hours). The "Build a chatbot" tutorial has a 67% completion rate (up from 41% after you restructured it). You celebrate the wins and assign action items for the gaps.
The three pillars form a reinforcing cycle. Watch how signal flows between them. Click each pillar to see its outputs.
Staff-level DevRel interviews test you across five dimensions. Every chapter in this lesson maps to one or more:
| Dimension | What they ask | Chapters |
|---|---|---|
| CONCEPT | "Explain DevRel from first principles. Why does this role exist?" | 0, 1, 5, 9 |
| DESIGN | "Design a developer onboarding experience that gets time-to-hello-world under 5 minutes" | 1, 2, 3, 8 |
| CODE | "Write an SDK wrapper for this API that handles errors gracefully" | 2, 3, 7 |
| DEBUG | "Developers are churning after signup. Diagnose the problem." | 4, 7, 9, 11 |
| FRONTIER | "How will AI change DevRel in the next 3 years?" | 1, 2, 6, 10 |
At a startup, one person does everything. At a larger company, DevRel is a team of specialists. Understanding the specializations helps you position yourself in interviews and understand where you add the most value:
| Role | Primary output | Key skills | Companies that hire this |
|---|---|---|---|
| Developer Advocate | Talks, blog posts, videos, community presence | Public speaking, writing, social media, empathy | Stripe, Vercel, Supabase, Twilio |
| Developer Experience Engineer | SDKs, CLIs, API design, tooling | Systems programming, API design, testing, CI/CD | Anthropic, OpenAI, Stripe, Cloudflare |
| Technical Writer | Docs, tutorials, API reference, migration guides | Technical writing, docs-as-code, information architecture | Google, Stripe, Twilio, MongoDB |
| Community Manager | Discord/Forum health, events, champions program | People management, event planning, conflict resolution | Discord, Hashicorp, Vercel, Supabase |
| Developer Marketer | Content strategy, campaigns, developer analytics | Data analysis, SEO, content planning, attribution | AWS, Google Cloud, Microsoft, Datadog |
A staff-level DevRel engineer has depth in one specialization and breadth across all of them. In an interview, you should be able to articulate which is your primary strength while demonstrating competence in the others.
DevRel has a career progression, though it's less standardized than engineering. Here is the typical ladder at a well-structured company:
| Level | Title | Scope | Key behaviors |
|---|---|---|---|
| L3-L4 | Developer Advocate / DX Engineer | Execute on specific projects (write tutorials, build demos, manage Discord) | Ships quality content independently, responds to community, codes well |
| L5 | Senior DevRel Engineer | Own a pillar (all docs, or all community, or all SDKs) | Sets quality bar, mentors juniors, identifies gaps, influences product |
| L6 | Staff DevRel Engineer | Design the DevRel system across pillars | Connects community signal to product decisions, builds measurement frameworks, defines strategy |
| L7+ | Head of DevRel / VP DevRel | Org-level developer experience strategy | Hires and builds the team, sets OKRs, represents developers at exec level, budget ownership |
The key transition is from L5 to L6. At L5, you're the best individual contributor — the best writer, the best speaker, the best coder. At L6, you're the system designer — you don't need to be the best at any single skill, but you see how all the pieces connect and you design the machine that makes developers successful at scale. This is the level this lesson prepares you for.
DevRel is most impactful at companies whose primary customer is a developer. Here are the tiers by company type:
| Company type | DevRel importance | Examples | Team size |
|---|---|---|---|
| API-first | CRITICAL — DevRel is the GTM | Stripe, Twilio, Anthropic, OpenAI, Plaid | 10-50 people |
| Developer tools | Very high — DevRel drives adoption | Vercel, Supabase, Datadog, MongoDB, Cloudflare | 5-20 people |
| Cloud platforms | High — DevRel supports sales | AWS, Google Cloud, Azure | 50-200 people |
| Open source | High — DevRel builds community | HashiCorp, Docker, Elastic, Redis | 3-15 people |
| Consumer tech | Moderate — DevRel supports platform | Meta, Apple, Google (Android), Shopify | 10-30 people |
When targeting companies, prioritize API-first companies and developer tools. The role is core to the business model, the team has influence on product, and the work is deeply technical. At cloud platforms and consumer tech, DevRel can sometimes be siloed in marketing with limited engineering influence — interview carefully to understand the reporting structure.
Documentation is the product. Not a companion to the product — the product itself. When a developer evaluates your API, they don't read your source code. They read your docs. If the docs are confusing, incomplete, or wrong, the API is confusing, incomplete, or wrong — as far as that developer is concerned. Stripe didn't win because their payment processing was fundamentally different. They won because their docs were so good that a developer could integrate payments in an afternoon instead of a week.
A staff-level DevRel engineer treats documentation as a system with architecture, just like code. There are four types of documentation, and each serves a different purpose at a different stage of the developer journey:
| Doc Type | Purpose | Reader state | Example |
|---|---|---|---|
| Quickstart | Get to "hello world" in <5 minutes | Evaluating, hasn't committed | "Send your first message in 3 steps" |
| Tutorial | Build something real, step by step | Committed, learning | "Build a customer support chatbot" |
| How-to Guide | Solve a specific problem | Building, needs an answer | "How to handle rate limits" |
| API Reference | Complete, accurate specification | Building, needs details | "POST /v1/messages — parameters, responses, errors" |
This is the Diataxis framework (by Daniele Procida). The insight is that each type requires a fundamentally different writing style. A quickstart that reads like a reference is useless. A reference that reads like a tutorial is overwhelming. Mixing them is the most common documentation mistake.
stripe.com/docs.Modern documentation lives in Git, not a CMS. This means docs get the same engineering rigor as code: version control, code review, CI/CD, automated testing. Here is the architecture:
yaml # docs-as-code pipeline source: Markdown/MDX files in /docs directory framework: Docusaurus / Mintlify / Nextra / custom code_samples: Extracted from tested /examples directory api_ref: Auto-generated from OpenAPI spec ci_checks: - Link checker (no broken links) - Code sample validator (every snippet runs) - Vale linting (style guide enforcement) - API diff (flag undocumented endpoints) deploy: Preview on PR, auto-deploy on merge
The critical piece is code sample validation. Every code example in your docs should be extracted from an actual test file that runs in CI. When the API changes, the test breaks, and you know the docs are stale before a developer finds out.
python # tests/docs/test_quickstart.py # This file is the source of truth for docs/quickstart.md # Code blocks are extracted by markers and injected into docs at build time import anthropic def test_quickstart_send_message(): # --- START: quickstart-send-message --- client = anthropic.Anthropic() message = client.messages.create( model="claude-sonnet-4-20250514", max_tokens=1024, messages=[ {"role": "user", "content": "Hello, Claude"} ] ) # --- END: quickstart-send-message --- assert message.content[0].text # Verify it actually works
A quickstart is the single most important page on your docs site. It is the page that converts evaluators into users. Here is the template that works, based on analysis of the best developer docs (Stripe, Twilio, Anthropic, Vercel):
markdown # Send Your First Message ## 1. Install the SDK ```bash pip install anthropic ``` ## 2. Set your API key ```bash export ANTHROPIC_API_KEY="sk-ant-..." ``` ## 3. Send a message ```python import anthropic client = anthropic.Anthropic() message = client.messages.create( model="claude-sonnet-4-20250514", max_tokens=1024, messages=[{"role": "user", "content": "Hello!"}] ) print(message.content[0].text) ``` ## You should see: ``` Hello! How can I help you today? ``` ## Next steps - [Add streaming →](./streaming.md) - [Use tools →](./tool-use.md) - [Full API reference →](./api-reference.md)
Notice the structure: three numbered steps, each with exactly one command or code block. No prose between steps. The developer copies, pastes, runs, sees the result. Total time: 90 seconds if they already have Python installed, 3 minutes if they don't.
A changelog is not just a list of changes. It is a communication contract with your developers. It says: "We respect your time. Here is exactly what changed, why, and what you need to do about it." The best changelogs follow this format:
markdown # Changelog ## 2024-03-15 — SDK v2.4.0 ### Added - `client.messages.stream()` — real-time token streaming ```python # New: streaming response with client.messages.stream(model="claude-sonnet-4-20250514", ...) as stream: for text in stream.text_stream: print(text, end="") ``` ### Changed - `max_tokens` now defaults to 1024 (was 256) **Migration:** If you relied on the old default, explicitly set `max_tokens=256` ### Fixed - SDK no longer retries on 400 errors (was incorrectly retrying non-retriable errors) ### Deprecated - `client.complete()` — use `client.messages.create()` instead. Will be removed in v3.0.
Key elements: (1) date and version number, (2) categorized by Added/Changed/Fixed/Deprecated (follows Keep a Changelog convention), (3) before/after code for any behavioral change, (4) explicit migration instructions for breaking changes.
Developer writing is a distinct skill. It is not technical writing (too dry), not marketing copy (too breathless), not academic writing (too dense). It sits at the intersection. Here are the rules:
1. Start with the code. Developers don't read prose first. They scan for a code block, read it, and then read the surrounding text if the code isn't self-explanatory. Put the code example before the explanation, not after.
2. Use the second person. "You create a client" not "The developer creates a client." Direct address creates a sense of doing, not reading about doing.
3. Show the output. Every code example should show what it returns. Developers need to verify they got the right thing. "This returns:" followed by the actual JSON/output.
4. Explain errors, not just success. The quickstart shows the happy path. The how-to guide must show what happens when things go wrong and how to fix it.
5. One concept per page. If a page answers two different questions, split it into two pages. A developer searching "how to handle rate limits" should not have to scroll past "how to authenticate" to find the answer.
How do you know your docs are failing? Three signals:
Signal 1: Support tickets about documented features. If developers are filing tickets about something your docs already cover, the docs are invisible, unfindable, or unclear. Track the ratio of "answered by docs" vs "answered by human" and set a target (>80%).
Signal 2: High bounce rate on quickstart. If developers land on the quickstart and leave without completing it, the friction is too high. Instrument the quickstart like a funnel: page load → first code copy → first API call → successful response. Find the drop-off.
Signal 3: Community workarounds. When developers write blog posts titled "How to ACTUALLY do X with [your API]," your docs have failed at X. These posts are gold — mine them for docs improvements.
At AI companies, you write entire doc categories that Stripe and Twilio never needed:
| Doc Category | What It Teaches | Why AI-Specific |
|---|---|---|
| Prompt Engineering Guide | How to structure system prompts, use few-shot examples, handle edge cases | Traditional APIs don't require natural language input design |
| Model Comparison Page | Which model for which task, cost/speed/quality tradeoffs, when to upgrade | No equivalent in traditional APIs — there's only one endpoint, not 5 models |
| Cookbook / Recipes | Complete working examples: RAG, agents, structured extraction, summarization | AI use cases are open-ended — developers need inspiration, not just reference |
| Migration Guide (model versions) | What changed between model versions, how to test, what might break | Model upgrades can change behavior in subtle ways — unlike API versioning |
| Safety & Usage Policies | Content filtering, rate limits, acceptable use, PII handling | AI outputs can be harmful — developers need guardrail education |
| Evaluation Guide | How to measure if the AI is working for your use case | "Is it working?" is a harder question for AI than for a payments API |
The frontier of developer docs is conversational. Instead of searching through pages, developers ask a question and get an answer synthesized from your docs, with code examples tailored to their specific integration. Vercel's v0, Supabase's AI docs assistant, and Cursor's codebase chat are early examples.
But this introduces new problems: hallucinated API endpoints, outdated code examples, and answers that are plausible but wrong. A staff-level DevRel engineer designs the grounding system — ensuring the AI only answers from verified, up-to-date documentation, cites its sources, and says "I don't know" when the docs don't cover a topic.
Track where developers drop off in your docs. Adjust Docs Quality and Code Examples to see how they affect the funnel. Each stage shows conversion rate.
An API is a contract. An SDK is an experience. The API says "send a POST request to /v1/messages with these headers and this JSON body." The SDK says client.messages.create(model="claude-sonnet-4-20250514", ...). Same operation, radically different developer experience. The SDK absorbs complexity: authentication, serialization, error handling, retries, pagination, streaming. Every hour you invest in SDK design saves thousands of hours across your developer community.
The metric that matters most is time-to-first-hello-world (TTFHW). This is the elapsed time from "developer decides to try your API" to "developer gets a successful response." At Stripe, this is under 5 minutes. At many enterprise APIs, this is measured in days. The SDK is the primary lever for reducing TTFHW.
A well-designed SDK has three layers. Each serves a different developer persona:
python # Layer 1: High-level convenience (90% of developers use this) # Optimized for TTFHW. Sensible defaults. Minimal config. from acme import Acme client = Acme() # Reads ACME_API_KEY from env automatically response = client.chat("Hello!") # One line. Done. # Layer 2: Full-featured (developers building production apps) # Explicit configuration. Type safety. All parameters exposed. client = Acme( api_key="sk-...", base_url="https://api.acme.com/v1", timeout=30.0, max_retries=3, ) response = client.messages.create( model="acme-large", max_tokens=1024, temperature=0.7, messages=[{"role": "user", "content": "Hello!"}], stream=True, ) # Layer 3: Raw access (developers with unusual needs) # Direct HTTP access with auth/retry still handled. response = client.request("POST", "/v1/custom-endpoint", body={...})
Error messages are the most underrated part of DX. When a developer hits an error, they are frustrated, confused, and one bad message away from switching to your competitor. The error message is your last chance to keep them.
python # BAD: What every auto-generated SDK does raise APIError("400 Bad Request") # BETTER: Tell them what went wrong raise APIError("Invalid parameter: max_tokens must be > 0, got -1") # BEST: Tell them what went wrong AND how to fix it raise InvalidParameterError( "max_tokens must be between 1 and 4096, but you passed -1. " "If you want unlimited output, omit the parameter entirely. " "See: https://docs.acme.com/errors/invalid-max-tokens" ) # STRIPE-LEVEL: Contextual, actionable, linked raise AuthenticationError( "No API key provided. You can set it via: \n" " 1. Environment variable: export ACME_API_KEY='sk-...'\n" " 2. Client constructor: Acme(api_key='sk-...')\n" "Get your key at: https://dashboard.acme.com/api-keys" )
| Decision | Option A | Option B | Best practice (and why) |
|---|---|---|---|
| Auth discovery | Require explicit key | Auto-read from env var | Auto-read with fallback to explicit. Reduces TTFHW by 2 minutes. |
| Defaults | Require all params | Sensible defaults | Defaults for everything optional. client.chat("Hi") should just work. |
| Retries | No retries | Auto-retry with backoff | Auto-retry 429/500/502/503 with exponential backoff. Devs shouldn't implement this. |
| Types | Dict-based | Typed models | Typed models (Pydantic/dataclass). Autocomplete in IDEs is worth the complexity. |
| Pagination | Manual (pass cursor) | Auto-iterator | Auto-iterator that handles cursors internally. for item in client.list(): ... |
The best DevRel teams don't just build SDKs — they build CLI tools that make the entire developer workflow faster. A CLI tool is the Swiss Army knife of developer experience: project scaffolding, API testing, debugging, deployment. Here is the anatomy of a great developer CLI:
python # acme-cli: the developer's best friend # Install: pip install acme-cli # Scaffold a new project $ acme init my-app --template=chatbot # Creates: my-app/ with working code, .env.example, README # Test your API key $ acme whoami # Output: Authenticated as user@company.com (org: Acme Corp) # Rate limit: 1000 req/min | Usage this month: 23% # Send a quick test message $ acme chat "What is the capital of France?" # Output: Paris is the capital of France. # [model: claude-sonnet-4-20250514 | tokens: 12 in / 8 out | 340ms] # Debug a failing request $ acme debug --last-error # Output: Last error at 2024-03-15 14:23:07 # Status: 429 Too Many Requests # Rate limit: 1000/min (you sent 1,247 in the last minute) # Fix: Add retry logic with backoff. See: docs.acme.com/rate-limits # Generate types from the API spec $ acme generate-types --output=./types/acme.d.ts
Modern SDKs must support streaming (for AI APIs) and async/await (for performance). These are the two areas where SDK design gets genuinely complex:
python # Streaming: three levels of abstraction # Level 1: Simple text stream (most common use case) with client.messages.stream( model="claude-sonnet-4-20250514", max_tokens=1024, messages=[{"role": "user", "content": "Tell me a story"}], ) as stream: for text in stream.text_stream: print(text, end="", flush=True) # Level 2: Event stream (for tool use, content blocks) with client.messages.stream(...) as stream: for event in stream: if event.type == "content_block_delta": print(event.delta.text, end="") elif event.type == "message_stop": print("\n[Done]") # Level 3: Async stream (for high-throughput apps) async with client.messages.stream(...) as stream: async for text in stream.text_stream: await websocket.send(text)
The key insight: each level exists for a different developer. Level 1 is for the quickstart. Level 2 is for production apps with complex output. Level 3 is for high-throughput servers. A great SDK makes all three easy, and the docs clearly guide developers to the right level for their use case.
Symptom: "Your SDK is hard to use." Diagnosis technique: Measure the "keystroke count" from zero to hello-world. Count every line of code, every config file, every environment variable, every terminal command. Stripe: ~12 keystrokes (install, import, create client, make call). If yours is >30, something is wrong.
Symptom: "I keep getting errors but don't know why." Diagnosis: Catalog every error message your SDK produces. Rate each on a 1-5 scale for actionability. Any score below 3 is a bug.
Symptom: "The SDK works but feels clunky." Diagnosis: Compare your SDK's API surface to the developer's mental model. If they think in terms of "send a message and get a response" but your SDK makes them think about "creating a message resource on the messages endpoint with a request body schema," there's an abstraction mismatch.
As a DevRel engineer, you often influence API design before it ships. Here are the principles that separate developer-friendly APIs from frustrating ones:
Principle 1: Predictable naming. If your API has create_message and list_messages, developers expect get_message and delete_message. The moment you name one endpoint fetch_msg and another remove_message, you've broken the mental model. Use consistent verbs (create/list/get/update/delete) and consistent nouns (always "message" not sometimes "msg" or "message_object").
Principle 2: Progressive disclosure. The simplest use case should require the fewest parameters. The API should work with just the required fields. Advanced features are opt-in via optional parameters. A developer who just wants to send a message shouldn't need to know about temperature, top_p, stop sequences, and system prompts.
Principle 3: Errors are features. A 400 error response is your last chance to help. Include: the field that was invalid, what was wrong with it, what the valid values are, and a link to the relevant docs page. Every error response should be a mini-tutorial on how to fix the problem.
json // BAD error response {"error": "Bad Request"} // GOOD error response { "type": "invalid_request_error", "message": "max_tokens must be between 1 and 4096, got -1", "param": "max_tokens", "docs_url": "https://docs.acme.com/api/messages#max_tokens" }
Principle 4: Idempotency by default. If a network request fails and the developer retries, the same thing should happen (not a duplicate charge, not a duplicate message). Design endpoints to be idempotent, or provide an idempotency_key parameter. Stripe does this for every POST endpoint, and it prevents an enormous class of production bugs.
AI SDKs have unique design challenges that traditional API SDKs don't face:
python # AI SDK: streaming is not optional — it's the primary interface # A 10-second blocking call feels broken. Streaming feels instant. # BAD: blocking (developer sees blank screen for 8 seconds) response = client.messages.create(model="claude-sonnet-4-20250514", ...) print(response.content[0].text) # GOOD: streaming (tokens appear immediately) with client.messages.stream(model="claude-sonnet-4-20250514", ...) as stream: for text in stream.text_stream: print(text, end="", flush=True)
| AI SDK Challenge | What Good Looks Like | What Developers Hit Without It |
|---|---|---|
| Streaming | First-class streaming with typed events (text, tool_call, stop) | 8-second blank screens, developers think the API is broken |
| Tool calling / function calling | Type-safe tool definitions, automatic JSON schema from types | Hand-writing JSON schemas, runtime type errors, malformed calls |
| Structured output | Pydantic/Zod integration that guarantees valid JSON | Regex parsing of model output, broken JSON, silent failures |
| Token counting | Client-side token estimator before API call | Surprise 400 errors when input exceeds context window |
| Cost estimation | Usage object with input/output tokens and cost estimate | Surprise bills, no ability to budget or optimize |
| Retry logic | Built-in exponential backoff for 429/500, configurable | Developers write their own retry loops (badly), or crash on rate limits |
pip install your-sdk to a streaming response in their terminal in under 60 seconds? If not, your quickstart has too many steps. Anthropic's Python SDK passes this test: pip install anthropic, set the API key, 3 lines of code, streaming output. Every extra step (create a project, configure a region, select a model tier) is a dropout point.The next generation of SDKs won't just wrap APIs — they'll include intelligence. Imagine an SDK that: auto-selects the right model based on task complexity, pre-validates inputs using a local schema before making network calls, suggests code fixes in error messages using the developer's actual code context, and generates type stubs dynamically for new API features before the SDK is updated.
Adjust SDK design choices and watch how they affect TTFHW. Each bar shows one step in the developer's journey from install to working code.
A demo is not a product. A demo is a proof of possibility. It answers the developer's unspoken question: "Can this API do what I need?" in under 5 minutes. The best demos create an emotional response — "Wow, that was easy" or "I didn't know you could do that." That emotion is what converts an evaluator into an integrator.
Demo engineering is a distinct skill from product engineering. Product code optimizes for maintainability, scale, and edge cases. Demo code optimizes for clarity, speed to comprehension, and wow factor. These are different objectives that require different design decisions.
| Type | Purpose | Complexity | Example |
|---|---|---|---|
| Quickstart snippet | Prove the API works | 5-15 lines | Send a message, get a response |
| Cookbook recipe | Solve a specific use case | 50-200 lines | Summarize a PDF, extract structured data |
| Reference app | Show a production-like integration | 500-2000 lines | Full chatbot with RAG, streaming, auth |
| Interactive playground | Let devs experiment without coding | Full web app | API explorer with parameter sliders |
The best demos follow a strict formula. Here is the cookbook recipe for a "Build X in Y minutes" demo:
python # Cookbook: "Build a CLI chatbot in 20 lines" # This is the ENTIRE working demo. No imports hidden. No config files. import anthropic client = anthropic.Anthropic() # Reads ANTHROPIC_API_KEY from env history = [] print("Chat with Claude! Type 'quit' to exit.\n") while True: user_input = input("You: ") if user_input.lower() == "quit": break history.append({"role": "user", "content": user_input}) response = client.messages.create( model="claude-sonnet-4-20250514", max_tokens=1024, messages=history, ) assistant_msg = response.content[0].text history.append({"role": "assistant", "content": assistant_msg}) print(f"Claude: {assistant_msg}\n")
A reference app is different from a demo. It shows developers how to structure a real application: error handling, configuration, testing, deployment. Here is the structure that works:
bash # reference-app/ README.md # Setup in 3 steps, architecture diagram .env.example # Every env var with comments explaining each requirements.txt # Pinned versions, minimal deps app/ main.py # Entry point (FastAPI/Flask), <100 lines chat.py # Core API integration, heavily commented config.py # All config in one place, env var loading tests/ test_chat.py # Shows how to mock the API for testing Dockerfile # One-command deploy deploy.md # Deploy to Vercel/Railway/Fly in 2 minutes
A cookbook is a collection of self-contained recipes, each solving one specific problem. Unlike tutorials (which tell a linear story), cookbooks are random-access — a developer finds the recipe they need and ignores the rest. The best cookbooks in the developer world: Anthropic's Cookbook (GitHub), OpenAI's Cookbook, Stripe's Recipes.
python # cookbook/summarize-pdf.py # Recipe: Summarize a PDF using Claude # Time: 5 minutes | Difficulty: Beginner # Prerequisites: pip install anthropic PyPDF2 import anthropic from PyPDF2 import PdfReader # Step 1: Extract text from PDF reader = PdfReader("document.pdf") text = "".join(page.extract_text() for page in reader.pages) # Step 2: Summarize with Claude client = anthropic.Anthropic() message = client.messages.create( model="claude-sonnet-4-20250514", max_tokens=1024, messages=[{ "role": "user", "content": f"Summarize this document in 3 bullet points:\n\n{text[:10000]}" }] ) print(message.content[0].text) # 💡 Swap PyPDF2 for pdfplumber if you need table extraction # 💡 For PDFs > 100 pages, chunk the text and summarize each chunk, # then summarize the summaries (recursive summarization)
Every cookbook recipe must: (1) state the problem in the title, (2) list prerequisites and time estimate, (3) be copy-paste-runnable, (4) include "swap this for that" comments for customization, (5) link to related recipes. A developer should never need to read another page to make the recipe work.
Symptom: "I followed the demo but it doesn't work." The number one cause is environment drift. The demo was written with SDK v2.3.1 and the developer installed v2.4.0 which changed the response format. Fix: pin versions in the demo, add a "tested with" badge, and run the demo in CI weekly.
Symptom: "The demo is cool but I can't adapt it to my use case." The demo is too opinionated. It hard-codes decisions that should be configurable. Fix: add comments at every decision point explaining "swap this for X if you need Y."
Symptom: "The demo works in the tutorial but breaks when I add it to my project." This is the integration gap — the demo works in isolation but fails when combined with the developer's existing code (different framework version, conflicting dependencies, different auth pattern). Fix: test your demo against the 3 most common frameworks (Next.js, Django, Express) and document known conflicts.
The frontier is personalized demos. When a developer lands on your docs, an AI generates a demo tailored to their specific use case, language, and framework. "Show me how to use your API with Next.js and Prisma to build a recipe search" — and it generates working code with their actual schema. Companies like Vercel (v0) and Replit are already moving here.
See how demo quality affects developer conversion at each stage. Toggle the "Show Result First" and "Self-Contained" principles to see their effect.
Developer content is not the same as developer documentation. Documentation answers "how do I use this?" Content answers "why should I care?" and "what's possible?" Documentation lives on your docs site. Content lives everywhere: your blog, YouTube, Twitter/X, Hacker News, conference stages, and (increasingly) inside AI chat interfaces that recommend tools to developers.
A staff-level DevRel engineer doesn't just write content — they design a content system that maps to the developer journey. Every piece of content has a purpose in the funnel:
| Stage | Developer state | Content type | Goal |
|---|---|---|---|
| Awareness | "I have a problem" | Blog posts, talks, social threads | Show that your platform solves their problem |
| Evaluation | "Could this work for me?" | Comparison guides, benchmarks, demos | Prove capability and differentiation |
| Activation | "Let me try it" | Quickstarts, tutorials, playgrounds | Get to first success fast |
| Retention | "I'm building with it" | Advanced guides, best practices, cookbooks | Deepen usage, prevent churn |
| Advocacy | "I love this" | Case studies, community features, swag | Turn users into evangelists |
Developers are the hardest audience to write for. They detect BS instantly. They skim aggressively. They leave if the first paragraph doesn't demonstrate value. Here are the rules:
Rule 1: Title = promise + specificity. "Build a RAG Chatbot with Claude in 15 Minutes" beats "Exploring AI-Powered Chat Solutions with Our Platform." The first tells you exactly what you'll get. The second sounds like marketing.
Rule 2: Code in the first scroll. If a developer has to scroll past three paragraphs of prose before seeing code, they bounce. Put a code snippet or a terminal command in the first 200 pixels of the page.
Rule 3: Every post teaches something. A product announcement that just says "we launched feature X" is invisible to developers. A post that says "How to use feature X to solve problem Y (with code)" is useful. Transform announcements into tutorials.
markdown # BAD: Product announcement that no developer will read "We're excited to announce Streaming Support! This new feature enables real-time response streaming for enhanced user experiences. Contact sales to learn more." # GOOD: Tutorial disguised as an announcement "# Stream Claude's Responses in Real-Time (3 Lines of Code) ```python with client.messages.stream(model="claude-sonnet-4-20250514", ...) as stream: for text in stream.text_stream: print(text, end="", flush=True) ``` That's it. Your users now see responses appear word-by-word instead of waiting for the full response. Here's how it works under the hood..."
Developer video follows different rules than general tech content. Developers watch videos to see things that are hard to communicate in text: live coding, debugging workflows, architectural decision-making in real-time. The format that works:
Short-form (1-3 minutes): One concept. "How to add streaming in 60 seconds." Screen recording, no face. Fast-paced. Optimized for Twitter/YouTube Shorts.
Mid-form (5-15 minutes): Tutorial with explanation. "Build a RAG chatbot from scratch." Face + screen. Paced for following along. Optimized for YouTube/blog embeds.
Long-form (30-60 minutes): Deep dive or conference talk recording. "The Architecture of our SDK." Slides + demos. Optimized for YouTube search/recommendations.
Twitter/X is the primary social platform for developer audiences. DevRel engineers who use it well build enormous reach and influence. The rules are different from corporate marketing accounts:
Format 1: The code snippet. A single code snippet that shows something surprising or useful. "TIL you can stream Claude's responses in 3 lines of Python:" + code screenshot. This format gets 5-10x engagement versus text-only posts.
Format 2: The thread. A 5-7 tweet thread that walks through building something. Each tweet is self-contained. First tweet hooks: "I built a RAG chatbot in 20 minutes. Here's exactly how." Thread gets bookmarked, shared, and referenced months later.
Format 3: The reaction. When something notable happens in the ecosystem (new model release, framework update, viral project), post your take within 2 hours. Speed matters on social. "Just tried [new thing] with our API. Here's what I found:" + working code snippet.
Format 4: The developer showcase. Share what community members built. "Check out what @developer built with our API: [screenshot]. The source code is open: [link]." This builds community loyalty and generates content you didn't have to create.
When a developer Googles "how to stream API responses python," your content should be the first result. Developer SEO is different from general SEO because the queries are highly specific and technical:
Target "how to" queries. "How to handle rate limits in Python" has clear intent. Optimize for these, not broad terms like "API documentation."
Use the exact library/framework names. Developers search "anthropic python streaming" not "AI API streaming tutorial." Include the specific SDK name, language, and feature in titles and headings.
Answer StackOverflow questions. When a developer asks about your API on StackOverflow, answer it thoroughly — with working code, not a link to your docs. This builds SEO backlinks and community trust simultaneously.
A DevRel content calendar is not a marketing calendar. It's driven by three inputs: (1) community questions (what developers are asking), (2) product roadmap (what's launching), and (3) ecosystem events (conferences, framework releases, competitor moves). Here is a monthly planning framework:
yaml # Monthly content plan — March 2024 community_driven: # From top Discord/GitHub questions - title: "How to Handle Rate Limits Gracefully" format: Blog post + cookbook recipe signal: "18 Discord questions about 429 errors this month" owner: DevRel Engineer publish: Week 1 - title: "Streaming Best Practices for Production Apps" format: Tutorial + video signal: "12 GitHub issues about streaming disconnects" owner: DevRel Engineer + Technical Writer publish: Week 2 product_driven: # From product roadmap - title: "Introducing Tool Use: Let Claude Call Your APIs" format: Announcement blog + quickstart + cookbook signal: "Tool use feature launching March 15" owner: DevRel Lead + Product Marketing publish: Week 3 (launch day) ecosystem_driven: # From external events - title: "Building AI Agents with LangChain + Our API" format: Tutorial + reference app signal: "LangChain 0.2 released, 40% of our users use LangChain" owner: Developer Advocate publish: Week 4
Every piece of content should have a measurable goal. Not "get views" but a specific conversion action:
| Content type | Primary metric | Secondary metric | Benchmark |
|---|---|---|---|
| Quickstart | Completion rate | Time to complete | >60% completion, <5 min |
| Tutorial | Completion rate | Subsequent API usage | >40% completion |
| Blog post | Blog-to-signup conversion | Social shares | >2% conversion |
| Conference talk | Talk-attributed signups | Feedback score | 50+ signups per major talk |
| Cookbook recipe | Copy events on code blocks | Associated API usage | >30% copy rate |
Symptom: Blog gets traffic but no signups. Your content attracts readers but doesn't convert. Fix: add a clear, contextual CTA (call-to-action) after the code example. Not "Sign up for our platform" but "Run this code yourself — get your free API key in 30 seconds."
Symptom: Great content, zero distribution. You wrote a brilliant tutorial that 12 people read. Fix: content without distribution is wasted. Cross-post to dev.to, Hacker News, relevant subreddits. Share code snippets on Twitter with the key insight. Distribution is half the job.
Symptom: Content is getting stale. Tutorials reference SDK v1 but you're on v3. Fix: implement a "content freshness" system. Every page has a "last verified" date. Quarterly audit: test every code example. Anything that fails gets flagged for update or removal. Stale content is worse than no content because it destroys trust.
Beyond ad-hoc content, some DevRel teams build structured education programs. These create deep engagement and produce the most loyal developers:
Certification programs. "Acme Certified Developer" — a structured learning path with quizzes, projects, and a credential. Examples: AWS Certified, Stripe Integration Specialist. These work because developers put certifications on their LinkedIn, which is free marketing forever. But the certification must have actual value (test real skills, not memorization) or it becomes a joke in the community.
Workshops and bootcamps. "Build an AI chatbot in 2 hours" — a structured, hands-on, instructor-led session. Can be in-person (at conferences) or virtual (webinar format). The key is that every attendee leaves with a working project. If 50% of attendees fail to complete the workshop, your pacing or prerequisites are wrong.
Hackathons. "Build something amazing with our API in 48 hours." Hackathons generate: (1) creative use cases you never imagined, (2) content (every project is a potential case study), (3) feedback (hackers find edge cases fast), and (4) loyalty (hackathon participants are 3x more likely to become long-term users). Budget: $5K-$20K in prizes, plus API credits for all participants.
yaml # Hackathon planning template format: "48-hour virtual hackathon" participants: "200 target (accept 250, expect 150 to submit)" prizes: - "Grand Prize: $5,000 + featured on our blog" - "Best DX: $2,000 (project that improves developer experience)" - "Most Creative: $2,000 (wildest use case)" - "Community Choice: $1,000 (voted by participants)" support: - "Dedicated Discord channel with engineers on call" - "Office hours at 2pm and 8pm each day" - "$100 API credits per participant" judging: "Technical quality (30%), creativity (30%), polish (20%), documentation (20%)" follow_up: "Feature top 5 projects on blog, invite winners to champions program"
Developers increasingly discover tools through AI assistants. When a developer asks ChatGPT "what's the best API for text summarization?", does your platform get recommended? This is a new SEO frontier: optimizing for LLM training data. Structured docs, clean API descriptions, and abundant code examples make your platform more likely to be recommended by AI assistants.
The implication for content strategy: your docs and blog posts need to be machine-readable as well as human-readable. This means: clear H1/H2 structure, structured data markup, consistent terminology (don't call the same feature three different names), and code examples that include the full import-to-output flow (so an AI can recommend a complete working snippet, not just a fragment).
Adjust content quality at each stage of the developer journey. Watch how improvements at each level compound through the funnel.
A developer community is not a support channel. It is an ecosystem where developers help each other, share what they've built, contribute to the platform, and form professional relationships. The platform benefits because community members answer each other's questions (reducing support load), build integrations (expanding the ecosystem), and recruit other developers (organic growth). But this only works if the community is genuinely healthy. A neglected Discord with unanswered questions is worse than no Discord at all.
A healthy developer community has three tiers of engagement. Your job is to design the infrastructure and incentives that move developers up the tiers:
| Tier | Size | Behavior | What they need |
|---|---|---|---|
| Consumers | 90% of community | Read docs, lurk in Discord, use the API | Great docs, answered questions (even if not theirs), working examples |
| Contributors | 9% of community | Answer questions, report bugs, build integrations, write blog posts | Recognition, early access, direct line to the team, swag |
| Champions | 1% of community | Evangelize the platform, mentor others, speak at events, contribute core code | Deep partnership, advisory role, co-marketing, paid programs |
Different channels serve different purposes. Don't try to make one channel do everything:
Discord/Slack: Real-time help, casual discussion, showcase channel where developers share what they built. Best for: active developers who need quick answers. Risk: unanswered questions visible to everyone.
GitHub Discussions: Long-form technical discussions, feature requests, RFCs. Best for: searchable, permanent conversations. Risk: can feel too formal, low engagement.
Forum (Discourse): Structured Q&A with categories, search, and accepted answers. Best for: building a searchable knowledge base. Risk: requires critical mass to feel alive.
Twitter/X: Quick tips, announcements, developer showcases. Best for: broad reach, attracting new developers. Risk: ephemeral, can't go deep.
yaml # Developer Champions Program Structure name: "Acme Developer Champions" cohort_size: 20-30 # Small enough to be personal term: "6 months, renewable" selection_criteria: - Active community contributor (6+ months history) - Published content about the platform (blog, video, talk) - Demonstrated technical depth - Positive community reputation benefits: - Early access to new features (2-4 weeks before GA) - Direct Slack channel with engineering team - Conference talk support (CFP review, travel budget) - $500/month API credits - Annual champion summit (in-person) - Co-marketing (featured on website, case studies) expectations: - 2+ community contributions per month (answers, content, demos) - Quarterly feedback session with product team - Participate in beta testing for major releases
Metric 1: Question response time. Median time from question posted to first helpful response. Target: <4 hours during business hours. If this is >24 hours, your community feels dead. Hire community moderators or create an "on-call for Discord" rotation.
Metric 2: Answer ratio. Percentage of questions that get a satisfactory answer. Target: >85%. Below 70% means developers learn that asking here is useless — they leave and never come back.
Metric 3: New vs. returning members. A healthy community has 20-40% new members each month. Below 10% means you're not growing. Above 60% means you're not retaining — it's a revolving door.
If your product has open-source components (an SDK, a framework, example repos), you need to manage the open-source community as a distinct entity. Open-source health has its own metrics and failure modes:
yaml # Open Source Health Scorecard responsiveness: issue_first_response: "Median time to first response on new issues" target: "< 48 hours" current: "72 hours (needs improvement)" pr_welcome: first_pr_merged_rate: "% of first-time contributors whose PR gets merged" target: "> 60%" how: "Good first issue labels, PR template, CONTRIBUTING.md, CI that runs on forks" documentation: - README with badges (build status, version, license) - CONTRIBUTING.md with setup instructions - CODE_OF_CONDUCT.md - CHANGELOG.md following Keep a Changelog - Issue and PR templates bus_factor: metric: "Number of people who can merge PRs and cut releases" target: ">= 3" risk: "If only 1 person can release, vacations and departures block the community"
The most common open-source community failure: the graveyard of issues. Issues pile up with no response, PRs sit for weeks without review, and contributors stop contributing because they feel ignored. This is worse than having no open-source presence at all — it signals that the company doesn't care. If you can't maintain a repo, don't make it public.
As your community grows past 1,000 active members, manual management becomes impossible. Here are the automations that scale:
python # Community automation stack # 1. Auto-label new GitHub issues # Use a classifier (keyword or LLM) to tag: bug, feature, docs, question def auto_label_issue(issue): if "error" in issue.body.lower() or "crash" in issue.body.lower(): issue.add_label("bug") elif "how do I" in issue.body.lower(): issue.add_label("question") issue.add_comment("Thanks for asking! While you wait for a response, " "check out our FAQ: docs.acme.com/faq") # 2. Stale issue bot # After 30 days with no activity, label as stale. # After 60 days, close with a friendly message. # 3. Welcome bot for first-time contributors def welcome_first_contributor(pr): if pr.author.first_contribution: pr.add_comment( "Welcome to the project! 🎉 Thanks for your first contribution. " "A maintainer will review your PR within 48 hours. " "In the meantime, check out CONTRIBUTING.md for our style guide." ) # 4. Discord thread auto-close # If a question gets a ✅ reaction, auto-mark as resolved. # Weekly digest: "23 questions asked, 19 resolved (83% answer rate)"
Prompt sharing. Developers share prompts that work — system prompts, few-shot examples, chain-of-thought patterns. Create a #prompt-library channel, pin the best ones, feature them in your cookbook.
Hallucination reports. When a developer reports "the model said X but the correct answer is Y," build a feedback pipeline: community report → verified → added to eval dataset → used in training. Tell the developer their report improved the model. Frustrated user → advocate.
Hackathons with API credits. Give developers $100 in credits and 48 hours. The best projects become case studies and blog posts. Anthropic, OpenAI, and Mistral all run these quarterly with absurdly high conversion rates.
AI is changing community management. Bots that auto-answer common questions (from docs), auto-tag issues by category, detect sentiment shifts (early warning for community anger), and surface unanswered questions for human triage. The risk: developers hate talking to bots when they think they're talking to humans. Always be transparent. Label AI answers clearly and make human escalation easy.
Adjust community management inputs and watch the health metrics change. Low response time and high answer quality create a virtuous cycle.
A conference talk is the highest-bandwidth content format in DevRel. In 30 minutes, you reach 200-2000 developers in the room, plus thousands more via the recording. A good talk doesn't just explain a technology — it changes how developers think about a problem. And unlike a blog post that competes with a million other blog posts, a conference stage gives you undivided attention.
But here's the thing most DevRel engineers get wrong: the talk is not about your product. The talk is about the developer's problem. Your product is the tool that solves it. The moment the audience feels like they're watching a product demo, you've lost them. The moment they feel like they're learning something genuinely useful, you've won — and they'll remember your product forever.
Every great developer talk follows an emotional arc. The audience should feel:
A CFP (Call for Papers) submission is your pitch to get on stage. Conference organizers review hundreds of submissions. Here's what wins:
markdown # WINNING CFP structure Title: "Building Fault-Tolerant AI Agents (Lessons from 1M Conversations)" # Why it works: # - Specific topic (fault-tolerant agents, not "AI") # - Credibility signal (1M conversations = real experience) # - Promise of practical lessons (not theory) Abstract: "Last year, our AI agents handled 1 million customer conversations. They also failed 47,000 times. This talk is about those failures. I'll show the 5 most common failure modes we discovered, the architectural patterns we built to handle them, and the monitoring systems that catch new failures before users notice. You'll leave with a checklist for making your own AI agents production-ready." # Key elements: # 1. Opens with a story, not a feature list # 2. Specific numbers (credibility) # 3. Clear takeaway ("you'll leave with a checklist") # 4. Not a product pitch — it's about the PROBLEM
Live coding is the most impressive thing you can do on stage — and the most dangerous. When it works, the audience is riveted. When it fails, it's painful for everyone. Rules for surviving live coding:
Rule 1: Have a safety net. Pre-record a video of the demo working. If live coding catastrophically fails, switch to the video: "Let me show you what this looks like when the demo gods are smiling."
Rule 2: Use large font (24pt+). People in the back row need to read your code. This also forces you to write short lines, which is good for comprehension.
Rule 3: Type less than you think. Pre-type boilerplate. Use snippets. The audience doesn't need to watch you type import statements. They need to see you write the 5 lines that matter.
Rule 4: Narrate everything. "I'm creating a client... now I'm sending a message with streaming enabled... and watch — the response appears word by word." The narration is the talk. The code is the visual aid.
Live coding will go wrong. It is not a question of if, but when. Here is the survival guide for the most common disasters:
| Disaster | What happens | Recovery |
|---|---|---|
| API key exposed | You accidentally show your real API key on the big screen | Immediately revoke the key from your phone. Laugh it off: "Well, you all just saw how easy our key rotation is." |
| Network down | Conference WiFi dies mid-demo | Switch to pre-recorded video. "Demo gods are fickle today, but I recorded a backup." OR: have a local mock server that simulates the API. |
| Wrong version | You installed SDK v3 but your code is for v2 | This is why you run your demo in a Docker container or venv. If it fails, explain the version mismatch — it's a teaching moment about dependency management. |
| Typo in code | Syntax error, audience sees red text | Don't panic. Debug it on stage. "Let's see — ah, missing comma on line 12. This is real development, folks." Audiences LOVE seeing real debugging. |
bash # Pre-talk checklist (run 30 minutes before your slot) # 1. Test the network curl https://api.acme.com/v1/health # Verify API is reachable # 2. Test your demo end-to-end python demo.py # Run the exact script you'll demo # 3. Set font size # VS Code: Ctrl+= until text is readable from 50 feet # Terminal: minimum 24pt font # 4. Hide sensitive info export ACME_API_KEY="sk-demo-..." # Use a demo-only key # Close all other browser tabs (no embarrassing notifications) # Turn off Slack/email notifications # 5. Have backup ready # Pre-recorded video in a separate tab, ready to play
Staff-level DevRel engineers are recognized speakers. This doesn't happen overnight. The progression:
Year 1: Local meetups. 20-50 person audiences. Practice your craft. Get feedback. Record yourself.
Year 2: Regional conferences. 100-300 person audiences. Submit to 10+ CFPs, get accepted at 2-3. Build a portfolio of recorded talks.
Year 3+: Keynotes and flagship conferences (KubeCon, PyCon, QCon, Strange Loop). Invited talks. Your name on the speaker list draws attendees.
The frontier includes: AI-generated talk visuals (describe a diagram, AI renders it live), real-time translation for global audiences, interactive audience polls embedded in live coding, and post-talk AI that generates a personalized resource list for each attendee based on the questions they asked.
Allocate time across the five sections of your talk. The engagement curve shows predicted audience attention based on your allocation.
The most valuable thing a DevRel engineer does isn't outbound (docs, talks, demos). It's inbound: translating developer signal into product decisions. You are the only person in the company who talks to hundreds of developers every week. You see patterns that product managers can't see from NPS surveys and that engineers can't see from error logs. The feedback loop is your superpower — and most companies waste it.
The problem is that developer feedback is noisy, unstructured, and scattered across 15 channels: Discord, GitHub Issues, Twitter, support tickets, conference hallway conversations, sales call notes, community forum posts, and DMs. A staff-level DevRel engineer builds a system that turns this noise into signal.
python # Feedback tracker schema class FeedbackItem: id: str source: str # "discord", "github", "twitter", "support" category: str # "bug", "friction", "feature_request" product_area: str # "sdk", "api", "docs", "dashboard" summary: str # One-line description developer_quote: str # Exact words from the developer developer_tier: str # "new", "active", "churned", "champion" frequency: int # How many developers reported this impact: str # "blocker", "painful", "nice-to-have" linked_issues: list[str] # GitHub issues, support tickets status: str # "new", "triaged", "in_progress", "shipped", "closed" shipped_date: str | None loop_closed: bool # Did we tell the reporter it was fixed?
Developers say: "Your auth is broken." This could mean 15 different things. Your job is to translate:
| Developer says | What they might mean | What product team needs to hear |
|---|---|---|
| "Auth is broken" | OAuth flow redirects to wrong URL on mobile | Bug: OAuth redirect_uri doesn't handle mobile deep links (affects 12% of mobile users) |
| "SDK is slow" | Cold start takes 3 seconds due to loading all schemas | Perf: SDK init time is 3x competitor because schemas are loaded eagerly, not lazily |
| "Docs are bad" | Can't find how to do pagination | Gap: No pagination guide exists. 8 support tickets in 2 weeks about cursor pagination |
| "This API sucks" | Response format changed without notice | Process: Breaking change shipped without migration guide or changelog entry |
The weekly "Voice of the Developer" report is your primary artifact for influencing product decisions. Here is the template that actually gets read by product managers and engineering leads:
markdown # Voice of the Developer — Week of March 11, 2024 ## Top 5 Issues by Frequency ### 1. Streaming disconnects on long responses (23 reports) Sources: Discord (14), GitHub (6), Support (3) Impact: BLOCKER — developers can't build production chat apps Developer tier: Active (production users) Quote: "Stream cuts off after ~30 seconds. My users see truncated responses. I've had to add client-side polling as a workaround." Business impact: 3 enterprise prospects blocked on this Suggested priority: P0 — fix this week Related: SDK issue #847, API issue #1203 ### 2. No TypeScript SDK (18 reports) Sources: Twitter (8), Discord (7), GitHub (3) Impact: PAINFUL — TypeScript devs are using raw fetch() Developer tier: Mixed (new + active) Quote: "I love the API but I'm not going to maintain my own type definitions. I'll switch to [competitor] if they ship TS first." Business impact: Estimated 30% of evaluators are TypeScript-first Suggested priority: P1 — start this sprint ## Wins This Week - Tutorial completion rate up 15% after restructure (67% → 77%) - Discord response time improved to 2.1 hours (target: 2h) ✓ - 4 community blog posts published about our API ## Sentiment Trend Overall: Positive (72%) — up from 68% last week Negative drivers: streaming issues, missing TS SDK Positive drivers: new cookbook recipes, fast Discord responses
Failure mode 1: Feedback goes nowhere. Developers report issues, nothing happens, they stop reporting. Fix: visible status tracking. Use a public roadmap or GitHub project board. When something ships, tag the developers who requested it.
Failure mode 2: Volume without signal. You have 500 feedback items but no prioritization. Fix: frequency-weighted scoring. An issue reported by 50 developers ranks higher than one reported by 1, even if the single report is from a VIP. Exception: if the VIP is about to churn and represents $100K ARR.
Failure mode 3: DevRel has no seat at the table. You present the Voice of the Developer report but product ignores it. Fix: attach business impact. "Developers who hit error X have a 40% higher churn rate" is more persuasive than "developers are frustrated with error X."
The frontier is automated feedback analysis: LLMs that read every Discord message, support ticket, and GitHub issue, cluster them into themes, track sentiment over time, and auto-generate the weekly Voice of the Developer report. Early versions exist at companies like Anthropic and OpenAI. The risk: LLMs that summarize feedback incorrectly can lead product teams to build the wrong thing. Always have a human review the AI-generated analysis.
Adjust how quickly you capture, route, and close feedback loops. Watch how it affects developer satisfaction and retention.
A product launch is a one-shot event. You get one chance to make a first impression. If developers try your new feature on launch day and the docs are incomplete, the SDK doesn't support it yet, and the quickstart has a bug — they won't come back to try again next week. They'll tweet "tried X, doesn't work" and move on. The DevRel engineer's job is to ensure that launch day is flawless for the developer, which means starting launch prep weeks before the feature is "done."
This is the artifact that separates amateur launches from professional ones. Every item must be done before the feature goes live:
markdown # Launch Readiness Checklist ## Documentation (T-14 days) - [ ] API reference updated with new endpoints/parameters - [ ] Quickstart guide for the new feature - [ ] Migration guide (if replacing/changing existing behavior) - [ ] Changelog entry with before/after code examples - [ ] FAQ for anticipated questions ## SDK (T-7 days) - [ ] Python SDK updated and published to PyPI - [ ] Node SDK updated and published to npm - [ ] Go SDK updated (if applicable) - [ ] All SDK tests passing with new feature - [ ] SDK version bump follows semver correctly ## Content (T-3 days) - [ ] Blog post drafted and reviewed - [ ] Demo app or cookbook recipe ready - [ ] Social media posts queued (Twitter thread, LinkedIn) - [ ] Video walkthrough recorded (if applicable) ## Support Readiness (T-1 day) - [ ] Support team briefed on new feature - [ ] Known limitations documented - [ ] Escalation path defined for launch-day issues - [ ] Status page updated with expected behavior ## Launch Day (T-0) - [ ] Feature flag flipped - [ ] Blog post published - [ ] Docs deployed - [ ] SDK versions pinned in all examples - [ ] Social media posts sent - [ ] Community channels notified - [ ] Monitoring dashboards watched for 4 hours post-launch
Breaking changes are inevitable. APIs evolve. The question is not "will we break developers?" but "how gracefully can we break them?" Here is the hierarchy of developer-friendly change management:
| Strategy | Developer impact | When to use |
|---|---|---|
| Additive change | Zero — new fields/endpoints, old ones unchanged | Always prefer this. Add, never remove. |
| Deprecation with overlap | Low — old way still works, warnings in logs/SDK | When you must change behavior. Give 6+ months overlap. |
| Versioned API | Medium — developers choose when to migrate | Major architectural changes. Stripe model: API version per request. |
| Hard breaking change | High — developers must change code to keep working | Last resort. Security fixes, legal requirements only. |
When a breaking change ships, the migration guide is the difference between "smooth upgrade" and "community meltdown." A migration guide is not a changelog entry. It is a step-by-step recipe that transforms old code into new code. Here is the template:
markdown # Migrating from v1 to v2 ## What changed and why The `complete()` method has been replaced by `messages.create()`. The new method supports multi-turn conversations, streaming, and tool use. The old method only supported single-turn completion. ## Step 1: Update your SDK ```bash pip install --upgrade acme-sdk>=2.0.0 ``` ## Step 2: Update your code Before (v1): ```python response = client.complete( prompt="Hello", max_tokens=100, ) print(response.text) ``` After (v2): ```python response = client.messages.create( model="acme-v2", messages=[{"role": "user", "content": "Hello"}], max_tokens=100, ) print(response.content[0].text) ``` ## Step 3: Update error handling v2 raises typed exceptions instead of generic APIError: - `RateLimitError` (was: APIError with status 429) - `AuthenticationError` (was: APIError with status 401) - `InvalidRequestError` (was: APIError with status 400) ## Common issues **"AttributeError: 'Client' has no attribute 'complete'"** You're running v2 SDK with v1 code. Follow Step 2 above. **"TypeError: messages must be a list"** v2 requires a list of message objects, not a string. Wrap your prompt: `[{"role": "user", "content": your_prompt}]` ## Need help? - Discord: #migration-help channel - GitHub: Open an issue tagged "migration" - Email: devrel@acme.com
client.complete and replace with client.messages.create."Before a major launch, run a beta program. Invite 20-50 developers (mix of champions and new users) to test the feature for 2-4 weeks. The beta serves three purposes: (1) find bugs before GA, (2) validate that docs and SDK are comprehensible, (3) generate early content (blog posts, demos) that go live on launch day.
python # Beta program feedback template class BetaFeedback: developer_id: str time_to_working_integration: int # minutes docs_rating: int # 1-5 sdk_rating: int # 1-5 blockers_hit: list[str] # what stopped them confusion_points: list[str] # what was unclear feature_gaps: list[str] # what's missing would_recommend: bool verbatim_feedback: str # in their own words
Every launch teaches you something. The post-mortem is how you capture that knowledge. A DevRel post-mortem is different from an engineering post-mortem — it focuses on the developer impact, not just the technical root cause:
markdown # Launch Post-Mortem: Tool Use API (March 15, 2024) ## What happened Tool Use launched at 10am PT. By 11am, 47 developers reported that the Python SDK's `tool_use` parameter was spelled `tool_usage` in the SDK but `tool_use` in the docs and API. The TypeScript SDK had the correct spelling. This caused a 2-hour window where every Python developer who followed the docs got a 400 error. ## Impact - 47 support tickets in 2 hours - 200+ Discord messages - 3 negative tweets from high-profile developers - Estimated 500 developers hit the bug before hotfix ## Root cause SDK was generated from an older API spec that used `tool_usage`. The API team renamed the parameter but the SDK codegen wasn't re-run. ## What we did well - Acknowledged the issue on Discord within 15 minutes - Hotfix SDK published to PyPI within 90 minutes - Every affected developer was personally replied to ## What we'll do differently - Add "SDK parameter name matches API docs" as a CI check - Add "run the quickstart with the new SDK" to launch checklist - Create a #launch-war-room Slack channel for day-of coordination
Symptom: Feature launches but adoption is flat. Diagnosis: developers don't know it exists (distribution failure) or they tried it and bounced (experience failure). Check: blog post views vs. quickstart page views vs. first API calls. The drop-off tells you where it failed.
Symptom: Flood of support tickets on launch day. Diagnosis: usually one of three things: (1) docs don't match actual behavior (shipped a different version than documented), (2) SDK doesn't support the feature yet (backend team shipped without coordinating with SDK team), or (3) error messages don't explain what changed.
Symptom: Beta went great but GA is a disaster. Diagnosis: beta testers had context that GA users don't. Beta users talked to you directly, got workarounds verbally, and forgave rough edges because they felt special. GA users just have the docs. Fix: use beta feedback to write the docs that turn every GA user into someone with the same context as your beta testers.
The frontier is moving from "big bang" launches to continuous deployment with progressive disclosure. Features ship behind feature flags, documentation updates automatically from code changes, changelogs are auto-generated from commit messages, and developers can opt into new behavior with a single config change. The DevRel role shifts from "launch coordinator" to "progressive disclosure designer."
Check off launch components and watch the readiness score. Missing items show risk of launch-day failures.
DevRel has a measurement problem. Marketing measures leads. Sales measures revenue. Engineering measures uptime and velocity. What does DevRel measure? This question has killed DevRel teams — when leadership can't see the impact, DevRel becomes the first team cut in a downturn. A staff-level DevRel engineer solves this by building a measurement framework that ties every DevRel activity to business outcomes.
The core framework is a funnel, similar to a marketing funnel but with developer-specific stages:
| Stage | Metric | How to measure | Benchmark |
|---|---|---|---|
| Awareness | Reach | Blog views, talk attendees, social impressions | 10K+ monthly unique visitors to docs |
| Signup | Registration rate | Docs visitors → account creation | 5-15% conversion |
| Activation | Time-to-first-API-call | Time from signup to first successful request | <10 minutes (Stripe: <5 min) |
| Engagement | API calls / week | Usage data from your API gateway | Growing week-over-week |
| Retention | Monthly active developers | Unique API keys with ≥1 call in 30 days | >80% month-over-month |
| Advocacy | Referrals, content created | Community contributions, mentions, shared demos | Top 5% of devs creating content |
A developer watches your conference talk, reads your blog post a week later, joins your Discord a month later, and signs up three months later. What caused the signup? This is the attribution problem, and it's why DevRel measurement is hard.
The honest answer: you can't perfectly attribute individual conversions. What you can do is measure correlation at scale:
python # Attribution analysis: do DevRel-touched developers convert better? # Cohort A: Developers who interacted with DevRel content # (attended a talk, read a tutorial, joined Discord) cohort_a = developers.filter(devrel_touch=True) # Cohort B: Developers who signed up organically # (found docs via Google, no known DevRel touchpoint) cohort_b = developers.filter(devrel_touch=False) # Compare activation rates a_activation = cohort_a.filter(first_api_call__isnull=False).count() / cohort_a.count() b_activation = cohort_b.filter(first_api_call__isnull=False).count() / cohort_b.count() # Result: DevRel-touched developers activate 2.3x more often # This is the number you take to leadership print(f"DevRel cohort activation: {a_activation:.1%}") print(f"Organic cohort activation: {b_activation:.1%}") print(f"Lift: {a_activation/b_activation:.1f}x")
| Vanity metric (feels good) | Real metric (drives decisions) |
|---|---|
| Twitter followers: 50K | Developers who signed up from Twitter: 340 |
| Blog post views: 100K | Blog-to-signup conversion rate: 2.3% |
| Discord members: 10K | Discord members who made an API call: 1,200 |
| Conference talks given: 12 | Conference-attributed signups: 890 |
| GitHub stars: 5K | Contributors who submitted PRs: 47 |
A staff-level DevRel engineer doesn't just track metrics — they build the dashboard that makes metrics visible to the entire company. Here is the schema for a developer analytics pipeline:
python # Developer analytics pipeline # Ingest events from multiple sources, compute funnel metrics class DeveloperEvent: developer_id: str timestamp: datetime event_type: str # "docs_visit", "signup", "first_call", "integration", "churn" properties: dict # {"page": "/quickstart", "sdk": "python", "version": "2.3.1"} source: str # "docs", "api_gateway", "discord", "github" # Funnel computation def compute_weekly_funnel(events: list[DeveloperEvent]) -> dict: devs = group_by_developer(events) return { "docs_visitors": count_unique(devs, "docs_visit"), "signups": count_unique(devs, "signup"), "activated": count_unique(devs, "first_call"), "time_to_first_call_p50": percentile(50, time_between("signup", "first_call")), "time_to_first_call_p90": percentile(90, time_between("signup", "first_call")), "7d_retained": count_active_after(7, "days"), "30d_retained": count_active_after(30, "days"), } # Cohort analysis: DevRel-touched vs organic def devrel_lift(events, devrel_touches): touched = set(t.developer_id for t in devrel_touches) touched_activated = [e for e in events if e.developer_id in touched and e.event_type == "first_call"] organic_activated = [e for e in events if e.developer_id not in touched and e.event_type == "first_call"] return { "touched_activation_rate": len(touched_activated) / len(touched), "organic_activation_rate": len(organic_activated) / (len(events) - len(touched)), "lift": touched_rate / organic_rate }
Symptom: Leadership says "DevRel isn't moving the needle." Diagnosis: you're reporting activity metrics (talks given, posts written) instead of outcome metrics (activation rate, retention lift). Fix: always present DevRel metrics in terms of business impact. Not "we published 10 tutorials" but "tutorials we published drove a 15% increase in activation rate for the features they cover."
Every quarter, present a DevRel review to leadership. This is your opportunity to demonstrate impact and secure budget. The structure that works:
markdown # Q1 2024 DevRel Review ## Key Metrics (trend arrows: ↑ better, ↓ worse) - Time-to-first-API-call: 4.2 min (↑ was 8.1 min in Q4) - Monthly active developers: 12,400 (↑ 23% QoQ) - Discord answer rate: 91% (↑ was 78%) - Tutorial completion rate: 72% (↑ was 54%) - Developer satisfaction: 4.3/5 (↑ was 3.9) ## What drove the improvements 1. Rewrote quickstart (TTFHW dropped 48%) 2. Launched Champions program (12 champions answering 40% of Discord Qs) 3. Published 8 cookbook recipes for top use cases ## What's not working 1. TypeScript SDK still missing — losing 30% of evaluators 2. Video content underperforming (low production quality) 3. Feedback loop to product is slow (avg 6 weeks to resolution) ## Q2 plan 1. Ship TypeScript SDK (hire: DX engineer, $180K budget) 2. Upgrade video setup ($5K one-time investment) 3. Weekly product sync to accelerate feedback loop ## Budget request: $85K incremental - DX engineer: $45K/quarter (prorated) - Conference travel: $25K (PyCon, KubeCon, AI Engineer Summit) - Champions program: $10K (API credits, swag, summit) - Video equipment: $5K
The frontier is developer intelligence — platforms that track every developer touchpoint (docs visited, API calls made, errors hit, support tickets filed, content consumed) and build a unified profile. This enables personalized developer journeys: if a developer is stuck on authentication, proactively surface the auth tutorial. Companies like Common Room and Orbit are building this. The DevRel team becomes the analyst that interprets the data and acts on it.
A live funnel showing developer progression. Adjust DevRel investment at each stage to see the impact on total active developers.
No API exists in a vacuum. Developers use your API alongside dozens of other tools: frameworks (Next.js, Django), databases (Postgres, Redis), deployment platforms (Vercel, AWS), and other APIs (Stripe for payments, Twilio for messaging). A technical partnership is a mutual integration that makes both products better when used together. The DevRel engineer is often the one who builds the integration, writes the guide, and maintains the relationship.
| Integration type | Effort | Value | Example |
|---|---|---|---|
| Documentation link | Low — 1 day | SEO, cross-referral | "Using our API with Vercel — deployment guide" |
| Code integration | Medium — 1-2 weeks | Reduced friction, new use cases | LangChain integration module, Zapier connector |
| Native integration | High — 1-3 months | Deep platform presence | Marketplace listing, built-in support in partner's dashboard |
| Co-built product | Very high — quarters | New market, shared customers | Joint product (e.g., Vercel AI SDK + Anthropic) |
The integration guide is the artifact that determines whether the partnership delivers value. A good integration guide follows a strict structure:
markdown # Integration Guide Structure ## 1. What You'll Build (with screenshot/GIF) "By the end of this guide, you'll have a Next.js app deployed on Vercel that uses our API for real-time chat with streaming." ## 2. Prerequisites (exact versions) "- Node.js 18+ - Vercel account (free tier works) - Our API key (get one at dashboard.acme.com)" ## 3. Step-by-Step (copy-paste commands) "npx create-next-app@latest my-chat-app cd my-chat-app npm install @acme/sdk" ## 4. Configuration (env vars, not hardcoded) "Add to .env.local: ACME_API_KEY=sk_..." ## 5. Core Code (heavily commented, <50 lines) ## 6. Deploy "vercel deploy" ## 7. Next Steps (what to build next, advanced features)
Many platforms have marketplaces or integration directories (Vercel Marketplace, AWS Marketplace, Zapier, Heroku Add-ons). A marketplace listing is a distribution channel — developers discover your API while browsing their existing platform. The listing must be optimized like a product page:
yaml # Marketplace listing optimization title: "Acme AI — Add intelligence to any app" # Good: clear value prop, not just the company name tagline: "Send a message, get a response. AI API with streaming, tools, and vision." # Good: specific features, developer-friendly language screenshot_1: "Code snippet showing 3-line integration" # Not a dashboard screenshot — show the CODE screenshot_2: "Working chat interface built with the API" # Show the end result, not the configuration UI getting_started: "npm install @acme/sdk && acme init" # One command. Not "contact sales." pricing: "Free tier: 100K tokens/month. No credit card required." # Always lead with free tier. Developers won't evaluate paid-only products.
Technical partnerships are relationships, not transactions. The DevRel engineer is often the point of contact. Rules for successful partnerships:
Rule 1: Joint value, not one-sided promotion. "We'll mention you in our docs if you mention us" is table stakes. Real partnerships create joint value: "Our SDK integrates natively with your framework, making it the easiest way for your users to add AI features."
Rule 2: Keep the integration working. The worst thing for a partnership is a broken integration. When either side ships a breaking change, the integration breaks and both brands suffer. Set up CI that tests the integration against both products' latest versions. Alert on failures.
Rule 3: Co-create content. Joint blog posts, joint webinars, joint conference talks. This doubles your reach because both companies promote it. The content should be genuinely useful, not just two companies talking about themselves.
Symptom: Integration exists but nobody uses it. Diagnosis: discoverability problem. The integration guide exists but isn't linked from either company's main docs, blog, or quickstart flow. Fix: both companies must promote it in their onboarding flow, not just on a buried integrations page.
Symptom: Partner relationship goes cold. Diagnosis: the champion at the partner company left, and nobody maintained the relationship. Fix: always have relationships with at least 2-3 people at the partner company. Document the relationship so it survives personnel changes.
The frontier is platforms that automatically discover and suggest integrations. When a developer is building with your API and Next.js, the docs proactively show the Next.js integration guide. When they hit a "how do I deploy this?" moment, the SDK suggests "deploy to Vercel in one command: vercel deploy." This is contextual integration discovery powered by understanding the developer's current stack.
Visualize your integration ecosystem. Each node is a partner. Connection strength shows integration depth. Click to highlight an integration path.
This is the payoff. Everything you've learned in chapters 0-10 comes together in a single interactive simulation. You are watching a developer discover your API, try it, build with it, hit problems, and either become an advocate or churn. Every DevRel decision you've made — docs quality, SDK ergonomics, community responsiveness, error message quality — determines the outcome.
Use the sliders below to adjust four DevRel quality dimensions. Then click Start Journey to watch a simulated developer move through the funnel. At each stage, the simulation rolls dice weighted by your quality settings to determine whether the developer progresses or drops off. Run it multiple times to see how small quality improvements compound across the funnel.
Adjust the four DevRel quality dimensions, then Start Journey to simulate 100 developers going through your funnel. Watch conversion rates at each stage. Re-run to see how changes compound.
If you are asked "Design the developer experience for a new API," this simulation IS your answer. Here is how you whiteboard it:
text Developer Experience System Design ================================== Input: Developer lands on your website Output: Developer becomes an advocate who recruits other developers Stage 1 — Discovery Channels: Google (SEO), Twitter, conferences, word-of-mouth, AI assistants Artifact: Landing page with code snippet + "Get started in 5 min" CTA Metric: Unique docs visitors per month Stage 2 — Evaluation Artifact: Interactive playground (no signup required) Metric: Playground → signup conversion rate Stage 3 — Activation Artifact: Quickstart (3 steps, <5 min, working code) Metric: Time from signup to first successful API call Stage 4 — Building Artifacts: Tutorials, cookbooks, reference docs, SDK, CLI Support: Discord community, GitHub issues Metric: API calls per week, features used per developer Stage 5 — Crisis Every developer hits a wall. This stage determines retention. Artifacts: Error messages with fix instructions, searchable FAQ Support: Community response <4h, escalation to eng for blockers Metric: Support resolution time, self-service resolution rate Stage 6 — Advocacy Artifacts: Champions program, showcase gallery, referral incentives Metric: Community contributions, referral signups, NPS Feedback Loop Every stage generates signal → feedback pipeline → product team Weekly "Voice of Developer" report with quantified issues
The simulation shows six stages of the developer journey. For each stage, the bar height represents how many of the original 100 developers survived to that point. The color indicates health: green (>60% conversion at that stage), yellow (30-60%), red (<30%).
Stage 1: Lands on Docs. Controlled by awareness (not in this sim — we start with 100 developers already aware). Conversion depends on docs quality: are the docs findable, well-structured, and inviting?
Stage 2: Tries Quickstart. The developer decides to try the API. Conversion depends on docs quality (is the quickstart discoverable?) and SDK ergonomics (can they install and configure in under 2 minutes?).
Stage 3: First API Call. The critical moment. They run the code. Does it work? Conversion depends heavily on SDK ergonomics and error message quality (if it fails, can they self-diagnose?).
Stage 4: Builds an App. They're committed now — building something real. Conversion depends on docs quality (are there guides for their specific use case?) and community response (can they get help when stuck?).
Stage 5: Hits an Error. Every developer hits a wall eventually. This is where you either lose them or earn their loyalty. Conversion depends on error message quality and community response time.
Stage 6: Becomes Advocate. The final transformation. A developer who was helped through their problems becomes someone who helps others. This depends on the cumulative quality of their entire experience.
You've now covered the complete DevRel engineering stack: documentation, SDKs, demos, content, community, speaking, feedback, launches, metrics, and partnerships. This final chapter gives you the interview cheat sheet — the concentrated wisdom for the room.
Staff-level DevRel interviews typically include 4-6 rounds:
| Round | Duration | What they test | How to prepare |
|---|---|---|---|
| Technical Screen | 45-60 min | Can you code? API design, SDK implementation, systems thinking | Chapters 2, 3: build an SDK, design error handling |
| Content Review | 45 min | Can you write? Review your blog posts, docs, or write a tutorial live | Chapters 1, 4: bring 3 writing samples, know the Diataxis framework |
| System Design | 45-60 min | Can you architect? Design a developer experience end-to-end | Chapters 0, 8, 11: design a developer onboarding funnel |
| Community Scenario | 30-45 min | Can you handle people? Community crisis, scaling challenges | Chapters 5, 7: community crisis playbook, feedback pipelines |
| Metrics & Strategy | 30-45 min | Can you measure and prioritize? DevRel OKRs, attribution | Chapters 9, 10: developer funnel, cohort analysis |
| Presentation | 30 min | Can you present? Give a 15-min talk on a technical topic | Chapter 6: talk structure, live coding safety nets |
Q1: "A breaking change ships without a migration guide. 50 developers are angry on Twitter. What do you do in the next 2 hours?"
Framework: Acknowledge → Mitigate → Fix → Prevent. Hour 1: Post acknowledgment on all channels (Twitter, Discord, status page). Write a temporary workaround (revert to old behavior with a flag/version pin). Hour 2: Write the migration guide. Ship it. Reply to every angry tweet with the guide link. Post-mortem: add "migration guide" as a mandatory launch checklist item.
Q2: "Design the onboarding experience for a new AI API from scratch."
Framework: Funnel stages + artifacts. Start by drawing the developer journey: (1) Landing page with value prop + code snippet, (2) Signup with auto-generated API key, (3) Quickstart: 3 steps, under 5 minutes, working code, (4) Tutorial: build a real app, (5) Reference docs for production use. Discuss: how to measure success at each stage (time-to-first-call, tutorial completion rate, 30-day retention).
Q3: "Your docs get 100K monthly visitors but only 2% sign up. Diagnose and fix."
Framework: Funnel analysis. Where's the drop-off? Are visitors landing on the right pages (quickstart vs. reference)? Is the signup flow frictionless (no credit card, instant API key)? Is there a clear CTA on every docs page? Run a user test: watch 5 new developers try to go from docs to first API call. The friction they encounter IS the diagnosis.
Q4: "How would you build a DevRel team from zero for a Series B startup?"
Framework: Hire for breadth first, depth later. First hire: a senior DevRel generalist who can write, code, and present. They set the voice, build the docs, launch the community. Second hire: a DX engineer who focuses on SDK quality and tooling. Third hire: a community manager. Fourth: a content specialist. Don't hire a "Head of DevRel" with no IC skills — you need builders first, managers later.
Q5: "A developer says your API is 'hard to use' but won't elaborate. How do you get actionable feedback?"
Framework: Observe, don't ask. Asking "what's hard?" gets you vague answers. Instead: ask them to show you their code. Watch where they struggled. Check their error logs. Look at their integration timeline (how long did each step take?). The data tells you what "hard" means better than the developer can articulate it.
Q6: "Your competitor's SDK has 10x more GitHub stars. What do you do?"
Framework: Stars ≠ usage. First, check what actually matters: weekly downloads, active users, community activity. If they genuinely have better adoption, study why: is it the API design? The docs? The ecosystem integrations? Don't copy their approach — find the gap they're not serving. Maybe their SDK is great for beginners but lacks advanced features. Own the advanced use case.
Q7: "How do you handle a developer who's being toxic in your community?"
Framework: Private first, public second. DM the developer. Assume good intent: "Hey, I noticed your message came across as aggressive. I want to make sure we address your concern — can you help me understand the issue?" If they continue, enforce the code of conduct with a warning. If they persist, ban with a clear explanation. Document everything. Never argue publicly.
Q8: "You need to choose between writing 10 new tutorials or improving the existing 5. Which do you choose?"
Framework: Impact per unit effort. Check your analytics. If the existing 5 tutorials cover the most common use cases but have low completion rates, improve them — fixing a 30% completion rate to 70% on a tutorial that 10,000 developers start is worth more than 10 new tutorials that 500 developers each might start. Quality > quantity for developer content.
Q9: "An enterprise customer says they'll sign a $500K deal if you build a custom integration in 2 weeks. What do you do?"
Framework: Custom vs. scalable. Build the integration, but make it general enough that other customers can use it too. Negotiate: "We'll build this as a public integration guide, and you'll be featured as a case study." This turns a one-off request into an asset that benefits the entire community. If the customer demands exclusivity, push back gently — DevRel's job is the community, not one customer.
Q10: "AI is going to automate DevRel. Convince me the role still exists in 5 years."
Framework: AI amplifies, doesn't replace. AI will write first drafts of docs, auto-generate code examples, answer common questions in Discord, and create personalized tutorials. This frees DevRel engineers to focus on the things AI can't do: building genuine community relationships, making strategic product decisions based on developer empathy, giving conference talks that inspire, and designing the overall developer experience system. The role evolves from "content creator" to "experience architect."
Many DevRel interviews include a take-home exercise. Common formats:
Format 1: "Write a tutorial for our API." You get access to the API and 48 hours. They evaluate: writing quality, code accuracy, developer empathy, and whether you follow their existing style. Tip: read their existing docs first and match the voice. Show, don't tell. Code first, prose second.
Format 2: "Review our existing docs and propose 5 improvements." They evaluate: your ability to identify friction, prioritize improvements, and communicate changes diplomatically. Tip: don't just list problems — for each problem, provide the specific fix (rewritten paragraph, restructured page, new code example). Show the before/after.
Format 3: "Build a demo app using our API." They evaluate: code quality, creativity, developer-friendliness, and whether the README enables someone else to run it. Tip: the README is 50% of the evaluation. Include: what it does (with GIF), how to run it (3 steps), how it works (architecture diagram), how to extend it.
markdown # Take-home demo app: README template that wins # AI Recipe Generator 🍳 Generate creative recipes from a photo of your fridge. Built with [Acme API](link) + Next.js + Vercel AI SDK. ## Demo  ## Run it yourself ```bash git clone https://github.com/you/recipe-generator cd recipe-generator cp .env.example .env # Add your API key npm install && npm run dev ``` ## How it works 1. Upload a photo → Vision API identifies ingredients 2. Ingredients → Claude generates 3 recipe options 3. Select a recipe → Claude writes step-by-step instructions 4. Each step uses streaming for real-time display ## Extend it - Add dietary restrictions (modify the system prompt in `lib/prompts.ts`) - Add cost estimation (swap the model in `lib/api.ts`) - Add voice narration (add TTS after streaming completes)
Staff-level DevRel candidates are expected to show, not just tell. Prepare:
| Artifact | What it demonstrates | How to prepare |
|---|---|---|
| 3 writing samples | Technical writing range (tutorial, blog, docs) | If you don't have published work, write a tutorial for an open-source tool you use |
| 1 recorded talk | Public speaking ability | Record a 15-min talk at a local meetup. Content > production quality. |
| 1 open-source contribution | Code quality, community participation | Contribute to an SDK, write a plugin, or create a demo app |
| Metrics story | Impact measurement | Quantify something: "My tutorial series increased activation by X%" |
| Resource | Why |
|---|---|
| The Developer Experience by Cristiano Betta | The definitive book on DX design principles |
| Stripe's API Reference (stripe.com/docs) | Gold standard for API documentation |
| Developer Relations by Caroline Lewko & James Parton | Business strategy for DevRel teams |
| Diataxis framework (diataxis.fr) | Documentation system architecture |
| Twilio's "TwilioQuest" game | Creative developer education example |
| Talk Like TED by Carmine Gallo | Public speaking frameworks that work for tech talks |
DevRel compensation varies widely by company type, location, and level. Here are approximate ranges for 2024-2025 (US, major tech hubs):
| Level | Base salary | Total comp (with equity) | Notes |
|---|---|---|---|
| Junior (L3-L4) | $120K-$160K | $150K-$220K | Entry point from engineering or technical writing |
| Senior (L5) | $160K-$200K | $220K-$350K | Equity matters more at this level |
| Staff (L6) | $200K-$260K | $350K-$550K | At top companies (FAANG, top startups) |
| Head/VP (L7+) | $230K-$300K | $400K-$700K+ | Highly variable; startup equity can be significant |
Key insight: DevRel at API-first companies (Stripe, Twilio, Anthropic, OpenAI) tends to pay 15-25% more than DevRel at non-developer-focused companies, because the role is core to the business model rather than a support function. When evaluating offers, also consider: conference travel budget (good DevRel teams: $15K-$25K/year), equipment budget, and the team's influence on product decisions.
Self-assess your readiness across the five interview dimensions. The radar shows your coverage and highlights gaps to focus on.