<?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: Ivan Borovets</title>
    <description>The latest articles on DEV Community by Ivan Borovets (@klooder).</description>
    <link>https://dev.to/klooder</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4071903%2Fd03d56f5-4e4e-470c-97e7-5ca2eb24a44c.png</url>
      <title>DEV Community: Ivan Borovets</title>
      <link>https://dev.to/klooder</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/klooder"/>
    <language>en</language>
    <item>
      <title>How I stopped sounding rude in code reviews (as a non-native English speaker)</title>
      <dc:creator>Ivan Borovets</dc:creator>
      <pubDate>Mon, 10 Aug 2026 19:09:50 +0000</pubDate>
      <link>https://dev.to/klooder/how-i-stopped-sounding-rude-in-code-reviews-as-a-non-native-english-speaker-1c3j</link>
      <guid>https://dev.to/klooder/how-i-stopped-sounding-rude-in-code-reviews-as-a-non-native-english-speaker-1c3j</guid>
      <description>&lt;p&gt;My code was fine. My comments were the problem.&lt;/p&gt;

&lt;p&gt;I've been a developer for years. English is not my first language — I think in&lt;br&gt;
my native language, I think in code, and English sits somewhere third. And for&lt;br&gt;
most of my career I didn't realize how much that third place was costing me.&lt;/p&gt;

&lt;h2&gt;
  
  
  The moment I noticed
&lt;/h2&gt;

&lt;p&gt;A while ago I left this comment on a pull request:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;this code is bad, u dont handle when api return null. fix pls before merge&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I didn't mean to be rude. In my head, this was a neutral technical note:&lt;br&gt;
there's a null-handling bug, it should be fixed before merge. Short, factual,&lt;br&gt;
done. I hit "Comment" and moved on.&lt;/p&gt;

&lt;p&gt;The author went quiet for the rest of the day. A colleague later told me the&lt;br&gt;
comment came across as hostile. I re-read it and saw it with fresh eyes: no&lt;br&gt;
greeting, no reasoning, an imperative "fix pls" — it read like a reprimand,&lt;br&gt;
not a review.&lt;/p&gt;

&lt;p&gt;Then I scrolled through the same PR and found a comment from a native-speaker&lt;br&gt;
teammate about a very similar issue:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;This looks close, but we're not handling the case where the API returns&lt;br&gt;
null — that'll throw downstream. Could you add a guard for it before we&lt;br&gt;
merge?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Same technical content. Completely different reception. He sounded senior.&lt;br&gt;
I sounded angry.&lt;/p&gt;

&lt;h2&gt;
  
  
  The invisible tax
&lt;/h2&gt;

&lt;p&gt;Once I saw it, I couldn't unsee it. Non-native speakers on engineering teams&lt;br&gt;
pay an invisible tax every day:&lt;/p&gt;

&lt;p&gt;The blunt tax. Short sentences with no softening read as aggression in&lt;br&gt;
English. In many languages directness is neutral or even polite. In English&lt;br&gt;
work culture, "fix this" is an order and "could you take a look at this?" is&lt;br&gt;
a request — and people remember which one you send them.&lt;/p&gt;

&lt;p&gt;The junior tax. Simple vocabulary and choppy grammar get subconsciously read&lt;br&gt;
as junior, no matter what your actual level is. People conflate fluency with&lt;br&gt;
competence. It's not fair, but it's real — promotions, code review weight,&lt;br&gt;
and who gets listened to in threads are all shaped by it.&lt;/p&gt;

&lt;p&gt;The rewrite tax. Knowing all this, I started re-reading every message three&lt;br&gt;
times before sending. A two-line Slack reply could take five minutes. Multiply&lt;br&gt;
by twenty messages a day.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I tried
&lt;/h2&gt;

&lt;p&gt;Reading messages out loud helped a little. Keeping a document of "polite&lt;br&gt;
phrases" helped a little more — until I realized I was pattern-matching from a&lt;br&gt;
phrasebook like a tourist.&lt;/p&gt;

&lt;p&gt;Then, like everyone in the last couple of years, I started pasting messages&lt;br&gt;
into ChatGPT: "rewrite this to sound professional." And honestly — it worked.&lt;br&gt;
The output was good.&lt;/p&gt;

&lt;p&gt;The workflow was the problem. Copy the text. Switch tab. Find the chat. Type&lt;br&gt;
the prompt. Wait. Copy the result. Switch back. Paste. For every single&lt;br&gt;
message. It broke my flow so badly that on busy days I just skipped it and&lt;br&gt;
went back to sounding blunt.&lt;/p&gt;

&lt;h2&gt;
  
  
  What actually worked: removing the friction
&lt;/h2&gt;

&lt;p&gt;The fix wasn't better English or better prompts. It was making the rewrite&lt;br&gt;
cost nothing.&lt;/p&gt;

&lt;p&gt;I built myself a small Chrome extension: you focus any text field — a PR&lt;br&gt;
comment box, Slack, an issue tracker, anywhere — press one shortcut, and the&lt;br&gt;
text gets rewritten in place. No tab switching, no prompting, no copy-paste.&lt;br&gt;
The message you were about to send just... becomes the version a senior&lt;br&gt;
engineer would have written.&lt;/p&gt;

&lt;p&gt;I gave it three tones, because context matters: a formal one for PR reviews&lt;br&gt;
and technical docs, a friendly one for team chat, and a concise one for&lt;br&gt;
commit messages. The "before" example above, run through the formal mode,&lt;br&gt;
comes out like this:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The provided code lacks null-safety for API responses. This should be&lt;br&gt;
addressed prior to merge — please implement null-checking to ensure robust&lt;br&gt;
handling of null returns from the API endpoint.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That's my actual thought, said the way I wanted it to land.&lt;/p&gt;

&lt;h2&gt;
  
  
  What changed
&lt;/h2&gt;

&lt;p&gt;The obvious change: fewer awkward moments, fewer "did I sound rude?" spirals&lt;br&gt;
at 11pm.&lt;/p&gt;

&lt;p&gt;The less obvious change: I write more. Before, every message in English had a&lt;br&gt;
small activation cost, so I'd stay quiet in threads where I had something to&lt;br&gt;
say. When writing well becomes free, you stop rationing your words. I comment&lt;br&gt;
on more PRs, ask more questions, disagree more openly — because I know the&lt;br&gt;
tone will come out right.&lt;/p&gt;

&lt;p&gt;That was the real unlock. The tax wasn't just making me sound worse. It was&lt;br&gt;
making me participate less.&lt;/p&gt;

&lt;h2&gt;
  
  
  If you're in the same boat
&lt;/h2&gt;

&lt;p&gt;Whatever tool or method you use, the principle that worked for me: don't try&lt;br&gt;
to become a different writer — remove the friction from fixing your writing.&lt;br&gt;
Willpower-based solutions (re-read everything! memorize phrases!) fail on busy&lt;br&gt;
days, and busy days are exactly when you send the blunt message to the wrong&lt;br&gt;
person.&lt;/p&gt;

&lt;p&gt;The extension I built is called Softly — it's on the Chrome Web Store and&lt;br&gt;
free while it's early: &lt;a href="https://chromewebstore.google.com/detail/nckkpgnjinhedmoojpbelkblefacineb" rel="noopener noreferrer"&gt;https://chromewebstore.google.com/detail/nckkpgnjinhedmoojpbelkblefacineb&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;But honestly, even if you never install anything: re-read your last ten PR&lt;br&gt;
comments as if a stranger wrote them to you. If any of them made you wince —&lt;br&gt;
that's the tax. It's worth fixing, whichever way you choose.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;I'm building &lt;a href="https://usesoftly.com" rel="noopener noreferrer"&gt;Softly&lt;/a&gt; in the open - happy to answer anything about the&lt;br&gt;
extension (Plasmo + React, Laravel backend) or swap stories about writing&lt;br&gt;
English as a second language in tech.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>career</category>
      <category>productivity</category>
      <category>webdev</category>
      <category>english</category>
    </item>
  </channel>
</rss>
