<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Refactoring English</title><link>https://refactoringenglish.com/</link><description>Recent content on Refactoring English</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Wed, 25 Mar 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://refactoringenglish.com/index.xml" rel="self" type="application/rss+xml"/><item><title>Which Design Doc Did a Human Write?</title><link>https://refactoringenglish.com/blog/ai-vs-human-design-doc/</link><pubDate>Wed, 25 Mar 2026 00:00:00 +0000</pubDate><guid>https://refactoringenglish.com/blog/ai-vs-human-design-doc/</guid><description>&lt;p>I created three design docs for the same open-source web app:&lt;/p>
&lt;ul>
&lt;li>I spent 16 hours writing one of the design docs completely by hand.&lt;/li>
&lt;li>I generated one using Claude Opus 4.6 (medium effort).&lt;/li>
&lt;li>I generated one using GPT-5.4 (high effort).&lt;/li>
&lt;/ul>
&lt;p>I generated the AI versions in a few minutes. I fed the agents a prompt that included the design docs chapter of my book and a skeleton design doc structure. The agents who wrote the AI-generated docs did not see the version I wrote.&lt;/p></description></item><item><title>Why Improve Your Writing?</title><link>https://refactoringenglish.com/excerpts/why-improve-your-writing/</link><pubDate>Tue, 03 Mar 2026 00:00:00 +0000</pubDate><guid>https://refactoringenglish.com/excerpts/why-improve-your-writing/</guid><description>&lt;p>I&amp;rsquo;ve worked as a developer for 20 years, and I&amp;rsquo;ve always cared about clear writing. When I join a new team, the first thing I do is ask to update the onboarding documents. As I ramp up on the team, I document what I learn and encourage my teammates to do the same.&lt;/p>
&lt;p>Sometimes, other developers ask me why I invest so much into writing. Programming is technical, so why spend time on a &amp;ldquo;soft skill&amp;rdquo; like writing? Isn&amp;rsquo;t that why we have technical writers and product managers?&lt;/p></description></item><item><title>The Most Popular Blogs of Hacker News in 2025</title><link>https://refactoringenglish.com/blog/2025-hn-top-5/</link><pubDate>Fri, 02 Jan 2026 00:00:00 +0000</pubDate><guid>https://refactoringenglish.com/blog/2025-hn-top-5/</guid><description>&lt;p>With 2025 wrapped up, I can finally answer a question I&amp;rsquo;m curious about every year: who were &lt;a href="https://refactoringenglish.com/tools/hn-popularity/?start=2025-01-01&amp;amp;end=2025-12-31">the most popular bloggers of Hacker News&lt;/a>?&lt;/p>
&lt;div class="card mb-4">
 &lt;div class="card-body">
 &lt;div class="hn-top5-chart-container">
 &lt;canvas id="hnTopBloggersCumulativeChart">&lt;/canvas>
 &lt;/div>
 &lt;/div>
&lt;/div>
&lt;div class="alert alert-info">
&lt;p>&lt;strong>Who counts as a blogger?&lt;/strong>&lt;/p>
&lt;p>I explain more in &lt;a href="https://refactoringenglish.com/tools/hn-popularity/methodology/">my methodology page&lt;/a>, but it&amp;rsquo;s basically anyone who blogs as an individual rather than as part of a company or a team. For example, &lt;a href="https://jgc.org">John Graham-Cumming&lt;/a> blogged while he was the CTO of Cloudflare, so I count his &lt;a href="https://refactoringenglish.com/tools/hn-popularity/domain/?d=jgc.org">personal blog&lt;/a> but not &lt;a href="https://blog.cloudflare.com/author/john-graham-cumming/">his posts to the Cloudflare company blog&lt;/a>.&lt;/p></description></item><item><title>What Makes the Intro to *Crafting Interpreters* so Good?</title><link>https://refactoringenglish.com/blog/crafting-interpreters-intro/</link><pubDate>Wed, 19 Nov 2025 00:00:00 +0000</pubDate><guid>https://refactoringenglish.com/blog/crafting-interpreters-intro/</guid><description>&lt;p>One of my favorite programming books is &lt;a href="https://craftinginterpreters.com">&lt;em>Crafting Interpreters&lt;/em>&lt;/a> by Bob Nystrom. It teaches you how to build a programming language from scratch. Along the way, you learn about text parsing, data structures, virtual machines, and several other skills that make you a stronger developer.&lt;/p>













 











&lt;div class="img-wrapper" style="max-width: 375px">



 &lt;a href="https://refactoringenglish.com/blog/crafting-interpreters-intro/crafting-interpreters.webp">
 &lt;img
 
 sizes="(min-width: 768px) 375px, 98vw"
 srcset='https://refactoringenglish.com/blog/crafting-interpreters-intro/crafting-interpreters.webp 1224w'
 src="https://refactoringenglish.com/blog/crafting-interpreters-intro/crafting-interpreters.webp" alt="" loading="lazy"/>
 &lt;/a>



&lt;/div>


&lt;p>I was re-reading the book recently and realized that its &lt;a href="https://craftinginterpreters.com/introduction.html">introduction&lt;/a> is delightfully effective. Developers are &lt;a href="https://refactoringenglish.com/excerpts/write-blog-posts-developers-read/#get-to-the-point">terrible at writing introductions&lt;/a>, so it&amp;rsquo;s worth studying what makes the &lt;em>Crafting Interpreters&lt;/em> intro so compelling.&lt;/p></description></item><item><title>How to Get Meaningful Feedback on Your Design Document</title><link>https://refactoringenglish.com/excerpts/useful-feedback-on-design-docs/</link><pubDate>Mon, 03 Nov 2025 00:00:00 +0000</pubDate><guid>https://refactoringenglish.com/excerpts/useful-feedback-on-design-docs/</guid><description>&lt;p>You&amp;rsquo;ve spent weeks carefully writing a design document for your software project, but what happens next? How can you get useful feedback about it from your teammates? How do you prevent your design review from dragging on for months?&lt;/p>
&lt;p>I&amp;rsquo;ve been through many design reviews in my career as both the author and reviewer, and I have a special fondness for effective reviews. Through trial and error, I&amp;rsquo;ve learned techniques that help the review process move smoothly and yield material improvements to the design.&lt;/p></description></item><item><title>The Software Essays that Shaped Me</title><link>https://refactoringenglish.com/blog/software-essays-that-shaped-me/</link><pubDate>Tue, 30 Sep 2025 00:00:00 +0000</pubDate><guid>https://refactoringenglish.com/blog/software-essays-that-shaped-me/</guid><description>&lt;p>I started reading software blogs before I got my first programming job 20 years ago. At this point, I&amp;rsquo;ve read thousands of blog posts and essays about software, but only a small handful stuck in my mind and changed the way I think.&lt;/p>
&lt;!-- I'm not sure what the issue is. I'm guessing it doesn't like the leading
 but these are valid anchors in the browser. -->
&lt;!-- markdownlint-disable link-fragments -->
&lt;ol>
&lt;li>&lt;a href="#-by-joel-spolsky-2000">&amp;ldquo;The Joel Test: 12 Steps to Better Code&amp;rdquo; by Joel Spolsky (2000)&lt;/a>&lt;/li>
&lt;li>&lt;a href="#-by-alexis-king-2019">&amp;ldquo;Parse, don&amp;rsquo;t validate&amp;rdquo; by Alexis King (2019)&lt;/a>&lt;/li>
&lt;li>&lt;a href="#-by-fred-brooks-1986">&amp;ldquo;No Silver Bullet - Essence and Accident in Software Engineering&amp;rdquo; by Fred Brooks (1986)&lt;/a>&lt;/li>
&lt;li>&lt;a href="#-by-joel-spolsky-2000-1">&amp;ldquo;Choices&amp;rdquo; by Joel Spolsky (2000)&lt;/a>&lt;/li>
&lt;li>&lt;a href="#-by-raymond-chen-2010">&amp;ldquo;Application compatibility layers are there for the customer, not for the program&amp;rdquo; by Raymond Chen (2010)&lt;/a>&lt;/li>
&lt;li>&lt;a href="#-by-erik-kuefler-2014">&amp;ldquo;Don&amp;rsquo;t Put Logic in Tests&amp;rdquo; by Erik Kuefler (2014)&lt;/a>&lt;/li>
&lt;li>&lt;a href="#-by-julia-evans-2020">&amp;ldquo;A little bit of plain Javascript can do a lot&amp;rdquo; by Julia Evans (2020)&lt;/a>&lt;/li>
&lt;li>&lt;a href="#-by-dan-mckinley-2015">&amp;ldquo;Choose Boring Technology&amp;rdquo; by Dan McKinley (2015)&lt;/a>&lt;/li>
&lt;li>&lt;a href="#-by-terence-eden-2022">&amp;ldquo;I&amp;rsquo;ve locked myself out of my digital life&amp;rdquo; by Terence Eden (2022)&lt;/a>&lt;/li>
&lt;li>&lt;a href="#bonus-brad-fitzpatrick-on-parsing-user-input-2009">Bonus: Brad Fitzpatrick on parsing user input (2009)&lt;/a>&lt;/li>
&lt;/ol>
&lt;h2 id="-by-joel-spolsky-2000">&lt;a href="https://www.joelonsoftware.com/2000/08/09/the-joel-test-12-steps-to-better-code/">&amp;ldquo;The Joel Test: 12 Steps to Better Code&amp;rdquo;&lt;/a> by Joel Spolsky (2000)&lt;/h2>
&lt;p>Joel Spolsky is the greatest software blogger of all time. His essays have informed so much of my approach to software that it was hard to pick out just one, but &amp;ldquo;The Joel Test&amp;rdquo; is my favorite.&lt;/p></description></item><item><title>Adam Gordon Bell on Attracting Customers through Blogging</title><link>https://refactoringenglish.com/blog/interview-adam-gordon-bell/</link><pubDate>Fri, 12 Sep 2025 00:00:00 +0000</pubDate><guid>https://refactoringenglish.com/blog/interview-adam-gordon-bell/</guid><description>&lt;p>Adam Gordon Bell is a developer, blogger, and the host of the software engineering podcast, &lt;a href="https://corecursive.com/">CoRecursive&lt;/a>. I interviewed Adam about writing and his success at attracting customers through his blog posts when he worked at Earthly.&lt;/p>
&lt;p>We talk about:&lt;/p>
&lt;ul>
&lt;li>How Adam consistently wrote blog posts that reached the front page of Hacker News&lt;/li>
&lt;li>Discovering blog topics that attract potential customers&lt;/li>
&lt;li>Techniques Adam used to strengthen his writing&lt;/li>
&lt;li>The value of writing respectfully about your competitors&lt;/li>
&lt;/ul>
&lt;div class="video-embed">&lt;iframe src="https://iframe.mediadelivery.net/embed/490164/808903b8-30ff-49df-b389-1f2baeef0ea7?autoplay=false&amp;loop=false&amp;muted=false&amp;preload=true&amp;responsive=true" loading="lazy" style="border:0;position:absolute;top:0;height:100%;width:100%;" allow="accelerometer;gyroscope;autoplay;encrypted-media;picture-in-picture;" allowfullscreen="true">&lt;/iframe>&lt;/div>
&lt;h2 id="transcript">Transcript&lt;/h2>
&lt;ul>
&lt;li>&lt;a href="#getting-started-with-blogging">Getting started with blogging&lt;/a>&lt;/li>
&lt;li>&lt;a href="#investing-outsized-effort-for-outsized-returns">Investing outsized effort for outsized returns&lt;/a>&lt;/li>
&lt;li>&lt;a href="#getting-early-feedback-on-blog-posts">Getting early feedback on blog posts&lt;/a>&lt;/li>
&lt;li>&lt;a href="#tools-for-improving-your-writing">Tools for improving your writing&lt;/a>&lt;/li>
&lt;li>&lt;a href="#finding-focus-for-writing">Finding focus for writing&lt;/a>&lt;/li>
&lt;li>&lt;a href="#crafting-blog-post-titles">Crafting blog post titles&lt;/a>&lt;/li>
&lt;li>&lt;a href="#panel-of-experts-style-of-blogging">Panel-of-experts style of blogging&lt;/a>&lt;/li>
&lt;li>&lt;a href="#blogging-respectfully-about-your-competitor">Blogging respectfully about your competitor&lt;/a>&lt;/li>
&lt;li>&lt;a href="#improving-your-writing-through-imitation">Improving your writing through imitation&lt;/a>&lt;/li>
&lt;/ul>
&lt;p>&lt;em>Note: I&amp;rsquo;ve lightly edited the transcript for brevity.&lt;/em>&lt;/p></description></item><item><title>Reader Feedback about my Chapter List</title><link>https://refactoringenglish.com/blog/chapter-interest-results/</link><pubDate>Fri, 29 Aug 2025 00:00:00 +0000</pubDate><guid>https://refactoringenglish.com/blog/chapter-interest-results/</guid><description>&lt;p>For the past eight months, I&amp;rsquo;ve been working on my book, &lt;em>Refactoring English: Effective Writing for Software Developers&lt;/em>. I&amp;rsquo;m publishing the book incrementally as I write, which means readers give me feedback about the book in real time.&lt;/p>
&lt;p>I started writing the chapters I felt most confident readers would like, but now that I&amp;rsquo;m about 50% complete, I want to make sure the remaining chapters are things my readers actually want to learn.&lt;/p></description></item><item><title>Underused Techniques for Effective Emails</title><link>https://refactoringenglish.com/excerpts/techniques-for-writing-emails/</link><pubDate>Wed, 16 Jul 2025 00:00:00 +0000</pubDate><guid>https://refactoringenglish.com/excerpts/techniques-for-writing-emails/</guid><description>&lt;style>
 blockquote {
 font-style: normal;
 }

 .pm-email blockquote {
 border-left: 4px solid purple !important;
 }

 .good-email blockquote {
 border-left: 4px solid #02c700 !important;

 h3 {
 margin-top: 1rem;
 font-size: 1.6em;
 font-weight: bold;
 }
 }

 .bad-email blockquote {
 border-left: 4px solid red !important;
 }

 p img {
 margin-top: 3rem !important;
 margin-bottom: 1rem !important;
 }
&lt;/style>
&lt;p>For software developers, there&amp;rsquo;s tremendous value in writing effective emails. Good emails save time, reduce misunderstandings, and earn you recognition within your company.&lt;/p></description></item><item><title>How to Write Compelling Software Release Announcements</title><link>https://refactoringenglish.com/excerpts/release-announcements/</link><pubDate>Wed, 25 Jun 2025 00:00:00 +0000</pubDate><guid>https://refactoringenglish.com/excerpts/release-announcements/</guid><description>&lt;p>A release announcement showcases how the user&amp;rsquo;s experience is better today than it was yesterday. That sounds obvious, but most release announcements seem to forget that there&amp;rsquo;s a user at all.&lt;/p>
&lt;p>So many release announcements just enumerate new features in a way that&amp;rsquo;s totallly divorced from how real people use the software. The announcement is essentially just a changelog with better writing.&lt;/p>
&lt;p>For example, here&amp;rsquo;s a &amp;ldquo;changelog&amp;rdquo; style of announcing a new feature:&lt;/p></description></item><item><title>How to Write Blog Posts that Developers Read</title><link>https://refactoringenglish.com/excerpts/write-blog-posts-developers-read/</link><pubDate>Thu, 27 Mar 2025 00:00:00 +0000</pubDate><guid>https://refactoringenglish.com/excerpts/write-blog-posts-developers-read/</guid><description>&lt;p>I recently spoke to a developer who tried blogging but gave up because nobody was reading his posts. I checked out his blog, and it was immediately obvious why he didn&amp;rsquo;t have any readers.&lt;/p>
&lt;p>The developer had interesting insights, but he made so many mistakes in presenting his ideas that he was driving everyone away. The tragedy was that these errors were easy to fix. Once you learn to recognize them, they feel obvious, but some bloggers make these mistakes for years.&lt;/p></description></item><item><title>HN Popularity Contest</title><link>https://refactoringenglish.com/tools/hn-popularity/methodology/</link><pubDate>Thu, 13 Mar 2025 00:00:00 +0000</pubDate><guid>https://refactoringenglish.com/tools/hn-popularity/methodology/</guid><description>&lt;h2 id="what-counts-as-a-personal-blog">What counts as a personal blog?&lt;/h2>
&lt;ul>
&lt;li>I count a site as a personal blog if:
&lt;ul>
&lt;li>the site contains written content (not just an app or a video)&lt;/li>
&lt;li>the site is authored by a single person&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>A blog still counts as a personal blog even if the blogger is a professional journalist (e.g., &lt;a href="https://krebsonsecurity.com/">Brian Krebs&lt;/a>) or blogging on their company&amp;rsquo;s website (e.g., &lt;a href="https://devblogs.microsoft.com/oldnewthing/">Raymond Chen&lt;/a>).&lt;/li>
&lt;li>Social media (Twitter / Mastodon) doesn&amp;rsquo;t count as a personal blog.&lt;/li>
&lt;li>Podcasts websites count as blogs if they&amp;rsquo;re hosted by a single person and are independently owned.&lt;/li>
&lt;li>I exclude github.com links even though some people post blogs there.
&lt;ul>
&lt;li>It&amp;rsquo;s too hard to filter out all the non-blog links to github.com.&lt;/li>
&lt;li>Pages under the &lt;code>github.io&lt;/code> domain are eligible.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h2 id="aggregating-scores">Aggregating scores&lt;/h2>
&lt;ul>
&lt;li>I aggregate scores across all submissions that received a score of at least 20 and are not dead or deleted.
&lt;ul>
&lt;li>e.g., If a single link was submitted 100 times and never scored at least 20, none of those submissions would increase the aggregate score for the domain.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Duplicate submissions of the same URL all count as long as each submission received at least 20 points.&lt;/li>
&lt;li>I aggregate together domains when the author moved domains as long as the new domain is the canonical URL for the old content.
&lt;ul>
&lt;li>e.g., all submissions from &lt;code>christine.website&lt;/code> count towards &lt;code>xeiaso.net&lt;/code>, their new canonical URL.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>I do not aggregate together blogs by the same author at different domains if they contain distinct content.
&lt;ul>
&lt;li>e.g., &lt;code>kalzumeus.com&lt;/code> and &lt;code>bitsaboutmoney.com&lt;/code> count separately, even though Patrick McKenzie is the author of both.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>To reduce the size of the dataset, I only include domains that have accumulated at least 500 points across all submissions.&lt;/li>
&lt;/ul>
&lt;h2 id="update-frequency">Update frequency&lt;/h2>
&lt;p>The data automatically updates on the second day of each month, but I sometimes do out of band updates.&lt;/p></description></item><item><title>How to Write Useful Commit Messages</title><link>https://refactoringenglish.com/excerpts/commit-messages/</link><pubDate>Fri, 07 Mar 2025 00:00:00 +0000</pubDate><guid>https://refactoringenglish.com/excerpts/commit-messages/</guid><description>&lt;p>Effective commit messages simplify the code review process and aid long-term code maintenance. Unfortunately, commit messages don&amp;rsquo;t get much respect, so the world is littered with useless messages like &lt;code>Fix bug&lt;/code> or &lt;code>Update UI&lt;/code>.&lt;/p>
&lt;p>There&amp;rsquo;s no widespread agreement about what makes a good commit message or why it&amp;rsquo;s useful, so I&amp;rsquo;m sharing my thoughts based on my 20 years of experience as a software developer.&lt;/p>
&lt;ul>
&lt;li>&lt;a href="#an-example-of-a-useful-commit-message">An example of a useful commit message&lt;/a>&lt;/li>
&lt;li>&lt;a href="#whats-the-point-of-a-commit-message">What&amp;rsquo;s the point of a commit message?&lt;/a>
&lt;ul>
&lt;li>&lt;a href="#helps-your-code-reviewer-approach-the-change">Helps your code reviewer approach the change&lt;/a>&lt;/li>
&lt;li>&lt;a href="#communicates-changes-to-teammates-downstream-clients-and-end-users">Communicates changes to teammates, downstream clients, and end-users&lt;/a>&lt;/li>
&lt;li>&lt;a href="#facilitates-future-bug-investigations">Facilitates future bug investigations&lt;/a>&lt;/li>
&lt;li>&lt;a href="#provides-information-to-development-tools">Provides information to development tools&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;a href="#organizing-information-in-a-commit-message">Organizing information in a commit message&lt;/a>
&lt;ul>
&lt;li>&lt;a href="#put-the-most-important-information-first">Put the most important information first&lt;/a>&lt;/li>
&lt;li>&lt;a href="#use-headings-to-structure-long-commit-messages">Use headings to structure long commit messages&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;a href="#what-should-the-commit-message-include">What should the commit message include?&lt;/a>
&lt;ul>
&lt;li>&lt;a href="#a-descriptive-title">A descriptive title&lt;/a>&lt;/li>
&lt;li>&lt;a href="#a-summary-of-how-the-change-impacts-clients-and-end-users">A summary of how the change impacts clients and end-users&lt;/a>&lt;/li>
&lt;li>&lt;a href="#the-motivation-for-the-change">The motivation for the change&lt;/a>&lt;/li>
&lt;li>&lt;a href="#breaking-changes">Breaking changes&lt;/a>&lt;/li>
&lt;li>&lt;a href="#external-references">External references&lt;/a>&lt;/li>
&lt;li>&lt;a href="#justifications-for-new-dependencies">Justifications for new dependencies&lt;/a>&lt;/li>
&lt;li>&lt;a href="#cross-references-to-issues-or-other-changes">Cross-references to issues or other changes&lt;/a>&lt;/li>
&lt;li>&lt;a href="#summaries-of-bugs-or-external-references">Summaries of bugs or external references&lt;/a>&lt;/li>
&lt;li>&lt;a href="#testing-instructions">Testing instructions&lt;/a>&lt;/li>
&lt;li>&lt;a href="#testing-limitations">Testing limitations&lt;/a>&lt;/li>
&lt;li>&lt;a href="#what-you-learned">What you learned&lt;/a>&lt;/li>
&lt;li>&lt;a href="#alternative-solutions-you-considered">Alternative solutions you considered&lt;/a>&lt;/li>
&lt;li>&lt;a href="#searchable-artifacts">Searchable artifacts&lt;/a>&lt;/li>
&lt;li>&lt;a href="#screenshots-or-videos">Screenshots or videos&lt;/a>&lt;/li>
&lt;li>&lt;a href="#rants-and-stories">Rants and stories&lt;/a>&lt;/li>
&lt;li>&lt;a href="#anything-youre-tempted-to-explain-outside-of-the-commit-message">Anything you&amp;rsquo;re tempted to explain outside of the commit message&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;a href="#what-should-the-commit-description-leave-out">What should the commit description leave out?&lt;/a>
&lt;ul>
&lt;li>&lt;a href="#information-thats-obvious-from-the-code">Information that&amp;rsquo;s obvious from the code&lt;/a>&lt;/li>
&lt;li>&lt;a href="#critical-details-about-maintaining-the-code">Critical details about maintaining the code&lt;/a>&lt;/li>
&lt;li>&lt;a href="#short-term-discussion">Short-term discussion&lt;/a>&lt;/li>
&lt;li>&lt;a href="#preview-urls-and-build-artifacts">Preview URLs and build artifacts&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;a href="#further-reading">Further reading&lt;/a>&lt;/li>
&lt;/ul>
&lt;!-- markdownlint-disable no-emphasis-as-header -->
&lt;h2 id="an-example-of-a-useful-commit-message">An example of a useful commit message&lt;/h2>
&lt;p>Here&amp;rsquo;s an example of a useful, effective commit message:&lt;/p></description></item><item><title>Can You Spot the Passive Voice?</title><link>https://refactoringenglish.com/exercises/recognize-passive-voice/</link><pubDate>Fri, 31 Jan 2025 00:00:00 +0000</pubDate><guid>https://refactoringenglish.com/exercises/recognize-passive-voice/</guid><description>&lt;div class="container mt-5">
 &lt;div class="row justify-content-center">
 &lt;div class="card">
 &lt;div class="card-body">
 &lt;div id="intro-screen">
 &lt;p class="lead">
 This exercise tests your ability to recognize
 &lt;a href="https://refactoringenglish.com/excerpts/passive-voice-considered-harmful/"
 >the passive voice&lt;/a
 >
 in the context of developing software.
 &lt;/p>
 &lt;p>For each sentence, click:&lt;/p>
 &lt;ul>
 &lt;li>
 &lt;strong>Active ⚡&lt;/strong> if the sentence has no passive voice
 (active voice only)
 &lt;/li>
 &lt;li>
 &lt;strong>Passive 😴&lt;/strong> if the sentence contains passive voice
 &lt;/li>
 &lt;/ul>
 &lt;div class="d-grid">
 &lt;button
 class="btn btn-primary my-1 py-3 fs-4"
 onclick="startGame()"
 >
 Start
 &lt;/button>
 &lt;/div>
 &lt;/div>

 &lt;div id="game-screen" class="d-none">
 &lt;div id="question-container">
 &lt;div class="text-center mb-5">
 &lt;p
 id="sentence"
 class="lead fw-bold fs-4 mb-0 sample-text d-inline-block px-5 py-4 rounded"
 >&lt;/p>
 &lt;/div>
 &lt;div class="text-center mb-3">
 &lt;p class="lead mb-0">Does this sentence contain passive voice?&lt;/p>
 &lt;/div>
 &lt;div
 class="d-flex gap-3 justify-content-between"
 id="answer-buttons"
 >
 &lt;button
 class="btn btn-danger btn-lg flex-grow-1 px-4 text-center"
 onclick="checkAnswer('passive')"
 data-bs-toggle="tooltip"
 data-bs-placement="bottom"
 title="Contains passive voice"
 >
 Passive 😴
 &lt;/button>
 &lt;button
 class="btn btn-success btn-lg flex-grow-1 px-4 text-center"
 onclick="checkAnswer('active')"
 data-bs-toggle="tooltip"
 data-bs-placement="top"
 title="No passive voice"
 >
 Active ⚡
 &lt;/button>
 &lt;/div>
 &lt;/div>
 &lt;div id="feedback-container" class="mt-5 d-none">
 &lt;div class="alert mb-4" role="alert">&lt;/div>
 &lt;div class="d-flex">
 &lt;button
 class="btn btn-success btn-lg fs-5 my-1 ms-auto px-4"
 onclick="nextQuestion()"
 id="next-button"
 >
 Next Question
 &lt;/button>
 &lt;/div>
 &lt;/div>
 &lt;div id="score-container" class="mt-4">
 &lt;p class="mb-0 lead">Accuracy: &lt;span id="score">0&lt;/span>%&lt;/p></description></item><item><title>Can You Spot the Passive Voice?</title><link>https://refactoringenglish.com/tools/recognize-passive-voice/</link><pubDate>Fri, 31 Jan 2025 00:00:00 +0000</pubDate><guid>https://refactoringenglish.com/tools/recognize-passive-voice/</guid><description>&lt;div class="container mt-5">
 &lt;div class="row justify-content-center">
 &lt;div class="card">
 &lt;div class="card-body">
 &lt;div id="intro-screen">
 &lt;p class="lead">
 This exercise tests your ability to recognize
 &lt;a href="https://refactoringenglish.com/excerpts/passive-voice-considered-harmful/"
 >the passive voice&lt;/a
 >
 in the context of developing software.
 &lt;/p>
 &lt;p>For each sentence, click:&lt;/p>
 &lt;ul>
 &lt;li>
 &lt;strong>Active ⚡&lt;/strong> if the sentence has no passive voice
 (active voice only)
 &lt;/li>
 &lt;li>
 &lt;strong>Passive 😴&lt;/strong> if the sentence contains passive voice
 &lt;/li>
 &lt;/ul>
 &lt;div class="d-grid">
 &lt;button
 class="btn btn-primary my-1 py-3 fs-4"
 onclick="startGame()"
 >
 Start
 &lt;/button>
 &lt;/div>
 &lt;/div>

 &lt;div id="game-screen" class="d-none">
 &lt;div id="question-container">
 &lt;div class="text-center mb-5">
 &lt;p
 id="sentence"
 class="lead fw-bold fs-4 mb-0 sample-text d-inline-block px-5 py-4 rounded"
 >&lt;/p>
 &lt;/div>
 &lt;div class="text-center mb-3">
 &lt;p class="lead mb-0">Does this sentence contain passive voice?&lt;/p>
 &lt;/div>
 &lt;div
 class="d-flex gap-3 justify-content-between"
 id="answer-buttons"
 >
 &lt;button
 class="btn btn-danger btn-lg flex-grow-1 px-4 text-center"
 onclick="checkAnswer('passive')"
 data-bs-toggle="tooltip"
 data-bs-placement="bottom"
 title="Contains passive voice"
 >
 Passive 😴
 &lt;/button>
 &lt;button
 class="btn btn-success btn-lg flex-grow-1 px-4 text-center"
 onclick="checkAnswer('active')"
 data-bs-toggle="tooltip"
 data-bs-placement="top"
 title="No passive voice"
 >
 Active ⚡
 &lt;/button>
 &lt;/div>
 &lt;/div>
 &lt;div id="feedback-container" class="mt-5 d-none">
 &lt;div class="alert mb-4" role="alert">&lt;/div>
 &lt;div class="d-flex">
 &lt;button
 class="btn btn-success btn-lg fs-5 my-1 ms-auto px-4"
 onclick="nextQuestion()"
 id="next-button"
 >
 Next Question
 &lt;/button>
 &lt;/div>
 &lt;/div>
 &lt;div id="score-container" class="mt-4">
 &lt;p class="mb-0 lead">Accuracy: &lt;span id="score">0&lt;/span>%&lt;/p></description></item><item><title>Passive Voice Considered Harmful</title><link>https://refactoringenglish.com/excerpts/passive-voice-considered-harmful/</link><pubDate>Fri, 31 Jan 2025 00:00:00 +0000</pubDate><guid>https://refactoringenglish.com/excerpts/passive-voice-considered-harmful/</guid><description>&lt;p>Your high school English teachers probably warned you that passive voice is dangerous and forbidden. Then, when you were an adult, some guy in a leather jacket told you that passive voice is cool and should be used whenever it&amp;rsquo;s desired.&lt;/p>
&lt;p>Well, the tide has turned again. If you&amp;rsquo;re a software developer, stop using the passive voice.&lt;/p>
&lt;h2 id="wait-whats-passive-voice">Wait, what&amp;rsquo;s passive voice?&lt;/h2>
&lt;p>In English, sentences can have one of two structures: passive voice or active voice.&lt;/p></description></item><item><title>Rules for Writing Software Tutorials</title><link>https://refactoringenglish.com/excerpts/rules-for-software-tutorials/</link><pubDate>Thu, 02 Jan 2025 00:00:00 +0000</pubDate><guid>https://refactoringenglish.com/excerpts/rules-for-software-tutorials/</guid><description>&lt;p>Most software tutorials are tragically flawed.&lt;/p>
&lt;p>Tutorials often forget to mention some key detail, preventing readers from replicating the author&amp;rsquo;s process. Other times, the author brings in hidden assumptions that don&amp;rsquo;t match their readers&amp;rsquo; expectations.&lt;/p>
&lt;p>The good news is that it&amp;rsquo;s easier than you think to write an exceptional software tutorial. You can stand out in a sea of mediocre guides by following a few simple rules.&lt;/p>
&lt;h2 id="rules">Rules&lt;/h2>
&lt;ol>
&lt;li>&lt;a href="#write-for-beginners">Write for beginners&lt;/a>&lt;/li>
&lt;li>&lt;a href="#promise-a-clear-outcome-in-the-title">Promise a clear outcome in the title&lt;/a>&lt;/li>
&lt;li>&lt;a href="#explain-the-goal-in-the-introduction">Explain the goal in the introduction&lt;/a>&lt;/li>
&lt;li>&lt;a href="#show-the-end-result">Show the end result&lt;/a>&lt;/li>
&lt;li>&lt;a href="#make-code-snippets-copypasteable">Make code snippets copy/pasteable&lt;/a>&lt;/li>
&lt;li>&lt;a href="#use-long-versions-of-command-line-flags">Use long versions of command-line flags&lt;/a>&lt;/li>
&lt;li>&lt;a href="#separate-user-defined-values-from-reusable-logic">Separate user-defined values from reusable logic&lt;/a>&lt;/li>
&lt;li>&lt;a href="#use-unambiguous-example-values">Use unambiguous example values&lt;/a>&lt;/li>
&lt;li>&lt;a href="#spare-the-reader-from-mindless-tasks">Spare the reader from mindless tasks&lt;/a>&lt;/li>
&lt;li>&lt;a href="#keep-your-code-in-a-working-state">Keep your code in a working state&lt;/a>&lt;/li>
&lt;li>&lt;a href="#teach-one-thing">Teach one thing&lt;/a>&lt;/li>
&lt;li>&lt;a href="#dont-try-to-look-pretty">Don&amp;rsquo;t try to look pretty&lt;/a>&lt;/li>
&lt;li>&lt;a href="#minimize-dependencies">Minimize dependencies&lt;/a>&lt;/li>
&lt;li>&lt;a href="#specify-filenames-clearly">Specify filenames clearly&lt;/a>&lt;/li>
&lt;li>&lt;a href="#use-consistent-descriptive-headings">Use consistent, descriptive headings&lt;/a>&lt;/li>
&lt;li>&lt;a href="#demonstrate-that-your-solution-works">Demonstrate that your solution works&lt;/a>&lt;/li>
&lt;li>&lt;a href="#link-to-a-complete-example">Link to a complete example&lt;/a>&lt;/li>
&lt;/ol>
&lt;h2 id="write-for-beginners">Write for beginners&lt;/h2>
&lt;p>The most common mistake tutorials make is explaining beginner-level concepts using expert-level terminology.&lt;/p></description></item></channel></rss>