Files
nexus/sreweekly/articles/87/01-multiple-perspectives-on-technical-problems-and-solutions.html
2026-09-12 17:23:01 +08:00

296 lines
54 KiB
HTML
Raw Permalink Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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">
<title>Multiple Perspectives On Technical Problems and Solutions &#8211; Kitchen Soap</title>
<meta name='robots' content='max-image-preview:large' />
<link rel="alternate" type="application/rss+xml" title="Kitchen Soap &raquo; Feed" href="https://www.kitchensoap.com/feed/" />
<link rel="alternate" type="application/rss+xml" title="Kitchen Soap &raquo; Comments Feed" href="https://www.kitchensoap.com/comments/feed/" />
<link rel="alternate" type="application/rss+xml" title="Kitchen Soap &raquo; Multiple Perspectives On Technical Problems and Solutions Comments Feed" href="https://www.kitchensoap.com/2017/08/12/multiple-perspectives-on-technical-problems-and-solutions/feed/" />
<link rel="alternate" title="oEmbed (JSON)" type="application/json+oembed" href="https://www.kitchensoap.com/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fwww.kitchensoap.com%2F2017%2F08%2F12%2Fmultiple-perspectives-on-technical-problems-and-solutions%2F" />
<link rel="alternate" title="oEmbed (XML)" type="text/xml+oembed" href="https://www.kitchensoap.com/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fwww.kitchensoap.com%2F2017%2F08%2F12%2Fmultiple-perspectives-on-technical-problems-and-solutions%2F&#038;format=xml" />
<style id="wp-img-auto-sizes-contain-inline-css">
img:is([sizes=auto i],[sizes^="auto," i]){contain-intrinsic-size:3000px 1500px}
/*# sourceURL=wp-img-auto-sizes-contain-inline-css */
</style>
<style id="wp-emoji-styles-inline-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;
}
/*# sourceURL=wp-emoji-styles-inline-css */
</style>
<style id="wp-block-library-inline-css">
:root{--wp-block-synced-color:#7a00df;--wp-block-synced-color--rgb:122,0,223;--wp-bound-block-color:var(--wp-block-synced-color);--wp-editor-canvas-background:#ddd;--wp-admin-theme-color:#007cba;--wp-admin-theme-color--rgb:0,124,186;--wp-admin-theme-color-darker-10:#006ba1;--wp-admin-theme-color-darker-10--rgb:0,107,160.5;--wp-admin-theme-color-darker-20:#005a87;--wp-admin-theme-color-darker-20--rgb:0,90,135;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){:root{--wp-admin-border-width-focus:1.5px}}.wp-element-button{cursor:pointer}:root .has-very-light-gray-background-color{background-color:#eee}:root .has-very-dark-gray-background-color{background-color:#313131}:root .has-very-light-gray-color{color:#eee}:root .has-very-dark-gray-color{color:#313131}:root .has-vivid-green-cyan-to-vivid-cyan-blue-gradient-background{background:linear-gradient(135deg,#00d084,#0693e3)}:root .has-purple-crush-gradient-background{background:linear-gradient(135deg,#34e2e4,#4721fb 50%,#ab1dfe)}:root .has-hazy-dawn-gradient-background{background:linear-gradient(135deg,#faaca8,#dad0ec)}:root .has-subdued-olive-gradient-background{background:linear-gradient(135deg,#fafae1,#67a671)}:root .has-atomic-cream-gradient-background{background:linear-gradient(135deg,#fdd79a,#004a59)}:root .has-nightshade-gradient-background{background:linear-gradient(135deg,#330968,#31cdcf)}:root .has-midnight-gradient-background{background:linear-gradient(135deg,#020381,#2874fc)}:root{--wp--preset--font-size--normal:16px;--wp--preset--font-size--huge:42px}.has-regular-font-size{font-size:1em}.has-larger-font-size{font-size:2.625em}.has-normal-font-size{font-size:var(--wp--preset--font-size--normal)}.has-huge-font-size{font-size:var(--wp--preset--font-size--huge)}:root .has-text-align-center{text-align:center}:root .has-text-align-left{text-align:left}:root .has-text-align-right{text-align:right}.has-fit-text{white-space:nowrap!important}#end-resizable-editor-section{display:none}.aligncenter{clear:both}.items-justified-left{justify-content:flex-start}.items-justified-center{justify-content:center}.items-justified-right{justify-content:flex-end}.items-justified-space-between{justify-content:space-between}.screen-reader-text{word-wrap:normal!important;border:0;clip-path:inset(50%);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.screen-reader-text:focus{background-color:#ddd;clip-path:none;color:#444;display:block;font-size:1em;height:auto;left:5px;line-height:normal;padding:15px 23px 14px;text-decoration:none;top:5px;width:auto;z-index:100000}html :where(.has-border-color){border-style:solid}html :where([style*=border-color]){border-style:solid}html :where([style*=border-top-color]){border-top-style:solid}html :where([style*=border-right-color]){border-right-style:solid}html :where([style*=border-bottom-color]){border-bottom-style:solid}html :where([style*=border-left-color]){border-left-style:solid}html :where([style*=border-width]){border-style:solid}html :where([style*=border-top-width]){border-top-style:solid}html :where([style*=border-right-width]){border-right-style:solid}html :where([style*=border-bottom-width]){border-bottom-style:solid}html :where([style*=border-left-width]){border-left-style:solid}html :where(img[class*=wp-image-]){height:auto;max-width:100%}:where(figure){margin:0 0 1em}html :where(.is-position-sticky){--wp-admin--admin-bar--position-offset:var(--wp-admin--admin-bar--height,0px)}@media screen and (max-width:600px){html :where(.is-position-sticky){--wp-admin--admin-bar--position-offset:0px}}
/*# sourceURL=/wp-includes/css/dist/block-library/common.min.css */
</style>
<style id="classic-theme-styles-inline-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}
/*# sourceURL=/wp-includes/css/classic-themes.min.css */
</style>
<style id="global-styles-inline-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,rgb(6,147,227) 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,rgb(252,185,0) 0%,rgb(255,105,0) 100%);--wp--preset--gradient--luminous-vivid-orange-to-vivid-red: linear-gradient(135deg,rgb(255,105,0) 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--font-family--libre-baskerville: "Libre Baskerville", serif;--wp--preset--font-family--jost: Jost, sans-serif;--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 rgb(255, 255, 255), 6px 6px rgb(0, 0, 0);--wp--preset--shadow--crisp: 6px 6px 0px rgb(0, 0, 0);}:where(body) { margin: 0; }: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;}body{padding-top: 0px;padding-right: 0px;padding-bottom: 0px;padding-left: 0px;}:root :where(.wp-element-button, .wp-block-button__link){background-color: #32373c;border-width: 0;color: #fff;font-family: inherit;font-size: inherit;font-style: inherit;font-weight: inherit;letter-spacing: inherit;line-height: inherit;padding-top: calc(0.667em + 2px);padding-right: calc(1.333em + 2px);padding-bottom: calc(0.667em + 2px);padding-left: calc(1.333em + 2px);text-decoration: none;text-transform: inherit;}.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;}.has-libre-baskerville-font-family{font-family: var(--wp--preset--font-family--libre-baskerville) !important;}.has-jost-font-family{font-family: var(--wp--preset--font-family--jost) !important;}
/*# sourceURL=global-styles-inline-css */
</style>
<link rel='stylesheet' id='loupely-canvas-lite-css' href='https://www.kitchensoap.com/wp-content/cache/autoptimize/css/autoptimize_single_81547c2bf1b39fd0b27f64bee28baf0a.css?ver=1.2.3' media='all' />
<link rel='stylesheet' id='lclite-design-css' href='https://www.kitchensoap.com/wp-content/cache/autoptimize/css/autoptimize_single_768cee5b62c05603aae6f831a2301733.css?ver=1.2.3' media='all' />
<link rel="https://api.w.org/" href="https://www.kitchensoap.com/wp-json/" /><link rel="alternate" title="JSON" type="application/json" href="https://www.kitchensoap.com/wp-json/wp/v2/posts/9713" /><link rel="EditURI" type="application/rsd+xml" title="RSD" href="https://www.kitchensoap.com/xmlrpc.php?rsd" />
<link rel="canonical" href="https://www.kitchensoap.com/2017/08/12/multiple-perspectives-on-technical-problems-and-solutions/" />
<link rel='shortlink' href='https://www.kitchensoap.com/?p=9713' />
<style class="wp-fonts-local">
@font-face{font-family:"Libre Baskerville";font-style:normal;font-weight:400;font-display:fallback;src:url('http://www.kitchensoap.com/wp-content/uploads/fonts/kmKUZrc3Hgbbcjq75U4uslyuy4kn0olVQ-LglH6T17uj8Q4SDAlOvuPCfQ.woff2') format('woff2');}
@font-face{font-family:"Libre Baskerville";font-style:normal;font-weight:700;font-display:fallback;src:url('http://www.kitchensoap.com/wp-content/uploads/fonts/kmKUZrc3Hgbbcjq75U4uslyuy4kn0olVQ-LglH6T17ujFgkSDAlOvuPCfQ.woff2') format('woff2');}
@font-face{font-family:"Libre Baskerville";font-style:italic;font-weight:400;font-display:fallback;src:url('http://www.kitchensoap.com/wp-content/uploads/fonts/kmKWZrc3Hgbbcjq75U4uslyuy4kn0qNccR04_RUJeby2OU36SgNPnObSfbge.woff2') format('woff2');}
@font-face{font-family:"Libre Baskerville";font-style:italic;font-weight:700;font-display:fallback;src:url('http://www.kitchensoap.com/wp-content/uploads/fonts/kmKWZrc3Hgbbcjq75U4uslyuy4kn0qNccR04_RUJeby2OU0dTQNPnObSfbge.woff2') format('woff2');}
@font-face{font-family:Jost;font-style:normal;font-weight:400;font-display:fallback;src:url('http://www.kitchensoap.com/wp-content/uploads/fonts/92zPtBhPNqw79Ij1E865zBUv7myjJQVDPokMmuHL.woff2') format('woff2');}
@font-face{font-family:Jost;font-style:normal;font-weight:700;font-display:fallback;src:url('http://www.kitchensoap.com/wp-content/uploads/fonts/92zPtBhPNqw79Ij1E865zBUv7mxEIgVDPokMmuHL.woff2') format('woff2');}
@font-face{font-family:Jost;font-style:italic;font-weight:400;font-display:fallback;src:url('http://www.kitchensoap.com/wp-content/uploads/fonts/92zJtBhPNqw73oHH7BbQp4-B6XlrZu0FNIgun_HLMEo.woff2') format('woff2');}
@font-face{font-family:Jost;font-style:italic;font-weight:700;font-display:fallback;src:url('http://www.kitchensoap.com/wp-content/uploads/fonts/92zJtBhPNqw73oHH7BbQp4-B6XlrZgoCNIgun_HLMEo.woff2') format('woff2');}
</style>
<!-- BEGIN Adobe Fonts for WordPress --><!-- END Adobe Fonts for WordPress --></head>
<body class="wp-singular post-template-default single single-post postid-9713 single-format-standard wp-embed-responsive wp-theme-loupely-canvas-lite">
<a class="lclite-skip-link screen-reader-text" href="#lclite-main-content">Skip to content</a>
<header class="lclite-site-header">
<div class="lclite-header-inner">
<div class="lclite-branding">
<a class="lclite-site-title" href="https://www.kitchensoap.com/" rel="home">Kitchen Soap</a><p class="lclite-tagline">Thoughts on systems safety, software operations, and sociotechnical systems.</p> </div>
<nav class="lclite-nav" aria-label="Primary">
<ul id="menu-menu-1" class="menu"><li id="menu-item-9440" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-9440"><a href="https://www.kitchensoap.com/about-me/">About Me</a></li>
<li id="menu-item-9441" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-9441"><a href="https://www.kitchensoap.com/category/talks/">Talks</a></li>
<li id="menu-item-9444" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-9444"><a href="https://www.kitchensoap.com/category/books/">Books</a></li>
<li id="menu-item-9501" class="menu-item menu-item-type-taxonomy menu-item-object-category current-post-ancestor current-menu-parent current-post-parent menu-item-9501"><a href="https://www.kitchensoap.com/category/complex-systems/">Complex Systems</a></li>
<li id="menu-item-9502" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-9502"><a href="https://www.kitchensoap.com/category/human-factors/">Human Factors</a></li>
<li id="menu-item-9503" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-9503"><a href="https://www.kitchensoap.com/category/webops/">WebOps</a></li>
</ul> </nav>
</div>
</header>
<main id="lclite-main-content" class="lclite-content">
<div class="lclite-blog">
<article id="post-9713" class="lclite-post post-9713 post type-post status-publish format-standard hentry category-architecture category-complex-systems category-culture category-etsy">
<header class="lclite-entry-header">
<h1 class="lclite-entry-title">Multiple Perspectives On Technical Problems and Solutions</h1> <p class="lclite-entry-meta">
<span class="lclite-posted-on">August 12, 2017</span>
<span class="lclite-byline">
by allspaw </span>
</p>
</header>
<div class="lclite-entry-content lclite-prose">
<p><span style="font-weight: 400;">Over the years, a number of people have asked about the details surrounding Etsy&#8217;s </span><i><span style="font-weight: 400;">architecture review</span></i><span style="font-weight: 400;"> process.</span></p>
<p><span style="font-weight: 400;">In this post, I&#8217;d like to focus on the </span><i><span style="font-weight: 400;">architecture review working group&#8217;s </span></i><span style="font-weight: 400;">role in facilitating dialogue about technology decision-making. Part of this is really just about working groups in general (pros, cons, formats, etc.) and another part of it relies on the general philosophy that Dan McKinley lays out in his </span><a href="http://mcfunley.com/choose-boring-technology"><span style="font-weight: 400;">post/talk</span></a><span style="font-weight: 400;">, so I&#8217;d consider reading those first and then coming back here. </span></p>
<p><b>Fundamental: engineering decision-making is a </b><b><i>socially constructed</i></b><b> activity</b></p>
<p><span style="font-weight: 400;">But first, we need to start with a bit of grounding theory. In 1985, Billy Vaughn Koen (now professor emeritus at the University of Texas) introduced the idea of the &#8220;Engineering Method&#8221; which I&#8217;ve <a href="https://www.kitchensoap.com/2014/05/05/engineerings-relationship-to-science/" target="_blank" rel="noopener">written about before</a>. The key idea is his observation that engineers are defined not what they produce, but </span><i><span style="font-weight: 400;">how they do their work</span></i><span style="font-weight: 400;">. He describes the Engineering Method succinctly, saying that it is:</span></p>
<p style="padding-left: 30px;"><i><span style="font-weight: 400;">“the strategy for causing the best change in a poorly understood or uncertain situation within the available resources”</span></i></p>
<p><span style="font-weight: 400;">Note the normative terms </span><i><span style="font-weight: 400;">best</span></i><span style="font-weight: 400;"> and </span><i><span style="font-weight: 400;">poorly</span></i><span style="font-weight: 400;">. </span></p>
<p><span style="font-weight: 400;">In other words, engineering (as an activity) does not have &#8220;correct&#8221; solutions to problems. As an aside, if you&#8217;re looking for correct solutions to problems, I&#8217;d suggest that you go work in a different field (like mathematics); engineering will likely frustrate you. </span></p>
<p><span style="font-weight: 400;">I wholeheartedly agree with this idea, and I’d take it a bit further and say that successful engineering teams find solutions to problems largely through </span><a href="http://www.kitchensoap.com/2017/03/06/book-suggestion-dialogue-the-art-of-thinking-together/" target="_blank" rel="noopener"><span style="font-weight: 400;">dialogue</span></a><span style="font-weight: 400;">. By this I mean, they engage in various forms of: </span></p>
<ul>
<li style="font-weight: 400;"><span style="font-weight: 400;">Describing the problem they believe needs solving. This may or may not be straightforward to explain or describe, so a back-and-forth is usually needed for a group to get a full grasp of it.</span></li>
<li style="font-weight: 400;"><span style="font-weight: 400;">Generating hypotheses about whether or not the problem(s) being described need to be solved in more or less complete or exhaustive ways. Some problem descriptions might be really narrow, or really broad, some problems don’t have to be fully “solved” all at once, etc. Will the problem exist in perpetuity? </span></li>
<li style="font-weight: 400;"><span style="font-weight: 400;">Evaluating options for solutions. What are the pros and cons? Can a group that needs to support a solution sustain or maintain said solution? Will some solutions have an “expiration date”? What possible unintended consequences could result in upstream/downstream systems that depend on this solution?</span></li>
<li style="font-weight: 400;"><span style="font-weight: 400;">Building confidence in implementing a given solution. How uncertain (and in what ways) is the group in how the solution may play out in positive or negative terms?</span></li>
<li style="font-weight: 400;"><span style="font-weight: 400;">Etc.</span></li>
</ul>
<p><span style="font-weight: 400;">I realize this should be obvious, but I include this perspective here because I&#8217;m continually surprised how difficult this is to believe and understand when the topic is companies choosing to use a particular piece of technology (framework, language, architecture, etc.) or not. </span></p>
<p><span style="font-weight: 400;">Once you can grok the concept that engineering decisions are constructed socially, then you can understand how I believe the set and setting of an “architecture review” is critical.</span></p>
<p><b>The Concept and The Intention</b></p>
<p><span style="font-weight: 400;">When Kellan and I first came to Etsy in 2010, we put in place a process whereby an engineer (or a group) who were looking to implement something new (different from what we had been already doing or using) would present the problem they were trying to solve and why they believed existing solutions at Etsy wouldn&#8217;t be ideal to solve it. We called this an </span><i><span style="font-weight: 400;">architecture review.</span></i></p>
<p><span style="font-weight: 400;">We called these &#8220;something new&#8221; things </span><i><span style="font-weight: 400;">departures</span></i><span style="font-weight: 400;">. Again, Dan&#8217;s post/talk goes over this, but the basic idea is that there are costs (many of which can be both hidden and surprising on many fronts) for making departures that attempt to solve a local problem without thinking about the global effects it can have on an organization.</span></p>
<p><span style="font-weight: 400;">Departures can include things such as:</span></p>
<ul>
<li style="font-weight: 400;"><span style="font-weight: 400;">writing a function or feature in a language that isn&#8217;t in wide usage at the company already </span></li>
<li style="font-weight: 400;"><span style="font-weight: 400;">redesigning a function or feature (even in a language already widely-used)</span></li>
<li style="font-weight: 400;"><span style="font-weight: 400;">introducing a pattern or architecture not already in use</span></li>
<li style="font-weight: 400;"><span style="font-weight: 400;">using new server software for storing, caching, or retrieving data not already being used </span></li>
<li style="font-weight: 400;"><span style="font-weight: 400;">essentially, anything that had the potential to surprise and challenge the team when it (eventually) broke</span></li>
</ul>
<p><span style="font-weight: 400;">Those bullets above are pretty fuzzy, I&#8217;m sure you noticed. So how did you know when you should ask for an architecture review? Ask your coworkers. If you&#8217;re debating back and forth whether your thing needs one, then you likely do. </span></p>
<p><span style="font-weight: 400;">So what was this architecture review meeting all about? It was pretty simple, really. It was just a presentation by the engineer(s) looking for feedback on a solution they came up with, and Kellan and I would ask questions. The meeting was open to anyone in the company who wanted to attend. The hope was that </span><i><span style="font-weight: 400;">many</span></i><span style="font-weight: 400;"> engineers would attend, actually. The intent here was to help the engineers describe their problem as thoroughly as they can, and by asking questions, we could help draw out any tacit assumptions they made in thinking through the problem. In a nutshell: it was a critical-thinking exercise, and we wanted engineers to </span><i><span style="font-weight: 400;">want</span></i><span style="font-weight: 400;"> to do this, because it was ideally about providing feedback. </span></p>
<p><span style="font-weight: 400;">The gist of it could be described like this, from the point of view of an engineer wanting feedback:</span></p>
<p style="padding-left: 30px;"><i><span style="font-weight: 400;">&#8220;Hey everybody &#8211; check this out: I believe I have to solve problem X, and I&#8217;ve thought about using A, B, and C to do it, but they all don&#8217;t seem ideal. I think I have to go with departure Y as the solution. Please try to talk me out of this.”</span></i></p>
<p><span style="font-weight: 400;">This approach leads to some really good prompts for the dialogue I mentioned above. Prompts such as: </span></p>
<ul>
<li style="font-weight: 400;"><span style="font-weight: 400;">“Is it possible I don&#8217;t even have to solve problem X?”</span></li>
<li style="font-weight: 400;"><span style="font-weight: 400;">“Am I missing something with A, B, or C? Is it possible that they&#8217;ll work well enough?”</span></li>
<li style="font-weight: 400;"><span style="font-weight: 400;">“If I go with Y, what do </span><b>we</b><span style="font-weight: 400;"> need to do to feel confident about supporting Y as the solution for this type of problem?&#8221;</span></li>
</ul>
<p><span style="font-weight: 400;">At a high level, we were reasonably successful with this approach in those early days, in that we were able to get engineers to come, talk about the judgements and assumptions they were making, and entertain questions and suggestions about the details about both their understanding of the problem and potential solutions. Even though it began with mostly Kellan and I asking questions, we actively encouraged others to as well. Slowly, they did, and it became a really strong source of confidence for the team, collectively.</span></p>
<p><span style="font-weight: 400;">There were some really surprising results by doing these reviews. More than once, someone in the room would recognize the problem being presented, and relay that they had also wrestled with and solved an almost identical problem in the past in a different part of the codebase. With a few minor changes, they said, it could work for the problem at hand, instead of reinventing some new stuff. Great!</span></p>
<p><span style="font-weight: 400;">One time, an engineer walked through a reasonably complicated diagram outlining how they were going to collect, summarize, store, and act on data to power a new feature. Their solution involved not only putting a new language into the critical path of the application but introducing a new (and at the time relatively immature) datastore to the stack as well. After a few questions back and forth, it became clear that the data they needed already existed and they were only one SQL query and one cron job away from implementing the new feature. </span></p>
<p><span style="font-weight: 400;">Those sort of outcomes didn&#8217;t happen often. But when they did, it was quite satisfying. </span></p>
<p><span style="font-weight: 400;">Other times, an engineer would present, dialogue would ensue, and it would become clear that from multiple perspectives, going with the departure (the new and novel suggestion) appeared to be the best route. </span></p>
<p><span style="font-weight: 400;">Overall, I&#8217;d say that we got a lot of benefits from this early architecture review practice. Engineers starting out in their career got good practice on presenting their work and their thinking, veteran engineers had an opportunity to share some knowledge or expertise they otherwise wouldn&#8217;t have. Like I mentioned, sometimes engineers got to save a lot of time and headache by going a perhaps simpler route. From a leadership perspective, my confidence in the org&#8217;s ability to talk constructively about design increased.</span></p>
<p><b>How the multiple perspective dialogue evolved</b></p>
<p><span style="font-weight: 400;">However, there was one problem: when you&#8217;re a CTO and an SVP, you can&#8217;t be surprised when people come to meetings when you invite them. I often wondered if there were questions and opinions that </span><i><span style="font-weight: 400;">weren&#8217;t</span></i><span style="font-weight: 400;"> being said because of the power dynamic in the room. I knew that unless a critical mass of the engineers in the room demonstrated the ethos of the practice (that is, the creation and support of a critical-thinking dialogue meant to help engineers, both individually and organizationally) then there would be a good chance it would devolve into a sort of hierarchical &#8220;American Idol&#8221;-style panel of judgement and heavy-handed dictation of policy.</span></p>
<p><span style="font-weight: 400;">The idea of course was that better decision-making came from people showing up and feeling comfortable about asking questions that could potentially be seen (in a different environment) as “dumb” or naive, and the presenter(s) hearing critique as comments on the </span><i><span style="font-weight: 400;">design</span></i><span style="font-weight: 400;">, not as comments on </span><i><span style="font-weight: 400;">their skills. </span></i><span style="font-weight: 400;">This meant that the origin of the design (what problem it was intended to solve at the time, what people’s concerns were at the time, etc.) could be recorded</span></p>
<p><span style="font-weight: 400;">The more the organization grew, the harder it became for a single person (even the CTO or an SVP) to sustain this approach and assumptions that engineers brought with them into architecture reviews.</span></p>
<p><b>The beginning of a particular kind of working group</b></p>
<p><span style="font-weight: 400;">So, an Architecture Review Working Group, or &#8220;ARWG&#8221; was developed. The main idea was that such a group could keep the practice going without senior engineering leadership bringing an authoritarian flavor to the meetings, and continually model the behavior the practice needed to encourage the multiple perspectives that departures needed. </span></p>
<p><span style="font-weight: 400;">A small group was formed, 4 or 5 people. The original engineers would be from product, infrastructure, and operations teams, but engineers from other teams joined later. At some point, some members rotated in or out. </span></p>
<p><span style="font-weight: 400;">The group&#8217;s charter was basically the same, at a high level, as how we intended those early architecture reviews: provide a stable and welcome environment where engineers can openly describe how they&#8217;re thinking about solving problems with potentially new and novel technology and patterns. This environment needs to support questions and comments from the rest of the organization about trade-offs, assumptions, constraints, pressures, maintenance, and the onus that comes with departures. And finally, documenting how decisions around departures were arrived at, so a sort of anthropological artifact exists to inform future decisions and dialogues.</span></p>
<p><span style="font-weight: 400;">You might be thinking: “but where and when does a decision</span> <span style="font-weight: 400;">get made?” </span></p>
<p><span style="font-weight: 400;">The ARWG’s role was </span><i><span style="font-weight: 400;">not</span></i><span style="font-weight: 400;"> to make a decision. </span></p>
<p><span style="font-weight: 400;">The ARWG’s role was to </span><b>create and sustain the conditions where a dialogue can take place</b><span style="font-weight: 400;">, with as many perspectives on both the problem and solution as can be had within a given period of time, and then to facilitate a discussion around a decision to be made.</span></p>
<p><span style="font-weight: 400;">At this point I’d like to make a semantic distinction between “dialogue” and “discussion” and I’m going to pull from <a href="https://www.kitchensoap.com/2017/03/06/book-suggestion-dialogue-the-art-of-thinking-together/" target="_blank" rel="noopener">the blog post previous to this</a>, where I suggested the book “Dialogue: The Art Of Thinking Together” </span></p>
[blockquote]
<p style="padding-left: 30px;"><i><span style="font-weight: 400;">Dialogue</span></i><span style="font-weight: 400;"> is about exploring the nature of choice. To choose is to select among alternatives. Dialogue is about evoking insight, which is a way of reordering our knowledge– particularly the taken-for-granted assumptions that people bring to the table.</span></p>
[/blockquote]
[blockquote]
<p style="padding-left: 30px;"><i><span style="font-weight: 400;">Discussion</span></i><span style="font-weight: 400;"> is about making a decision. Unlike dialogue, which seeks to open possibilities and see new options, discussion seeks closure and completion. The word </span><i><span style="font-weight: 400;">decide</span></i><span style="font-weight: 400;"> means “to resolve difficulties by cutting through them.” Its roots literally mean to “murder the alternative.”</span></p>
[/blockquote]
<p><span style="font-weight: 400;">The ARWG’s role is to facilitate dialogue first, then discussion. The key idea is to shed as much light via “open and curious minds” on the departure (problem and solution) before then getting into an evaluation phase of options. The dialogue is intended to bring attention to the departure’s details (and assumed necessity) first, and only then can a discussion about the merits of different options take place. </span></p>
<p><span style="font-weight: 400;">In my experience, when an architecture review brings attention to a problem and proposed solutions from multiple perspectives, </span><b>decisions become less controversial</b><span style="font-weight: 400;">. When a decision appears to be obvious to a broad group (“Question: should we (or should we not) take backups of critical databases? Decision: Yes.”) how a decision gets made almost disappears. </span></p>
<p><span style="font-weight: 400;">It’s only when there isn’t universal agreement about a decision (or even if a decision is necessary) that the how, who, and when a decision gets made becomes important to know. The idea of an architecture review is to expose the problem space and proposed departure ideas to dialogue in a broad enough way that confusion about them can be reduced as much as possible. Less confusion about the topic(s) can help reduce uncertainty and/or anxiety about a solution. </span></p>
<p><span style="font-weight: 400;">Now, some pitfalls exist here:</span></p>
<ul>
<li style="font-weight: 400;"><span style="font-weight: 400;">Engineers (both presenting and participating as audience) need to understand the purpose of the architecture review is to </span><i><span style="font-weight: 400;">develop better outcomes</span></i><span style="font-weight: 400;">. That’s it. It’s not to showcase their technical prowess. </span></li>
<li style="font-weight: 400;"><span style="font-weight: 400;">If there is nothing but focus on “but who makes the ultimate decision?” shows up, this is a signal that critique and feedback (again, on both the problem as well as solutions) is not really wanted, and engineers think their departure ideas should get a pass from critique for whatever reason. Asking about </span><i><span style="font-weight: 400;">those</span></i><span style="font-weight: 400;"> reasons is useful. </span></li>
<li style="font-weight: 400;"><span style="font-weight: 400;">Without a strong and continual emphasis on “critique the code, not the coder” this approach can (and will, I can guarantee it) devolve into episodes of defensiveness on multiple fronts. First and foremost, engineers who are looking for feedback on their ideas of a departure need to see it as part of their role as a </span><a href="https://www.kitchensoap.com/2012/10/25/on-being-a-senior-engineer/"><span style="font-weight: 400;">mature engineer</span></a><span style="font-weight: 400;">.</span></li>
</ul>
<p><span style="font-weight: 400;">Sometimes, you might find an engineer who is so incredibly enthusiastic about the solution they’ve developed for a given problem that they begin to focus on the presentation as a “sales pitch” more than expressing a desire to get feedback. The good news is that this is relatively straightforward to detect when it happens. The bad news is that the purpose of the review isn’t universally clear.</span></p>
<p><span style="font-weight: 400;">Other times, you might find a group of engineers responsible for developing a solution seeing themselves as different than a group who is responsible for maintaining the solution. This authority-responsibility “double bind” does reveal itself in even the least siloed organizations. In this case, congratulations! The architecture review was able to bring potential elephants-in-the-room to the table. </span></p>
<p><span style="font-weight: 400;">In almost every case, no matter what the result is of an architecture review, there will always be lingering shades of doubt in people’s minds about taking a departure or not was a good decision. These lingering shades are normal.</span></p>
<p><span style="font-weight: 400;">Welcome to engineering, where the solving of problems boils down to a “</span><i><span style="font-weight: 400;">strategy for causing the best change in a poorly understood or uncertain situation within the available resources.”</span></i></p>
<p><span style="font-weight: 400;">While I cannot state that taking this approach is an airtight way of always making the best decisions when it comes to technical departures, I can say this: without getting multiple perspectives from different groups on a technical departure, such as this approach, you&#8217;re all but guaranteeing suboptimal decisions. </span></p>
<p><span style="font-weight: 400;">So the next time you are so certain that a particular new way of doing something is better and the rest of your organization should get behind your idea, I would tell you this: </span></p>
<p style="padding-left: 30px;"><span style="font-weight: 400;">“Excellent, it sounds like you have a hypothesis! We are gonna do an architecture review. If it&#8217;s as obvious a solution as you think it is, it should be easy for the rest of the org to come to the same conclusion, and that will make implementing and maintaining it that much easier. If it has some downsides that aren&#8217;t apparent, we will at least have a chance to tease those out!”</span></p>
<p style="padding-left: 30px;">
</div>
<footer class="lclite-entry-footer">
<p class="lclite-cats"><a href="https://www.kitchensoap.com/category/architecture/" rel="category tag">Architecture</a>, <a href="https://www.kitchensoap.com/category/complex-systems/" rel="category tag">Complex Systems</a>, <a href="https://www.kitchensoap.com/category/culture/" rel="category tag">Culture</a>, <a href="https://www.kitchensoap.com/category/etsy/" rel="category tag">Etsy</a></p>
</footer>
</article>
<nav class="navigation post-navigation" aria-label="Posts">
<h2 class="screen-reader-text">Post navigation</h2>
<div class="nav-links"><div class="nav-previous"><a href="https://www.kitchensoap.com/2017/03/06/book-suggestion-dialogue-the-art-of-thinking-together/" rel="prev"><span class="lclite-nav-label">Previous post</span> Book Suggestion: &#8220;Dialogue: The Art Of Thinking Together&#8221;</a></div><div class="nav-next"><a href="https://www.kitchensoap.com/2017/09/26/invited-article-in-ieee-software-technical-debt-challenges-and-perspectives/" rel="next"><span class="lclite-nav-label">Next post</span> Invited article in IEEE Software &#8211; Technical Debt: Challenges and Perspectives</a></div></div>
</nav><div id="comments" class="lclite-comments">
<h2 class="lclite-comments-title">
19 comments </h2>
<ol class="lclite-comment-list">
<li id="comment-90905" class="pingback even thread-even depth-1">
<div class="comment-body">
Pingback: <a href="http://vedalgo.com/four-short-links-14-august-2017/" class="url" rel="ugc external nofollow">Four short links: 14 August 2017 | Vedalgo</a> </div>
</li><!-- #comment-## -->
<li id="comment-90906" class="pingback odd alt thread-odd thread-alt depth-1">
<div class="comment-body">
Pingback: <a href="https://www.newspopping.com/2017/08/14/four-short-links-14-august-2017/" class="url" rel="ugc external nofollow">Four short links: 14 August 2017 | NPP find news you can use in politics, business, health, and education | NPP find news you can use in politics, business, health, and education</a> </div>
</li><!-- #comment-## -->
<li id="comment-90907" class="pingback even thread-even depth-1">
<div class="comment-body">
Pingback: <a href="http://www.spectrumitsolutions.net/blog/2017/08/14/4-limited-one-way-links-14-august-2017/" class="url" rel="ugc external nofollow">4 limited one-way links: 14 August 2017 &#124; IBM Spectrum Storage Solutions</a> </div>
</li><!-- #comment-## -->
<li id="comment-90910" class="pingback odd alt thread-odd thread-alt depth-1">
<div class="comment-body">
Pingback: <a href="http://abunchofdata.com/four-short-links-14-august-2017/" class="url" rel="ugc external nofollow">Four short links: 14 August 2017 | A bunch of data</a> </div>
</li><!-- #comment-## -->
<li id="comment-90921" class="pingback even thread-even depth-1">
<div class="comment-body">
Pingback: <a href="http://www.baeldung.com/java-weekly-190" class="url" rel="ugc external nofollow">Java Weekly, Issue 190 | Baeldung</a> </div>
</li><!-- #comment-## -->
<li id="comment-90938" class="pingback odd alt thread-odd thread-alt depth-1">
<div class="comment-body">
Pingback: <a href="https://links4developers.wordpress.com/2017/08/19/weekly-links-77/" class="url" rel="ugc external nofollow">Weekly Links #77 &#8211; Useful Links For Developers</a> </div>
</li><!-- #comment-## -->
<li id="comment-91006" class="pingback even thread-even depth-1">
<div class="comment-body">
Pingback: <a href="http://cephas.net/blog/2017/08/25/links-8-25-2017/" class="url" rel="ugc external nofollow">Links: 8-25-2017 | Aaron Johnson</a> </div>
</li><!-- #comment-## -->
<li id="comment-91111" class="pingback odd alt thread-odd thread-alt depth-1">
<div class="comment-body">
Pingback: <a href="https://rule11.tech/worth-reading-multiple-perspectives-technical-problems-solutions/" class="url" rel="ugc external nofollow">Worth Reading: Multiple perspectives on technical problems and solutions - rule 11 reader</a> </div>
</li><!-- #comment-## -->
<li id="comment-91195" class="pingback even thread-even depth-1">
<div class="comment-body">
Pingback: <a href="http://sreweekly.com/sre-weekly-issue-87/" class="url" rel="ugc external nofollow">SRE Weekly Issue #87 &#8211; SRE WEEKLY</a> </div>
</li><!-- #comment-## -->
<li id="comment-91298" class="pingback odd alt thread-odd thread-alt depth-1">
<div class="comment-body">
Pingback: <a href="http://mamchenkov.net/wordpress/2017/09/09/multiple-perspectives-on-technical-problems-and-solutions/" class="url" rel="ugc external nofollow">Multiple Perspectives On Technical Problems and Solutions | Blog of Leonid Mamchenkov</a> </div>
</li><!-- #comment-## -->
<li id="comment-91351" class="pingback even thread-even depth-1">
<div class="comment-body">
Pingback: <a href="https://blog.gotocon.com/2017/09/14/kitchensoap-com-multiple-perspectives-on-technical-problems-and-solutions/" class="url" rel="ugc external nofollow">[kitchensoap.com] Multiple Perspectives On Technical Problems and Solutions &bull; GOTO Blog</a> </div>
</li><!-- #comment-## -->
<li id="comment-91365" class="pingback odd alt thread-odd thread-alt depth-1">
<div class="comment-body">
Pingback: <a href="https://pizzaengs.wordpress.com/2017/09/15/engineering-arch-reviews/" class="url" rel="ugc external nofollow">Engineering Arch Reviews | pizzaengs</a> </div>
</li><!-- #comment-## -->
<li id="comment-91391" class="pingback even thread-even depth-1">
<div class="comment-body">
Pingback: <a href="http://www.popit.kr/%ec%84%a4%ea%b3%84%eb%9e%80-%eb%ac%b4%ec%97%87%ec%9d%b8%ea%b0%80-ii/" class="url" rel="ugc external nofollow">설계란 무엇인가 II | Popit</a> </div>
</li><!-- #comment-## -->
<li id="comment-91399" class="pingback odd alt thread-odd thread-alt depth-1">
<div class="comment-body">
Pingback: <a href="http://blog.thesoftwarementor.com/2017/09/18/professional-development-9112017-9172017/" class="url" rel="ugc external nofollow">Professional Development 9/11/2017 – 9/17/2017 &#8211; The Software Mentor</a> </div>
</li><!-- #comment-## -->
<li id="comment-91402" class="pingback even thread-even depth-1">
<div class="comment-body">
Pingback: <a href="https://adam.shostack.org/blog/2017/09/threat-modeling-and-architecture/" class="url" rel="ugc external nofollow">Threat Modeling and Architecture &#8211; Adam Shostack &amp; friends</a> </div>
</li><!-- #comment-## -->
<li id="comment-91409" class="pingback odd alt thread-odd thread-alt depth-1">
<div class="comment-body">
Pingback: <a href="http://blog.h7r.pw/2017/09/19/multiple-perspectives-on-technical-problems-and-solutions/" class="url" rel="ugc external nofollow">Multiple Perspectives On Technical Problems and Solutions | h7r worklog</a> </div>
</li><!-- #comment-## -->
<li id="comment-91497" class="pingback even thread-even depth-1">
<div class="comment-body">
Pingback: <a href="http://www.geoffmazeroff.com/2017/09/25/professional-development-2017-week-38/" class="url" rel="ugc external nofollow">Professional Development – 2017 – Week 38 &#8211; Geoff Mazeroff</a> </div>
</li><!-- #comment-## -->
<li id="comment-92412" class="pingback odd alt thread-odd thread-alt depth-1">
<div class="comment-body">
Pingback: <a href="http://www.anexperimentinscotch.com/2017/11/20/placeholder/" class="url" rel="ugc external nofollow">placeholder &#8211; An Experiment In Scotch</a> </div>
</li><!-- #comment-## -->
<li id="comment-94073" class="pingback even thread-even depth-1">
<div class="comment-body">
Pingback: <a href="http://exploitzero.com/news/2018/04/15/threat-model-thursday-talking-dialogue-and-review/" class="url" rel="ugc external nofollow">Threat Model Thursday: Talking, Dialogue and Review &#8211; ExploitZero</a> </div>
</li><!-- #comment-## -->
</ol>
<p class="lclite-no-comments">Comments are closed.</p>
</div>
</div>
</main>
<footer class="lclite-site-footer">
<div class="lclite-footer-inner">
<span class="lclite-footer-title">Kitchen Soap</span>
<p class="lclite-colophon">
&copy; 2026 Kitchen Soap </p>
</div>
</footer>
<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/loupely-canvas-lite/*","/*\\?(.+)"]}},{"not":{"selector_matches":"a[rel~=\"nofollow\"]"}},{"not":{"selector_matches":".no-prefetch, .no-prefetch a"}}]},"eagerness":"conservative"}]}
</script>
<script id="wp-emoji-settings" type="application/json">
{"baseUrl":"https://s.w.org/images/core/emoji/17.0.2/72x72/","ext":".png","svgUrl":"https://s.w.org/images/core/emoji/17.0.2/svg/","svgExt":".svg","source":{"concatemoji":"https://www.kitchensoap.com/wp-includes/js/wp-emoji-release.min.js?ver=7.0.4"}}
</script>
<script type="module">
/*! This file is auto-generated */
var e="script#wp-emoji-settings",t=document.querySelector(e);if(!(t instanceof HTMLScriptElement))throw new Error("Element missing: "+e);const r=JSON.parse(t.text),s=(window._wpemojiSettings=r,"wpEmojiSettingsSupports"),o=["flag","emoji"];function i(e){try{var t={supportTests:e,timestamp:(new Date).valueOf()};sessionStorage.setItem(s,JSON.stringify(t))}catch(e){}}function c(e,t,n){e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(t,0,0);t=new Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data);e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(n,0,0);const r=new Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data);return t.every((e,t)=>e===r[t])}function p(e,t){e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(t,0,0);var n=e.getImageData(16,16,1,1);for(let e=0;e<n.data.length;e++)if(0!==n.data[e])return!1;return!0}function u(e,t,n,r){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!r(e,"\ud83e\u1fac8")}return!1}function f(e,t,n,r){let a;const s=(a="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?new OffscreenCanvas(300,150):document.createElement("canvas")).getContext("2d",{willReadFrequently:!0}),o=(s.textBaseline="top",s.font="600 32px Arial",{});return e.forEach(e=>{o[e]=t(s,e,n,r)}),o}function a(e){var t=document.createElement("script");t.src=e,t.defer=!0,document.head.appendChild(t)}r.supports={everything:!0,everythingExceptFlag:!0},new Promise(t=>{let n=function(){try{var e=JSON.parse(sessionStorage.getItem(s));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("+f.toString()+"("+[JSON.stringify(o),u.toString(),c.toString(),p.toString()].join(",")+"));",r=new Blob([e],{type:"text/javascript"});const a=new Worker(URL.createObjectURL(r),{name:"wpTestEmojiSupports"});return void(a.onmessage=e=>{i(n=e.data),a.terminate(),t(n)})}catch(e){}i(n=f(o,u,c,p))}t(n)}).then(e=>{for(const n in e)r.supports[n]=e[n],r.supports.everything=r.supports.everything&&r.supports[n],"flag"!==n&&(r.supports.everythingExceptFlag=r.supports.everythingExceptFlag&&r.supports[n]);var t;r.supports.everythingExceptFlag=r.supports.everythingExceptFlag&&!r.supports.flag,r.supports.everything||((t=r.source||{}).concatemoji?a(t.concatemoji):t.wpemoji&&t.twemoji&&(a(t.twemoji),a(t.wpemoji)))});
//# sourceURL=https://www.kitchensoap.com/wp-includes/js/wp-emoji-loader.min.js
</script>
</body>
</html>