[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"header-categories":3,"post-effective-technical-writing-developers":73,"parsed-post-f4f45674-fd5f-413d-b77a-133582dc2fb9":137},{"success":4,"data":5},true,{"items":6,"pagination":70},[7,16,24,32,40,48,56,63],{"id":8,"name":9,"description":10,"parentId":11,"createdAt":12,"updatedAt":12,"parent":11,"children":13,"_count":14},"ai-future","AI & The Future","Artificial intelligence and emerging technology",null,"2026-07-24T06:02:45.990Z",[],{"posts":15},1,{"id":17,"name":18,"description":19,"parentId":11,"createdAt":20,"updatedAt":20,"parent":11,"children":21,"_count":22},"tools-productivity","Tools & Productivity","Developer tools and workflow optimization","2026-07-24T06:02:45.712Z",[],{"posts":23},7,{"id":25,"name":26,"description":27,"parentId":11,"createdAt":28,"updatedAt":28,"parent":11,"children":29,"_count":30},"career","Career & Growth","Professional development for developers","2026-07-24T06:02:45.486Z",[],{"posts":31},3,{"id":33,"name":34,"description":35,"parentId":11,"createdAt":36,"updatedAt":36,"parent":11,"children":37,"_count":38},"opinion","Opinion & Analysis","Industry analysis and technical opinions","2026-07-24T06:02:45.272Z",[],{"posts":39},6,{"id":41,"name":42,"description":43,"parentId":11,"createdAt":44,"updatedAt":44,"parent":11,"children":45,"_count":46},"tutorials","Tutorials","Step-by-step learning guides","2026-07-24T06:02:44.965Z",[],{"posts":47},21,{"id":49,"name":50,"description":51,"parentId":11,"createdAt":52,"updatedAt":52,"parent":11,"children":53,"_count":54},"software-engineering","Software Engineering","Best practices, patterns, and principles","2026-07-24T06:02:44.689Z",[],{"posts":55},24,{"id":57,"name":58,"description":59,"parentId":11,"createdAt":60,"updatedAt":60,"parent":11,"children":61,"_count":62},"devops-cloud","DevOps & Cloud","Infrastructure, deployment, and cloud computing","2026-07-24T06:02:44.453Z",[],{"posts":39},{"id":64,"name":65,"description":66,"parentId":11,"createdAt":67,"updatedAt":67,"parent":11,"children":68,"_count":69},"web-development","Web Development","Frontend and backend web development tutorials and guides","2026-07-24T06:02:44.169Z",[],{"posts":55},{"page":15,"limit":71,"total":71,"totalPages":15,"hasNext":72,"hasPrev":72},8,false,{"success":4,"data":74},{"id":75,"slug":76,"title":77,"excerpt":78,"content":79,"status":80,"visibility":81,"featuredImage":82,"canonicalUrl":11,"readingTime":23,"viewCount":83,"commentEnabled":4,"publishedAt":84,"scheduledAt":11,"createdAt":85,"updatedAt":86,"seoTitle":87,"seoDescription":78,"seoKeywords":11,"authorId":88,"author":89,"coAuthors":94,"tags":95,"categories":101,"comments":104,"_count":105,"relatedPosts":107},"f4f45674-fd5f-413d-b77a-133582dc2fb9","effective-technical-writing-developers","Effective Technical Writing for Developers","Write documentation, blog posts, and READMEs that people actually read. Practical techniques from years of writing about code.","## Writing Is a Superpower\n\nThe best developers I know are great communicators. They write clear documentation, persuasive RFCs, and blog posts that spread knowledge.\n\n## The Inverted Pyramid\n\nStart with the conclusion, then provide supporting detail:\n\n```\n❌ \"In 2004, Roy Fielding published his dissertation on REST...\"\n   (3 paragraphs of history before you learn anything useful)\n\n✅ \"Use PATCH for partial updates. Here's why and how:\"\n   (conclusion first, then explanation)\n```\n\n## Show, Don't Describe\n\n```\n❌ \"The function takes a string parameter and returns an array\n    of words after splitting on whitespace.\"\n\n✅ words(\"hello world\")  \u002F\u002F → [\"hello\", \"world\"]\n```\n\n::callout{icon=\"i-lucide-pen-line\" color=\"primary\"}\nA code example is worth a thousand words of explanation. Always lead with a working example, then explain the nuances.\n::\n\n## Structure for Scanners\n\nMost readers scan before reading. Help them:\n\n1. **Descriptive headings** — \"How to configure\" > \"Configuration\"\n2. **Code blocks early** — Don't bury the example\n3. **Bold key terms** — Guide the eye to important concepts\n4. **Lists for steps** — Numbered for sequences, bullets for options\n5. **TL;DR at the top** — Respect busy readers\n\n## README Template\n\n```markdown\n# Project Name\n\nOne sentence: what it does and who it's for.\n\n## Quick Start\n\n\\`\\`\\`bash\nnpm install my-package\n\\`\\`\\`\n\n\\`\\`\\`typescript\nimport { thing } from 'my-package'\nthing.doStuff() \u002F\u002F → result\n\\`\\`\\`\n\n## Why This Exists\n\nThe problem it solves (2-3 sentences).\n\n## API Reference\n\n[Details...]\n```\n\n## Common Mistakes\n\n- **Writing for yourself, not your reader** — They don't have your context\n- **Assuming knowledge** — Define acronyms on first use\n- **Wall of text** — Break into sections, add whitespace\n- **No examples** — Abstract explanations without concrete code\n- **Outdated docs** — Worse than no docs (misleading)\n\n## The Editing Process\n\n1. Write the messy first draft (get ideas out)\n2. Restructure for the reader's journey\n3. Cut 30% of the words (be ruthless)\n4. Add examples where you used abstract language\n5. Read aloud — if you stumble, rewrite\n\n## One Weird Trick\n\nWrite the introduction last. You'll know what to introduce only after writing the body.\n\nGood writing compounds. Every clear explanation you publish builds your reputation and helps someone struggling with the same problem.\n","published","public","https:\u002F\u002Fimages.unsplash.com\u002Fphoto-1580894894513-541e068a3e2b?w=1200&q=80",1156,"2026-05-26T06:03:55.773Z","2026-07-24T06:03:55.775Z","2026-07-28T17:09:10.716Z","Effective Technical Writing for Developers | BitBlog","fddb5d93-7a2c-4d86-a06a-fa32e73a01c6",{"email":90,"bio":91,"id":88,"name":92,"avatarUrl":93},"mbeahessilfieprince@gmail.com","Fullstack Software Developer ","Mbeah Essilfie","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F93322394?v=4",[],[96],{"id":97,"name":98,"color":99,"description":100},"architecture","Architecture","#795548","Software architecture patterns",[102,103],{"id":33,"name":34,"description":35},{"id":25,"name":26,"description":27},[],{"comments":106},0,[108,117,127],{"id":109,"slug":110,"title":111,"excerpt":112,"featuredImage":113,"viewCount":114,"readingTime":71,"publishedAt":115,"author":116},"2997028f-4d22-4eb7-9d86-894a54cb559a","building-type-safe-apis-nuxt3-prisma","Building Type-Safe APIs with Nuxt 3 and Prisma","Learn how to build end-to-end type-safe APIs using Nuxt 3 server routes and Prisma ORM for a seamless developer experience.","https:\u002F\u002Fimages.unsplash.com\u002Fphoto-1498050108023-c5249f4df085?w=1200&q=80",1922,"2026-07-23T06:02:46.910Z",{"id":88,"name":92,"avatarUrl":93},{"id":118,"slug":119,"title":120,"excerpt":121,"featuredImage":122,"viewCount":123,"readingTime":124,"publishedAt":125,"author":126},"da9e4553-8b0d-411e-b4ec-f9684017e163","mastering-tailwind-css-design-systems","Mastering Tailwind CSS: From Utility Classes to Design Systems","Go beyond basic utility classes and learn how to build cohesive, maintainable design systems with Tailwind CSS.","https:\u002F\u002Fimages.unsplash.com\u002Fphoto-1555066931-4365d14bab8c?w=1200&q=80",257,10,"2026-07-21T06:02:49.268Z",{"id":88,"name":92,"avatarUrl":93},{"id":128,"slug":129,"title":130,"excerpt":131,"featuredImage":132,"viewCount":133,"readingTime":134,"publishedAt":135,"author":136},"50add5fc-4026-4267-b917-7f71ea9e35b0","complete-guide-vue3-composables","The Complete Guide to Vue 3 Composables","Understand the power of Vue 3's Composition API through practical, real-world composable patterns that you can use today.","https:\u002F\u002Fimages.unsplash.com\u002Fphoto-1517694712202-14dd9538aa97?w=1200&q=80",990,12,"2026-07-19T06:02:51.753Z",{"id":88,"name":92,"avatarUrl":93},{"data":138,"body":140,"toc":406},{"title":139,"description":139},"",{"type":141,"children":142},"root",[143,152,158,164,169,181,187,196,207,213,218,274,280,291,297,351,357,385,391,396,401],{"type":144,"tag":145,"props":146,"children":148},"element","h2",{"id":147},"writing-is-a-superpower",[149],{"type":150,"value":151},"text","Writing Is a Superpower",{"type":144,"tag":153,"props":154,"children":155},"p",{},[156],{"type":150,"value":157},"The best developers I know are great communicators. They write clear documentation, persuasive RFCs, and blog posts that spread knowledge.",{"type":144,"tag":145,"props":159,"children":161},{"id":160},"the-inverted-pyramid",[162],{"type":150,"value":163},"The Inverted Pyramid",{"type":144,"tag":153,"props":165,"children":166},{},[167],{"type":150,"value":168},"Start with the conclusion, then provide supporting detail:",{"type":144,"tag":170,"props":171,"children":175},"pre",{"className":172,"code":174,"language":150},[173],"language-text","❌ \"In 2004, Roy Fielding published his dissertation on REST...\"\n   (3 paragraphs of history before you learn anything useful)\n\n✅ \"Use PATCH for partial updates. Here's why and how:\"\n   (conclusion first, then explanation)\n",[176],{"type":144,"tag":177,"props":178,"children":179},"code",{"__ignoreMap":139},[180],{"type":150,"value":174},{"type":144,"tag":145,"props":182,"children":184},{"id":183},"show-dont-describe",[185],{"type":150,"value":186},"Show, Don't Describe",{"type":144,"tag":170,"props":188,"children":191},{"className":189,"code":190,"language":150},[173],"❌ \"The function takes a string parameter and returns an array\n    of words after splitting on whitespace.\"\n\n✅ words(\"hello world\")  \u002F\u002F → [\"hello\", \"world\"]\n",[192],{"type":144,"tag":177,"props":193,"children":194},{"__ignoreMap":139},[195],{"type":150,"value":190},{"type":144,"tag":197,"props":198,"children":201},"callout",{"color":199,"icon":200},"primary","i-lucide-pen-line",[202],{"type":144,"tag":153,"props":203,"children":204},{},[205],{"type":150,"value":206},"A code example is worth a thousand words of explanation. Always lead with a working example, then explain the nuances.",{"type":144,"tag":145,"props":208,"children":210},{"id":209},"structure-for-scanners",[211],{"type":150,"value":212},"Structure for Scanners",{"type":144,"tag":153,"props":214,"children":215},{},[216],{"type":150,"value":217},"Most readers scan before reading. Help them:",{"type":144,"tag":219,"props":220,"children":221},"ol",{},[222,234,244,254,264],{"type":144,"tag":223,"props":224,"children":225},"li",{},[226,232],{"type":144,"tag":227,"props":228,"children":229},"strong",{},[230],{"type":150,"value":231},"Descriptive headings",{"type":150,"value":233}," — \"How to configure\" > \"Configuration\"",{"type":144,"tag":223,"props":235,"children":236},{},[237,242],{"type":144,"tag":227,"props":238,"children":239},{},[240],{"type":150,"value":241},"Code blocks early",{"type":150,"value":243}," — Don't bury the example",{"type":144,"tag":223,"props":245,"children":246},{},[247,252],{"type":144,"tag":227,"props":248,"children":249},{},[250],{"type":150,"value":251},"Bold key terms",{"type":150,"value":253}," — Guide the eye to important concepts",{"type":144,"tag":223,"props":255,"children":256},{},[257,262],{"type":144,"tag":227,"props":258,"children":259},{},[260],{"type":150,"value":261},"Lists for steps",{"type":150,"value":263}," — Numbered for sequences, bullets for options",{"type":144,"tag":223,"props":265,"children":266},{},[267,272],{"type":144,"tag":227,"props":268,"children":269},{},[270],{"type":150,"value":271},"TL;DR at the top",{"type":150,"value":273}," — Respect busy readers",{"type":144,"tag":145,"props":275,"children":277},{"id":276},"readme-template",[278],{"type":150,"value":279},"README Template",{"type":144,"tag":170,"props":281,"children":286},{"className":282,"code":283,"language":284,"meta":139,"style":285},"language-markdown","# Project Name\n\nOne sentence: what it does and who it's for.\n\n## Quick Start\n\n\\`\\`\\`bash\nnpm install my-package\n\\`\\`\\`\n\n\\`\\`\\`typescript\nimport { thing } from 'my-package'\nthing.doStuff() \u002F\u002F → result\n\\`\\`\\`\n\n## Why This Exists\n\nThe problem it solves (2-3 sentences).\n\n## API Reference\n\n[Details...]\n","markdown","undefined",[287],{"type":144,"tag":177,"props":288,"children":289},{"__ignoreMap":139},[290],{"type":150,"value":283},{"type":144,"tag":145,"props":292,"children":294},{"id":293},"common-mistakes",[295],{"type":150,"value":296},"Common Mistakes",{"type":144,"tag":298,"props":299,"children":300},"ul",{},[301,311,321,331,341],{"type":144,"tag":223,"props":302,"children":303},{},[304,309],{"type":144,"tag":227,"props":305,"children":306},{},[307],{"type":150,"value":308},"Writing for yourself, not your reader",{"type":150,"value":310}," — They don't have your context",{"type":144,"tag":223,"props":312,"children":313},{},[314,319],{"type":144,"tag":227,"props":315,"children":316},{},[317],{"type":150,"value":318},"Assuming knowledge",{"type":150,"value":320}," — Define acronyms on first use",{"type":144,"tag":223,"props":322,"children":323},{},[324,329],{"type":144,"tag":227,"props":325,"children":326},{},[327],{"type":150,"value":328},"Wall of text",{"type":150,"value":330}," — Break into sections, add whitespace",{"type":144,"tag":223,"props":332,"children":333},{},[334,339],{"type":144,"tag":227,"props":335,"children":336},{},[337],{"type":150,"value":338},"No examples",{"type":150,"value":340}," — Abstract explanations without concrete code",{"type":144,"tag":223,"props":342,"children":343},{},[344,349],{"type":144,"tag":227,"props":345,"children":346},{},[347],{"type":150,"value":348},"Outdated docs",{"type":150,"value":350}," — Worse than no docs (misleading)",{"type":144,"tag":145,"props":352,"children":354},{"id":353},"the-editing-process",[355],{"type":150,"value":356},"The Editing Process",{"type":144,"tag":219,"props":358,"children":359},{},[360,365,370,375,380],{"type":144,"tag":223,"props":361,"children":362},{},[363],{"type":150,"value":364},"Write the messy first draft (get ideas out)",{"type":144,"tag":223,"props":366,"children":367},{},[368],{"type":150,"value":369},"Restructure for the reader's journey",{"type":144,"tag":223,"props":371,"children":372},{},[373],{"type":150,"value":374},"Cut 30% of the words (be ruthless)",{"type":144,"tag":223,"props":376,"children":377},{},[378],{"type":150,"value":379},"Add examples where you used abstract language",{"type":144,"tag":223,"props":381,"children":382},{},[383],{"type":150,"value":384},"Read aloud — if you stumble, rewrite",{"type":144,"tag":145,"props":386,"children":388},{"id":387},"one-weird-trick",[389],{"type":150,"value":390},"One Weird Trick",{"type":144,"tag":153,"props":392,"children":393},{},[394],{"type":150,"value":395},"Write the introduction last. You'll know what to introduce only after writing the body.",{"type":144,"tag":153,"props":397,"children":398},{},[399],{"type":150,"value":400},"Good writing compounds. Every clear explanation you publish builds your reputation and helps someone struggling with the same problem.",{"type":144,"tag":402,"props":403,"children":404},"style",{},[405],{"type":150,"value":139},{"title":139,"searchDepth":407,"depth":407,"links":408},2,[409,410,411,412,413,414,415,416],{"id":147,"depth":407,"text":151},{"id":160,"depth":407,"text":163},{"id":183,"depth":407,"text":186},{"id":209,"depth":407,"text":212},{"id":276,"depth":407,"text":279},{"id":293,"depth":407,"text":296},{"id":353,"depth":407,"text":356},{"id":387,"depth":407,"text":390}]