<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: IndieHacker</title>
    <description>The latest articles on DEV Community by IndieHacker (@indiehacker_9527).</description>
    <link>https://dev.to/indiehacker_9527</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3866954%2Fe38025b3-12e2-4f42-994b-4a1d84d00f9a.jpg</url>
      <title>DEV Community: IndieHacker</title>
      <link>https://dev.to/indiehacker_9527</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/indiehacker_9527"/>
    <language>en</language>
    <item>
      <title>How to Write a PR Description That Sounds Native</title>
      <dc:creator>IndieHacker</dc:creator>
      <pubDate>Wed, 08 Apr 2026 05:21:18 +0000</pubDate>
      <link>https://dev.to/indiehacker_9527/how-to-write-a-pr-description-that-sounds-native-2n72</link>
      <guid>https://dev.to/indiehacker_9527/how-to-write-a-pr-description-that-sounds-native-2n72</guid>
      <description>&lt;h1&gt;
  
  
  How to Write a PR Description That Actually Sounds Native
&lt;/h1&gt;

&lt;p&gt;I've reviewed thousands of PRs from developers across 6 countries. The code is usually fine. The English? That's where things get interesting.&lt;/p&gt;

&lt;p&gt;Here's a collection of real patterns I've seen (anonymized), what native speakers actually think when they read them, and how to fix each one.&lt;/p&gt;

&lt;h2&gt;
  
  
  The "Please Kindly" Pattern
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What non-native speakers write:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Please kindly review this PR. I have made some changes to the authentication module. 
Please let me know if you have any questions. Thank you for your time.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;What native speakers think:&lt;/strong&gt; "This reads like a customer service email, not a PR description."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What to write instead:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gu"&gt;## What&lt;/span&gt;
Refactored the auth module to use JWT refresh tokens.

&lt;span class="gu"&gt;## Why&lt;/span&gt;
Session tokens were expiring mid-workflow (see #142). Refresh tokens let us extend sessions without re-auth.

&lt;span class="gu"&gt;## How&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; Added &lt;span class="sb"&gt;`refreshToken()`&lt;/span&gt; to AuthService
&lt;span class="p"&gt;-&lt;/span&gt; Updated middleware to auto-refresh on 401
&lt;span class="p"&gt;-&lt;/span&gt; Migration: new &lt;span class="sb"&gt;`refresh_tokens`&lt;/span&gt; table
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;The rule:&lt;/strong&gt; PR descriptions are technical documents, not letters. Use What/Why/How structure. Skip greetings and pleasantries.&lt;/p&gt;




&lt;h2&gt;
  
  
  The "I Think Maybe" Pattern
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What non-native speakers write:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;I think maybe we should consider possibly using a different approach here, 
if that's okay with you.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;What native speakers think:&lt;/strong&gt; "Are they unsure about the technical approach, or just being overly polite? I genuinely can't tell."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What to write instead:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;I'd suggest using a connection pool here instead of creating new connections per request. 
The current approach will hit scalability issues around ~100 concurrent users.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;The rule:&lt;/strong&gt; One hedge word is polite. Three hedge words is confusing. "I'd suggest" or "Consider" is enough — then state your case directly.&lt;/p&gt;




&lt;h2&gt;
  
  
  The "You Should" Pattern
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What non-native speakers write:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;You should change this variable name. You should also add error handling here. 
You should not use var.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;What native speakers think:&lt;/strong&gt; "This feels like a lecture, not a code review."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What to write instead:&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Severity&lt;/th&gt;
&lt;th&gt;Template&lt;/th&gt;
&lt;th&gt;Example&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Nitpick&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Nit: [suggestion]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Nit: &lt;code&gt;userCount&lt;/code&gt; reads better than &lt;code&gt;cnt&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Suggestion&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Consider [doing X] — [reason]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Consider extracting this into a helper — it's used in 3 places&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Blocking&lt;/td&gt;
&lt;td&gt;&lt;code&gt;[Issue]: [explanation]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;This will panic on nil input — we need a guard here&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;The rule:&lt;/strong&gt; Frame feedback as observations about the code, not instructions to the person. "This will panic" vs "You should add a nil check."&lt;/p&gt;




&lt;h2&gt;
  
  
  The "Fixed Bug" Commit Message
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What non-native speakers write:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;fixed bug
update code
modify function
add some changes
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;What native speakers think:&lt;/strong&gt; "What bug? What code? I'm going to have to read the entire diff."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What to write instead (Conventional Commits):&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;fix(auth): prevent session expiry during active requests

The JWT middleware was checking token expiry before processing the request,
causing 401s for long-running uploads. Now checks after.

Closes #142
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;The template:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;type&amp;gt;&lt;/span&gt;(&lt;span class="nt"&gt;&amp;lt;scope&amp;gt;&lt;/span&gt;): &lt;span class="nt"&gt;&amp;lt;what&lt;/span&gt; &lt;span class="na"&gt;changed&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;why&lt;/span&gt; &lt;span class="na"&gt;it&lt;/span&gt; &lt;span class="na"&gt;changed&lt;/span&gt; &lt;span class="err"&gt;—&lt;/span&gt; &lt;span class="na"&gt;the&lt;/span&gt; &lt;span class="na"&gt;context&lt;/span&gt; &lt;span class="na"&gt;that&lt;/span&gt; &lt;span class="na"&gt;the&lt;/span&gt; &lt;span class="na"&gt;diff&lt;/span&gt; &lt;span class="na"&gt;alone&lt;/span&gt; &lt;span class="na"&gt;doesn&lt;/span&gt;&lt;span class="err"&gt;'&lt;/span&gt;&lt;span class="na"&gt;t&lt;/span&gt; &lt;span class="na"&gt;show&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;reference&lt;/span&gt; &lt;span class="na"&gt;to&lt;/span&gt; &lt;span class="na"&gt;issue&lt;/span&gt;&lt;span class="err"&gt;/&lt;/span&gt;&lt;span class="na"&gt;ticket&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Types: &lt;code&gt;feat&lt;/code&gt;, &lt;code&gt;fix&lt;/code&gt;, &lt;code&gt;refactor&lt;/code&gt;, &lt;code&gt;docs&lt;/code&gt;, &lt;code&gt;test&lt;/code&gt;, &lt;code&gt;chore&lt;/code&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  The "Please Help Me" Standup
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What non-native speakers write:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Yesterday I was working on the task. Today I will continue working on it. 
I have no blockers.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;What native speakers think:&lt;/strong&gt; "This tells me nothing."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What to write instead:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gs"&gt;**Yesterday:**&lt;/span&gt; Got the JWT refresh flow working end-to-end. Tests passing locally.
&lt;span class="gs"&gt;**Today:**&lt;/span&gt; Integration testing against staging, then PR.
&lt;span class="gs"&gt;**Blocked:**&lt;/span&gt; Need access to the staging KV namespace — @ops can you add me?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;The rule:&lt;/strong&gt; Be specific. Name the feature, the status, the next concrete action. "Working on the task" is a non-update.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Cheat Sheet
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Instead of...&lt;/th&gt;
&lt;th&gt;Write...&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Please kindly...&lt;/td&gt;
&lt;td&gt;&lt;em&gt;(just skip it)&lt;/em&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;I think maybe we should consider...&lt;/td&gt;
&lt;td&gt;I'd suggest... / Consider...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;You should...&lt;/td&gt;
&lt;td&gt;Nit: / Consider... / This will [problem]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Fixed bug&lt;/td&gt;
&lt;td&gt;fix(scope): description&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;I was working on the task&lt;/td&gt;
&lt;td&gt;Got [specific thing] working, next up [specific thing]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Please let me know if you have any questions&lt;/td&gt;
&lt;td&gt;&lt;em&gt;(just skip it — they'll ask if they have questions)&lt;/em&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Thank you for your time&lt;/td&gt;
&lt;td&gt;&lt;em&gt;(unnecessary in PR context)&lt;/em&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;I want to ask...&lt;/td&gt;
&lt;td&gt;Quick question: ...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Can I know...?&lt;/td&gt;
&lt;td&gt;Do you know...? / Is there a way to...?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;I have met a problem&lt;/td&gt;
&lt;td&gt;I ran into an issue with...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Why This Matters
&lt;/h2&gt;

&lt;p&gt;These aren't grammar mistakes. They're &lt;strong&gt;register mistakes&lt;/strong&gt; — using email-formal language in a casual-technical context, or using a command tone when a suggestion tone is expected.&lt;/p&gt;

&lt;p&gt;Native speakers won't correct you. They'll just form a vague impression that your communication is "a bit off." Over time, that impression compounds.&lt;/p&gt;

&lt;p&gt;The good news: the patterns are finite and learnable. Once you internalize the ~20 templates above, you'll sound native in 90% of dev communication.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;I built &lt;a href="https://devglish.com" rel="noopener noreferrer"&gt;DevGlish&lt;/a&gt; to solve this exact problem. It's a macOS menu bar app that gives you context-aware English suggestions while you work — select text, press ⌘⇧D, get instant guidance on pronunciation, phrasing, and native speaker conventions. It even detects which app you're in (Slack vs GitHub vs email) and adjusts the tone.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Free tier: 10 lookups/day. &lt;a href="https://devglish.com" rel="noopener noreferrer"&gt;Try it →&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>career</category>
      <category>github</category>
      <category>softwareengineering</category>
      <category>writing</category>
    </item>
  </channel>
</rss>
