Files
nexus/sreweekly/articles/285/02-rethinking-best-practices.html
2026-09-12 17:23:01 +08:00

404 lines
44 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html>
<html lang="en-US">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="profile" href="http://gmpg.org/xfn/11">
<link rel="pingback" href="https://willgallego.com/xmlrpc.php">
<title>Rethinking Best Practices &#8211; Will Gallego</title>
<meta name='robots' content='max-image-preview:large' />
<style>img:is([sizes="auto" i], [sizes^="auto," i]) { contain-intrinsic-size: 3000px 1500px }</style>
<link rel='dns-prefetch' href='//fonts.googleapis.com' />
<link rel="alternate" type="application/rss+xml" title="Will Gallego &raquo; Feed" href="https://willgallego.com/feed/" />
<link rel="alternate" type="application/rss+xml" title="Will Gallego &raquo; Comments Feed" href="https://willgallego.com/comments/feed/" />
<link rel="alternate" type="application/rss+xml" title="Will Gallego &raquo; Rethinking Best Practices Comments Feed" href="https://willgallego.com/2021/08/14/rethinking-best-practices/feed/" />
<script type="text/javascript">
/* <![CDATA[ */
window._wpemojiSettings = {"baseUrl":"https:\/\/s.w.org\/images\/core\/emoji\/16.0.1\/72x72\/","ext":".png","svgUrl":"https:\/\/s.w.org\/images\/core\/emoji\/16.0.1\/svg\/","svgExt":".svg","source":{"concatemoji":"https:\/\/willgallego.com\/wp-includes\/js\/wp-emoji-release.min.js?ver=6.8.8"}};
/*! This file is auto-generated */
!function(s,n){var o,i,e;function c(e){try{var t={supportTests:e,timestamp:(new Date).valueOf()};sessionStorage.setItem(o,JSON.stringify(t))}catch(e){}}function p(e,t,n){e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(t,0,0);var t=new Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data),a=(e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(n,0,0),new Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data));return t.every(function(e,t){return e===a[t]})}function u(e,t){e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(t,0,0);for(var n=e.getImageData(16,16,1,1),a=0;a<n.data.length;a++)if(0!==n.data[a])return!1;return!0}function f(e,t,n,a){switch(t){case"flag":return n(e,"\ud83c\udff3\ufe0f\u200d\u26a7\ufe0f","\ud83c\udff3\ufe0f\u200b\u26a7\ufe0f")?!1:!n(e,"\ud83c\udde8\ud83c\uddf6","\ud83c\udde8\u200b\ud83c\uddf6")&&!n(e,"\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc65\udb40\udc6e\udb40\udc67\udb40\udc7f","\ud83c\udff4\u200b\udb40\udc67\u200b\udb40\udc62\u200b\udb40\udc65\u200b\udb40\udc6e\u200b\udb40\udc67\u200b\udb40\udc7f");case"emoji":return!a(e,"\ud83e\udedf")}return!1}function g(e,t,n,a){var r="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?new OffscreenCanvas(300,150):s.createElement("canvas"),o=r.getContext("2d",{willReadFrequently:!0}),i=(o.textBaseline="top",o.font="600 32px Arial",{});return e.forEach(function(e){i[e]=t(o,e,n,a)}),i}function t(e){var t=s.createElement("script");t.src=e,t.defer=!0,s.head.appendChild(t)}"undefined"!=typeof Promise&&(o="wpEmojiSettingsSupports",i=["flag","emoji"],n.supports={everything:!0,everythingExceptFlag:!0},e=new Promise(function(e){s.addEventListener("DOMContentLoaded",e,{once:!0})}),new Promise(function(t){var n=function(){try{var e=JSON.parse(sessionStorage.getItem(o));if("object"==typeof e&&"number"==typeof e.timestamp&&(new Date).valueOf()<e.timestamp+604800&&"object"==typeof e.supportTests)return e.supportTests}catch(e){}return null}();if(!n){if("undefined"!=typeof Worker&&"undefined"!=typeof OffscreenCanvas&&"undefined"!=typeof URL&&URL.createObjectURL&&"undefined"!=typeof Blob)try{var e="postMessage("+g.toString()+"("+[JSON.stringify(i),f.toString(),p.toString(),u.toString()].join(",")+"));",a=new Blob([e],{type:"text/javascript"}),r=new Worker(URL.createObjectURL(a),{name:"wpTestEmojiSupports"});return void(r.onmessage=function(e){c(n=e.data),r.terminate(),t(n)})}catch(e){}c(n=g(i,f,p,u))}t(n)}).then(function(e){for(var t in e)n.supports[t]=e[t],n.supports.everything=n.supports.everything&&n.supports[t],"flag"!==t&&(n.supports.everythingExceptFlag=n.supports.everythingExceptFlag&&n.supports[t]);n.supports.everythingExceptFlag=n.supports.everythingExceptFlag&&!n.supports.flag,n.DOMReady=!1,n.readyCallback=function(){n.DOMReady=!0}}).then(function(){return e}).then(function(){var e;n.supports.everything||(n.readyCallback(),(e=n.source||{}).concatemoji?t(e.concatemoji):e.wpemoji&&e.twemoji&&(t(e.twemoji),t(e.wpemoji)))}))}((window,document),window._wpemojiSettings);
/* ]]> */
</script>
<style id='wp-emoji-styles-inline-css' type='text/css'>
img.wp-smiley, img.emoji {
display: inline !important;
border: none !important;
box-shadow: none !important;
height: 1em !important;
width: 1em !important;
margin: 0 0.07em !important;
vertical-align: -0.1em !important;
background: none !important;
padding: 0 !important;
}
</style>
<link rel='stylesheet' id='wp-block-library-css' href='https://willgallego.com/wp-includes/css/dist/block-library/style.min.css?ver=6.8.8' type='text/css' media='all' />
<style id='classic-theme-styles-inline-css' type='text/css'>
/*! This file is auto-generated */
.wp-block-button__link{color:#fff;background-color:#32373c;border-radius:9999px;box-shadow:none;text-decoration:none;padding:calc(.667em + 2px) calc(1.333em + 2px);font-size:1.125em}.wp-block-file__button{background:#32373c;color:#fff;text-decoration:none}
</style>
<style id='global-styles-inline-css' type='text/css'>
:root{--wp--preset--aspect-ratio--square: 1;--wp--preset--aspect-ratio--4-3: 4/3;--wp--preset--aspect-ratio--3-4: 3/4;--wp--preset--aspect-ratio--3-2: 3/2;--wp--preset--aspect-ratio--2-3: 2/3;--wp--preset--aspect-ratio--16-9: 16/9;--wp--preset--aspect-ratio--9-16: 9/16;--wp--preset--color--black: #000000;--wp--preset--color--cyan-bluish-gray: #abb8c3;--wp--preset--color--white: #ffffff;--wp--preset--color--pale-pink: #f78da7;--wp--preset--color--vivid-red: #cf2e2e;--wp--preset--color--luminous-vivid-orange: #ff6900;--wp--preset--color--luminous-vivid-amber: #fcb900;--wp--preset--color--light-green-cyan: #7bdcb5;--wp--preset--color--vivid-green-cyan: #00d084;--wp--preset--color--pale-cyan-blue: #8ed1fc;--wp--preset--color--vivid-cyan-blue: #0693e3;--wp--preset--color--vivid-purple: #9b51e0;--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple: linear-gradient(135deg,rgba(6,147,227,1) 0%,rgb(155,81,224) 100%);--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan: linear-gradient(135deg,rgb(122,220,180) 0%,rgb(0,208,130) 100%);--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange: linear-gradient(135deg,rgba(252,185,0,1) 0%,rgba(255,105,0,1) 100%);--wp--preset--gradient--luminous-vivid-orange-to-vivid-red: linear-gradient(135deg,rgba(255,105,0,1) 0%,rgb(207,46,46) 100%);--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray: linear-gradient(135deg,rgb(238,238,238) 0%,rgb(169,184,195) 100%);--wp--preset--gradient--cool-to-warm-spectrum: linear-gradient(135deg,rgb(74,234,220) 0%,rgb(151,120,209) 20%,rgb(207,42,186) 40%,rgb(238,44,130) 60%,rgb(251,105,98) 80%,rgb(254,248,76) 100%);--wp--preset--gradient--blush-light-purple: linear-gradient(135deg,rgb(255,206,236) 0%,rgb(152,150,240) 100%);--wp--preset--gradient--blush-bordeaux: linear-gradient(135deg,rgb(254,205,165) 0%,rgb(254,45,45) 50%,rgb(107,0,62) 100%);--wp--preset--gradient--luminous-dusk: linear-gradient(135deg,rgb(255,203,112) 0%,rgb(199,81,192) 50%,rgb(65,88,208) 100%);--wp--preset--gradient--pale-ocean: linear-gradient(135deg,rgb(255,245,203) 0%,rgb(182,227,212) 50%,rgb(51,167,181) 100%);--wp--preset--gradient--electric-grass: linear-gradient(135deg,rgb(202,248,128) 0%,rgb(113,206,126) 100%);--wp--preset--gradient--midnight: linear-gradient(135deg,rgb(2,3,129) 0%,rgb(40,116,252) 100%);--wp--preset--font-size--small: 13px;--wp--preset--font-size--medium: 20px;--wp--preset--font-size--large: 36px;--wp--preset--font-size--x-large: 42px;--wp--preset--spacing--20: 0.44rem;--wp--preset--spacing--30: 0.67rem;--wp--preset--spacing--40: 1rem;--wp--preset--spacing--50: 1.5rem;--wp--preset--spacing--60: 2.25rem;--wp--preset--spacing--70: 3.38rem;--wp--preset--spacing--80: 5.06rem;--wp--preset--shadow--natural: 6px 6px 9px rgba(0, 0, 0, 0.2);--wp--preset--shadow--deep: 12px 12px 50px rgba(0, 0, 0, 0.4);--wp--preset--shadow--sharp: 6px 6px 0px rgba(0, 0, 0, 0.2);--wp--preset--shadow--outlined: 6px 6px 0px -3px rgba(255, 255, 255, 1), 6px 6px rgba(0, 0, 0, 1);--wp--preset--shadow--crisp: 6px 6px 0px rgba(0, 0, 0, 1);}:where(.is-layout-flex){gap: 0.5em;}:where(.is-layout-grid){gap: 0.5em;}body .is-layout-flex{display: flex;}.is-layout-flex{flex-wrap: wrap;align-items: center;}.is-layout-flex > :is(*, div){margin: 0;}body .is-layout-grid{display: grid;}.is-layout-grid > :is(*, div){margin: 0;}:where(.wp-block-columns.is-layout-flex){gap: 2em;}:where(.wp-block-columns.is-layout-grid){gap: 2em;}:where(.wp-block-post-template.is-layout-flex){gap: 1.25em;}:where(.wp-block-post-template.is-layout-grid){gap: 1.25em;}.has-black-color{color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-color{color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-color{color: var(--wp--preset--color--white) !important;}.has-pale-pink-color{color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-color{color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-color{color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-color{color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-color{color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-color{color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-color{color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-color{color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-color{color: var(--wp--preset--color--vivid-purple) !important;}.has-black-background-color{background-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-background-color{background-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-background-color{background-color: var(--wp--preset--color--white) !important;}.has-pale-pink-background-color{background-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-background-color{background-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-background-color{background-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-background-color{background-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-background-color{background-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-background-color{background-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-background-color{background-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-background-color{background-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-background-color{background-color: var(--wp--preset--color--vivid-purple) !important;}.has-black-border-color{border-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-border-color{border-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-border-color{border-color: var(--wp--preset--color--white) !important;}.has-pale-pink-border-color{border-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-border-color{border-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-border-color{border-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-border-color{border-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-border-color{border-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-border-color{border-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-border-color{border-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-border-color{border-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-border-color{border-color: var(--wp--preset--color--vivid-purple) !important;}.has-vivid-cyan-blue-to-vivid-purple-gradient-background{background: var(--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple) !important;}.has-light-green-cyan-to-vivid-green-cyan-gradient-background{background: var(--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan) !important;}.has-luminous-vivid-amber-to-luminous-vivid-orange-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange) !important;}.has-luminous-vivid-orange-to-vivid-red-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-orange-to-vivid-red) !important;}.has-very-light-gray-to-cyan-bluish-gray-gradient-background{background: var(--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray) !important;}.has-cool-to-warm-spectrum-gradient-background{background: var(--wp--preset--gradient--cool-to-warm-spectrum) !important;}.has-blush-light-purple-gradient-background{background: var(--wp--preset--gradient--blush-light-purple) !important;}.has-blush-bordeaux-gradient-background{background: var(--wp--preset--gradient--blush-bordeaux) !important;}.has-luminous-dusk-gradient-background{background: var(--wp--preset--gradient--luminous-dusk) !important;}.has-pale-ocean-gradient-background{background: var(--wp--preset--gradient--pale-ocean) !important;}.has-electric-grass-gradient-background{background: var(--wp--preset--gradient--electric-grass) !important;}.has-midnight-gradient-background{background: var(--wp--preset--gradient--midnight) !important;}.has-small-font-size{font-size: var(--wp--preset--font-size--small) !important;}.has-medium-font-size{font-size: var(--wp--preset--font-size--medium) !important;}.has-large-font-size{font-size: var(--wp--preset--font-size--large) !important;}.has-x-large-font-size{font-size: var(--wp--preset--font-size--x-large) !important;}
:where(.wp-block-post-template.is-layout-flex){gap: 1.25em;}:where(.wp-block-post-template.is-layout-grid){gap: 1.25em;}
:where(.wp-block-columns.is-layout-flex){gap: 2em;}:where(.wp-block-columns.is-layout-grid){gap: 2em;}
:root :where(.wp-block-pullquote){font-size: 1.5em;line-height: 1.6;}
</style>
<link rel='stylesheet' id='arcade-basic-stylesheet-css' href='https://willgallego.com/wp-content/themes/arcade-basic/style.css?ver=6.8.8' type='text/css' media='all' />
<link rel='stylesheet' id='arcade-basic-fonts-css' href='//fonts.googleapis.com/css?family=Megrim|Raleway|Open+Sans:400,400italic,700,700italic' type='text/css' media='all' />
<link rel='stylesheet' id='font-awesome-css' href='https://willgallego.com/wp-content/themes/arcade-basic/library/css/font-awesome.css?ver=4.7.0' type='text/css' media='all' />
<script type="text/javascript" src="https://willgallego.com/wp-includes/js/jquery/jquery.min.js?ver=3.7.1" id="jquery-core-js"></script>
<script type="text/javascript" src="https://willgallego.com/wp-includes/js/jquery/jquery-migrate.min.js?ver=3.4.1" id="jquery-migrate-js"></script>
<link rel="https://api.w.org/" href="https://willgallego.com/wp-json/" /><link rel="alternate" title="JSON" type="application/json" href="https://willgallego.com/wp-json/wp/v2/posts/441" /><link rel="EditURI" type="application/rsd+xml" title="RSD" href="https://willgallego.com/xmlrpc.php?rsd" />
<meta name="generator" content="WordPress 6.8.8" />
<link rel="canonical" href="https://willgallego.com/2021/08/14/rethinking-best-practices/" />
<link rel='shortlink' href='https://willgallego.com/?p=441' />
<link rel="alternate" title="oEmbed (JSON)" type="application/json+oembed" href="https://willgallego.com/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fwillgallego.com%2F2021%2F08%2F14%2Frethinking-best-practices%2F" />
<link rel="alternate" title="oEmbed (XML)" type="text/xml+oembed" href="https://willgallego.com/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fwillgallego.com%2F2021%2F08%2F14%2Frethinking-best-practices%2F&#038;format=xml" />
<style>
.container { max-width: 1170px; }
</style>
<style type="text/css">.recentcomments a{display:inline !important;padding:0 !important;margin:0 !important;}</style></head>
<body class="wp-singular post-template-default single single-post postid-441 single-format-standard wp-theme-arcade-basic no-fittext basic">
<!-- Global site tag (gtag.js) - Google Analytics -->
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-106878020-1"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'UA-106878020-1');
</script>
<div id="page">
<header id="header">
<nav id="site-navigation" class="navbar navbar-inverse navbar-fixed-top" role="navigation">
<h3 class="sr-only">Main menu</h3>
<a class="sr-only" href="#primary" title="Skip to content">Skip to content</a>
<div class="navbar-header">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
</div>
<div class="collapse navbar-collapse">
<ul id="menu-links" class="nav navbar-nav"><li id="menu-item-5" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-home menu-item-5"><a href="http://willgallego.com">Home</a></li>
<li id="menu-item-36" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-36"><a href="https://willgallego.com/about/">About</a></li>
<li id="menu-item-207" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-207"><a href="https://willgallego.com/talks/">Talks</a></li>
<li id="menu-item-7" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-7"><a target="_blank" href="https://twitter.com/wcgallego">Twitter</a></li>
<li id="menu-item-8" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-8"><a target="_blank" href="https://github.com/wcgallego">Github</a></li>
<li id="menu-item-651" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-651"><a target="_blank" rel="me" href="https://mastodon.social/@gallego">Mastodon</a></li>
</ul> </div>
</nav><!-- #site-navigation -->
<div class="title-card-wrapper">
<div class="title-card">
<div id="site-meta">
<div id="site-title">
<a href="https://willgallego.com" title="Will Gallego" rel="home">Will Gallego</a>
</div>
<i class="fa fa-gamepad"></i>
<div id="site-description">
Software Engineering, Blame Awareness, and gif with a soft ‘G’ </div>
<a href="#" id="more-site" class="btn btn-default btn-lg">See More</a>
</div>
<img src="https://willgallego.com/wp-content/uploads/2021/08/3078316785_a22a883d67_c.jpg" alt="" class="header-img" /> </div>
</div>
</header>
<main>
<div class="container">
<div class="row">
<div id="primary" class="col-md-8 hfeed">
<article id="post-441" class="clearfix post-441 post type-post status-publish format-standard hentry category-uncategorized xfolkentry">
<h1 class="entry-title">Rethinking Best Practices</h1>
<div class="entry-meta">
by <span class="vcard author"><span class="fn"><a href="https://willgallego.com/author/will/" title="Posts by Will Gallego" rel="author">Will Gallego</a></span></span>&nbsp;on&nbsp;<a href="https://willgallego.com/2021/08/14/rethinking-best-practices/" class="time"><time class="date published updated" datetime="2021-08-14">August 14, 2021</time></a>&nbsp;in&nbsp;<a href="https://willgallego.com/category/uncategorized/" rel="category tag">Uncategorized</a> </div>
<div class="entry-content description clearfix">
<p>Best practices aren&#8217;t universal and the use of the term without deeper consideration can be problematic. They&#8217;re straightforward, simplistic answers to difficult questions. Quick answers can at times work in our favor, a way to avoid cognitive overhead and set a clear path to a solution. In fact, we regularly <em>need</em> shortcuts in our day to day work to be able to function, the trade off of<a href="https://erikhollnagel.com/ideas/etto-principle/" target="_blank" rel="noreferrer noopener"> efficiency for thoroughness</a>. This is unfortunately too often co-opted and overused, rendering it specious as a mantra of &#8220;don&#8217;t think, just do&#8221; or as hand waving promotion of a product over guidance on a course of action. What should be a starting point to a conversation, to give way to deeper consideration and approaches, is instead left to be short circuited in favor of an unassailable talking point. The concepts <em>behind</em> best practices may be sound, but as they are not ubiquitous, they should be up for debate. Our tendency to skip deeper investigation, to assume an answer is correct based on a label, makes use of the term &#8220;best practice&#8221; dangerous.</p>
<h2 class="wp-block-heading"><strong>Akin to Root Cause</strong></h2>
<p>I&#8217;ve written a bit before about the failures of<a href="https://willgallego.com/2018/04/02/no-seriously-root-cause-is-a-fallacy/" target="_blank" rel="noreferrer noopener"> root cause</a> as a mindset and how tempting it is to go searching for a silver bullet answer to your problems. It&#8217;s a challenge to get folks to look past root cause because our brains are hardwired to use less energy to search for answers, which isn&#8217;t necessarily a bad thing! We want to optimize for how much focus is required to accomplish a given task after all. The difficulty is in making the effort to look past shallow answers that only superficially solve your problems. By labelling solutions as best practices there&#8217;s a tendency to fall into this same trap.</p>
<p>Think of how excited the software industry was with the concept of immutable infrastructure when we first began discussing it a few years ago. We could avoid the pain points of drift in config management with environments that we could construct/destruct programmatically from a shared common image. Its rise in popularity is indicative of just how useful it has been to orgs, giving way to folks to say it was a &#8220;best practice&#8221; to use it. Of course there are cases where immutable infrastructure doesn&#8217;t work (stateful instances, such as a datastore, would be a poor choice for this). An argument could be made that engineers (the experts) are responsible for their systems, where their expertise lies, and they should. The problem is when we make generalities about systems we lack expertise in, said model (a best practice) may not apply. It&#8217;s not that immutable infrastructure is inherently good or bad, but that we have to consider that calling it a best practice is flawed as it can&#8217;t be a universal constant.</p>
<p>Similarly, we give folks who are early in their careers lists of best practices to follow to help guide them. &#8220;Write self documenting code&#8221;, &#8220;include tests with your changes&#8221;, and &#8220;hide features behind flags&#8221; are all useful bits of advice regardless of your skill level but notably for folks just starting out. At some point, though, we&#8217;ve all written code that has failed to live up to one or more of these. Best practices fall into &#8220;Work as Imagined&#8221; or perhaps &#8220;Work as Prescribed&#8221;, an expectation of what <em>could</em> or <em>should</em> be done, while in reality &#8220;Work as Done&#8221; can&#8217;t continuously meet these well intentioned ideals<sup><a href="#varieties-of-human-work" data-type="internal" data-id="#varieties-of-human-work">1</a></sup>. Why write a test for an experiment we&#8217;ll take down in a week or give an exhaustively long but accurate variable name localized to a tight loop? We ignore best practices all the time because our experience guides us better than a cursory generalization of a problem.</p>
<h2 class="wp-block-heading"><strong>When do we decide what&#8217;s best?</strong></h2>
<p>Another example, a perennial hot button topic, is asking &#8220;<a rel="noreferrer noopener" href="https://willgallego.com/2019/08/23/continuous-verification-of-friday-deploys/" target="_blank"><em>S</em>hould deploys go out on Fridays?</a>&#8220;. We endlessly debate this in conference talks, in blog posts and tweets, but depending on who you talk to it is a best practice to either deploy whenever and wherever (in other words, get good at doing hard things) or to absolutely never deploy unless your team is at full strength (caution is the better part of valor). Each side claims a best practice mentality, so who&#8217;s right?</p>
<p>We call them best practices because we assume, by the name, that it is optimal and, in a word, best. They&#8217;re labeled as such by experts typically, but even experts can disagree on how to approach problems because the subtle nuances of our day to day work require it. The expertise of experienced folks is the fine tuning in the socio-technical system that keeps it running.</p>
<p>Take password management as a further example of an attempt to codify what&#8217;s best. We all agree that having a password set to a loved one&#8217;s birthday or your pet&#8217;s name is poor, an antipattern. The best practice might be don&#8217;t use those to secure a login. While this establishes the negative, it still doesn&#8217;t tell us an optimal password schema to use. Should it be 6 characters in length, 7, maybe 8? Why not 32 or 64? Do we use uppercase and lower case mixed with special characters and what words should be avoided as too obvious? Do we know if our user is using a password manager or will they have to type it manually on their mobile device, making repetitive input a challenge? We can&#8217;t all use &#8220;<a rel="noreferrer noopener" href="https://xkcd.com/936/" target="_blank">correct horse battery staple</a>&#8221; as a universal password.</p>
<p>This is because the term &#8220;best practices&#8221; is a misnomer. It&#8217;s not trying to optimize for some perfect solution, be it for a given period or across environments. I think proponents of best practices would agree with that and I could be taken to task for being too literal here. Instead, they&#8217;re about avoiding the most problematic case(s) to focus on better alternatives. The trouble associated with a phrase like best practice is that we&#8217;ve become so enamored with assuming there&#8217;s a &#8220;one true way&#8221; that it can leave little room for flexibility.</p>
<h2 class="wp-block-heading"><strong>Best Practices lack flexibility</strong></h2>
<p>Best practices by their very nature have a level of brittle robustness baked in, a predetermined model in mind, but lack the subtle nuances that an expert in their system would know. Resilience, that application of adaptability as we adjust our mental model, is what allows us to make the leap from knowledge sharing of successful ideas to real world execution of getting things done in differing environments. This can be summarized more succinctly as follows:</p>
<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p>Best practices are good until expertise is developed (ie when you’re training a new person). At that point (once expertise is developed), over reliance on them and an expectation of following them can become problematic. This is why runbooks can often have adverse impacts</p><cite>Nora Jones, <a href="https://twitter.com/nora_js/status/1411023201929351171" target="_blank" rel="noreferrer noopener">@nora_js</a></cite></blockquote>
<p>Several years ago, Nora passed a paper along my way that challenges many of our conceptions on what works as a best practice, &#8220;<a href="https://www.researchgate.net/publication/300343833_Can_We_Trust_Best_Practices_Six_Cognitive_Challenges_of_Evidence-Based_Approaches" target="_blank" rel="noreferrer noopener">Can we trust Best Practices? Six Cognitive Challenges of Evidence-Based Approaches</a>&#8221; (Klein et. al., 2016). I could spend another blog post entirely on this paper, but this in particular feels central to the discussion:</p>
<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p>We should regard best practices as provisional, not optimal, as a floor rather than a ceiling.</p></blockquote>
<p>Many folks, some proponents of best practices included, will agree that they should be considered guidelines rather than strict rules demanding adherence. This isn&#8217;t always the case though. It happens frequently enough that we&#8217;ll be forced into situations where best practices will directly conflict with our better judgment in a situation.</p>
<p>When a failed deploy goes out, should we wait for tests to complete when looking to revert or do we push through to restore stability more quickly to end users? This can easily become weaponized by bad actors, putting folks into an unwinnable situation of competing best practices, restoring functionality quickly vs waiting for successful tests. Being too adherent to an idea that is considered &#8220;best&#8221; means an inability to adapt.</p>
<p>Keeping your software up to date is considered a best practice, but that can require considerable thought before attempting. We&#8217;ve all experienced the pain of an upgrade that goes south or bumping up your OS version only to be stuck behind an install screen for two hours waiting for it to complete. Wisdom tells us that critical updates may be needed but are most often successful with a plan to execute in due time, robustness coupled with <em>resilience</em>. Best practices on their own don&#8217;t demand this, but likewise they are not enough for success without additional guidance for successful execution.</p>
<h2 class="wp-block-heading"><strong>Best Practice: Don&#8217;t use &#8220;Best Practice&#8221;..?</strong></h2>
<p>Well, maybe. There is an aspect to how we share them that does exhibit a lot of the learning we want to impart with one another. Best practices can be a story telling device and &#8220;coping with variability&#8221; that can be more useful than a set of data points laid out without interpretation. For folks who are first setting out, best practices can be a reasonable set of principles if you&#8217;re lacking expertise to see deeper nuance.</p>
<p>It&#8217;s also jargon. Jargon can be a <em>powerful</em> tool to cut through to what you want. It&#8217;s the reason why, despite writing an entire blog post on it, I don&#8217;t correct people in the midst of an incident if they say &#8220;ok, so what do we think the root cause is here?&#8221;. Yes we want to know more about our context than a single problem that masks what are a host of issues. The point isn&#8217;t to be pedantic in the moment, but to answer a concern. If someone is describing best practices or asking for a best practice with a given technology, it&#8217;s an opportunity to think to ourselves &#8220;What are they <em>really</em> asking for here?&#8221;.</p>
<p>The pathological cases are why the term can garner such a strong pushback in use, including inspiring this post. There&#8217;s nothing stopping a company from splashing &#8220;best practices&#8221; in their sales decks and homepages without providing any concrete evidence of providing value to the customer, which obfuscates the term and wears it thin. Lawyers, without malice, will ask that legal documents assure efforts towards accomplishing best practices as a means of an attempt at guaranteeing success, with their enforceability in question. Software engineers too are not entirely innocent in this context either. Think of how many conference talks we&#8217;ve attended claiming a best practice, when under the hood we all know there&#8217;s duct tape and glue holding up the shiny veneer of our working systems. Don&#8217;t question this idea too much, it&#8217;s a best practice, just follow it to a T. This is all to say it gives the <em>appearance</em> of quality or even rightness without the need to prove it. It claims objectivity but is instead subjective in practice.</p>
<p>It&#8217;s unlikely we&#8217;ll be giving up the term any time soon. There isn&#8217;t much consensus at large otherwise, but I have heard several alternatives that include:</p>
<ul class="wp-block-list"><li>&#8220;Standard Operation Procedure (SOP)&#8221;</li><li>&#8220;Standard Industry Practice&#8221;</li><li>&#8220;Best Current Practice (BCP)&#8221;</li><li>&#8220;Recommended Practice&#8221;</li><li>&#8220;Leading Practice&#8221;</li><li>&#8220;Common Practice or Recommended Practice&#8221;</li><li>&#8220;Generally Accepted Software Practices&#8221;</li></ul>
<p>I tend not to use the term &#8220;best practices&#8221; when describing a methodology and I would encourage others to do the same, while hopefully avoiding being dogmatic about it. Subtleties in language can trip us up, so when we challenge a term and find it lacking, we should be flexible enough to seek out alternatives that can better reflect concepts. For those who may still hold some skepticism, finding value in the concept, I&#8217;d ask you to consider: what are you trying to express when you refer to a concept, a strategy, your day to day work as exhibiting best practices? It&#8217;s critical to be mindful of our words as we&#8217;re able and to understand the gaps in language that colloquialisms may fail in conveying nuance. I would encourage that consideration of what situations it is used with some restraint can be effective as well.</p>
<p>1. See: <a rel="noreferrer noopener" href="https://safetydifferently.com/the-varieties-of-human-work/" target="_blank">The Varieties of Human Work</a>, Shorrock 2017</p>
<p><em>Thanks to <a rel="noreferrer noopener" href="https://twitter.com/LauraMDMaguire" target="_blank">Dr. Laura Maguire</a>, <a rel="noreferrer noopener" href="https://twitter.com/v_hue_g" target="_blank">Vanessa Huerta Granda</a>, and <a href="https://twitter.com/nora_js" target="_blank" rel="noreferrer noopener">Nora Jones</a> for their feedback in putting this together.</em></p>
<p class="has-text-align-right"><em>Photo: <a href="https://flickr.com/photos/bensonkua/3078316785/" target="_blank" rel="noreferrer noopener">https://flickr.com/photos/bensonkua/3078316785/</a></em></p>
</div><!-- .entry-content -->
<footer class="clearfix">
</footer><!-- .entry -->
</article><!-- #post-441 -->
<div id="posts-pagination" class="clearfix">
<h3 class="sr-only">Post navigation</h3>
<div class="previous pull-left"><a href="https://willgallego.com/2021/05/10/interviewing-navigating-job-postings/" rel="prev">&larr; Interviewing: Navigating Job Postings</a></div>
<div class="next pull-right"><a href="https://willgallego.com/2022/01/29/connecting-with-recruiters-pt-1-internal-recruiters/" rel="next">Connecting with Recruiters, pt 1: Internal Recruiters &rarr;</a></div>
</div><!-- #posts-pagination -->
<div id="comments" class="comments-area">
<h2 id="comments-title">
<i class="fa fa-comments"></i>&nbsp;
3 comments for &ldquo;<span>Rethinking Best Practices</span>&rdquo; </h2>
<ol class="commentlist">
<li id="comment-622" class="pingback">
<div class="comment-body">
<i class="fa fa-paperclip"></i>
Pingback: <a href="https://sreweekly.com/sre-weekly-issue-285/" class="url" rel="ugc external nofollow">SRE Weekly Issue #285 &#8211; SRE WEEKLY</a> </div>
</li><!-- #comment-## -->
<li id="comment-624" class="pingback">
<div class="comment-body">
<i class="fa fa-paperclip"></i>
Pingback: <a href="https://fde.cat/index.php/2021/09/20/sre-weekly-issue-285/" class="url" rel="ugc external nofollow">SRE Weekly Issue #285 &#8211; FDE</a> </div>
</li><!-- #comment-## -->
<li id="comment-625" class="pingback">
<div class="comment-body">
<i class="fa fa-paperclip"></i>
Pingback: <a href="https://radoncnotes.com/best-practises/" class="url" rel="ugc external nofollow">Best Practises &#8211; RadOnc Notes</a> </div>
</li><!-- #comment-## -->
</ol><!-- .commentlist -->
<p class="nocomments">Comments are closed.</p>
</div><!-- #comments .comments-area -->
</div>
<div id="secondary" class="col-md-4" role="complementary">
<aside id="recent-posts-4" class="widget widget_recent_entries">
<h3 class="widget-title">Recent Posts</h3>
<ul>
<li>
<a href="https://willgallego.com/2025/06/21/big-enough-to-fail/">Big Enough to Fail</a>
</li>
<li>
<a href="https://willgallego.com/2025/01/11/an-incident-review-of-an-incident-review/">An Incident Review of an Incident Review</a>
</li>
<li>
<a href="https://willgallego.com/2024/11/11/job-switching-and-titles/">Job Switching and Titles</a>
</li>
<li>
<a href="https://willgallego.com/2024/07/12/the-fridge-theory-of-blameless-organizations/">The Fridge Theory of Blameless Organizations</a>
</li>
</ul>
</aside><aside id="search-2" class="widget widget_search"><form role="search" method="get" class="search-form" action="https://willgallego.com/">
<label>
<span class="screen-reader-text">Search for:</span>
<input type="search" class="search-field" placeholder="Search &hellip;" value="" name="s" />
</label>
<input type="submit" class="search-submit" value="Search" />
</form></aside>
<aside id="recent-posts-2" class="widget widget_recent_entries">
<h3 class="widget-title">Recent Posts</h3>
<ul>
<li>
<a href="https://willgallego.com/2025/06/21/big-enough-to-fail/">Big Enough to Fail</a>
</li>
<li>
<a href="https://willgallego.com/2025/01/11/an-incident-review-of-an-incident-review/">An Incident Review of an Incident Review</a>
</li>
<li>
<a href="https://willgallego.com/2024/11/11/job-switching-and-titles/">Job Switching and Titles</a>
</li>
<li>
<a href="https://willgallego.com/2024/07/12/the-fridge-theory-of-blameless-organizations/">The Fridge Theory of Blameless Organizations</a>
</li>
<li>
<a href="https://willgallego.com/2024/06/21/how-many-maybes-until-empathy/">How Many Maybe&#8217;s until Empathy?</a>
</li>
</ul>
</aside><aside id="recent-comments-2" class="widget widget_recent_comments"><h3 class="widget-title">Recent Comments</h3><ul id="recentcomments"><li class="recentcomments"><span class="comment-author-link"><a href="https://www.arnoldit.com/wordpress/2025/12/04/titanic-talk-this-ship-will-not-fail/" class="url" rel="ugc external nofollow">Titanic Talk: This Ship Will Not Fail : Stephen E. Arnold @ Beyond Search</a></span> on <a href="https://willgallego.com/2025/06/21/big-enough-to-fail/#comment-37339">Big Enough to Fail</a></li><li class="recentcomments"><span class="comment-author-link"><a href="https://sreweekly.com/sre-weekly-issue-484/" class="url" rel="ugc external nofollow">SRE Weekly Issue #484 &#8211; SRE WEEKLY</a></span> on <a href="https://willgallego.com/2025/06/21/big-enough-to-fail/#comment-25648">Big Enough to Fail</a></li><li class="recentcomments"><span class="comment-author-link">Jacob Rose</span> on <a href="https://willgallego.com/2025/01/11/an-incident-review-of-an-incident-review/#comment-17389">An Incident Review of an Incident Review</a></li><li class="recentcomments"><span class="comment-author-link">Leonardo Camara</span> on <a href="https://willgallego.com/2025/01/11/an-incident-review-of-an-incident-review/#comment-16366">An Incident Review of an Incident Review</a></li><li class="recentcomments"><span class="comment-author-link"><a href="https://sreweekly.com/sre-weekly-issue-460/" class="url" rel="ugc external nofollow">SRE Weekly Issue #460 &#8211; SRE WEEKLY</a></span> on <a href="https://willgallego.com/2025/01/11/an-incident-review-of-an-incident-review/#comment-16284">An Incident Review of an Incident Review</a></li></ul></aside><aside id="archives-2" class="widget widget_archive"><h3 class="widget-title">Archives</h3>
<ul>
<li><a href='https://willgallego.com/2025/06/'>June 2025</a></li>
<li><a href='https://willgallego.com/2025/01/'>January 2025</a></li>
<li><a href='https://willgallego.com/2024/11/'>November 2024</a></li>
<li><a href='https://willgallego.com/2024/07/'>July 2024</a></li>
<li><a href='https://willgallego.com/2024/06/'>June 2024</a></li>
<li><a href='https://willgallego.com/2024/03/'>March 2024</a></li>
<li><a href='https://willgallego.com/2024/02/'>February 2024</a></li>
<li><a href='https://willgallego.com/2024/01/'>January 2024</a></li>
<li><a href='https://willgallego.com/2023/10/'>October 2023</a></li>
<li><a href='https://willgallego.com/2023/04/'>April 2023</a></li>
<li><a href='https://willgallego.com/2023/01/'>January 2023</a></li>
<li><a href='https://willgallego.com/2022/12/'>December 2022</a></li>
<li><a href='https://willgallego.com/2022/06/'>June 2022</a></li>
<li><a href='https://willgallego.com/2022/02/'>February 2022</a></li>
<li><a href='https://willgallego.com/2022/01/'>January 2022</a></li>
<li><a href='https://willgallego.com/2021/08/'>August 2021</a></li>
<li><a href='https://willgallego.com/2021/05/'>May 2021</a></li>
<li><a href='https://willgallego.com/2021/02/'>February 2021</a></li>
<li><a href='https://willgallego.com/2021/01/'>January 2021</a></li>
<li><a href='https://willgallego.com/2020/09/'>September 2020</a></li>
<li><a href='https://willgallego.com/2020/06/'>June 2020</a></li>
<li><a href='https://willgallego.com/2020/05/'>May 2020</a></li>
<li><a href='https://willgallego.com/2020/02/'>February 2020</a></li>
<li><a href='https://willgallego.com/2019/12/'>December 2019</a></li>
<li><a href='https://willgallego.com/2019/08/'>August 2019</a></li>
<li><a href='https://willgallego.com/2019/07/'>July 2019</a></li>
<li><a href='https://willgallego.com/2019/04/'>April 2019</a></li>
<li><a href='https://willgallego.com/2019/02/'>February 2019</a></li>
<li><a href='https://willgallego.com/2018/12/'>December 2018</a></li>
<li><a href='https://willgallego.com/2018/08/'>August 2018</a></li>
<li><a href='https://willgallego.com/2018/07/'>July 2018</a></li>
<li><a href='https://willgallego.com/2018/04/'>April 2018</a></li>
<li><a href='https://willgallego.com/2018/02/'>February 2018</a></li>
<li><a href='https://willgallego.com/2018/01/'>January 2018</a></li>
<li><a href='https://willgallego.com/2017/11/'>November 2017</a></li>
<li><a href='https://willgallego.com/2017/10/'>October 2017</a></li>
<li><a href='https://willgallego.com/2017/09/'>September 2017</a></li>
</ul>
</aside> </div><!-- #secondary.widget-area --> </div>
</div>
</main><!-- main -->
<footer id="footer" role="contentinfo">
<div id="footer-content" class="container">
<div class="row">
<div class="copyright col-lg-12">
<span class="pull-left">Copyright &copy; 2026 <a href="https://willgallego.com">Will Gallego</a>. All Rights Reserved.</span>
<span class="credit-link pull-right"><i class="fa fa-leaf"></i>The Arcade Basic Theme by <a href="https://themes.bavotasan.com/themes/arcade">bavotasan.com</a>.</span>
</div><!-- .col-lg-12 -->
</div><!-- .row -->
</div><!-- #footer-content.container -->
</footer><!-- #footer -->
</div><!-- #page -->
<script type="speculationrules">
{"prefetch":[{"source":"document","where":{"and":[{"href_matches":"\/*"},{"not":{"href_matches":["\/wp-*.php","\/wp-admin\/*","\/wp-content\/uploads\/*","\/wp-content\/*","\/wp-content\/plugins\/*","\/wp-content\/themes\/arcade-basic\/*","\/*\\?(.+)"]}},{"not":{"selector_matches":"a[rel~=\"nofollow\"]"}},{"not":{"selector_matches":".no-prefetch, .no-prefetch a"}}]},"eagerness":"conservative"}]}
</script>
<script type="text/javascript" src="https://willgallego.com/wp-includes/js/comment-reply.min.js?ver=6.8.8" id="comment-reply-js" async="async" data-wp-strategy="async"></script>
<script type="text/javascript" src="https://willgallego.com/wp-content/themes/arcade-basic/library/js/bootstrap.min.js?ver=3.0.3" id="bootstrap-js"></script>
<script type="text/javascript" src="https://willgallego.com/wp-content/themes/arcade-basic/library/js/fillsize.js?ver=6.8.8" id="fillsize-js"></script>
<script type="text/javascript" src="https://willgallego.com/wp-content/themes/arcade-basic/library/js/jquery.arctext.js?ver=6.8.8" id="arctext-js"></script>
<script type="text/javascript" id="arcade-basic-script-js-extra">
/* <![CDATA[ */
var arcade_basic_vars = {"arc":"800","fittext":""};
/* ]]> */
</script>
<script type="text/javascript" src="https://willgallego.com/wp-content/themes/arcade-basic/library/js/theme.js?ver=6.8.8" id="arcade-basic-script-js"></script>
</body>
</html>
<!-- Page cached by LiteSpeed Cache 7.5.0.1 on 2026-09-11 05:42:55 -->