<?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: Rocky Kev</title>
    <description>The latest articles on DEV Community by Rocky Kev (@rockykev).</description>
    <link>https://dev.to/rockykev</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%2F137230%2F1308570c-a3ed-4015-92b9-f1994ca8f819.jpeg</url>
      <title>DEV Community: Rocky Kev</title>
      <link>https://dev.to/rockykev</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/rockykev"/>
    <language>en</language>
    <item>
      <title>Modern Wordpress for PHP Devs using ACF 6 + block.json (Super post)</title>
      <dc:creator>Rocky Kev</dc:creator>
      <pubDate>Sun, 09 Jul 2023 21:32:37 +0000</pubDate>
      <link>https://dev.to/rockykev/acf-6-with-blockjson-4cpi</link>
      <guid>https://dev.to/rockykev/acf-6-with-blockjson-4cpi</guid>
      <description>&lt;p&gt;&lt;a href="https://www.advancedcustomfields.com/"&gt;Advanced Custom Fields(ACF)&lt;/a&gt; is a WordPress developer's dream. ACF allows developers to add extra content fields to the WordPress Editor.&lt;/p&gt;

&lt;p&gt;With ACF 6, ACF Blocks are now registered using the &lt;code&gt;register_block_type()&lt;/code&gt;, which loads a block.json file and allows a PHP developer to tap into the Block API for more flexibility.&lt;/p&gt;




&lt;h2&gt;
  
  
  Background
&lt;/h2&gt;

&lt;p&gt;Before this change, a developer would need to utilize React to build WP Blocks. [For those curious, here's WordPress's Introduction to Block Development with React].(&lt;a href="https://learn.wordpress.org/course/introduction-to-block-development-build-your-first-custom-block/"&gt;https://learn.wordpress.org/course/introduction-to-block-development-build-your-first-custom-block/&lt;/a&gt;) &lt;/p&gt;

&lt;p&gt;The alternative was making Blocks with pure HTML (Check out &lt;a href="https://fullsiteediting.com/courses/full-site-editing-for-theme-developers/"&gt;Carolina Nymark's free course on Full site editing for theme developers&lt;/a&gt;) or utilize workarounds. &lt;/p&gt;

&lt;p&gt;Much of the WordPress ecosystem is PHP Developers. Making WP Blocks with PHP - you had to rely on &lt;a href="https://www.advancedcustomfields.com/"&gt;Advance Custom Fields&lt;/a&gt;, you were not able to tap into the Block API, and you missed out on future development that the WordPress team are pushing forward.&lt;/p&gt;

&lt;p&gt;Making WP Blocks with PHP + ACF sort of looked like a halfway point between a relic of the past and the latest Modern WordPress.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--rdyR5Ag7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2t8alyrygh2e45fcntsp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--rdyR5Ag7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2t8alyrygh2e45fcntsp.png" alt="The Old way" width="800" height="694"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;For those unfamiliar, it looks like cramming the WordPress Classic Editor into the Modern Editor.&lt;/em&gt;🤢🤢🤢&lt;/p&gt;

&lt;p&gt;With ACF 6, there's now more synergy between WP Blocks made natively with React, and the PHP alternative!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--rd5U1SPg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ldb4bgvfry5kvlz7ewrk.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--rd5U1SPg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ldb4bgvfry5kvlz7ewrk.gif" alt="Modern Wordpress" width="600" height="358"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;(Notice the Editor rendering the changes on the fly? That's now possible thanks to ACF 6!)&lt;/p&gt;




&lt;h2&gt;
  
  
  Example Repository
&lt;/h2&gt;

&lt;p&gt;In &lt;a href="https://github.com/RockyKev/acf-6-with-block-json"&gt;this repo: Advanced Custom Fields 6 + Blocks.json&lt;/a&gt;, I made a extremely &lt;strong&gt;bare-bones&lt;/strong&gt; Wordpress theme that uses ALL ACF Fields into individual blocks. You &lt;a href="https://github.com/RockyKev/acf-6-with-block-json/archive/refs/heads/main.zip"&gt;can download the theme as a zip file&lt;/a&gt; and import it into your WordPress Themes.  &lt;/p&gt;

&lt;p&gt;This theme uses a CDN of &lt;a href="https://tailwindcss.com/"&gt;tailwind css&lt;/a&gt; ONLY for ease of use. Tailwind is 100% optional. If you plan to fork this theme, set up tailwind properly. &lt;/p&gt;




&lt;h2&gt;
  
  
  Block.json
&lt;/h2&gt;

&lt;p&gt;To tap into that synergy with ACF 6, &lt;a href="https://www.advancedcustomfields.com/resources/acf-blocks-with-block-json/"&gt;register your blocks&lt;/a&gt; with a &lt;code&gt;block.json&lt;/code&gt; file. &lt;/p&gt;

&lt;p&gt;The &lt;code&gt;block.json&lt;/code&gt; is a metadata file to help WordPress identify WHAT the block looks like.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.
└── the-theme-name
    ├── blocks
    │   ├── text-block
    │   │   ├── template.php
    │   │   └── block.json &amp;lt;--- here
    │   ├── different-block
    │   │   ├── template.php
    │   │   ├── block.json &amp;lt;--- here
    │   │   └── style.css
    │   └── another-block
    │       ├── template.php
    │       ├── block.json &amp;lt;--- here
    │       ├── style.css
    │       └── script.js
    ├── function.php  
    └── style.css
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It looks like this: &lt;/p&gt;

&lt;p&gt;Example: &lt;code&gt;block.json&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"$schema"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://schemas.wp.org/trunk/block.json"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"apiVersion"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"acf-block-json/text"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"title"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ACF Block Json Basic: Text"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"category"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"acf-block-json"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"icon"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"welcome-write-blog"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"version"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"1.0.0"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"acf"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"mode"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"preview"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"renderTemplate"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"template.php"&lt;/span&gt;&lt;span class="w"&gt; 
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then in your theme, you'll load it with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    register_block_type(get_template_directory() . '/blocks/text-block/block.json');

    register_block_type(get_template_directory() . '/blocks/different-block/block.json');

    register_block_type(get_template_directory() . '/blocks/another-block/block.json');

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

&lt;/div&gt;



&lt;p&gt;Notice that it's following the Block API's recommendation. For all the attributes, visit &lt;a href="https://developer.wordpress.org/block-editor/reference-guides/block-api/block-metadata/"&gt;Metadata in block.json&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;In fact, you'll be using that &lt;a href="https://developer.wordpress.org/block-editor/reference-guides/block-api/block-metadata/"&gt;Metadata in block.json&lt;/a&gt; like a bible after we're done. :-) &lt;/p&gt;

&lt;p&gt;PROTIP: A quick way to verify if your block was properly registered is to check the ACF menu for it.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Cm7GCT3Q--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kmhvxyaya475w4kaww2i.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Cm7GCT3Q--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kmhvxyaya475w4kaww2i.png" alt="Quick Check" width="800" height="597"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  📝 The ACF metadata
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="err"&gt;//...&lt;/span&gt;&lt;span class="w"&gt;
 &lt;/span&gt;&lt;span class="nl"&gt;"acf"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"mode"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"preview"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;//&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;preview&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;edit&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;auto&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"renderTemplate"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"template.php"&lt;/span&gt;&lt;span class="w"&gt; 
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You may notice the &lt;code&gt;acf&lt;/code&gt; metadata.&lt;/p&gt;

&lt;p&gt;There's a few unique fields. &lt;a href="https://www.advancedcustomfields.com/resources/acf-blocks-with-block-json/#acf-configuration-key"&gt;The full list&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mode is the display.&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Preview mode - The ACF field lives on the sidebar. This is the method I will use in this article.&lt;/li&gt;
&lt;li&gt;Auto mode - preview is shown but when you click on the block, it goes into "edit" mode.&lt;/li&gt;
&lt;li&gt;Edit mode - The ACF Fields exist inside the block. This is similar to how Classic WordPress looks like. (And while it has it's use-cases, it's quite... ugly.)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;renderTemplate is the frontend view.&lt;/strong&gt;&lt;br&gt;
It points to a php file with your business logic and markup. &lt;/p&gt;

&lt;p&gt;There's a few other fields, but they're optional and out of the scope of this article.&lt;/p&gt;


&lt;h2&gt;
  
  
  WP Block Examples with ACF 6
&lt;/h2&gt;

&lt;p&gt;I'll cover some of the more popular WP Blocks.&lt;/p&gt;

&lt;p&gt;You can review the &lt;a href="https://github.com/RockyKev/acf-6-with-block-json"&gt;repo&lt;/a&gt; for working examples of other WP Blocks.&lt;/p&gt;
&lt;h3&gt;
  
  
  🧱 Basic: Text Field
&lt;/h3&gt;

&lt;p&gt;The easiest field to work with is the Text Field. &lt;a href="https://github.com/RockyKev/acf-6-with-block-json/tree/main/blocks/acf-basic/text"&gt;Direct link to code&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The view:&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--y7KrByZp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ojvtfhli2tufd24vpqpb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--y7KrByZp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ojvtfhli2tufd24vpqpb.png" alt="Image description" width="615" height="436"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;What ever you put in on the sidebar will automatically render to the markup.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The code:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;?php&lt;/span&gt; 

&lt;span class="c1"&gt;// Text Field&lt;/span&gt;
&lt;span class="c1"&gt;// https://www.advancedcustomfields.com/resources/text/&lt;/span&gt;

&lt;span class="nv"&gt;$text&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;esc_html&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;get_field&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'text'&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;

&lt;span class="nv"&gt;$additionalClasses&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="k"&gt;empty&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$block&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'className'&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt; &lt;span class="o"&gt;?&lt;/span&gt; &lt;span class="nv"&gt;$block&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'className'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'no-classes-added'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="cp"&gt;?&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"outline outline-4 outline-blue-500 py-4 my-4 &lt;/span&gt;&lt;span class="cp"&gt;&amp;lt;?=&lt;/span&gt; &lt;span class="nv"&gt;$additionalClasses&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="cp"&gt;?&amp;gt;&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;h1&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"text-4xl underline pb-4"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;ACF-basic/Text&lt;span class="nt"&gt;&amp;lt;/h1&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;Text: &lt;span class="cp"&gt;&amp;lt;?=&lt;/span&gt; &lt;span class="nv"&gt;$text&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="cp"&gt;?&amp;gt;&lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  🧱 Choice: Button Group
&lt;/h3&gt;

&lt;p&gt;Choice features in ACF all work similar to each other. I picked the more complex field group to highlight how to use it show content, as well as a conditional. &lt;a href="https://github.com/RockyKev/acf-6-with-block-json/tree/main/blocks/acf-choice/button-group-with-text"&gt;Direct link to code&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;In the Edit Field Group:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;field label: Button Group
field name: button_group
choices:
🍇 : 🍇 Grapes
🍈 : 🍈 Melon
🍉 : 🍉 Watermelon
🍊 : 🍊 Tangerine
🍋 : 🍋 Lemon
🍌 : 🍌 Banana
🍍 : 🍍 Pineapple
🥭 : 🥭 Mango
🍎 : 🍎 Red Apple
🍏 : 🍏 Green Apple
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I also created a text field with a conditional to ONLY SHOW if the choice has &lt;code&gt;apple&lt;/code&gt; inside the name. (Pineapple, Red Apple, and Green Apple)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The View&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--bPjPb5Jy--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lmtu80trwfikm72vleaa.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--bPjPb5Jy--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lmtu80trwfikm72vleaa.png" alt="Image description" width="800" height="637"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Code&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;?php&lt;/span&gt;

&lt;span class="c1"&gt;// Button Group Field&lt;/span&gt;
&lt;span class="c1"&gt;// https://www.advancedcustomfields.com/resources/button-group/&lt;/span&gt;

&lt;span class="nv"&gt;$buttonGroupData&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;get_field&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'button_group'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nv"&gt;$buttonValue&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$buttonGroupData&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'value'&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;span class="nv"&gt;$buttonLabel&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$buttonGroupData&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'label'&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;

&lt;span class="nv"&gt;$showAppleText&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nv"&gt;$addMoreToApples&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;''&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;str_contains&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$buttonLabel&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'Apple'&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nv"&gt;$showAppleText&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nv"&gt;$addMoreToApples&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;esc_html&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;get_field&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'add_more_to_apples'&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nv"&gt;$additionalClasses&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="k"&gt;empty&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$block&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'className'&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt; &lt;span class="o"&gt;?&lt;/span&gt; &lt;span class="nv"&gt;$block&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'className'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'no-classes-added'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="cp"&gt;?&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"outline outline-4 outline-purple-500 py-4 my-4 &lt;/span&gt;&lt;span class="cp"&gt;&amp;lt;?=&lt;/span&gt; &lt;span class="nv"&gt;$additionalClasses&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="cp"&gt;?&amp;gt;&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;h1&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"text-4xl underline pb-4"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;ACF-Choice/Button Group With Text&lt;span class="nt"&gt;&amp;lt;/h1&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;The button selected was: &lt;span class="cp"&gt;&amp;lt;?=&lt;/span&gt; &lt;span class="nv"&gt;$buttonValue&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="cp"&gt;?&amp;gt;&lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;If there's more content, it'll show up below:&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;hr&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="cp"&gt;&amp;lt;?php&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$showAppleText&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="cp"&gt;?&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt; &lt;span class="cp"&gt;&amp;lt;?=&lt;/span&gt; &lt;span class="nv"&gt;$addMoreToApples&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="cp"&gt;?&amp;gt;&lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
    &lt;span class="cp"&gt;&amp;lt;?php&lt;/span&gt; &lt;span class="k"&gt;endif&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="cp"&gt;?&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;hr&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  🧱 Content: WYSIWYG
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://github.com/RockyKev/acf-6-with-block-json/tree/main/blocks/acf-content/wysiwyg"&gt;Direct link to code&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The view:&lt;/strong&gt;&lt;br&gt;
This is one of those moments where rendering the WYSIWYG ACF field into the sidebar is a awful UI experience.&lt;/p&gt;

&lt;p&gt;Click on the Pencil Icon and switch it to EDIT mode. (You can also modify the &lt;code&gt;block.json&lt;/code&gt; to default it to edit mode.)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--hK8xKmny--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/it1i4bcm19502ft5zlv4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--hK8xKmny--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/it1i4bcm19502ft5zlv4.png" alt="Image description" width="800" height="741"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The code:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;?php&lt;/span&gt; 
&lt;span class="c1"&gt;// WYSIYWG Field&lt;/span&gt;
&lt;span class="c1"&gt;// https://www.advancedcustomfields.com/resources/wysiwyg-editor/&lt;/span&gt;

&lt;span class="nv"&gt;$wysiwyg&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;get_field&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'wysiwyg'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nv"&gt;$additionalClasses&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="k"&gt;empty&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$block&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'className'&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt; &lt;span class="o"&gt;?&lt;/span&gt; &lt;span class="nv"&gt;$block&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'className'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'no-classes-added'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="cp"&gt;?&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"outline outline-4 outline-blue-500 py-4 my-4 &lt;/span&gt;&lt;span class="cp"&gt;&amp;lt;?=&lt;/span&gt; &lt;span class="nv"&gt;$additionalClasses&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="cp"&gt;?&amp;gt;&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;h1&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"text-4xl underline pb-4"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;ACF-content/WYSIWYG&lt;span class="nt"&gt;&amp;lt;/h1&amp;gt;&lt;/span&gt;
    &lt;span class="cp"&gt;&amp;lt;?=&lt;/span&gt; &lt;span class="nv"&gt;$wysiwyg&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="cp"&gt;?&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;

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

&lt;/div&gt;



&lt;h3&gt;
  
  
  🧱 Choice: True-False
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://github.com/RockyKev/acf-6-with-block-json/tree/main/blocks/acf-choice/true-false-with-text"&gt;Direct link to code&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The view:&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--iKAD6S67--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9jk9o8l6i6bhl8ekblju.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--iKAD6S67--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9jk9o8l6i6bhl8ekblju.png" alt="Image description" width="800" height="385"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The code:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;?php&lt;/span&gt; 

&lt;span class="c1"&gt;// True False Field&lt;/span&gt;
&lt;span class="c1"&gt;// https://www.advancedcustomfields.com/resources/true-false/&lt;/span&gt;

&lt;span class="nv"&gt;$boolean&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;get_field&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'true-false'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nv"&gt;$booleanAsString&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$boolean&lt;/span&gt; &lt;span class="o"&gt;?&lt;/span&gt; &lt;span class="s1"&gt;'true'&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'false'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nv"&gt;$content&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$boolean&lt;/span&gt; &lt;span class="o"&gt;?&lt;/span&gt; &lt;span class="nf"&gt;get_field&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'text'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'No content. Content set to false'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="nv"&gt;$additionalClasses&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="k"&gt;empty&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$block&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'className'&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt; &lt;span class="o"&gt;?&lt;/span&gt; &lt;span class="nv"&gt;$block&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'className'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'no-classes-added'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="cp"&gt;?&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"outline outline-4 outline-purple-500 py-4 my-4 &lt;/span&gt;&lt;span class="cp"&gt;&amp;lt;?=&lt;/span&gt; &lt;span class="nv"&gt;$additionalClasses&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="cp"&gt;?&amp;gt;&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;h1&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"text-4xl underline pb-4"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;ACF-Choice/True False With Text&lt;span class="nt"&gt;&amp;lt;/h1&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;Test boolean: &lt;span class="cp"&gt;&amp;lt;?=&lt;/span&gt; &lt;span class="nv"&gt;$booleanAsString&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="cp"&gt;?&amp;gt;&lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;&amp;lt;?=&lt;/span&gt; &lt;span class="nv"&gt;$content&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="cp"&gt;?&amp;gt;&lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  🧱 Relational: Link
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://github.com/RockyKev/acf-6-with-block-json/tree/main/blocks/acf-relational"&gt;Direct link to code&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The view:&lt;/strong&gt;&lt;br&gt;
What I like about this ACF field is that it still uses native WordPress features. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Jsm8ZH6q--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ultioqxn5b6bm7r70j5r.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Jsm8ZH6q--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ultioqxn5b6bm7r70j5r.png" alt="Image description" width="800" height="430"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;The code:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;?php&lt;/span&gt; 

&lt;span class="c1"&gt;// Link Field&lt;/span&gt;
&lt;span class="c1"&gt;// https://www.advancedcustomfields.com/resources/link/&lt;/span&gt;

&lt;span class="nv"&gt;$link&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;get_field&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'link'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nv"&gt;$fullLink&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;''&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="nv"&gt;$link&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nv"&gt;$link_url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$link&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'url'&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
    &lt;span class="nv"&gt;$link_title&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$link&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'title'&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
    &lt;span class="nv"&gt;$link_target&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$link&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'target'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;?&lt;/span&gt; &lt;span class="nv"&gt;$link&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'target'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'_self'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="nv"&gt;$fullLink&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"&amp;lt;a href='&lt;/span&gt;&lt;span class="nv"&gt;$link_url&lt;/span&gt;&lt;span class="s2"&gt;' target='&lt;/span&gt;&lt;span class="nv"&gt;$link_target&lt;/span&gt;&lt;span class="s2"&gt;'&amp;gt;&lt;/span&gt;&lt;span class="nv"&gt;$link_title&lt;/span&gt;&lt;span class="s2"&gt;&amp;lt;/a&amp;gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nv"&gt;$additionalClasses&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="k"&gt;empty&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$block&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'className'&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt; &lt;span class="o"&gt;?&lt;/span&gt; &lt;span class="nv"&gt;$block&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'className'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'no-classes-added'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="cp"&gt;?&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"outline outline-4 outline-orange-500 py-4 my-4 &lt;/span&gt;&lt;span class="cp"&gt;&amp;lt;?=&lt;/span&gt; &lt;span class="nv"&gt;$additionalClasses&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="cp"&gt;?&amp;gt;&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;h1&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"text-4xl underline pb-4"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;ACF-relational/Link&lt;span class="nt"&gt;&amp;lt;/h1&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;Test Link: &lt;span class="cp"&gt;&amp;lt;?=&lt;/span&gt; &lt;span class="nv"&gt;$fullLink&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="cp"&gt;?&amp;gt;&lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Hidden Attributes
&lt;/h2&gt;

&lt;p&gt;Tucked away inside all WP Blocks is a &lt;code&gt;$block&lt;/code&gt;. &lt;/p&gt;

&lt;p&gt;All data within the Editor screen can be accessible from this &lt;code&gt;$block&lt;/code&gt; array. &lt;/p&gt;

&lt;p&gt;It looks like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Array
(
    [render_template] =&amp;gt; template.php
    // ... 
    [supports] =&amp;gt; Array
        (
            [align] =&amp;gt; 1
            [html] =&amp;gt; 
            [mode] =&amp;gt; 1
            [jsx] =&amp;gt; 1
            [anchor] =&amp;gt; 1
            [ariaLabel] =&amp;gt; 1
            [color] =&amp;gt; Array
                (
                    [background] =&amp;gt; 1
                    [gradients] =&amp;gt; 1
                    [link] =&amp;gt; 1
                    [text] =&amp;gt; 1
                )

            [position] =&amp;gt; Array
                (
                    [sticky] =&amp;gt; 1
                )

            [spacing] =&amp;gt; Array
                (
                    [margin] =&amp;gt; 1
                    [padding] =&amp;gt; 1
                    [blockGap] =&amp;gt; 1
                )

            [typography] =&amp;gt; Array
                (
                    [fontSize] =&amp;gt; 1
                    [lineHeight] =&amp;gt; 1
                )

        )
    [acf_block_version] =&amp;gt; 2
    [api_version] =&amp;gt; 3
    [title] =&amp;gt; ACF Block Json Basic: Text with Block Supports
    [category] =&amp;gt; acf-block-json
    [icon] =&amp;gt; welcome-write-blog
    [mode] =&amp;gt; preview
    [name] =&amp;gt; acf-block-json/text-with-block-supports
    [data] =&amp;gt; Array
        (
            [text] =&amp;gt; Test Block.
            [_text] =&amp;gt; field_64a8ebaf28669
        )
    [align] =&amp;gt; 
    [backgroundColor] =&amp;gt; vivid-red
    [textColor] =&amp;gt; luminous-vivid-amber
    [fontSize] =&amp;gt; x-large
    [id] =&amp;gt; block_6be9f1b1aa3b7a2d677a19b71715d58c
)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For example, if you wanted to add anchor IDs to your element, you can do:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;?&amp;gt; &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="cp"&gt;&amp;lt;?=&lt;/span&gt; &lt;span class="nv"&gt;$block&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'id'&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt; &lt;span class="cp"&gt;?&amp;gt;&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  The Supports Documentation
&lt;/h2&gt;

&lt;p&gt;Your block.json may look like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"$schema"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://schemas.wp.org/trunk/block.json"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"apiVersion"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"acf-block-json/text-with-block-supports"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"title"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ACF Block Json Basic: Text with Block Supports"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"category"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"acf-block-json"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"icon"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"welcome-write-blog"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"version"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"1.0.0"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"acf"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"mode"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"preview"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"renderTemplate"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"template.php"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"supports"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"anchor"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"align"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"color"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"background"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"text"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt; 
        &lt;/span&gt;&lt;span class="nl"&gt;"typography"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"fontSize"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In the &lt;code&gt;supports&lt;/code&gt;, you may notice &lt;code&gt;anchor&lt;/code&gt;, &lt;code&gt;align&lt;/code&gt;, &lt;code&gt;color&lt;/code&gt;, and &lt;code&gt;typography&lt;/code&gt;. &lt;/p&gt;

&lt;p&gt;This is where the future of WordPress is headed. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://developer.wordpress.org/block-editor/reference-guides/block-api/block-supports/"&gt;Block Supports API documentation&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This gives us native Wordpress Block features.&lt;/p&gt;

&lt;h3&gt;
  
  
  📝 Example of Block Supports
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://github.com/RockyKev/acf-6-with-block-json/tree/main/blocks/acf-basic/text-with-support"&gt;Direct link to code&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The view:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The sidebar with Color &amp;amp; Typography? Native Block API! 🏆&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--_feRcF5S--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5yrklyemg72r6ntvyr52.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--_feRcF5S--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5yrklyemg72r6ntvyr52.png" alt="Image description" width="800" height="578"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The code:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;?php&lt;/span&gt;

&lt;span class="nv"&gt;$text&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;esc_html&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;get_field&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'text'&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;

&lt;span class="c1"&gt;// SUPPORT OPTIONS&lt;/span&gt;
&lt;span class="c1"&gt;// == Anchor (anchor: true) ==&lt;/span&gt;
&lt;span class="c1"&gt;//  This gives you a anchor ID. &amp;lt;a id="anchor-id" href="https://example.com"&amp;gt;Link&amp;lt;/a&amp;gt;&lt;/span&gt;
&lt;span class="nv"&gt;$anchorID&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$block&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'anchor'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;?:&lt;/span&gt; &lt;span class="nv"&gt;$block&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'id'&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;

&lt;span class="c1"&gt;// == Align (align: true) ==&lt;/span&gt;
&lt;span class="c1"&gt;//  This determines alignment. &lt;/span&gt;
&lt;span class="c1"&gt;//  NOTE: On the WP Editor, it's a bit buggy. &lt;/span&gt;
&lt;span class="nv"&gt;$alignSupport&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"text-align: "&lt;/span&gt; &lt;span class="mf"&gt;.&lt;/span&gt; &lt;span class="nv"&gt;$block&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'align'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="mf"&gt;.&lt;/span&gt; &lt;span class="s2"&gt;";"&lt;/span&gt; &lt;span class="o"&gt;?:&lt;/span&gt; &lt;span class="s1"&gt;''&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;// == Color [background, text] == &lt;/span&gt;
&lt;span class="c1"&gt;//  Two types of values. Named values vs custom values.&lt;/span&gt;
&lt;span class="c1"&gt;//  Named values have a class: &amp;lt;div class="has-vivid-green-cyan-background-color"&amp;gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;span class="c1"&gt;//  Custom values are style injected: &amp;lt;div style="background-color:#ffffff;"&amp;gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;span class="nv"&gt;$backgroundColorNamed&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$block&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'backgroundColor'&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt; &lt;span class="o"&gt;?&lt;/span&gt; &lt;span class="s2"&gt;"has-"&lt;/span&gt; &lt;span class="mf"&gt;.&lt;/span&gt; &lt;span class="nv"&gt;$block&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'backgroundColor'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="mf"&gt;.&lt;/span&gt; &lt;span class="s2"&gt;"-background-color"&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;''&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nv"&gt;$backgroundColorCustom&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$block&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'style'&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="s1"&gt;'color'&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="s1"&gt;'background'&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt; &lt;span class="o"&gt;?&lt;/span&gt; &lt;span class="s2"&gt;"background-color:"&lt;/span&gt; &lt;span class="mf"&gt;.&lt;/span&gt; &lt;span class="nv"&gt;$block&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'style'&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="s1"&gt;'color'&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="s1"&gt;'background'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="mf"&gt;.&lt;/span&gt; &lt;span class="s2"&gt;";"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;''&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="nv"&gt;$textColorNamed&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$block&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'textColor'&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt; &lt;span class="o"&gt;?&lt;/span&gt; &lt;span class="s2"&gt;"has-"&lt;/span&gt; &lt;span class="mf"&gt;.&lt;/span&gt; &lt;span class="nv"&gt;$block&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'textColor'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="mf"&gt;.&lt;/span&gt; &lt;span class="s2"&gt;"-color"&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;''&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nv"&gt;$textColorCustom&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$block&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'style'&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="s1"&gt;'color'&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="s1"&gt;'text'&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt; &lt;span class="o"&gt;?&lt;/span&gt; &lt;span class="s2"&gt;"color:"&lt;/span&gt; &lt;span class="mf"&gt;.&lt;/span&gt; &lt;span class="nv"&gt;$block&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'style'&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="s1"&gt;'color'&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="s1"&gt;'text'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="mf"&gt;.&lt;/span&gt; &lt;span class="s2"&gt;";"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;''&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;// == Typography == &lt;/span&gt;
&lt;span class="c1"&gt;//  Two types of values. Named values vs custom values.&lt;/span&gt;
&lt;span class="c1"&gt;//  Named values have a class: &amp;lt;div class="has-x-large-font-size"&amp;gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;span class="c1"&gt;//  Custom values are style injected: &amp;lt;div style="font-size: 1.9em;"&amp;gt;&amp;lt;/div&amp;gt;&lt;/span&gt;

&lt;span class="nv"&gt;$fontSizeNamed&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$block&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'fontSize'&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt; &lt;span class="o"&gt;?&lt;/span&gt; &lt;span class="s2"&gt;"has-"&lt;/span&gt; &lt;span class="mf"&gt;.&lt;/span&gt; &lt;span class="nv"&gt;$block&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'fontSize'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="mf"&gt;.&lt;/span&gt; &lt;span class="s2"&gt;"-font-size"&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;''&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nv"&gt;$fontSizeCustom&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$block&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'style'&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="s1"&gt;'typography'&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="s1"&gt;'fontSize'&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt; &lt;span class="o"&gt;?&lt;/span&gt; &lt;span class="s2"&gt;"font-size:"&lt;/span&gt; &lt;span class="mf"&gt;.&lt;/span&gt; &lt;span class="nv"&gt;$block&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'style'&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="s1"&gt;'typography'&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="s1"&gt;'fontSize'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="mf"&gt;.&lt;/span&gt; &lt;span class="s2"&gt;";"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;''&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;// == AdditionalClasses (true) == &lt;/span&gt;
&lt;span class="c1"&gt;// Default is true. This allows you to add classes from the editor side&lt;/span&gt;
&lt;span class="nv"&gt;$additionalClasses&lt;/span&gt; &lt;span class="mf"&gt;.&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="k"&gt;empty&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$block&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'className'&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt; &lt;span class="o"&gt;?&lt;/span&gt; &lt;span class="nv"&gt;$block&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'className'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;' no-classes-added'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;// FRONTEND&lt;/span&gt;
&lt;span class="nv"&gt;$additionalStyles&lt;/span&gt; &lt;span class="mf"&gt;.&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$backgroundColorCustom&lt;/span&gt;&lt;span class="s2"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$textColorCustom&lt;/span&gt;&lt;span class="s2"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$fontSizeCustom&lt;/span&gt;&lt;span class="s2"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$alignSupport&lt;/span&gt;&lt;span class="s2"&gt; "&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nv"&gt;$additionalClasses&lt;/span&gt; &lt;span class="mf"&gt;.&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$backgroundColorNamed&lt;/span&gt;&lt;span class="s2"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$textColorNamed&lt;/span&gt;&lt;span class="s2"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$fontSizeNamed&lt;/span&gt;&lt;span class="s2"&gt; "&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nv"&gt;$addAnchorID&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"id=&lt;/span&gt;&lt;span class="nv"&gt;$anchorID&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="cp"&gt;?&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="cp"&gt;&amp;lt;?=&lt;/span&gt; &lt;span class="nv"&gt;$addAnchorID&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="cp"&gt;?&amp;gt;&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"outline outline-4 outline-blue-500 py-4 my-4 &lt;/span&gt;&lt;span class="cp"&gt;&amp;lt;?=&lt;/span&gt; &lt;span class="nv"&gt;$additionalClasses&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="cp"&gt;?&amp;gt;&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt; &lt;span class="na"&gt;style=&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="cp"&gt;&amp;lt;?=&lt;/span&gt; &lt;span class="nv"&gt;$additionalStyles&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="cp"&gt;?&amp;gt;&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;h1&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"text-4xl underline pb-4"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;ACF-basic/Text&lt;span class="nt"&gt;&amp;lt;/h1&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;Text: &lt;span class="cp"&gt;&amp;lt;?=&lt;/span&gt; &lt;span class="nv"&gt;$text&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="cp"&gt;?&amp;gt;&lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Native Support vs ACF Versions
&lt;/h2&gt;

&lt;p&gt;You might see some overlapping between native Block API supports like &lt;a href="https://developer.wordpress.org/block-editor/reference-guides/block-api/block-supports/#color"&gt;Block API Color Picker for background and text&lt;/a&gt; and ACF Fields like &lt;a href="https://www.advancedcustomfields.com/resources/color-picker/"&gt;ACF Color Picker&lt;/a&gt;. Which one do you choose?&lt;/p&gt;

&lt;p&gt;Honestly, hard to say. It DEPENDS.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://developer.wordpress.org/block-editor/reference-guides/block-api/block-supports/#color"&gt;The Block API Color Picker&lt;/a&gt; is much more 'aligned' with Modern Wordpress, versus the &lt;a href="https://www.advancedcustomfields.com/resources/color-picker/"&gt;ACF version&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Where the &lt;a href="https://developer.wordpress.org/block-editor/reference-guides/block-api/block-supports/#align"&gt;Block API Align&lt;/a&gt; doesn't seem to work very well with ACF Blocks, and I rather recreate a radio field that does it better.&lt;/p&gt;

&lt;p&gt;If possible, I'd personally choose native Block API support as much as I can.&lt;/p&gt;




&lt;h2&gt;
  
  
  Finally
&lt;/h2&gt;

&lt;p&gt;This was a long post. It's the result of my weekend of experimenting and building WP blocks with ACF 6. Use the &lt;a href="https://github.com/RockyKev/acf-6-with-block-json/"&gt;Advanced Custom Fields 6 + Blocks.json repo&lt;/a&gt; for more code examples.&lt;/p&gt;

&lt;p&gt;Huge shoutout to Advanced Custom Fields team for their hard work in getting ACF and the Block API working nicely together. As well as the WordPress team in really improving the Editor experience.&lt;/p&gt;

&lt;p&gt;Also a huge shoutout to &lt;a href="https://joeyfarruggio.com/wordress/register-acf-blocks/#register-block"&gt;Register ACF Blocks - joeyfarruggio.com&lt;/a&gt; for the inspiration for this post.&lt;/p&gt;

</description>
      <category>wordpress</category>
      <category>acf</category>
      <category>blocks</category>
    </item>
    <item>
      <title>Tips for Asking Better Interview Questions - A Summary of "Talk to Me"</title>
      <dc:creator>Rocky Kev</dc:creator>
      <pubDate>Mon, 09 Jan 2023 16:41:04 +0000</pubDate>
      <link>https://dev.to/rockykev/tips-for-asking-better-interview-questions-a-summary-of-talk-to-me-27fm</link>
      <guid>https://dev.to/rockykev/tips-for-asking-better-interview-questions-a-summary-of-talk-to-me-27fm</guid>
      <description>&lt;p&gt;As a senior developer, it's my responsibility to help the business with hiring. That includes interviews with technically my new boss. &lt;/p&gt;

&lt;p&gt;Right now, my job is looking for a &lt;a href="https://www.twobarrels.com/jobs/management/director-of-front-end-development/"&gt;Director of Frontend&lt;/a&gt; &lt;em&gt;(Weird title since technically we're Full-Stack. But the industry as a whole is &lt;a href="https://css-tricks.com/the-great-divide/"&gt;torn between what the heck Frontend&lt;/a&gt; even means)&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;I don't have to remind people - Tech interviews are broken. We force an introvert to sit in a room full of strangers and demand they get comfortable - fast. Then force them to answer questions on the spot while 6 other sets of eyes judge them.&lt;/p&gt;

&lt;p&gt;There are hundreds of books on how to ACE the tech interview for applicants. But what about the interviewer - the person on the other side of the table?&lt;/p&gt;

&lt;p&gt;Why is the applicant required to come up with great stories? &lt;/p&gt;

&lt;p&gt;As we look for a Director of Frontend (Again weird title), how do I make this a better experience? How can I elicit the questions that help the business know that this application is an excellent fit? How do I drill through the rote responses and drill into the heart of the person's core? How do I break this cycle of interview abuse? And how do I do this, all within an hour? &lt;/p&gt;

&lt;p&gt;I struggled to find a good book to create better tech interviews. There wasn't any.&lt;/p&gt;

&lt;p&gt;But - I was recommended the book "Talk to Me" by Dean Nelson.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--50K2jGas--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.imgur.com/6dX0YsD.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--50K2jGas--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.imgur.com/6dX0YsD.png" alt="Talk to Me Book cover" width="399" height="600"&gt;&lt;/a&gt;&lt;br&gt;
(image from &lt;a href="https://deannelson.net/lets-talk-about-talk-to-me/"&gt;https://deannelson.net/&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;This resource was recommended by the &lt;a href="https://randsinrepose.com/welcome-to-rands-leadership-slack/"&gt;Rands Leadership Slack&lt;/a&gt; group. &lt;/p&gt;

&lt;h2&gt;
  
  
  "Talk to Me" Book Summary
&lt;/h2&gt;

&lt;p&gt;Included are my takeaways from the book.&lt;/p&gt;

&lt;p&gt;If you're reading this as a future applicant to the Director of Frontend, congrats on doing your homework on me.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Goal of an Interview
&lt;/h3&gt;

&lt;p&gt;An interview is a conversation, not an interrogation. It’s about gaining understanding. The interview is not about you, the person. Take your ego out of it. There are no winners or losers.&lt;/p&gt;

&lt;p&gt;It's also a job. Doctors, Lawyers, Social Workers, Human Resources all have people they like talking to, and people they don't. Regardless of how you feel, you’re a professional. You have to appear impartial. Let the person speak without your correction or judgment or criticism.&lt;/p&gt;

&lt;p&gt;Craft your interview through the prism of “What does Dave need to know here?" Focusing on someone in the audience helps you get your ego out of the way and put the emphasis back on the person you’re talking to.&lt;/p&gt;

&lt;p&gt;It's all about gathering information.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Type of Questions to ask
&lt;/h2&gt;

&lt;p&gt;The best questions are the open-ended ones, where the source has a chance to explain something, and even provide an anecdote to illustrate it.&lt;/p&gt;

&lt;p&gt;Lead the conversation with specifics about them. Do your homework. Avoid vagueness.&lt;/p&gt;

&lt;p&gt;A prime example of bad questions is during an Olympic event, where an athlete just completed something that they've been obsessing about for the last four years of their lives, and the interviewer asks, “What was it like to be out here?” It's vague. That results in canned answers like "Nothing is like being there". &lt;/p&gt;

&lt;p&gt;Instead, get specific. “How you were able to focus after that false start?” Or "How did this victory or loss rank with other wins and losses in your career?"&lt;/p&gt;

&lt;p&gt;A question like "What was it like being on the Arctic Circle?" may result in a single-word answer: "Cold". Two better questions would be “What was the most difficult part about being there?” Or, “What was the most fun part about being there?” &lt;/p&gt;

&lt;p&gt;Doing your homework allows you to ask questions that begin with “Why” or “How,” which are guaranteed to get you further than “When”, “What”, “Who” or “Where.”&lt;/p&gt;

&lt;h3&gt;
  
  
  Open-ended Questions for Inspiration
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;What first got you interested in...”&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This is a "legacy"-type of question. &lt;/p&gt;

&lt;p&gt;Pointing out their legacy and asking sources how they want to be remembered. This opens up an opportunity for them to tell you what is important.&lt;/p&gt;

&lt;p&gt;A great example of a "legacy" question is when &lt;a href="https://www.adweek.com/tvnewser/chris-wallace-reflects-on-clinton-interview/29618/"&gt;President Clinton went on Fox News Sunday with Chris Wallace&lt;/a&gt;. Wallace asks Clinton to talk more about what is motivating him in his charitable work. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;WALLACE: Mr. President... In a recent issue of the New Yorker you say, quote, “I’m sixty years old and I damn near died, and I’m worried about how many lives I can save before I do die.” Is that what drives you in your effort to help in these developing countries?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;"What do you make of..."&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This gives you a chance to bring up an issue that your source can expound on. &lt;/p&gt;

&lt;p&gt;Using another example of President Clinton and Wallace: &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;WALLACE: When you look at the $3 billion from Branson, plus the billions that Bill Gates is giving in his own program, and now Warren Buffett, what do you make of this new age of philanthropy?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;"Help me understand...”&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This puts your source in the role of an expert and they can elaborate on the topic.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;You have said...”&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This requires you to know your source's background. Within the tech interview context, it could be something in their cover letter or referencing a statement from a prior interview.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;"Well is it more like this or is it like this?"&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Ira Glass of This American Life uses this prompt to force the interview to go somewhere. They either bat away your theory or go in another direction.&lt;/p&gt;

&lt;p&gt;A variant of that is: &lt;br&gt;
“How did you think it was going to work out before it happened? And then how did it really work out?” Glass says that it always yields two stories in response. “You get ’Here’s how I thought it would go,’ which is one story. And then ’Here’s how the reality is different than the dream of that.’&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Excuse me?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This is a common shorthand means to ask for more details. It looks unnatural, but you'll see this a lot in talk show interviews. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;"What would you take if you..."&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The cliché “What would you want with you if you were stranded on a desert island?” or “What would you grab if you had to evacuate your home quickly?” &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Jeopardy! question&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It's been typically used in job interviews. It helps identify what topics are important to the source. It’s “If you were a contestant on Jeopardy!, in what category would you excel?”&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How would your life have been different... ?”&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It makes the source consider alternatives to how his or her life turned out. It reveals a lot about the person’s personality and interests.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is your favorite unimportant thing to do?”&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This gets your source evaluating several things at once, and it often creates something personal and revealing. &lt;/p&gt;

&lt;h3&gt;
  
  
  Responding with body language
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Eye contact matters. &lt;/li&gt;
&lt;li&gt;The occasional “Mm-hmms” and “Uh-huh” are encouragements for your source to keep going. Be mindful if they do not come across as 'interruptions'.&lt;/li&gt;
&lt;li&gt;If you you don’t understand what is being said, or you think the source has gone on way too long, use your hands. A shoulder-level, non-threatening "Hold on".&lt;/li&gt;
&lt;li&gt;Nod to keep the person going. &lt;/li&gt;
&lt;li&gt;Look quizzical if you don’t understand or don’t believe what you’re hearing. &lt;/li&gt;
&lt;li&gt;Raise your eyebrows if you are surprised or incredulous. &lt;/li&gt;
&lt;li&gt;Shake your head if you’re just not buying it, or you’re amazed.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Being flexible
&lt;/h3&gt;

&lt;p&gt;The author shares a story about how he went to a convention where the speaker of the final gathering was Tony Campolo. He didn't show, and the organizers played dumb, not knowing why the switch occurred. Conveniently, his next assignment was to do a separate story on Tony Campolo involving humanitarian efforts for the people of Haiti. &lt;/p&gt;

&lt;p&gt;When the author arrived for the interview, before the small talk, Tony said “I’ll bet you’re here to find out from me why I got disinvited from that big convention in Washington, D.C.”&lt;/p&gt;

&lt;h3&gt;
  
  
  Tough Questions, not Gotchas
&lt;/h3&gt;

&lt;p&gt;The difficult questions are the ones where you are getting to the heart of the matter. Tough questions don’t have to be mean, embarrassing, inappropriate, or invade anyone’s privacy. The goal is to break them out of their rote responses, giving you some fresh insight, and get to the heart of what is going on.&lt;/p&gt;

&lt;p&gt;The goal isn’t to have a “gotcha” moment. A phrase used in journalism is "heat for heat’s sake or heat for light’s sake". The former is just to rile people up. The latter is to bring clarity/understanding to a situation.&lt;/p&gt;

&lt;p&gt;You can ask them a few ways:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ease into it. The author recommends putting tough questions about two-thirds of the way into the interview when there's been enough rapport and the person trues you.&lt;/li&gt;
&lt;li&gt;They can be gently introduced with a phrase like “Help me understand something.” &lt;/li&gt;
&lt;li&gt;“So-and-so said it happened this way, but you say it happened that way. Can you see how this is confusing?”&lt;/li&gt;
&lt;li&gt;I apologize if this next question will sound offensive to you,” &lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Dealing with challenging Interviewers
&lt;/h3&gt;

&lt;p&gt;The goal of a interview is to reveal the truth.&lt;/p&gt;

&lt;p&gt;You don’t have to respond positively or negatively. Your obligation is to remain neutral. You can challenge unsavory statements if it feels relevant.&lt;/p&gt;

&lt;p&gt;Interviews should not devolve into shouting matches. People often don't change their behavior because they lost an argument with you. It is always better to ask, listen, respond, guide, ask differently, and probe.&lt;/p&gt;

&lt;p&gt;Control is a dynamic involved in virtually every interview, and you must be aware of who has it at all times. Strong personalities or "Media savvy" folks may try to wrest control from you.  &lt;/p&gt;

&lt;p&gt;Silence is one of the ways to retain control. Silence feels uncomfortable. But your source might be thinking. Or they're hoping you would change the subject. &lt;/p&gt;

&lt;p&gt;The author shares a story where a reporter sat with a investigator. For a long period of time, nothing was said. After a long time, the investigator opens up on their own. The reporter later recounted, "I judged right away that he was nervous. I didn’t want to spook him, so I figured he would talk when he was ready."&lt;/p&gt;

&lt;h3&gt;
  
  
  Wrapping up the Interview
&lt;/h3&gt;

&lt;p&gt;Lead the conversation to the finish line. Giving them a “I have just two more questions.” will let the source knows that you're reaching a conclusion. When I’m done I say something along the lines of “Thank you so much for taking the time!” &lt;/p&gt;

&lt;h2&gt;
  
  
  Final Takeaways
&lt;/h2&gt;

&lt;p&gt;The takeaways shared are focusing on the interview portion. The book covers the full scope of journalism, including researching, note-taking and follow-ups. &lt;/p&gt;

&lt;p&gt;The main takeaway is as it's our obligation as a interviewer to help the source navigate, pull on interesting threads and let them speak on it. Ask the tough questions, but frame it with curiosity.&lt;/p&gt;

&lt;p&gt;If you have book recommendations to improve the tech interview, I'd love to hear it in the comments! &lt;/p&gt;

</description>
      <category>interview</category>
      <category>summary</category>
      <category>questions</category>
    </item>
    <item>
      <title>The 38 Books Recommended to Me in the Past Few Months</title>
      <dc:creator>Rocky Kev</dc:creator>
      <pubDate>Mon, 28 Nov 2022 02:39:14 +0000</pubDate>
      <link>https://dev.to/rockykev/the-38-books-recommended-to-me-in-the-past-few-months-1d35</link>
      <guid>https://dev.to/rockykev/the-38-books-recommended-to-me-in-the-past-few-months-1d35</guid>
      <description>&lt;p&gt;Half a year ago, I was bumped from a senior developer to managing a team of developers. &lt;br&gt;
Unfamiliar with navigating this world, I asked around about books to help with that next level.&lt;/p&gt;

&lt;p&gt;Rather than keep the list private, I elect to share them here. &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;These are books I have not read yet.
&lt;/li&gt;
&lt;li&gt;This is not a ranking list. Just the title + Description.&lt;/li&gt;
&lt;li&gt;If it's not listed, I may have read it already. &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;These are the 38 books I was recommended to me in the past few months.  &lt;/p&gt;

&lt;p&gt;&lt;em&gt;I took the description from Amazon btw.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Technical Books
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;A Philosophy of Software Design by John Ousterhout&lt;/li&gt;
&lt;li&gt;An Elegant Puzzle: Systems of Engineering Management by Will Larson&lt;/li&gt;
&lt;li&gt;Architecture of Open Source Applications by Robert Chansler, Russell Bryant &amp;amp; 8 more&lt;/li&gt;
&lt;li&gt;Fundamentals of Software Architecture: An Engineering Approach by Mark Richards Neal Ford&lt;/li&gt;
&lt;li&gt;Code Complete (Developer Best Practices) by McConnell Steve&lt;/li&gt;
&lt;li&gt;Code That Fits in Your Head : Heuristics for Software Engineering by Mark Seemann&lt;/li&gt;
&lt;li&gt;Continuous Delivery: Reliable Software Releases Through Build, Test, and Deployment Automation by Jez Humble, David Farley&lt;/li&gt;
&lt;li&gt;Domain Driven Design Distilled by Vaughn Vernon&lt;/li&gt;
&lt;li&gt;Domain Modeling Made Functional: Tackle Software Complexity with Domain-Driven Design and F# by Scott Wlaschin&lt;/li&gt;
&lt;li&gt;Five Lines of Code: How and When to Refactor by Christian Clausen&lt;/li&gt;
&lt;li&gt;Software Engineering at Google: Lessons Learned from Programming Over Time by Titus Winters, Tom Manshreck, Hyrum Wright&lt;/li&gt;
&lt;li&gt;Implementing Domain Driven Design by Vaughn Vernon&lt;/li&gt;
&lt;li&gt;Learning Domain-Driven Design: Aligning Software Architecture and Business Strategy by Vlad Khononov&lt;/li&gt;
&lt;li&gt;Modern Software Engineering by David Farley&lt;/li&gt;
&lt;li&gt;Operating Systems: Three Easy Pieces by Remzi H Arpaci-Dusseau, Andrea C Arpaci-Dusseau&lt;/li&gt;
&lt;li&gt;Site Reliability Engineering: How Google Runs Production Systems by Niall Richard Murphy, Betsy Beyer, Chris Jones, Jennifer Petoff&lt;/li&gt;
&lt;li&gt;Systems Performance by Brendan Gregg&lt;/li&gt;
&lt;li&gt;The Architecture of Open Source Applications by Amy Brown, Greg Wilson&lt;/li&gt;
&lt;li&gt;The Art of Readable Code: Simple and Practical Techniques for Writing Better Code by Dustin Boswell, Trevor Foucher&lt;/li&gt;
&lt;li&gt;The Performance of Open Source Applications by Tavish Armstrong&lt;/li&gt;
&lt;li&gt;Web Scalability for Startup Engineers by Artur Ejsmont&lt;/li&gt;
&lt;li&gt;Working Effectively with Legacy Code by Michael Feathers&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  500 Lines or Less Paperback by Amy Brown, Michael DiBernardo
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;As we pointed out in The Architecture of Open Source Applications, architects look at thousands of buildings during their training, and study the critiques of many more. But most software developers only ever get to know a handful of programs well — usually programs they wrote themselves. This book provides you with the chance to study how 26 experienced programmers think when they are building something new. The programs you will read about in this book were all written from scratch to solve difficult problems. A web server, a pedometer, a Python interpreter, a web-based spreadsheet, and many more applications are written, in 500 lines of code or less, and described by their creators so that you can learn from their insights and their mistakes.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  A Philosophy of Software Design by John Ousterhout
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;This book addresses the topic of software design: how to decompose complex software systems into modules (such as classes and methods) that can be implemented relatively independently. The book first introduces the fundamental problem in software design, which is managing complexity. It then discusses philosophical issues about how to approach the software design process and it presents a collection of design principles to apply during software design. The book also introduces a set of red flags that identify design problems. You can apply the ideas in this book to minimize the complexity of large software systems, so that you can write software more quickly and cheaply.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  An Elegant Puzzle: Systems of Engineering Management by Will Larson
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;"There’s a saying that people don’t leave companies, they leave managers. Management is a key part of any organization, yet the discipline is often self-taught and unstructured. Getting to the good solutions for complex management challenges can make the difference between fulfillment and frustration for teams, and, ultimately, between the success and failure of companies.&lt;/p&gt;

&lt;p&gt;Will Larson’s An Elegant Puzzle focuses on the particular challenges of engineering management—from sizing teams to handling technical debt to performing succession planning—and provides a path to the good solutions. Drawing from his experience at Digg, Uber, and Stripe, Larson has developed a thoughtful approach to engineering management for leaders of all levels at companies of all sizes. An Elegant Puzzle balances structured principles and human-centric thinking to help any leader create more effective and rewarding organizations for engineers to thrive in."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Architecture of Open Source Applications by Robert Chansler, Russell Bryant &amp;amp; 8 more
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;Architects look at thousands of buildings during their training, and study critiques of those buildings written by masters. In contrast, most software developers only ever get to know a handful of large programs well — usually programs they wrote themselves — and never study the great programs of history. As a result, they repeat one another’s mistakes rather than building on one another’s successes. This book’s goal is to change that. In it, the authors of twenty-five open source applications explain how their software is structured, and why. What are each program's major components? How do they interact? And what did their builders learn during their development? In answering these questions, the contributors to this book provide unique insights into how they think.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Fundamentals of Software Architecture: An Engineering Approach by Mark Richards  Neal Ford
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;Salary surveys worldwide regularly place software architect in the top 10 best jobs, yet no real guide exists to help developers become architects. Until now. This book provides the first comprehensive overview of software architecture’s many aspects. Aspiring and existing architects alike will examine architectural characteristics, architectural patterns, component determination, diagramming and presenting architecture, evolutionary architecture, and many other topics.&lt;/p&gt;

&lt;p&gt;Mark Richards and Neal Ford—hands-on practitioners who have taught software architecture classes professionally for years—focus on architecture principles that apply across all technology stacks. You’ll explore software architecture in a modern light, taking into account all the innovations of the past decade."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Code Complete (Developer Best Practices) by McConnell Steve
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;"Widely considered one of the best practical guides to programming, Steve McConnell’s original CODE COMPLETE has been helping developers write better software for more than a decade. Now this classic book has been fully updated and revised with leading-edge practices—and hundreds of new code samples—illustrating the art and science of software construction. Capturing the body of knowledge available from research, academia, and everyday commercial practice, McConnell synthesizes the most effective techniques and must-know principles into clear, pragmatic guidance. No matter what your experience level, development environment, or project size, this book will inform and stimulate your thinking—and help you build the highest quality code.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Code That Fits in Your Head : Heuristics for Software Engineering by Mark Seemann
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;Reflecting decades of experience helping software teams succeed, Mark Seemann guides you from zero (no code) to deployed features and shows how to maintain a good cruising speed as you add functionality, address cross-cutting concerns, troubleshoot, and optimize. You'll find valuable ideas, practices, and processes for key issues ranging from checklists to teamwork, encapsulation to decomposition, API design to unit testing.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Continuous Delivery: Reliable Software Releases Through Build, Test, and Deployment Automation by Jez Humble, David Farley
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;This groundbreaking new book sets out the principles and technical practices that enable rapid, incremental delivery of high quality, valuable new functionality to users. Through automation of the build, deployment, and testing process, and improved collaboration between developers, testers, and operations, delivery teams can get changes released in a matter of hours― sometimes even minutes–no matter what the size of a project or the complexity of its code base.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Domain Driven Design Distilled by Vaughn Vernon
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;Domain-Driven Design (DDD) software modeling delivers powerful results in practice, not just in theory, which is why developers worldwide are rapidly moving to adopt it. Now, for the first time, there’s an accessible guide to the basics of DDD: What it is, what problems it solves, how it works, and how to quickly gain value from it.&lt;/p&gt;

&lt;p&gt;Concise, readable, and actionable, Domain-Driven Design Distilled never buries you in detail–it focuses on what you need to know to get results. Vaughn Vernon, author of the best-selling Implementing Domain-Driven Design, draws on his twenty years of experience applying DDD principles to real-world situations. He is uniquely well-qualified to demystify its complexities, illuminate its subtleties, and help you solve the problems you might encounter.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Domain Modeling Made Functional: Tackle Software Complexity with Domain-Driven Design and F# by Scott Wlaschin
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;You want increased customer satisfaction, faster development cycles, and less wasted work. Domain-driven design (DDD) combined with functional programming is the innovative combo that will get you there. In this pragmatic, down-to-earth guide, you'll see how applying the core principles of functional programming can result in software designs that model real-world requirements both elegantly and concisely - often more so than an object-oriented approach. Practical examples in the open-source F# functional language, and examples from familiar business domains, show you how to apply these techniques to build software that is business-focused, flexible, and high quality.&lt;/p&gt;

&lt;p&gt;Domain-driven design is a well-established approach to designing software that ensures that domain experts and developers work together effectively to create high-quality software. This book is the first to combine DDD with techniques from statically typed functional programming. This book is perfect for newcomers to DDD or functional programming - all the techniques you need will be introduced and explained.&lt;/p&gt;

&lt;p&gt;Model a complex domain accurately using the F# type system, creating compilable code that is also readable documentation---ensuring that the code and design never get out of sync. Encode business rules in the design so that you have "compile-time unit tests," and eliminate many potential bugs by making illegal states unrepresentable. Assemble a series of small, testable functions into a complete use case, and compose these individual scenarios into a large-scale design. Discover why the combination of functional programming and DDD leads naturally to service-oriented and hexagonal architectures. Finally, create a functional domain model that works with traditional databases, NoSQL, and event stores, and safely expose your domain via a website or API.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Five Lines of Code: How and When to Refactor by Christian Clausen
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;Five Lines of Code teaches refactoring that's focused on concrete rules and getting any method down to five lines or less! There’s no jargon or tricky automated-testing skills required, just easy guidelines and patterns illustrated by detailed code samples. &lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Software Engineering at Google: Lessons Learned from Programming Over Time by Titus Winters, Tom Manshreck, Hyrum Wright
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;Today, software engineers need to know not only how to program effectively but also how to develop proper engineering practices to make their codebase sustainable and healthy. This book emphasizes this difference between programming and software engineering.&lt;/p&gt;

&lt;p&gt;How can software engineers manage a living codebase that evolves and responds to changing requirements and demands over the length of its life? Based on their experience at Google, software engineers Titus Winters and Hyrum Wright, along with technical writer Tom Manshreck, present a candid and insightful look at how some of the world’s leading practitioners construct and maintain software. This book covers Google’s unique engineering culture, processes, and tools and how these aspects contribute to the effectiveness of an engineering organization.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Implementing Domain Driven Design by Vaughn Vernon
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;Implementing Domain-Driven Design presents a top-down approach to understanding domain-driven design (DDD) in a way that fluently connects strategic patterns to fundamental tactical programming tools. Vaughn Vernon couples guided approaches to implementation with modern architectures, highlighting the importance and value of focusing on the business domain while balancing technical considerations.&lt;/p&gt;

&lt;p&gt;Building on Eric Evans’ seminal book, Domain-Driven Design, the author presents practical DDD techniques through examples from familiar domains. Each principle is backed up by realistic Java examples–all applicable to C# developers–and all content is tied together by a single case study: the delivery of a large-scale Scrum-based SaaS system for a multitenant environment.&lt;/p&gt;

&lt;p&gt;The author takes you far beyond “DDD-lite” approaches that embrace DDD solely as a technical toolset, and shows you how to fully leverage DDD’s “strategic design patterns” using Bounded Context, Context Maps, and the Ubiquitous Language. Using these techniques and examples, you can reduce time to market and improve quality, as you build software that is more flexible, more scalable, and more tightly aligned to business goals.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Learning Domain-Driven Design: Aligning Software Architecture and Business Strategy by Vlad Khononov
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;"Building software is harder than ever. As a developer, you not only have to chase ever-changing technological trends but also need to understand the business domains behind the software. This practical book provides you with a set of core patterns, principles, and practices for analyzing business domains, understanding business strategy, and, most importantly, aligning software design with its business needs.&lt;/p&gt;

&lt;p&gt;Author Vlad Khononov shows you how these practices lead to robust implementation of business logic and help to future-proof software design and architecture. You'll examine the relationship between domain-driven design (DDD) and other methodologies to ensure you make architectural decisions that meet business requirements. You'll also explore the real-life story of implementing DDD in a startup company."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Modern Software Engineering by David Farley
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;"In Modern Software Engineering, continuous delivery pioneer David Farley helps software professionals think about their work more effectively, manage it more successfully, and genuinely improve the quality of their applications, their lives, and the lives of their colleagues.&lt;/p&gt;

&lt;p&gt;Writing for programmers, managers, and technical leads at all levels of experience, Farley illuminates durable principles at the heart of effective software development. He distills the discipline into two core exercises: learning and exploration and managing complexity. For each, he defines principles that can help you improve everything from your mindset to the quality of your code, and describes approaches proven to promote success."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Operating Systems: Three Easy Pieces by Remzi H Arpaci-Dusseau, Andrea C Arpaci-Dusseau
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;OSTEP ("oh step"), or the "the comet book", represents the culmination of years of teaching intro to operating systems to both undergraduates and graduates at the University of Wisconsin-Madison Computer Sciences department for nearly 20 years.The book is organized around three concepts fundamental to OS construction: virtualization (of CPU and memory), concurrency (locks and condition variables), and persistence (disks, RAIDS, and file systems).The material, if combined with serious project work and homeworks, will lead students to a deeper understanding and appreciation of modern OSes.The authors, Remzi and Andrea Arpaci-Dusseau, are both professors of Computer Sciences at the University of Wisconsin-Madison. They have been doing research in computer systems for over 20 years, working together since their first graduate operating systems class at U.C. Berkeley in 1993.Since that time, they have published over 100 papers on the performance and reliability of many aspects of modern computer systems, with a special focus on file and storage systems. Their work has been recognized with numerous best-paper awards, and some of their innovations can be found in the Linux and BSD operating systems today.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Site Reliability Engineering: How Google Runs Production Systems by Niall Richard Murphy, Betsy Beyer, Chris Jones, Jennifer Petoff
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;At most technology companies, you'll reach Senior software engineer, the career level for software engineers, in five to eight years. At the career level, your company's career ladder won't require that you work towards the next promotion; being promoted further is an exception rather than expected. This is also when many engineers are first given an opportunity to move into engineering management. Over the past few years, we've seen a flurry of books unlocking the engineering management career path, like Camille Fournier's The Manager's Path, Julie Zhuo's The Making of a Manager, Lara Hogan's Resilient Management, and even my own An Elegant Puzzle. The engineering management career isn't an easy one, but there are maps available to help navigate it. What if you want to advance your career without becoming an engineering manager? The technical leadership path remains relatively undocumented, hard to navigate, and inconsistent across companies. Staff Engineer is your guide to building your career towards a Staff engineering role, receiving the title, and succeeding within the role.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Systems Performance by Brendan Gregg
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;Systems Performance, Second Edition, covers concepts, strategy, tools, and tuning for operating systems and applications, using Linux-based operating systems as the primary example. A deep understanding of these tools and techniques is critical for developers today. Implementing the strategies described in this thoroughly revised and updated edition can lead to a better end-user experience and lower costs, especially for cloud computing environments that charge by the OS instance.&lt;/p&gt;

&lt;p&gt;Systems performance expert and best-selling author Brendan Gregg summarizes relevant operating system, hardware, and application theory to quickly get professionals up to speed even if they have never analyzed performance before. Gregg then provides in-depth explanations of the latest tools and techniques, including extended BPF, and shows how to get the most out of cloud, web, and large-scale enterprise systems.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  The Architecture of Open Source Applications by Amy Brown, Greg Wilson
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;Architects look at thousands of buildings during their training, and study critiques of those buildings written by masters. In contrast, most software developers only ever get to know a handful of large programs well — usually programs they wrote themselves — and never study the great programs of history. As a result, they repeat one another’s mistakes rather than building on one another’s successes. This book’s goal is to change that. In it, the authors of twenty-five open source applications explain how their software is structured, and why. What are each program's major components? How do they interact? And what did their builders learn during their development? In answering these questions, the contributors to this book provide unique insights into how they think.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  The Art of Readable Code: Simple and Practical Techniques for Writing Better Code by Dustin Boswell, Trevor Foucher
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;As programmers, we’ve all seen source code that’s so ugly and buggy it makes our brain ache. Over the past five years, authors Dustin Boswell and Trevor Foucher have analyzed hundreds of examples of "bad code" (much of it their own) to determine why they’re bad and how they could be improved. Their conclusion? You need to write code that minimizes the time it would take someone else to understand it—even if that someone else is you.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This book focuses on basic principles and practical techniques you can apply every time you write code. Using easy-to-digest code examples from different languages, each chapter dives into a different aspect of coding, and demonstrates how you can make your code easy to understand.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Performance of Open Source Applications by Tavish Armstrong
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;In 1974, Donald Knuth wrote, "We should forget about small efficiencies, say about 97% of the time: premature optimization is the root of all evil." With computers available now that are millions of times faster than those available then, today's programmers have even less reason to worry about shaving cycles and saving bytes than those a generation ago. But "less" isn't "none": every once in a while, squeezing the last ounce of performance out of the machine really does matter.&lt;/p&gt;

&lt;p&gt;This book is written by over a dozen developers who have grappled with slow code, memory leaks, or uncontrollable latency in open source software. They share their mistakes and successes, and give the reader an over-the-shoulder view of how they approached their specific challenges. With examples from bioinformatics research code to web browsers, the solutions are as varied as the problems.&lt;/p&gt;

&lt;p&gt;This book will help junior and senior developers alike understand how their colleagues think about performance.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Web Scalability for Startup Engineers by Artur Ejsmont
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;Web Scalability for Startup Engineers shows engineers working at startups and small companies how to plan and implement a comprehensive scalability strategy. It presents broad and holistic view of infrastructure and architecture of a scalable web application. Successful startups often face the challenge of scalability, and the core concepts driving a scalable architecture are language and platform agnostic.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The book covers scalability of HTTP-based systems (websites, REST APIs, SaaS, and mobile application backends), starting with a high-level perspective before taking a deep dive into common challenges and issues. This approach builds a holistic view of the problem, helping you see the big picture, and then introduces different technologies and best practices for solving the problem at hand. The book is enriched with the author's real-world experience and expert advice, saving you precious time and effort by learning from others' mistakes and successes.&lt;/p&gt;

&lt;h3&gt;
  
  
  Working Effectively with Legacy Code by Michael Feathers
&lt;/h3&gt;

&lt;p&gt;This book provides programmers with the ability to cost effectively handlecommon legacy code problems without having to go through the hugelyexpensive task of rewriting all existing code. It describes a series of practicalstrategies that developers can employ to bring their existing softwareapplications under control. The author provides useful guidance about how touse these strategies when refactoring or making functional changes to codebases. One of the book's key points is that it teaches developers to write teststhat can be used to make sure they are not unintentionally changing theapplication as they optimize it. Examples are provided in Java, C++, and Csharp,and the book assumes that the reader has some knowledge of UMLnotation. Strategies using UML and code in C++ and Java primarily whilelanguage independent advice will be delivered in side bars and appendices forlanguage specific users.&lt;/p&gt;

&lt;h2&gt;
  
  
  Management Books
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Accelerate: The Science of Lean Software and DevOps: Building and Scaling High Performing Technology Organizations by Nicole Forsgren PhD, Jez Humble, Gene Kim&lt;/li&gt;
&lt;li&gt;RESILIENT MANAGEMENT by Lara Hogan&lt;/li&gt;
&lt;li&gt;Peopleware: Productive Projects and Teams by DeMarco Tom, Lister Tim&lt;/li&gt;
&lt;li&gt;Psychology of computer programming Paperback by mr. Gerald m Weinberg&lt;/li&gt;
&lt;li&gt;Radical Candor: Be a Kick-Ass Boss Without Losing Your Humanity by Kim Scott&lt;/li&gt;
&lt;li&gt;The Software Architect Elevator: Redefining the Architect's Role in the Digital Enterprise by Gregor Hohpe&lt;/li&gt;
&lt;li&gt;Staff Engineer: Leadership beyond the management track by Will Larson&lt;/li&gt;
&lt;li&gt;Team Topologies: Organizing Business and Technology Teams for Fast Flow by Matthew Skelton, Manuel Pais&lt;/li&gt;
&lt;li&gt;The Making of a Manager: What to Do When Everyone Looks to You by Julie Zhuo&lt;/li&gt;
&lt;li&gt;The Staff Engineer's Path by Tanya Reilly&lt;/li&gt;
&lt;li&gt;Grokking Simplicity: Taming complex software with functional thinking by Eric Normand&lt;/li&gt;
&lt;li&gt;Rapid Development: Taming Wild Software Schedules by Steve McConnell&lt;/li&gt;
&lt;li&gt;Waltzing With Bears: Managing Risk on Software Projects by Tom DeMarco, Timothy Lister&lt;/li&gt;
&lt;li&gt;Release It!: Design and Deploy Production-Ready Software by Michael T. Nygard&lt;/li&gt;
&lt;li&gt;The Art of Doing Science and Engineering: Learning to Learn by Richard W. Hamming&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Accelerate: The Science of Lean Software and DevOps: Building and Scaling High Performing Technology Organizations by Nicole Forsgren PhD, Jez Humble, Gene Kim
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;How can we apply technology to drive business value? For years, we've been told that the performance of software delivery teams doesn't matter―that it can't provide a competitive advantage to our companies. Through four years of groundbreaking research to include data collected from the State of DevOps reports conducted with Puppet, Dr. Nicole Forsgren, Jez Humble, and Gene Kim set out to find a way to measure software delivery performance―and what drives it―using rigorous statistical methods. This book presents both the findings and the science behind that research, making the information accessible for readers to apply in their own organizations.&lt;br&gt;
Readers will discover how to measure the performance of their teams, and what capabilities they should invest in to drive higher performance. This book is ideal for management at every level.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  RESILIENT MANAGEMENT by Lara Hogan
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;Finding your bearings as a manager can feel overwhelming—but you don’t have to fake it to make it, and you don’t have to go it alone. Lara Hogan shares her recipe for supporting and leading a tech team—from developing your mentoring and coaching skills, to getting comfortable with having difficult conversations, to boosting trust among teammates—while staying grounded along the way.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Peopleware: Productive Projects and Teams by DeMarco Tom, Lister Tim
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;Few books in computing have had as profound an influence on software management as Peopleware. The unique insight of this longtime best seller is that the major issues of software development are human, not technical. They’re not easy issues; but solve them, and you’ll maximize your chances of success.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Psychology of computer programming Paperback by mr. Gerald m Weinberg
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;This book has only one major purpose-to trigger the beginning of a new field of study: computer programming as a human activity, or, in short, the psychology of computer programming. All other goals are subservient to that one. For instance, I have tried to make the book interesting and nontechnical, insofar as is possible, so as to encourage the greatest number of people to read it: not just programmers, but programming managers and others connected with programming in the many ways we are connected with programming these days. What I am trying to accomplish is to have the reader say, upon finishing the book, "Yes, programming is not just a matter of hardware and software. I shall have to look at things in a new way from now on."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Radical Candor: Be a Kick-Ass Boss Without Losing Your Humanity by Kim Scott
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;Radical Candor has been embraced around the world by leaders of every stripe at companies of all sizes. Now a cultural touchstone, the concept has come to be applied to a wide range of human relationships.&lt;/p&gt;

&lt;p&gt;The idea is simple: You don't have to choose between being a pushover and a jerk. Using Radical Candor—avoiding the perils of Obnoxious Aggression, Manipulative Insincerity, and Ruinous Empathy—you can be kind and clear at the same time.&lt;/p&gt;

&lt;p&gt;Kim Scott was a highly successful leader at Google before decamping to Apple, where she developed and taught a management class. Since the original publication of Radical Candor in 2017, Scott has earned international fame with her vital approach to effective leadership and co-founded the Radical Candor executive education company, which helps companies put the book's philosophy into practice.&lt;/p&gt;

&lt;p&gt;Radical Candor is about caring personally and challenging directly, about soliciting criticism to improve your leadership and also providing guidance that helps others grow. It focuses on praise but doesn't shy away from criticism—to help you love your work and the people you work with."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  The Software Architect Elevator: Redefining the Architect's Role in the Digital Enterprise by Gregor Hohpe
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;As the digital economy changes the rules of the game for enterprises, the role of software and IT architects is also transforming. Rather than focus on technical decisions alone, architects and senior technologists need to combine organizational and technical knowledge to effect change in their company’s structure and processes. To accomplish that, they need to connect the IT engine room to the penthouse, where the business strategy is defined.&lt;/p&gt;

&lt;p&gt;In this guide, author Gregor Hohpe shares real-world advice and hard-learned lessons from actual IT transformations. His anecdotes help architects, senior developers, and other IT professionals prepare for a more complex but rewarding role in the enterprise.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Staff Engineer: Leadership beyond the management track by Will Larson
&lt;/h3&gt;

&lt;p&gt;At most technology companies, you'll reach Senior software engineer, the career level for software engineers, in five to eight years. At the career level, your company's career ladder won't require that you work towards the next promotion; being promoted further is an exception rather than expected. This is also when many engineers are first given an opportunity to move into engineering management. Over the past few years, we've seen a flurry of books unlocking the engineering management career path, like Camille Fournier's The Manager's Path, Julie Zhuo's The Making of a Manager, Lara Hogan's Resilient Management, and even my own An Elegant Puzzle. The engineering management career isn't an easy one, but there are maps available to help navigate it. What if you want to advance your career without becoming an engineering manager? The technical leadership path remains relatively undocumented, hard to navigate, and inconsistent across companies. Staff Engineer is your guide to building your career towards a Staff engineering role, receiving the title, and succeeding within the role.&lt;/p&gt;

&lt;h3&gt;
  
  
  Team Topologies: Organizing Business and Technology Teams for Fast Flow by Matthew Skelton, Manuel Pais
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;Effective software teams are essential for any organization to deliver value continuously and sustainably. But how do you build the best team organization for your specific goals, culture, and needs?&lt;/p&gt;

&lt;p&gt;Team Topologies is a practical, step-by-step, adaptive model for organizational design and team interaction based on four fundamental team types and three team interaction patterns. It is a model that treats teams as the fundamental means of delivery, where team structures and communication pathways are able to evolve with technological and organizational maturity.&lt;/p&gt;

&lt;p&gt;In Team Topologies, IT consultants Matthew Skelton and Manuel Pais share secrets of successful team patterns and interactions to help readers choose and evolve the right team patterns for their organization, making sure to keep the software healthy and optimize value streams.&lt;/p&gt;

&lt;p&gt;Team Topologies is a major step forward in organizational design for software, presenting a well-defined way for teams to interact and interrelate that helps make the resulting software architecture clearer and more sustainable, turning inter-team problems into valuable signals for the self-steering organization.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  The Making of a Manager: What to Do When Everyone Looks to You by Julie Zhuo
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;Congratulations, you're a manager! After you pop the champagne, accept the shiny new title, and step into this thrilling next chapter of your career, the truth descends like a fog: You don't really know what you're doing.&lt;/p&gt;

&lt;p&gt;That's exactly how Julie Zhuo felt when she became a rookie manager at the age of 25. She stared at a long list of logistics - from hiring to firing, from meeting to messaging, from planning to pitching - and faced a thousand questions and uncertainties. How was she supposed to spin teamwork into value? How could she be a good steward of her reports' careers? What was the secret to leading with confidence in new and unexpected situations?&lt;/p&gt;

&lt;p&gt;Now, having managed dozens of teams spanning tens to hundreds of people, Julie knows the most important lesson of all: Great managers are made, not born. If you care enough to be reading this, then you care enough to be a great manager. "&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  The Manager's Path: A Guide for Tech Leaders Navigating Growth and Change by Camille Fournier
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;Managing people is difficult wherever you work. But in the tech industry, where management is also a technical discipline, the learning curve can be brutal - especially when there are few tools, texts, and frameworks to help you. In this practical guide, author Camille Fournier (tech lead turned CTO) takes you through each stage in the journey from engineer to technical manager.&lt;/p&gt;

&lt;p&gt;From mentoring interns to working with senior staff, you'll get actionable advice for approaching various obstacles in your path. This book is ideal whether you're a new manager, a mentor, or a more experienced leader looking for fresh advice. Listen to this audiobook and learn how to become a better manager and leader in your organization.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  The Staff Engineer's Path by Tanya Reilly
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;For years, companies have rewarded their most effective engineers with management positions. But treating management as the default path for an engineer with leadership ability doesn't serve the industry well--or the engineer. The staff engineer's path allows engineers to contribute at a high level as role models, driving big projects, determining technical strategy, and raising everyone's skills.&lt;/p&gt;

&lt;p&gt;This in-depth book shows you how to understand your role, manage your time, master strategic thinking, and set the standard for technical work. You'll read about how to be a leader without direct authority, how to plan ahead to make the right technical decisions, and how to make everyone around you better, while still growing as an expert in your domain.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Grokking Simplicity: Taming complex software with functional thinking by Eric Normand
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;Distributed across servers, difficult to test, and resistant to modification - modern software is complex. Grokking Simplicity is a friendly, practical guide that will change the way you approach software design and development. It introduces a unique approach to functional programming that explains why certain features of software are prone to complexity, and teaches you the functional techniques you can use to simplify these systems so that they’re easier to test and debug.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Rapid Development: Taming Wild Software Schedules by Steve McConnell
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;Corporate and commercial software-development teams all want solutions for one important problem―how to get their high-pressure development schedules under control. In RAPID DEVELOPMENT, author Steve McConnell addresses that concern head-on with overall strategies, specific best practices, and valuable tips that help shrink and control development schedules and keep projects moving. &lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Waltzing With Bears: Managing Risk on Software Projects by Tom DeMarco, Timothy Lister
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;Any software project that's worth starting will be vulnerable to risk. Since greater risks bring greater rewards, a company that runs away from risk will soon find itself lagging behind its more adventurous competition. By ignoring the threat of negative outcomes—in the name of positive thinking or a Can-Do attitude—software managers drive their organizations into the ground.&lt;/p&gt;

&lt;p&gt;In Waltzing with Bears, Tom DeMarco and Timothy Lister—the best-selling authors of Peopleware—show readers how to identify and embrace worthwhile risks. Developers are then set free to push the limits.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Release It!: Design and Deploy Production-Ready Software by Michael T. Nygard
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;A single dramatic software failure can cost a company millions of dollars - but can be avoided with simple changes to design and architecture. This new edition of the best-selling industry standard shows you how to create systems that run longer, with fewer failures, and recover better when bad things happen. New coverage includes DevOps, microservices, and cloud-native architecture. Stability antipatterns have grown to include systemic problems in large-scale systems. This is a must-have pragmatic guide to engineering for production systems.&lt;/p&gt;

&lt;p&gt;If you're a software developer, and you don't want to get alerts every night for the rest of your life, help is here. With a combination of case studies about huge losses - lost revenue, lost reputation, lost time, lost opportunity - and practical, down-to-earth advice that was all gained through painful experience, this book helps you avoid the pitfalls that cost companies millions of dollars in downtime and reputation. Eighty percent of project life-cycle cost is in production, yet few books address this topic.&lt;/p&gt;

&lt;p&gt;This updated edition deals with the production of today's systems - larger, more complex, and heavily virtualized - and includes information on chaos engineering, the discipline of applying randomness and deliberate stress to reveal systematic problems. Build systems that survive the real world, avoid downtime, implement zero-downtime upgrades and continuous delivery, and make cloud-native applications resilient. Examine ways to architect, design, and build software - particularly distributed systems - that stands up to the typhoon winds of a flash mob, a Slashdotting, or a link on Reddit. Take a hard look at software that failed the test and find ways to make sure your software survives.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  The Art of Doing Science and Engineering: Learning to Learn by Richard W. Hamming
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;What inspires and spurs on a great idea? Can we train ourselves to think in a way that will enable world-changing understandings and insights to emerge?&lt;/p&gt;

&lt;p&gt;Richard Hamming said we can. He first inspired a generation of engineers, scientists, and researchers in 1986 with “You and Your Research,” an electrifying sermon on why some scientists do great work, why most don’t, why he did, and why you can—and should—too. The Art of Doing Science and Engineering is the full expression of what “You and Your Research” outlined. It's a book about thinking; more specifically, a style of thinking by which great ideas are conceived.&lt;/p&gt;

&lt;p&gt;The book is filled with stories of great people performing mighty deeds—but they are not meant simply to be admired. Instead, they are to be aspired to, learned from, and surpassed. Hamming consistently returns to Shannon’s information theory, Einstein’s theory of relativity, Grace Hopper’s work on high-level programming, Kaiser’s work on digital fillers, and his own work on error-correcting codes. He also recounts a number of his spectacular failures as clear examples of what to avoid.&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>recommendations</category>
      <category>books</category>
      <category>pm</category>
      <category>seniordev</category>
    </item>
    <item>
      <title>From Dev to Leading: How I Trained New Hires</title>
      <dc:creator>Rocky Kev</dc:creator>
      <pubDate>Sun, 12 Jun 2022 22:47:52 +0000</pubDate>
      <link>https://dev.to/rockykev/5-principles-i-followed-to-onboard-new-devs-and-keep-my-sanity-a-retrospect-38i7</link>
      <guid>https://dev.to/rockykev/5-principles-i-followed-to-onboard-new-devs-and-keep-my-sanity-a-retrospect-38i7</guid>
      <description>&lt;p&gt;It's officially been more than a month since &lt;a href="https://dev.to/rockykev/what-new-hires-think-about-3i99"&gt;new hires joined my team&lt;/a&gt;, and I'm proud to say they've been pretty successfully onboarded. &lt;/p&gt;

&lt;p&gt;A few months ago, I shifted from &lt;strong&gt;Wizbang Codemonkey&lt;/strong&gt; to &lt;strong&gt;Lead Cat Wrangler&lt;/strong&gt; (non-official titles obviously). My team went from six devs to thirteen in less than a year. And I would be in charge of managing a brand new team, as WELL as all the new hires. The &lt;a href="https://en.wikipedia.org/wiki/Peter_principle"&gt;Peter Principle&lt;/a&gt; is always a concern. &lt;em&gt;(tl;dr - you get promoted up and up until you fail.)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The business went, "Like your new team? Btw, here are 4 new hires. A junior, 2 mid-levels, and a senior. Okay byeeeeeee!"&lt;/p&gt;

&lt;p&gt;How does this feel? Jim Gaffigan said it best.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--C-S59Tk1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://pbs.twimg.com/media/DXsbmBeW4AEB_RL.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--C-S59Tk1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://pbs.twimg.com/media/DXsbmBeW4AEB_RL.jpg" alt="Imagine you're drowning and someone hands you a baby" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It took me a while to see this perspective. As a developer, in a nutshell - our job is to solve problems, but with code. We create a set of processes (a system) and run down the list. We pivot as you discover new problems. We keep working until the hit the finish line. &lt;/p&gt;

&lt;p&gt;4 new hires at multiple levels of experience? This is just a new problem! Life is defined by the challenges you face. And I got this! 💪&lt;/p&gt;

&lt;p&gt;This post will cover the 5 Principles I followed. I hope it's educational. And if 10... 20... 100 devs are thrown at me, this process continues to scale.&lt;/p&gt;

&lt;h2&gt;
  
  
  What do new hires think about?
&lt;/h2&gt;

&lt;p&gt;Tech interviews are a 💩-show. So no surprise that new hires have a lot of unknowns. For example: Where do I go to get questions answered? Who is this person? What is this tech stack? What is this in-house term? Am I doing this right?&lt;/p&gt;

&lt;p&gt;I wrote the full list in my post: &lt;a href="https://dev.to/rockykev/what-new-hires-think-about-3i99"&gt;What New Hires think about&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As a &lt;strong&gt;Lead Cat Wrangler&lt;/strong&gt; and a person in power (I can choose the toppings for the lunch pizza!) - do I continue contributing to the 'Sink-or-Swim' methodology that plagues many companies in the tech industry? &lt;/p&gt;

&lt;p&gt;Or do I &lt;a href="https://dev.to/rockykev/these-6-rules-created-a-really-dope-culture-at-my-job-5fj5"&gt;continue expanding on the dope culture&lt;/a&gt; that I want through onboarding, nurturing, and growth?&lt;/p&gt;

&lt;h2&gt;
  
  
  The Principles of managing new hires successfully
&lt;/h2&gt;

&lt;p&gt;In the book "Principles", the author Ray Dalio, lays down a framework based on the unique company culture he developed while running Bridgewater Associates.&lt;/p&gt;

&lt;p&gt;I like the term &lt;strong&gt;"Principles"&lt;/strong&gt;. These aren't facts or laws. They're systems that with practice, can lead to success. They might require some rejiggering from company to company. But they can fit into any training system. For example, &lt;a href="https://www.artofmanliness.com/health-fitness/fitness/the-burpee-the-one-exercise-to-rule-them-all/"&gt;the burpee&lt;/a&gt; is considered one of the best exercises to incorporate. Use it separately, put it in a routine, or remix it into some P90x, and it still works! &lt;/p&gt;

&lt;p&gt;This post is a retrospect of the principles I followed to achieve the following:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Train four new hires (junior, 2 mid-level, and a senior dev)&lt;/li&gt;
&lt;li&gt;Build up a new team with some new rituals&lt;/li&gt;
&lt;li&gt;Manage chaos and new business objectives&lt;/li&gt;
&lt;li&gt;Pretend like I'm in control and not secretly wanting to hide under my desk until the pain stops&lt;/li&gt;
&lt;li&gt;Avoid hating programming (like what &lt;a href="https://dev.to/rockykev/how-i-became-a-developer-in-about-15-years-552k"&gt;happened 15+ years ago&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--PORaFmy7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.imgur.com/jRGXhvw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--PORaFmy7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.imgur.com/jRGXhvw.png" alt="Sarah Scribble's webcomic - internal screaming" width="880" height="924"&gt;&lt;/a&gt;&lt;br&gt;
Via &lt;a href="https://twitter.com/sarahcandersen/status/826815552651935744"&gt;Sarah Andersen&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I'm fortunate enough to have a background in a lot of different companies/onboarding styles, and working in the online education space. So these principles come from theories in higher education, executive coaching, and personal development.&lt;/p&gt;

&lt;h2&gt;
  
  
  Principle 1: Eliminate Bottlenecks, Including You
&lt;/h2&gt;

&lt;p&gt;As &lt;strong&gt;Wizbang Codemonkey&lt;/strong&gt;, I was thrown into the sun and told to come back with fire. (Call me &lt;strong&gt;Prometheus&lt;/strong&gt; because I bring back the 🔥🔥🔥)&lt;/p&gt;

&lt;p&gt;As a new &lt;strong&gt;Lead Cat Wrangler&lt;/strong&gt;, I can't solve problems, manage every new problem, AND teach new hires. The industry is paved with the bones of burned-out developers who think only they can solve everything.&lt;/p&gt;

&lt;p&gt;I had to trust people to solve problems without me. &lt;/p&gt;

&lt;p&gt;You might say, "But only I can solve that problem!" &lt;/p&gt;

&lt;p&gt;Why is that?&lt;/p&gt;

&lt;p&gt;To successfully cat wrangle, I need to create processes where I can offload work quickly and trust that the developer in charge has everything they need to close that loop.&lt;/p&gt;

&lt;p&gt;Sakichi Toyoda, the founder of Toyota Motor Company and the father of Japanese Industrialization, created the &lt;a href="https://jeffmcneill.com/sakichi-toyoda-and-the-five-whys-root-cause-analysis/"&gt;5 Whys system for Root Cause Analysis&lt;/a&gt;. You keep asking 'why' the problem even occurred. &lt;/p&gt;

&lt;p&gt;If I'm the only one who can solve a specific problem, then what needs to happen where I'm not the bottleneck?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;As a dev example:&lt;/strong&gt; if you modify one data point, and it creates side effects somewhere else? Your system is too tightly coupled! If I get sick for two days, I should not crash the system.&lt;/p&gt;

&lt;p&gt;One solution is to provide enough documentation and code examples to get progress going. (Check out Principle 3 &amp;amp; 4)&lt;/p&gt;

&lt;p&gt;Other times, the solution is to isolate the hard parts. Break tickets into pieces - some for new hires, and some for specialists. &lt;/p&gt;

&lt;p&gt;Additionally, trust goes both ways. Code may not be how you would have solved it. But then you're being a dependency again, which is a recipe for disaster. &lt;strong&gt;Perfect is the enemy of the good&lt;/strong&gt;. (And you can ALWAYS make refactor tickets to clean things up in the future and make it part of your todos. Check out &lt;a href="https://philippe.bourgau.net/how-to-convince-your-business-to-sponsor-a-large-scale-refactoring/"&gt;How to convince your boss to refactor&lt;/a&gt;.)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;FURTHER READING&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://www.effectiveengineer.com/blog/beware-the-one-person-team"&gt;Beware the One-person team&lt;/a&gt; via EffectiveEngineer&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://betterprogramming.pub/falling-down-the-reality-of-developer-burnout-59c9079446ef"&gt;The Reality of Dev Burnout&lt;/a&gt; via BetterProgramming&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://mindsers.blog/post/decouple-your-code/"&gt;Decouple your code&lt;/a&gt; via Mindsers Blog&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://en.wikipedia.org/wiki/The_Goal_(novel)"&gt;The Goal&lt;/a&gt; and &lt;a href="https://www.goodreads.com/en/book/show/17255186-the-phoenix-project"&gt;The Phoenix project&lt;/a&gt; (Book recommendations) &lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Principles 2: Organize or Die ☠️
&lt;/h2&gt;

&lt;p&gt;The rules of &lt;a href="https://fs.blog/maker-vs-manager/"&gt;Maker Time Vs Manager Time&lt;/a&gt; are pretty simple. Managers do work by going into meetings. Makers need uninterrupted time to focus. A quick "hey you busy?" can cost a developer &lt;a href="https://www.washingtonpost.com/news/inspired-life/wp/2015/06/01/interruptions-at-work-can-cost-you-up-to-6-hours-a-day-heres-how-to-avoid-them/"&gt;23 minutes and 15 seconds just to get back to where they left off&lt;/a&gt; (&lt;em&gt;But whos counting amirite?&lt;/em&gt;)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--LblG1oIZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.imgur.com/TB87Z1m.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--LblG1oIZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.imgur.com/TB87Z1m.png" alt="maker vs manager" width="880" height="665"&gt;&lt;/a&gt;&lt;br&gt;
(image via &lt;a href="https://blog.doist.com/makers-schedule-remote-work/"&gt;https://blog.doist.com/makers-schedule-remote-work/&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;As &lt;strong&gt;Wizbang Codemonkey&lt;/strong&gt;, I can do long uninterrupted periods to focus on solving a technical issue.&lt;/p&gt;

&lt;p&gt;As a new &lt;strong&gt;Lead Cat Wrangler&lt;/strong&gt;, I get emails and DMs from project managers, all day ev'ry day. &lt;/p&gt;

&lt;p&gt;Looks like &lt;strong&gt;Maker Time&lt;/strong&gt; no longer apply to me. :-(&lt;/p&gt;

&lt;p&gt;I approached this by: &lt;/p&gt;

&lt;p&gt;1) &lt;strong&gt;Still have a maker mindset.&lt;/strong&gt; I still timebox. Nobody talks to me during these hours.&lt;br&gt;
2) &lt;strong&gt;Dedicated times for support.&lt;/strong&gt; Treat it like college Open Office hours. I don't respond immediately unless I have to.&lt;br&gt;
3) &lt;strong&gt;Relying on checklists&lt;/strong&gt;. Remember when ego-centric surgeons refused to use checklists, but the &lt;a href="https://www.hsph.harvard.edu/news/magazine/fall08checklist/"&gt;ones that did reduced death by 40%?&lt;/a&gt;&lt;br&gt;
4) &lt;strong&gt;Never trusting my memory.&lt;/strong&gt; Everything becomes a note to review or a to-do to take action on. What gets written gets done.&lt;/p&gt;

&lt;p&gt;As new business expectations occurred, I moved my calendar around. &lt;/p&gt;

&lt;p&gt;As the new hires needed less support, I decreased my 'helping' time. &lt;/p&gt;

&lt;p&gt;As new patterns arose, I updated my checklist. &lt;/p&gt;

&lt;p&gt;If I ever dropped the ball, I make a mini-retrospective of why that happened and generate plans to mitigate that, and focus on continuous improvement.&lt;/p&gt;

&lt;p&gt;This system isn't perfect. It continues to evolve.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;FURTHER READING&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://hbr.org/2018/12/how-timeboxing-works-and-why-it-will-make-you-more-productive"&gt;How Timeboxing works&lt;/a&gt; and &lt;a href="https://hbr.org/2017/09/stop-letting-email-control-your-work-day"&gt;Stop Letting email control your workday&lt;/a&gt; by Haravard Business Review&lt;/li&gt;
&lt;li&gt;How to organize and get things done &lt;a href="https://ericaheinz.com/notes/how-i-use-workflowy-to-get-things-done/"&gt;With Workflowy&lt;/a&gt;, &lt;a href="https://lifehacker.com/how-to-use-mind-maps-to-unleash-your-brains-creativity-1348869811"&gt;with Mindmaps&lt;/a&gt;, &lt;a href="https://nira.com/notion-project-management/"&gt;With Notion&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://blog.kainexus.com/improvement-disciplines/kaizen/kaizen-program-management-the-fundamentals"&gt;Kaizen Project Management&lt;/a&gt;  and &lt;a href="https://jamesclear.com/continuous-improvement"&gt;The Power of 1% gains&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Principle 3: Provide many mechanisms for growth
&lt;/h2&gt;

&lt;p&gt;Everyone learns differently. It's why we have so many &lt;a href="https://resilienteducator.com/classroom-resources/5-types-of-classroom-teaching-styles/"&gt;different teaching styles&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;My team of devs are big on being learners. It's why I encourage my team to buy courses and dedicate time to studying at least once a month. For the managers who don't dedicate resources to studying: What if we train them and they leave? &lt;a href="https://www.peakindicators.com/blog/what-if-we-train-them-they-leave-what-if-we-don-t-they-stay"&gt;What if you don't and they stayed?&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Empowerment through learning and growth
&lt;/h3&gt;

&lt;p&gt;The 4 new hires are: a junior, 2 mid-levels, and a senior.&lt;/p&gt;

&lt;p&gt;Imagine being in a classroom teaching Lego crafting of different skillsets.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;To the Junior&lt;/strong&gt; -&amp;gt; "Good job! This combination of random blocks does look like a house! Great job!"&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;To the senior&lt;/strong&gt; -&amp;gt; "Your Millenial Falcon is supposed to use Round 2x2 Bricks, not Round Corner 2x2s! What do they teach you in Lego school?!"&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In other words, skill level affects how you teach new hires. In education, academic boredom or over-complexity can lead to bad learning outcomes. This leads to a &lt;strong&gt;Goldilocks principle&lt;/strong&gt; of "just right". But "just right" doesn't scale!&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The added confusion: &lt;br&gt;
In the web dev industry, I have met a lot of devs with a decade in the industry, but &lt;a href="https://www.linkedin.com/pulse/do-you-have-10-years-experience-just-1-year-repeated-times-mackay/"&gt;1-year of experience 10 times&lt;/a&gt;. You know, the ones who built websites since the late 2000s but still use &lt;code&gt;floats&lt;/code&gt;. The ones who never went deep in their architecture and still zip files as source control. The ones who gave my company bad reviews on Glassdoor because they refused to continue their education and Bootcamp students have more modern development skills than they do. And no IM NOT BITTER THANKS FOR ASKING.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Additionally - job titles such as &lt;strong&gt;junior, mid-level&lt;/strong&gt;, and &lt;strong&gt;senior&lt;/strong&gt; are kinda meaningless to training.&lt;/p&gt;

&lt;p&gt;In the book &lt;a href="https://pragprog.com/titles/tpp20/the-pragmatic-programmer-20th-anniversary-edition/"&gt;Pragmatic Programmers&lt;/a&gt;, the authors Andrew Hunt and David Thomas reuse the &lt;a href="https://www.bumc.bu.edu/facdev-medicine/files/2012/03/Dreyfus-skill-level.pdf"&gt;Dreyfus Model&lt;/a&gt; for how developers at different stages of their skillset prefer to learn.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Stage 1 - Novices:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;ACTION: &lt;em&gt;Novices need recipes.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Tell them how to do things. Novices are very concerned about succeeding. They don't want to learn everything, they want to accomplish their immediate goal.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Stage 2 - Advanced Beginners:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;ACTION: &lt;em&gt;Advanced beginners don't want the big picture.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;They have some confidence to do things on their own and can start using the advice in the correct context. But they don't want lengthy theories or be spoon-fed the basics again. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--wqLO6xLH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://moleseyhill.com/images/dreyfus-model.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--wqLO6xLH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://moleseyhill.com/images/dreyfus-model.png" alt="The Dreyfus Model" width="589" height="370"&gt;&lt;/a&gt; (Via &lt;a href="https://www.researchgate.net/figure/Model-of-skill-acquisition-Novice-to-expert-Dreyfus-Dreyfus-1988_fig2_296964846"&gt;ResearchGate&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Stage 3 - Competents:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;ACTION: &lt;em&gt;Competents can troubleshoot.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;They can troubleshoot problems on their own, and figure out solutions to modern problems. They are more deliberate about their planning. They're seen as 'having initiative' and 'being resourceful', and can mentor earlier stages without pulling bandwidth from experts.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Stage 4 - Proficients:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;ACTION: &lt;em&gt;Proficient practitioners can self-correct.&lt;/em&gt; &lt;/p&gt;

&lt;p&gt;They need the big picture and will seek out and understand the entire framework. They read case studies/projects/patterns and can learn effectively from history, even if they didn't participate in it firsthand. They are very frustrated by oversimplified information.&lt;/p&gt;

&lt;p&gt;They know how to use maxims: "Test everything that can possibly break."&lt;/p&gt;

&lt;p&gt;Novices see this as a recipe and go, "What do I test? All the setters/getters? All the return statements?" and test everything. Proficient practitioners know to only test the core components that can cause an issue.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Stage 5 - Expert:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;ACTION: &lt;em&gt;Experts work from intuition.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;They are the primary source of information. They write articles and books. They can diagram an application and go a mile deep into its architecture. Statistically speaking, roughly 1-5% of the population. &lt;/p&gt;




&lt;p&gt;Using that framework, our tasks are written in a way where tickets are grouped into one of those categories. It allows us to provide meaningful work during the different stages of learning.&lt;/p&gt;

&lt;h3&gt;
  
  
  Collaborative learning and growth
&lt;/h3&gt;

&lt;p&gt;Be mindful. Be empathetic. Remember their learning style. Have an open-door policy to allow them to ask questions, no matter how dumb it sounds.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--1nSKUXQt--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://imgs.xkcd.com/comics/ten_thousand.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--1nSKUXQt--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://imgs.xkcd.com/comics/ten_thousand.png" alt="Mathematically, 10,000 people hears about that new thing every day" width="462" height="316"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For learning to scale, my team has these support systems. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Support System 1:&lt;/strong&gt; We have chat channels specifically for asking questions. Even the more experienced devs ask questions, to facilitate an environment where we're all growing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Support System 2:&lt;/strong&gt; We have a collective knowledge base that anyone can edit. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Support System 3:&lt;/strong&gt; We modify learning based on the needs of the new hire. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Some learn with peer programming/shadowing.&lt;/li&gt;
&lt;li&gt;Some learn with pseudocode.&lt;/li&gt;
&lt;li&gt;Some learn by giving hints. Give them the boundaries.&lt;/li&gt;
&lt;li&gt;Some learn by pointing to documentation &amp;amp; example code.&lt;/li&gt;
&lt;li&gt;Some learn by building a separate project using an online course.&lt;/li&gt;
&lt;li&gt;Some learn by teaching it to others.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No one-size-fits-all. And there are different modes of learning depending on the task.&lt;/p&gt;

&lt;p&gt;For example, using myself:&lt;br&gt;
With design work, pseudocode all the way! But please let me shadow you when we're doing backend database work. And just give me documentation if I'm working on APIs. DIfferent modes for different tasks.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Support System 4:&lt;/strong&gt; We spend a lot of time course-correcting&lt;/p&gt;

&lt;p&gt;At the end of the day -- everything ends up in Code Review.&lt;/p&gt;

&lt;p&gt;There's ego in coding. Not everyone takes feedback well at all. New hires are often following the patterns they had in their prior life and in unfamiliar territory, and defend themselves of why they chose that and why you're wrong.&lt;/p&gt;

&lt;p&gt;At my company, we have the luxury of time. New hires get used to LONG code review times. Some PRs can sit in code review for a week. It's a point of frustration for new hires who come from website firms where you can quick-and-dirty &lt;code&gt;!important&lt;/code&gt; everything and ship that code. &lt;/p&gt;

&lt;p&gt;Not here! We will take the time to do it right. And we'll be extra supportive and polite about it. (And if the ticket is time-sensitive, is it a good ticket for new hires?)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;FURTHER READING&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://stackoverflow.blog/2019/09/30/how-to-make-good-code-reviews-better/"&gt;How to make Good Code Reviews even better&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.goodreads.com/book/show/36647421-learning-how-to-learn"&gt;Learning How to Learn&lt;/a&gt; (Book Recommendation) &lt;/li&gt;
&lt;li&gt;
&lt;a href="https://pragprog.com/titles/tpp20/the-pragmatic-programmer-20th-anniversary-edition/"&gt;Pragmatic Programmers&lt;/a&gt;, &lt;a href="https://en.wikipedia.org/wiki/The_Mythical_Man-Month"&gt;The Mythical Man-month&lt;/a&gt;, and &lt;a href="https://en.wikipedia.org/wiki/Peopleware:_Productive_Projects_and_Teams"&gt;Peopleware: Productive Projects and Teams&lt;/a&gt; (Book Recommendation) &lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Principle 4: Providing Doable work
&lt;/h2&gt;

&lt;p&gt;One of the fears of new hires is if they're doing something correctly. That paralysis slows down growth and makes PRs take 300% longer. &lt;/p&gt;

&lt;p&gt;And if they aren't doing it correctly, the new hire's confidence is shattered! They feel miserable. They feel insecure. Imposter syndrome creeps, and they go into &lt;a href="https://www.enr.com/articles/53456-a-guide-through-the-valley-of-despair"&gt;The Valley of Despair&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ix4JlfWz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.imgur.com/seVULpx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ix4JlfWz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.imgur.com/seVULpx.png" alt="Emotional Cycle of Change, the Valley of Despair" width="640" height="480"&gt;&lt;/a&gt;&lt;br&gt;
Image via &lt;a href="https://tbd-strategies.com/the-valley-of-despair-in-the-change-cycle/"&gt;TBD-stategies&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Creating "Doable work" means the following:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Tasks that are within their skillset&lt;/li&gt;
&lt;li&gt;Tasks that are meaningful, that feel like real contributions. (I was given 10 'fix the typo' tasks and I wanted to crawl inside a shark.)&lt;/li&gt;
&lt;li&gt;Tasks that have a well-defined scope of expectations&lt;/li&gt;
&lt;li&gt;Tasks with a history of success&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Tagging tasks as "Good First Issue"
&lt;/h3&gt;

&lt;p&gt;One solution that the Open source community created is tagging tickets as &lt;code&gt;Good First Issue&lt;/code&gt;. The issue isn't easy. But it's a simple task to allow someone new to be able to learn the system, the culture, and the feedback.   &lt;/p&gt;

&lt;p&gt;In these specially tagged tickets, the scope is well defined, and there's also a history of success. Included in the task are completed PRs that do the same/something similar to reference for help. A new hire can review the PR and look at the feedback and comments, and attempt to understand how and why. &lt;/p&gt;

&lt;p&gt;I also encourage more seasoned developers to LOOK and tag opportunities that can be good for first-timers. Great developers know when to solve a problem themselves vs allowing others to shine! &lt;/p&gt;

&lt;p&gt;Overall, these &lt;code&gt;Good First Issue&lt;/code&gt; tickets give new hires small wins. And small wins make big wins.&lt;/p&gt;

&lt;h3&gt;
  
  
  Buffet-style selection for picking tasks
&lt;/h3&gt;

&lt;p&gt;The common methodology at workplaces is to micro-manage your new hires until they &lt;del&gt;conform and become a goopy gray matter&lt;/del&gt; meet your definition of success. You let them do some shadowing, force them into meetings and peer coding, and ask them questions like "Do you know how to copy/paste?" to "How can we use prototypical inheritance instead of creating thousands of functions?". &lt;/p&gt;

&lt;p&gt;Not wanting to deal with that micro-management noise... my team elected to treat our tickets 'buffet-style'. &lt;/p&gt;

&lt;p&gt;Overall, we provide dozens of tickets up for grabs. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Novice tickets&lt;/strong&gt; that have a clear step-by-step. Do X, then Y, then Z. &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Advance Beginner tickets&lt;/strong&gt; that are a bit vaguer, but a lot of patterns to imitate. I treat these tickets like a puzzle game. Here's the end goal, and here are some hints!&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Competent tickets&lt;/strong&gt; are free-flowing! I rely on the developer to tell ME how they plan to solve it.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;If the mid-levels want to tackle novice tickets?&lt;/strong&gt; Sure! If the junior wants to take &lt;strong&gt;complex tickets&lt;/strong&gt;, I'll back them up, and give them an out if it's too much pressure.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Concerned that the higher role devs will take novice tickets ?&lt;/strong&gt; You shouldn't be! The goal isn't to complete the ticket -- it's to get comfortable in the company. Just like in Final Fantasy, we need to get to 100% before we can use our &lt;a href="https://finalfantasy.fandom.com/wiki/Overdrive_(Final_Fantasy_X)"&gt;Limit Breaks/Overdrives&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;New tasks that have never been done before?&lt;/strong&gt; The solution: Create a safe sandbox, but with restrictions. Maybe the task needs to be broken into multiple tiers (some novice, some competent, some expert-level tickets) and you handle the complex ones. The tickets are still clearly defined, there's a scope to stay within, and define restrictions to avoid going too deep into the rabbit hole. &lt;/p&gt;

&lt;p&gt;&lt;em&gt;Note: restrictions do create stress. But stress isn't the root of evil. There's &lt;a href="https://www.summahealth.org/flourish/entries/2021/01/stress-management-how-to-tell-the-difference-between-good-and-bad-stress"&gt;good stress and bad stress&lt;/a&gt;. Avoiding stress is a bit like helicopter parenting - it can cause more damage then it saves.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;FURTHER READING&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.atlassian.com/blog/productivity/how-to-write-smart-goals"&gt;Writing SMART goals&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://goodfirstissue.dev/"&gt;Open-Source Good First Issues&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://stackoverflow.com/help/how-to-answer"&gt;How to write a good answer&lt;/a&gt; via StackOverflow&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.danpink.com/books/drive/"&gt;Drive: The Surprising Truth About What Motivates Us&lt;/a&gt; (Book Recommendation)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Principle 5: Frequent Check-ins
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;(Note: This is the Principle I personally need the most work on. I'm data-driven, and would prefer to throw technology like &lt;a href="https://www.15five.com/"&gt;15Five&lt;/a&gt; at this. But I can't.)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;All developers need to be empowered that we trust their ideas and feel ownership of the code. But developers are also very good at getting into rabbit holes and &lt;a href="https://www.dictionary.com/browse/can-t-see-the-forest-for-the-trees"&gt;can't see the forest from the trees&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Checking in too frequently and they won't feel confident in solving problems (Breaking Principle 1). If you let them go on their own too long, they can go into a spiral (breaking Principle 4)&lt;/p&gt;

&lt;p&gt;Unfortunately, I don't have a direct answer here. &lt;/p&gt;

&lt;p&gt;I have multiple touch-points to see how the new hire is doing.&lt;/p&gt;

&lt;p&gt;We work remotely. Which means I can't just hover over their shoulder.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Check-in during Standups:&lt;/strong&gt; I'm guilty of using standup as a place to practice my comedy bits, very Michael Scott-esque. But new hires do open up and share their blockers! &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;I reach out asynchronously&lt;/strong&gt; through chat/email for a quick update. &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;I do 'temperature checks' by asking others.&lt;/strong&gt; "Is [X developer] doing okay?"&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I constantly test my check-in methods. My check-ins are now a bit focused, with a lot of vagueness (oxymoron!). I ask these basic questions to break the ice:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;How is everything?&lt;/strong&gt; -&amp;gt; Some share their day. Others share their immediate feelings.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;What are you blocked by?&lt;/strong&gt; -&amp;gt; They share what they're working on. Or if they're stuck, they try to explain how.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;How can I help?&lt;/strong&gt; -&amp;gt; This simple powerful phrase empowers the new hire to think through exactly what they need. &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;FURTHER READING&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://www.polly.ai/blog/21-simple-yet-powerful-check-in-questions-and-how-to-ask-them"&gt;21 Important Check-In Questions Your Team Wishes You'd Ask&lt;/a&gt; via Polly&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.15five.com/blog/keep-your-people-connected-while-working-remotely/"&gt;Keeping Your People Connected And Productive While Working Remotely&lt;/a&gt; and &lt;a href="https://www.15five.com/blog/9-ways-to-give-effective-employee-feedback/"&gt;9 ways to giving effective employee feedback&lt;/a&gt; via 15Five&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  These Principles aren't just for new hires
&lt;/h2&gt;

&lt;p&gt;Although these principles were geared toward scaling onboarding new hires, I discovered they made me a better developer/leader.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Principle 1: Eliminate bottlenecks, including you&lt;/strong&gt; has allowed me to identify what's important to me and find as many ways to remove myself from being a dependency.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Principle 2: Organize or die&lt;/strong&gt; forced me to choose my time wisely. Burnout is a real thing. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Principle 3: Provide many mechanisms for growth&lt;/strong&gt; made me think about my learning styles. I'm figuring this out as a cat wrangler! I went through my own &lt;em&gt;Valley of Despair&lt;/em&gt;, and have climbed out of it. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Principle 4: Providing Doable work&lt;/strong&gt; forced me to think about clear expectations and scope in words. I messed up a LOT on this task, and my support team continued providing feedback.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Principle 5: Frequent Check-ins&lt;/strong&gt; elevated me out of a &lt;em&gt;'thinking about myself'&lt;/em&gt; to a &lt;em&gt;'think about the people who need me'&lt;/em&gt;. &lt;/p&gt;

&lt;p&gt;As developers, we're here to solve problems using systems and patterns. &lt;/p&gt;

&lt;p&gt;And scaling new hires is just another problem to solve.&lt;/p&gt;

</description>
      <category>onboard</category>
      <category>teaching</category>
      <category>promotion</category>
    </item>
    <item>
      <title>What New Hires think about</title>
      <dc:creator>Rocky Kev</dc:creator>
      <pubDate>Sun, 12 Jun 2022 19:11:27 +0000</pubDate>
      <link>https://dev.to/rockykev/what-new-hires-think-about-3i99</link>
      <guid>https://dev.to/rockykev/what-new-hires-think-about-3i99</guid>
      <description>&lt;p&gt;This post was originally written in May 2022 on my defunct blog. Moved it here.)&lt;/p&gt;

&lt;p&gt;Shoshin. &lt;/p&gt;

&lt;p&gt;It's a concept in Zen Buddhism, which means "beginner's mind".&lt;/p&gt;

&lt;p&gt;The concept of cycles/returning back to the beginning is prevalent in Eastern Philosophy. In Martial Arts, well-worn black belts sheds back to white.  There's the cycle of rebirth. In the dev industry - switching jobs is a new cycle.&lt;/p&gt;

&lt;p&gt;That perspective (and that empathy) is important, especially for new hires. &lt;/p&gt;

&lt;p&gt;My team grows from 6 devs to more than a dozen! And I hear the chatters of hazing new hires (😡), talking down to them (😡), or not even taking the time to think about their perspective. &lt;/p&gt;

&lt;p&gt;New hires come in with a lot of unknowns. They also don't &lt;a href="https://dev.to/rockykev/these-6-rules-created-a-really-dope-culture-at-my-job-5fj5"&gt;have psychological safety&lt;/a&gt; to open up.&lt;/p&gt;

&lt;p&gt;As one of the &lt;strong&gt;cat wranglers&lt;/strong&gt; bringing in these new hires, I reflect on Shoshin to help me see things from their perspective. (Heck, &lt;a href="https://dev.to/rockykev/how-i-became-a-developer-in-about-15-years-552k"&gt;it took me 15 years to get here&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;This is what I've come up with.&lt;/p&gt;

&lt;h2&gt;
  
  
  Things new hires thing about:
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Not knowing where to go for help.&lt;/strong&gt; Is it the culture to reach out to the whole team? Should I DM someone privately? Or should I just 'read the documentation'?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Who/what is a [WORD HERE]?&lt;/strong&gt; Every company has their in-house terms. From Gazorpazorps to &lt;a href="https://til.heyitsrocky.com/posts/2022-03/2022-03-17-bioshock-chumps/"&gt;chumps&lt;/a&gt;. What does any of it mean?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Org Chart&lt;/strong&gt; A decade ago, I once emailed a CEO to tell them that the bathroom was broken. I wish I knew who the right person was.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Who is responsible for what?&lt;/strong&gt; Small companies, devs deal with everything. Big companies have clear lines of responsibility. That website footer, is that my team? Is that your team? &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Culture and environment.&lt;/strong&gt; What type of people work here? Can I throw a Parks and Rec reference? Am I in a workspace with casette tapes, or CDs, or Spotify?&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Things new hires go through:
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;The Emotional Cycle of Change&lt;/strong&gt;. The &lt;a href="https://www.infocusleadership.ca/blog/five-stages-move-emotionally-changing-behavior/"&gt;Emotional Cycle of Change&lt;/a&gt; is used to explain learning, and also applies here. When new hires join a company, they're in the &lt;em&gt;Uniformed Optimism&lt;/em&gt; stage (a honeymoon phase). That honeymoon phase disappears, and things get harder. Soon, they drop into the Valley of Despair. Everything sucks. All the time. Can we create processes to allow our new hires to cross this bridge quickly?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;When 💩 hits the fans - the Unknown unknowns.&lt;/strong&gt; Every company has a period where chaos reigns. It's inevitable. New hires have to wonder, "When will the other shoe drop? What will happen to me?" Will a weak leader become power hungry and fire everyone who disagrees with them? What culture can we create to mitigate that fear?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Am I doing this right?"&lt;/strong&gt; This question that will be asked for months. About everything! From little details like code style or formatting, to 'am I allowed to use this library?' It takes months for new hires to gain the confidence to draw outside the lines. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Am I safe to even ask questions?&lt;/strong&gt; This is the question new hires rarely openly express. "Is everyone a phoney and secretly judging me?" I talk about &lt;a href="https://dev.to/rockykev/these-6-rules-created-a-really-dope-culture-at-my-job-5fj5"&gt;Psychological Safety in my workplace&lt;/a&gt; here.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  What do we do with this
&lt;/h2&gt;

&lt;p&gt;Whatever annoyances and frustrations you snagged on during your on-boarding, stamp them out! Can't remember? Adopt the beginner's mindset with Shoshin. Gain some empathy, take a step back, and think about how you can smooth out your onboarding of new hires.&lt;/p&gt;

&lt;p&gt;Be better in the world. &lt;/p&gt;

</description>
      <category>newjob</category>
      <category>hiring</category>
    </item>
    <item>
      <title>Solving a 2002 website issue with web components</title>
      <dc:creator>Rocky Kev</dc:creator>
      <pubDate>Tue, 07 Jun 2022 03:53:12 +0000</pubDate>
      <link>https://dev.to/rockykev/solving-a-2002-website-issue-with-web-components-2hmf</link>
      <guid>https://dev.to/rockykev/solving-a-2002-website-issue-with-web-components-2hmf</guid>
      <description>&lt;p&gt;&lt;em&gt;(This post was originally written in Mid-may 2022 on my defunct blog. Moved it here.)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;My team inherited a site that was written in &lt;code&gt;asp.net&lt;/code&gt; and vanilla HTML/CSS/JS.&lt;/p&gt;

&lt;p&gt;There was roughly 100+ &lt;code&gt;.html&lt;/code&gt; files. And the stakeholder wanted the site moved off of an old microsoft server. &lt;/p&gt;

&lt;p&gt;I'm sure this site is from like 2002 or something (I don't exactly know).&lt;/p&gt;

&lt;p&gt;This was a super quick task. And from the looks of it's age, we just wanted to get it done quickly.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem
&lt;/h2&gt;

&lt;p&gt;These &lt;code&gt;.html&lt;/code&gt; files were fascinating!&lt;/p&gt;

&lt;p&gt;All 100+ files sort look something like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;body&amp;gt;&lt;/span&gt;
&lt;span class="c"&gt;&amp;lt;!-- asp.net code here for navigation --&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"content"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt; ... &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;

&lt;span class="c"&gt;&amp;lt;!-- asp.net code here for footer --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I don't know &lt;code&gt;asp.net&lt;/code&gt;. My hypothesis was that the original site used &lt;code&gt;asp.net&lt;/code&gt; to pull a navigation file and a footer file for all of their pages. &lt;/p&gt;

&lt;p&gt;All I know is that the &lt;code&gt;asp.net&lt;/code&gt; code didn't work when we tested it on a new server. So we needed a way to get the nav/footer back.&lt;/p&gt;

&lt;p&gt;Honestly, it seems pretty sweet that the snippet of code allowed for DRY-ness.&lt;/p&gt;

&lt;h2&gt;
  
  
  Different ways to solve it
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Idea 1: We can roll up a JS framework.
&lt;/h3&gt;

&lt;p&gt;The snippet of code? What does that remind you of? That's right -- Components! &lt;/p&gt;

&lt;p&gt;I can quickly &lt;code&gt;create-react-app&lt;/code&gt; or &lt;code&gt;vue-create&lt;/code&gt; and build out a header/footer component. Should take like 30 minutes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Problems with that approach&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Issue 1 - It'll leave a trail of dependancies. Like I said, this site is OLD. It's older than my career! Some developer in 2040 will be cursing my name if I used &lt;/p&gt;

&lt;p&gt;Issue 2 - The entire payload of this site is like 20kb. According &lt;a href="https://gist.github.com/Restuta/cda69e50a853aa64912d"&gt;to this gist&lt;/a&gt;, all the frameworks would literally double the size of this page. (Except Preact! Wow, look at that file size!)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--cT2mZ5ZP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.imgur.com/TuhalOo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--cT2mZ5ZP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.imgur.com/TuhalOo.png" alt="table of minified files" width="437" height="602"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;(This screenshot is 61kb.)&lt;/p&gt;

&lt;p&gt;Is there a way to avoid that overhead?&lt;/p&gt;

&lt;h3&gt;
  
  
  Idea 2: Quick and dirty
&lt;/h3&gt;

&lt;p&gt;Why not just copy the &lt;code&gt;html&lt;/code&gt; for the navbar and footer, and paste it where &lt;code&gt;asp.net&lt;/code&gt; code was?&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;body&amp;gt;&lt;/span&gt;
&lt;span class="c"&gt;&amp;lt;!-- asp.net code for header is now replaced --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;nav&amp;gt;&amp;lt;ul&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"menu"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;... &lt;span class="nt"&gt;&amp;lt;/ul&amp;gt;&amp;lt;/nav&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"content"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt; ... &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;

&lt;span class="c"&gt;&amp;lt;!-- asp.net code for footer is now replaced --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;footer&amp;gt;&amp;lt;ul&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"copyright"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;... &lt;span class="nt"&gt;&amp;lt;/ul&amp;gt;&amp;lt;/footer&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The extra lines of code doesn't add much weight to the site. And it works?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Problems with that approach&lt;/strong&gt;&lt;br&gt;
Issue 1 - We'll have to copy/paste that code 50x times. So 50 individual &lt;code&gt;.html&lt;/code&gt; changes. &lt;/p&gt;

&lt;p&gt;Issue 2 - It feels bad and makes me feel bad. &lt;/p&gt;
&lt;h3&gt;
  
  
  Winning Idea: Web Components
&lt;/h3&gt;

&lt;p&gt;The more I reflected on it, the more I remembered a thing called 'Web Components'!&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Web Components is a suite of different technologies allowing you to create reusable custom elements — with their functionality encapsulated away from the rest of your code — and utilize them in your web apps.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://developer.mozilla.org/en-US/docs/Web/Web_Components"&gt;Via MDN&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It essentially looks like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;body&amp;gt;&lt;/span&gt;
&lt;span class="c"&gt;&amp;lt;!-- asp.net code for header is now replaced --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;navbar-section&amp;gt;&amp;lt;/navbar-section&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"content"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt; ... &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;

&lt;span class="c"&gt;&amp;lt;!-- asp.net code for footer is now replaced --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;footer-section&amp;gt;&amp;lt;/footer-section&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I don't need props or anything, and styling is already handled. &lt;/p&gt;

&lt;p&gt;Now we can:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Have a single place to house the navbar and the footer&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Keep the payload lightweight.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Have it work for the next million years! (Hello Google Ultron!)&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;iframe height="600" src="https://codepen.io/rockykev/embed/LYQJNgv?height=600&amp;amp;default-tab=result&amp;amp;embed-version=2"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

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

&lt;p&gt;It was a pretty nifty and simple way to finally dip my team's toes into web components!&lt;/p&gt;

&lt;p&gt;And we successfully migrated a site that lived when everyone was playing PS2, XBox and Gamecube with a few lines of modern Javascript.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Upon writing this post:&lt;/strong&gt;&lt;br&gt;
I realized that I didn't do anything special, and I didn't even NEED to use web components. There was nothing stopping me from just using Javascript to &lt;a href="https://stackoverflow.com/a/5536711/4096078"&gt;shove html into this site&lt;/a&gt; like our forefathers have done for the past decade, with something like &lt;a href="https://developer.mozilla.org/en-US/docs/Web/API/Element/insertAdjacentHTML"&gt;insertAdjacentHTML&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;&lt;em&gt;Also, this post took me an hour to write, which is 5x longer than how long it took us to handle the original request.&lt;/em&gt; 🤣🤣🤣&lt;/p&gt;

</description>
      <category>web</category>
      <category>webcomponents</category>
    </item>
    <item>
      <title>How I became a Developer in about 15-ish or so years</title>
      <dc:creator>Rocky Kev</dc:creator>
      <pubDate>Mon, 06 Jun 2022 07:01:26 +0000</pubDate>
      <link>https://dev.to/rockykev/how-i-became-a-developer-in-about-15-years-552k</link>
      <guid>https://dev.to/rockykev/how-i-became-a-developer-in-about-15-years-552k</guid>
      <description>&lt;p&gt;&lt;em&gt;(This post was originally written in March 2022 on my defunct blog. Moved it here.)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Follow this roadmap and you too can be a dev in 15 years.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pre-2006: My road to coding
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;I bought the book &lt;strong&gt;Learn C++ in 24 hours&lt;/strong&gt;. I went to chapter 2 and got stuck. &lt;/li&gt;
&lt;li&gt;I made &lt;strong&gt;Starcraft&lt;/strong&gt; maps and fumbled through the &lt;strong&gt;Source Engine&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;I wrote really crappy &lt;strong&gt;HTML&lt;/strong&gt; on my xanga site. &lt;em&gt;Tables ftw.&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;I made movies using &lt;strong&gt;RPG Maker&lt;/strong&gt;. I never saved any of them. 😔&lt;/li&gt;
&lt;li&gt;I decided to go to school for video game animation.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  2006 - 2010: College years
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;College. I took coding courses.&lt;/li&gt;
&lt;li&gt;I learned &lt;strong&gt;Java&lt;/strong&gt;. &lt;em&gt;I discovered I suck with Java too&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;My new life calling - this &lt;a href="https://www.wired.com/2008/12/iphone-fart-app/"&gt;fart app made $10,000 a day&lt;/a&gt;. &lt;/li&gt;
&lt;li&gt;I dropped out. My mate and I &lt;strong&gt;hacked together mobile apps&lt;/strong&gt;, trying to score that fart app money. &lt;/li&gt;
&lt;li&gt;I am broken. I suck at coding. I suck at college. I owe a lot of money. 💀&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  2010 - 2013: I hate software developers 😡
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Started attending conferences. It was incredibly hostile and exclusive. 🔪 Very 'old guard'. &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;WordPress&lt;/strong&gt; development was hot. And community was super nice. &lt;/li&gt;
&lt;li&gt;Started &lt;strong&gt;WordPress themes/plugins&lt;/strong&gt;. &lt;em&gt;Now I sucked at both Java AND PHP&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;Still in severe debt. Worked with websites (I did &lt;strong&gt;SEO&lt;/strong&gt; and &lt;strong&gt;marketing&lt;/strong&gt;), but never as a bona fide developer. &lt;/li&gt;
&lt;li&gt;Wrote scripts to automate things like bots and social media. &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Minecraft (Java)&lt;/strong&gt; was getting popular. Should I dig deeper in &lt;strong&gt;Java&lt;/strong&gt;? &lt;em&gt;Haha no. Java is too traumatic&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;Recieved a &lt;strong&gt;Raspberry Pi&lt;/strong&gt;. &lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  2013 - 2015: People give me money... for code?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;I hacked &lt;strong&gt;Wordpress&lt;/strong&gt; templates together. &lt;em&gt;Genesis Framework&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;Someone paid me $200 to build them a &lt;em&gt;WordPress&lt;/em&gt; site. &lt;em&gt;Am I a developer? No. I built iPhone apps, games and websites. But I'm no developer.&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;I fell in love with &lt;strong&gt;jQuery&lt;/strong&gt;, &lt;strong&gt;Bootstrap&lt;/strong&gt;, &lt;strong&gt;FontAwesome&lt;/strong&gt;, and web languages. (ugh to &lt;strong&gt;SQL&lt;/strong&gt;)&lt;/li&gt;
&lt;li&gt;People started talking about React, but it didn't make sense.&lt;/li&gt;
&lt;li&gt;Still building bots. Still creating scripts. &lt;/li&gt;
&lt;li&gt;I automated a huge chunk of my day job. You can &lt;em&gt;Javascript in Google docs, you know?&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  2015 - 2017: I am developer now?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Job learn I could &lt;strong&gt;build websites&lt;/strong&gt;. &lt;em&gt;They chose to ignore me automating my job&lt;/em&gt;. 🤷&lt;/li&gt;
&lt;li&gt;Job told me to &lt;strong&gt;build websites&lt;/strong&gt;. &lt;em&gt;Yer a developer, Harry!&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;Job offloaded me to other people to &lt;strong&gt;build websites&lt;/strong&gt;. I was now doing development for over 50+ hours.&lt;/li&gt;
&lt;li&gt;I &lt;strong&gt;spoke at conferences&lt;/strong&gt; about marketing, seo. Now I was &lt;strong&gt;speaking about web development&lt;/strong&gt;. &lt;/li&gt;
&lt;li&gt;Started fully understanding &lt;strong&gt;Javascript&lt;/strong&gt;. And &lt;strong&gt;jQuery&lt;/strong&gt; is starting to show it's age. &lt;/li&gt;
&lt;li&gt;Data science was getting big. &lt;em&gt;Should I play with Python?&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;React is getting much bigger&lt;/strong&gt;. &lt;em&gt;I still don't get it?!?!&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;I helped on a &lt;strong&gt;Angular&lt;/strong&gt; project. &lt;em&gt;Why are JS frameworks so confusing?&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;I started working on &lt;strong&gt;Laravel&lt;/strong&gt; projects. &lt;em&gt;I like Laravel.&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;I returned to conferences/meetups. Much more inclusive now 🏳️‍🌈👨🏿👸! The old guard is dead? ☠️&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  2018 - 2020: I understand JS frameworks
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;All my friends were into &lt;strong&gt;React&lt;/strong&gt;, &lt;strong&gt;Gatsby&lt;/strong&gt;, &lt;strong&gt;GraphQL&lt;/strong&gt;. &lt;em&gt;Why is this so hard?!?!&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;Finally started learning &lt;strong&gt;React&lt;/strong&gt; (through a Bootcamp), while also digging into &lt;strong&gt;Vue&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;🙌 🙌 🙌 OMG JS FRAMEWORKS MAKES SENSE NOW. 🙌 🙌 🙌 &lt;/li&gt;
&lt;li&gt;Still relying on smashing libraries together, like a crutch. &lt;/li&gt;
&lt;li&gt;Work was all &lt;strong&gt;WordPress&lt;/strong&gt;, so I took freelancing jobs to do more JS framework things. &lt;/li&gt;
&lt;li&gt;I &lt;strong&gt;lead WordPress meetups&lt;/strong&gt;, did &lt;strong&gt;conf talks&lt;/strong&gt;, and ran &lt;strong&gt;web development workshops&lt;/strong&gt;. &lt;em&gt;Heck yeah I'm going to make my spaces real ✨safe and inclusive✨. EVERYONE is invited 🏳️‍🌈👨🏿👸! Go suck a 🍋, old guard!&lt;/em&gt; (&lt;em&gt;Yes I'm very spiteful.&lt;/em&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  2020 - 2022: The age of fundamentals
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Really find myself understanding the web fundamentals. &lt;strong&gt;Vanilla HTML, CSS, JS&lt;/strong&gt;... real mastery instead of hacking things.&lt;/li&gt;
&lt;li&gt;I learned that the &lt;code&gt;&amp;lt;details&amp;gt;&lt;/code&gt; element is magical.&lt;/li&gt;
&lt;li&gt;Spent the pandemic focusing on mental health.&lt;/li&gt;
&lt;li&gt;Started feeling framework fatigue. I could switch between &lt;strong&gt;React&lt;/strong&gt; and &lt;strong&gt;Vue&lt;/strong&gt;. Played around with &lt;strong&gt;Svelte&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Started writing vanilla everything more, or trying to code things directly instead of finding a crutch like a library.&lt;/li&gt;
&lt;li&gt;After 4 years, I finally understood testing libraries. &lt;/li&gt;
&lt;li&gt;Still not going to touch &lt;strong&gt;Java&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Finally found a real use-case for my &lt;strong&gt;Raspberry pi&lt;/strong&gt;. &lt;em&gt;Pi-hole.&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>roadmap</category>
      <category>developer</category>
    </item>
    <item>
      <title>These 6 rules created a really dope culture at my job</title>
      <dc:creator>Rocky Kev</dc:creator>
      <pubDate>Mon, 06 Jun 2022 05:30:51 +0000</pubDate>
      <link>https://dev.to/rockykev/these-6-rules-created-a-really-dope-culture-at-my-job-5fj5</link>
      <guid>https://dev.to/rockykev/these-6-rules-created-a-really-dope-culture-at-my-job-5fj5</guid>
      <description>&lt;p&gt;&lt;em&gt;(This post was originally written in February 2022 on my defunct blog. Moved it here.)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;We as a industry do a lot of lip service about being inclusive, creating welcoming environments, and making things a 'fun place to be'. &lt;/p&gt;

&lt;p&gt;Yet, the industry can be tribal/hostile. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://jamie.build/dear-javascript.html"&gt;Open source developers&lt;/a&gt; get attacked. &lt;/li&gt;
&lt;li&gt;Languages get mocked and practioners laughed at... like PHP, which runs &lt;a href="https://w3techs.com/technologies/details/pl-php"&gt;77.5% of the internet&lt;/a&gt;, or Javascript, which is &lt;a href="https://w3techs.com/technologies/details/cp-javascript"&gt;98% of the internet&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Framework tribes bubble up and thousands of bloggers write posts comparing the Reacts, Vues, Sveltes, vanilla (no links because not creating backlinks to THAT noise) and why only one shall reign supreme&lt;/li&gt;
&lt;li&gt;Imposter Syndrome is real. With so many routes to becoming a developer (self-taught, to CS degrees, bootcamps), everyone is on extremely different wavelengths.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That toxicity spreads to the person, who brings that into their workplace.&lt;/p&gt;

&lt;p&gt;The workplace already has it's own set of problems. &lt;/p&gt;

&lt;p&gt;Changing deadlines, bad code/bugs, office politics, time vampires and meeting overload... overwork, stress, and only recently did developers realize &lt;a href="https://insights.stackoverflow.com/survey/2021#section-demographics-mental-health"&gt;mental health&lt;/a&gt; is a thing.&lt;/p&gt;

&lt;p&gt;And let's not forget remote work, for those fortunate to get it, also has it's own challenges.&lt;/p&gt;

&lt;p&gt;It's freakin' tough to be a developer. &lt;/p&gt;

&lt;h2&gt;
  
  
  The current reality
&lt;/h2&gt;

&lt;p&gt;I'm an introvert. &lt;/p&gt;

&lt;p&gt;As a introvert, we're told that &lt;strong&gt;"closed mouths don't get fed"&lt;/strong&gt;. So you &lt;a href="https://observer.com/2017/01/introverts-underrepresented-managerial-positions/"&gt;speak up or you die&lt;/a&gt;. What they didn't teach you is, &lt;strong&gt;"The loudest person in the room gets what they want."&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Have you ever been in a room where you're in a group of incredibly smart people and you're the percieved 'dumb quiet one'? It usually goes like this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You bring up a concern. &lt;/li&gt;
&lt;li&gt;Then the loudest person starts speaking to address your concern.&lt;/li&gt;
&lt;li&gt;Everyone starts shaking their head and nobody has any counterpoints. &lt;/li&gt;
&lt;li&gt;You don't agree, but the social pressure stops you from talking.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The loudest person wasn't mean or belittling. They just brought more passion to the table. Everyone else, who may share the same concern as you do, shrug from mental exhaustion or not feeling like they want to.&lt;/p&gt;

&lt;p&gt;People don't feel &lt;strong&gt;psychological safety&lt;/strong&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Psychological safety at work doesn’t mean that everybody is nice all the time. It means that you embrace the conflict and you speak up, knowing that your team has your back, and you have their backs.”&lt;/p&gt;

&lt;p&gt;“People need to feel comfortable speaking up, asking naïve questions, and disagreeing with the way things are in order to create ideas that make a real difference,” says Altman.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;via &lt;a href="https://www.ccl.org/articles/leading-effectively-articles/what-is-psychological-safety-at-work/"&gt;https://www.ccl.org/articles/leading-effectively-articles/what-is-psychological-safety-at-work/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For those who prefer code --&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Psychological Safety === Better everything
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Creating Psychological Safety
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Rule 1: Start from a place of positivity
&lt;/h3&gt;

&lt;p&gt;In almost any televised sport, watch the players. Teammates high five. Win or lose, opponents say "good game". Players tend to be good sports. It's rare to seeing players belittle a fellow teammate. &lt;/p&gt;

&lt;p&gt;Because at the end of the day, it's just another day. It's just another game. There's a thousand more. And another opportunity to shine.&lt;/p&gt;

&lt;p&gt;That's how we see it!&lt;/p&gt;

&lt;p&gt;Assume positive intent.&lt;/p&gt;

&lt;p&gt;In code reviews, feedback is viewed from the lens of the positive. We identify what they've done right, and give them praise for it.&lt;/p&gt;

&lt;p&gt;We also give clear feedback and we explain why. &lt;/p&gt;

&lt;p&gt;This is what you see in my team:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Great work on this feature! You really took the time to implement this correctly, and it's going to help us so much in the long run - thank you! I noticed that you missed this. Take a look at this PR and can you try to align it to yours? [PR link]&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Rule 2 - Reminders that we're always learning
&lt;/h3&gt;

&lt;p&gt;Web development changes and evolves. Libraries from three years ago might be outdated/insecure today. In web development, the moment you master something, it's already outdated. Welcome to the real world!&lt;/p&gt;

&lt;p&gt;Let's accept the big picture: Coding is hard! &lt;/p&gt;

&lt;p&gt;And the result? Imposter syndrome is very real. &lt;/p&gt;

&lt;p&gt;To create psychological safety, my team is honest with ourselves. Nobody is a expert. We all feel like imposters. And more importantly, we're always learning. &lt;/p&gt;

&lt;p&gt;We remind each other by: &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Sharing our favorite learning resources, like courses or books. Shoutout to &lt;a href="https://frontendmasters.com/"&gt;Frontend Masters&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Pushing everyone to contribute to the internal knowledge base. Best way to learn is to teach it &lt;a href="https://en.wikipedia.org/wiki/Learning_by_teaching"&gt;Learn by Teaching&lt;/a&gt; is a method of teaching for eons.
3 - Providing a safe space to asks questions. In my company, we have a channel called 'Riddle Me This'. Everyone asks questions, even the experienced devs. &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;But more importantly, we're not just yelling into the void. &lt;/p&gt;

&lt;p&gt;Someone shares a resource, and suddenly... ❤️❤️❤️ everywhere. Everyone on the team appreciates it. We're all naturally curious and hungry for knowledge. (And if they aren't... they're a bad hire.)&lt;/p&gt;

&lt;h3&gt;
  
  
  Rule 3: Celebrate as a team
&lt;/h3&gt;

&lt;p&gt;We win as a team. It takes a lot of people to bring a new feature to production. The feature may have been brainstormed by a developer. Another developer took on the task. A bunch of other developers code reviewed it. Another developer may deploy it. &lt;/p&gt;

&lt;p&gt;It's never ever just one person.&lt;/p&gt;

&lt;p&gt;We go out of our way to remind people of their contribution.  &lt;/p&gt;

&lt;p&gt;We do that with: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Shoutouts during standup. Someone did something we like, we let the whole team know.&lt;/li&gt;
&lt;li&gt;Shoutouts in chat. What better way to make it visible?&lt;/li&gt;
&lt;li&gt;Shoutouts in code review description. It's a great feeling to know your code inspired another.&lt;/li&gt;
&lt;li&gt;Monthly shoutouts. Emails praising your work.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It takes a village.&lt;/p&gt;

&lt;h3&gt;
  
  
  Rule 4: Problems aren't personal, it's just another todo.
&lt;/h3&gt;

&lt;p&gt;We win as a team. Which also means, we lose as a team. &lt;/p&gt;

&lt;p&gt;Finger pointing is a waste of energy.&lt;/p&gt;

&lt;p&gt;Quote that. &lt;/p&gt;

&lt;p&gt;When a manager demanded to know who caused a bug, I said it was me. DONE. NEXT QUESTION PLEASE. Doesn't matter that I was no where near the code. &lt;/p&gt;

&lt;p&gt;Many industries follow the &lt;a href="https://www.ncbi.nlm.nih.gov/pmc/articles/PMC1298298/"&gt;swiss cheese model&lt;/a&gt;, including medical professionals. When there's a medical mishap, there's never a single fault. Typically, a issue went through multiple layers of defense, and we all failed.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--FFjr-SkD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.imgur.com/2mbE20Q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--FFjr-SkD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.imgur.com/2mbE20Q.png" alt="swiss cheese model" width="600" height="373"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It's the same in dev work.&lt;/p&gt;

&lt;p&gt;When there's a problem, there's only TWO STEPS.&lt;/p&gt;

&lt;p&gt;STEP 1: How we can fix the problem?&lt;br&gt;
STEP 2: How do we mitigate future problems (and we throw more layers of defense)&lt;/p&gt;

&lt;p&gt;Everything else is a waste of everyone's time and energy.&lt;/p&gt;

&lt;p&gt;In my team, we separate the problem from the person. Then we get to work! &lt;/p&gt;

&lt;h3&gt;
  
  
  Rule 5: Leading by example
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--zKsAiuhN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.imgur.com/Z9Mp9iJ.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--zKsAiuhN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.imgur.com/Z9Mp9iJ.png" alt="bad leader vs good leader" width="880" height="880"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Let's face it. Good leaders lead from the front.&lt;/p&gt;

&lt;p&gt;Do you really trust the manager who demands everyone get in the office by 8am, for that manager to waddle in at 9am? &lt;/p&gt;

&lt;p&gt;All leaders should be able to do the following: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Give shoutout and appreciation. &lt;/li&gt;
&lt;li&gt;Apologize for mistakes.&lt;/li&gt;
&lt;li&gt;Say "I don't know".&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A leader who is unable to recognize someone's talents is egotistic, and cannot be trusted to support you without a reward.&lt;/p&gt;

&lt;p&gt;A leader who is unable to apologize is WEAK and lacks self-realization. In their viewpoint, there's right and wrong, and they're always right.&lt;/p&gt;

&lt;p&gt;A leader who is unable to say "I don't know" is insecure and inexperienced. They believe only they can do everything, and may be controlling/difficult. &lt;/p&gt;

&lt;p&gt;Everyone on my team inspires to grow and be the best. I push everyone to be leaders, in hopes of forming their own teams one day. &lt;/p&gt;

&lt;p&gt;It's important for all of us to show high-quality leadership through example.&lt;/p&gt;

&lt;h3&gt;
  
  
  Rule 6: Frequent check-ins
&lt;/h3&gt;

&lt;p&gt;"Stand-ups help with blocks", people say. &lt;/p&gt;

&lt;p&gt;Maybe. Stand-ups just tell if someone is alive. &lt;/p&gt;

&lt;p&gt;Someone needs to FEEL psychologically safe to share what blockers they have. Otherwise, they'll quickly share what they're doing and pass the mic. I know from experience.&lt;/p&gt;

&lt;p&gt;Not everyone communicates the same. I communicate using visual aids and writing. My teammate prefers to jump on calls. Another teammate ONLY communicates through PRs and feedback.&lt;/p&gt;

&lt;p&gt;We facilitate check-ins by creating many points of touch, until we figure out their mode of communication. &lt;/p&gt;

&lt;p&gt;There's no one-size fits all and requires a lot of trial-and-error. But it's worth it. &lt;/p&gt;

&lt;h2&gt;
  
  
  Good Culture is creating Psychological Safety
&lt;/h2&gt;

&lt;p&gt;The industry can get pretty toxic, which can create toxic cultures and many many horror stories.&lt;/p&gt;

&lt;p&gt;With that unknown, new hires have a lot of fears coming in.&lt;/p&gt;

&lt;p&gt;Once psychological safety is established, the results is real growth. They'll tackle projects. They'll own code. They'll even start pushing the envelope and make us all level up.&lt;/p&gt;

&lt;p&gt;These small details cause major ripple effects for everyone.&lt;/p&gt;

&lt;p&gt;It's a little bit of effort for a major gain. And it's totally worth it.&lt;/p&gt;

</description>
      <category>workplace</category>
      <category>culture</category>
      <category>safety</category>
      <category>work</category>
    </item>
    <item>
      <title>I'm officially done with FontAwesome</title>
      <dc:creator>Rocky Kev</dc:creator>
      <pubDate>Mon, 06 Jun 2022 04:42:11 +0000</pubDate>
      <link>https://dev.to/rockykev/im-officially-done-with-fontawesome-2h2f</link>
      <guid>https://dev.to/rockykev/im-officially-done-with-fontawesome-2h2f</guid>
      <description>&lt;p&gt;&lt;em&gt;(This post was originally written in January 2022 on my defunct blog. Moved it here.)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Check out &lt;a href="https://dev.to/danwalsh/why-fontawesome-is-still-awesome-2bo"&gt;Dan's counter on this post! It's pretty good!&lt;/a&gt; :-) &lt;/p&gt;

&lt;p&gt;When I first discovered FontAwesome in 2013, I like everyone thought the same thing -- this is a MAJOR game changer.&lt;/p&gt;

&lt;p&gt;It is now 2022. As I look back, FontAwesome has become unsustainable. &lt;/p&gt;

&lt;p&gt;I'm officially 'done' with FontAwesome.&lt;/p&gt;

&lt;h2&gt;
  
  
  Credit where credit is due
&lt;/h2&gt;

&lt;p&gt;I know this is a 'complaint'-style post.&lt;/p&gt;

&lt;p&gt;(There's a lot of toxicity in software development) [&lt;a href="https://jamie.build/dear-javascript.html" rel="noopener noreferrer"&gt;https://jamie.build/dear-javascript.html&lt;/a&gt;]. This post is full of emotion (and contributes to that toxicity). &lt;/p&gt;

&lt;p&gt;But credit where credit is due.&lt;/p&gt;

&lt;p&gt;FontAwesome solved major problems with icons. The team worked really hard over the years. &lt;/p&gt;

&lt;p&gt;We stand on the shoulders of giants.&lt;/p&gt;

&lt;p&gt;But as we continue moving forward in web development, I'm sending FontAwesome into the 'thank you for your service' graveyard, along with jQuery, Bootstrap, Foundation, Gulp, and Sublime.&lt;/p&gt;

&lt;p&gt;Additionally, the bulk of my complaints is the &lt;code&gt;css&lt;/code&gt; portion of it. 90% of fontawesome projects I've worked in over the decade of development imported it this way.&lt;/p&gt;

&lt;p&gt;Using FontAwesome as single file &lt;code&gt;svgs&lt;/code&gt;, which is my current &lt;a href="https://fontawesome.com/docs/web/add-icons/svg-sprites" rel="noopener noreferrer"&gt;preferred way of importing icons&lt;/a&gt;, mitigates all of these problems. (Which then begs the question, "Why even use Font Awesome?")&lt;/p&gt;

&lt;h2&gt;
  
  
  Problem #1 - version nightmare
&lt;/h2&gt;

&lt;p&gt;If you were building a website in 2018, you may have used FontAwesome 5. Set it and forget it, right?&lt;/p&gt;

&lt;p&gt;Let's say you need a gameboy icon. Here is one!&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%2Fi.imgur.com%2Fln01rIS.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%2Fi.imgur.com%2Fln01rIS.png" alt="gameboy icon"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://fontawesome.com/v5/icons/game-console-handheld?s=solid" rel="noopener noreferrer"&gt;Direct link&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;i&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"fal fa-game-console-handheld"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/i&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;But it doesn't work. &lt;/p&gt;

&lt;p&gt;Here's all the reasons why.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;REASON 1&lt;/strong&gt;: You're on FontAwesome 5.0. And this is on FontAwesome 5.11.0. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;REASON 2&lt;/strong&gt;: This is a 'pro' font. You're using a free version.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;REASON 3&lt;/strong&gt;: You've been importing &lt;code&gt;solid&lt;/code&gt; versions of fonts. You should You need the &lt;code&gt;light&lt;/code&gt; versions.&lt;/p&gt;

&lt;p&gt;So not only does FontAwesome have minor versions, it also has variants! There's regular versions, light versions, solid versions, duotone versions, brands... all in separate files, with separate markup. &lt;/p&gt;

&lt;p&gt;This juggling of version and variant, if it's Free or Pro, and which of the many different files continues in FontAwesome 6. &lt;/p&gt;

&lt;h2&gt;
  
  
  Problem #2 -  Massive font set
&lt;/h2&gt;

&lt;p&gt;FontAwesome's strength is the range of icons.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;FontAwesome 3 - 321 icons (&lt;a href="https://fontawesome.com/v3/icons/" rel="noopener noreferrer"&gt;https://fontawesome.com/v3/icons/&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;FontAwesome 4 - 675 icons (&lt;a href="https://fontawesome.com/v4/icons/" rel="noopener noreferrer"&gt;https://fontawesome.com/v4/icons/&lt;/a&gt;)
FontAwesome 5 - 7,864 icons (&lt;a href="https://fontawesome.com/v5/icons/" rel="noopener noreferrer"&gt;https://fontawesome.com/v5/icons/&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;FontAwesome 6 - 16,000+ icons (&lt;a href="https://fontawesome.com/search" rel="noopener noreferrer"&gt;https://fontawesome.com/search&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;How many icons are you really using on your site? Maybe 6 or 7?&lt;/p&gt;

&lt;p&gt;Most sites (and I'm speaking from my own background) only use a handful of icons, like &lt;code&gt;magnifying-glass&lt;/code&gt; or &lt;code&gt;circle-question&lt;/code&gt; (&lt;a href="https://fontawesome.com/icons/circle-question?s=solid" rel="noopener noreferrer"&gt;https://fontawesome.com/icons/circle-question?s=solid&lt;/a&gt;) or social media icons. &lt;/p&gt;

&lt;p&gt;If you're importing a fontAwesome's &lt;code&gt;regular.css&lt;/code&gt;, you're bringing in hundreds of fonticons you don't need. It's even more nightmare-ish if you're getting a &lt;code&gt;circle-question&lt;/code&gt; icon (which lives in &lt;code&gt;regular.css&lt;/code&gt;) AND a Facebook icon (which lives in &lt;code&gt;brands.css&lt;/code&gt;). Now there's thousands of fonts imported... all eating bandwidth. Yum.&lt;/p&gt;

&lt;p&gt;You want to a few icons on your site? Gotta import the &lt;a href="https://github.com/FortAwesome/Font-Awesome/tree/6.x/webfonts" rel="noopener noreferrer"&gt;massive set of files&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;Defenders may say, "&lt;a href="https://fontawesome.com/docs/apis/javascript/tree-shaking" rel="noopener noreferrer"&gt;Well you can tree-shake it&lt;/a&gt;" or "&lt;a href="https://blog.webjeda.com/optimize-fontawesome/" rel="noopener noreferrer"&gt;optimize it&lt;/a&gt;". &lt;/p&gt;

&lt;p&gt;And you're right! So... how many devs even know to do that or have the gumption to set that up?&lt;/p&gt;

&lt;p&gt;TailwindCSS includes the entire kitchen sink as well. But they also include helpers to prune it all so you ship the absolute, smallest most performant css you can. &lt;/p&gt;

&lt;h2&gt;
  
  
  Problem #3 - Fonts first
&lt;/h2&gt;

&lt;p&gt;A major problem with font icons is that you're treating them like fonts first, not icons.&lt;/p&gt;

&lt;p&gt;You want a &lt;a href="https://fontawesome.com/icons/horse?s=solid" rel="noopener noreferrer"&gt;horse icon&lt;/a&gt; to be 100px wide. &lt;/p&gt;

&lt;p&gt;This won't work:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.fa-horse {
  width: 100px; /* does nothing */
  font-size: 100px;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Instead, you have to fiddle with this using &lt;code&gt;font-size&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;
  &lt;span&gt;See the Pen &lt;a href="https://codepen.io/rockykev/pen/MWQBVYP" rel="noopener noreferrer"&gt;
  Untitled&lt;/a&gt; by rockykev (&lt;a href="https://codepen.io/rockykev" rel="noopener noreferrer"&gt;@rockykev&lt;/a&gt;)
  on &lt;a href="https://codepen.io" rel="noopener noreferrer"&gt;CodePen&lt;/a&gt;.&lt;/span&gt;
&lt;/p&gt;

&lt;p&gt;&lt;a href="https://codepen.io/rockykev/pen/MWQBVYP?editors=1100" rel="noopener noreferrer"&gt;codepen&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That also means these icons are also affected by other css text modifiers, like &lt;code&gt;line-height&lt;/code&gt;. &lt;/p&gt;

&lt;p&gt;Are you screaming yet? 😱😱😱&lt;/p&gt;

&lt;h2&gt;
  
  
  Problem #4 - Changing APIs
&lt;/h2&gt;

&lt;p&gt;Let's use a real example. &lt;/p&gt;

&lt;p&gt;You have a feature for visitors to leave a review - a simple leave a 1 to 5 star review.&lt;/p&gt;

&lt;p&gt;Here's how to do that, depending on the FontAwesome version.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// FontAwesome 3
&amp;lt;i class="icon-star"&amp;gt;&amp;lt;/i&amp;gt; 

// FontAwesome 4
&amp;lt;i class="fa fa-star" aria-hidden="true"&amp;gt;&amp;lt;/i&amp;gt;

// FontAwesome 5
&amp;lt;i class="fas fa-star"&amp;gt;&amp;lt;/i&amp;gt;

// FontAwesome 6
&amp;lt;i class="fa-solid fa-star"&amp;gt;&amp;lt;/i&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Starting to see the problem? &lt;/p&gt;

&lt;p&gt;If I wanted to upgrade FontAwesome 3 to FontAwesome 6, I'll have to go find all the markup and fix that. &lt;/p&gt;

&lt;p&gt;Worst, try juggling multiple projects with multiple different versions of FontAwesome. It's a nightmare.&lt;/p&gt;

&lt;h2&gt;
  
  
  Problem #5 - Locking you into the model
&lt;/h2&gt;

&lt;p&gt;The last problem is that Pro is yearly.&lt;/p&gt;

&lt;p&gt;If I have FontAwesome 5 Pro, which I purchased in 2019, and I wanted a Tiktok logo, I'll have to either:&lt;/p&gt;

&lt;p&gt;Option 1: Keep FontAwesome 5 Pro and also include FontAwesome 6 brands&lt;br&gt;
Option 2: Buy FontAwesome 6 Pro.&lt;/p&gt;

&lt;p&gt;Just to get a TikTok logo, I now can either fracture my versions or pay $99. &lt;/p&gt;

&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;p&gt;All of these problems do have workarounds. The thing is -- all these problems are strictly from using FontAwesome! &lt;/p&gt;

&lt;p&gt;Instead, switch to SVGs. Boom! All the 5 problems disappeared. (And devs have been [banging their drum (2015 article)]...(&lt;a href="https://cloudfour.com/thinks/seriously-dont-use-icon-fonts/" rel="noopener noreferrer"&gt;https://cloudfour.com/thinks/seriously-dont-use-icon-fonts/&lt;/a&gt;) &lt;a href="https://www.irigoyen.dev/blog/2021/02/17/stop-using-icon-fonts/" rel="noopener noreferrer"&gt;to leaving icon fonts (2021 article)&lt;/a&gt; for years...)&lt;/p&gt;

&lt;p&gt;There's plenty of sites to score free SVGs or to buy SVGs. And SVGs are performant and AMAZING. (&lt;a href="https://lordicon.com/" rel="noopener noreferrer"&gt;Animated SVGs, wow!&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;After years of FontAwesome, I'm done.&lt;/p&gt;

&lt;p&gt;Thank you FontAwesome for your service. It's time to go.&lt;/p&gt;

</description>
      <category>fonts</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Election Week distractions?</title>
      <dc:creator>Rocky Kev</dc:creator>
      <pubDate>Mon, 02 Nov 2020 17:08:50 +0000</pubDate>
      <link>https://dev.to/rockykev/election-week-distractions-2n0n</link>
      <guid>https://dev.to/rockykev/election-week-distractions-2n0n</guid>
      <description>&lt;p&gt;There's many times in your life where the only thing you can do is wait. Maybe it's a test exam. Maybe it's your partner giving birth. Or maybe it's waiting for your the party to start/end at awkward Family Thanksgivings.&lt;/p&gt;

&lt;p&gt;For Americans, this week is going to be a long one.&lt;/p&gt;

&lt;p&gt;Because after voting -- all we can do is wait.&lt;/p&gt;

&lt;p&gt;So the question I'd love to throw out --- &lt;/p&gt;

&lt;p&gt;This week: what are you distracting yourself with?&lt;/p&gt;

</description>
      <category>discuss</category>
    </item>
    <item>
      <title>Building your own Modern CSS Design System</title>
      <dc:creator>Rocky Kev</dc:creator>
      <pubDate>Mon, 27 Jul 2020 15:38:14 +0000</pubDate>
      <link>https://dev.to/rockykev/building-your-own-modern-css-design-system-32kd</link>
      <guid>https://dev.to/rockykev/building-your-own-modern-css-design-system-32kd</guid>
      <description>&lt;p&gt;There's a lot of ways to tackle CSS. I want to introduce you to Modern CSS Design Systems, which uses CSS variables to declare your key design elements. &lt;/p&gt;

&lt;p&gt;Let's jump right into an example. Choose a new theme by clicking on any of the buttons in the top-right. &lt;/p&gt;

&lt;p&gt;&lt;iframe height="600" src="https://codepen.io/rockykev/embed/bGEJyjm?height=600&amp;amp;default-tab=result&amp;amp;embed-version=2"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;All those buttons did was change the values of the CSS variables. Rather than writing a completely new theme file, you change a dozen or two lines and boom -- new theme! Very powerful stuff.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;I took this course by the amazing &lt;a href="https://www.leveluptutorials.com/tutorials/modern-css-design-systems/" rel="noopener noreferrer"&gt;Scott Tolinski&lt;/a&gt; to understand Modern CSS Design Systems. I always struggled with writing clean CSS, and this methodology gave me a lot of tricks. &lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  What are design systems
&lt;/h2&gt;

&lt;p&gt;Major companies use design systems to create a standard design so their components look consistent across their entire suite of software - typically by loading those values in a JSON file. Using an example: In their design system, Uber may include their brand colors, 8 different logos depending on screen size, what type of icons to use where, and even the ratio of their border-radiuses. &lt;a href="https://www.invisionapp.com/inside-design/guide-to-design-systems/" rel="noopener noreferrer"&gt;More info on Design Systems&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This post is only taking the role of the CSS developer. &lt;br&gt;
Building your CSS design in this way will allow you&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;To switch themes on the fly (&lt;a href="https://codepen.io/rockykev/pen/bGEJyjm?editors=1000" rel="noopener noreferrer"&gt;like in my example&lt;/a&gt;) &lt;/li&gt;
&lt;li&gt;Build a strong CSS system that can tolerate changes&lt;/li&gt;
&lt;li&gt;Or even use a company-wide design system to programmically change your designs as needed &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The free &lt;a href="https://designcode.io/design-system-in-figma" rel="noopener noreferrer"&gt;Figma course on design systems&lt;/a&gt; will help fill in a lot of blanks.&lt;/p&gt;
&lt;h2&gt;
  
  
  Starting your CSS Design System
&lt;/h2&gt;
&lt;h3&gt;
  
  
  CSS Variables
&lt;/h3&gt;

&lt;p&gt;You should understand how CSS variables work. &lt;/p&gt;

&lt;p&gt;It looks like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nd"&gt;:root&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="py"&gt;--black&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#000000&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="py"&gt;--background&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;--black&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nt"&gt;body&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="n"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;--background&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;What you did here was: &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Declared a variable called &lt;code&gt;--black&lt;/code&gt;. &lt;/li&gt;
&lt;li&gt;Declared a variable called &lt;code&gt;--background&lt;/code&gt;, and passed the &lt;code&gt;--black&lt;/code&gt; value to it.&lt;/li&gt;
&lt;li&gt;Changed the background color of the body to the &lt;code&gt;--background&lt;/code&gt; variable.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If you decide to make the background red, you have to change the &lt;code&gt;--background&lt;/code&gt; variable.&lt;/p&gt;

&lt;p&gt;Why not pass our black color &lt;code&gt;#000000&lt;/code&gt; directly to our &lt;code&gt;--background&lt;/code&gt; variable? We'll cover that in a bit.&lt;/p&gt;

&lt;h3&gt;
  
  
  Classless CSS
&lt;/h3&gt;

&lt;p&gt;You should also get the concept of classless CSS. Classless CSS is defining the design directly on top of the core css. &lt;/p&gt;

&lt;p&gt;BAD&lt;br&gt;
&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;.paragraph&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="n"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;--baseFontSize&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;GOOD&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nt"&gt;p&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="n"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;--baseFontSize&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;It'll make you write cleaner, smaller, better CSS, instead of declaring a new class for every. single. element.&lt;/p&gt;

&lt;p&gt;Check out this whole list of CSS Frameworks, and check out the &lt;a href="https://github.com/troxler/awesome-css-frameworks" rel="noopener noreferrer"&gt;classless section&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Declaring Design Intentions
&lt;/h3&gt;

&lt;p&gt;You want to identify the intentions of your CSS elements. &lt;/p&gt;

&lt;p&gt;What are intentions? They are kind of like this image (minus the colors): &lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.ctfassets.net%2Fooa29xqb8tix%2F4p5RK1m91esG8wG2QO8wwy%2F51ef299dbbc56e39e725eae63dab3798%2Fdesign-system-all.jpg" 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%2Fimages.ctfassets.net%2Fooa29xqb8tix%2F4p5RK1m91esG8wG2QO8wwy%2F51ef299dbbc56e39e725eae63dab3798%2Fdesign-system-all.jpg"&gt;&lt;/a&gt;&lt;br&gt;
Borrowed from the free Figma course&lt;/p&gt;

&lt;p&gt;Some examples of Design Intentions:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nd"&gt;::root&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="py"&gt;--siteBackground&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;--lightGrey&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="py"&gt;--siteLines&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;solid&lt;/span&gt; &lt;span class="m"&gt;1px&lt;/span&gt; &lt;span class="n"&gt;var&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="py"&gt;--borderRadius&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1.2rem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="py"&gt;--bodylineHeight&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;2.1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="py"&gt;--headerBackground&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;--darkBlue&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="py"&gt;--footerBackground&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;--headerBackground&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;These are global variables you can call within your site. &lt;br&gt;
Notice that I called &lt;code&gt;--headerBackground&lt;/code&gt; inside the &lt;code&gt;--footerBackground&lt;/code&gt; variable, making them the same color.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt; &lt;span class="nd"&gt;::root&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
   &lt;span class="py"&gt;--headerBackground&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;--darkBlue&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

        &lt;span class="py"&gt;--footerBackground&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;--headerBackground&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="py"&gt;--cardBackground&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;--headerBackground&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="py"&gt;--formInputBackground&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;--headerBackground&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="py"&gt;--blockquoteBackground&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;--headerBackground&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;I can even do this. The footer, cards, form inputs, and blockquotes all match.&lt;/p&gt;

&lt;h3&gt;
  
  
  How do you declare them?
&lt;/h3&gt;

&lt;p&gt;BAD:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nt"&gt;h1&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nt"&gt;h2&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nt"&gt;h3&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nt"&gt;h4&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nt"&gt;h5&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nt"&gt;h6&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="s2"&gt;'Prata'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;serif&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;font-weight&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;400&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="err"&gt;...&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nt"&gt;body&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="s2"&gt;'Preahvihear'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;sans-serif&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;line-height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1.65&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="err"&gt;...&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

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

&lt;/div&gt;



&lt;p&gt;You declared your header/body CSS directly, starting off a pretty fragile design pattern. In the future, stakeholders want to switch out all the fonts, across multiple CSS files. It already sounds like a nightmare. &lt;/p&gt;

&lt;p&gt;GOOD:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nd"&gt;::root&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="py"&gt;--headingFont&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;'Prata'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;serif&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="py"&gt;--headingWeight&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;400&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="py"&gt;--bodyFont&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;'Preahvihear'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;sans-serif&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="py"&gt;--bodylineHeight&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1.65&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;  

&lt;span class="nt"&gt;h1&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nt"&gt;h2&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nt"&gt;h3&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nt"&gt;h4&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nt"&gt;h5&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nt"&gt;h6&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="n"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;--headingFont&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nl"&gt;font-weight&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;--headingWeight&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="err"&gt;...&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nt"&gt;body&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="n"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;--bodyFont&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nl"&gt;line-height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;--bodylineHeight&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="err"&gt;...&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

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

&lt;/div&gt;



&lt;p&gt;Let's go with another example: &lt;/p&gt;

&lt;p&gt;BAD&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nd"&gt;::root&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="py"&gt;--green&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#b2c16c&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nt"&gt;body&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;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;--green&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nt"&gt;a&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;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;--green&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nt"&gt;textarea&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;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;--green&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;In that BAD example, the colors are being called directly. &lt;/p&gt;

&lt;p&gt;GOOD&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nd"&gt;::root&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
   &lt;span class="c"&gt;/* Define colors as colors */&lt;/span&gt;
    &lt;span class="py"&gt;--green&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#b2c16c&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="c"&gt;/* Define color intentions*/&lt;/span&gt;
    &lt;span class="py"&gt;--siteBackground&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;--green&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="py"&gt;--linkColor&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;--green&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="py"&gt;--formTextarea&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;--green&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nt"&gt;body&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;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;--siteBackground&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nt"&gt;a&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;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;--linkColor&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nt"&gt;textarea&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;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;--formTextarea&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;Congrats! You just made your CSS code anti-fragile! If you change the color intentions, you modify the rest of the design! &lt;/p&gt;

&lt;h2&gt;
  
  
  Stripey.CSS
&lt;/h2&gt;

&lt;p&gt;I built Stripey.css as a learning tool. I also went wild with design intentions, just to see how much I can change.&lt;/p&gt;

&lt;p&gt;To make a new theme within stripey.css, you copy the &lt;code&gt;::root&lt;/code&gt; into it's own class (like I did with &lt;code&gt;.theme1 .theme2 .theme3&lt;/code&gt;) and swap variable choices on the click event. &lt;/p&gt;

&lt;p&gt;It's the absolute easiest way to make a dark mode, oled mode, floral mode, etc.&lt;/p&gt;

&lt;p&gt;&lt;iframe height="600" src="https://codepen.io/rockykev/embed/bGEJyjm?height=600&amp;amp;default-tab=css&amp;amp;embed-version=2"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  Questions
&lt;/h2&gt;

&lt;p&gt;** 1. Are you declaring everything as a 'design intention'?**&lt;/p&gt;

&lt;p&gt;It's a pick-and-choose battle. I still hardcode a lot of key elements, like padding or alignment. The goal is that you modify only a small subset of CSS variables to create a massive change. Each one of stripey.css' theme is roughly 100 lines of CSS (most is duplicated from the default!&lt;/p&gt;

&lt;p&gt;** 2. Classless CSS? I need classes!**&lt;/p&gt;

&lt;p&gt;Me too buddy! Classless CSS systems are just templates with another name. Build on top of them. &lt;/p&gt;

&lt;p&gt;** 3. Why stripey.css? There's no stripes.** &lt;/p&gt;

&lt;p&gt;My cat buddy Stripey died while I was going through the course. It's in honor of that little furball.&lt;/p&gt;

&lt;h2&gt;
  
  
  Additional resources:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;I used this site to pick out header/body fonts: &lt;a href="https://type-scale.com/" rel="noopener noreferrer"&gt;https://type-scale.com/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;I used this site to create shades/tints of colors:  &lt;a href="https://www.cssfontstack.com/oldsites/hexcolortool/" rel="noopener noreferrer"&gt;https://www.cssfontstack.com/oldsites/hexcolortool/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;This site was used as inspiration.&lt;a href="https://www.happyhues.co/" rel="noopener noreferrer"&gt;https://www.happyhues.co/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Finally, I borrowed (really stole) a lot of concepts from Tailwind CSS: &lt;a href="https://tailwindcss.com/docs/box-shadow/" rel="noopener noreferrer"&gt;https://tailwindcss.com/docs/box-shadow/&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>css</category>
    </item>
    <item>
      <title>Github is replacing the word master to avoid slavery references. Deal with it.</title>
      <dc:creator>Rocky Kev</dc:creator>
      <pubDate>Sun, 14 Jun 2020 20:41:08 +0000</pubDate>
      <link>https://dev.to/rockykev/github-is-replacing-the-word-master-to-avoid-slavery-references-deal-with-it-86b</link>
      <guid>https://dev.to/rockykev/github-is-replacing-the-word-master-to-avoid-slavery-references-deal-with-it-86b</guid>
      <description>&lt;p&gt;First, Github is making some changes.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;GitHub is working on replacing the term "master" on its service with a neutral term like "main" to avoid any unnecessary references to slavery, its CEO said on Friday.&lt;a href="https://www.zdnet.com/article/github-to-replace-master-with-alternative-term-to-avoid-slavery-references/"&gt;via zdnet&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  What the internet is saying
&lt;/h2&gt;

&lt;p&gt;There's some interesting conversations I was having in with my dev friends on Slack. Much is shrugging. &lt;/p&gt;

&lt;p&gt;But the vocal parts of the internet?&lt;/p&gt;

&lt;p&gt;&lt;a href="https://twitter.com/Una/status/1271180494944829441?ref_src=twsrc%5Etfw%7Ctwcamp%5Etweetembed%7Ctwterm%5E1271253144442253312&amp;amp;ref_url=https%3A%2F%2Fwww.zdnet.com%2Farticle%2Fgithub-to-replace-master-with-alternative-term-to-avoid-slavery-references%2F"&gt;Twitter is typical Twitter - lots of opinions in 240 characters&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.reddit.com/r/github/comments/h8u7fo/github_to_replace_master_with_alternative_term_to/"&gt;Reddit commenters are pretty negative (as usual to anything)&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Heck, within that &lt;a href="https://www.zdnet.com/article/github-to-replace-master-with-alternative-term-to-avoid-slavery-references/"&gt;Zdnet post&lt;/a&gt; are some really awful comments. &lt;/p&gt;

&lt;h2&gt;
  
  
  My personal opinion?
&lt;/h2&gt;

&lt;p&gt;There's no slave model in Git. I personally think it's a stretch to connect the word Master with the whole Master/Slave concept in tech.&lt;/p&gt;

&lt;h2&gt;
  
  
  Opinions are like butts
&lt;/h2&gt;

&lt;p&gt;Everyone has opinions. You're allowed to have opinions. You also have a butt. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--9yKRHaGX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://i.imgur.com/PHncVU7.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--9yKRHaGX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://i.imgur.com/PHncVU7.gif" alt="butt" width="512" height="512"&gt;&lt;/a&gt;&lt;/p&gt;
Please avoid putting it in people's faces who don't want it.



&lt;p&gt;I started to really think this through - is changing the word &lt;code&gt;master&lt;/code&gt; to &lt;code&gt;main&lt;/code&gt; important to me?&lt;/p&gt;

&lt;p&gt;Nope! &lt;/p&gt;

&lt;p&gt;It doesn't affect me in the slightest. &lt;/p&gt;

&lt;p&gt;So my opinion is kinda moot. It doesn't matter. It's a waste of energy to think about. And of all the hills to die on, this is not one of them.&lt;/p&gt;

&lt;p&gt;But let's go through the excuses because why not?&lt;/p&gt;

&lt;h2&gt;
  
  
  Excuses you'll hear why it's a bad idea
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Excuse 1: It's just language policing
&lt;/h3&gt;

&lt;p&gt;As a developer, why are you so invested?&lt;/p&gt;

&lt;p&gt;You can name &lt;strong&gt;anything with anything&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;&lt;code&gt;sayHello&lt;/code&gt; &amp;amp; &lt;code&gt;i&lt;/code&gt; are the same.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const sayHello = 'Hello, there';
const i = 'Hello, there';
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now, &lt;code&gt;i&lt;/code&gt; doesn't make sense as a variable name at all. There's no meaning what &lt;code&gt;i&lt;/code&gt; represents and it's a terrible practice.&lt;/p&gt;

&lt;p&gt;While changing &lt;code&gt;master&lt;/code&gt; to &lt;code&gt;main&lt;/code&gt; doesn't have any implications.&lt;/p&gt;

&lt;h3&gt;
  
  
  Excuse 2: It's a slippery slope
&lt;/h3&gt;

&lt;p&gt;As a developer, programming is a slippery slope!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.ted.com/playlists/228/how_language_changes_over_time"&gt;Languages change over time. Tedtalk video&lt;/a&gt; That's how languages work. Go ahead - travel back in time with your English speaking skills. You definitely won't be able to speak the &lt;a href="http://www.todayifoundout.com/index.php/2019/07/how-far-back-in-time-could-a-modern-english-speaker-go-and-still-communicate-effectively/"&gt;same English&lt;/a&gt; to another english speaker in the 1200s. &lt;/p&gt;

&lt;p&gt;When Python removes the &lt;a href="https://www.vice.com/en_us/article/8x7akv/masterslave-terminology-was-removed-from-python-programming-language"&gt;master/slave terminology&lt;/a&gt;, Python didn't break. Life moves on.&lt;/p&gt;

&lt;h3&gt;
  
  
  Excuse 3: It makes the internet/tech nerds mad
&lt;/h3&gt;

&lt;p&gt;So? Remember the &lt;code&gt;opinions == butts&lt;/code&gt; part? This guy from 2015 thinks &lt;a href="https://www.pandastrike.com/posts/20150311-react-bad-idea/"&gt;React is bad&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;People get mad and butthurt about everything. &lt;/p&gt;

&lt;h3&gt;
  
  
  Excuse 4: Why change it now? It was fine how it was!
&lt;/h3&gt;

&lt;p&gt;This screams 'We've Always Done It This Way', which is one of the &lt;a href="https://www.forbes.com/sites/forbeslacouncil/2019/01/28/the-most-dangerous-phrase-in-business-weve-always-done-it-this-way/#29ebda9b40f7"&gt;most dangerous phrases in business&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;'We've Always Done It This Way' is a fundamentally broken concept. If it wasn't, we'd still be using Netscape and writing pure HTML/CSS.&lt;/p&gt;

&lt;h3&gt;
  
  
  Excuse 5: There's nothing innovative about changing it to &lt;code&gt;main&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Finally you're getting it! It's a nothing burger. &lt;/p&gt;

&lt;p&gt;But at the end of the day, the change is the change and life moves on.&lt;/p&gt;

&lt;p&gt;But if you still have very strong opinions and feel like you're fighting against some weird 1984-cult language, I invite you to relax and take a break from the internet, and when you're ready, &lt;a href="https://www.buttsss.com/"&gt;put your opinions here&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>github</category>
      <category>language</category>
    </item>
  </channel>
</rss>
