<?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: Gabriele Cimato</title>
    <description>The latest articles on DEV Community by Gabriele Cimato (@gabrielecimato).</description>
    <link>https://dev.to/gabrielecimato</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%2F61806%2F288b1838-4be7-4263-976a-ea6e1971e874.png</url>
      <title>DEV Community: Gabriele Cimato</title>
      <link>https://dev.to/gabrielecimato</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/gabrielecimato"/>
    <language>en</language>
    <item>
      <title>How do you manage writing technical articles ?</title>
      <dc:creator>Gabriele Cimato</dc:creator>
      <pubDate>Fri, 03 Apr 2020 01:59:01 +0000</pubDate>
      <link>https://dev.to/gabrielecimato/how-do-you-manage-writing-technical-posts-5edg</link>
      <guid>https://dev.to/gabrielecimato/how-do-you-manage-writing-technical-posts-5edg</guid>
      <description>&lt;p&gt;As I find myself scheduling more technical blog posts and practicing maintaining a regular writing habit I sometimes get lost in the details.&lt;/p&gt;

&lt;p&gt;I believe that what works for me is writing articles that are a 10 minute read or less. When it comes to more technical stuff, the required time to complete the article, ensuring high quality content, increases.&lt;/p&gt;

&lt;p&gt;This is sometimes a deterrent for me and I end up taking many days thus breaking the habit and not respecting the schedule.&lt;/p&gt;

&lt;p&gt;Do you ever find yourself in a similar situation ?&lt;br&gt;
Do you end up splitting your post in multiple parts to better manage your time and effort ?&lt;br&gt;
What practice do you recommend ?&lt;/p&gt;

</description>
      <category>discuss</category>
      <category>question</category>
      <category>writing</category>
    </item>
    <item>
      <title>Build a leader habit: Bring the change you want to see</title>
      <dc:creator>Gabriele Cimato</dc:creator>
      <pubDate>Thu, 12 Mar 2020 02:50:48 +0000</pubDate>
      <link>https://dev.to/gabrielecimato/build-a-leader-habit-bring-the-change-you-want-to-see-a90</link>
      <guid>https://dev.to/gabrielecimato/build-a-leader-habit-bring-the-change-you-want-to-see-a90</guid>
      <description>&lt;p&gt;Have you ever hoped for a change in your job/company ? Have you ever felt the burning desire of leaving your job for a new one out of frustration ? Well...you're not alone.&lt;/p&gt;

&lt;p&gt;It can happen to dislike how things run. Especially in a work environment. Unless you're one of the lucky ones. There are different ways we can react (or not react) to this feeling. I wouldn't say one is better than the other and as it often is with these things...it depends.&lt;/p&gt;

&lt;h2&gt;
  
  
  Look for the change externally
&lt;/h2&gt;

&lt;p&gt;I went through a frustrating period at work. A period where things felt backwards. No organization, no decent planning, no coding standards, no peer reviews. This happened early in my career.&lt;/p&gt;

&lt;p&gt;I tried to fix the problem seeking for an external change. I was trying to help hire someone who could enforce better practices. Someone who would push the team, and the company to follow higher standards.&lt;/p&gt;

&lt;p&gt;And that's not a bad idea &lt;strong&gt;but&lt;/strong&gt; you're tying your happiness to an external factor. This means you're depending on something you have little control over. You might get lucky but in an engineer mindset, you want to optimize for the worst case scenario. That being that you won't find that mentor, lead or whatever else that'll fix the problem. So how do you handle that ?&lt;/p&gt;

&lt;p&gt;If you think there's not much you can do, it is worth considering leaving. And don't feel bad about it. Surrounding yourself with people that have higher standards is beneficial for your growth. This applies both on a personal level and on a career level. Is leaving the only solution ? No.&lt;/p&gt;

&lt;p&gt;To some it might sound obvious but I had a "a-ha" moment. I did enjoy the people I worked with, I did love the project I worked on and the tech we used. Despite all of it, I thought about leaving, until my "a-ha" moment. What if I brought the changes I wanted instead of looking for them somewhere else ?&lt;/p&gt;

&lt;p&gt;That's how I'll introduce you the alternative approach.&lt;/p&gt;

&lt;h2&gt;
  
  
  Be the change and lead the way
&lt;/h2&gt;

&lt;p&gt;That was it! That was the best of both worlds. I got to stay, work on projects I love, work with people I enjoyed and bring the standards to a higher level. That's when I started pushing for changes, that's when I started taking the lead on projects.&lt;/p&gt;

&lt;p&gt;My goal was to show a better, more robust way to apply good engineering practices to a project. The hope was for those practices to &lt;em&gt;stick&lt;/em&gt; so that it would become the standard. That's when we introduced peer reviews, doc for best practices, and finally some testing!&lt;/p&gt;

&lt;p&gt;I felt like that was one of my biggest contributions since I joined the team. My peer reviews were very detailed but not nit-picky. They often sparked some interesting conversations! ✨ ✨&lt;/p&gt;

&lt;p&gt;My coworkers felt motivated to push themselves and do better. And on top of all this, my code got peer reviewed as well. This was absolutely incredible! I was learning from my teammates just from one simple decision. Being the one pushing the engineering team to do better paid off.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;It's common to find ourselves being unhappy with how things run at work. We can take a few different paths and it's on us to understand which one is the best fitting. My recommendation is to always try your best to &lt;strong&gt;be the change&lt;/strong&gt;. If you like the company, the people, the projects, that's an additional motivation to try your best first before moving on.&lt;/p&gt;

&lt;p&gt;This is important because you want to make sure you did what you could to improve the situation. Unfortunately that doesn't always work. If you'll end up deciding to leave, you won't have any regrets.&lt;/p&gt;

&lt;p&gt;But don't wait around for something to &lt;em&gt;just happen&lt;/em&gt;! If you decide to go the external or internal path, make sure that is a decision that depends on you, not something else you have no control on.&lt;/p&gt;

&lt;p&gt;Be in control.&lt;/p&gt;

</description>
      <category>leadership</category>
      <category>career</category>
      <category>softskills</category>
    </item>
    <item>
      <title>Build a leader habit: Become the mentor you wish you had</title>
      <dc:creator>Gabriele Cimato</dc:creator>
      <pubDate>Thu, 12 Mar 2020 02:46:05 +0000</pubDate>
      <link>https://dev.to/gabrielecimato/become-the-mentor-you-wish-you-had-59f2</link>
      <guid>https://dev.to/gabrielecimato/become-the-mentor-you-wish-you-had-59f2</guid>
      <description>&lt;p&gt;Weather you got into tech by completing a CS degree, a boot-camp or simply self-taught, having a mentor to guide you through the first steps is always desirable.&lt;/p&gt;

&lt;p&gt;This holds true at every stage of your career. In general we seek guidance to climb to that role or position we wish for. We hope to meet somebody who can help us avoid horrible mistakes. Someone who can show us good practices and get our thoughts in line with filed experts.&lt;/p&gt;

&lt;p&gt;Sometimes we get lucky, sometimes we don't. No matter what your experience is (or was), you should aim to be THAT mentor.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--osCl79eY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/z7u2ncjokgu6qpjmzfla.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--osCl79eY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/z7u2ncjokgu6qpjmzfla.png" alt="Alt Text" width="880" height="654"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Mentor We Dream Of
&lt;/h2&gt;

&lt;p&gt;Early in my career I was hungry to learn (and actually still am) and fill the gap with experts in the software engineering field. I was hoping to join a company with strong leads who could show me the way. I was ready to put in the work, I was just looking for some guidance.&lt;/p&gt;

&lt;p&gt;I was lucky to have co-workers to learn from, but none were the mentor I was hoping for. I had a boss to report to, expectations to meet and the rest...I had to figure it out.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Most of the work an engineer is supposed to do, boils down to "figuring things out" yourself.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;In my young and naive mind this is what I expected:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A senior who's an expert in the software engineering field&lt;/li&gt;
&lt;li&gt;A patient mentor who could guide me and tolerate my mistakes&lt;/li&gt;
&lt;li&gt;High expectations, so that I always have to try my best&lt;/li&gt;
&lt;li&gt;Someone who is excited to share their knowledge and eager to see me grow&lt;/li&gt;
&lt;li&gt;Someone who would gradually give me more responsibility&lt;/li&gt;
&lt;li&gt;Someone who has clear in mind a growth path for me&lt;/li&gt;
&lt;li&gt;Strict but understanding&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I could go on even more but I hope you get the idea. I had high expectations and I was ready to deliver. But then reality hit. I had to learn the hard way. I had to find out what the best practices are, how to allow myself to make mistakes without disrupting anyone else's work, take great responsibilities early on, try my best to learn with books and any other mean available to me.&lt;/p&gt;

&lt;p&gt;It was a real hassle but I learned a lot in the process. I was scared, upset, frustrated, fulfilled. All sorts of emotions. I made it our OK, without the mentor I dreamed of.&lt;/p&gt;

&lt;h2&gt;
  
  
  You Don't Need a Mentor
&lt;/h2&gt;

&lt;p&gt;This is non entirely true. A better way to put it is "you don't necessarily need a mentor who's there holding your hand".&lt;/p&gt;

&lt;p&gt;While I think that having a mentor is a privilege, you can still make it without one. There are many communities, resources, books, classes, workshops out there. It's hard not to improve unless you really don't want to.&lt;/p&gt;

&lt;p&gt;You have to start by forgiving yourself for making mistakes. Try your best to make informed decisions but don't be hard on yourself if you do it wrong. Do you really believe that all those field experts out there had it right on their first try ?&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;It takes a lot of practice and a lot of mistakes to get better at anything.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;My general recommendation is also the following:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Allow yourself to make mistakes in a contained environment so that your errors don't leak.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I find that making mistakes is one of the fastest way to learn. You tend to better remember that time you spent hours fixing a bug, but not really when everything went smoothly. This is why I reassure people around me (especially juniors) that making mistakes is OK. On the other hand we have to make sure that our errors are self-contained and don't leak.&lt;/p&gt;

&lt;p&gt;Long story short, if you are willing to, you can set yourself up for success even without a mentor. It's a lot of work, a lot of active effort and a lot of mistakes but you can do it!&lt;/p&gt;

&lt;p&gt;Learning in public can also be beneficial, once you put it out there you have the whole internet helping you out.&lt;/p&gt;

&lt;h2&gt;
  
  
  Be the Mentor
&lt;/h2&gt;

&lt;p&gt;As I mentioned before I believe that having a mentor is a blessing. Just because you didn't have one doesn't mean that no one should. On the contrary, knowing the pain you had to go through why not become the mentor you wish you had ?&lt;/p&gt;

&lt;p&gt;I always found that good mentor-ship is a natural trait of a good leader. A good mentor is also about empowering people around you. While I've been trying to go over main habits and traits of a leader one by one, you'll easily see that they are all intertwined.&lt;/p&gt;

&lt;p&gt;This can be another way to empower people around you, help them grow, be patient, set the bar high but be understanding, show the way.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Early in our career we hope to be guided by an outstanding mentor. We won't all get this lucky and most of us will have to figure things out as they go.&lt;/p&gt;

&lt;p&gt;That is OK and is not an impediment to your growth and your career. You just have to put in the work. If you want to be good leader though, you can (and should) become that mentor you hoped you had. Challenge yourself and others by teaching. Put your knowledge to test. Help others grow and guide them to avoid critical pitfalls.&lt;/p&gt;

&lt;p&gt;BE THE MENTOR!&lt;/p&gt;

</description>
      <category>leadership</category>
      <category>learning</category>
      <category>softskills</category>
    </item>
    <item>
      <title>Build a leader habit: Empower people around you.</title>
      <dc:creator>Gabriele Cimato</dc:creator>
      <pubDate>Mon, 02 Mar 2020 23:34:41 +0000</pubDate>
      <link>https://dev.to/gabrielecimato/build-a-leader-habit-empower-people-around-you-53i1</link>
      <guid>https://dev.to/gabrielecimato/build-a-leader-habit-empower-people-around-you-53i1</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;A good leader has an impact on the team they join.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;They don't bring anyone down, they don't lower standard but they make the effort to show the way, possibly the better way. I've seen over and over again engineers clinging onto their knowledge convinced that's how they remain valuable to the team or the company. I have news for you, it only works short term, it harms your career development AND damages team dynamics.&lt;/p&gt;

&lt;p&gt;Although we might feel better about ourselves being the "go-to" person for specific things within the office, we might risk to become the only person available for it, &lt;em&gt;at all times&lt;/em&gt;. This means that you get stuck or pidgeon-holed into that role. This has two major drawbacks:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Eventually &lt;strong&gt;you might get tired&lt;/strong&gt; of always being the go-to person for the same issues/tasks. It feels great in the beginning but it becomes tiring in the long run.&lt;/li&gt;
&lt;li&gt;It can &lt;strong&gt;hamper your career development&lt;/strong&gt;. If you're the only one able to solve a specific issue/task, why would the manager want to move you to a different team/role/project ?&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  How not to get stuck
&lt;/h2&gt;

&lt;p&gt;There is a quite simple solution to this.&lt;/p&gt;

&lt;p&gt;There's a theme you'll see across many of my posts. And it's the answer to a simple question which varies based on the context you apply it to.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;What can &lt;strong&gt;YOU&lt;/strong&gt; do to improve the current state of things ?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;How can &lt;strong&gt;you&lt;/strong&gt; change the situation without relying on external factors ? While some of you might be lucky enough to have a supporting team and a great manager, we are engineers at heart so we need to consider the &lt;strong&gt;WCS&lt;/strong&gt; (Worst Case Scenario). Although we hear this mostly when it comes to solving algorithmic problems, it definitely applies to many real life situations.&lt;/p&gt;

&lt;p&gt;Here are a few things you can do to "get unstuck":&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Write incredibly good docs
&lt;/h3&gt;

&lt;p&gt;I wrote about this in the past &lt;a href="https://dev.to/gabcimato/how-to-make-your-future-self-happy-by-writing-good-docs-h8p"&gt;here&lt;/a&gt;, it definitely applies to the situation discussed as well. Some of the best engineers I had the pleasure to work with, were absolutely great at writing detailed-enough docs.&lt;/p&gt;

&lt;p&gt;This means solid &lt;code&gt;Readme&lt;/code&gt;s where all you had to do was follow a few steps. Explanations of the &lt;strong&gt;whys&lt;/strong&gt; more than the &lt;strong&gt;what&lt;/strong&gt;. Any team member should be able to be up and running by simply reading the docs and without any further need for communication. This liberates you from being the sole reference for a project and empowers other engineers to use or contribute to your work.&lt;/p&gt;

&lt;p&gt;Writing docs is always a good idea, even just for your future self. So you have a dual benefit:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You &lt;strong&gt;empower your future self&lt;/strong&gt; enabling them to pick up where you left off&lt;/li&gt;
&lt;li&gt;You &lt;strong&gt;empower junior employees&lt;/strong&gt; by showing them how things work passively (with docs).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Passive mentorship is a good starting point, but that's all it is. A starting point. So keep that in mind.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Automate what you can
&lt;/h3&gt;

&lt;p&gt;Especially in 2020 I'm all for automation. There's so much out there to help you out, it's quite incredible. Even posting on my personal blog is now automated with a scheduler.&lt;/p&gt;

&lt;p&gt;This can be quite useful for repetitive tasks. Instead of manually running a database query every 2 or 3 days a week to generate a report, automate it! Generate a report every day and save it somewhere where others can analyze it easily. On top of that, apply (1) again and document it all. With this you solve two problems at once: reports are automated so nobody needs to come ask, the automation is documented so other people can help fix any future issue.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You &lt;strong&gt;empower any other engineer&lt;/strong&gt; by allowing them to pick up and possibly fix a task you bootstrapped.&lt;/li&gt;
&lt;li&gt;You &lt;strong&gt;empower members of other teams&lt;/strong&gt; by making sure they have the data they need at all times.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3. Teach and spread the knowledge
&lt;/h3&gt;

&lt;p&gt;If you become the only source of truth for a specific piece of knowledge, you'll always be the point of reference. This ties well with my other post (&lt;a href="https://flawedengineer.dev/learn-how-to-let-go/"&gt;Learn how to let go&lt;/a&gt;), where I suggest that a good leader knows when to let go.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;That precious piece of knowledge can grow even more if you let other people nurture it.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Share what you learned. You are a lead so you don't need to be afraid that some specific information is what keeps you in that position. I have &lt;strong&gt;NEVER&lt;/strong&gt; seen a leader lose their credibility or position by sharing most of their knowledge with their peers.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Empower people around you&lt;/strong&gt; by showing them the ropes. Help them acquire some knowledge faster. It'll enable them to contribute sooner and become an integral part of the team.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Teach as much as you can&lt;/strong&gt; about projects, company past failures or what you learned in the past/present.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I always found the last one extremely valuable. My goal has always been to elevate juniors as fast as I could by sharing everything I know about specific topics. My intent is to bring them up to speed so that we can have a 1:1 conversation about any technical topic.&lt;/p&gt;

&lt;p&gt;I remember spending quite some time explaining how state management works in React in great depth. Then showing the good and bad of Redux and how to use it effectively. Within a few weeks I was able to discuss with other junior devs how we should go about handling a complex feature, letting now &lt;strong&gt;them&lt;/strong&gt; tell me how they would do it. This was only possible because I filled the gap in their knowledge by sharing and teaching them what I knew.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;There is no reason why you, as a lead, should keep your knowledge secret. We've seen how beneficial sharing and empowering team members can be. From a more self-centered perspective, it unlocks your growth. From a self-less perspective you allow the team to grow. That sounds absolutely great on all levels!&lt;/p&gt;

&lt;p&gt;Be the type of leader who brings the best out of people. Their growth is your growth!&lt;/p&gt;

&lt;p&gt;👋 Hi, I’m Gabri! I love innovation and lead R&amp;amp;D at Hutch. I also love React, Javascript and Machine Learning (among a million other things). You can follow me on twitter &lt;a href="https://twitter.com/gabrielecimato"&gt;@gabrielecimato&lt;/a&gt; and on GitHub &lt;a href="https://github.com/Gabri3l"&gt;@Gabri3l&lt;/a&gt;. Leave a comment if you have any questions, or send a DM on Twitter to say hi!&lt;/p&gt;

</description>
      <category>leadership</category>
      <category>career</category>
      <category>softskills</category>
    </item>
    <item>
      <title>A surprisingly good interview</title>
      <dc:creator>Gabriele Cimato</dc:creator>
      <pubDate>Mon, 17 Feb 2020 17:57:43 +0000</pubDate>
      <link>https://dev.to/gabrielecimato/a-surprisingly-good-interview-1a6k</link>
      <guid>https://dev.to/gabrielecimato/a-surprisingly-good-interview-1a6k</guid>
      <description>&lt;p&gt;Interviewing for a software engineer is hard. Not only for interviewees but for interviewers as well. The whole process is a 2-way interaction:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The candidate is supposed to demonstrate technical capabilities and inter-personal skills&lt;/li&gt;
&lt;li&gt;The interviewer should provide insights about the company and the day to day work&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Although this is a simplified point of view it still holds true. Leaving a bad impression on the candidate might make them skeptical about the company. Unfortunately that is not always taken into account from interviewers. I've been in all sorts of positions and had many different experiences. This time around I want to present a few surprisingly good ones as the interviewer!&lt;/p&gt;

&lt;p&gt;There are two instances that I remember very well. One happened a few years ago when we would provide candidates with a small project. They could take up to a week to send it back, it generally took 1 or 2 hours to finish.&lt;/p&gt;

&lt;p&gt;I remember creating this mini project with one thing in mind: make it relevant to the actual day to day work!&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;If you assign a take-home project, make it relevant to the position and the company&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It was a challenging enough sub-task of a bigger project that would also give the candidate the chance to shine. What I was expecting was NOT a fully functioning, all features covered and tested type of project. Just a simulation of being assigned a task, working on it and submitting a PR.&lt;/p&gt;

&lt;p&gt;Some people were all over the place. They did not follow coherent patterns or straight up missed major features. Sometimes they would just use many different approaches to do the same thing.&lt;/p&gt;

&lt;h3&gt;
  
  
  The attention to details
&lt;/h3&gt;

&lt;p&gt;This one candidate had everything well organized, even the commit messages in her repo! It was a breath of fresh air. The project was completely finished and styled. Everything about her code was in the right place, following organized patterns. Needless to say she was brought in for an onsite and was hired quickly after!&lt;/p&gt;

&lt;p&gt;What impressed me was not only the task completion, but the attention to details. It really felt like she kept in mind her future self and coworkers as well. Following specific patterns helped understanding where to find anything very quickly 🎉&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Showing off your attention to details &lt;strong&gt;can make the difference&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  The discouraged
&lt;/h3&gt;

&lt;p&gt;In another occasion we were interviewing for a Unity developer position. This time around we did not have a take-home ready. As you can image we went for the always-dreaded coding exercise 😦 .&lt;/p&gt;

&lt;p&gt;She was a junior and a bit nervous, as soon as I mentioned the coding exercise I saw the horror look in her eyes. She was very upfront and said: "I'm sorry I'm not very good at this type of things".&lt;/p&gt;

&lt;p&gt;I do my best to make sure the person on the other side of the table understands their whole career will not be judged by one coding exercise. I always mention a few things:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It doesn't matter if you solve it perfectly&lt;/li&gt;
&lt;li&gt;Time complexity does not matter&lt;/li&gt;
&lt;li&gt;We just want you to do a little coding&lt;/li&gt;
&lt;li&gt;We just want you to tell us how you approach it&lt;/li&gt;
&lt;li&gt;Ask as many questions as you want! We're here to help you!&lt;/li&gt;
&lt;li&gt;This is not Google!&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;She was still very skeptical and while I was trying my best to make her feel comfortable, I was starting to be skeptical as well. She then started getting into what a solution could be, coded something simple but effective. Sometimes she would take longer pauses and I had to ask her questions. At some point she was very discouraged.&lt;/p&gt;

&lt;p&gt;That's when I changed approach a bit and was proactively &lt;strong&gt;cheering for her&lt;/strong&gt;. Letting her take a minute and convincing her that she could do it with almost no help. It worked like magic! She went through with it and got to a solution she thought was just OK.&lt;/p&gt;

&lt;p&gt;Little did she know that it was actually the optimal solution! She just needed a little push and a bit more confidence. We ended up offering her the position and she sadly had to turn it down, some life changes required her to move to a different city unfortunately.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;At times you need to encourage and support the interviewee. Some don't perform well under pressure but you should try your best to make sure it doesn't disqualify them!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;I have many more examples of good and bad experiences but these two were the ones where I learned the most. On one side the attention to detail from a candidate really put her ahead of anyone else. Showing off how much you care about quality and coherence is never an issue! On the other side we need to keep in mind that interviewing is hard. Sometimes after we haven't interviewed for a long time we tend to forget how stressful it can be. As an interviewer always remember that you should try your best to make the interviewee comfortable. Encourage them, sometimes even with a little help!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Have you ever had a great interview experience before ? Share with us in the comments!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;👋 Hi, I’m Gabri! I love innovation and lead R&amp;amp;D at Hutch. I also love React, Javascript and Machine Learning (among a million other things). You can follow me on twitter &lt;a href="https://twitter.com/gabrielecimato"&gt;@gabrielecimato&lt;/a&gt; and on GitHub &lt;a href="https://github.com/Gabri3l"&gt;@Gabri3l&lt;/a&gt;. Leave a comment if you have any other recommendation that you’d like to share, or send a DM on Twitter if you have any question!&lt;/p&gt;

</description>
      <category>career</category>
      <category>interview</category>
    </item>
    <item>
      <title>CSS power-up: count code lines in pure CSS</title>
      <dc:creator>Gabriele Cimato</dc:creator>
      <pubDate>Wed, 20 Mar 2019 06:19:23 +0000</pubDate>
      <link>https://dev.to/gabrielecimato/css-power-up-count-code-lines-in-pure-css-67m</link>
      <guid>https://dev.to/gabrielecimato/css-power-up-count-code-lines-in-pure-css-67m</guid>
      <description>&lt;p&gt;I decided to start a series called &lt;strong&gt;CSS power-up&lt;/strong&gt;! I will be collecting small posts about neat CSS features. There's one specifically that I was very impressed by. Not only for how intuitive it is but also for its widespread browser support.&lt;/p&gt;

&lt;p&gt;Tired of having overly priced note-taking apps, or free ones that don't offer what I need, I decided to create my own! That's why I started a side project that led to rediscovering an interesting CSS property. &lt;/p&gt;

&lt;p&gt;It all started with &lt;code&gt;Slate.js&lt;/code&gt;, which provides a library to build rich text editors. One feature I was looking for in my app, was the ability to add code blocks. I soon found a plugin called &lt;code&gt;slate-code&lt;/code&gt; that does it for me. How convenient! After fiddling with it a bit here's the result:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fghqqarux042jx9kvhnz6.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fghqqarux042jx9kvhnz6.PNG" alt="Code block"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now this looks fine but, I'm sure you noticed something is missing. &lt;strong&gt;Where is the line count ?&lt;/strong&gt; Armed with patience I decided to go down the rabbit hole, convinced it would be a painful journey. At first I thought about using some sort of index reference to each line and display that on the side. But handling deleting and insertion of lines seemed overly complicated 🤔.&lt;/p&gt;

&lt;p&gt;Then I remembered that you could do that very intuitively with &lt;strong&gt;CSS only!&lt;/strong&gt; I was thrilled 😀! The way it works is by creating a named counter and specifying which CSS class increments that counter. On top of that you also have access to the counter value that you can display as &lt;code&gt;content&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Let's dig into it. First let's define the class of the container of the code block.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;

&lt;span class="nc"&gt;.code&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;background&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#f7f9fa&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;border&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1px&lt;/span&gt; &lt;span class="nb"&gt;solid&lt;/span&gt; &lt;span class="m"&gt;#e6e8eb&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;font-family&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;"Lucida Console"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;Monaco&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nb"&gt;monospace&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;overflow&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;auto&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;8px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;white-space&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;pre&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;counter-reset&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;line&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;With &lt;code&gt;counter-reset: line&lt;/code&gt; we are defining and initializing a counter named &lt;code&gt;line&lt;/code&gt; with the value 0.&lt;/p&gt;

&lt;p&gt;Now we need to determine which class will be in charge of incrementing the counter. We use the &lt;code&gt;counter-increment&lt;/code&gt; property for that and give it the value of the counter name we want to increment, in our case &lt;code&gt;line&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;To finish up we also want to display the counter value. Using &lt;code&gt;counter(line)&lt;/code&gt; with the &lt;code&gt;content&lt;/code&gt; property that's exactly what we get. As an extra you can add the &lt;code&gt;-webkit-user-select: none&lt;/code&gt; to prevent user from selecting the counter values. This is helpful when you want to copy a whole code block.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;

&lt;span class="nc"&gt;.code-line&lt;/span&gt;&lt;span class="nd"&gt;::before&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;counter-increment&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;line&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;counter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;line&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nl"&gt;-webkit-user-select&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;none&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;font-size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;10px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;grey&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;margin-right&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;10px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;text-align&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;right&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;display&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;inline-block&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;18px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;And the result is the following:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqn1diq9jeexjoee2fgge.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqn1diq9jeexjoee2fgge.PNG" alt="Code block"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The rest of the styling is pretty arbitrary and up to you. As you can see it was quite easy to add something as simple as a line count. You can find the full reference &lt;a href="https://thepracticaldev.s3.amazonaws.com/i/rycv2ql79vrhui8twtzk.PNG" rel="noopener noreferrer"&gt;here&lt;/a&gt;. At first I was very thrilled by the simplicity of this method then I remembered that I had to check browser support.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxezzo4o65epw7jnx7ebg.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxezzo4o65epw7jnx7ebg.PNG" alt="CSS Counters Support is over 95%"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;🎉 What a victory! We went from panicking about ways to implement a line counter to having a simple CSS property that is widely supported. I hope you found this as interesting as I did. Is there any not-so-popular CSS property that left you "wowed" ? Have you used the line counter before ?&lt;/p&gt;

&lt;p&gt;If you want to see a live demo, you can find one &lt;a href="https://codepen.io/Gabri3l/pen/PLdBxM?editors=1100" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;👋 Hi, I’m Gabri! I love innovation and lead R&amp;amp;D at Hutch. I also love React, Javascript and Machine Learning (among a million other things). You can follow me on twitter &lt;a href="https://twitter.com/gabrielecimato" rel="noopener noreferrer"&gt;@gabrielecimato&lt;/a&gt; and on GitHub &lt;a href="https://github.com/Gabri3l" rel="noopener noreferrer"&gt;@Gabri3l&lt;/a&gt;. Leave a comment or send a DM on Twitter if you have any questions!&lt;/p&gt;

</description>
      <category>css</category>
      <category>frontend</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Build a leader habit: learn how to let go</title>
      <dc:creator>Gabriele Cimato</dc:creator>
      <pubDate>Wed, 06 Mar 2019 14:30:48 +0000</pubDate>
      <link>https://dev.to/gabrielecimato/build-a-leader-habit-learn-how-to-let-go-a25</link>
      <guid>https://dev.to/gabrielecimato/build-a-leader-habit-learn-how-to-let-go-a25</guid>
      <description>&lt;p&gt;I would like for this post to be addressed to everyone, junior to senior. I believe it will resonate more with senior engineers though. Nonetheless I invite everyone to give it a read!&lt;/p&gt;

&lt;p&gt;You can find countless self help books talking about "getting rid of the clutter", "focusing on things that matter" and "keeping things minimal". What you'll read goes in hand with many of these topics. I wanted to go more into specifics, especially for engineers in leading roles. I will split the article into small sections so you know exactly what to let go of. I also touch on other aspects of being a good leader so get ready to take notes!&lt;/p&gt;

&lt;h2&gt;
  
  
  Projects you started
&lt;/h2&gt;

&lt;h3&gt;
  
  
  ...that will be passed on to someone else
&lt;/h3&gt;

&lt;p&gt;This applies especially when you join a startup at early stages. You start developing anything, from an internal tool to the backbone of a production app. You get your hands dirty, the team is small and you have to hack it together. But you're proud of what you build, like every engineer. What you thought was a small "internal admin tool" becomes a behemoth. A do-it-all dashboard that holds together all internal data. As the company grows the internal tool grows, up to the point where you can't maintain it alone. At this point a few great opportunities will present themselves:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Mentoring&lt;/li&gt;
&lt;li&gt;Building Trust&lt;/li&gt;
&lt;li&gt;Letting go&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;First of all you have the chance to show what you built to a junior. You can mentor them so they can learn their way around the code base. You can teach them about the mistakes you made along the way. It'll help them not having to learn the hard way (mind you, they will learn plenty the hard way so, no need to add more). Then, once they are comfortable, they start adding/removing features, fixing bugs and taking ownership little by little. You can now let go.&lt;/p&gt;

&lt;p&gt;Do not obsess over the project because you built it. Do not obsess over the project because you want control. Do not obsess over the project because you want things done "your way". Do not obsess because you want to feel needed. Let go. Let go and trust the coworkers you mentored to take over, they will do just fine. And what if they are completely lost? They can come to you and ask. That easy.&lt;/p&gt;

&lt;p&gt;You already gave it your best, you put plenty energy in it. It is time for you to move on and focus on whatever you can bring next to the company. Especially as it grows there will be a ton of new projects, new tools, new apps. Or there can be old projects, old tools, old apps that need help! But remember that clinging onto a project you worked on is not healthy:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You will always feel like you need to be involved&lt;/li&gt;
&lt;li&gt;You will always feel like you need to keep an eye on it&lt;/li&gt;
&lt;li&gt;You will always feel like you need to be in every meeting about it&lt;/li&gt;
&lt;li&gt;You will take away focus and energy from things you need to work on next&lt;/li&gt;
&lt;li&gt;You will split yourself too thin and burn out&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Learning to let go is a beautiful thing. It allows you to focus on what matters. You will avoid wasting mental energy. You will avoid keeping control on things that do not need you. It's not easy, because we all love to be involved. It's not easy because we will feel "cut out". But once you let go, you feel lighter. You don't have to worry about it anymore. You can focus on what's next and avoid unnecessary distractions.&lt;/p&gt;

&lt;p&gt;If I didn't learn how to let go, after many years within the company, I would need to be part of way too many meetings. Way too many code reviews. Way too many architectural decisions. At some point you need to trust your team and focus on what you do best.&lt;/p&gt;

&lt;h2&gt;
  
  
  Projects you started
&lt;/h2&gt;

&lt;h3&gt;
  
  
  ...that will become obsolete
&lt;/h3&gt;

&lt;p&gt;Writing code is an ephemeral art. Software becomes obsolete and so does the code you write. Do not get too attached to that beautiful folder structure, script, util or anything about the project. Be proud of it, learn from it but don't get attached.&lt;/p&gt;

&lt;p&gt;Especially in fast paced environments projects born and die quite often. It would be an emotional roller-coaster if we always got attached to what we develop. Learn to let go of it, put in your backpack and move on. Even though such projects might end in the trash bin, keep with you the &lt;strong&gt;lessons you learned while working on it&lt;/strong&gt;. Those are invaluable and will bring you closer to be the amazing engineer you're meant to be! For this reason here's a hot tip:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;When you work on a new project, no matter how small it is, try to add or use something new (even as little as a small utils library). Put yourself in a situation where you can be productive. But also give yourself a chance to learn something in the process.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I have even been in scenarios where I built a small interface or a little dashboard. Then, after a week, it became completely useless. That's because we learned things about the problem that made it not necessary. Poor planning ? Maybe, but sometimes that's part of the game. Was it a waste of time ? No, because I made sure to use a different UI library, so I was able to learn something in the process 💪&lt;/p&gt;

&lt;h2&gt;
  
  
  Your ego
&lt;/h2&gt;

&lt;p&gt;This is a tough one. To be honest they all are. They seem easy on paper but it's difficult to adjust your mindset to it. A good leader, heck, a great leader does not seek credit. A great leader does not say "I", she says "We".&lt;/p&gt;

&lt;p&gt;A good leader is an established presence within the company. For this reason you need to understand the role your ego plays in a work environment. If you don't keep it in check, you risk to put other talented or growing engineers in the shadow. Learn how to use positive reinforcement and let others take credit and shine when the time is right!&lt;/p&gt;

&lt;p&gt;Sometimes it's hard because we all love praise. This is why putting your ego on the side for the greater good is hard. Be the kind of leader who helps engineers to grow with suggestions on implementations, but deal with this quietly and privately.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Be ready to forgo credit for suggested improvements&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This is something extremely valuable that I learned twice: on the job and from F.P.Brooks on "The Mythical Man-Month". If you gave the suggestion that helped someone better an implementation, be a good leader, let go of the credit.&lt;/p&gt;

&lt;p&gt;I would also like to give you a few examples of what a good leader &lt;strong&gt;should NOT do&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;When a junior coworker is asked to present a new technology to the team as an opportunity to shine, don't shoot them down &lt;strong&gt;while&lt;/strong&gt; they are presenting. Don't interrupt them with questions, and if you &lt;em&gt;really&lt;/em&gt; need to do that (just don't) make sure you know the answer. Talk to them privately if you need to correct them.&lt;/li&gt;
&lt;li&gt;Do not take it personally when someone reviews or critics your work. Understand what you can take from it and move forward (this &lt;a href="https://twitter.com/sarah_edo/status/1100241015338819585?s=19"&gt;tweet&lt;/a&gt; from Sarah is a good example).&lt;/li&gt;
&lt;li&gt;Do not demand to always be the one to work on the "cool" company projects.&lt;/li&gt;
&lt;li&gt;Do not try to keep every technological aspect of the company under your personal scrutiny, delegate... let go!&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There's many more that I unfortunately witnessed. I hope these will give you a few hints on what to expect from a good leader, and how to be one! To be honest this is just a small part of it. Learning how to let go is a main ingredient that has a subtle but significant effect on many scenarios. The risk is that your ego can get in your way. This will prevent you from making decisions clearly and fairly. My suggestion? Let it go (cit. Frozen).&lt;/p&gt;

&lt;p&gt;It's a way of thinking and behaving that's beneficial on so many levels, it allows you to declutter your brain. You have to keep fewer things in mind because you are now delegating more. You will take pride because you helped other engineers grow within the company. By doing so you let them become the people you can trust and delegate to!&lt;/p&gt;

&lt;p&gt;It's really a win-win 🎉!&lt;/p&gt;

&lt;p&gt;👋 Hi, I’m Gabri! I love innovation and lead R&amp;amp;D at Hutch. I also love React, Javascript and Machine Learning (among a million other things). You can follow me on twitter &lt;a href="https://twitter.com/gabrielecimato"&gt;@gabrielecimato&lt;/a&gt; and on GitHub &lt;a href="https://github.com/Gabri3l"&gt;@Gabri3l&lt;/a&gt;. Leave a comment if you have any other recommendation that you’d like to share, or send a DM on Twitter if you have any question!&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>beginners</category>
      <category>leadership</category>
    </item>
    <item>
      <title>How to make your future self happy by writing good docs</title>
      <dc:creator>Gabriele Cimato</dc:creator>
      <pubDate>Wed, 20 Feb 2019 06:15:00 +0000</pubDate>
      <link>https://dev.to/gabrielecimato/how-to-make-your-future-self-happy-by-writing-good-docs-h8p</link>
      <guid>https://dev.to/gabrielecimato/how-to-make-your-future-self-happy-by-writing-good-docs-h8p</guid>
      <description>&lt;p&gt;This is a little overview of common problems faced when working on a new or old project. Sometimes making a little effort up front can save you time and energy down the line. Writing good docs is like getting ready for your future self to high-five you ✋! We’ll see a silly example and a few recommended practices to get started with a good &lt;code&gt;README.md&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Struggle
&lt;/h2&gt;

&lt;p&gt;I’m almost certain that in your career, or in your everyday life, you faced a situation before that makes you think:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“This problem looks familiar, I’m pretty sure I solved it before. If only I could remember how I did it!”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Especially coming from an engineering perspective this happens quite a lot. Repeated patterns, functions or bugs we’ve met before that require us to go through the exact same past effort to overcome an issue. Sometimes we are willing to do it again, so we go ahead and figure it out once more. Some other times though…&lt;/p&gt;

&lt;h2&gt;
  
  
  An example
&lt;/h2&gt;

&lt;p&gt;I lead the R&amp;amp;D department at Hutch and we often have to dig deep into new and unseen technologies, frameworks or languages. You try and experiment a lot and can’t expect to remember everything you interact with. You work on something for a couple months then, once you’re done, switch to something very different. Or maybe you just work on the next step in a pipeline.&lt;/p&gt;

&lt;p&gt;Then, when you least expect it, it happens. You have to go back to that framework you used 3 months before to make a change. You give it a look, a puzzled one 🤔.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Oh, actually I remember this. To make it behave this other way I go here…change this…and voilà!”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;At that moment you feel pretty good about it. You were able to recollect how things worked. You’re even proud of yourself for leaving simple docs on many of the functions you wrote many moons before. Then with a light touch of your mouse, you run the project and…&lt;/p&gt;

&lt;p&gt;⛔ &lt;strong&gt;ERROR! The main frame has some cowbells directed towards Mars, this is not allowed.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;😵 Yikes! This looks very cryptic. You take a look at the code you changed and, well…you try to run it again. Maybe something will automatically change. Maybe looking at it again had some quantum effect of some sort. Nope.&lt;/p&gt;

&lt;p&gt;⛔ &lt;strong&gt;ERROR! The main frame has some cowbells directed towards Mars, this is not allowed.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You then read through the comments or the docs. Nothing mentions this error, nothing points you in the right direction. This error is so distinctive that you’re sure you saw it before, and also solved it before. As daunting as it feels, you have to figure it out…again!&lt;/p&gt;

&lt;p&gt;You start googling the problem and notice some previously visited links.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Great! This link is probably the one that helped me with the error…phew. Crisis averted!”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;You then scroll the page and, oh no! More…many more visited links. So now you have no idea which one led to a solution if any. And so the search continues until eventually, you figure it out — minutes, hours or even days later.&lt;/p&gt;

&lt;h2&gt;
  
  
  Good documentation covers more than just happy paths 🙂
&lt;/h2&gt;

&lt;p&gt;I learned this the hard way. Multiple times. It’s often easy, although admirable, to add docs to your functions/methods/classes with the assumption that everything will work well.&lt;/p&gt;

&lt;p&gt;I always try to make life easier for whoever will dig into my code. That includes future me! So I diligently add docs to almost all of my functions but the trivial ones. As many have said for decades:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Your comments should explain the &lt;strong&gt;why&lt;/strong&gt; more than the &lt;strong&gt;what&lt;/strong&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Your code should be “self-documenting” so that any added comment addressing the “what” would result redundant.&lt;/p&gt;

&lt;p&gt;In all fairness, I tend to add comments even for the “what”, only when I know a function is either long or somehow intricate. Adding a few lines of comments would allow me to skip examining every line of code. This has been helpful countless times and I absolutely recommend it!&lt;/p&gt;

&lt;p&gt;But documentation is not just lines of comments on a function. Good documentation is a well written &lt;code&gt;README.md&lt;/code&gt;. In some scenarios even a full-fledged dedicated website for bigger projects (see &lt;a href="https://reactjs.org/docs/getting-started.html"&gt;React&lt;/a&gt;, &lt;a href="https://redux.js.org/introduction/getting-started"&gt;Redux&lt;/a&gt;, &lt;a href="https://vuejs.org/v2/guide/"&gt;Vue&lt;/a&gt;, &lt;a href="https://docs.slatejs.org/"&gt;Slate&lt;/a&gt;, …).&lt;/p&gt;

&lt;p&gt;The projects mentioned are all open source. Teams are basically compelled to go in greater detail to help people start using their framework or library (and have been doing a great job in that regard!). But what about smaller private projects? What about those projects that will only live within the company (no matter what the size of the team is)? And what about all those issues that are not purely code related?&lt;/p&gt;

&lt;p&gt;More often than not we tend to skip the &lt;code&gt;README.md&lt;/code&gt; file or dismiss it with a few lines only. I’ve been following a simple yet powerful practice to make this task less intimidating and help go beyond the happy paths.&lt;/p&gt;

&lt;h2&gt;
  
  
  A basic approach to creating a good README
&lt;/h2&gt;

&lt;p&gt;When mentioning “happy paths” I refer to the practice of assuming everything will run smoothly. This means we are only addressing each step of a process as if it will always succeed.&lt;/p&gt;

&lt;p&gt;Unfortunately, that is not always the case so, how can we make our lives better? How do we make sure that even the not-so-happy paths are covered?&lt;/p&gt;

&lt;p&gt;Here are a few suggestions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Start by writing down a few lines about what the project is about and what problem you are trying to solve**. This helps you, and whoever goes through it, understanding the intent of the project.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;As you go about setting everything up, make sure you add each step to the &lt;code&gt;README.md&lt;/code&gt;. It doesn’t have to be well formatted and phrased, it just needs to be there for now. This usually comes in the form of installation instructions.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;If at any time you face an error of any sort, add a section at the bottom. You can call it &lt;strong&gt;Common Errors&lt;/strong&gt;. There you add some details about the error you faced and how you solved it. One crucial thing I like to do here is add links to the source of the solution (or anything that helped me get there).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;When I reach a stable point in the project I try to install it on a new machine (if it’s a possibility). The goal here is to &lt;strong&gt;ensure that the set-up steps we listed before are correct&lt;/strong&gt; and work as expected.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Most importantly, you need to have a section answering the question: &lt;strong&gt;how do I use/run this project?&lt;/strong&gt; This should be as clear as possible, so put some effort into it! Sometimes, though, you can’t answer this question until later on. You can wait until you are in a working/running state to update the &lt;code&gt;README.md&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Put aside some time to &lt;strong&gt;review and clean up&lt;/strong&gt; your &lt;code&gt;README.md&lt;/code&gt; file. Most of the time you’ll probably need to &lt;strong&gt;update it&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is often enough for small size projects. For mid to large-sized ones it can be a starting point to develop some good practices. Talk about it with the rest of the team and agree on a common approach that will make everyone happy. Keep in mind that &lt;strong&gt;maintaining the docs up to date is crucial!&lt;/strong&gt; Hold each other accountable for it and after the initial effort, it’ll become natural, just like a simple refactoring!&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Writing good docs involves maintaining a good &lt;code&gt;README.md&lt;/code&gt; and documenting the &lt;strong&gt;whys&lt;/strong&gt; in your code more than the &lt;strong&gt;what&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;If you make a small effort and incrementally build up a good &lt;code&gt;README.md&lt;/code&gt; it will feel less intimidating. Not only will it make your life better in the future, but it will help anyone else contributing.&lt;/p&gt;

&lt;p&gt;Don’t cover only the happy paths expecting everything will work, also cover eventual errors that you face or any issue a newcomer might face. Keep a dedicated section for this.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bonus&lt;/strong&gt;: when estimating your work with a PM, take into account the effort required to write/update the docs. Don’t underestimate the fact that good docs require a good amount of time. But that time is very well spent!&lt;/p&gt;

&lt;p&gt;👋 Hi, I’m Gabri! I love innovation and lead R&amp;amp;D at Hutch. I also love React, Javascript and Machine Learning (among a million other things). You can follow me on twitter &lt;a href="https://twitter.com/gabrielecimato"&gt;@gabrielecimato&lt;/a&gt; and on GitHub &lt;a href="https://github.com/Gabri3l"&gt;@Gabri3l&lt;/a&gt;. Leave a comment if you have any other recommendation that you’d like to share, or send a DM on Twitter if you have any question!&lt;/p&gt;

</description>
      <category>documentation</category>
      <category>engineering</category>
      <category>productivity</category>
      <category>react</category>
    </item>
  </channel>
</rss>
