<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[inside-recruiterbox - Medium]]></title>
        <description><![CDATA[Thoughts on work, technology and more from the people working at Recruiterbox - Medium]]></description>
        <link>https://medium.com/insiderecruiterbox?source=rss----9ca3109e0522---4</link>
        <image>
            <url>https://cdn-images-1.medium.com/proxy/1*TGH72Nnw24QL3iV9IOm4VA.png</url>
            <title>inside-recruiterbox - Medium</title>
            <link>https://medium.com/insiderecruiterbox?source=rss----9ca3109e0522---4</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Fri, 13 Nov 2026 02:32:01 GMT</lastBuildDate>
        <atom:link href="https://medium.com/feed/insiderecruiterbox" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com/" rel="hub"/>
        <item>
            <title><![CDATA[Building a UI framework with React! aka Design system]]></title>
            <link>https://medium.com/insiderecruiterbox/building-a-ui-framework-with-react-aka-design-system-af32ac48ada0?source=rss----9ca3109e0522---4</link>
            <guid isPermaLink="false">https://medium.com/p/af32ac48ada0</guid>
            <category><![CDATA[react]]></category>
            <category><![CDATA[design-systems]]></category>
            <category><![CDATA[css]]></category>
            <category><![CDATA[javascript]]></category>
            <dc:creator><![CDATA[Anenth]]></dc:creator>
            <pubDate>Sun, 02 Dec 2018 13:20:35 GMT</pubDate>
            <atom:updated>2019-08-26T08:25:01.514Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*GXLt9XFDWVAQttmM51OWhQ.jpeg" /></figure><p>Today, I asked my colleague Aashiq, “when was the last time you wrote CSS?”</p><p>Aashiq: “hmmm… its been a long while, I didn’t have to write; our visual components solved most of the problems!”</p><p>We have been building a framework to help our engineers deliver features faster without affecting the quality of the interface, we called it <strong>visual components</strong>. Visual components are simple React components which define color and structure of the app. Some people call it <strong>design systems </strong>or as ‘UI framework’, like Twitter Bootstrap. You may wonder why build a new framework when there are many popular frameworks available? When the product evolves, it creates patterns and behavior which developers have to replicate in every feature. This is grunt work and slows down development. Also, when the behaviors change, it becomes harder to update in multiple places across the app.</p><h3>What are Design systems?</h3><p>Design systems are like UI frameworks on steroids.<strong> Design system removes the cognitive load on the engineers to decide which class/style to use, it defines the building blocks of the application.</strong> It will ensure engineers don’t have to write styles while developing features.</p><p>A simple example would be, typography. There are multiple ways of styling a simple text with millions of color and size. Its impossible to make it consistent without a design system. Text component is one of the basic components of design system, with basic properties like size, color, and font weight.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*yrwqaweOrHzVuHATTqWVWQ.png" /><figcaption>A simple example of a Text component</figcaption></figure><h3>Building a reusable visual component</h3><p>Let’s look at a simple example of a title.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*YqrcS32t99e0KqwFZgPh_A.png" /></figure><p>We can convert this to a reusable component.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*JWVYkKb0Sx03jEq9yVOhjg.png" /></figure><p>This reusable component will provide flexibility to change the behavior of a component easily and also makes it easy for developers to use it. Whenever a new requirement comes with a new style for the title, all we have to do is to modify the corresponding component to achieve the behavior!</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Tm5hWMEaXZy_NbbJlBaR7g.png" /><figcaption>Title component with style prop</figcaption></figure><p>This Title component now takes a style as prop. The style prop adds a new class my-heading-style--primary, which you can use to style the component.</p><p>It’s important to not use props value which define the visual styles like blue, red, as these styles may change later. Instead, if you define the values as primary, secondary and where to use these components, we will be able to scale the use of the component. This also helps in self-documentation and it makes the engineer’s life easy!</p><h4>Basic components of design systems are</h4><ul><li><strong>Text</strong><br>Handle all the typography and should be using it across the app.</li><li><strong>Space</strong><br>Handle spaces between the elements, vertical, horizontal or around.</li><li><strong>Color<br></strong>Handle color to text, icon, etc</li><li><strong>Button</strong></li><li><strong>Form</strong></li><li><strong>Grid</strong></li></ul><p>Check out a simple login page build using visual components <a href="https://codesandbox.io/s/zl18zy21kl">https://codesandbox.io/s/zl18zy21kl</a></p><h3>Things to keep in mind</h3><ul><li>Design system is a <strong>collaboration between the designer and the developer</strong>. Issues will arise, when designers are not involved in the process of building design systems, right from the start. It’s important that designers and developers have a common understanding of components and props. The designer should be able to say <em>“Use the Title with secondary style.”</em></li><li>When developing a component you need to make sure you are not adding too many properties, adding too many properties will confuse the developers. <br>Example, let’s say there is a Button with normal-casing, now there is one scenario where the Button should have upper-casing! Instead of creating a new prop called upperCase it should be treated as a new style, say style=primary-alt</li><li>Design system should evolve over a period of time, it’s not something you build once and it works forever. It will evolve depending on technology, patterns, behavior, and use-cases of the product.</li><li>Components should not have any business names. When a component is built with a business name, it becomes non-reusable.</li></ul><blockquote>Design systems fail when there are too many choices when developing a feature</blockquote><p>I have created a boilerplate code with react, redux and design system, Hope it will be helpful</p><p><a href="https://github.com/Anenth/react-redux-design-system-boilerplate">https://github.com/Anenth/react-redux-design-system-boilerplate</a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=af32ac48ada0" width="1" height="1" alt=""><hr><p><a href="https://medium.com/insiderecruiterbox/building-a-ui-framework-with-react-aka-design-system-af32ac48ada0">Building a UI framework with React! aka Design system</a> was originally published in <a href="https://medium.com/insiderecruiterbox">inside-recruiterbox</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Challenges with React 16 upgrades]]></title>
            <link>https://medium.com/insiderecruiterbox/challenges-with-react-16-upgrades-b0a5183953f9?source=rss----9ca3109e0522---4</link>
            <guid isPermaLink="false">https://medium.com/p/b0a5183953f9</guid>
            <category><![CDATA[javascript]]></category>
            <category><![CDATA[react]]></category>
            <category><![CDATA[programming]]></category>
            <dc:creator><![CDATA[Anenth]]></dc:creator>
            <pubDate>Mon, 26 Mar 2018 03:46:32 GMT</pubDate>
            <atom:updated>2018-03-28T10:55:42.665Z</atom:updated>
            <content:encoded><![CDATA[<p>We have been using React for 3 years at Recruiterbox. We faced a lot of challenges during the update of react 16 mainly due to legacy code and the number of files (3000+) we have.</p><h4>React 16 upgrade overview:</h4><ul><li>46 Pull-request</li><li>450 commits</li><li>36000 line changes</li><li>~2 months(with feature development in parallel)</li></ul><h3>How we did it</h3><ol><li><strong>Upgrade to v15.6.0 (we were using v15.4.0)</strong></li><li><strong>Remove usage of React.createClass</strong><br>We used the codemod to update all our files. The major friction here was the eslint issues on the our old files. <br>Codemod <a href="https://github.com/reactjs/react-codemod#explanation-of-the-new-es2015-class-transform-with-property-initializers">https://github.com/reactjs/react-codemod#explanation-of-the-new-es2015-class-transform-with-property-initializers</a></li><li><strong>Remove usage of React.PropTypes<br></strong>Codemod <a href="https://github.com/reactjs/react-codemod#react-proptypes-to-prop-types">https://github.com/reactjs/react-codemod#react-proptypes-to-prop-types</a></li><li><strong>Remove usage of react-addons-css-transition-group<br></strong>Due to discontinuing support for React Addons, we had to replace the usage with react-transition-group.<br><a href="https://reactjs.org/blog/2017/04/07/react-v15.5.0.html#discontinuing-support-for-react-addons">https://reactjs.org/blog/2017/04/07/react-v15.5.0.html#discontinuing-support-for-react-addons</a></li><li><strong>Remove usage of react-addons-test-utils</strong><br>We have ~2000 tests for our react code base. <br>1) Replace import TestUtils from ‘react-addons-test-utils’; to import TestUtils from ‘react-dom/test-utils’;<br> 2) Replace import { createRenderer } from ‘react-addons-test-utils’; to import { createRenderer } from ‘react-test-renderer/shallow’;<br> 3) If you are using skin-deep or other libs using react-addons-test-utils, you need to ignore it by adding the webpack.IgnorePlugin(/ReactContext|react-addons-test-utils/)<br><a href="https://reactjs.org/blog/2017/04/07/react-v15.5.0.html#react-test-utils">https://reactjs.org/blog/2017/04/07/react-v15.5.0.html#react-test-utils</a></li><li><strong>Portal<br></strong> ReactDOM.unstable_renderSubtreeIntoContainer to ReactDOM.createPortal</li><li><strong>Major Eslint error we had to fix.<br></strong>Ref string deprecations, replace all the ref string to functional refs</li><li><strong>Upgrade supporting libraries </strong><br>a) skin-deep<br>b) react-bootstrap<br>c) react-bootstrap-table<br>d) react-router 4 from beta</li></ol><h3>Issues we faced:</h3><h4>1. Portal</h4><p><strong>Events now bubble up to the parent component</strong></p><blockquote>Even though a portal can be anywhere in the DOM tree, it behaves like a normal React child in every other way. Features like context work exactly the same regardless of whether the child is a portal, as the portal still exists in the React tree regardless of position in the DOM tree. <a href="https://github.com/facebook/react/issues/11387">https://github.com/facebook/react/issues/11387</a></blockquote><h4><strong>2. Change in behaviour of </strong>componentWillUnmount<strong> lifecycle method</strong></h4><blockquote>When replacing &lt;A /&gt; with &lt;B /&gt;, B.componentWillMount now always happens before A.componentWillUnmount. Previously, A.componentWillUnmount could have fired first in some cases.<br> <a href="https://reactjs.org/blog/2017/09/26/react-v16.0.html">https://reactjs.org/blog/2017/09/26/react-v16.0.html</a></blockquote><h3>What we love:</h3><p><strong>componentDidCatch: </strong>We love this api! When working with rich UI, interaction this api helps us to contain the error. <a href="https://reactjs.org/blog/2017/07/26/error-handling-in-react-16.html">https://reactjs.org/blog/2017/07/26/error-handling-in-react-16.html</a></p><h3>What we learnt:</h3><ul><li>Update the libraries to the latest version as soon as possible.</li><li>Create a wrapper component for all the third-party libraries so that we can easily make modification at one place.</li></ul><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=b0a5183953f9" width="1" height="1" alt=""><hr><p><a href="https://medium.com/insiderecruiterbox/challenges-with-react-16-upgrades-b0a5183953f9">Challenges with React 16 upgrades</a> was originally published in <a href="https://medium.com/insiderecruiterbox">inside-recruiterbox</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Constant time CI with CodeBuild]]></title>
            <link>https://medium.com/insiderecruiterbox/constant-time-ci-with-codebuild-eb3b22a111a5?source=rss----9ca3109e0522---4</link>
            <guid isPermaLink="false">https://medium.com/p/eb3b22a111a5</guid>
            <category><![CDATA[continuous-integration]]></category>
            <category><![CDATA[aws]]></category>
            <dc:creator><![CDATA[raghuveer kancherla]]></dc:creator>
            <pubDate>Tue, 18 Jul 2017 10:09:18 GMT</pubDate>
            <atom:updated>2017-07-19T02:45:00.539Z</atom:updated>
            <content:encoded><![CDATA[<p>At recruiterbox, we try to practice test driven development — our test coverage is above 80%. We have a mix of unit tests, integration tests and functional tests. Our ratio of unit tests to integration tests is not great but reasonable.</p><p>In any case, as we added more and more features to the product, the total time to run our test suite kept growing. About 2 years ago, it became too difficult to run all tests in local. At the time, we setup a Jenkins based system with 4 slaves to parallelise tests across these machines. With time, we increased the number of slaves to about 10 and kept the time to run tests to ~20 minutes. We also upgraded this setup to have 2 parallel pipelines of 10 machines each to accommodate increasing number of developers and more code being developed. If more than 2 developers pushed their code at the same time, they would have to wait their turn to run their tests.</p><p>However, this setup was very wasteful because the load on the slaves was very spiky at specific times of the day. It was difficult to predict patterns in this and setting up auto-scaling required too much work. Since there were only 2 parallel pipelines to run our test suite, during peak loads, the queue to run tests was also becoming too big. Sometimes developers had to wait 4 hours to run their tests. This was unacceptable waste of developer time.</p><p>We came across CodeBuild when we were just considering moving to EC2 Container Service with auto scaling turned on. As you can imagine CodeBuild felt like a life saver. We can get almost infinite parallelisation (upto a safety limit we can choose). As more and more tests are added, we can increase the number of containers to keep the time to run tests constant and it can keep scaling to as many parallel pipelines as we want based on spiky loads or as we add more team members.</p><p>In summary, kudos to the AWS team for building an awesome service like CodeBuild.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=eb3b22a111a5" width="1" height="1" alt=""><hr><p><a href="https://medium.com/insiderecruiterbox/constant-time-ci-with-codebuild-eb3b22a111a5">Constant time CI with CodeBuild</a> was originally published in <a href="https://medium.com/insiderecruiterbox">inside-recruiterbox</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Empathy is f***ing hard]]></title>
            <link>https://medium.com/insiderecruiterbox/empathy-is-f-ing-hard-5d8bbd7c7737?source=rss----9ca3109e0522---4</link>
            <guid isPermaLink="false">https://medium.com/p/5d8bbd7c7737</guid>
            <category><![CDATA[product-management]]></category>
            <category><![CDATA[work]]></category>
            <category><![CDATA[empathy]]></category>
            <dc:creator><![CDATA[Rajesh Thiagarajan]]></dc:creator>
            <pubDate>Tue, 02 May 2017 04:18:14 GMT</pubDate>
            <atom:updated>2017-05-02T04:17:55.115Z</atom:updated>
            <content:encoded><![CDATA[<p>We talk about empathy a lot.</p><p>Empathy — the ability to understand and share the feelings of another.</p><p>We talk about empathy for colleagues. We talk about empathy for customers.<br> <br> But empathy is hard.</p><p>Sometime we just forget.</p><p>I find it useful to use the following simple rules when I work and commit a work.</p><ol><li>Understand how your work affects others directly.</li><li>Understand how your work affects others indirectly.</li></ol><p>E.g.</p><p>You are not prepared with a pipeline of work for the engineers — Rahul has to cancel his vacation that he had planned 6 months back to ensure that the feature ships on time. Seth has to be ok with a suboptimal interaction for the user because there is less time to enhance the design.</p><p>You write buggy code — Smith in ops will be woken up with alarms. He has a 5 year old who wakes up at slight noise and take 3 hours to go back to sleep. Cathy will not be able to create the report that she has to submit to her director. She will have to skip her son’s game so that she can prepare it manually.</p><p>Just remember Rahul/Seth/Smith/Cathy when you work.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=5d8bbd7c7737" width="1" height="1" alt=""><hr><p><a href="https://medium.com/insiderecruiterbox/empathy-is-f-ing-hard-5d8bbd7c7737">Empathy is f***ing hard</a> was originally published in <a href="https://medium.com/insiderecruiterbox">inside-recruiterbox</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Make source code live longer]]></title>
            <link>https://medium.com/insiderecruiterbox/make-source-code-live-longer-36ceb1ef50fb?source=rss----9ca3109e0522---4</link>
            <guid isPermaLink="false">https://medium.com/p/36ceb1ef50fb</guid>
            <category><![CDATA[software-development]]></category>
            <category><![CDATA[programming]]></category>
            <dc:creator><![CDATA[Anenth]]></dc:creator>
            <pubDate>Fri, 10 Mar 2017 16:24:03 GMT</pubDate>
            <atom:updated>2017-03-10T16:06:34.208Z</atom:updated>
            <content:encoded><![CDATA[<p>It’s not about just making it work, It’s about how long it stays.</p><p>When I started writing source code a few years back I had only <strong>one focus,</strong> <strong>get the shit done</strong>. After working on building multiple products and features, I realized there is more than getting it just to work and it’s more about how long it stays i.e <strong>maintainability</strong>. Being a front-end engineer, I have a great taste for user experience and I <strong>care a lot about the developer’s experience</strong> reading the source code I write, they should be able to understand code easily and should be able to add more functionality without my help.</p><blockquote>Code is read more than it is written</blockquote><p>There are<strong> 2 main</strong> things to take care while writing code.</p><ul><li>Source code should be<strong> like a story</strong>, anyone who reads it should understand how it flows.</li><li>And well <strong>it should work</strong>.</li></ul><p>Here are <strong>some of my tips</strong> for making source code live longer.</p><ol><li><strong>Small</strong> is the answer! Try to make all the logic into smaller logics. Small function means easier to understand and easier to write tests.</li><li>Follow <strong>Single responsibility principle, </strong>each function should handle only one task.</li><li>Source code should be a <strong>self-documented</strong>. When you write a complex piece of code, you might feels great but you are not really doing a great job, it will make the <strong>developers scared</strong> to touch this piece of code because they don’t understand what is going on inside and makes it difficult to maintain, so If the code explains itself then it will live longer.</li><li><strong>Name your functions and variables well. </strong>Don’t worry about how long they are, it only improves the <strong>code readability </strong>and it shouldn’t affect performance because production javascript codes are usually minified.</li><li><strong>Smaller commits</strong> with a good message will make sure why a particular functionality was done.</li></ol><blockquote>There is nothing as complex logic, It’s all about how you look at it.</blockquote><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=36ceb1ef50fb" width="1" height="1" alt=""><hr><p><a href="https://medium.com/insiderecruiterbox/make-source-code-live-longer-36ceb1ef50fb">Make source code live longer</a> was originally published in <a href="https://medium.com/insiderecruiterbox">inside-recruiterbox</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Giving High Quality Support When Things Go Wrong.]]></title>
            <link>https://medium.com/insiderecruiterbox/giving-high-quality-support-when-things-go-wrong-91507c8c9638?source=rss----9ca3109e0522---4</link>
            <guid isPermaLink="false">https://medium.com/p/91507c8c9638</guid>
            <category><![CDATA[startup]]></category>
            <category><![CDATA[remote-working]]></category>
            <category><![CDATA[slack]]></category>
            <category><![CDATA[customer-service]]></category>
            <dc:creator><![CDATA[Chelsea Elyse]]></dc:creator>
            <pubDate>Fri, 03 Feb 2017 22:44:19 GMT</pubDate>
            <atom:updated>2017-02-03T22:44:10.540Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/888/1*eIFL05ZLlhWRkyp3wuvWiA.png" /></figure><h3>It isn’t Always Pretty.</h3><p>It was a Friday morning, around 745am Eastern time. Fridays typically being our slower days, I had settled in with my breakfast and a glass of tea as I updated a few help articles. I began clicking through the system taking screenshots when I received a server error.</p><p>Around here we’re lucky — our team runs a tight ship, and things very rarely go down. I quickly alerted the technical team on our chat program, <a href="https://slack.com/">Slack</a> (most of whom were home, as it was Friday night in India), and they jumped on the problem.</p><p>The thing is, this time it wasn’t a quick fix. It took them about 3.5 hours to find the problem, push a fix, and deploy it. In my tenure at Recruiterbox, this was the longest downtime we have had.</p><p>Obviously this post isn’t about the downtime directly, it’s about how we handled it on Support.</p><p>A 3.5 hour downtime beginning at 745am Eastern managed to span the beginning of the work day for all of our continental US customers. Each time a new timezone came on board, we received another wave of messages. Having a set of messages to send at certain times helped us quickly get back to the customers. Below are the steps we took and the lessons we learned.</p><h3>Step 1 — Update your status page</h3><p>Our first step in a known downtime is to update our <a href="http://status.recruiterbox.com/">status page</a>. This allows us to alert customers of the downtime. We also added it to the banner of the top of the site. For this downtime accessing the system was hit or miss — depending on which server you pinged. Because of this, the status message helped for some but not for others.</p><h3>Step 2 — Prepare for the wave of messages</h3><p>The next thing we did was log off of live chat. This was a spur of the moment decision, but we didn’t want to loose customers on live chat in mid conversation if they hit the down server. We also were receiving a large volume of emails — and wanted to reply to them quickly. Concentrating on just emails allowed us to hit the largest range of users at once.</p><p>Once the downtime was identified — we created a standard message to allow us to write back to customers who noted the outage quickly. Fast replies is something our team is known for already — but we felt during this time, the assurance that our team was looking at the issue was critical.</p><p><em>Thank you for reaching out to us — our apologies for the roadblock in your hiring workflow this morning!</em></p><p><em>Our team is aware of this issue, and are working on it as we speak.</em></p><p><em>We’ll be back in touch as soon as we know more! Appreciate your patience!</em></p><p>In our ticketing system (<a href="https://freshdesk.com/">Frehsdesk</a>) we also created a new status tag for these tickets, to make it easy to find them for follow up. I also created a note on my computer, to keep each ticket URL to double check that we got back to the customers.</p><h3>Step 3 — If it has been more than 45 minutes, follow up again, and again, and again, until it’s over</h3><p>Once the downtime had passed the 45 minute mark, we started writing again to those people who had been waiting more than 45 minutes. We wanted them to know we hadn’t forgotten about them and that we were still working on everything. We continued this (with variations to the message) until we were back up.</p><p><em>We wanted to give you a quick update -</em></p><p><em>Our team is still investigating the cause of the current application slowness and error messages. We are working hard to resolved this issue.</em></p><p><em>Our apologies for the continued delay in your workflow! We will be in touch as soon as we know more!</em></p><h3>Step 4 — Follow up (again) once it is over (but not too eagerly)</h3><p>Once the downtime was over, we made sure to tell everyone. I checked the list of tagged tickets, and my list I’d been keeping in my notes, multiple times to make sure every customer had been written back to.</p><p>We also included an apology for the delay to their workflow, and a thank you — for their patience during the event.</p><p>Especially with a downtime this long, it becomes easy to get super excited to give the all clear. Doing so falsely is even worse than waiting a bit longer. Make sure you’re 100% sure you’re back up before you send the all clear message.</p><p>Also be sure to return to your status page, and update it.</p><p><em>Thank you for your super awesome patience as we worked through a few different server issues this morning!</em></p><p><em>We apologize for any delay this caused to your Friday!</em></p><p><em>The system is back up and running! Our team will continue to monitor for any issues over the next few hours.</em></p><p><em>We hope you are headed towards a lovely weekend! Please reach out right away if you have any questions!</em></p><p>We also tagged these tickets for follow up the next day as well.</p><h3>Step 5 — Follow up again the next day</h3><p>Most of the customers who we wrote to with the “all clear” wrote back fairly quickly confirming everything was up and running. Any one we hadn’t heard from by the next day we wrote to again, just confirming all was okay. This may seem like an extra step, but we did find a few lingering bugs with this second follow up — things which we had assumed were related to the downtime, but were actually a different problem altogether.</p><p><em>I wanted to drop you a friendly followup — is everything running smoothly for you now?</em></p><p><em>Please feel free to reach out to us at any time!</em></p><h3>Step 6 — Complete your Retrospective</h3><p>After any type of an event a retrospective should be completed by all of those who were involved. This is used to explore the root cause of the issue, as well as how it can be handled better in the future. You should do this as soon as possible after the event, while it is fresh on everyone’s mind. Share the notes with everyone — even if they weren’t involved in the event.</p><h3>Additional Thoughts and Lessons learned:</h3><p>By the end of this downtime, we’d had almost 50 customers reach out, to which we sent a minimum of 3 messages (acknowledging the event, a(t least one) 45 minute follow up and an all clear (and potentially a next day follow up). Some customers also wrote back asking questions, which we did our best to answer — without making any promises.</p><p>We found the pace to be difficult but manageable with two of us answering the emails, tagging the tickets, and monitoring updates from the technical team.</p><p>At about 45 minutes after each hour the tickets would begin to slow — but they would quickly pick up again as another US timezone joined the mix. Once we anticipated this, the last two time zones were much easier.</p><p>Sure, it would have been simple to slap up an automated reply on the support email address (shudder) and call it a day, but not all of the messages we were getting were related to the downtime.</p><p>A few users could still access the system, and they had general, unrelated questions. We made sure to read messages carefully, and notice these — to avoid sending them the standard downtime message.</p><p>We also receive a number of emails every day that are not related to the use of the system, such as potential new clients. We made sure to not send them a downtime notice as well, of course.</p><h3>Focus. Stop doing everything else.</h3><p>With only two of us, the only way to manage the pace was by making emailed tickets our only activity. Everything else was stopped. I even told a teammate who started chatting us up about weekend plans to stop. We had one goal — get back to our customers with reassurance as quickly as possible.</p><p>We have a variety of ways to access client information, and we were using all of them during this downtime. It’s amazing how blind you suddenly feel when you can’t access the tools you use every single day. Make sure you have redundancies in place for accessing vital data points, and that you’re up to date on how to use them.</p><h3>Lastly, take a deep breath, and don’t take it personally</h3><p>When things don’t work, people are upset. This is a general understanding when working support — but especially so when when things go wrong. Sometimes people simply need a person to vent to — and — at this moment — you are this person. Take a deep breath. Put on your cheesiest smile, and be ready for a cold beer that night :)</p><h3>How does your team handle downtimes?</h3><p>I’d love to learn more from you!</p><p><em>Originally published at </em><a href="http://inside.recruiterbox.com/it-isnt-always-pretty/"><em>inside.recruiterbox.com</em></a><em> on April 5, 2016.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=91507c8c9638" width="1" height="1" alt=""><hr><p><a href="https://medium.com/insiderecruiterbox/giving-high-quality-support-when-things-go-wrong-91507c8c9638">Giving High Quality Support When Things Go Wrong.</a> was originally published in <a href="https://medium.com/insiderecruiterbox">inside-recruiterbox</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[An Introvert Experiment: What I learned when I met (some of) my team]]></title>
            <link>https://medium.com/insiderecruiterbox/an-introvert-experiment-what-i-learned-when-i-met-some-of-my-team-c38cc658a16f?source=rss----9ca3109e0522---4</link>
            <guid isPermaLink="false">https://medium.com/p/c38cc658a16f</guid>
            <category><![CDATA[india]]></category>
            <category><![CDATA[remote-working]]></category>
            <category><![CDATA[startup]]></category>
            <dc:creator><![CDATA[Chelsea Elyse]]></dc:creator>
            <pubDate>Thu, 12 Jan 2017 13:51:46 GMT</pubDate>
            <atom:updated>2017-01-12T13:51:33.936Z</atom:updated>
            <content:encoded><![CDATA[<p>Here is a fun experiment — let’s take the most introverted remote employee we have, fly her 8,000 miles from home, and stick her with 30 coworkers for 3 weeks.</p><p>But really. We did. And I survived. Below are the thoughts that were running through my head on the flight home last April.</p><p>I am currently on the last leg of a 33 hour travel travel day, heading in the direction of home. 21 days ago I flew 8,797 miles to meet my India-based team members.</p><p>While there was a lot to learn going from small-town-USA (population 20 thousand) to Bangalore, India (population 4.3 million), once I got over the 100 degree heat and learned how to bob and weave while crossing the street, it was on to meet the India team.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/596/0*xaWAtN9pkQMepQ9e.png" /></figure><p>Prior to this trip, I had never (in person) met another member of the Recruiterbox Team. Every second was exhilarating, awesome, exhausting, exciting and overwhelming — all rolled in to one.</p><p><em>Here are some of the top thoughts that stand out:</em></p><h3>We’re all fighting the same fight.</h3><p>Customer Happiness at Recruiterbox is just that — happiness. We get the amazing opportunity to make our customers happy — every single day. We also receive a unique look at our customer’s needs — we’re on the front lines fighting for what they need and want to make their hiring easier.</p><p>Unlike a lot of Customer Happiness roles, I always knew the other teams had our backs. Over the past few months we’ve tightened our connections with our Blackops team (which squashes bugs) and developed our Customer Delight team (their sole responsibility is to deliver small enhancements to delight our customers).</p><p>Even with these tight team connections, during my first week in office I found myself fascinated as I listened to conversations. Every conversation happening was about the exact things our customers are asking for, needing, or wanting.</p><p>I also had many long conversations with numerous teammates. We talked about why we joined, what we love about our jobs, and how excited we are for the future. Working for a company and with co-workers that are this aligned and this sure of its vision is incredibly exhilarating.</p><h3>Seeing behind the curtain was exciting. If not a bit terrifying.</h3><p>Working in a timezone opposite of our technical team, and remotely, most of the time system enhancements and fixes almost seem like magic. We report a request or a bug, and when we wake up the next morning — the fix is in place. <em>Magic.</em></p><p>The first time something needed fixing while I was in office I was fascinated to watch the process of identification, debugging and fix-pushing in real time. <em>For about the first 5 minutes.</em> After that I decided I was perhaps more content just knowing in the end that all was okay, without seeing everything else in between.</p><p><em>There is some magic that’s better left unseen.</em></p><h3>Spending some time in the office actually mattered</h3><p>There were certainly moments before I left the comfort of my introverted work-from-home daily routine that I questioned why it was a good idea fly almost 9,000 miles to sit somewhere else and work for 3 weeks.</p><p>While I am the biggest remote work fan in the world, nothing can replace the deletion of timezones, being there to hear every day sidebar conversations, and forming the friendships that are created while sitting side by side one another.</p><p>In addition to crossing off a long to-do list that I’d accumulated over the months leading up to the trip, being in the office for the first time allowed me to observe and absorb the thought processes of different teams as they were happening — instead of simply digesting the end result of the conversations when a decision or change was deployed. Having this insight of how the teams work helps shape my interactions with them moving forward, even after I’m back home.</p><h3>So, was it worth it?</h3><p>One-Thousand percent. And that’s not just the jet-lag talking.</p><p>Being on site for a short stint helped me grow as a contributor to my team, and to my company. I formed relationships with my teammates, and ironed out processes to help us run more efficiently in the future. Totally worth it.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/595/0*Y6s9mTp_-Fcgdqks.png" /></figure><p>With that said, my sights are currently set on home, my familiar remote working routine, and daily temperatures hovering around 60 degrees F.</p><p>~ Chelsea — Recruiterbox Customer Happiness</p><p><em>P.S. Huge kudos to my US team members who held down the fort while I ventured away, and to the India team — for adopting me as one of their own during my stay!</em></p><p><em>Originally published at </em><a href="http://inside.recruiterbox.com/what-i-learned-when-i-met-some-of-my-team/"><em>inside.recruiterbox.com</em></a><em> on May 4, 2016.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=c38cc658a16f" width="1" height="1" alt=""><hr><p><a href="https://medium.com/insiderecruiterbox/an-introvert-experiment-what-i-learned-when-i-met-some-of-my-team-c38cc658a16f">An Introvert Experiment: What I learned when I met (some of) my team</a> was originally published in <a href="https://medium.com/insiderecruiterbox">inside-recruiterbox</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Narratives are different — But]]></title>
            <link>https://medium.com/insiderecruiterbox/narratives-are-different-but-f2bc7a1d8c55?source=rss----9ca3109e0522---4</link>
            <guid isPermaLink="false">https://medium.com/p/f2bc7a1d8c55</guid>
            <dc:creator><![CDATA[Rajesh Thiagarajan]]></dc:creator>
            <pubDate>Tue, 27 Dec 2016 04:40:37 GMT</pubDate>
            <atom:updated>2016-12-27T01:17:04.547Z</atom:updated>
            <content:encoded><![CDATA[<p>“I don’t like <a href="https://en.wikipedia.org/wiki/Idli">Idlis</a>” — Titli</p><p>“But why? They are good. Try with Sambar. They will taste good” — Rajesh</p><p>“No. It is yuckyy.” — Titli</p><p>“Why?” — Rajesh</p><p>There are narratives in our head.</p><p><em>Idli is good. It is healthy. It is easy to make.</em></p><p>There are narratives in their head.</p><p><em>Idli is yuck.</em></p><p>​</p><p>There are more narratives in our head.</p><p><em>This place is awesome to work.</em></p><p><em>The product is useful.</em></p><p><em>Writing code in a certain way is important.</em></p><p><em>— — — — — — — — — — — -</em></p><p>It does not matter what our narrative is.</p><p>You cannot alter the other’s narrative by asking</p><p>“Why?” “What?”</p><p>The decisions of</p><p><em>Where to work?</em></p><p><em>What product to buy?</em></p><p><em>How to write code?</em></p><p>are based on their narratives.</p><p>They are as valid as yours.</p><p>Make your narrative strong.</p><p>So strong that they feel that it is their narrative.</p><p><em>Originally published at </em><a href="https://dino.xyz/recruiterbox/update-1346"><em>dino.xyz/Recruiterbox</em></a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=f2bc7a1d8c55" width="1" height="1" alt=""><hr><p><a href="https://medium.com/insiderecruiterbox/narratives-are-different-but-f2bc7a1d8c55">Narratives are different — But</a> was originally published in <a href="https://medium.com/insiderecruiterbox">inside-recruiterbox</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[“But this time” — Is a dangerous spiral]]></title>
            <link>https://medium.com/insiderecruiterbox/but-this-time-is-a-dangerous-spiral-7849d03b4f05?source=rss----9ca3109e0522---4</link>
            <guid isPermaLink="false">https://medium.com/p/7849d03b4f05</guid>
            <dc:creator><![CDATA[Rajesh Thiagarajan]]></dc:creator>
            <pubDate>Wed, 21 Dec 2016 00:29:49 GMT</pubDate>
            <atom:updated>2016-12-16T00:06:12.458Z</atom:updated>
            <content:encoded><![CDATA[<p>“But I guess this time — It is ok. You are not well and It is hard to manage her” — Rajesh</p><p>“No” — Renuka</p><p>It is easy to explain away the deviation from the principles during difficult circumstances.</p><p>“I will skip the code review this time because …”</p><p>“I will respond to customer late because …”</p><p>“I will push my agenda this time because …”</p><p>“I will pay bribe to get this done this time because …”</p><p>“I will test this later at this time because …”</p><p>The “cause” may be genuine.</p><p>The deviation may be warranted.</p><p>​</p><p>But</p><p>Either you stand for a principle or you do not.</p><p>There is no “but this time”.</p><p>​</p><p>It is OK to decide that you do not agree or stand for a principle.</p><p>It is NOT ok to have deviations once you decide to stand for it.</p><p>That leads to</p><ul><li>Inconsistency</li><li>Illusion</li><li>Lie</li></ul><p>above all — “Broken trust”</p><p>​</p><p>​</p><p><em>Originally published at </em><a href="https://dino.xyz/recruiterbox/update-1315"><em>dino.xyz/Recruiterbox</em></a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=7849d03b4f05" width="1" height="1" alt=""><hr><p><a href="https://medium.com/insiderecruiterbox/but-this-time-is-a-dangerous-spiral-7849d03b4f05">“But this time” — Is a dangerous spiral</a> was originally published in <a href="https://medium.com/insiderecruiterbox">inside-recruiterbox</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Once upon a time …]]></title>
            <link>https://medium.com/insiderecruiterbox/once-upon-a-time-bd26caf2e47a?source=rss----9ca3109e0522---4</link>
            <guid isPermaLink="false">https://medium.com/p/bd26caf2e47a</guid>
            <dc:creator><![CDATA[Rajesh Thiagarajan]]></dc:creator>
            <pubDate>Wed, 21 Dec 2016 00:29:28 GMT</pubDate>
            <atom:updated>2016-12-20T23:25:21.844Z</atom:updated>
            <content:encoded><![CDATA[<p>When we want to present what we are working on -</p><p>We typically present a list.</p><p>I am working on</p><ol><li>Painting the car</li><li>Organizing the dashboard</li><li>Cleaning the boot</li><li>Changing the oil.</li></ol><p>​</p><p>We do this is many places.</p><p>When asked — Why is your product better? — Out comes, a feature list.</p><p>When asked — What is the benefit of a process? — Out comes, a list of benefits.</p><p>When asked — How are you solving a problem? — Out comes, a list of items.</p><p>When asked — What does your NGO do? — Out comes, a list of activities.</p><p>​</p><p>The problem with lists are -</p><p>* They are hard to remember</p><p>* They are unexciting</p><p>* Hard to build on</p><p>* Very boring</p><p>​</p><p>It does not help that “To do” apps focus on lists.</p><p>It does not help that finally we have a bunch of activities to do.</p><p>​</p><p>Instead try to build and tell a story.</p><p>Stories excite everyone.</p><p>Stories are easy to present.</p><p>Stories are easy to remember.</p><p>​</p><p>“I will be driving to go on a cool trip — Visit places mentioned mentioned in this historical novel. So getting my car ready for it.”</p><p>​</p><p>We have been tuned (evolution) to relate to stories.</p><p>Remember</p><p>“My very educated mother just served us nine pizzas” (or some <a href="https://en.wikipedia.org/wiki/Planetary_mnemonic">variation</a> if it).</p><p>​</p><p>So when someone asks</p><p>“What do ..”?</p><p>​</p><p>Try starting with</p><p>“Once upon a time ..”</p><p>PS :</p><ol><li><a href="http://amzn.to/2hFqkjl">“Made to Stick</a>” is a wonderful book that talks about messages that stick. Stories are a repeated them that come in that.</li><li><a href="http://amzn.to/2hoJRBC">“Start with why</a>” is another book that talks about conveying “Why?” being the core. “What?” and “How?” follow them.</li></ol><p><em>Originally published at </em><a href="https://dino.xyz/recruiterbox/update-1330"><em>dino.xyz/Recruiterbox</em></a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=bd26caf2e47a" width="1" height="1" alt=""><hr><p><a href="https://medium.com/insiderecruiterbox/once-upon-a-time-bd26caf2e47a">Once upon a time …</a> was originally published in <a href="https://medium.com/insiderecruiterbox">inside-recruiterbox</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
    </channel>
</rss>