<?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: Johannes Scharlach</title>
    <description>The latest articles on DEV Community by Johannes Scharlach (@johannes_scha).</description>
    <link>https://dev.to/johannes_scha</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%2F26585%2Fd91d9326-3983-4190-a2f7-2926d15f41b1.jpeg</url>
      <title>DEV Community: Johannes Scharlach</title>
      <link>https://dev.to/johannes_scha</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/johannes_scha"/>
    <language>en</language>
    <item>
      <title>How I Stay Up To Date</title>
      <dc:creator>Johannes Scharlach</dc:creator>
      <pubDate>Sat, 10 Apr 2021 12:27:31 +0000</pubDate>
      <link>https://dev.to/johannes_scha/how-i-stay-up-to-date-iik</link>
      <guid>https://dev.to/johannes_scha/how-i-stay-up-to-date-iik</guid>
      <description>&lt;p&gt;I've managed to stay in touch with what is happening in the React world, the Node.js world and also keep on updating my engineering management skills. So recently some colleagues asked me to share my sources.&lt;/p&gt;

&lt;h2&gt;
  
  
  Learning New Skills Quickly
&lt;/h2&gt;

&lt;p&gt;Whenever I want to learn a new topic, I try to find a hand full of domain experts – people who are really top notch in this field – and learn from them. Usually by following them on Twitter, reading their Blogs and subscribing to their newsletters. And then I practice. It's incredible how quickly you make progress when you have some direction from domain experts and put in time and effort to practice what you now know. Just 2 weeks of this make it possible for me to start having in depth conversations about the topic.&lt;/p&gt;

&lt;p&gt;Oren Ellenbogen has described a very similar approach at a conference talk. I fully recommend watching this.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/9edq00JwNzg"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  Twitter
&lt;/h2&gt;

&lt;p&gt;Right now my most important source of info is Twitter. Here I have a few people I'm following&lt;/p&gt;

&lt;p&gt;React &amp;amp; Node.js&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://twitter.com/kentcdodds"&gt;Kent C. Dodds&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/ryanflorence"&gt;Ryan Florence&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/sebmck"&gt;Sebastian McKenzie&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/dan_abramov"&gt;Dan Abramov&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/acdlite"&gt;Andrew Clark&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/sophiebits"&gt;Sophie Alpert&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/buildsghost"&gt;Jamie Kyle&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Technical Excellence &amp;amp; Tech Entrepreneurship&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://twitter.com/mipsytipsy"&gt;Charity Majors&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/lizthegrey"&gt;Liz Fong-Jones&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/rauchg"&gt;Guillermo Rauch&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/monicalent"&gt;Monica Lent&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/KentBeck"&gt;Kent Beck&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/martinfowler"&gt;Martin Fowler&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/b0rk"&gt;Julia Evans&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Newsletters
&lt;/h2&gt;

&lt;p&gt;With my newsletters I like to have a mix of content from individuals who write their own blog posts and curators who link to many different blogs. Keeping updated with the content of an individual allows some consistency and I understand their references to previous content. Curators allow me to open my mind to new content continuously&lt;/p&gt;

&lt;p&gt;&lt;a href="https://kentcdodds.com/"&gt;Kent C. Dodds&lt;/a&gt; has a focus on testing &amp;amp; React. You can subscribe to his newsletter at the bottom of the page.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://softwareleadweekly.com/"&gt;SoftwareLeadWeekly&lt;/a&gt; by Oren Ellenbogen is helping me stay up to date as a manager and tech leader. Oren also has a book, which I found ok but it didn't influence me too much. His mailing list contains info which is more geared towards managers, but I believe that any engineer profits from that knowledge.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://leaddev.com/"&gt;LeadDev&lt;/a&gt; also has a great newsletter (at the bottom) focussed on all sorts of tech leadership topics. They also organise some wonderful (virtual) conferences which I previously attended.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.stefanjudis.com/newsletter/"&gt;Stefan Judis&lt;/a&gt; has a very humble tone in his newsletter. He writes stuff which is just fun to follow and very relatable.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://x-team.com/"&gt;X-Team&lt;/a&gt; has a curation of usually technical documents. What I find interesting is that they highlight blog posts as well as useful GitHub repositories.&lt;/p&gt;

&lt;h2&gt;
  
  
  From Engineer to Manager
&lt;/h2&gt;

&lt;p&gt;I've previously written about even more &lt;a href="https://dev.to/johannes_scha/getting-into-engineering-management-useful-resources-to-start-thinking-like-a-manager-57gm"&gt;resources which help with the transition to becoming an Engineering Manager&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Cover photo by &lt;a href="https://unsplash.com/@scottsweb?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText"&gt;Scott Evans&lt;/a&gt; on &lt;a href="https://unsplash.com/s/photos/renew?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText"&gt;Unsplash&lt;/a&gt;&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>javascript</category>
      <category>webdev</category>
      <category>career</category>
    </item>
    <item>
      <title>Getting into Engineering Management: Useful resources to start thinking like a manager</title>
      <dc:creator>Johannes Scharlach</dc:creator>
      <pubDate>Thu, 08 Apr 2021 12:02:01 +0000</pubDate>
      <link>https://dev.to/johannes_scha/getting-into-engineering-management-useful-resources-to-start-thinking-like-a-manager-57gm</link>
      <guid>https://dev.to/johannes_scha/getting-into-engineering-management-useful-resources-to-start-thinking-like-a-manager-57gm</guid>
      <description>&lt;p&gt;Everyone’s path into engineering management is different. For me there were a couple of resources that I wish I had started with very early and other items that were more useful later down the road.&lt;/p&gt;

&lt;h2&gt;
  
  
  Reading Material – books, newsletters, blogs
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Read Immediately: The most Actionable Resources
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://softwareleadweekly.com/"&gt;Software Lead Weekly&lt;/a&gt; a great weekly newsletter that curates useful blog posts and tweets around engineering management. For me, getting a regular newsletter in my inbox is a good starting point to build a habit of reading about a topic (like engineering management in this case)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.goodreads.com/book/show/38821039-the-making-of-a-manager"&gt;The Making Of A Manager&lt;/a&gt; by Julie Zhuo. Julie joined Facebook straight out of university as a software engineer and today leads Facebook’s design team. She had to learn fast and make mistakes, so that we don’t have to.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.goodreads.com/book/show/29939161-radical-candor"&gt;Radical Candor&lt;/a&gt; by Kim Scott. Kim worked at Google and Apple and has learnt how to receive and give honest and candid feedback. It is the single most important book on how to act.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://charity.wtf/2019/09/08/reasons-not-to-be-a-manager/"&gt;17 reasons NOT to be a manager&lt;/a&gt; by Charity Majors. Not only does it help you figure out if this role suits you, but also it shows many of the options you can provide your senior engineers that are wondering about their options. There are lots of fun manager activities that senior engineers can help you with and you will be more successful when you share those responsibilities with the right people.&lt;/p&gt;

&lt;h3&gt;
  
  
  Important Growth Literature
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://www.goodreads.com/book/show/33369254-the-manager-s-path"&gt;The Manager’s Path&lt;/a&gt; really highlights the different kinds of roles that exist in an engineering organisation and what is expected of whom.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.goodreads.com/book/show/15824358-the-first-90-days"&gt;The First 90 Days&lt;/a&gt; is great literature when your role changes. You probably have a role change where this is useful at least once a year when your responsibilities shift or your team changes.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.goodreads.com/book/show/50937.First_Break_All_the_Rules"&gt;First, break all the rules&lt;/a&gt; is a book that focuses on what makes the difference between an average manager and the best. Are you looking to join the elites? You need to do things differently.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.goodreads.com/book/show/23848190-extreme-ownership"&gt;Extreme Ownership.&lt;/a&gt; This book was not only fun to read, it also teaches a big lesson on how to step up and show ownership. You hate fingerpointing? Follow the principles outlined by the navy seals who wrote this book. It’s very American.&lt;/p&gt;

&lt;h3&gt;
  
  
  Further Readings that Inspire Me
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://orgdev.substack.com/"&gt;OrgDev Newsletter.&lt;/a&gt; I love thinking about how an organisation should be built rather than only thinking about my direct reports. This newsletter talks about great resources that broaden my understanding of organisations.&lt;br&gt;
&lt;a href="https://www.goodreads.com/book/show/48019.The_Effective_Executive"&gt;The effective Executive&lt;/a&gt; by Peter Drucker. Peter Drucker is maybe the most well known business coach of the 20th century. His advice is timeless and not focussed on tech.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.goodreads.com/book/show/42118073-trillion-dollar-coach"&gt;Trillion Dollar Coach.&lt;/a&gt; Bill Campbell had so much influence in how Microsoft, Apple, Google and many other companies succeeded. He’s probably the most influential person in tech that you’ve never heard of. He serves more as a role model to me due to this book, but it wasn’t particularly actionable.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.goodreads.com/book/show/17255186-the-phoenix-project"&gt;The Phoenix Project&lt;/a&gt; is fun to read, because it’s a business book written in the style of a novel. It mainly highlights how good DevOps culture integrates what is in production with development as well as how important small improvements are.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.goodreads.com/book/show/34536488-principles"&gt;Principles: Life and Work.&lt;/a&gt; This is not specific to tech either, but we can learn a lot about how to be great leaders and how to lead more effectively.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.goodreads.com/book/show/44245196-the-great-mental-models"&gt;The great mental models.&lt;/a&gt; This book allows me to scale as a manager, because I can make connections between new problems and old problems quickly and treat new problems as “another one of those” by applying my learnings from previous similar problems. It is also important to teach those mental models to my best people, so that they become more effective problem solvers, too.&lt;/p&gt;

&lt;h2&gt;
  
  
  Building Effective Teams
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Useful tooling
&lt;/h3&gt;

&lt;p&gt;Atlassian has lots of &lt;a href="https://www.atlassian.com/team-playbook/plays"&gt;useful plays&lt;/a&gt; that you can go through with your team. This is how you get the team to really own problems together. Not sure where to start? Do the &lt;a href="https://www.atlassian.com/team-playbook/health-monitor"&gt;health monitor&lt;/a&gt;. As a Manager I have learnt a lot about what’s working well in the team and what isn’t. Sometimes there are no surprises for me, but team members become aware of problems.&lt;/p&gt;

&lt;p&gt;Another great resource is &lt;a href="https://icebreaker.video/"&gt;Icebreaker.video&lt;/a&gt;. It is software that helps you organise events in which a large group of people can authentically get to know each other. I’ve used it for our quarter kickoff and got really good feedback on it.&lt;/p&gt;

&lt;h3&gt;
  
  
  Having great 1:1s
&lt;/h3&gt;

&lt;p&gt;For me 1:1s are always about either coaching people (which is when I listen to what’s working well and what isn’t to give feedback about how the person can do better) as well as building trust and building a connection. To learn about a person, you can ask questions for example &lt;a href="https://jasonevanish.com/2014/05/29/101-questions-to-ask-in-1-on-1s/"&gt;from this list&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;For the first 1:1 with anyone, I like to &lt;a href="https://larahogan.me/blog/first-one-on-one-questions/"&gt;ask these questions&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;But at the end of the day, 1:1s are a lot about coaching and I've become a lot more effective at doing them ever since I picked up &lt;a href="https://www.goodreads.com/book/show/29342515-the-coaching-habit"&gt;The Coaching Habit&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Giving candid feedback
&lt;/h3&gt;

&lt;p&gt;The only kind of feedback that works is what the recipient chooses to hear and accept. What helped me is to make sure that&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;I provide feedback in a non-threatening setting. Usually in private, most of the time in person/video so that I can see the other person's reaction and put things into context&lt;/li&gt;
&lt;li&gt;Feedback needs to be candid. When you provide it, you're speaking from your feelings and beliefs, not from a version that is bending the truth.&lt;/li&gt;
&lt;li&gt;Especially if it's tough feedback, put it into perspective. Does this person being five minutes late to every meeting mean that you think less of them as a person? That you're planning to fire them over it? Make sure feedback for small improvements is seen as such and feedback about behaviour that may cost someone their job is seen as such, too&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Furthermore I follow a method of communicating my observation, my impression and my wish. I do that by answering (in this order)&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;What did I see and hear? &lt;/li&gt;
&lt;li&gt;How did that make me feel?&lt;/li&gt;
&lt;li&gt;What's my wish?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Sometimes it's hard to be specific with your wish and that's ok. You can wish for a different feeling without giving tips on different behaviour. You can wish for continuity in case of positive feedback. If you're not comfortable sharing, you can even skip the wish altogether and you will still have provided valuable feedback.&lt;/p&gt;

&lt;p&gt;Example: An employee regularly shows up late for meetings that involve the entire team and it's affecting team morale. My feedback might look like this&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;I noticed that in the past weeks you often showed up late for our meetings while all your colleagues are waiting for you for five minutes. It made me feel like you don't think the meetings are relevant for you or your time is more important than your colleagues'. I wish you'd be on time for meetings where you're expected and you would help make meetings more relevant for everyone involved so that we all make good use of our time.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The person receiving this feedback might not accept the entire part of the feedback, but they will know what you noticed and they will have heightened awareness of the impression it leaves on others.&lt;/p&gt;

&lt;p&gt;What else? What are some more resources which are useful to get into engineering management?&lt;/p&gt;

</description>
      <category>management</category>
      <category>career</category>
    </item>
    <item>
      <title>The Ideal Developer: Bored, Frustrated &amp; Full Of Energy</title>
      <dc:creator>Johannes Scharlach</dc:creator>
      <pubDate>Wed, 04 Dec 2019 17:54:59 +0000</pubDate>
      <link>https://dev.to/johannes_scha/the-ideal-developer-bored-frustrated-full-of-energy-82i</link>
      <guid>https://dev.to/johannes_scha/the-ideal-developer-bored-frustrated-full-of-energy-82i</guid>
      <description>&lt;p&gt;If you're working in a fast-moving environment, you probably know what I mean when I tell you: Your tools will always feel like they are outdated, some of the work that you're doing seems mind-numbingly dumb but it's necessary for the company's success and none of your processes works really smoothly.&lt;/p&gt;

&lt;p&gt;I've personally been in those situations and wasn't happy with the state of things. It feels like you're wasting a lot of time and energy.&lt;/p&gt;

&lt;p&gt;But I also believe that this kind of boredom and frustration can be a blessing in disguise. It can make you one of the most productive engineers.&lt;/p&gt;

&lt;h2&gt;
  
  
  Waiting For Management To Resolve The Issues
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;Olivia is working as a Backend Software Developer. She has just been asked to setup a customer account in the database again. This time it's a complex setup, so she will need to update a few different tables. Luckily she's done this before so she knows what steps need to be performed. There is no documentation that she could refer to, which is also why nobody else was assigned this task.&lt;/p&gt;

&lt;p&gt;She will make sure to have 30 mins of uninterrupted time to do the setup. She hopes that management will prioritise automating this work in the future.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Does this sound familiar? Have you been in a situation like Olivia and waited for management to prioritise the automation of some boring and brittle task and somehow it never came up? But you know that the day management will finally prioritise the automation of this kind of stuff, you have hundreds of other little jobs that should be taken care of, too.&lt;/p&gt;

&lt;p&gt;There are tons of reasons why automating these small tasks doesn't get prioritised by management:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"management" isn't a single person – it might not be clear who is responsible for this kind of improvement. Is it the product manager or an engineering manager?&lt;/li&gt;
&lt;li&gt;your manager might not know that the problem exists – this happens even more often if the task is more technical&lt;/li&gt;
&lt;li&gt;your manager might know about the problem, but might not have a good idea on how to solve it, because they don't experience it hands on&lt;/li&gt;
&lt;li&gt;this little account setup task is to small to receive any priority between other high-value items&lt;/li&gt;
&lt;li&gt;there is no clear customer value associated to automating this account setup&lt;/li&gt;
&lt;li&gt;prioritising a generic "automate stuff" initiative is too vague and doesn't feel like it's urgent at the current stage of the business.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And while all of these sound like excuses for management to not have their act together, the person suffering is you. You're the one who ends up doing this boring work that should have been automated a long long time ago.&lt;/p&gt;

&lt;h2&gt;
  
  
  Boredom Leads To Creativity
&lt;/h2&gt;

&lt;p&gt;When you're bored, for example because you're performing a dull task, your mind tends to wander. You have some extra brain cycles and will start to think of dozens of different ideas. While you're doing the tedious account setup, you think about a beautiful admin page you should have where customers can be set up by their account managers. Or this kind of provisioning could be fully automated by connecting the application to your company's sales CRM. Or maybe you just think about what you might want to have for lunch today.&lt;/p&gt;

&lt;p&gt;Doing a boring task allows your mind to meander and come up with lots of creative ideas. Creative thinking is a great gift that you can use – e.g. to come up with a proposal on how the setup could be improved, so that next time it will only take Olivia 5 minutes to take care of a complex account.&lt;/p&gt;

&lt;h2&gt;
  
  
  Frustration Can Be A Motivator
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;3 months later and the situation has barely improved. Product has a whole admin section in mind, which will take care of the account setup, too. But there are new high value features on the roadmap that need to be delivered as soon as possible. Unfortunately Olivia can barely work on those features, because every day she has to help with the setup of 1 or 2 customers and about once a week she has to do some investigative work to figure out why some of the accounts not working correctly – is that related to an error in the setup?&lt;/p&gt;

&lt;p&gt;Olivia is frustrated. She has been doing the manual setup for months now and a solution is still not prioritised.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I've been in this situation and you may have been there too. Everybody around me knew that things could be better and some tasks could be automated, but there was simply no priority allocated to this topic. Did nobody care?&lt;/p&gt;

&lt;p&gt;I've found this frustration to be and incredible source of motivation. Sure, frustration is dreadful at first, because you know that things could be better than they are, but combined with some boredom, frustration can be used to find solutions.&lt;/p&gt;

&lt;p&gt;Being frustrated can help you talk to your boss about the problem and that it needs to be addressed. It may help you to start talking about the creative solutions that you've found through boredom. And it also means that as much as it's within your own control, you will improve the situation. In Olivia's case it may be as little as writing some documentation about the steps she's taking or automating the setup for simple accounts in a little script.&lt;/p&gt;

&lt;h2&gt;
  
  
  Build Tooling To Improve Your Situation
&lt;/h2&gt;

&lt;p&gt;I'm a big believer that developers &lt;a href="https://dev.to/johannes_scha/bespoke-tooling-building-your-own-hammer-2j06"&gt;don't automate as much as we should&lt;/a&gt; and it's hurting our productivity. If Olivia takes 30 mins of her time to automate some of the account setup, she will profit from that tooling very quickly. Being motivated and under time constraint allows developers to start out with the bare minimum to improve their current situation without loosing focus.&lt;/p&gt;

&lt;p&gt;If you manage to make your situation just 5% better every day for a month, at the end of that month your situation will be 2.65x as good as it was in the beginning. That is a gain of 165%. And you can achieve that by just being persistent in improving things little by little.&lt;/p&gt;

&lt;h2&gt;
  
  
  Change Processes
&lt;/h2&gt;

&lt;p&gt;When you're unhappy with a certain process and find it frustrating, chances are that others feel the same way. Take that energy that's building up inside you to change something. Tell people about what other options you see for an improved process &lt;a href="https://dev.to/johannes_scha/3-lessons-i-learned-about-group-decision-making-1e1h"&gt;and make a group decision to improve it.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Changing behaviours and processes is hard work – use your frustration with the status quo for good to convince others that there is a better way. Being frustrated with the status quo also allows you to have a no-ego relation with your proposed solution: Maybe someone else comes up with a better path forward and you can embrace that, because in the end it's the status quo that you're frustrated with and that needs to change.&lt;/p&gt;

&lt;h2&gt;
  
  
  Being Frustrated Is Normal
&lt;/h2&gt;

&lt;p&gt;I've met many people that were able to tell me: &lt;em&gt;As long as I'm complaining, you know that I still care. Once I've stopped complaining, you need to start worrying.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;In a fast changing environment it is normal that processes and tools that you've previously established are constantly outdated. And there are tons of competing priorities at all times. I've become happier since I realised how much my changes and improvements were appreciated by the people around me, because 99% of the time, you're not the only one suffering.&lt;/p&gt;

&lt;p&gt;And sometimes when things seem frustrating everywhere around you, it helps to pause and find the good sides. The things that work and that you're grateful for, because in most environments those exist, too.&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>career</category>
    </item>
    <item>
      <title>Why I Write</title>
      <dc:creator>Johannes Scharlach</dc:creator>
      <pubDate>Wed, 04 Dec 2019 17:12:00 +0000</pubDate>
      <link>https://dev.to/johannes_scha/why-i-write-51cc</link>
      <guid>https://dev.to/johannes_scha/why-i-write-51cc</guid>
      <description>&lt;p&gt;Lately I've decided to write a lot more. Here are some of the reasons that convinced me to pick it up.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. I Want To Practice Writing
&lt;/h2&gt;

&lt;p&gt;Writing is like riding a bicycle. The most important trick to get better is to do it every day.&lt;/p&gt;

&lt;p&gt;If you try to find out what good writers do to improve their writing, it's one thing that they all have in common: They write a lot. Forcing myself to create lots of written content is a way of teaching myself how to write better.&lt;/p&gt;

&lt;p&gt;And in the end writing a post is a lot like building a product. If you're only making it public when you're fully happy with it, you've waited too long. So I tend to put an effort into starting to write and publishing a post within 2 days.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. I Can Share My Posts With My Friends And Colleagues Easily
&lt;/h2&gt;

&lt;p&gt;I'm regularly discussing different aspects of my work that I've formed opinions on. This can be &lt;a href="https://dev.to/johannes_scha/a-hiring-process-that-works-1djf"&gt;my hiring process,&lt;/a&gt; &lt;a href="https://dev.to/johannes_scha/bespoke-tooling-building-your-own-hammer-2j06"&gt;custom tooling,&lt;/a&gt; or &lt;a href="https://dev.to/johannes_scha/4-tips-for-onboarding-a-new-developer-to-the-team-1d1h"&gt;on-boarding a new developer to the team&lt;/a&gt;. I would like to give everyone the most well-structured version of that info possible. Sharing a blog post that I've crafted allows to share that content more easily.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Writing Helps Me Grow
&lt;/h2&gt;

&lt;p&gt;Since writing requires me to reflect on my thoughts and actions, it allows me to learn something new from my experiences and structure my thoughts on a topic. It's an important way to grow and become better at what I do.&lt;/p&gt;

&lt;p&gt;The content I write can capture my thoughts in that moment, while the reflection that's happening during writing is what helps me grow and mature my thoughts.&lt;/p&gt;

&lt;p&gt;What other reasons are there to write?&lt;/p&gt;

</description>
      <category>writing</category>
    </item>
    <item>
      <title>A Hiring Process That Works</title>
      <dc:creator>Johannes Scharlach</dc:creator>
      <pubDate>Tue, 03 Dec 2019 20:31:03 +0000</pubDate>
      <link>https://dev.to/johannes_scha/a-hiring-process-that-works-1djf</link>
      <guid>https://dev.to/johannes_scha/a-hiring-process-that-works-1djf</guid>
      <description>&lt;p&gt;In the last 2 years I've hired and interviewed dozens of candidates. With the support of recruiting professionals, senior software leaders and developers that have previously worked at places such as AWS I was able to design a hiring process that works both for the candidate and the hiring manager.&lt;/p&gt;

&lt;p&gt;How do I know that it works? Because 100% of candidates that I've made an offer to in the last year have accepted it and were very happy. And many of those that I didn't make an offer are still keeping in touch.&lt;/p&gt;

&lt;h2&gt;
  
  
  The 5 Step Interview Process
&lt;/h2&gt;

&lt;p&gt;As a hiring manager, I'm directly involved in 5 steps of the process. But it starts one stage earlier.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 0: Interest Based Recruiting
&lt;/h3&gt;

&lt;p&gt;The very first step is made by my recruiting partners. They reach out to developers and show a genuine interest in helping these people figure out what they want to do next. The recruiters ask about interest and what items are important in a new job. If the candidate's profile matches what I'm looking for and the job description matches their preferences, we proceed with the next step.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 1: Get to Know The Candidate (20-30 mins)
&lt;/h3&gt;

&lt;p&gt;I want to get to know the candidate and also want to offer insights into the company and what I do at the company.&lt;/p&gt;

&lt;p&gt;A candidate will be eager to join a team if the hiring manager establishes a certain level of trust during the interview process. Similarly, the hiring manager needs to trust a candidate in order to feel enthusiastic about the potential hire. As a hiring manager, building that trust is what I'm looking for in this 20 minute interview.&lt;/p&gt;

&lt;p&gt;My interview consists of 4 sections&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;I give a short pitch about the company and my history at the company (~5 min)&lt;/li&gt;
&lt;li&gt;The candidate presents what they have recently been doing, mentioning some examples (10-15 mins)&lt;/li&gt;
&lt;li&gt;Together we explore what is important to the candidate and what the company is able to provide. (2-5 mins)&lt;/li&gt;
&lt;li&gt;The candidate is encouraged to ask questions (3-7 mins)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I've found a total of 20 minutes to be enough to cover all of these topics if you're meticulous. Sometimes it feels like time flies or there are many questions and it's easy to spend more time, so I like to have the option to extend to 30 mins if necessary.&lt;/p&gt;

&lt;p&gt;I've also found that asking &lt;em&gt;Do you have any questions?&lt;/em&gt; only rarely produces any actual questions, while asking &lt;em&gt;What questions do you have, for example questions about the company, the team, their working process or the role?&lt;/em&gt; and nearly every candidate has an important question on their mind. As managers in our every day job, it's our duty to show our active listening skills and ask specific questions that will provide us with good information. It makes sense to apply these techniques also to hiring. &lt;a href="https://lifehacker.com/ask-this-instead-of-any-questions-1840202366"&gt;There is lots of info out there on how to ask better questions.&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 2: Assess Technical Skills (60 mins)
&lt;/h3&gt;

&lt;p&gt;As a manager, I've stopped leading the technical interview. Instead I will ask a senior developer to conduct it, while I sit in and take notes. For 1h we will try to dive deep on all topics that will affect the day-to-day job that we're interviewing for. We care in particular about the topics &amp;amp; skills which the candidate has mentioned on their CV. It is well understood that everyone has different experiences and strengths, so we try to focus on the candidate's strengths as well as covering the basics such as working with source control &amp;amp; in an agile process.&lt;/p&gt;

&lt;p&gt;In a successful interview, I have learned something new from the candidate. If they have used a specific library or concept that they feel comfortable explaining, that is almost guaranteed to win this round of the interview and it can easily outshine deficits in other areas.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 3: Witness The Applied Skill (2-3 h)
&lt;/h3&gt;

&lt;p&gt;Explaining a concept and being comfortable using it are two sides of the same coin – yet both should be checked. We like to conduct pair programming interviews at this stage, because it resembles how we work in a realistic environment. A senior developer (usually the same person who did the technical interview) will spend about 2h with the candidate to build something from scratch or bug-fix an existing open source project.&lt;/p&gt;

&lt;p&gt;At this stage you see how a candidate handles feedback, how much you enjoy working with them and what kind of work they prioritise, given the 2h time limit.&lt;/p&gt;

&lt;p&gt;The session ends with the candidate presenting what they were able to accomplish and what they would have done next if they had more time. During the pair programming session, the senior developer acts as a collaborator, not an interviewer. We've done the technical interview already before, so what we primarily want to know is what it feels like to work with this person every day in a realistic environment.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 4: Establish Cultural Aptness
&lt;/h3&gt;

&lt;p&gt;Next, the candidate will meet the entire team (sometimes part or all of this happens before step 3). They get to know the people that they will work with moving forward. This is &lt;a href="https://dev.to/johannes_scha/4-tips-for-onboarding-a-new-developer-to-the-team-1d1h"&gt;the first step to on-boarding them to the team.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I tend to have this structured as 20 mins with the designer, 20 mins with the product manager, 30 mins with the remaining developers (that haven't been involved so far) and 1h of lunch with the whole team.&lt;/p&gt;

&lt;p&gt;Why not &lt;em&gt;Cultural Fit&lt;/em&gt;? Because in an industry that's so dominated by white males, it's easy to fall for biases that end up with hiring more white males. To build a diverse team, you have to hire people that don't look and act the same as your existing team and focussing too much on &lt;em&gt;fit&lt;/em&gt; you may end up favouring the wrong items. Instead &lt;em&gt;cultural aptness&lt;/em&gt; makes sure that hiring this candidate leads to the right cultural mix. &lt;/p&gt;

&lt;p&gt;What I'm looking for is to connect people in a way that allows them to judge: is this someone that I would like to spend 8h of my day with, 5 days of the week? The candidate as well as the team profits immensely from such a session. The candidate can fully picture the team and environment in which they will be working while the team gets excited about a new person joining, too.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 5: Making The Offer
&lt;/h3&gt;

&lt;p&gt;Finally an offer should be extended to the candidate. If you're truly excited about someone (as you should be), then as the hiring manager you should be the one to reach out with the offer. This can be a short 3 sentence email, stating the salary, vacation policy and any core benefits. But an email from the hiring manager shows how much you care, because it's not your job to message the candidate.&lt;/p&gt;

&lt;p&gt;If you're rejecting a candidate that has spent significant time interviewing with you, I also find it important to give details what went wrong. You don't need to mention every detail, but honesty is appreciated and candidates will be thankful. You may want to work with HR on this, since there can be legal implications when you mention why someone was rejected.&lt;/p&gt;

&lt;h2&gt;
  
  
  How To Ask Good Questions &amp;amp; What To Look For
&lt;/h2&gt;

&lt;p&gt;It's become apparent that asking good questions is core to give meaning to the interview.&lt;/p&gt;

&lt;h3&gt;
  
  
  Allow The Candidate To Present Their Best Self
&lt;/h3&gt;

&lt;p&gt;A candidate that has already done exactly what you're asking them to do will be bored in this job. So allow the candidate to present what they did, rather than what you want them to do. It will be easy to see similarities and differences, so that you can judge if they will be able to learn quickly enough. Only if you allow them to present their best self can you truly see the potential of the candidate.&lt;/p&gt;

&lt;p&gt;This also means that you need to put effort into creating an environment that is realistic. Whiteboard interviews are very far removed from the every-day situation that a candidate will be in. You will test a candidate's nerves, but not their actual productivity. Through things like pair programming you see how comfortable they are in their own editor. Of course using Google/DuckDuckGo is allowed! More senior candidates know what to search for more easily, that's what makes them senior.&lt;/p&gt;

&lt;h3&gt;
  
  
  Always Ask For Examples
&lt;/h3&gt;

&lt;p&gt;Candidates tend to sense what the interviewer is looking for and give the "correct" answers. This makes it difficult to judge if someone has learned their lessons through experience or simply read a few good articles on the internet. Being able to apply the theory and put it into action is a core competency to look for.&lt;/p&gt;

&lt;p&gt;By asking for examples you will find out how a person really reacts in certain situations. The conversation will also be a lot more engaging if I ask you about the last time you had to optimise an SQL query, rather than when I ask questions about how PostgreSQL indices work.&lt;/p&gt;

&lt;h3&gt;
  
  
  Gently Test The Depth Of Knowledge
&lt;/h3&gt;

&lt;p&gt;This applies in particular to senior candidates with 10+ years of experience. They will have seen a lot of different technologies &amp;amp; problems and will be able to scratch the surface on almost any technical topic. What helps is to ask for follow-up questions to explain more details. E.g. when we're talking about PostgreSQL optimisations, why did adding an index work? What kinds of indices do exist for SQL databases and how are they different? What is a btree anyways? And what's a scenario where this kind of index would not work?&lt;/p&gt;

&lt;p&gt;With such a line of questioning you'll quickly find out how deep a candidates knowledge is. When they have extensive knowledge of the topic, they will be able to explain with a whole lot of context. It is often easier to ask these questions with superficial knowledge than to answer them.&lt;/p&gt;

&lt;p&gt;But this is also where an interview can quickly become very uncomfortable. Remember that you are trying to allow the candidate to present their best self, so if you see that you've hit a dead end, move on to the next topic.&lt;/p&gt;

&lt;h2&gt;
  
  
  Good Talent Moves Quickly (And So Should You)
&lt;/h2&gt;

&lt;p&gt;It is tempting to think that as a hiring manager you don't want to seem needy and shouldn't reply too quickly. You may also want to be able to compare a candidate to others and those people still need to move to the next stage.&lt;/p&gt;

&lt;p&gt;Don't do that. Great candidates have long found another job by the time you can compare them to 2 or 3 others. Allow them to move to the next hiring stage as quickly as possible. If an interview went well, spend the next 5 minutes providing feedback (I usually communicate that via the recruiter) &amp;amp; figuring out when to schedule the next step. There is no feeling that's greater than being needed by the company you're interviewing with.&lt;/p&gt;

&lt;p&gt;Sometimes it's not possible to move quickly – you may have doubts about an unusual candidate's profile and you may need to sleep over your decision or there may be budgeting questions that need to be clarified first. In those cases you can usually provide a timeline for when you'll be following up with a candidate to manage expectations appropriately.&lt;/p&gt;

&lt;p&gt;Once you have found the right candidate and they did accept an offer, on-boarding begins. &lt;a href="https://dev.to/johannes_scha/4-tips-for-onboarding-a-new-developer-to-the-team-1d1h"&gt;I've written about that before.&lt;/a&gt;&lt;/p&gt;

</description>
      <category>hiring</category>
      <category>career</category>
      <category>management</category>
    </item>
    <item>
      <title>3 Lessons I Learned About Group Decision Making</title>
      <dc:creator>Johannes Scharlach</dc:creator>
      <pubDate>Thu, 28 Nov 2019 08:44:46 +0000</pubDate>
      <link>https://dev.to/johannes_scha/3-lessons-i-learned-about-group-decision-making-1e1h</link>
      <guid>https://dev.to/johannes_scha/3-lessons-i-learned-about-group-decision-making-1e1h</guid>
      <description>&lt;p&gt;Over the past years I've helped make many changes and improvements at my job. Those reached from project prioritisation to architectural solutions, changing a style guide, introducing a career ladder and many more. In all of these cases, forming consensus in a group was required to make the decision. I call it &lt;em&gt;Group Decision Making&lt;/em&gt;. Here's what I learned.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. The Change Needs To Be Clear
&lt;/h2&gt;

&lt;p&gt;Decisions are always tied to a change, which is why I'll refer to changes a lot in this post.&lt;/p&gt;

&lt;p&gt;When you're pushing for a change, it helps to acknowledge that you have a unique perspective that not everyone will share out of the box. I found a couple of questions pretty useful to find a shared perspective in a group.&lt;/p&gt;

&lt;h3&gt;
  
  
  What Happens If You Do Nothing?
&lt;/h3&gt;

&lt;p&gt;For most decisions the default option is to do nothing and leave things as they are. Try answering the following questions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What's the best thing about the current solution?&lt;/li&gt;
&lt;li&gt;When we stick to using it, what is the worst case scenario we could be in a year from now?&lt;/li&gt;
&lt;li&gt;Is there anything you can categorically not do with the status quo? (this applies to only few cases)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It helps to answer these questions for yourself as doing so will help you understood the status quo well. You might find out that you need to put more effort into researching the way we landed at the current situation. This is necessary to make a good decision on how to move forward.&lt;/p&gt;

&lt;p&gt;If you can, publish your perspective to the wider group. This allows everyone else to weigh in, so that you can hear concerns and problems early.&lt;/p&gt;

&lt;h3&gt;
  
  
  What Problem Should Be Solved?
&lt;/h3&gt;

&lt;p&gt;It's not always easy to put into concise words what you're solving. Addressing what problem shall be solved leaves for the largest amount of misunderstanding. I tend to think about it as something directional, describing with examples what will be possible. I've found it helpful to ponder&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Who will benefit from the change?&lt;/li&gt;
&lt;li&gt;What is the time horizon? (How soon will someone profit through the change &amp;amp; how frequently)&lt;/li&gt;
&lt;li&gt;Does this change enable radical new opportunities? (e.g. better deployment tooling makes it easier to manage more &amp;amp; smaller micro-services and is therefore one of those enablers)&lt;/li&gt;
&lt;li&gt;What is out of scope to be solved with this change?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Often when you get people excited about a change, they may bring up a couple of other problems that they would like to see changed, too. This can sometimes lead to scope creep and your change proposal may lead nowhere when it's trying to solve 1000 different problems. Therefore it's important to draw the line between what items should be improved and what items should not.&lt;/p&gt;

&lt;h3&gt;
  
  
  What Solution Are You Proposing?
&lt;/h3&gt;

&lt;p&gt;Name your solution. After you've described the status quo and laid out the problem, you have everyone's attention to present your solution. It's particularly great if your proposed solution has a name that people will remember.&lt;/p&gt;

&lt;h3&gt;
  
  
  How Would You Implement That Solution?
&lt;/h3&gt;

&lt;p&gt;You don't need to have the answers for this on day 1, but answers for how the solution will be implemented are critical to gain everyone's agreement. Who is willing to take the cost of making the change? How will it be rolled out? In a small team this may all be trivial to answer, but in a team of hundreds of developers responsibilities need to be a lot more clear.&lt;/p&gt;

&lt;h3&gt;
  
  
  What Alternatives Exist?
&lt;/h3&gt;

&lt;p&gt;You know about alternative solutions if you've thought about a problem hard enough. The work you put into this depends on how big the change is. Changing an eslint rule might require a one sentence answer while changing git branching workflows may require 5 minutes of explanations why some other options are not worth considering in as much detail.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Changes Require Determination And Effort
&lt;/h2&gt;

&lt;p&gt;This seems obvious now, but I had to learn that the hard way. Changes don't just happen even when everyone wants them. Changing habits &amp;amp; tools requires hard work from someone.&lt;/p&gt;

&lt;h3&gt;
  
  
  A Champion For The Change Needs To Drive The Effort
&lt;/h3&gt;

&lt;p&gt;Chances are that if you're reading this, more often than not you want to champion a change. The champion will facilitate the decision, ensure that the right people are in the room to drive it forward and make sure that the change is documented appropriately. They can inform you about the consequences of doing nothing, the scope of the problem being solved, the proposed solution, the implementation of said solution and the available alternatives. Often the champion also drives the option or options that are being considered as solutions, but it can also work that they act purely as a facilitator.&lt;/p&gt;

&lt;h3&gt;
  
  
  Split Between Discussion And Decision Meetings
&lt;/h3&gt;

&lt;p&gt;There needs to be a time to hear everyone's concerns and discuss them and there needs to be a time to make decisions. I've found it very productive to split that into two sessions: One where floor is open for discussion and one where the focus is on making the decision.&lt;/p&gt;

&lt;p&gt;Imagine you haven't clarified if people are in the room to make a decision or to have a discussion. You'll easily end up in a situation where one person is trying to push for the decision and another is blocking that decision because not enough has been discussed yet. If you set a clear meeting agenda that describes wether the meeting is about having a discussion or making a decision, the whole group can come together much more easily.&lt;/p&gt;

&lt;h3&gt;
  
  
  Drive Quick Decisions With TOMASP
&lt;/h3&gt;

&lt;p&gt;It can help to have a certain urgency in making decisions to avoid change fatigue. Change fatigue happens when you talk about a change over and over again with nothing to show for it. At some point people stop believing that it is ever going to happen.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://engineering.shopify.com/blogs/engineering/make-great-decisions-quickly-with-tomasp"&gt;TOMASP Decision Framework&lt;/a&gt; can help tackle such an issue by forcing you to make decisions more quickly. This leads to less risky decisions and better agility.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Trusting Teams Make Better Decisions
&lt;/h2&gt;

&lt;p&gt;Simon Sinek has a great story about trusting teams, which explains much of why trust makes such a big difference&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/92GlIZ14dSw"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;After all, only in a trusting team can you receive the feedback that's necessary to address everyone's concerns. Only then people will make suggestions without fear of being called stupid. And only then can you truly know how people really feel about a change.&lt;/p&gt;

</description>
      <category>management</category>
      <category>leadership</category>
      <category>communication</category>
    </item>
    <item>
      <title>Choosing Good Defaults: Boost Your Productivity</title>
      <dc:creator>Johannes Scharlach</dc:creator>
      <pubDate>Tue, 19 Nov 2019 18:59:09 +0000</pubDate>
      <link>https://dev.to/johannes_scha/choosing-good-defaults-boost-your-productivity-46pl</link>
      <guid>https://dev.to/johannes_scha/choosing-good-defaults-boost-your-productivity-46pl</guid>
      <description>&lt;p&gt;If you've read one of my previous blog posts, you'll know that &lt;a href="https://dev.to/johannes_scha/awesome-tools-that-saved-us-254h"&gt;I love tools&lt;/a&gt;. I even love &lt;a href="https://dev.to/johannes_scha/bespoke-tooling-building-your-own-hammer-2j06"&gt;creating my own tools&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Over the time I've found out that the most impactful decision you can make is all about defaults. This is my decision framework.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Think About First Time Users
&lt;/h2&gt;

&lt;p&gt;If you've done anything with webpack a couple of years ago, you know what I mean. Getting started was one of the hardest parts, because in order to get anything done, you needed to create and understand a complex configuration.&lt;/p&gt;

&lt;p&gt;Good defaults make it easy for first time users to get started. If you choose your defaults well, the tool "just works".&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Make Functionality Discoverable Through Defaults
&lt;/h2&gt;

&lt;p&gt;If you're hiding useful settings in configurations and CLI flags, most of your users will never discover that the functionality even exists. E.g. if your tool can self-upgrade, then doing that should probably be the default. 90% of your users will never read through the documentation, so the default is how they will use your tool.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Make It Clear How To Turn It Off
&lt;/h2&gt;

&lt;p&gt;Boolean flags for CLI tools are particularly difficult to turn off. Is it &lt;code&gt;--no-cache&lt;/code&gt; or &lt;code&gt;--cache=off&lt;/code&gt; or maybe something entirely different like &lt;code&gt;--prefer-online&lt;/code&gt;? My experience is that when possible you should avoid the negative CLI flag by choosing the opposite expression, &lt;code&gt;--prefer-online&lt;/code&gt; in the above case. If there is no good such expression, make sure you document how to turn the flag off.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Provide An Escape Hatch For Power Users
&lt;/h2&gt;

&lt;p&gt;Your power users will quickly get tired of specifying the same flags over and over again. They might need a configuration file to save their settings. Or just have a pre-configured version of the command in an npm script so that people can run &lt;code&gt;npm run start&lt;/code&gt; for your regular users and &lt;code&gt;npm run start:minimal&lt;/code&gt; as an alternative.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. If the Tool Is Internal, Start With Default On
&lt;/h2&gt;

&lt;p&gt;If you're unsure about a new configuration, then start with turning it on by default. People will quickly tell you if that was the wrong approach and you can adjust it then. Embracing the concept of &lt;em&gt;fail fast&lt;/em&gt; that will give you the quickest feedback if the setting is useful, how it can be improved and if it's not useful at all, you can simply swap the default and carve a new release.&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>tooling</category>
    </item>
    <item>
      <title>Bespoke Tooling: Building your own hammer</title>
      <dc:creator>Johannes Scharlach</dc:creator>
      <pubDate>Mon, 18 Nov 2019 20:56:36 +0000</pubDate>
      <link>https://dev.to/johannes_scha/bespoke-tooling-building-your-own-hammer-2j06</link>
      <guid>https://dev.to/johannes_scha/bespoke-tooling-building-your-own-hammer-2j06</guid>
      <description>&lt;p&gt;There are &lt;a href="https://dev.to/johannes_scha/awesome-tools-that-saved-us-254h"&gt;lots of awesome tools out there&lt;/a&gt; that will help you automate mundane tasks. But there are plenty of reasons why you would want to use custom tooling, too. &lt;/p&gt;

&lt;h2&gt;
  
  
  Why Custom Toolkits Are Necessary
&lt;/h2&gt;

&lt;p&gt;The reasons I've seen for custom tooling are plenty:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It may be just to wrap some other tools and &lt;a href="https://kentcdodds.com/blog/tools-without-config"&gt;create your own zero-config toolkit from that.&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;I've been in situations where a specific business use case needed to be validated with high certainty, but the test data was unreliable, so we built our own mocking server.&lt;/li&gt;
&lt;li&gt;I've been in the situation where the same 3 steps for testing my code changes were necessary over and over again – automating those 3 steps allowed for a development experience with quicker feedback loops and ultimately made me faster.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Automation Pays Off More Quickly Than You Think
&lt;/h2&gt;

&lt;p&gt;There is an &lt;a href="https://xkcd.com/1205/"&gt;infamous XKCD post&lt;/a&gt; that shows how quickly automating a mundane task pays off&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--JVqbSCg3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://imgs.xkcd.com/comics/is_it_worth_the_time_2x.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--JVqbSCg3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://imgs.xkcd.com/comics/is_it_worth_the_time_2x.png" alt="How long can you spend automating a mundane task before you're spending more time than you save?"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The tricky thing: You barely notice the things that take between 1 and 15 seconds, even if you do them 50 or 100 times per day.&lt;/p&gt;

&lt;p&gt;For me personally the big aha-moment was when I started using &lt;a href="https://prettier.io/"&gt;prettier&lt;/a&gt;. It showed me how frequently I spent energy on formatting code. Until then I never considered it a burden to format my code – I love well formatted code so I found that an activity worth spending my time on and always thought I would be doing that just naturally while writing code. Once I was set up to use prettier, I started writing much code in a single line and had prettier format it all for me on save. Suddenly all my mental energy was focussed on the code itself and not its formatting. &lt;/p&gt;

&lt;h3&gt;
  
  
  Copy &amp;amp; Paste Mixed With Search &amp;amp; Replace is not Tooling
&lt;/h3&gt;

&lt;p&gt;For a while when we created a new micro-service, we would go about it the following way:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;copy &amp;amp; paste an existing deployment file&lt;/li&gt;
&lt;li&gt;search &amp;amp; replace the name of the micro-service&lt;/li&gt;
&lt;li&gt;adjust any additional configuration that's service specific (e.g. database connections)&lt;/li&gt;
&lt;li&gt;copy &amp;amp; paste this file for the other environments&lt;/li&gt;
&lt;li&gt;make environment specific adjustments&lt;/li&gt;
&lt;li&gt;wait for a code-review for someone to double-check your deployment file&lt;/li&gt;
&lt;li&gt;apply the deployment file in the test environment&lt;/li&gt;
&lt;li&gt;test if the micro-service works as expected&lt;/li&gt;
&lt;li&gt;repeat 7 and 8 for the other environments&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;For us a big milestone was the auto-generation of these deployment files. Suddenly it was impossible to make copy &amp;amp; paste mistakes. Creating "another one of those", in our case a worker deployment, was possible with zero config. A potential source of error was completely eliminated! The important thing about zero config isn't that you're avoiding a config file. It's that you're avoiding knowing about that file and making mistakes with it.&lt;/p&gt;

&lt;p&gt;Search &amp;amp; Replace is easy when you need to do something once. But every time you need to repeat this process, you need to make sure you didn't miss anything and need a complete review.&lt;/p&gt;

&lt;p&gt;Automating this process with real tooling suddenly made it easy to create a new service. Something nobody would ever need to think twice about.&lt;/p&gt;

&lt;h3&gt;
  
  
  Good Automation Tooling Compounds
&lt;/h3&gt;

&lt;p&gt;Once the file generation was automated, it became easy to build on top of that for other things, too. Suddenly it became simple to automatically deploy the service. We gained the confidence to automatically deploy it to all environments very quickly.&lt;/p&gt;

&lt;p&gt;Later on we would know how to automatically build different deployment files, depending on exactly what kind of service we were talking about. We were able to build on top of that to automatically update configurations for all services. And we were able to build on top of that to improve how we were handling secrets – something we had previously spent many hours debugging.&lt;/p&gt;

&lt;p&gt;When you slowly build your toolkit, you can make sure that every helper you write does only one thing and it does it well. That allows you to compose those tools. And more importantly, it makes things easy to do that were previously hard, like creating a new micro-service.&lt;/p&gt;

&lt;h3&gt;
  
  
  Making the Right Thing The Easy Thing
&lt;/h3&gt;

&lt;p&gt;I love taking shortcuts. If I can leave out some detail, I will. I know there are many like me. But I also know that the shortcut often has a price: You might encounter technical debt. Most of us have seen that situation when tests were skipped, but there are countless other examples when the developers new better and still took the shortcut.&lt;/p&gt;

&lt;p&gt;Tooling can make the right thing the easy thing. The way I made sure I would write tests? I made it easier to write a test than to test my service manually! Any call would have 2 phases: input to data system and data system to output. Once I realised that, I made certain I would easily generate a JSON file for input (same file for manual and automation test!), mock the data source (this part was actual work) and use snapshot testing to check the output. 10 seconds to write a simple test case. 10 more for every corner case.&lt;/p&gt;

&lt;p&gt;When you make the right thing the easy thing, people will go down that route.&lt;/p&gt;

&lt;h3&gt;
  
  
  The 3 Rules Of Bespoke Toolkits
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Pick a routine task&lt;/li&gt;
&lt;li&gt;Automate one and only one thing about it&lt;/li&gt;
&lt;li&gt;Do it in a way that encourages doing The Right Thing&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Then Repeat.&lt;/p&gt;

&lt;p&gt;Great packages like &lt;a href="http://yargs.js.org/"&gt;&lt;code&gt;yargs&lt;/code&gt;&lt;/a&gt;, &lt;a href="https://github.com/sindresorhus/execa"&gt;&lt;code&gt;execa&lt;/code&gt;&lt;/a&gt;, &lt;a href="https://github.com/jprichardson/node-fs-extra"&gt;&lt;code&gt;fs-extra&lt;/code&gt;&lt;/a&gt; and many others will help you build that toolkit.&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>javascript</category>
      <category>tooling</category>
      <category>devops</category>
    </item>
    <item>
      <title>Awesome Tools That Saved Us</title>
      <dc:creator>Johannes Scharlach</dc:creator>
      <pubDate>Fri, 15 Nov 2019 20:32:49 +0000</pubDate>
      <link>https://dev.to/johannes_scha/awesome-tools-that-saved-us-254h</link>
      <guid>https://dev.to/johannes_scha/awesome-tools-that-saved-us-254h</guid>
      <description>&lt;p&gt;In 2017 we were 5 developers maintaining 160 repositories. It felt like tech debt kept piling up and like we would never be able to do productive work outside of maintaining existing projects.&lt;/p&gt;

&lt;p&gt;Luckily there are a long list of great tools out there that saved us from drowning in maintenance work. We chose to automate every step of the way and these are the great tools that made it possible.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://about.gitlab.com/"&gt;GitLab&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;GitLab is able to offer pleasant source code hosting, deeply integrated with a flexible and powerful CI/CD solution. And the best thing? You can use it for free – at least the community edition. &lt;a href="https://github.com/terraform-google-modules/terraform-google-gke-gitlab"&gt;It can be as simple as running &lt;code&gt;terraform apply&lt;/code&gt; to get your own gitlab instance running.&lt;/a&gt; (This does link to a production ready setup of GitLab, using a cluster of servers, so be aware of the cost of that.)&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://jestjs.io/"&gt;Jest&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Delightful testing that just works out of the box. With snapshots that allow for quick yet effective tests for simple cases.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://prettier.io/"&gt;Prettier&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Formatting your code doesn't feel like a lot of work but it's something you have to do all day &amp;amp; every day. When you can delegate that to a tool like prettier, you can focus your attention on business logic and code structure, something the machines can not do for you (yet).&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://github.com/conventional-changelog/standard-version"&gt;&lt;code&gt;standard-version&lt;/code&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Releasing a new version should be simple. &lt;code&gt;standard-version&lt;/code&gt; makes sure that every time you release a new version of your package, the change log is generated automatically and added to the repository.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://commitlint.js.org/"&gt;commitlint&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;The above mentioned &lt;code&gt;standard-version&lt;/code&gt; works well when your commits formatted so that the full changelog can be autogenerated and structured accordingly. Commitlint will make sure that you don't accidentally forget to adhere to the correct commit format.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://github.com/renovatebot/renovate"&gt;Renovate&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;It's not much fun to keep your dependencies up to date. It doesn't feel like you're doing much productive work and requires you to check if a new version is available in the first place. Renovate does much of that for you: The tool is able to keep many dependencies up to date, it's highly configurable and is able to create pull requests against your repositories as dependencies are updated. You can see my favourite configuration &lt;a href="https://gist.github.com/johannes-scharlach/90f44538b3049e95d33592e3b8411f18"&gt;in this gist&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://lerna.js.org/"&gt;Lerna&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Lerna allows you to manage multiple related packages in a single repository. Our custom data processing framework &lt;code&gt;fireant&lt;/code&gt; was made up from multiple components – the runtime &lt;code&gt;fireant-core&lt;/code&gt;, the adapter to AWS SQS and to Google PubSub (you can &lt;a href="https://medium.com/@johannes_scha/switching-from-sqs-to-google-pub-sub-6b13d46f644c"&gt;read about how we tried to switch once&lt;/a&gt;, the deployment generator, tooling to quickly run &amp;amp; test &lt;code&gt;fireant&lt;/code&gt; locally during development and &lt;code&gt;create-fireant-worker&lt;/code&gt;, a tool that made it very easy to create a new worker &amp;amp; deployment and a couple more. Initially all of those items had their own repositories with tight dependencies between them. Lerna allowed us to manage these related packages in one repository while separating their different concerns clearly in terms of source code structure as well as production bundles.&lt;/p&gt;

&lt;h3&gt;
  
  
  Slacker
&lt;/h3&gt;

&lt;p&gt;Unfortunately this is not a public project, so I can't link to it. We built a little ChatOps script that sends a message to one of our Slack channels, every time a new version of any of our packages was published. Since publishing always occurred in the GitLab CI (see above) and always contained a changelog, we were able to reliably post the latest changelog and keep the whole team informed.&lt;/p&gt;

&lt;h3&gt;
  
  
  Our Custom Toolkit
&lt;/h3&gt;

&lt;p&gt;I can't imagine that everyone knows all of these tools in and out. Luckily most of them just work out of the box once you have your repository set up. And in order to make it easy to set up a repository with them, I introduced our custom &lt;code&gt;dev-scripts&lt;/code&gt;, inspired by &lt;a href="https://kentcdodds.com/blog/tools-without-config"&gt;Kent C. Dodds' &lt;code&gt;kcd-scripts&lt;/code&gt;&lt;/a&gt;. &lt;a href="https://kentcdodds.com/blog/concerning-toolkits"&gt;For now, I'll let Kent explain why custom toolkits are great.&lt;/a&gt;&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>automation</category>
      <category>node</category>
      <category>javascript</category>
    </item>
    <item>
      <title>4 Tips for Onboarding a New Developer to the Team</title>
      <dc:creator>Johannes Scharlach</dc:creator>
      <pubDate>Wed, 13 Nov 2019 21:43:10 +0000</pubDate>
      <link>https://dev.to/johannes_scha/4-tips-for-onboarding-a-new-developer-to-the-team-1d1h</link>
      <guid>https://dev.to/johannes_scha/4-tips-for-onboarding-a-new-developer-to-the-team-1d1h</guid>
      <description>&lt;p&gt;I've hired nearly a dozen members to my teams in the last year. The process of on-boarding was sometimes more and sometimes less successful. Here are some of the things that worked for us:&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Assign a Buddy
&lt;/h2&gt;

&lt;p&gt;Everything is easier when you have an experienced guide. In a new job, a person who's been working at this company for at least a few months can be great at this. While I've never formally assigned a buddy, it clearly pays off when a new starter has someone that they work with closely from day one. The manager is not a good buddy, they are usually too busy.&lt;/p&gt;

&lt;p&gt;The good news is there is lots of flexibility in who can be a buddy: I've seen good buddies that worked in different teams and had different responsibilities. It is also ok to assign a more Junior person as the buddy to a new Senior hire. Buddies can take you to lunch, introduce you to the right people or even just help you find the bathroom.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Make On-Boarding the New Hire a Job for the Whole Team
&lt;/h2&gt;

&lt;p&gt;I realise this sounds like I'm contradicting my previous statement, but I'm not. In the first week, a developer will need to figure out what the people around them are doing. Make sure that the whole team can introduce themselves as experts. Alice can tell your new hire about &lt;em&gt;Section A&lt;/em&gt; off the app, Bob about &lt;em&gt;Section B&lt;/em&gt;, Charles will tell her about &lt;em&gt;Section C&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;This helps your existing team reflect on what they are working on and the new hire knows whom to come to with questions.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Spend a Lot of Time On 1 on 1s
&lt;/h2&gt;

&lt;p&gt;In the first 4 weeks, a new hire will have tons of questions. If you're anything like me, you're busy for most of the day and that doesn't seem particularly approachable. In the first 4 weeks it is essential that you have reserved at least 30 mins per week for 1:1 time with your new hire &lt;em&gt;where they set the agenda.&lt;/em&gt; And you need to make sure you spend a lot more time with someone more Junior, 30 mins works for an experienced Senior.&lt;/p&gt;

&lt;p&gt;Afterwards you can reduce it to 30 mins every 2 or 3 weeks, but in the beginning is when you will learn most about your new hire: How they like to receive feedback, if they prefer to come to work early or work late, etc.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Have Them Deploy to Production in the First Week
&lt;/h2&gt;

&lt;p&gt;If your deployments are small and low risk, make sure that your new hire's first contribution lands in production in the first week. When you're taking a new job, you're very worried about messing up your first task, so try to make it as easy as possible to succeed. This will instil confidence in your new team member and teach them about many possibly mysterious processes. If your process doesn't currently allow for developers to deploy their own code, that's fine. Just make sure that the first contribution lands in production quickly &lt;em&gt;and successfully&lt;/em&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Bonus tip: On-Boarding Starts With Hiring
&lt;/h2&gt;

&lt;p&gt;In recent months I've asked my whole team to interview candidates. These complement some deeply technical interviews with only 1 or 2 interviewers. Your team should know what's important to their new colleague and if it's someone that they can imagine working with. When your team is involved in the hiring process, it will be easier to build trust between the new hire and the existing team.&lt;/p&gt;

&lt;p&gt;Next I'll write about hiring.&lt;/p&gt;

</description>
      <category>hiring</category>
      <category>onboarding</category>
    </item>
  </channel>
</rss>
