DevRel Content
When to Use
Use this skill when you need when the user wants to create technical content for developers including blog posts, tutorials, and documentation. Trigger phrases include "write a blog post," "technical article," "developer content," "tutorial," "devrel content," "dev blog," "technical writing," or "content for...
This skill helps you create technical content that developers actually read: blog posts, tutorials, documentation, and thought leadership pieces that build trust and drive adoption.
Before You Start
Load your audience context first. Read .agents/developer-audience-context.md to understand:
- Who you're writing for (role, seniority, tech stack)
- Their pain points (what problems resonate)
- Verbatim language (how they describe things)
- Voice & tone (how formal/technical to be)
If the context file doesn't exist, run the developer-audience-context skill first.
The DevRel Content Framework
Phase 1: Research & Validation
Before writing anything, validate the topic is worth writing about.
| Research Type |
What to Do |
| Search intent |
Google your topic. What already ranks? What's missing? |
| Community signals |
Search Reddit, HN, Stack Overflow. Are developers asking about this? |
| Competitor gaps |
What have competitors written? What haven't they covered? |
| Internal data |
Support tickets, Discord questions, GitHub issues about this topic |
| Keyword research |
Use Ahrefs/SEMrush for search volume on technical terms |
Red flags — Don't write if:
- You're the only one who cares about this topic
- 10 identical articles already exist
- The topic is too broad ("Introduction to JavaScript")
- The topic is too narrow (no search volume, no community interest)
Phase 2: Content Type Selection
Choose the right format for your goal:
| Content Type |
Best For |
Structure |
| Tutorial |
Teaching a specific skill |
Step-by-step, code-heavy |
| Guide |
Covering a topic comprehensively |
Sections, reference material |
| Comparison |
Helping with decisions |
Table-based, pros/cons |
| Announcement |
Launching features/products |
News lead, what/why/how |
| Thought leadership |
Building authority |
Opinion, predictions, takes |
| Case study |
Social proof |
Problem → Solution → Results |
| Troubleshooting |
Solving specific errors |
Error → Cause → Fix |
Phase 3: Outline Structure
Use this outline template:
# [Title that promises specific value]
## Hook (2-3 sentences)
- State the problem or opportunity
- Establish credibility ("We migrated 10,000 repos...")
- Promise what the reader will learn
## Context (optional)
- Brief background if needed
- Link to prerequisites
## The Meat
### Section 1: [First major concept]
- Explanation
- Code example
- Common pitfall
### Section 2: [Second major concept]
- Explanation
- Code example
- Real-world application
### Section 3: [Third major concept]
- Explanation
- Code example
- Advanced tip
## Putting It Together
- Complete example
- Working code
## What's Next
- Links to deeper content
- Call to action (try the product, join Discord, etc.)
Writing Code Examples
Code is the content. Get it right.
The Copy-Paste Test
Every code example must:
| Requirement |
Why It Matters |
| Run without modification |
Developers will copy-paste. If it fails, you lose trust. |
| Include imports |
Don't assume they know which libraries to import. |
| Show output |
What should they see when it works? |
| Handle errors |
Real code has error handling. Show it. |
| Use real values |
No foo, bar, example.com unless necessary. |
Code Example Structure
First, install the dependencies:
\`\`\`bash
npm install your-library axios
\`\`\`
Now create a file called `fetch-data.js`:
\`\`\`javascript
// fetch-data.js
import { Client } from 'your-library';
import axios from 'axios';
const client = new Client({
apiKey: process.env.YOUR_API_KEY // Use environment variables
});
async function fetchUserData(userId) {
try {
const user = await client.users.get(userId);
console.log(`Fetched user: ${user.name}`);
return user;
} catch (error) {
console.error(`Failed to fetch user: ${error.message}`);
throw error;
}
}
// Example usage
fetchUserData('user_123')
.then(user => console.log(user))
.catch(err => process.exit(1));
\`\`\`
Run it:
\`\`\`bash
YOUR_API_KEY=sk_test_xxx node fetch-data.js
\`\`\`
Expected output:
\`\`\`
Fetched user: Jane Developer
{ id: 'user_123', name: 'Jane Developer', email: 'jane@example.dev' }
\`\`\`
Language-Specific Conventions
| Language |
Code Block |
Package Install |
Env Vars |
| JavaScript/Node |
javascript or js |
npm install |
process.env.VAR |
| TypeScript |
typescript or ts |
npm install |
process.env.VAR |
| Python |
python or py |
pip install |
os.environ['VAR'] |
| Go |
go |
go get |
os.Getenv("VAR") |
| Rust |
rust |
cargo add |
std::env::var("VAR") |
| Shell |
bash or shell |
N/A |
$VAR |
Technical Accuracy Checklist
Run through before publishing:
| Check |
How to Verify |
| Code runs |
Copy-paste every snippet and run it |
| Versions match |
Are you using the current library version? |
| Links work |
Click every link |
| Commands work |
Run every CLI command |
| Screenshots current |
Do UI screenshots match the current product? |
| No deprecated APIs |
Check if any APIs used are deprecated |
| Security review |
No hardcoded secrets, SQL injection, etc. |
| Peer review |
Have an engineer read it for accuracy |
SEO for Developer Content
Developers use Google differently than consumers.
Developer Search Patterns
| Pattern |
Example Searches |
| Error messages |
"TypeError: Cannot read property 'map' of undefined" |
| How to |
"how to deploy next.js to vercel" |
| Comparison |
"prisma vs typeorm 2024" |
| Best practices |
"typescript project structure best practices" |
| Alternatives |
"alternatives to firebase" |
| With |
"react with typescript tutorial" |
Technical SEO Checklist
| Element |
Best Practice |
| Title |
Include primary keyword, framework names, year if relevant |
| Meta description |
150 chars, include keyword, promise specific outcome |
| H1 |
Match or closely match title |
| H2s |
Include secondary keywords, make scannable |
| Code blocks |
Use proper syntax highlighting (helps featured snippets) |
| Internal links |
Link to related docs, tutorials, API reference |
| External links |
Link to official docs of tools mentioned |
| URL slug |
Lowercase, hyphens, include keyword |
Example Optimized Title
| Bad |
Good |
| "Using Our API" |
"How to Authenticate with the YourProduct API (Node.js)" |
| "Database Guide" |
"PostgreSQL Connection Pooling: Complete Guide with pgBouncer" |
| "Getting Started" |
"Getting Started with YourProduct: Your First API Call in 5 Minutes" |
Content Quality Signals
What separates great devrel content from mediocre:
Do This
- Show, don't tell — Code over prose
- Address the "why" — Not just how to do it, but when and why
- Acknowledge tradeoffs — Nothing is perfect; developers respect honesty
- Link to sources — Official docs, RFCs, related articles
- Include dates — "Updated March 2024" or version numbers
- Progressive disclosure — Start simple, add complexity
- Real examples — Production scenarios, not just hello world
Don't Do This
- Wall of text — Break up with code, headers, bullets
- Marketing speak — "Best-in-class," "seamless," "revolutionary"
- Assuming knowledge — Define acronyms, link to prerequisites
- Outdated content — Nothing worse than a 2019 tutorial with deprecated APIs
- Buried lede — Put the answer first, explanation second
- No code — Developers came for code, not prose
Content Templates
Blog Post Template
# [Specific, keyword-rich title]
[2-3 sentence hook: problem + promise]
## The Problem
[1 paragraph explaining the pain point]
## The Solution
[Brief explanation of your approach]
### Step 1: [Action]
[Explanation]
\`\`\`language
// Code
\`\`\`
### Step 2: [Action]
[Explanation]
\`\`\`language
// Code
\`\`\`
### Step 3: [Action]
[Explanation]
\`\`\`language
// Code
\`\`\`
## Complete Example
\`\`\`language
// Full working code
\`\`\`
## Troubleshooting
### [Common Error 1]
[Solution]
### [Common Error 2]
[Solution]
## What's Next
- [Link to deeper dive]
- [Link to related tutorial]
- [CTA: Try it yourself]
Comparison Post Template
# [Tool A] vs [Tool B]: [Specific Use Case] ([Year])
[1 paragraph: Who this comparison is for and what you'll learn]
## Quick Comparison
| Feature | Tool A | Tool B |
|---------|--------|--------|
| [Feature 1] | | |
| [Feature 2] | | |
| [Feature 3] | | |
## When to Choose [Tool A]
- [Scenario 1]
- [Scenario 2]
- [Scenario 3]
## When to Choose [Tool B]
- [Scenario 1]
- [Scenario 2]
- [Scenario 3]
## Deep Dive: [Specific Aspect]
### Tool A Approach
[Explanation + code]
### Tool B Approach
[Explanation + code]
## Our Recommendation
[Specific guidance based on use case]
Measuring Content Success
Metrics to Track
| Metric |
What It Tells You |
| Page views |
Reach (but vanity without context) |
| Time on page |
Engagement (are they reading?) |
| Scroll depth |
Did they read to the end? |
| Bounce rate |
Did they find what they needed? |
| Search rankings |
SEO performance |
| Backlinks |
Authority and reference value |
| Social shares |
Resonance (especially HN, Twitter, Reddit) |
| Conversion events |
Sign-ups, installs, docs clicks |
Content → Conversion Path
Track the journey:
- Search/social → Blog post
- Blog post → Docs / quickstart
- Docs → Sign up / install
- Sign up → Activation (first success)
Tools
| Tool |
Use Case |
| Octolens |
Monitor where your content gets shared (HN, Reddit, Twitter). Track competitor content performance. Find content ideas from developer conversations. |
| Grammarly / Hemingway |
Readability and grammar checking |
| Carbon / Ray.so |
Beautiful code screenshots |
| Excalidraw |
Technical diagrams |
| Loom |
Quick video walkthroughs |
| Ahrefs / SEMrush |
Keyword research and SEO tracking |
| Google Search Console |
Track search performance |
Related Skills
developer-audience-context — Foundation for knowing your readers
technical-tutorials — Deep dive into step-by-step content
developer-newsletter — Distributing content via email
developer-seo — Technical SEO optimization
hacker-news-strategy — Sharing content on HN effectively
Limitations
- Use this skill only when the task clearly matches its upstream source and local project context.
- Verify commands, generated code, dependencies, credentials, and external service behavior before applying changes.
- Do not treat examples as a substitute for environment-specific tests, security review, or user approval for destructive or costly actions.
1---
2name: devrel-content
3description: "When the user wants to create technical content for developers including blog posts, tutorials, and documentation."
4risk: critical
5source: https://github.com/jonathimer/devmarketing-skills/tree/main/skills/devrel-content
6source_repo: jonathimer/devmarketing-skills
7source_type: community
8date_added: 2026-07-01
9license: MIT
10license_source: https://github.com/jonathimer/devmarketing-skills/blob/main/LICENSE
11---
12
13# DevRel Content
14## When to Use
15
16Use this skill when you need when the user wants to create technical content for developers including blog posts, tutorials, and documentation. Trigger phrases include "write a blog post," "technical article," "developer content," "tutorial," "devrel content," "dev blog," "technical writing," or "content for...
17
18
19This skill helps you create technical content that developers actually read: blog posts, tutorials, documentation, and thought leadership pieces that build trust and drive adoption.
20
21---
22
23## Before You Start
24
25**Load your audience context first.** Read `.agents/developer-audience-context.md` to understand:
26
27- Who you're writing for (role, seniority, tech stack)
28- Their pain points (what problems resonate)
29- Verbatim language (how they describe things)
30- Voice & tone (how formal/technical to be)
31
32If the context file doesn't exist, run the `developer-audience-context` skill first.
33
34---
35
36## The DevRel Content Framework
37
38### Phase 1: Research & Validation
39
40Before writing anything, validate the topic is worth writing about.
41
42| Research Type | What to Do |
43|--------------|------------|
44| **Search intent** | Google your topic. What already ranks? What's missing? |
45| **Community signals** | Search Reddit, HN, Stack Overflow. Are developers asking about this? |
46| **Competitor gaps** | What have competitors written? What haven't they covered? |
47| **Internal data** | Support tickets, Discord questions, GitHub issues about this topic |
48| **Keyword research** | Use Ahrefs/SEMrush for search volume on technical terms |
49
50**Red flags** — Don't write if:
51- You're the only one who cares about this topic
52- 10 identical articles already exist
53- The topic is too broad ("Introduction to JavaScript")
54- The topic is too narrow (no search volume, no community interest)
55
56### Phase 2: Content Type Selection
57
58Choose the right format for your goal:
59
60| Content Type | Best For | Structure |
61|-------------|----------|-----------|
62| **Tutorial** | Teaching a specific skill | Step-by-step, code-heavy |
63| **Guide** | Covering a topic comprehensively | Sections, reference material |
64| **Comparison** | Helping with decisions | Table-based, pros/cons |
65| **Announcement** | Launching features/products | News lead, what/why/how |
66| **Thought leadership** | Building authority | Opinion, predictions, takes |
67| **Case study** | Social proof | Problem → Solution → Results |
68| **Troubleshooting** | Solving specific errors | Error → Cause → Fix |
69
70### Phase 3: Outline Structure
71
72Use this outline template:
73
74```markdown
75# [Title that promises specific value]
76
77## Hook (2-3 sentences)
78- State the problem or opportunity
79- Establish credibility ("We migrated 10,000 repos...")
80- Promise what the reader will learn
81
82## Context (optional)
83- Brief background if needed
84- Link to prerequisites
85
86## The Meat
87### Section 1: [First major concept]
88- Explanation
89- Code example
90- Common pitfall
91
92### Section 2: [Second major concept]
93- Explanation
94- Code example
95- Real-world application
96
97### Section 3: [Third major concept]
98- Explanation
99- Code example
100- Advanced tip
101
102## Putting It Together
103- Complete example
104- Working code
105
106## What's Next
107- Links to deeper content
108- Call to action (try the product, join Discord, etc.)
109```
110
111---
112
113## Writing Code Examples
114
115Code is the content. Get it right.
116
117### The Copy-Paste Test
118
119Every code example must:
120
121| Requirement | Why It Matters |
122|------------|----------------|
123| **Run without modification** | Developers will copy-paste. If it fails, you lose trust. |
124| **Include imports** | Don't assume they know which libraries to import. |
125| **Show output** | What should they see when it works? |
126| **Handle errors** | Real code has error handling. Show it. |
127| **Use real values** | No `foo`, `bar`, `example.com` unless necessary. |
128
129### Code Example Structure
130
131```markdown
132First, install the dependencies:
133
134\`\`\`bash
135npm install your-library axios
136\`\`\`
137
138Now create a file called `fetch-data.js`:
139
140\`\`\`javascript
141// fetch-data.js
142import { Client } from 'your-library';
143import axios from 'axios';
144
145const client = new Client({
146 apiKey: process.env.YOUR_API_KEY // Use environment variables
147});
148
149async function fetchUserData(userId) {
150 try {
151 const user = await client.users.get(userId);
152 console.log(`Fetched user: ${user.name}`);
153 return user;
154 } catch (error) {
155 console.error(`Failed to fetch user: ${error.message}`);
156 throw error;
157 }
158}
159
160// Example usage
161fetchUserData('user_123')
162 .then(user => console.log(user))
163 .catch(err => process.exit(1));
164\`\`\`
165
166Run it:
167
168\`\`\`bash
169YOUR_API_KEY=sk_test_xxx node fetch-data.js
170\`\`\`
171
172Expected output:
173
174\`\`\`
175Fetched user: Jane Developer
176{ id: 'user_123', name: 'Jane Developer', email: 'jane@example.dev' }
177\`\`\`
178```
179
180### Language-Specific Conventions
181
182| Language | Code Block | Package Install | Env Vars |
183|----------|-----------|-----------------|----------|
184| JavaScript/Node | `javascript` or `js` | `npm install` | `process.env.VAR` |
185| TypeScript | `typescript` or `ts` | `npm install` | `process.env.VAR` |
186| Python | `python` or `py` | `pip install` | `os.environ['VAR']` |
187| Go | `go` | `go get` | `os.Getenv("VAR")` |
188| Rust | `rust` | `cargo add` | `std::env::var("VAR")` |
189| Shell | `bash` or `shell` | N/A | `$VAR` |
190
191---
192
193## Technical Accuracy Checklist
194
195Run through before publishing:
196
197| Check | How to Verify |
198|-------|---------------|
199| **Code runs** | Copy-paste every snippet and run it |
200| **Versions match** | Are you using the current library version? |
201| **Links work** | Click every link |
202| **Commands work** | Run every CLI command |
203| **Screenshots current** | Do UI screenshots match the current product? |
204| **No deprecated APIs** | Check if any APIs used are deprecated |
205| **Security review** | No hardcoded secrets, SQL injection, etc. |
206| **Peer review** | Have an engineer read it for accuracy |
207
208---
209
210## SEO for Developer Content
211
212Developers use Google differently than consumers.
213
214### Developer Search Patterns
215
216| Pattern | Example Searches |
217|---------|-----------------|
218| **Error messages** | "TypeError: Cannot read property 'map' of undefined" |
219| **How to** | "how to deploy next.js to vercel" |
220| **Comparison** | "prisma vs typeorm 2024" |
221| **Best practices** | "typescript project structure best practices" |
222| **Alternatives** | "alternatives to firebase" |
223| **With** | "react with typescript tutorial" |
224
225### Technical SEO Checklist
226
227| Element | Best Practice |
228|---------|--------------|
229| **Title** | Include primary keyword, framework names, year if relevant |
230| **Meta description** | 150 chars, include keyword, promise specific outcome |
231| **H1** | Match or closely match title |
232| **H2s** | Include secondary keywords, make scannable |
233| **Code blocks** | Use proper syntax highlighting (helps featured snippets) |
234| **Internal links** | Link to related docs, tutorials, API reference |
235| **External links** | Link to official docs of tools mentioned |
236| **URL slug** | Lowercase, hyphens, include keyword |
237
238### Example Optimized Title
239
240| Bad | Good |
241|-----|------|
242| "Using Our API" | "How to Authenticate with the YourProduct API (Node.js)" |
243| "Database Guide" | "PostgreSQL Connection Pooling: Complete Guide with pgBouncer" |
244| "Getting Started" | "Getting Started with YourProduct: Your First API Call in 5 Minutes" |
245
246---
247
248## Content Quality Signals
249
250What separates great devrel content from mediocre:
251
252### Do This
253
254- **Show, don't tell** — Code over prose
255- **Address the "why"** — Not just how to do it, but when and why
256- **Acknowledge tradeoffs** — Nothing is perfect; developers respect honesty
257- **Link to sources** — Official docs, RFCs, related articles
258- **Include dates** — "Updated March 2024" or version numbers
259- **Progressive disclosure** — Start simple, add complexity
260- **Real examples** — Production scenarios, not just hello world
261
262### Don't Do This
263
264- **Wall of text** — Break up with code, headers, bullets
265- **Marketing speak** — "Best-in-class," "seamless," "revolutionary"
266- **Assuming knowledge** — Define acronyms, link to prerequisites
267- **Outdated content** — Nothing worse than a 2019 tutorial with deprecated APIs
268- **Buried lede** — Put the answer first, explanation second
269- **No code** — Developers came for code, not prose
270
271---
272
273## Content Templates
274
275### Blog Post Template
276
277```markdown
278# [Specific, keyword-rich title]
279
280[2-3 sentence hook: problem + promise]
281
282## The Problem
283
284[1 paragraph explaining the pain point]
285
286## The Solution
287
288[Brief explanation of your approach]
289
290### Step 1: [Action]
291
292[Explanation]
293
294\`\`\`language
295// Code
296\`\`\`
297
298### Step 2: [Action]
299
300[Explanation]
301
302\`\`\`language
303// Code
304\`\`\`
305
306### Step 3: [Action]
307
308[Explanation]
309
310\`\`\`language
311// Code
312\`\`\`
313
314## Complete Example
315
316\`\`\`language
317// Full working code
318\`\`\`
319
320## Troubleshooting
321
322### [Common Error 1]
323[Solution]
324
325### [Common Error 2]
326[Solution]
327
328## What's Next
329
330- [Link to deeper dive]
331- [Link to related tutorial]
332- [CTA: Try it yourself]
333```
334
335### Comparison Post Template
336
337```markdown
338# [Tool A] vs [Tool B]: [Specific Use Case] ([Year])
339
340[1 paragraph: Who this comparison is for and what you'll learn]
341
342## Quick Comparison
343
344| Feature | Tool A | Tool B |
345|---------|--------|--------|
346| [Feature 1] | | |
347| [Feature 2] | | |
348| [Feature 3] | | |
349
350## When to Choose [Tool A]
351
352- [Scenario 1]
353- [Scenario 2]
354- [Scenario 3]
355
356## When to Choose [Tool B]
357
358- [Scenario 1]
359- [Scenario 2]
360- [Scenario 3]
361
362## Deep Dive: [Specific Aspect]
363
364### Tool A Approach
365[Explanation + code]
366
367### Tool B Approach
368[Explanation + code]
369
370## Our Recommendation
371
372[Specific guidance based on use case]
373```
374
375---
376
377## Measuring Content Success
378
379### Metrics to Track
380
381| Metric | What It Tells You |
382|--------|------------------|
383| **Page views** | Reach (but vanity without context) |
384| **Time on page** | Engagement (are they reading?) |
385| **Scroll depth** | Did they read to the end? |
386| **Bounce rate** | Did they find what they needed? |
387| **Search rankings** | SEO performance |
388| **Backlinks** | Authority and reference value |
389| **Social shares** | Resonance (especially HN, Twitter, Reddit) |
390| **Conversion events** | Sign-ups, installs, docs clicks |
391
392### Content → Conversion Path
393
394Track the journey:
3951. Search/social → Blog post
3962. Blog post → Docs / quickstart
3973. Docs → Sign up / install
3984. Sign up → Activation (first success)
399
400---
401
402## Tools
403
404| Tool | Use Case |
405|------|----------|
406| **[Octolens](https://octolens.com)** | Monitor where your content gets shared (HN, Reddit, Twitter). Track competitor content performance. Find content ideas from developer conversations. |
407| **Grammarly / Hemingway** | Readability and grammar checking |
408| **Carbon / Ray.so** | Beautiful code screenshots |
409| **Excalidraw** | Technical diagrams |
410| **Loom** | Quick video walkthroughs |
411| **Ahrefs / SEMrush** | Keyword research and SEO tracking |
412| **Google Search Console** | Track search performance |
413
414---
415
416## Related Skills
417
418- `developer-audience-context` — Foundation for knowing your readers
419- `technical-tutorials` — Deep dive into step-by-step content
420- `developer-newsletter` — Distributing content via email
421- `developer-seo` — Technical SEO optimization
422- `hacker-news-strategy` — Sharing content on HN effectively
423
424## Limitations
425
426- Use this skill only when the task clearly matches its upstream source and local project context.
427- Verify commands, generated code, dependencies, credentials, and external service behavior before applying changes.
428- Do not treat examples as a substitute for environment-specific tests, security review, or user approval for destructive or costly actions.