<?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: Paul Cook</title>
    <description>The latest articles on DEV Community by Paul Cook (@cookavich).</description>
    <link>https://dev.to/cookavich</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%2F25773%2F586e0238-3203-475a-957a-91aeaafcc9c3.jpeg</url>
      <title>DEV Community: Paul Cook</title>
      <link>https://dev.to/cookavich</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/cookavich"/>
    <language>en</language>
    <item>
      <title>Product management doesn't have to be hard: 5 tools you can steal from Basecamp today</title>
      <dc:creator>Paul Cook</dc:creator>
      <pubDate>Sun, 09 Aug 2020 19:15:15 +0000</pubDate>
      <link>https://dev.to/cookavich/product-management-doesn-t-have-to-be-hard-5-tools-you-can-steal-from-basecamp-today-3c63</link>
      <guid>https://dev.to/cookavich/product-management-doesn-t-have-to-be-hard-5-tools-you-can-steal-from-basecamp-today-3c63</guid>
      <description>&lt;p&gt;If the first thing that comes to your mind when you think of product management is Gantt charts and analyses that seem like they need an MBA then you think product management is hard.&lt;/p&gt;

&lt;p&gt;As developers, we know how to build. Give us a side project we can work alone on and consider it done.&lt;/p&gt;

&lt;p&gt;But when you get a bigger team with a more mature product it gets complicated.&lt;/p&gt;

&lt;p&gt;You might have to start thinking about things like epics, velocity, capacity management, etc., and then we have to consider the tools to manage that complexity.&lt;/p&gt;

&lt;p&gt;We think we need to use diagrams that have the word "matrix" in them that some consultants from McKinsey invented.&lt;/p&gt;

&lt;p&gt;Have you ever wondered if it had to be that hard?&lt;/p&gt;

&lt;p&gt;Do you need to have an MBA from Harvard or Stanford to run a product management process?&lt;/p&gt;

&lt;p&gt;I don't think so.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Shape Up&lt;/strong&gt; by Ryan Singer gives us a bit of a glimpse of what a simpler product management process could look like.&lt;/p&gt;

&lt;p&gt;It's all about the process Basecamp has used for the last 15 years to develop products.&lt;/p&gt;

&lt;p&gt;What this post is about showing you 5 product management tools and techniques you can steal and use right away.&lt;/p&gt;

&lt;p&gt;These are tools that Basecamp came up with to work within their product development system, but I've found them to be helpful in the pseudo-scrum-kanban-agile systems that a lot of us work in.&lt;/p&gt;

&lt;p&gt;Here are the tools:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Design Tools&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Breadboarding&lt;/li&gt;
&lt;li&gt;Fat Marker Sketches&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Product Management Tools&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The Pitch&lt;/li&gt;
&lt;li&gt;Scope Map&lt;/li&gt;
&lt;li&gt;Hill Chart&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Design Tools
&lt;/h2&gt;

&lt;p&gt;There's a Goldilocks zone for design specifications.&lt;/p&gt;

&lt;p&gt;I used to think I always needed a pixel perfect design fresh from Photoshop.&lt;/p&gt;

&lt;p&gt;Here's the problem: you can have a design that's too high fidelity.&lt;/p&gt;

&lt;p&gt;With software development, it's not a question of whether you can build a design. You can build anything, but do you want to spend the time it's going to take to build that design you're so hyped about?&lt;/p&gt;

&lt;p&gt;Sometimes you do, but if the early design is set in stone without considering the implementation you could run into trouble.&lt;/p&gt;

&lt;p&gt;There's another extreme, too. Instead of a design, you get a ticket or user story that describes the solution with a paragraph of text.&lt;/p&gt;

&lt;p&gt;There's more freedom with that, but sometimes too much freedom can crush you.&lt;/p&gt;

&lt;p&gt;All of a sudden you're not sure the boundaries of the solution, and you have to figure out what the design will be at the same time as you're figuring out the functionality.&lt;/p&gt;

&lt;p&gt;In both situations, there could be edge cases that cause the project to explode.&lt;/p&gt;

&lt;p&gt;Two tools that help here:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Breadboarding&lt;/li&gt;
&lt;li&gt;Fat Marker Sketches&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Tool #1: Breadboarding&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--glqyciln--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/3vhjxl1613vshfcexqbc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--glqyciln--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/3vhjxl1613vshfcexqbc.png" alt="Breadboard from Shape Up"&gt;&lt;/a&gt;&lt;br&gt;
Source: &lt;a href="https://basecamp.com/shapeup/1.3-chapter-04"&gt;Shape Up&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Think of breadboarding like a textual map of the UI. It's like a statechart for product management.&lt;/p&gt;

&lt;p&gt;It's called &lt;strong&gt;breadboarding&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Why? Because it's inspired by the breadboards of circuit design which allow you to prototype and test circuits without having to worry about the final design.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--FFjRtWbp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/lp8cziklwi1o15d06uj6.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--FFjRtWbp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/lp8cziklwi1o15d06uj6.jpg" alt="A circuit breadboard"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It's a tool that allows us to think through our UI solution.&lt;/p&gt;

&lt;p&gt;It consists of these elements:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Places&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Affordances&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Connection lines&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Places&lt;/strong&gt; are where users can navigate to like pages, dialogs, menus, etc.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Affordances&lt;/strong&gt; is a fancy word for something a user can do (think a button or form field), or shows a user what can be done (think UX copy or an icon).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Connection lines&lt;/strong&gt; show what happens when a user interacts with an affordance.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--wTeu1R_A--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/812j4qtuwp64hkuj4pzc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--wTeu1R_A--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/812j4qtuwp64hkuj4pzc.png" alt="What breadboarding looks like"&gt;&lt;/a&gt;&lt;br&gt;
Source: &lt;a href="https://basecamp.com/shapeup/1.3-chapter-04"&gt;Shape Up&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The big win from this is how it allows us to think through the user's path without having to get too concrete too early.&lt;/p&gt;

&lt;p&gt;We don't get hung up on early design ideas because all we have is text, but it's concrete enough to allow us to see what &lt;strong&gt;won't&lt;/strong&gt; work.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Tool #2: Fat Marker Sketches&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--G-sukbYC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/iwlqb2e258zsa6krnjws.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--G-sukbYC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/iwlqb2e258zsa6krnjws.png" alt="A fat marker sketch of a dot calendar"&gt;&lt;/a&gt;&lt;br&gt;
Source: &lt;a href="https://basecamp.com/shapeup/1.3-chapter-04"&gt;Shape Up&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;There are times when text alone isn't enough, and you need to sketch out an idea&lt;/p&gt;

&lt;p&gt;A drag and drop interface of some sort comes to mind. They can be complicated enough that breadboarding alone wouldn't be sufficient.&lt;/p&gt;

&lt;p&gt;At the same time, you might not need to jump into detailed mockups.&lt;/p&gt;

&lt;p&gt;That is where &lt;strong&gt;fat marker sketches&lt;/strong&gt; come in.&lt;/p&gt;

&lt;p&gt;It's almost laughable to call this a technique, but I can testify to its value.&lt;/p&gt;

&lt;p&gt;A fat marker sketch is a low-fidelity wireframe done with a tool (like a &lt;a href="https://www.amazon.com/Sharpie-15001-Chisel-Permanent-Markers/dp/B00006IFGP"&gt;king size Sharpie&lt;/a&gt;) that limits the amount of detail we can show.&lt;/p&gt;

&lt;p&gt;It's not going to be confused with a mock-up, and because of that, it's not going to tie anyone's hands further down the line. It gives room for interpretation so that the designer and the developer can make the best possible choices as they work on the design and implementation.&lt;/p&gt;

&lt;p&gt;The lack of detail is a feature, not a bug.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--JTAiarbX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/fsfppiihck58qmfinxyj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--JTAiarbX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/fsfppiihck58qmfinxyj.png" alt="A fat marker sketch of a todo list where you can add in headings"&gt;&lt;/a&gt;&lt;br&gt;
Source: &lt;a href="https://basecamp.com/shapeup/1.3-chapter-04"&gt;Shape Up&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Product Management Tools
&lt;/h2&gt;

&lt;p&gt;This next class of tools is what I consider to be core product management tools.&lt;/p&gt;

&lt;p&gt;They help you get a handle on where the project is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;What even are we working on?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What are the independent parts?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;How close are we to completion?&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Important questions for any project.&lt;/p&gt;

&lt;p&gt;Three tools help us with that:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Pitches&lt;/li&gt;
&lt;li&gt;Scope maps&lt;/li&gt;
&lt;li&gt;Hill Charts&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Tool #3: Pitches&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;I don't know about you, but I've worked on a bunch of disconnected and disembodied user stories and tickets over the years that I've had zero clues on how they relate to the overall vision of the project.&lt;/p&gt;

&lt;p&gt;How does "as a user, I can edit my profile picture" connect to what we were doing again?&lt;/p&gt;

&lt;p&gt;The worst part about not knowing how things connect is it often leads to bad outcomes during integration phases of later user stories/tickets.&lt;/p&gt;

&lt;p&gt;You might not have thought about how one piece interacts with a later part of the project because you never knew you would need to think about it. When it comes time to build that later piece you have to rework a lot of what you already had done.&lt;/p&gt;

&lt;p&gt;Not good.&lt;/p&gt;

&lt;p&gt;But what can be done?&lt;/p&gt;

&lt;p&gt;Enter the &lt;strong&gt;pitch&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;All the pitch is, is a write up of a proposal for a new feature or an improvement.&lt;/p&gt;

&lt;p&gt;It's obvious, right? But I've worked on plenty of projects or features that didn't have anything like it associated with them.&lt;/p&gt;

&lt;p&gt;At least not anything that I saw.&lt;/p&gt;

&lt;p&gt;Think of it like pitching any idea:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;A company&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;A movie&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;A book&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The pitch has to persuade and explain. In the case of products, we want to persuade why what we're proposing matters and how it will work.&lt;/p&gt;

&lt;p&gt;It has five ingredients:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Problem&lt;/li&gt;
&lt;li&gt;Appetite&lt;/li&gt;
&lt;li&gt;Solution&lt;/li&gt;
&lt;li&gt;Rabbit holes&lt;/li&gt;
&lt;li&gt;No-gos&lt;/li&gt;
&lt;/ol&gt;

&lt;h4&gt;
  
  
  Problem
&lt;/h4&gt;

&lt;p&gt;What problem will your solution solve?&lt;/p&gt;

&lt;p&gt;Is there an issue customers are facing? Common complaint?&lt;/p&gt;

&lt;p&gt;This is what will motivate people to want to work on the feature. They buy into the problem you present as being worth solving.&lt;/p&gt;

&lt;h4&gt;
  
  
  Appetite
&lt;/h4&gt;

&lt;p&gt;How much time are you willing to spend on solving your problem?&lt;/p&gt;

&lt;p&gt;I love this concept of appetite. If you only want to spend two weeks solving a problem that will constrain what you do as compared to two months.&lt;/p&gt;

&lt;p&gt;The appetite will serve to frame your solution. Some problems are worth spending months on, but if you look at what your appetite is for a project you might find it's less than you might think.&lt;/p&gt;

&lt;p&gt;I've estimated a lot of projects over the years, and what is seldom known is how much time the business is willing to spend. In other words, seldom is it asked what the appetite is.&lt;/p&gt;

&lt;p&gt;So many ideas never get worked on because the estimate ends up being huge when if the appetite was known from the beginning the proposed solution could have been scaled down.&lt;/p&gt;

&lt;p&gt;One way Basecamp constrains their appetites for even massive projects is keeping the work to 6 week cycles. They seek to find the 6 week version of the solution to fit the problem.&lt;/p&gt;

&lt;h4&gt;
  
  
  Solution
&lt;/h4&gt;

&lt;p&gt;Once you know the problem you're trying to solve, and how much time you're willing to spend to solve it you can work on finding the solution.&lt;/p&gt;

&lt;p&gt;This is the proposal on how to solve the problem within the allotted appetite.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;What are the elements that need to be there?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What are the nice-to-haves?&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Should be clear and include visual aids to understand what needs to be done.&lt;/p&gt;

&lt;h4&gt;
  
  
  Rabbit holes
&lt;/h4&gt;

&lt;p&gt;As you're thinking through the solution keep an eye out for possible distractions. These can be nice-to-haves that you can see having the potential of being a major time sink.&lt;/p&gt;

&lt;p&gt;Make those explicit and optional. If we have a specific appetite for the project we should be willing to give up parts of our solution that are not central to solving the problem.&lt;/p&gt;

&lt;h4&gt;
  
  
  No-gos
&lt;/h4&gt;

&lt;p&gt;These are things we explicitly aren't going to do. Doesn't mean we won't do them ever, but we don't want our time eaten up by them right now.&lt;/p&gt;

&lt;p&gt;Shape Up gives the example of a team forgoing making a particular form field WYSIWYG. That would be a nice improvement, but it's not central to the solution and can be done later if needed.&lt;/p&gt;

&lt;h4&gt;
  
  
  Write and present
&lt;/h4&gt;

&lt;p&gt;Once you have all your ingredients gathered you write it up and present.&lt;/p&gt;

&lt;p&gt;At Basecamp they use Basecamp to present, but you could use email or even a GitHub issue to layout your proposal.&lt;/p&gt;

&lt;p&gt;Having it written is important. It gives people the option to read, digest slowly, and give measured feedback.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--5lrxE_j1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/4r3h2899sfmft5a5489l.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--5lrxE_j1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/4r3h2899sfmft5a5489l.png" alt="A completed pitch for a project written by Jason Fried"&gt;&lt;/a&gt;&lt;br&gt;
Source: &lt;a href="https://basecamp.com/shapeup/1.5-chapter-06"&gt;Shape Up&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Tool #4: Scope Maps&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--m0jQnKhG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/7g77zi921ioaw8jryl0v.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--m0jQnKhG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/7g77zi921ioaw8jryl0v.png" alt="A scope map of a project"&gt;&lt;/a&gt;&lt;br&gt;
Source: &lt;a href="https://basecamp.com/shapeup/3.3-chapter-12"&gt;Shape Up&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The work in a lot of projects isn't divided up well.&lt;/p&gt;

&lt;p&gt;Sometimes they're divided up by who will be doing the work. That can be fine, but if, for instance, the front end work is too disconnected from the backend work it can create communication problems.&lt;/p&gt;

&lt;p&gt;It can also mean that the individual members of the team don't have a good sense of the overall scope of what they're working on because they're focused on a small subset of a slice of the problem.&lt;/p&gt;

&lt;p&gt;Or we divide up the project and then try to move all the separate parts forward at the same time without ever completing something until at the end.&lt;/p&gt;

&lt;p&gt;This hurts the context we can build when we focus on completing the independent pieces one at a time.&lt;/p&gt;

&lt;p&gt;This is where the &lt;strong&gt;scope map&lt;/strong&gt; is helpful.&lt;/p&gt;

&lt;p&gt;You can think of the scope map like the product manager's version of a butcher map.&lt;/p&gt;

&lt;p&gt;A butcher's map of an animal shows where different cuts of meat come from.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--mEtO7KPG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/yda4yqft57bfisp36rue.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--mEtO7KPG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/yda4yqft57bfisp36rue.jpg" alt="A butcher's map of a cow"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In the case of the scope map, we want to show what the individual pieces of the project are.&lt;/p&gt;

&lt;p&gt;In other words, what are the smaller individual scopes in this project that can be completed independently of one another?&lt;/p&gt;

&lt;p&gt;As you do discovery and start working on a project you start to see the individual pieces that need to be done. You might organize this into some sort of todo list, user stories, or something else.&lt;/p&gt;

&lt;p&gt;At first, you'll just have one big list, but the goal of the scope map is not to leave it that way.&lt;/p&gt;

&lt;p&gt;Instead, you want to start grouping those items that make up the orthogonal pieces so they can be done separately.&lt;/p&gt;

&lt;p&gt;And then you start working on them one slice at a time.&lt;/p&gt;

&lt;p&gt;It's important to know that you might not have the scopes fully mapped out at the start of the project. There will be things you discover later on that reveal further scopes to you.&lt;/p&gt;

&lt;p&gt;That's okay. It's all part of the process.&lt;/p&gt;

&lt;p&gt;The goal with the scope map is to have a map of what needs to be done so you don't get lost along the way.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Tool #5: Hill Charts&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--8x9v0EYB--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/jidwiidb5bm7apz085ys.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--8x9v0EYB--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/jidwiidb5bm7apz085ys.png" alt="A hill chart"&gt;&lt;/a&gt;&lt;br&gt;
Source: &lt;a href="https://www.feltpresence.com/hills.html"&gt;Ryan Singer&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It can be hard to know how close a project is to "done," especially, if you're not doing the work yourself.&lt;/p&gt;

&lt;p&gt;The developers might have a fingertip feel of how close they are to being complete, but even they can be wildly off if they have tunnel vision on whatever it is they're working on.&lt;/p&gt;

&lt;p&gt;You might not be able to tell if a particular ticket or user story is 10% or 90% done.&lt;/p&gt;

&lt;p&gt;Even if you have a todo list associated with the task there could be items that take as much time to complete as the rest of the list combined. If you just went by the percentage of items complete you could be WAY off.&lt;/p&gt;

&lt;p&gt;Basecamp's solution to this uncertainty is the &lt;strong&gt;hill chart&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Hill charts start with the assumption that there are two main phases of work for a project:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Uphill&lt;/li&gt;
&lt;li&gt;Downhill&lt;/li&gt;
&lt;/ol&gt;

&lt;h4&gt;
  
  
  Uphill
&lt;/h4&gt;

&lt;p&gt;The uphill part of a project is when you're struggling to get it to the top. You can't see the other side so you're not quite sure how close you are to completion.&lt;/p&gt;

&lt;p&gt;There's a lot of unknowns left to discover.&lt;/p&gt;

&lt;p&gt;In the uphill phase, you could be knocked back down the slope. Maybe you discover the data you'll need for a particular task isn't where you thought it was, and so you have to go out and get that data when you weren't planning to.&lt;/p&gt;

&lt;h4&gt;
  
  
  Downhill
&lt;/h4&gt;

&lt;p&gt;Once you crest the top of the hill things become easier. You can see what's left to be done laid out before you, and you know the path to get it done.&lt;/p&gt;

&lt;p&gt;Momentum can take over as you knock off one task after another.&lt;/p&gt;

&lt;h4&gt;
  
  
  The power of the hill chart
&lt;/h4&gt;

&lt;p&gt;The power of the hill chart is it allows you to visualize the progress of a project. You can see where the uncertainty is. What needs extra effort to be pushed up the hill.&lt;/p&gt;

&lt;p&gt;Maybe you'll devote more resources to it, or simply be able to see what's going on.&lt;/p&gt;

&lt;p&gt;From day to day people can update where things are at. One item was near the top of the hill yesterday, but new issues or problems have arisen and it's rolled halfway back down the hill today.&lt;/p&gt;

&lt;p&gt;That's valuable data for any team.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ifwdSHBF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/wq4wenye628nlt2q1c32.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ifwdSHBF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/wq4wenye628nlt2q1c32.png" alt="A hill chart and a scope map"&gt;&lt;/a&gt;&lt;br&gt;
Source: &lt;a href="https://basecamp.com/shapeup/3.4-chapter-13"&gt;Shape Up&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Hill charts are guesses
&lt;/h4&gt;

&lt;p&gt;It's important to know: &lt;strong&gt;this is a guesstimate&lt;/strong&gt; , and it's always subject to the fallibility of people.&lt;/p&gt;

&lt;p&gt;We're not making a quantitative judgment. In some sense, it's kind of like a thermometer. How does the team feel the project is going?&lt;/p&gt;

&lt;h4&gt;
  
  
  How do you create a hill chart?
&lt;/h4&gt;

&lt;p&gt;The main tool I know of is in Basecamp. Now, I don't use Basecamp, but there's no reason you couldn't use a whiteboard.&lt;/p&gt;

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

&lt;p&gt;There's way more in Shape Up than these tools.&lt;/p&gt;

&lt;p&gt;It's a look behind the curtain of what product management can look like outside of Agile/Kanban/Scrum.&lt;/p&gt;

&lt;p&gt;Your team might not be ready to adopt all the practices in it (mine isn't!), but there's no reason you can't steal these 5 simple tools and make life a little easier for your product management process.&lt;/p&gt;

</description>
      <category>design</category>
      <category>productmanagement</category>
      <category>productdevelopment</category>
      <category>books</category>
    </item>
    <item>
      <title>Painless Code Reviews</title>
      <dc:creator>Paul Cook</dc:creator>
      <pubDate>Wed, 27 May 2020 18:43:13 +0000</pubDate>
      <link>https://dev.to/cookavich/painless-code-reviews-1c4k</link>
      <guid>https://dev.to/cookavich/painless-code-reviews-1c4k</guid>
      <description>&lt;p&gt;Code reviews can have a bad reputation. We’ve all heard, been witness to, or lived through horror stories where every last line is torn to shreds.&lt;/p&gt;

&lt;p&gt;So much feedback that you have to scroll and then keep on scrolling to get to the bottom.&lt;/p&gt;

&lt;p&gt;And the comments! So directed and personal that you would think they were meant to be personal.&lt;/p&gt;

&lt;p&gt;The knives were brought out and we were cut up in public like a street fight.&lt;/p&gt;

&lt;p&gt;They can make us angry, ashamed, or embarrassed. At the end of it you wonder, "&lt;strong&gt;what could I have done differently?&lt;/strong&gt;"&lt;/p&gt;

&lt;p&gt;That’s what this post is about.&lt;/p&gt;

&lt;p&gt;What &lt;em&gt;can&lt;/em&gt; you do differently?&lt;/p&gt;

&lt;p&gt;How can you make reviewing our code painless so that even the biggest nitpick on your team has nothing but praise?&lt;/p&gt;

&lt;p&gt;Let me offer you a few tips that have helped me.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Golden Rule: Minimize the Number of Roundtrips
&lt;/h2&gt;

&lt;p&gt;"Roundtrips (from teammate to reviewer back to teammate) are expensive, costing up to two working days of a sprint each time."&lt;/p&gt;

&lt;p&gt;From: &lt;a href="https://www.netlify.com/blog/2020/03/05/feedback-ladders-how-we-encode-code-reviews-at-netlify/"&gt;Feedback Ladders: The Code Review System We Follow at Netlify&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;As much as possible reduce the number of roundtrips in the code review process.&lt;/p&gt;

&lt;p&gt;What do I mean by roundtrips?&lt;/p&gt;

&lt;p&gt;I mean those back and forth exchanges where the reviewer asks you why you didn’t go with a particular solution, and you have to explain why you tried what they suggested but it didn’t work.&lt;/p&gt;

&lt;p&gt;And then the reviewer asks what problem you were solving with a particular design decision, and after your answer asks some follow up questions.&lt;/p&gt;

&lt;p&gt;Repeat ad nauseam until by the end everyone is annoyed.&lt;/p&gt;

&lt;p&gt;Why do I call it the golden rule?&lt;/p&gt;

&lt;p&gt;"Do unto others as you would have them do unto you." Because I hate the back and forth when I’m reviewing someone else’s ticket. It’s what I wish others would do for code that I review, so, I’m going to do it for others.&lt;/p&gt;

&lt;p&gt;There’s a few ways I’ve found to reduce the roundtrips.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Document ambiguous design decisions&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;There are times when you reach a fork in the road. You're solving a problem, and you could go with A or B (maybe even C, D, or E).&lt;/p&gt;

&lt;p&gt;You weigh which design is the best, and you make your choice after having carefully considered each option.&lt;/p&gt;

&lt;p&gt;Recently I got some feedback in a code review that was basically, "why didn't you go with option D?" What they didn't know was that I had that and it didn't work, so, I went with B.&lt;/p&gt;

&lt;p&gt;What I could have done (and what I do in my better moments) is describe why I chose the solution I did, which other solutions I considered, and the ones I tried but didn't work.&lt;/p&gt;

&lt;p&gt;You don’t always have to go into *that *much detail, but if you think there’s reason to then do it.&lt;/p&gt;

&lt;p&gt;Most of the time I'll leave these comments in the ticket after I finish so the person reviewing has more context to help their review.&lt;/p&gt;

&lt;p&gt;Occasionally, you'll find these comments are so valuable they should be put into the documentation to explain things like architecture and design patterns, or left as comments in the code itself.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Preemptively review your code&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;When you make that last commit, and push the code your job isn’t done yet.&lt;/p&gt;

&lt;p&gt;Try to look at your code from the perspective of another person.&lt;/p&gt;

&lt;p&gt;This might mean giving it a day for the code to sit so you can come back with fresh eyes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Imagine it wasn't you that wrote it&lt;/strong&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Where might there be confusion?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What issues might there be for someone else who comes to the code?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What changes do you need to make to eliminate those issues and confusion?&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I’ll often go through my code following a self-review checklist I’ve put together over the years.&lt;/p&gt;

&lt;p&gt;There's an old sales technique called &lt;strong&gt;anticipating objections&lt;/strong&gt;. The idea to preempt any objections people might have by bringing them up yourself, and then addressing it ahead of time.&lt;/p&gt;

&lt;p&gt;Same idea here. We want to anticipate the objections that could be raised against our code, and fix them ahead of time.&lt;/p&gt;

&lt;p&gt;How do you know what those objections could be?&lt;/p&gt;

&lt;p&gt;Once you've had enough code reviews at a company you will know the problems people have with your code. Add those issues to your code review checklist, and fix them before your code is reviewed by anyone else.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;If you're getting nitpicked a ton, adopt a code linter/formatter&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;If people are always needling you for the formatting of your code that's a smell that your team needs some automatic code linting or a formatter like &lt;a href="https://prettier.io/"&gt;Prettier&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The code review process shouldn't concern itself with those kinds of details. It should be focused on finding bugs and design flaws.&lt;/p&gt;

&lt;p&gt;If people are having to point out things like,&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;That you should or shouldn't use semicolons,&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Wrap your if-statements in brackets,&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Use const instead of let,&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Prefer arrow functions,&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;etc.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;that is wasting precious brainpower&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Propose that you adopt something like Prettier with the basic recommendations and be done with it.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Understand the patterns of the codebase&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;When I first joined my current company I was hammered pretty regularly in code reviews.&lt;/p&gt;

&lt;p&gt;Often not for major flaws in my code, but for merely not adhering to the patterns and conventions of the codebase. Some of that was solved by the above point of using Prettier and a linter, but some of it came from understanding how the team writes code.&lt;/p&gt;

&lt;p&gt;If your team has separate files for all components/classes don't start putting a bunch of components in a single file.&lt;/p&gt;

&lt;p&gt;Working on a team requires a bit of give and take.&lt;/p&gt;

&lt;p&gt;I prefer writing my code in a more functional style. Most of my team does not. There are certain ways I would write code in a personal project that I don't do at work.&lt;/p&gt;

&lt;p&gt;This doesn't mean you don't argue for opinions, and try to get people to see your way of thinking. Or even try to introduce new patterns.&lt;/p&gt;

&lt;p&gt;It does mean that when your team makes a decision to do things a certain way you can disagree, but then commit to doing it anyways.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Remember:&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;I want to wrap things up, but there’s just a few things that I’ve found helpful to keep in mind. I think they’ll be helpful for you, too.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Good code reviews require shared context&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;It’s not personal&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;It’s a learning experience&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;One, good code reviews require shared context&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;The best code reviews come from skilled engineers who have a good understanding of the problems you're trying to solve and the codebase you're working in.&lt;/p&gt;

&lt;p&gt;If you're the only person who has any clue what you're working on, you need to create that context.&lt;/p&gt;

&lt;p&gt;Part of that can be solved by &lt;strong&gt;sharing your ideas early and often&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Often what I will do is write my high-level idea for how to solve a problem, and then ask people who are familiar with the systems I'm working on for feedback.&lt;/p&gt;

&lt;p&gt;It's a less formal RFC (Request for Comments).&lt;/p&gt;

&lt;p&gt;If I'm working on a UI, I'll describe how I'm thinking of approaching the problem. I might provide a low-fidelity wireframe or examples from other apps that match my proposed solution. I'll tag the best UI people on my team to see what they think&lt;/p&gt;

&lt;p&gt;If I need to mock out an API I'll write out a proposed URL structure including any parameters I might need and a potential model. I'll then tag the API people.&lt;/p&gt;

&lt;p&gt;The goal is to see if the direction you want to go even makes sense to other people.&lt;/p&gt;

&lt;p&gt;People will either provide helpful feedback and suggestions, or they’ll affirm you’re not crazy and it’s a good idea.&lt;/p&gt;

&lt;p&gt;It’s just generally a good way to think through problems, too, as it forces you to think rigorously about your approach.&lt;/p&gt;

&lt;p&gt;Also, at the end of the day when the code goes into review people aren’t going to look at your code, and be mystified with how you came up with the design you did. You worked in public from the beginning.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Two, it's not personal&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;This is key.&lt;/p&gt;

&lt;p&gt;Most of the time people aren't trying to be jerks in the way they're reviewing your code.&lt;/p&gt;

&lt;p&gt;They're just trying to make the codebase as good as they can because they want to build an excellent product.&lt;/p&gt;

&lt;p&gt;It doesn't help that code reviews often happen over text, and most people are awful at conveying emotion in writing. So, take what's said with a grain of salt, and try not to assume malice where less insidious explanations will suffice.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;We suffer more in imagination than in reality.&lt;br&gt;
– Seneca&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Easier said than done, Seneca!&lt;/p&gt;

&lt;p&gt;The problem is it's hard not to take it personally. We become so tied with our code and ideas that criticism of them feels like a criticism of us as people. It feels like a questioning of our abilities.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A lot of devs don't make this any easier&lt;/strong&gt;. They come across as rude and petulant jerks.&lt;/p&gt;

&lt;p&gt;We have a deserved reputation for not being very compassionate and empathetic as an industry.&lt;/p&gt;

&lt;p&gt;But we can choose to interpret others in the best way possible. We can choose to not take it personally and to view it as everyone trying to create the best possible thing we can.&lt;/p&gt;

&lt;p&gt;And in the end when you view it that way you start to see code reviews as a collaborative process.&lt;/p&gt;

&lt;p&gt;Like an author and an editor both working together to make a beautiful piece of writing, the code author and the code reviewer work together to make something good into something great.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Three, it's a learning experience&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;No matter how experienced they are, the person reviewing your code has something to teach you.&lt;/p&gt;

&lt;p&gt;If they're a senior engineer they can teach you about some method you didn't know existed that can solve your problems in the half the lines of code that it took you, or some other interesting approach.&lt;/p&gt;

&lt;p&gt;If they're a junior engineer they can ask you the kinds of questions that reveal you don't understand things quite as well as you thought because otherwise, you would be able to explain why you went with a particular solution.&lt;/p&gt;

&lt;p&gt;Whatever happens in our code reviews we should strive to learn and grow from them.&lt;/p&gt;

&lt;p&gt;Earlier in my career, I started trying to learn from every piece of feedback, and to eliminate things people knocked me multiple times for in reviews.&lt;/p&gt;

&lt;p&gt;We can all do that.&lt;/p&gt;

&lt;h2&gt;
  
  
  The End State
&lt;/h2&gt;

&lt;p&gt;I can only speak from my own experience, but, as I've followed each of these practices over the last few years, code reviews have lost their sense of dread. I used to hate moving my tickets from being in development to ready for peer review.&lt;/p&gt;

&lt;p&gt;No longer.&lt;/p&gt;

&lt;p&gt;Reviews have become an opportunity for me to learn and improve.&lt;/p&gt;

&lt;p&gt;As I've made my code less painful for others to review something remarkable has happened:&lt;/p&gt;

&lt;p&gt;The review itself has lost its pain for me.&lt;/p&gt;

</description>
      <category>career</category>
      <category>codereview</category>
      <category>bestpractices</category>
    </item>
    <item>
      <title>🔍 Dev Finds Friday 5</title>
      <dc:creator>Paul Cook</dc:creator>
      <pubDate>Fri, 22 May 2020 19:26:15 +0000</pubDate>
      <link>https://dev.to/cookavich/dev-finds-friday-5-3ikg</link>
      <guid>https://dev.to/cookavich/dev-finds-friday-5-3ikg</guid>
      <description>&lt;p&gt;This was originally published in my free weekly newsletter, &lt;a href="https://newsletter.paulrcook.com/"&gt;Dev Finds Friday&lt;/a&gt;. It's like having that cool friend who sends you all the best links on the internet (but better).&lt;/p&gt;

&lt;p&gt;Onto the the links!&lt;/p&gt;




&lt;h2&gt;
  
  
  Remote Work Takes Over
&lt;/h2&gt;

&lt;p&gt;Two months into the current crisis, and the walls holding back the big tech companies in Silicon Valley from allowing remote work have started to tumble down.&lt;/p&gt;

&lt;p&gt;The first company I read that made the move was Twitter after CEO Jack Dorsey emailed the company telling them &lt;a href="https://www.buzzfeednews.com/article/alexkantrowitz/twitter-will-allow-employees-to-work-at-home-forever"&gt;they'd be allowed to work from home for forever&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;HN discussion of Twitter's move: &lt;a href="https://news.ycombinator.com/item?id=23155647"&gt;link&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This week at least two more dominoes have fallen. Coinbase announced that after &lt;a href="https://blog.coinbase.com/post-covid-19-coinbase-will-be-a-remote-first-company-cdac6e621df7"&gt;COVID-19 they'll be a remote-first (!) company&lt;/a&gt;, and, then the granddaddy of all the remote announcement, &lt;/p&gt;

&lt;p&gt;Facebook said that within 5 years &lt;a href="https://www.theverge.com/2020/5/21/21265780/facebook-remote-work-mark-zuckerberg-interview-wfh"&gt;half of all their employees would be remote&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;HN discussion on the FB announcement: &lt;a href="https://news.ycombinator.com/item?id=23261394"&gt;link&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Which domino will be next to fall?&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://weirdwidewebring.net/"&gt;Weird Wide Webring&lt;/a&gt;
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;The web needs a little more weird. These sites are helping.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I'm a great lover of the personal site. I think we're experiencing a bit of renaissance after having many people abandon their own places on the web for social media.&lt;/p&gt;

&lt;p&gt;The Weird Wide Webring is one such group of people helping to fuel the personal site resurgence. It's a collective of sites helping to make the web a bit more weird.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://rauchg.com/2020/static-hoisting"&gt;Static Hoisting&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;The &lt;a href="https://jamstack.org/"&gt;JAMstack&lt;/a&gt; has become the thing in the front end world. For good reason, too, there's a lot of great patterns on how to build web applications that have emerged. &lt;/p&gt;

&lt;p&gt;In this article &lt;a href="https://twitter.com/rauchg/status/1263611745391636481"&gt;Guillermo Rauch&lt;/a&gt; uses the analogy of hoisting to describe what makes static sites so special.&lt;/p&gt;

&lt;p&gt;A key tenet of static site generators is to pull in content not when it's being requested by a user, but in a build step. A WordPress fetches post content directly from the database when someone hits a post URL.&lt;/p&gt;

&lt;p&gt;Something like &lt;a href="https://www.gatsbyjs.org/"&gt;Gatsby&lt;/a&gt; bundles up the post in static HTML &lt;strong&gt;when it's published&lt;/strong&gt;. What this means is that our sites no longer have to exist on one single shared server somewhere in Virginia.&lt;/p&gt;

&lt;p&gt;Instead, modern hosts like &lt;a href="https://www.netlify.com/"&gt;Netlify&lt;/a&gt; and &lt;a href="https://vercel.com/"&gt;Vercel&lt;/a&gt; "hoist" the site to CDN edge locations as close as they can get to visitors.&lt;/p&gt;

&lt;p&gt;It's an ahead-of-time approach vs. just-in-time.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://css-tricks.com/the-title-front-end-developer-is-obsolete/"&gt;“The title ‘Front-End Developer’ is obsolete.”&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;A CSS-Tricks article expanding on &lt;a href="https://twitter.com/bdc/status/1249597086007345157"&gt;a Twitter thread&lt;/a&gt; about how many front-end developers ignore everything outside of JavaScript to the detriment of the user-experience.&lt;/p&gt;

&lt;p&gt;The front-end requires not just knowing JS deeply, but know CSS and HTML deeply. It means knowing how to write accessible markup.&lt;/p&gt;

&lt;p&gt;It means not solving problems in complex JS that could just as easily be solved with some CSS transitions.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The modern frontend developer is most often than not a 'Jack of all trades' mastering JS (or even just a framework) and barely tolerating HTML/CSS as a necessary evil. That’s understandable. I strongly think it’s a different specialization, and it’s too much for a single person.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Some good discussion (surprisingly) can also be found on Reddit: &lt;a href="https://old.reddit.com/r/webdev/comments/ga8zf4/the_title_frontend_developer_is_obsolete/"&gt;link&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;a href="//howtocenterincss.com"&gt;How to Center in CSS&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;Less of a how-to guide than a friendly little web app that generates code for you to center things.&lt;/p&gt;

&lt;p&gt;Need to center a div of an unknown width and height, &lt;strong&gt;and&lt;/strong&gt; you have to support IE6 (yes, really). This has got you covered.&lt;/p&gt;




&lt;p&gt;That's all I've got.&lt;/p&gt;

&lt;p&gt;If you're a curious dev, and that sounds like something you'd like to get directly to your inbox, sign up: &lt;a href="https://newsletter.paulrcook.com/"&gt;Dev Finds Friday&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Much appreciated.&lt;/p&gt;

&lt;p&gt;Stay healthy and thanks for reading!&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Human Code Reviews | Dev Finds Friday</title>
      <dc:creator>Paul Cook</dc:creator>
      <pubDate>Fri, 15 May 2020 14:24:02 +0000</pubDate>
      <link>https://dev.to/cookavich/human-code-reviews-dev-finds-friday-4543</link>
      <guid>https://dev.to/cookavich/human-code-reviews-dev-finds-friday-4543</guid>
      <description>&lt;p&gt;This was originally published in my free weekly newsletter, &lt;a href="https://newsletter.paulrcook.com/"&gt;Dev Finds Friday&lt;/a&gt;. It's like having that cool friend who sends you all the best links on the internet (but better).&lt;/p&gt;

&lt;p&gt;Onto the the links!&lt;/p&gt;




&lt;p&gt;I've been thinking a lot lately about how to conduct human code reviews. I use the word human there on purpose because I've found that some devs take a perverse pleasure in ripping apart code without giving a second thought to how the information is communicated.&lt;/p&gt;

&lt;p&gt;Our industry has a reputation for &lt;em&gt;not&lt;/em&gt; being human, in other words, and our code reviews are often inhumane.&lt;/p&gt;

&lt;p&gt;Some of us like that.&lt;/p&gt;

&lt;p&gt;Many of us don't.&lt;/p&gt;

&lt;p&gt;None of us should.&lt;/p&gt;

&lt;p&gt;So, let's inject a little humanity into our code review process.&lt;/p&gt;

&lt;p&gt;Here's a few thoughts on how:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Make it clear what feedback is blocking and non-blocking. Don't hold work up because you have some minor nitpicks. Netlify put out a great piece on their&lt;a href="https://www.netlify.com/blog/2020/03/05/feedback-ladders-how-we-encode-code-reviews-at-netlify/"&gt; Feedback Ladder&lt;/a&gt; that applies here.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Assumptions:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;DON'T assume the person whose code you're reviewing thinks the same way as you, or that the way you're thinking about the problem is the one true solution.&lt;/li&gt;
&lt;li&gt;DON'T assume they know what you know. Provide links to blog posts, Stack Overflow answers, GitHub issues, and whatever else.&lt;/li&gt;
&lt;li&gt;DO assume they've already considered your suggestion before. Ask them how they arrived at their solution, and if they thought about your suggestion.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Encourage what's good. Code reviews shouldn't be all negative.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Consider how you're coming across. What's your tone? Is it dismissive?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;If matters of style and formatting come up a lot, adopt team wide linting rules/a code formatter.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I'm planning on writing more on this in the future. It's an important topic we could all improve (myself included) because, after all, we're only human.&lt;/p&gt;

&lt;p&gt;Onto the links!&lt;/p&gt;




&lt;h3&gt;
  
  
  The Links
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://www.brandonsmith.ninja/blog/libraries-not-frameworks"&gt;Write Libraries, Not Frameworks&lt;/a&gt;:&lt;/strong&gt; "Frameworks aren't always bad, but they are a much bigger risk - for both the creators and the users - than libraries are. If your framework can be a library without losing much, it probably should be. If you don't work at a major tech company, you probably don't have the time or energy to give a framework all of the attention it requires. Libraries aren't everything, but they should be preferred."&lt;/p&gt;

&lt;p&gt;&lt;a href="https://news.ycombinator.com/item?id=23121192"&gt;Hacker News discussion&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://moss.garden/"&gt;Moss Garden&lt;/a&gt;:&lt;/strong&gt; A stream of ambient music perfect to listen to while programming.&lt;/p&gt;

&lt;p&gt;**&lt;a href="http://www.timcasasola.com/blog/writing"&gt;Why does writing matter in remote work?&lt;/a&gt;: **Many, many reasons.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;It saves time.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;It makes meetings a last resort.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;It removes extrovert bias.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;It invites other perspectives.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://css-tricks.com/list-style-recipes/"&gt;List Style Recipes&lt;/a&gt;:&lt;/strong&gt; Do you know how to style a list with Roman numerals? How about the Greek alphabet? Never knew you wanted to know how to do that? Well, this article from &lt;a href="https://css-tricks.com/"&gt;CSS-Tricks&lt;/a&gt; is for you!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://blush.design/"&gt;Blush, Illustrations for everyone&lt;/a&gt;:&lt;/strong&gt; A neat little (FREE) collection of those doodles of people that every startup uses on their landing pages. You’ll see what I mean.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://www.philosophicalhacker.com/post/data-point-for-job-seeking-devs/"&gt;My Mid-Career Job-Hunt&lt;/a&gt;:&lt;/strong&gt; I've only had 2 job hunts for dev roles, so, I seeing what the process is like for others. What helped the author land a gig:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Speaking at conferences.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Having a blog (though not as much as the author would have thought).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Having a special branded resume for each company (you'll have to read the article to see what I mean).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Side projects.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://news.ycombinator.com/item?id=23132387"&gt;Hacker News discussion&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://www.solipsys.co.uk/new/BeingSlowToCriticise.html?te10hn"&gt;Being Slow to Criticise&lt;/a&gt;:&lt;/strong&gt; "I try to be slow to jump to that conclusion, that the software is garbage. So often there are reasons for things to be the way they are."&lt;/p&gt;

&lt;p&gt;&lt;a href="https://news.ycombinator.com/item?id=23131350"&gt;Hacker News discussion&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://engineering.fb.com/web/facebook-redesign/"&gt;Rebuilding our tech stack for a new Facebook.com&lt;/a&gt;:&lt;/strong&gt; A more clickbaity title would be "&lt;em&gt;You'll never believe how Facebook reduced their CSS by 80%.&lt;/em&gt;"&lt;/p&gt;

&lt;p&gt;Some curmudgeons are fond to remind others that they're not Google or Facebook, but on the front end we deal with a lot of the same problems and bottlenecks. Helpful to see how one top tier engineering team is pushing their app forward.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://jacobian.org/2020/may/8/engineering-resume-accomplishments/"&gt;What accomplishments sound like on software engineering resumes&lt;/a&gt;:&lt;/strong&gt; Nicely complements last week's link from Sarah Drasner,&lt;a href="https://css-tricks.com/advice-for-writing-a-technical-resume/"&gt; Advice for Writing a Technical Resume&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;A couple more links I came across in this vein:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://blog.petdance.com/2011/11/14/track-your-stats-like-a-pro-athlete-to-give-your-resume-power/"&gt;Track your professional stats like a pro athlete to give your resume power&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://blog.petdance.com/2011/11/29/how-do-i-make-my-resume-stand-out/"&gt;How do I make my resume stand out?&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Lots of examples on how to be specific with your professional accomplishments.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://www.bbc.co.uk/archive/empty_sets_collection/zfvy382"&gt;The joy of sets - BBC Archive&lt;/a&gt;:&lt;/strong&gt; Spice up your Zoom calls with backgrounds from famous BBC show sets.&lt;/p&gt;




&lt;p&gt;That's all I've got.&lt;/p&gt;

&lt;p&gt;If you're a curious dev, and that sounds like something you'd like to get directly to your inbox, sign up: &lt;a href="https://newsletter.paulrcook.com/"&gt;Dev Finds Friday&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Much appreciated.&lt;/p&gt;

&lt;p&gt;Stay healthy and thanks for reading!&lt;/p&gt;

</description>
      <category>career</category>
    </item>
    <item>
      <title>The idea that changed the way I program - Dev Finds Friday</title>
      <dc:creator>Paul Cook</dc:creator>
      <pubDate>Fri, 08 May 2020 14:33:02 +0000</pubDate>
      <link>https://dev.to/cookavich/the-idea-that-changed-the-way-i-program-dev-finds-friday-4m2i</link>
      <guid>https://dev.to/cookavich/the-idea-that-changed-the-way-i-program-dev-finds-friday-4m2i</guid>
      <description>&lt;p&gt;This was originally published in my free weekly newsletter, &lt;a href="https://newsletter.paulrcook.com"&gt;Dev Finds Friday&lt;/a&gt;. It's like having that cool friend who sends you all the best links on the internet (but better).&lt;/p&gt;

&lt;p&gt;Onto the the links!&lt;/p&gt;




&lt;p&gt;I was browsing Twitter earlier this week when I came across a thread on &lt;a href="https://twitter.com/david_perell/status/1257484391204352002?s=21"&gt;ideas that changed your life&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;It's well worth a read in and of itself, but it got me thinking about what ideas changed the way I program.&lt;/p&gt;

&lt;p&gt;I &lt;a href="https://mobile.twitter.com/therealpaulcook/status/1257685660191928325"&gt;tweeted out&lt;/a&gt; my first thoughts on what those ideas might be, and as I think about it now perhaps the biggest change was learning how to use JavaScript's array methods.&lt;/p&gt;

&lt;p&gt;I read through a &lt;a href="http://reactivex.io/learnrx/"&gt;tutorial on functional programming in JavaScript&lt;/a&gt;, and overnight it transformed my code. I don't remember the last time I wrote a for-loop in my day job.&lt;/p&gt;

&lt;p&gt;I've read a lot of articles, watched tons of courses, and listened to too many podcasts, but only a small percentage of that content has truly shaped the way I program. It's fun to look back and reflect on the ones that did.&lt;br&gt;
What ideas have influenced you?&lt;/p&gt;




&lt;h2&gt;
  
  
  The Links
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://muldoon.cloud/programming/2020/04/17/programming-rules-thumb.html"&gt;Rules of thumb for a 1x developer&lt;/a&gt;:&lt;/strong&gt; Everyone is obsessed with the idea of a 10x developer., but what do you do when you're a 1x dev?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"Rule 3: Focus “learning time” on things that compound"&lt;/li&gt;
&lt;li&gt;"Rule 18: Estimates serve more for creating pressure than for project planning"&lt;/li&gt;
&lt;li&gt;"Rule 20: When somebody says Agile, push for Kanban, not Scrum"&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://news.ycombinator.com/item?id=23029489"&gt;Hacker News discussion&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://css-tricks.com/advice-for-writing-a-technical-resume/"&gt;Advice for Writing a Technical Resume&lt;/a&gt;:&lt;/strong&gt; Great article from Sarah Drasner on exactly what it says.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Each time you list a work example, answer this: &lt;strong&gt;what did you accomplish?&lt;/strong&gt; This is a good way to provide valuable information without unnecessary fluff."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://refrf.shreyasminocha.me/"&gt;Regular Expressions for Regular Folk&lt;/a&gt;:&lt;/strong&gt; A visual tour de force through regular expressions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://sqlpd.com/"&gt;SQL Police Department&lt;/a&gt;:&lt;/strong&gt; Learn SQL while solving crimes. The &lt;a href="https://news.ycombinator.com/item?id=23066776"&gt;Hacker News discussion&lt;/a&gt; has a few other links to similar SQL tutorials, as well, like &lt;a href="https://mystery.knightlab.com/"&gt;SQL Murder Mystery&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="http://beza1e1.tuxen.de/lore/index.html"&gt;Software Folklore – A collection of weird bug stories&lt;/a&gt;:&lt;/strong&gt; We've all experienced our share of tough bugs. This is a collection of doozies like &lt;a href="http://beza1e1.tuxen.de/lore/moon_phases.html"&gt;a bug that only showed up depending on the phase of the moon&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://news.ycombinator.com/item?id=23005140"&gt;Hacker News discussion&lt;/a&gt; has more bug stories.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://exploits.run/analytics-analysis-fbi/"&gt;Analyzing Analytics (Featuring: The FBI)&lt;/a&gt;:&lt;/strong&gt; In which our young adventurer discovers a site secretly run by the FBI.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="http://blog.interviewing.io/the-eng-hiring-bar-what-the-hell-is-it/"&gt;The Eng Hiring Bar: What the hell is it?&lt;/a&gt;:&lt;/strong&gt; A question for the ages. Long answer made short: it depends, but it's pretty high.&lt;/p&gt;

&lt;p&gt;Corresponding &lt;a href="https://news.ycombinator.com/item?id=22739605"&gt;Hacker News discussion&lt;/a&gt;.&lt;/p&gt;




&lt;p&gt;That's all I've got. &lt;/p&gt;

&lt;p&gt;If you're a curious dev, and that sounds like something you'd like to get directly to your inbox, sign up: &lt;a href="https://newsletter.paulrcook.com"&gt;Dev Finds Friday&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Much appreciated.&lt;/p&gt;

&lt;p&gt;Stay healthy and thanks for reading!&lt;/p&gt;

</description>
      <category>discuss</category>
      <category>career</category>
      <category>news</category>
    </item>
    <item>
      <title>Zoom Doom - Dev Finds Friday</title>
      <dc:creator>Paul Cook</dc:creator>
      <pubDate>Fri, 01 May 2020 17:59:26 +0000</pubDate>
      <link>https://dev.to/cookavich/zoom-doom-dev-finds-friday-400c</link>
      <guid>https://dev.to/cookavich/zoom-doom-dev-finds-friday-400c</guid>
      <description>&lt;p&gt;This was originally published in my free weekly newsletter, &lt;a href="https://wondrous-knitter-9193.ck.page"&gt;Dev Finds Friday&lt;/a&gt;. It's like having that cool friend who sends you all the best links on the internet (but better).&lt;/p&gt;

&lt;p&gt;Onto the the links!&lt;/p&gt;




&lt;p&gt;We all live in Zoom, now, and people are starting to feel the Zoom doom brain drain.&lt;/p&gt;

&lt;p&gt;Daily active usage has gone from around 10 million people to &lt;strong&gt;300 million&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;And maybe that's the problem. Even those of us used to virtual meetings from being remote find ourselves in Zoom after hours. Church is done in Zoom, birthday parties in Zoom, our kids' school is in Zoom, get togethers with friends done in Zoom, and on and on.&lt;/p&gt;

&lt;p&gt;So, if you feel like "I don't want to be in any more Zoom calls" just know you're not alone.&lt;/p&gt;

&lt;p&gt;And maybe take the night off.&lt;/p&gt;

&lt;p&gt;Links:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;span&gt;​&lt;a href="https://www.axios.com/zoom-fatigue-coronavirus-teleconferencing-f5c0ce17-483f-4c71-9a7d-f023d7e7a45b.html"&gt;Another pandemic woe: Zoom fatigue&lt;/a&gt;​&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span&gt;​&lt;a href="https://www.nationalgeographic.com/science/2020/04/coronavirus-zoom-fatigue-is-taxing-the-brain-here-is-why-that-happens/"&gt;‘Zoom fatigue’ is taxing the brain. Here's why that happens.&lt;/a&gt; ​&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span&gt;​&lt;a href="https://www.bbc.com/worklife/article/20200421-why-zoom-video-chats-are-so-exhausting"&gt;The reason Zoom calls drain your energy&lt;/a&gt; ​&lt;/span&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Dev of the Week: Josh Comeau
&lt;/h2&gt;

&lt;p&gt;I love checking out other dev's personal sites, and Josh's is one of the best. I'm always inspired whenever I check it out, and also a little bit jealous because I'm nowhere near as creative.&lt;/p&gt;

&lt;p&gt;Link to his site: &lt;a href="https://joshwcomeau.com/"&gt;https://joshwcomeau.com&lt;/a&gt; .&lt;/p&gt;

&lt;p&gt;Here's a Twitter thread where he talks about some of the little details that went into it: &lt;a href="https://twitter.com/JoshWComeau/status/1232022395365535750"&gt;https://twitter.com/JoshWComeau/status/1232022395365535750&lt;/a&gt;​&lt;/p&gt;

&lt;p&gt;A few articles to read:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;span&gt;&lt;a href="https://joshwcomeau.com/gatsby/dark-mode/"&gt;The Quest for the Perfect Dark Mode&lt;/a&gt;​&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span&gt;&lt;a href="https://joshwcomeau.com/career/no-cs-degree-required/"&gt;Becoming a Software Developer Without a CS Degree&lt;/a&gt;​&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span&gt;&lt;a href="https://joshwcomeau.com/career/effective-collaboration/"&gt;Effective Collaboration with Product and Design&lt;/a&gt;​&lt;/span&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Other links of note:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;span&gt;&lt;a href="https://twitter.com/joshwcomeau"&gt;https://twitter.com/joshwcomeau&lt;/a&gt;​&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span&gt;&lt;a href="https://github.com/joshwcomeau"&gt;https://github.com/joshwcomeau&lt;/a&gt;​&lt;/span&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Cool Tool of the Week: Excalidraw
&lt;/h2&gt;

&lt;p&gt;Link: &lt;a href="https://excalidraw.com/"&gt;https://excalidraw.com/&lt;/a&gt;​&lt;/p&gt;

&lt;p&gt;There's a spectrum of diagrams I create for my coding.&lt;/p&gt;

&lt;p&gt;They range from drawings on a whiteboard that will be erased as soon as I'm done to more serious diagrams done with &lt;a href="https://www.draw.io/"&gt;Draw.io&lt;/a&gt; that will live on in documentation to be updated over time.&lt;/p&gt;

&lt;p&gt;Excalidraw falls somewhere between those two extremes. It's a web app that allows you to create whiteboard like diagrams that &lt;em&gt;feel&lt;/em&gt; hand drawn.&lt;/p&gt;

&lt;p&gt;Check out the story of how it &lt;a href="https://blog.excalidraw.com/reflections-on-excalidraw/"&gt;went viral&lt;/a&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Other Links of Note
&lt;/h2&gt;

&lt;p&gt;​&lt;a href="https://about.gitlab.com/company/culture/all-remote/informal-communication/"&gt;&lt;strong&gt;Informal Communication in an all-remote environment&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;:&lt;/strong&gt; GitLab is well known for being a thoughtful company. This is how they think about "informal communication."&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;For all-remote companies, leaders should not expect informal communication to happen naturally. There are no hallways for team members to cross paths in, no carpools to the office, etc.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;How do recover some of those hallway connections when there is no water cooler or break room to cross paths in?&lt;/p&gt;

&lt;p&gt;The most unique option if you and up to 4 other teammates can stay at the &lt;a href="https://about.gitlab.com/handbook/ceo/#house"&gt;CEO's house in Utrecht, the Netherlands&lt;/a&gt; for free.&lt;/p&gt;

&lt;p&gt;Not every company has an AirBnB to stay in together, but they have a bunch of other suggestions on how to use video conferencing to build connections outside of work: social calls, virtual lunch tables, scavenger hunts, and more.&lt;/p&gt;

&lt;p&gt;​&lt;/p&gt;

&lt;p&gt;​&lt;a href="https://chiefofstuff.substack.com/p/career-advice-for-people-with-bad"&gt;&lt;strong&gt;Career advice for people with bad luck&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;:&lt;/strong&gt; What do you do if you find yourself stuck in a company going nowhere fast?&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Most career advice on the internet is from people who had some sort of meteoric success. Why read advice from someone who’s had a mediocre career? But there’s massive sampling bias. All this advice will try to draw grand, sweeping narratives and also typically fails to sufficiently factor in luck.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Hacker News discussion: &lt;a href="https://news.ycombinator.com/item?id=22960225"&gt;https://news.ycombinator.com/item?id=22960225&lt;/a&gt;​&lt;/p&gt;

&lt;p&gt;​&lt;/p&gt;

&lt;p&gt;​&lt;a href="https://hacks.mozilla.org/2020/04/code-quality-tools-at-mozilla/"&gt;&lt;strong&gt;Engineering code quality in the Firefox browser&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;:&lt;/strong&gt; What does it look like to keep a massive 21 million line multi-language project from becoming a big ball of mud?&lt;/p&gt;

&lt;p&gt;Covers&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;span&gt;static analysis&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span&gt;linting&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span&gt;coding style&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span&gt;code coverage&lt;/span&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;​&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;​&lt;/strong&gt;&lt;a href="https://news.ycombinator.com/item?id=22849208"&gt;&lt;strong&gt;Ask HN: Programs that saved you 100 hours?&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"VSCode, and/or Sublime Text have probably saved me a hundred hours I would have spent waiting for Eclipse to start."&lt;/p&gt;

&lt;p&gt;"Fuzzy file search in your editor. You know you want to open src/components/user.js so you type "cu" and it appears."&lt;/p&gt;

&lt;p&gt;"Removing as much advertising from my life as possible. (Ublock origin, deleting social networks when possible)"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;​&lt;/p&gt;

&lt;p&gt;​&lt;a href="https://jdan.github.io/98.css/"&gt;&lt;strong&gt;98.css&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;:&lt;/strong&gt; A Windows 98 style design system.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Your scientists were so preoccupied with whether or not they could, they didn’t stop to think if they should.&lt;br&gt;&lt;br&gt;
&lt;em&gt;Jurassic Park&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;​&lt;/p&gt;

&lt;p&gt;​&lt;a href="https://medium.com/@forbeslindesay/is-promise-post-mortem-cab807f18dcc"&gt;&lt;strong&gt;is-promise post mortem&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;:&lt;/strong&gt; How a one line package update took down create-react-app.&lt;/p&gt;




&lt;p&gt;That's all I've got.&lt;/p&gt;

&lt;p&gt;If you're a curious dev, and that sounds like something you'd like to get directly to your inbox, sign up: &lt;a href="https://wondrous-knitter-9193.ck.page"&gt;Dev Finds Friday&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Much appreciated.&lt;/p&gt;

&lt;p&gt;Stay healthy and thanks for reading!&lt;/p&gt;

&lt;p&gt;Paul&lt;/p&gt;

</description>
      <category>discuss</category>
      <category>career</category>
      <category>news</category>
    </item>
    <item>
      <title>8 Things I Learned from Rich Hickey That Helped Me Write Better Software (Simple Made Easy)</title>
      <dc:creator>Paul Cook</dc:creator>
      <pubDate>Wed, 12 Feb 2020 14:16:12 +0000</pubDate>
      <link>https://dev.to/cookavich/8-things-i-learned-from-rich-hickey-that-helped-me-write-better-software-simple-made-easy-bg9</link>
      <guid>https://dev.to/cookavich/8-things-i-learned-from-rich-hickey-that-helped-me-write-better-software-simple-made-easy-bg9</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--UZtsg9qO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/o8bi78f8463qthxyph1x.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--UZtsg9qO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/o8bi78f8463qthxyph1x.jpg" alt="Rich Hickey: the man, the myth, the legend"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I think you'll agree with me when I say:&lt;/p&gt;

&lt;p&gt;One of the most difficult problems in software development is dealing with all the complexity that comes along with our job.&lt;/p&gt;

&lt;p&gt;Rich Hickey, author of the language Clojure, understands that problem, too, and his talk &lt;a href="https://www.infoq.com/presentations/Simple-Made-Easy/"&gt;Simple Made Easy&lt;/a&gt; has helped me learn how to think better&lt;br&gt;
about complexity in my own work.&lt;/p&gt;

&lt;p&gt;Here's a few things I learned from his talk that I have helped me, and I hope will help you.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Why easy isn't (necessarily) simple&lt;/li&gt;
&lt;li&gt;The difference between the construct and the artifact&lt;/li&gt;
&lt;li&gt;How complexity hurts our understanding&lt;/li&gt;
&lt;li&gt;What's true of every bug&lt;/li&gt;
&lt;li&gt;What it means to complect&lt;/li&gt;
&lt;li&gt;How to make hard things easy&lt;/li&gt;
&lt;li&gt;How to make complex things simple&lt;/li&gt;
&lt;li&gt;The true benefits of simplicity&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  1. Why easy isn't (necessarily) simple
&lt;/h2&gt;

&lt;p&gt;Hint:&lt;/p&gt;

&lt;p&gt;They aren't synonyms for one another even if we use them that way.&lt;/p&gt;

&lt;p&gt;But developers love to pretend they are. The most egregious examples is all of the libraries that describe themselves as being "dead simple."&lt;/p&gt;

&lt;p&gt;What do they even mean by "dead simple?"&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.urbandictionary.com/define.php?term=dead%20simple"&gt;Urban Dictionary describes it well&lt;/a&gt;: "So easily done that even a complete idiot could figure it out."&lt;/p&gt;

&lt;p&gt;So, "dead simple" means so easy a cave man could do it. But is that really what simplicity is?&lt;/p&gt;

&lt;h3&gt;
  
  
  Simple vs. Complex / Easy vs. Hard
&lt;/h3&gt;

&lt;p&gt;To understand the difference between simple and easy you need to understand what they contrast with.&lt;/p&gt;

&lt;p&gt;Simple contrasts with complex while easy contrasts with hard.&lt;/p&gt;

&lt;p&gt;Looking at the root of simple we find sim and plex which means one fold or braid. Complex means braided or folded together.&lt;/p&gt;

&lt;p&gt;Something is more or less simple depending on how interconnected or interweaved. Think of a rope here.&lt;/p&gt;

&lt;p&gt;Easy origins look something like this: ease &amp;lt; aise &amp;lt; adjacens. You can see the word adjacent there&lt;/p&gt;

&lt;p&gt;Easy has the idea of lying near or being at hand. We can think of something that's easy as being near our capabilities.&lt;/p&gt;

&lt;h3&gt;
  
  
  Simple = Objective whereas Easy = Subjective
&lt;/h3&gt;

&lt;p&gt;Simplicity is measured by how interconnected a program is. Whether or not it's interleaved is something that anyone can see. In other words, it's objective.&lt;/p&gt;

&lt;p&gt;Easiness can only be measured from person to person.&lt;/p&gt;

&lt;p&gt;In other words, it's subjective and personal.&lt;/p&gt;

&lt;p&gt;Easy for whom? Or hard for whom?&lt;/p&gt;

&lt;p&gt;For instance, speaking Spanish is hard for me. I don't know it and have never had any formal or informal learning of it.&lt;/p&gt;

&lt;p&gt;It's easy for my wife because she grew up with it as her first language.&lt;/p&gt;

&lt;p&gt;Playing piano is hard for me because I stopped practicing 20+ years ago. I couldn't play a single song today if I tried.&lt;/p&gt;

&lt;p&gt;It's easy for my sister because she never stopped practicing and has been playing now for around 30 years.&lt;/p&gt;

&lt;p&gt;I could make Spanish easier for myself by spending time learning it, same with piano, but the only way to make something complex simple is by spending the time untangling the web of knots.em&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Simple != Easy&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  2. The difference between the construct and the artifact
&lt;/h2&gt;

&lt;p&gt;We tend to think easy = good. Easier things are better than hard things, right?&lt;/p&gt;

&lt;p&gt;Don't you want to use easy tools? Well, yeah, I do.&lt;/p&gt;

&lt;p&gt;But should that be your primary focus?&lt;/p&gt;

&lt;p&gt;Hickey says no, and the reason he says no is because our primary concern shouldn't be our own convenience of the tools and languages we use, but the results of those tools.&lt;/p&gt;

&lt;p&gt;Hickey calls them our constructs. The things we use to build our software which is our artifacts.&lt;/p&gt;

&lt;p&gt;We're focused on the wrong metrics. &lt;strong&gt;It doesn't how convenient it is to use if that convenience just sends us further down the road of complexity&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;We should instead be focused on how easy it is to change down the line.&lt;/p&gt;

&lt;p&gt;Now, this does not mean that all easy tools produce complexity, but it does mean that ease of use alone shouldn't be the deciding factor.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. How complexity hurts our understanding
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--FQdQdX6i--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://plus.maths.org/issue52/features/polster/rt.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--FQdQdX6i--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://plus.maths.org/issue52/features/polster/rt.gif" alt="Man juggling 3 balls"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The world record for most balls juggled is something like 11. That's not too distant from the guy above with 3. He looks like he could probably handle a few more, but what would happen once he got beyond&lt;/p&gt;

&lt;p&gt;4 or 5 or 6?&lt;/p&gt;

&lt;p&gt;My guess is he would quickly come to his limit and start dropping the balls.&lt;/p&gt;

&lt;p&gt;Juggling things with our hands isn't so different from juggling ideas with our minds.&lt;/p&gt;

&lt;p&gt;Like a juggler has a hard upper limit on how many balls they can keep in the air we have an upper limit to how much stuff we can hold in our brains at the same time.&lt;/p&gt;

&lt;p&gt;And there's not so great a distance between the most intelligent among us and the least.&lt;/p&gt;

&lt;p&gt;We can only hold so much in our mind at once.&lt;/p&gt;

&lt;p&gt;The more complicated and interconnected our codebase becomes the more difficult it becomes to understand all of it. When things are interweaved together we can no longer think about the different parts in isolation, but have to look at them together.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;So if every time I think I pull out a new part of the software I need to comprehend, and it's attached to another thing, I had to pull that other thing into my mind because I can't think about the one without the other. That's the nature of them being intertwined. So every intertwining is adding this burden, and the burden is kind of combinatorial as to the number of things that we can consider. ^^So, fundamentally, this complexity, and by complexity I mean this braiding together of things, is going to limit our ability to understand our systems^^.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  4. What's true of every bug
&lt;/h2&gt;

&lt;p&gt;What's true of every bug?&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;It passed the type checker (assuming you have one).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;It passed the tests (you should have at least a few of those!).&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Types and tests are not enough to ensure a simple codebase. We need our code to be simple enough that we can reason about it on our own.&lt;/p&gt;

&lt;p&gt;The more complex our code becomes, the more difficult that is, and if we're relying on the guardrails of our types and our tests alone they won't prevent us from writing a big ball of mud.&lt;/p&gt;

&lt;p&gt;Those are orthogonal concerns to simplicity.&lt;/p&gt;

&lt;p&gt;In other words, you can have complex code &lt;strong&gt;and&lt;/strong&gt; static types **and **tests. Focus on the simplicity and don't think you're getting that for free types and tests.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. What it means to complect
&lt;/h2&gt;

&lt;p&gt;Who doesn't love new vocabularly? Hickey introduces us to a new old word "complect."&lt;/p&gt;

&lt;p&gt;What does that mean?&lt;/p&gt;

&lt;p&gt;It means to interleave, entwine, braid. It's the verbal form of complex.&lt;/p&gt;

&lt;p&gt;You don't want to be complecting your code.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--g9Tjz8OH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/lq2w3s4g84usbqozjlzh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--g9Tjz8OH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/lq2w3s4g84usbqozjlzh.png" alt="Rope being folded together"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Look at this diagram. Look at the first one. Look at the last one. Right? It's the same stuff in both those diagrams, the exact. It's the same strips. What happened? They got complected.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We need to be asking the question of every decision we make, every library we pull in, and any code we write: "is this complecting my program?"&lt;/p&gt;

&lt;h2&gt;
  
  
  6. How to make hard things easy
&lt;/h2&gt;

&lt;p&gt;Say you don't know a particular programming language. It's hard for you, in other words. How do you make it easy?&lt;/p&gt;

&lt;p&gt;When you put it that way it becomes pretty obvious: learn, experiment, try.&lt;/p&gt;

&lt;p&gt;Go to the tutorials and learn from others further along than you. Work on a small toy project.&lt;/p&gt;

&lt;p&gt;Work through exercises and problems in the language on a site like Exercism. Making hard things easy is all about making them familiar.&lt;/p&gt;

&lt;p&gt;Yes, there's more involved than just that, but there's not less.&lt;/p&gt;

&lt;h2&gt;
  
  
  7. How to make complex things simple
&lt;/h2&gt;

&lt;p&gt;This is trickier than making hard things easy.&lt;/p&gt;

&lt;p&gt;It's a matter of disentangling.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;You're going to get this. You're going to need to first sort of figure out where it's going. You're going to have to follow stuff around and eventually label everything. This is the start. This is roughly what the process is like. But again, it's a whole separate talk to try to talk about simplification.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That's easier said than done, especially if you're working in a very large complex codebase.&lt;/p&gt;

&lt;p&gt;But it's fundamentally a matter of taking the twisted and intertwined parts and untwisting them.&lt;/p&gt;

&lt;h2&gt;
  
  
  8. The true benefits of simplicity
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--v43Q7i1y--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/2rl2d8phdxdjd5t5ewzv.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--v43Q7i1y--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/2rl2d8phdxdjd5t5ewzv.jpg" alt="Knitted castle"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ease of understanding.&lt;br&gt;
Ease of change.&lt;br&gt;
Ease of debugging.&lt;/p&gt;

&lt;p&gt;The knitted castle and the Lego castle both look beautiful from the outside, but say you had to change the layout. Which would you want to have?&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--_-IwZNvy--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/rooz46bdhv0f3rh385xx.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--_-IwZNvy--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/rooz46bdhv0f3rh385xx.jpg" alt="Lego castle"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;If any of that piqued your curiosity, I encourage you to run (not walk) to watch the Rich Hickey's talk Simple Made Easy.&lt;/p&gt;

&lt;p&gt;It's changed how I think about the code I've written and going to write. Maybe it can do the same for you.&lt;/p&gt;

&lt;h3&gt;
  
  
  Links
&lt;/h3&gt;

&lt;p&gt;The talk itself: &lt;a href="https://www.infoq.com/presentations/Simple-Made-Easy/"&gt;https://www.infoq.com/presentations/Simple-Made-Easy/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The transcript for those of you who prefer to read: &lt;a href="https://github.com/matthiasn/talk-transcripts/blob/master/Hickey_Rich/SimpleMadeEasy.md"&gt;https://github.com/matthiasn/talk-transcripts/blob/master/Hickey_Rich/SimpleMadeEasy.md&lt;/a&gt;&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>techtalks</category>
      <category>functional</category>
      <category>motivation</category>
    </item>
    <item>
      <title>What role has luck played in your career?</title>
      <dc:creator>Paul Cook</dc:creator>
      <pubDate>Sun, 20 Oct 2019 19:42:28 +0000</pubDate>
      <link>https://dev.to/cookavich/what-role-has-luck-played-in-your-career-2f80</link>
      <guid>https://dev.to/cookavich/what-role-has-luck-played-in-your-career-2f80</guid>
      <description>&lt;p&gt;I think we don't recognize the role of luck enough in our lives/careers.&lt;/p&gt;

&lt;p&gt;Let me give you an example from my own life:&lt;/p&gt;

&lt;p&gt;I was talking with my boss recently and he brought up why he looked at my application out of the hundreds he got (remote positions advertised on StackOverflow get a LOT of applications).&lt;/p&gt;

&lt;p&gt;Basically the whole reason I have the job I have is because the first guy who hired him for a dev job is named Paul Cook so when he saw my application he was curious if I was his former boss.&lt;/p&gt;

&lt;p&gt;And that was the reason he gave me a call.&lt;/p&gt;

&lt;p&gt;Of course, I had to interview well and be a compelling candidate, but with hundreds of other people applying he could have just as easily never taken a look at my resume.&lt;/p&gt;

&lt;p&gt;So, what about you? &lt;/p&gt;

&lt;p&gt;What role has luck played in your career?&lt;/p&gt;

</description>
      <category>discuss</category>
      <category>career</category>
    </item>
  </channel>
</rss>
