<?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>Forem: Kyle Welch</title>
    <description>The latest articles on Forem by Kyle Welch (@kwelch).</description>
    <link>https://forem.com/kwelch</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%2F845%2F1471c758-9750-4f50-884f-167245fd07fa.jpg</url>
      <title>Forem: Kyle Welch</title>
      <link>https://forem.com/kwelch</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/kwelch"/>
    <language>en</language>
    <item>
      <title>Automating the pain away</title>
      <dc:creator>Kyle Welch</dc:creator>
      <pubDate>Wed, 18 Nov 2020 15:22:22 +0000</pubDate>
      <link>https://forem.com/kwelch/automating-the-pain-away-bnb</link>
      <guid>https://forem.com/kwelch/automating-the-pain-away-bnb</guid>
      <description>&lt;p&gt;Automating the pain away has been a motto of mine through my career. Starting as massive find and replaces to large code migrations. I have always found myself looking for ways to extract as much efficiency from my tasks and those around me. &lt;/p&gt;

&lt;h2&gt;
  
  
  What pain sort of pain are we automating?
&lt;/h2&gt;

&lt;p&gt;In practice we are not actually focusing on pain, but rather bad habits. Another great way of thinking about this is making best practices the easiest option on the table. &lt;/p&gt;

&lt;h2&gt;
  
  
  How are we automating?
&lt;/h2&gt;

&lt;p&gt;For the past few years, this passion as led me to discover and engulf myself with learning and using ASTs (Abstract Syntax Trees). These trees are a representation of code and are the foundation of compilers and lints. In that you can imagine my excitement. &lt;/p&gt;

&lt;p&gt;ASTs have been foundation for a lot of my recent work on eslint plugins, codemods, and even gather metrics about our codebase. &lt;/p&gt;

&lt;p&gt;However, that isn't the only way we can automate. CI/CD (Continuous Integration and Continuous Deliver) pipelines are other ways we can automate the tedious tasks through the development process. Being able to lint for code styling rules is much faster than needing to find it in a review. Running the tests or build process ensures that new code added doesn't break the existing. Along with test code coverage to ensure our confidence in the code we ship has not changed. For me, these are all ways we can fall into good habit and automate the painful ones away. &lt;/p&gt;

&lt;h2&gt;
  
  
  Where do I start?
&lt;/h2&gt;

&lt;p&gt;As with anything the best place to start is simple. I prefer to start with a manual task and ensuring I know all of the necessary. I find doing the task and meticulously writing out the steps to help me find the pattern in what I am doing and finding ways to automate it. &lt;/p&gt;

&lt;p&gt;For example, last year around this time I was working on moving our React applications from one repository to another. Within that process I needed to complete many smaller tasks beyond just a simple copy and paste. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Copy folder (with git history)&lt;/li&gt;
&lt;li&gt;Move all files into a &lt;code&gt;src&lt;/code&gt; directly (except package.json)&lt;/li&gt;
&lt;li&gt;Rename all test files to match new standards&lt;/li&gt;
&lt;li&gt;Update &lt;code&gt;package.json&lt;/code&gt; to include all new fields&lt;/li&gt;
&lt;li&gt;Rename from &lt;code&gt;App.js&lt;/code&gt; to &lt;code&gt;app.js&lt;/code&gt; including references&lt;/li&gt;
&lt;li&gt;Create a new standardized entry point&lt;/li&gt;
&lt;li&gt;Run &lt;code&gt;prettier&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Update &lt;code&gt;CODEOWNERS&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Run repo validation checks&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;My team did this work for over a total of 100 packages. &lt;/p&gt;

&lt;p&gt;These steps were boring and tedious, it was easy to forget a step making it take even longer. Once I had a good understanding of these steps I began finding ways to automate them. &lt;/p&gt;

&lt;p&gt;I started with a node script written in TypeScript and used &lt;code&gt;inquirer&lt;/code&gt; to ask basic questions at first, like what app are you moving and where should it go in the new system. Then I automated the first few steps. Then I ran the process against a few to ensure it worked and added more steps. Then making automated commits with the steps that had been done and outputting errors and next steps.&lt;/p&gt;

&lt;p&gt;Eventually I got the process of migrating a package to the new system down to only minutes. &lt;/p&gt;

&lt;h2&gt;
  
  
  Is automating always the option?
&lt;/h2&gt;

&lt;p&gt;Absolutely not! As much as I wish this was true there are times where the automation is not worth it, or if there is too much variability to the step that it cannot be done. &lt;/p&gt;

&lt;p&gt;As with all things in life, there is an XKCD for this.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://xkcd.com/1319/"&gt;&lt;img src="//imgs.xkcd.com/comics/automation.png" title="'Automating' comes from the roots 'auto-' meaning 'self-', and 'mating', meaning 'screwing'." alt="Automation"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I find that understanding how frequently you are going to do the work is helpful. Automating running lint against your codebase is small and has large impact. My example above of moving packages was only beneficial because of the time and amount of work needed to do it manually. &lt;/p&gt;

&lt;p&gt;Even on large efforts I recommend you keep the automation small. As you get better with the tools the definition of small will adjust and with that the value in automating. &lt;/p&gt;

&lt;h2&gt;
  
  
  OH ASTs are cool, where can I learn more?
&lt;/h2&gt;

&lt;p&gt;I was inspired to go on this journey after reading &lt;a href="https://github.com/jamiebuilds/the-super-tiny-compiler"&gt;Jamie Kyle's repo - the super tiny complier&lt;/a&gt;. From there I read the &lt;a href="https://github.com/jamiebuilds/babel-handbook/blob/master/translations/en/plugin-handbook.md"&gt;Babel Plugin Handbook&lt;/a&gt; and started working on &lt;a href="https://github.com/kwelch/babel-plugin-captains-log"&gt;my first babel plugin, captain's log&lt;/a&gt;. At the same time I watched the &lt;a href="https://frontendmasters.com/courses/linting-asts/"&gt;live stream of this Kent C. Dodds talk on Frontend masters&lt;/a&gt; which put a nice bow on all my learning and gave me exposure to using ASTs for lint and not just babel plugins. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;UPDATE&lt;/strong&gt;: Another great resource for ASTs is &lt;a href="https://astexplorer.net/"&gt;https://astexplorer.net/&lt;/a&gt;. It allows you to visual and work with ASTs directly in the browser. &lt;/p&gt;

&lt;p&gt;I also love talking about them, so feel free to reach out to me with any questions. &lt;/p&gt;

</description>
    </item>
    <item>
      <title>Experimenting with Coffee Outside the Coffeeshop</title>
      <dc:creator>Kyle Welch</dc:creator>
      <pubDate>Wed, 18 Mar 2020 15:29:14 +0000</pubDate>
      <link>https://forem.com/kwelch/experimenting-with-coffee-outside-the-coffeeshop-41l9</link>
      <guid>https://forem.com/kwelch/experimenting-with-coffee-outside-the-coffeeshop-41l9</guid>
      <description>&lt;p&gt;&lt;strong&gt;UPDATE: In response to this post, I have updated my calendly to include slots for Mondays and Wednesday until May&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I am an extremely social developer and I am always looking for new ways to meeting new people. I have had coffees with people in Nashville that want to talk or are visiting. These conversations have been some of my favorite times. I also realized how limiting that approach was. I decided to expand my horizons and post about a new way on twitter. &lt;/p&gt;


&lt;blockquote class="ltag__twitter-tweet"&gt;

  &lt;div class="ltag__twitter-tweet__main"&gt;
    &lt;div class="ltag__twitter-tweet__header"&gt;
      &lt;img class="ltag__twitter-tweet__profile-image" src="https://res.cloudinary.com/practicaldev/image/fetch/s--HrO86b55--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://pbs.twimg.com/profile_images/964298083126382592/yTIaTPcN_normal.jpg" alt="Kyle Welch profile image"&gt;
      &lt;div class="ltag__twitter-tweet__full-name"&gt;
        Kyle Welch
      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__username"&gt;
        @kylewelch
      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__twitter-logo"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--P4t6ys1m--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://practicaldev-herokuapp-com.freetls.fastly.net/assets/twitter-f95605061196010f91e64806688390eb1a4dbc9e913682e043eb8b1e06ca484f.svg" alt="twitter logo"&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__body"&gt;
      Alright I finally did it. &lt;br&gt;&lt;br&gt;I have setup a virtual coffee calendly. &lt;br&gt;&lt;br&gt;I opened some time I have available over the next 2 weeks. &lt;br&gt;&lt;br&gt;Sessions are 30mins with 6 person max and only booking one a day. &lt;br&gt;&lt;br&gt;&lt;a href="https://t.co/JNYB3hy71W"&gt;calendly.com/kylewelch/virt…&lt;/a&gt;
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__date"&gt;
      02:46 AM - 23 Feb 2020
    &lt;/div&gt;


    &lt;div class="ltag__twitter-tweet__actions"&gt;
      &lt;a href="https://twitter.com/intent/tweet?in_reply_to=1231409952402628609" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--WwRENZp4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://practicaldev-herokuapp-com.freetls.fastly.net/assets/twitter-reply-action-238fe0a37991706a6880ed13941c3efd6b371e4aefe288fe8e0db85250708bc4.svg" alt="Twitter reply action"&gt;
      &lt;/a&gt;
      &lt;a href="https://twitter.com/intent/retweet?tweet_id=1231409952402628609" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--PFD0MJBa--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://practicaldev-herokuapp-com.freetls.fastly.net/assets/twitter-retweet-action-632c83532a4e7de573c5c08dbb090ee18b348b13e2793175fea914827bc42046.svg" alt="Twitter retweet action"&gt;
      &lt;/a&gt;
      &lt;a href="https://twitter.com/intent/like?tweet_id=1231409952402628609" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--6wx1BHu3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://practicaldev-herokuapp-com.freetls.fastly.net/assets/twitter-like-action-1ea89f4b87c7d37465b0eb78d51fcb7fe6c03a089805d7ea014ba71365be5171.svg" alt="Twitter like action"&gt;
      &lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  Experiment Parameters
&lt;/h2&gt;

&lt;p&gt;For the first attempt at this I wanted to be very open while also putting a limit on it. I used Calendly to organize the effort and a opened up time in my calendar for 2 weeks with a limit of a single 30-minute coffee session a day. Calendy made this setup super simple. However, I did have issues with the hangouts integration and will be using zoom going forward.&lt;/p&gt;

&lt;h2&gt;
  
  
  How did it go?
&lt;/h2&gt;

&lt;p&gt;The response to this was amazing. I was surprised how quickly my first few session (only days away from posting) began to fill up. Overall, I had 7 session schedule, but 3 cancelled for various technical and personal reasons. I met with 9 people total throughout those session. My favorite part was that most of them I had not met before.&lt;/p&gt;

&lt;p&gt;We talked about a variety of topics. In the first session it was around community, conferences, junior developers, build a network, and spiders 😂. My second session was all #DevDads, and we discussed various topics about balance of family time vs side projects, along with putting kids through an escape game to survive a video chat with the team.&lt;/p&gt;

&lt;p&gt;Another session was full of conference organizer and we talked about community building and being remote as well as the virtual coffee idea in general. My biggest take away from this was the discussion around a slack bot that will pair team members together to have a virtual coffee together to help foster relationships without the company and give opportunities to break outside of our bubbles of isolation. &lt;/p&gt;

&lt;p&gt;My last session was the only 1:1 conversation. The anticipation for this was building as we had been discussion Netflix shows on twitter for a few days and the conversation reflected it. I particularly enjoyed this conversation as it reached a goal of mine that virtual coffee did not have to be about tech. This is something I typically fall into when talking with other people in the industry. &lt;/p&gt;

&lt;h2&gt;
  
  
  Next Steps
&lt;/h2&gt;

&lt;p&gt;As you can imagine I would this extremely beneficial and I will be looking to do this more in the future. &lt;/p&gt;

&lt;p&gt;I would also recommend you do the same. You don't have to send it to all of the internet via Twitter as I did. Maybe you decided to open this up to your teammates, your local community, or just your family. &lt;/p&gt;

&lt;p&gt;~I used Calendly with a single event in their free tier.~&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Update&lt;/strong&gt;&lt;br&gt;
I was on a free month of pro which made this possible for group events. Their free tier only allows for 1:1 event types. &lt;/p&gt;

&lt;p&gt;I expect to do this more in the future so I bought a year of the Premium subscription. &lt;/p&gt;

</description>
      <category>coffee</category>
      <category>remote</category>
      <category>virtual</category>
      <category>community</category>
    </item>
    <item>
      <title>Hi, I'm Kyle Welch</title>
      <dc:creator>Kyle Welch</dc:creator>
      <pubDate>Wed, 28 Dec 2016 14:14:13 +0000</pubDate>
      <link>https://forem.com/kwelch/hi-im-kyle-welch</link>
      <guid>https://forem.com/kwelch/hi-im-kyle-welch</guid>
      <description>&lt;p&gt;I have been coding for 10+ years.&lt;/p&gt;

&lt;p&gt;You can find me on Twitter as &lt;a href="https://twitter.com/kylewelch" rel="noopener noreferrer"&gt;@kylewelch&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I live in Nashville,TN and grew up in a suburb of Chicago.&lt;/p&gt;

&lt;p&gt;I work for National Federation of Independent Business, as the Sr. Developer leading the front-end team. &lt;/p&gt;

&lt;p&gt;I mostly program in these languages: Javascript using React, but have done things with a handful or more other languages.&lt;/p&gt;

&lt;p&gt;I am currently learning more about node, babel-plugins, and webpack.&lt;/p&gt;

&lt;p&gt;Nice to meet you.&lt;/p&gt;

</description>
      <category>introduction</category>
    </item>
  </channel>
</rss>
