<?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: Andrey Bodoev</title>
    <description>The latest articles on DEV Community by Andrey Bodoev (@shonoru).</description>
    <link>https://dev.to/shonoru</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%2F339284%2Fb3a6725a-f3db-4db6-afb3-0f4540c6fbec.jpg</url>
      <title>DEV Community: Andrey Bodoev</title>
      <link>https://dev.to/shonoru</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/shonoru"/>
    <language>en</language>
    <item>
      <title>Do you think consultants has to be treated differently? </title>
      <dc:creator>Andrey Bodoev</dc:creator>
      <pubDate>Sun, 17 May 2020 05:50:01 +0000</pubDate>
      <link>https://dev.to/shonoru/do-you-think-consultants-has-to-be-treated-differently-dam</link>
      <guid>https://dev.to/shonoru/do-you-think-consultants-has-to-be-treated-differently-dam</guid>
      <description>&lt;p&gt;If you ever been in consultanting business, you may hear spooky stories, like so, &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;We have separate pantries for stuff and vendors. If you want to have access please chip in.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Question to community, do you think vendors or consultants has to be treated differently? Share your story.&lt;/p&gt;

</description>
      <category>discuss</category>
      <category>peopleware</category>
    </item>
    <item>
      <title>Run remote retrospectives using Trello</title>
      <dc:creator>Andrey Bodoev</dc:creator>
      <pubDate>Thu, 07 May 2020 11:39:05 +0000</pubDate>
      <link>https://dev.to/mcf/run-remote-retrospectives-using-trello-30ha</link>
      <guid>https://dev.to/mcf/run-remote-retrospectives-using-trello-30ha</guid>
      <description>&lt;p&gt;Here's quick walkthrough how we run retrospectives using Trello boards. It's fairly simple workflow, and can be adapted with easy. &lt;/p&gt;

&lt;p&gt;Few things to add,&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;this approach turns out works well for both remote and in office environments;&lt;/li&gt;
&lt;li&gt;can be highly customized depends on needs;&lt;/li&gt;
&lt;li&gt;I haven't say that in video, but it's removes frictions with post-its, and use cards instead, and creates a possibilities to have issues to discuss in advance, prior to retrospective.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I'm using &lt;a href="https://www.atlassian.com/team-playbook/plays/retrospective"&gt;Playbook framework&lt;/a&gt; by Atlassian as an example for this board&lt;/p&gt;




&lt;p&gt;If you have any questions, please let me know in comments below. &lt;/p&gt;

</description>
      <category>tutorial</category>
      <category>trello</category>
      <category>atlassian</category>
      <category>retrospective</category>
    </item>
    <item>
      <title>Hidden power of Commit Guidelines</title>
      <dc:creator>Andrey Bodoev</dc:creator>
      <pubDate>Sun, 03 May 2020 10:40:47 +0000</pubDate>
      <link>https://dev.to/mcf/hidden-power-of-commit-guidelines-1b24</link>
      <guid>https://dev.to/mcf/hidden-power-of-commit-guidelines-1b24</guid>
      <description>&lt;p&gt;In our projects we adapted Commit Guidelines, with more or less standard variation of &lt;a href="https://github.com/angular/angular.js/blob/master/DEVELOPERS.md#-git-commit-guidelines"&gt;Angular Commit Guidelines&lt;/a&gt;. It deliver what it promise, &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;This leads to more readable messages that are easy to follow when looking through the project history. But also, we use the git commit messages to generate the change log.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Since we adapt such guidelines, I have discovered one powerful effect on a developer growth.&lt;/p&gt;

&lt;p&gt;It's how you start &lt;strong&gt;thinking about code changes&lt;/strong&gt; you commit to code base. Following questions starts to bubbling inside your head, &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Does this change belong to this commit?&lt;/li&gt;
&lt;li&gt;What's clear intent of your changes in?&lt;/li&gt;
&lt;li&gt;What's reasoning and thoughts I can put in message?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And etc.&lt;/p&gt;

&lt;p&gt;What happens now is that each commit is representing some &lt;strong&gt;type of change&lt;/strong&gt;, with describing clear intent encapsulated inside of commit message. &lt;/p&gt;

&lt;p&gt;Suddenly, you start reading &lt;code&gt;git log&lt;/code&gt; (yes, for real), and if you need to do comparison between log histories you can do this by simply looking at the titles of commit messages.&lt;/p&gt;

&lt;p&gt;Here's one example,&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ git log --pretty="%n    %s" --name-only

    test: has Cancel button, to check both confirm branches

cypress/integration/FunctionalTesting_Suite/CompanyProfilePage/company_profile_page.spec.js

    refactor: move Cancel button to CompanyProfile components

src/components/CompanyProfile/CancelButtonWithConfirmation.scss
src/components/CompanyProfile/CancelButtonWithConfirmation.tsx
src/components/CompanyProfile/CancelButtonWithConfirmationContainer.tsx
src/pages/CompanyProfile/CompanyProfile.tsx

    feat: Employer - Company profile page Cancel button

src/pages/CompanyProfile/CancelButtonWithConfirmation.scss
src/pages/CompanyProfile/CancelButtonWithConfirmation.tsx
src/pages/CompanyProfile/CancelButtonWithConfirmationContainer.tsx
src/pages/CompanyProfile/CompanyProfile.tsx
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;In &lt;code&gt;git log&lt;/code&gt; you can tell, that I finished feature, did some refactoring, and added integration tests afterwards. That was thoughtful workflow.&lt;/p&gt;

&lt;p&gt;Can you tell the same story, by looking at example below?&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ git log --pretty="%n    %s" --name-only

    Changed scss

src/pages/CompanyProfile/CancelButtonWithConfirmation.scss

    Add Cancel button

src/pages/CompanyProfile/CancelButtonWithConfirmation.scss

    OK it doesn't work, forgot component. LOL

src/pages/CompanyProfile/CancelButtonWithConfirmation.scss
src/pages/CompanyProfile/CancelButtonWithConfirmation.tsx

    Tests

src/pages/CompanyProfile/CancelButtonWithConfirmationContainer.tsx
src/pages/CompanyProfile/CompanyProfile.tsx
cypress/integration/FunctionalTesting_Suite/CompanyProfilePage/company_profile_page.spec.js

    Is it working yet?

src/pages/CompanyProfile/CompanyProfile.tsx
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Of course, you may not look at this without crying. You may end up,  shamefully do &lt;code&gt;git rebase&lt;/code&gt; to squash your commits to hide your crimes of uncertainty. &lt;/p&gt;




&lt;p&gt;To start &lt;a href="https://www.thoughtworks.com/radar/tools?blipid=201911081"&gt;adopting&lt;/a&gt; commit guidelines, I would recommend to look at this project &lt;a href="http://commitizen.github.io/cz-cli/"&gt;http://commitizen.github.io/cz-cli/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>git</category>
      <category>angular</category>
      <category>commitizen</category>
      <category>guideline</category>
    </item>
    <item>
      <title>Code Review: Prereview checklist. No important tasks are forgotten.</title>
      <dc:creator>Andrey Bodoev</dc:creator>
      <pubDate>Sun, 26 Apr 2020 06:26:36 +0000</pubDate>
      <link>https://dev.to/mcf/code-review-prereview-checklist-no-important-tasks-are-forgotten-4ekh</link>
      <guid>https://dev.to/mcf/code-review-prereview-checklist-no-important-tasks-are-forgotten-4ekh</guid>
      <description>&lt;p&gt;Here's my rephrase on &lt;a href="https://en.wikipedia.org/wiki/Preflight_checklist"&gt;preflight checklist&lt;/a&gt;,&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;a &lt;strong&gt;prereview checklist&lt;/strong&gt; is a list of tasks that should be performed by developer or team prior to raise an Merge Request &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Everytime we discussing changes in code review, we might found ourself talking about same things over and over again. For example, asking in comments to add testing instructions or adding pivotal story number for reference. &lt;/p&gt;

&lt;p&gt;To prevent that we need a little reminder to ourselves, or list of things we should check before raising an attention to your changes.&lt;/p&gt;

&lt;p&gt;In our team we have checklists built-in in our &lt;a href="https://docs.gitlab.com/ee/user/project/description_templates.html"&gt;Merge Request templates&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Here an example of one of our &lt;a href="https://gitlab.com/mycf.sg/ui-employer/-/tree/master/.gitlab/merge_request_templates"&gt;templates&lt;/a&gt;,&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;!-- Make sure Merge Request title following "&amp;lt;type&amp;gt;: &amp;lt;subject&amp;gt; [#&amp;lt;pivotal_story_id&amp;gt;]" --&amp;gt;

&amp;lt;!-- Brief description. Examples are, screenshots, steps to reproduce, links to dependent MRs --&amp;gt;

### General Checklist:

- [ ] Exact versions in package.json
- [ ] Testing instructions?
- [ ] Docs? Examples are, update `README.md` file, or add ADR in `doc/adr`
- [ ] Tests?
- [ ] Put in copy at least two potential reviewers

/cc

/label ~"Review Me"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Structure of this template are self-explanatory, one thing I want to point out is last line: &lt;code&gt;/label ~"Review Me"&lt;/code&gt; on which I already wrote an &lt;a href="https://dev.to/mcf/code-review-review-labels-in-gitlab-1ola"&gt;article&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;And don't forget to treat checklists as living documentation, new items can be added, or removed throughout time.&lt;/p&gt;

&lt;p&gt;It's purpose is to improve code review safety by ensuring that no important tasks are forgotten.&lt;/p&gt;

</description>
      <category>checklist</category>
      <category>codereview</category>
      <category>markdown</category>
      <category>templates</category>
    </item>
    <item>
      <title>Code Review: Review labels in GitLab</title>
      <dc:creator>Andrey Bodoev</dc:creator>
      <pubDate>Sun, 19 Apr 2020 12:27:24 +0000</pubDate>
      <link>https://dev.to/mcf/code-review-review-labels-in-gitlab-1ola</link>
      <guid>https://dev.to/mcf/code-review-review-labels-in-gitlab-1ola</guid>
      <description>&lt;p&gt;We use GitLab to host our code. One of the aspects of it is deal with code reviews on daily basis. &lt;/p&gt;

&lt;p&gt;In our team, we're about 10+ devs, it's quite difficult to have someone attention to code review, if it's product team and most of the time you focus on your own work and hoping if someone is review your changes. &lt;/p&gt;

&lt;p&gt;Initially, we have this, &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--S5TFDES3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/78qj4p0y5yilc2icz81g.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--S5TFDES3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/78qj4p0y5yilc2icz81g.png" alt="GitLab without labels"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here's an issue, which is no way to tell if someone is reviewing your code, or if you have enough reviewers and etc. Number of comments are not gave you much, and &lt;code&gt;0 of 2&lt;/code&gt; is not really helpful here.&lt;/p&gt;




&lt;p&gt;In our code review guidelines we have few rules, one of them is to have your Merge Request (abbr. MR) to be reviewed by at least 2 person in team.&lt;/p&gt;

&lt;p&gt;There's few concerns to address,&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;how to make it visible if someone is reviewing your MR;&lt;/li&gt;
&lt;li&gt;who reviewing what, and have they done so;&lt;/li&gt;
&lt;li&gt;do you have enough reviewers.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Gitlab has it's &lt;a href="https://docs.gitlab.com/ee/user/project/merge_requests/merge_request_approvals.html"&gt;own approval system&lt;/a&gt; in place, and code review guidelines. It does work, but we decided to tweak this a bit to improve communication within a team.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s---5YMbHX9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/exljqoxdyanzc8qamo3z.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s---5YMbHX9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/exljqoxdyanzc8qamo3z.png" alt="GitLab with labels"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;There's few types of labels we introduces,&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;Review Me&lt;/code&gt;, label is used to have an attention to MR and stating that it's ready to be reviewed, otherwise it can be &lt;code&gt;wip&lt;/code&gt;;&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Review by Paul Atreides&lt;/code&gt;, each reviewer has it's own label assigned once they start commenting;&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Approved by Padishah Emperor Shaddam IV&lt;/code&gt;, each reviewer has it's own label once review is done, and comments are addressed.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;With this in practice, once you going to visit list of MRs waiting. You're not checking each of them in order to find out, if it's been reviewed by someone else and it's ready to be merged. And it's greatly improve visibility of state on each Merge Request.&lt;/p&gt;

</description>
      <category>gitlab</category>
      <category>codereview</category>
      <category>labels</category>
    </item>
    <item>
      <title>Code Review: Name file after exposed function</title>
      <dc:creator>Andrey Bodoev</dc:creator>
      <pubDate>Fri, 10 Apr 2020 11:15:24 +0000</pubDate>
      <link>https://dev.to/mcf/name-file-after-exposed-function-5de1</link>
      <guid>https://dev.to/mcf/name-file-after-exposed-function-5de1</guid>
      <description>&lt;p&gt;In code reviews which we conduct in our team, I might find some examples of code, which is can be misleading or with no clear intent. This post is about to share reasoning and hear critique on some of these examples. &lt;/p&gt;

&lt;h1&gt;
  
  
  Name file after exposed function
&lt;/h1&gt;

&lt;p&gt;One of the cases is having few functions in one file, related or maybe not, or can be completely not related, but somehow group in one file.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;get/
  index.ts
    export getSomething :: Int -&amp;gt; Int
    export getSomethingElse :: String -&amp;gt; String
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Few things we can tell immediately, &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;please don't use &lt;code&gt;index.js&lt;/code&gt;, &lt;a href="https://www.youtube.com/watch?v=M3BM9TB-8yA&amp;amp;vl=en"&gt;https://www.youtube.com/watch?v=M3BM9TB-8yA&amp;amp;vl=en&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;both &lt;code&gt;get&lt;/code&gt; directory and &lt;code&gt;index.ts&lt;/code&gt; gave no context whatsoever.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Instead, try to name files after exposed function,  and move each of them into it's own file, like so&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;getSomething.ts
  export getSomething :: Int -&amp;gt; Int

getSomethingElse.ts
  export getSomethingElse :: String -&amp;gt; String
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It shows intent by looking at filename. &lt;/p&gt;

&lt;p&gt;Few side effects which you may discover later,&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Functions are enclosed in file to ensure there's no shared variables; which leads to proper unit tests and maintainability.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;And after this change, there's powerful way to quickly go through project structure; by opening files which named after function and not searching through functions in search output of your text editor.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  Takeaways
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Name file after exposed function;&lt;/li&gt;
&lt;li&gt;Breaking up into small modules for unit testing and maintainability; &lt;/li&gt;
&lt;li&gt;Browsing code within file vs. browsing code within project. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;One of the great examples in wild, &lt;a href="https://github.com/lodash/lodash/tree/master/"&gt;https://github.com/lodash/lodash/tree/master/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>typescript</category>
      <category>refactorit</category>
      <category>javascript</category>
      <category>codereview</category>
    </item>
  </channel>
</rss>
