<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Ruslan&#39;s Tech Blog</title>
    <link>https://blog.bekenev.net/tags/productivity.html</link>
    <description>Software development related stuff</description>
    <language>en-us</language>
    <lastBuildDate>Wed, 12 Jun 2019 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://blog.bekenev.net/tags/productivity/feed.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>How to interview [memo]</title>
      <link>https://blog.bekenev.net/2019/06/12/how-to-interview.html</link>
      <pubDate>Wed, 12 Jun 2019 00:00:00 +0000</pubDate>
      <guid>https://blog.bekenev.net/2019/06/12/how-to-interview.html</guid>
      <description>&lt;p&gt;Just met this nice article by Laurie Voss called &lt;code&gt;You suck at technical interviews&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Here is TL;DR from there:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;many interview techniques test skills that are at best irrelevant to real working life&lt;/li&gt;&#xA;&lt;li&gt;you want somebody who knows enough to do the job right now&lt;/li&gt;&#xA;&lt;li&gt;or somebody smart and motivated enough that they can learn the job quickly&lt;/li&gt;&#xA;&lt;li&gt;you want somebody who keeps getting better at what they do&lt;/li&gt;&#xA;&lt;li&gt;your interview should be a collaborative conversation, not a combative interrogation&lt;/li&gt;&#xA;&lt;li&gt;you also want somebody who you will enjoy working with&lt;/li&gt;&#xA;&lt;li&gt;it&amp;rsquo;s important to separate &amp;ldquo;enjoy working with&amp;rdquo; from &amp;ldquo;enjoy hanging out with&amp;rdquo;&lt;/li&gt;&#xA;&lt;li&gt;don&amp;rsquo;t hire assholes, no matter how good they are&lt;/li&gt;&#xA;&lt;li&gt;if your team isn&amp;rsquo;t diverse, your team is worse than it needed to be&lt;/li&gt;&#xA;&lt;li&gt;accept that hiring takes a really long time and is really, really hard&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;a href=&#34;http://seldo.com/weblog/2014/08/26/you_suck_at_technical_interviews&#34;&gt;Here is the link to original post&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Good read.&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>Frontend Developer interview. Help for interviewers (1)</title>
      <link>https://blog.bekenev.net/2018/07/16/frontend-interview-discuss.html</link>
      <pubDate>Mon, 16 Jul 2018 00:00:00 +0000</pubDate>
      <guid>https://blog.bekenev.net/2018/07/16/frontend-interview-discuss.html</guid>
      <description>&lt;h2 id=&#34;the-problem&#34;&gt;The problem&lt;/h2&gt;&#xA;&lt;p&gt;I&amp;rsquo;m not a huge fan of questions on interviews similar to:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;do you know X&lt;/li&gt;&#xA;&lt;li&gt;did you use Y&lt;/li&gt;&#xA;&lt;li&gt;what is the difference between X and Y&lt;/li&gt;&#xA;&lt;li&gt;etc&amp;hellip;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Live coding is not something I like as well due to some reasons.&lt;/p&gt;&#xA;&lt;p&gt;What really helps me to understand how good candidate is, is to discuss some real situations with him/her.&lt;/p&gt;&#xA;&lt;p&gt;Below is one hypothetical projects to discuss with a candidate.&lt;/p&gt;&#xA;&lt;p&gt;Also check out the &lt;a href=&#34;https://blog.bekenev.net/2018/07/16/frontend-interview-discuss-part-2.html&#34;&gt;Part 2 of this post&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-project&#34;&gt;The project&lt;/h2&gt;&#xA;&lt;p&gt;Given a Single Page Application (SPA). The main purpose of the app is to store movies a user added for himself.&#xA;Some kind of bookmarks.&lt;/p&gt;&#xA;&lt;p&gt;Features are:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;add new movie&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;add title&lt;/li&gt;&#xA;&lt;li&gt;add description&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;show list of movies a user have added (only his/her movies)&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;API has all required routes to store/fetch movies of a user&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;br/&gt;&#xA;&lt;p&gt;&lt;strong&gt;The problem&lt;/strong&gt; is our users have no stable internet connection for some reason.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;The question&lt;/strong&gt; how we can allow users to save movies even if the internet connection is lost?&lt;/p&gt;&#xA;&lt;p&gt;Possible flow:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Candidate usually starts with the idea to use Local Storage for storing all the data while internet is off.&#xA;Which is definitely make sense. Here you can ask how he/she is going to integrate it:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Should it be separated module/class? (&lt;strong&gt;definitely yes&lt;/strong&gt;)&lt;/li&gt;&#xA;&lt;li&gt;Should developer use that module/class when internet is off and use calls to a server when internet is on?&#xA;(&lt;strong&gt;the answer can be very varied, but it should be some kind of&#xA;general class that internally detects internet activity so the user of module (developer) should not think about&#xA;current state of internet connection and use different modules/classes for saving/fetching movies&lt;/strong&gt;)&lt;/li&gt;&#xA;&lt;li&gt;Probably there should be some kind of queue to make sure movies are sent to remote API in the same order they were&#xA;added.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;When (if) you have discussed with a candidate all that above&amp;rsquo;s points and he/she did great you can&#xA;complicate the task a bit and say &amp;ldquo;Now we want to extend our &lt;strong&gt;add new movie&lt;/strong&gt; page with an image of movie&amp;rdquo;.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Here you should pay attention to the way a candidate thinks. He/She probably should come up with the idea&#xA;that using Local Storage will not be enough if we&amp;rsquo;re going to store images. Remember that we cannot use links&#xA;since we&amp;rsquo;re possibly offline.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Basically there are not too many possible options. &lt;a href=&#34;https://developer.mozilla.org/ru/docs/IndexedDB&#34;&gt;IndexedDB&lt;/a&gt; is&#xA;something we can try to use in this case.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Don&amp;rsquo;t hesitate to ask other questions you&amp;rsquo;re interesting in. It&amp;rsquo;s also OK if candidate don&amp;rsquo;t know the answer,&#xA;sometimes we don&amp;rsquo;t have answers too. We usually google in this case, but a candidate can&amp;rsquo;t so it&amp;rsquo;s completely OK&#xA;to give some help to him or her.&lt;/p&gt;&#xA;&lt;p&gt;If you&amp;rsquo;d like to get more understanding on what knowledge the frontend candidate should have please refer to &lt;a href=&#34;https://www.toptal.com/front-end/how-to-hire&#34;&gt;How to Hire a Front-end Developer&lt;/a&gt; by TopTal.&lt;/p&gt;&#xA;&lt;p&gt;Take a look at another project you can discuss with an applicant &lt;a href=&#34;https://blog.bekenev.net/2018/07/16/frontend-interview-discuss-part-2.html&#34;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>Frontend Developer interview. Help for interviewers (2)</title>
      <link>https://blog.bekenev.net/2018/07/16/frontend-interview-discuss-part-2.html</link>
      <pubDate>Mon, 16 Jul 2018 00:00:00 +0000</pubDate>
      <guid>https://blog.bekenev.net/2018/07/16/frontend-interview-discuss-part-2.html</guid>
      <description>&lt;p&gt;If you didn&amp;rsquo;t look at &lt;a href=&#34;https://blog.bekenev.net/2018/07/16/frontend-interview-discuss.html&#34;&gt;Part 1&lt;/a&gt; of this post please check it out.&lt;/p&gt;&#xA;&lt;h2 id=&#34;project-2&#34;&gt;Project 2&lt;/h2&gt;&#xA;&lt;p&gt;Given a news site and its admin area. In admin area there are many users. Each user can edit a news-post.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Our goal&lt;/strong&gt; is to make sure only one user can edit a post even if multiple users are visited the same news-post for editing. Users visited a news-post after the first user should see the &amp;ldquo;someone else is editing the post&amp;rdquo; message.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;More info about the project:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;It&amp;rsquo;s not a single page application&lt;/li&gt;&#xA;&lt;li&gt;Backend part of the code already able to lock/unlock the post internally (we just need to call the function).&lt;/li&gt;&#xA;&lt;li&gt;Backend developer can implement endpoints/services a candidate ask.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;possible-flow&#34;&gt;Possible flow:&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Candidate usually come up with the idea to use Web Sockets. If so, you can ask candidate about how it should work.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;What message(s) should be send by web socket client to a server?&lt;/li&gt;&#xA;&lt;li&gt;What answer should be send by web socket server so client can know that post is blocked?&lt;/li&gt;&#xA;&lt;li&gt;How to make sure two users will not block the post?&lt;/li&gt;&#xA;&lt;li&gt;When user leaves a post who should be the next &amp;ldquo;owner&amp;rdquo; of a post if multiple other users are on a post page?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;When you have discussed all that possible implementations for web socket you can tell candidate that&#xA;&amp;ldquo;&lt;strong&gt;unfortunately we don&amp;rsquo;t have ability to setup web socket server on&#xA;our production and have to come up with something else&lt;/strong&gt;&amp;rdquo;.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Something else is &lt;strong&gt;long polling&lt;/strong&gt; technique which is basically periodic Ajax requests to a server.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Frontend can have two Ajax requests sending by interval (one is to lock, another one is to check if locked)&lt;/li&gt;&#xA;&lt;li&gt;Backend should receive the &amp;ldquo;lock&amp;rdquo; and lock the post &lt;strong&gt;TEMPORARY&lt;/strong&gt;.&lt;/li&gt;&#xA;&lt;li&gt;If no another &amp;ldquo;lock&amp;rdquo; request received by the same user we should unlock the post (temp record should be removed)&lt;/li&gt;&#xA;&lt;li&gt;Lock the post when there is no &amp;ldquo;lock&amp;rdquo; on the post and mark that post is locked by a user.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;I hope this project and the project from Part 1 will help you to understand more about your candidate.&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>Work remotely by Julia Evans</title>
      <link>https://blog.bekenev.net/2018/02/19/work-remotely-by-julia-evans.html</link>
      <pubDate>Mon, 19 Feb 2018 00:00:00 +0000</pubDate>
      <guid>https://blog.bekenev.net/2018/02/19/work-remotely-by-julia-evans.html</guid>
      <description>&lt;p&gt;Really, really &lt;a href=&#34;https://jvns.ca/blog/2018/02/18/working-remotely--4-years-in/&#34;&gt;awesome blog post&lt;/a&gt; from Julia Evans about working remotely.&lt;/p&gt;&#xA;&lt;p&gt;She has described every worry I have and explained how she managed work over them.&lt;/p&gt;&#xA;&lt;p&gt;Just found out her blog and it seems very interesting in general.&lt;/p&gt;&#xA;</description>
    </item>
  </channel>
</rss>
