<?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: German Chyzhov</title>
    <description>The latest articles on DEV Community by German Chyzhov (@heroincommunity).</description>
    <link>https://dev.to/heroincommunity</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%2F511168%2F65566762-6154-4efc-9bfd-3f287c43969d.jpg</url>
      <title>DEV Community: German Chyzhov</title>
      <link>https://dev.to/heroincommunity</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/heroincommunity"/>
    <language>en</language>
    <item>
      <title>Ways to preserve knowledge</title>
      <dc:creator>German Chyzhov</dc:creator>
      <pubDate>Sun, 10 Jan 2021 15:17:25 +0000</pubDate>
      <link>https://dev.to/heroincommunity/ways-to-preserve-knowledge-282</link>
      <guid>https://dev.to/heroincommunity/ways-to-preserve-knowledge-282</guid>
      <description>&lt;p&gt;Recently I found article &lt;a href="https://clarityincode.com/software-maintenance/"&gt;about maintenance&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;It is pretty old(2010) but looks still valid. One of the principal factors affecting maintenance complexity mentioned in the article is "Preserving knowledge".&lt;/p&gt;

&lt;p&gt;From my experience, there could be such ways to achieve that:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Document every process and algorithm used: keep at least high level overview.&lt;/li&gt;
&lt;li&gt;Split all project's code into areas and identify who would maintain each of them. If the person decides to leave project, then he should share his knowledge with his successor. &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Which ways do you use at your projects?&lt;br&gt;
If you use 2nd approach, then how do you achieve it? Do you use any tools?&lt;/p&gt;

</description>
      <category>maintenance</category>
      <category>knowledge</category>
      <category>management</category>
    </item>
    <item>
      <title>Tool for recommended reviewers like mention-bot</title>
      <dc:creator>German Chyzhov</dc:creator>
      <pubDate>Sun, 10 Jan 2021 14:36:27 +0000</pubDate>
      <link>https://dev.to/heroincommunity/tool-for-recommended-reviewers-like-mention-bot-hib</link>
      <guid>https://dev.to/heroincommunity/tool-for-recommended-reviewers-like-mention-bot-hib</guid>
      <description>&lt;p&gt;Please share what tools do you use for identifying recommended reviewers for Pull Requests in GitHub?&lt;/p&gt;

&lt;p&gt;Before there was a tool like &lt;a href="https://github.com/facebookarchive/mention-bot"&gt;Mention-Bot&lt;/a&gt;, but now it is archived and not supported.&lt;/p&gt;

&lt;p&gt;P.S. I am a creator of tool for finding recommended reviewers, and I am interested which ones are used at different projects.&lt;/p&gt;

</description>
      <category>github</category>
      <category>git</category>
      <category>discuss</category>
    </item>
    <item>
      <title>Repository code reviewers analysis on example of dev.to </title>
      <dc:creator>German Chyzhov</dc:creator>
      <pubDate>Sun, 22 Nov 2020 20:04:40 +0000</pubDate>
      <link>https://dev.to/heroincommunity/repository-code-reviewers-analysis-on-example-of-dev-to-1hhj</link>
      <guid>https://dev.to/heroincommunity/repository-code-reviewers-analysis-on-example-of-dev-to-1hhj</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;In this post I am going to analyze different approaches for searching the best reviewers for your code and Pull Requests.&lt;br&gt;
I am going to do that based on &lt;a href="https://github.com/forem/forem"&gt;dev.to code repository&lt;/a&gt;.&lt;br&gt;
At the end there will be an example on how to do the same but in automated way.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Problem to be solved
&lt;/h3&gt;

&lt;p&gt;I am a software engineer and worked for several years as a Tech Lead on different projects. To be able to provide a software product of a high quality it is important to establish reliable processes of code review.&lt;/p&gt;

&lt;p&gt;The hardest question to be solved during a review process setup is how to select the best possible reviewer(s) for pull requests - people, who know affected code components and used technologies well?&lt;/p&gt;

&lt;p&gt;There could be different solutions for this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Everyone reviews code which he wants&lt;br&gt;
&lt;em&gt;Pros&lt;/em&gt;: no pain with searching for reviewers&lt;br&gt;
&lt;em&gt;Cons&lt;/em&gt;: this approach does not guarantee enough number and quality of reviewers&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Tech lead is reviewing everything&lt;br&gt;
&lt;em&gt;Pros&lt;/em&gt;: guarantee for at least one reviewer&lt;br&gt;
&lt;em&gt;Cons&lt;/em&gt;: tech lead could be overwhelmed with different tasks, so review quality would suffer; this leads to a single point of failure - if lead is absent, then process is significantly affected&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Assigning best possible reviewers based on experience in affected code components, modules, libraries and frameworks&lt;br&gt;
&lt;em&gt;Pros&lt;/em&gt;: maximum reviewing quality, the best way to share knowledge within a team&lt;br&gt;
&lt;em&gt;Cons&lt;/em&gt;: hard to automate, requires either lots of manual work or using proper tools&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Let's consider this Pull Request as an example &lt;a href="https://github.com/forem/forem/pull/9621"&gt;https://github.com/forem/forem/pull/9621&lt;/a&gt;&lt;br&gt;
Let's find who could be the best recommended reviewers for it!&lt;/p&gt;

&lt;h3&gt;
  
  
  Manual search for reviewers
&lt;/h3&gt;

&lt;p&gt;We need to have a look at a git history for each affected file and understand who did the most changes for each. After that we need to combine found reviewers into a list of up to 3-5 people.&lt;/p&gt;

&lt;p&gt;More files in PR means more time spent. We will calculate total time spent on the procedure and amount of diffs to be looked at.&lt;/p&gt;

&lt;p&gt;This PR has 9 files changed. Author is mstruve.&lt;br&gt;
Let's look at the files to see who worked mostly on it.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;.travis.yml
Here we may see a pretty long history of changes: &lt;a href="https://github.com/forem/forem/commits/e883fedbfdd0209bf31af5d50a712294093f3fad/.travis.yml"&gt;https://github.com/forem/forem/commits/e883fedbfdd0209bf31af5d50a712294093f3fad/.travis.yml&lt;/a&gt;
Candidates(excluding mstruve): &lt;em&gt;rhymes, maestromac, Zhao-Andy, citizen428, nickytonline, snackattas, vaidehijoshi, etagwerker, benhalpern&lt;/em&gt;.
That is a long list. After looking at 15 different commits, I could assume that for this file the best reviewers could be: &lt;em&gt;maestromac, citizen428, rhymes&lt;/em&gt;.
&lt;strong&gt;Spent&lt;/strong&gt;: 10 minutes.
&lt;strong&gt;Looked at&lt;/strong&gt;: 15 diffs.&lt;/li&gt;
&lt;li&gt;Envfile - this file was deleted completely, so skipping it.
&lt;strong&gt;Spent&lt;/strong&gt;: 0 minutes.
&lt;strong&gt;Looked at&lt;/strong&gt;: 0 diffs.&lt;/li&gt;
&lt;li&gt;Gemfile
Here is its history: &lt;a href="https://github.com/forem/forem/commits/03888b918784064bccb41cfead52180f2e5e7c82/Gemfile"&gt;https://github.com/forem/forem/commits/03888b918784064bccb41cfead52180f2e5e7c82/Gemfile&lt;/a&gt;
What I see immediately, is that it is significantly polluted by auto commits done by bots, like dependabot.
Candidates(excluding mstruve): &lt;em&gt;maestromac, rhymes, lightalloy, benhalpern, jacobherrington, citizen428, swrobel, atsmith813, lizthegrey, nickytonline, vaidehijoshi, joshpuetz, fdoxyz, etagwerker&lt;/em&gt;.
That is event harder. After looking at 30 commits, I could assume that for this file the best reviewers could be: &lt;em&gt;rhymes, citizen428, vaidehijoshi&lt;/em&gt;.
&lt;strong&gt;Spent&lt;/strong&gt;: 15 minutes.
&lt;strong&gt;Looked at&lt;/strong&gt;: 30 diffs.&lt;/li&gt;
&lt;li&gt;Gemfile.lock - this is technical file, auto-generated normally, so could be skipped.
&lt;strong&gt;Spent&lt;/strong&gt;: 0 minutes.
&lt;strong&gt;Looked at&lt;/strong&gt;: 0 diffs.&lt;/li&gt;
&lt;li&gt;app/views/internal/configs/show.html.erb
Here as well is a long history of changes: &lt;a href="https://github.com/forem/forem/commits/03888b918784064bccb41cfead52180f2e5e7c82/app/views/internal/configs/show.html.erb"&gt;https://github.com/forem/forem/commits/03888b918784064bccb41cfead52180f2e5e7c82/app/views/internal/configs/show.html.erb&lt;/a&gt;
Candidates(excluding mstruve): &lt;em&gt;rhymes, jacobherrington, benhalpern, citizen428, vaidehijoshi, Ridhwana, lightalloy, JibranKalia, jitendra1998, maestromac, JuanVqz, icncsx, AlbertoPdRF, Zhao-Andy, lisasy&lt;/em&gt;.
After looking at 30 commits, I could assume that for this file the best reviewers could be: &lt;em&gt;rhymes, benhalpern, citizen428, Ridhwana&lt;/em&gt;.
&lt;strong&gt;Spent&lt;/strong&gt;: 15 minutes.
&lt;strong&gt;Looked at&lt;/strong&gt;: 30 diffs.&lt;/li&gt;
&lt;li&gt;config/initializers/0_application_config.rb
This is an easy task, the history is short: &lt;a href="https://github.com/forem/forem/commits/03888b918784064bccb41cfead52180f2e5e7c82/config/initializers/0_application_config.rb"&gt;https://github.com/forem/forem/commits/03888b918784064bccb41cfead52180f2e5e7c82/config/initializers/0_application_config.rb&lt;/a&gt;
I will consider only 2 last commits, because other ones are two old.
Candidates(excluding mstruve): &lt;em&gt;ledestin, rhymes&lt;/em&gt;, both could be considered as recommended.
&lt;strong&gt;Spent&lt;/strong&gt;: 1 minutes.
&lt;strong&gt;Looked at&lt;/strong&gt;: 2 diffs.&lt;/li&gt;
&lt;li&gt;config/sample_application.yml
Here again, history is not too long: &lt;a href="https://github.com/forem/forem/commits/03888b918784064bccb41cfead52180f2e5e7c82/config/sample_application.yml"&gt;https://github.com/forem/forem/commits/03888b918784064bccb41cfead52180f2e5e7c82/config/sample_application.yml&lt;/a&gt;
I will consider only 3 last commits, because other ones are two old.
Candidates(excluding mstruve): &lt;em&gt;jacobherrington, citizen428&lt;/em&gt;, both could be considered as recommended.
&lt;strong&gt;Spent&lt;/strong&gt;: 2 minutes.
&lt;strong&gt;Looked at&lt;/strong&gt;: 3 diffs.&lt;/li&gt;
&lt;li&gt;docs/backend/configuration.md
This is an easy one: &lt;a href="https://github.com/forem/forem/commits/03888b918784064bccb41cfead52180f2e5e7c82/docs/backend/configuration.md"&gt;https://github.com/forem/forem/commits/03888b918784064bccb41cfead52180f2e5e7c82/docs/backend/configuration.md&lt;/a&gt;
Candidates(excluding mstruve): &lt;em&gt;citizen428, Zhao-Andy, joshpuetz&lt;/em&gt;. All three could be recommended ones.
&lt;strong&gt;Spent&lt;/strong&gt;: 2 minutes.
&lt;strong&gt;Looked at&lt;/strong&gt;: 4 diffs.&lt;/li&gt;
&lt;li&gt;vendor/cache/envied-0.9.3.gem - it is a bin file, could be skipped.
&lt;strong&gt;Spent&lt;/strong&gt;: 0 minutes.
&lt;strong&gt;Looked at&lt;/strong&gt;: 0 diffs.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Now we need to combine all lists per files of recommended reviewers into one list.&lt;br&gt;
To do that, we would need to look at which files were changed mostly, so have higher weight in review.&lt;br&gt;
I would say, these are files 1, 5 and 7.&lt;br&gt;
So, final list of recommended reviewers could be: &lt;em&gt;citizen428, Ridhwana&lt;/em&gt;.&lt;br&gt;
Other reviewers, which could be helpful: &lt;em&gt;rhymes, maestromac, vaidehijoshi, benhalpern&lt;/em&gt;.&lt;br&gt;
&lt;strong&gt;Totally spent&lt;/strong&gt;: 45 minutes.&lt;br&gt;
&lt;strong&gt;Looked at&lt;/strong&gt;: 84 diffs.&lt;/p&gt;

&lt;h3&gt;
  
  
  Automated way
&lt;/h3&gt;

&lt;p&gt;Add project with &lt;a href="https://github.com/forem/forem"&gt;dev.to code repository&lt;/a&gt; to Efficiefy.io app &lt;br&gt;
Open page with Pull Requests, see that for PR with number 9621 there is a list of &lt;em&gt;rhymes, Ridhwana&lt;/em&gt; as a recommended reviewers.&lt;/p&gt;

&lt;h3&gt;
  
  
  P.S.
&lt;/h3&gt;

&lt;p&gt;I would be glad to hear how do you find recommended reviewers at your projects. Would you like to have a demo?&lt;br&gt;
You may see screenshots of the app &lt;a href="https://efficiefy.io/demo-v-3/"&gt;by link&lt;/a&gt;&lt;/p&gt;

</description>
      <category>codereview</category>
      <category>codequality</category>
      <category>analytics</category>
      <category>devto</category>
    </item>
    <item>
      <title>How do you find the best reviewers for your PR(MR)?</title>
      <dc:creator>German Chyzhov</dc:creator>
      <pubDate>Tue, 10 Nov 2020 16:21:42 +0000</pubDate>
      <link>https://dev.to/heroincommunity/how-do-you-find-the-best-reviewers-for-your-pr-mr-481k</link>
      <guid>https://dev.to/heroincommunity/how-do-you-find-the-best-reviewers-for-your-pr-mr-481k</guid>
      <description>&lt;p&gt;Normally I solve this in the following way:&lt;br&gt;
1) look through the git history of different files and folders affected by changes in my Pull Request;&lt;br&gt;
2) then look who is available now;&lt;br&gt;
3) then assign them and ask for their review.&lt;br&gt;
When I was non team lead, I was also adding here my team lead.&lt;/p&gt;

&lt;p&gt;Is there any better(faster) way to find the best possible reviewers?&lt;/p&gt;

</description>
      <category>watercooler</category>
      <category>codequality</category>
      <category>codereview</category>
    </item>
  </channel>
</rss>
