joel-writing-style
Joel's writing voice and style guide for joelclaw.com content. Use when writing, editing, or reviewing any blog post, essay, book chapter, or prose content for joelclaw.com. Also use when asked to 'write like Joel,' 'match Joel's voice,' 'draft a post,' 'write content for the blog,' or 'review this for voice.' This skill captures Joel's specific writing patterns derived from ~90,000 words of published content spanning 2012–2026. Cross-reference with copy-editing and copywriting skills for marketing-specific copy.
What this skill does
# Joel's Writing Style Guide
Joel writes like he talks — direct, warm, profane when it serves the point, and always in service of helping someone. His blog is a digital garden, not a content marketing operation. Posts range from 50-word observations to 4,000-word deep dives. Not everything is polished. That's by design.
This guide is derived from analyzing 127 posts across joelhooks.com (2012–2026).
For curated voice examples from the corpus, see [references/voice-examples.md](references/voice-examples.md).
---
## Core Voice Rules
### 1. Write conversationally in first person
Address the reader as "you." Use "I" and "we" freely. Write like you're explaining something to a smart friend over coffee — not like you're writing a blog post.
- Contractions always: it's, doesn't, I've, they're, we've, can't, won't
- Never stilted: "one might consider" → "you might try"
- No "Dear reader" or "In this post I will" throat-clearing
### 2. Strategic profanity is texture, not shock
Joel uses "fuck," "shit," "bullshit," "damn," and "af" naturally when they serve emphasis. Average 3–5 instances per substantive post. They land because they're infrequent enough to carry weight.
**When to use it:**
- Emphasis on a point: "I'm convinced that paginated posted sorted chronologically fuckin' sucks."
- Dismissing bad ideas: "No 'growth hacks' or other bullshit involved"
- Raw honesty: "I'm a shit PM."
- Celebration: "holy shit, feels good."
**When NOT to use it:**
- Never in headlines or H2s (rare exception: "Just Fucking Do It" as a deliberate title)
- Never gratuitously — if removing it doesn't weaken the sentence, remove it
- Never to be edgy — it should feel natural, like breathing
### 3. Short paragraphs, punchy rhythm
Most paragraphs are 1–3 sentences. Many are single-sentence paragraphs for emphasis. Alternate short and long sentences to create rhythm.
**The pattern:** Short. Short. Longer sentence that develops the idea with some texture and detail. Short punch.
This creates a reading experience that pulls you down the page.
### 4. Bold for inline emphasis, not decoration
Use **bold** to punch key phrases within sentences. Not for headers-within-paragraphs. Not for every other word.
- ✅ "We provide instructors with a **world class highly skilled production team that they don't have to fuckin manage**."
- ✅ "If it's negotiable, you'll negotiate your way out."
- ❌ Bolding entire sentences or paragraphs
- ❌ Using bold as a substitute for good writing
### 5. Emoji as warmth, not decoration
Joel uses emoji sparingly — ❤️ 🤯 😅 😂 🔥 🥰 — often at paragraph endings. They convey genuine emotion. Never more than 2–3 per post.
- ✅ "Thanks to Marie Poulin for this idea ❤️"
- ✅ "That's when I started working on egghead.io which is what I've been doing for 6 years. 🔥"
- ❌ Emoji in every paragraph
- ❌ Emoji as bullet points or list markers (except occasionally in titles: "🌱 My blog is a digital garden")
### 6. Italics for internal voice and refrains
Use *italics* for thoughts, recurring questions, and emphasis that's softer than bold.
- *"What would happen if I did this for a year?"*
- *badass web developer* (as a concept/identity)
- _just don't feel like doing the activities required to make more money_
---
## Structural Patterns
### Never lead with a heading
The title is already an H1 rendered above the content. An `## H2` as the first line of the body looks redundant and amateurish — two headings stacked with nothing between them. Always open with prose: a hook, a sentence, an observation. The heading comes after the opening paragraph or after any install/code block at the top.
- ❌ `## The interface is stdout` (right after title — two headings in a row)
- ✅ A prose sentence, then `## The interface is stdout` further down
- ✅ A skill install code block, then prose, then the first heading
### Opening hooks, not thesis statements
Never open with "In this article, I'll discuss..." — open with a hook that creates tension, asks a question, or drops you into a moment.
**Strong openings from Joel's corpus:**
- "290 pounds and I couldn't walk and talk at the same time."
- "Have you used Jira?"
- "Recording a podcast is a shitload of work."
- "Most personal AI projects start with a database."
- "We crossed the $16M milestone on 2019-12-05."
- "Being able to work remotely is probably one of the coolest fuckin things that's ever happened to me."
**⚠️ These are examples, not templates.** Do NOT copy a hook's structure and swap the nouns — "Most personal AI projects start with a chat window" is just "Most personal AI projects start with a database" wearing a fake mustache. Every hook should be **original to the piece**. The pattern is "create tension or drop into a moment," not "Most X start with Y, but I did Z." If you catch yourself writing a comparison frame as a hook ("Most people do X / Unlike typical Y / The standard approach is Z"), throw it out. Start with the thing itself — what it does, why it matters, what broke.
### Headers as narrative beats
Headers tell a story, not an outline. They're conversational, sometimes sentence fragments.
- ✅ "## I quit my job." / "## The Commitment Problem" / "## Finding My Place"
- ✅ "## We are not a commodity." / "## The bet"
- ❌ "## Introduction" / "## Key Takeaways" / "## Conclusion"
### Endings are often abrupt
No forced wrap-up or "In conclusion..." — just stop when the idea is done. Often a short, warm line.
- "Life is good."
- "Bring it New Year."
- "I'm excited to find out."
- "It's very exciting, and I look forward to exploring this idea more."
### Variable post length is intentional
The digital garden philosophy means a post can be 50 words or 4,000. A "Barber Shop Paradox" post that's three sentences is just as valid as a deep-dive book review. Don't pad short ideas to fill space.
### Links woven into narrative
Never "click here." Links are part of the sentence flow.
- ✅ "I highly recommend watching [this video from Jay Abraham](url)."
- ✅ "We partnered with [Dan Abramov and Maggie Appleton](url) to help produce their online course."
- ❌ "[Click here](url) to learn more."
### Tables for comparison, not decoration
Joel uses tables when making architectural comparisons or showing before/after. Keep them focused.
---
## Philosophical DNA
These values permeate Joel's writing. Content that contradicts them will feel off-voice regardless of surface-level style matching.
### User outcomes over features
"Don't make a better tutorial video. Make a better frontend web developer." Every piece connects technology or process to human outcomes.
### Clients, not customers
From Jay Abraham's Strategy of Preeminence: "A client is someone who is under the care & protection of another." Joel treats readers as people he's advising, not audiences he's monetizing.
### Anti-performative
The blog is for Joel first, readers second. "It's not that I don't care about you, but this is for me." This honesty paradoxically makes it more valuable to readers.
### JFDI (Just Fucking Do It)
Bias toward action. "Quitting is a habit too — and I'm not training that one." No hand-wringing. Decide, commit, iterate.
### Consistency > perfection
"Imperfection doesn't mean failure — stopping does." Posts can be seedlings. Ideas can be half-formed. Ship it and tend the garden.
### Sovereignty and ownership
Self-host. Own your data. Own your platform. Against dependence on platforms that can be ruined by "one asshole."
### Crediting sources
Always name people and link to their work. Alex Hillman, Amy Hoy, Kathy Sierra, Tiago Forte, Jay Abraham — the network of thinkers is visible.
---
## The Fabrication Rule — NEVER Make Things Up
**This is the single most important rule in this skill.**
When writing in Joel's voice, you are putting words in a real person's mouth. Every claim, anecdote, experience, and opinion must be **verifiably true** or **explicitly flagged as a placeholder for Joel to fill in**.
### What countsRelated in Ads & Marketing
ads
IncludedMulti-platform paid advertising audit and optimization skill. Analyzes Google, Meta, YouTube, LinkedIn, TikTok, Microsoft, and Apple Ads. 250+ checks with scoring, parallel agents, industry templates, and AI creative generation.
banana
IncludedAI image generation Creative Director powered by Google Gemini Nano Banana models. Use this skill for ANY request involving image creation, editing, visual asset production, or creative direction. Triggers on: generate an image, create a photo, edit this picture, design a logo, make a banner, visual for my anything, and all /banana commands. Handles text-to-image, image editing, multi-turn creative sessions, batch workflows, and brand presets.
rpg-migration-analyzer
IncludedAnalyzes legacy RPG (Report Program Generator) programs from AS/400 and IBM i systems for migration to modern Java applications. Extracts business logic from RPG III/IV/ILE source code, identifies data structures (D-specs), file operations (F-specs), program dependencies (CALLB/CALLP), and converts RPG constructs to Java equivalents. Generates migration reports, complexity estimates, and Java implementation strategies with POJO classes, JPA entities, and service methods. Use when modernizing AS/400 or IBM i legacy systems, analyzing RPG source files (.rpg, .rpgle, .RPGLE), converting RPG to Java, mapping data specifications to Java classes, planning legacy system migration, or when user mentions RPG analysis, Report Program Generator, RPG III/IV/ILE, AS/400 modernization, IBM i migration, packed decimal conversion, or mainframe application rewrite.
brand-library-architect
IncludedBuild a complete brand library for a product — visual asset render pipeline, brand documentation set (BRAND, COPY, MANIFESTO, BIOS, FAQ, GLOSSARY, TONE, PRICING), open-source convention files (README, CONTRIBUTING, SECURITY, CODE_OF_CONDUCT), and a self-contained press kit. This skill should be used when the user asks to "build a brand library / brand kit / press kit / brand assets" for a product, "set up a brand library workflow," "create a positioning manifesto plus visual identity," or any combination of brand documentation + visual asset pipeline. Apply phase-by-phase or run end-to-end. Templates are product-agnostic and use {{TOKEN}} placeholders the skill prompts the user to fill.
writing-tech-post
IncludedAuthors engineering blog posts end-to-end: launch deep-dives, incident postmortems, architecture migrations, performance case studies, tutorials, AI/agent system writeups, security disclosures, and research-to-product translations. Picks the correct archetype, plans the abstraction ladder, enforces an evidence cadence (diagrams, benchmarks, profiles, traces, code, ablations), tunes voice against publisher house styles (Datadog, Vercel, GitHub, AWS, Meta, Cloudflare, Jane Street), and runs a pre-publish gate for narrative momentum and disclosure ethics. Use when drafting a new engineering post, restructuring a draft that feels flat, deciding which evidence form belongs where, validating that depth and product context are balanced, or preparing a postmortem, migration, or performance narrative for external publication. Do not use for API reference documentation, README authoring, marketing copy, release notes, generic SEO content, ghost-written executive thought leadership, or non-engineering long-form essays.
blog-google
IncludedGoogle API integration for blog performance: PageSpeed Insights, CrUX Core Web Vitals with 25-week history, Search Console performance, URL Inspection, Indexing API, GA4 organic traffic, NLP entity analysis for E-E-A-T, YouTube video search for embedding, and Google Ads Keyword Planner. Progressive feature availability based on credential tier (API key, OAuth/service account, GA4, Ads). Shares config with claude-seo at ~/.config/claude-seo/google-api.json. Use when user says "google data", "page speed", "core web vitals", "search console", "indexation", "GA4", "keyword research", "nlp entities", "blog performance", "youtube search", "google api setup".