Files
nexus/sreweekly/articles/67/02-things-i-learned-managing-site-reliability-for-some-of-the-world-s-bus.html
2026-09-12 17:23:01 +08:00

2052 lines
194 KiB
HTML
Raw 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">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="profile" href="http://gmpg.org/xfn/11">
<title>Things I Learned Managing Site Reliability for Some of the World&#8217;s Busiest Gambling Sites &#8211; zwischenzugs</title>
<meta name='robots' content='max-image-preview:large' />
<link rel='dns-prefetch' href='//s1.wp.com' />
<link rel='dns-prefetch' href='//s2.wp.com' />
<link rel='dns-prefetch' href='//widgets.wp.com' />
<link rel='dns-prefetch' href='//s0.wp.com' />
<link rel='dns-prefetch' href='//af.pubmine.com' />
<link rel="alternate" type="application/rss+xml" title="zwischenzugs &raquo; Feed" href="https://zwischenzugs.wordpress.com/feed/" />
<link rel="alternate" type="application/rss+xml" title="zwischenzugs &raquo; Comments Feed" href="https://zwischenzugs.wordpress.com/comments/feed/" />
<link rel="alternate" type="application/rss+xml" title="zwischenzugs &raquo; Things I Learned Managing Site Reliability for Some of the World&#8217;s Busiest Gambling&nbsp;Sites Comments Feed" href="https://zwischenzugs.wordpress.com/2017/04/04/things-i-learned-managing-site-reliability-for-some-of-the-worlds-busiest-gambling-sites/feed/" />
<script type="text/javascript">
/* <![CDATA[ */
function addLoadEvent(func) {
var oldonload = window.onload;
if (typeof window.onload != 'function') {
window.onload = func;
} else {
window.onload = function () {
oldonload();
func();
}
}
}
/* ]]> */
</script>
<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>
<link crossorigin='anonymous' rel='stylesheet' id='all-css-2-1' href='/_static/??-eJx9jFEKAjEMRC9kjfrh4od4ltKGpdu0CSaleHtbEQQRCQw8ZvKgiwtcDatBaU6orakq9BRXNAVso+Wc0JHvYFiEvKGC2oNwH1R38FuwoYkP+c1QmGfERuP5jlMSnbDaF/1TUsr4Eb9ozm/lelyWw2Xc6bw9AWlRTZ8=&cssminify=yes' type='text/css' media='all' />
<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;word-break:normal!important}.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],[style*=";border-color"],[style*="; border-color"]){border-style:solid}html :where([style^=border-top-color],[style*=";border-top-color"],[style*="; border-top-color"]){border-top-style:solid}html :where([style^=border-right-color],[style*=";border-right-color"],[style*="; border-right-color"]){border-right-style:solid}html :where([style^=border-bottom-color],[style*=";border-bottom-color"],[style*="; border-bottom-color"]){border-bottom-style:solid}html :where([style^=border-left-color],[style*=";border-left-color"],[style*="; border-left-color"]){border-left-style:solid}html :where([style^=border-width],[style*=";border-width"],[style*="; border-width"]){border-style:solid}html :where([style^=border-top-width],[style*=";border-top-width"],[style*="; border-top-width"]){border-top-style:solid}html :where([style^=border-right-width],[style*=";border-right-width"],[style*="; border-right-width"]){border-right-style:solid}html :where([style^=border-bottom-width],[style*=";border-bottom-width"],[style*="; border-bottom-width"]){border-bottom-style:solid}html :where([style^=border-left-width],[style*=";border-left-width"],[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-content/plugins/gutenberg-core/v23.9.1/build/styles/block-library/common.min.css */
</style>
<style id="wp-block-library-inline-css-extra">
.has-text-align-justify {
text-align:justify;
}
.has-text-align-justify{text-align:justify;}
/*# sourceURL=wp-block-library-inline-css */
</style>
<style id="classic-theme-styles-inline-css">
.wp-block-button__link{background-color:#32373c;border-radius:9999px;box-shadow:none;color:#fff;font-size:1.125em;padding:calc(.667em + 2px) calc(1.333em + 2px);text-decoration:none}.wp-block-file__button{background:#32373c;color:#fff}.wp-block-accordion-heading{margin:0}.wp-block-accordion-heading__toggle{background-color:inherit!important;color:inherit!important}.wp-block-accordion-heading__toggle:not(:focus-visible){outline:none}.wp-block-accordion-heading__toggle:focus,.wp-block-accordion-heading__toggle:hover{background-color:inherit!important;border:none;box-shadow:none;color:inherit;padding:var(--wp--preset--spacing--20,1em) 0;text-decoration:none}.wp-block-accordion-heading__toggle:focus-visible{outline:auto;outline-offset:0}.wp-block-tab:not(.has-text-color){color:inherit!important}.wp-block-tab:not(.has-background){background-color:inherit!important}.wp-block-tab:focus,.wp-block-tab:hover{text-decoration:none}.wp-block-tab:focus-visible{outline:auto;outline-offset:0}
/*# sourceURL=/wp-content/plugins/gutenberg-core/v23.9.1/build/styles/block-library/classic.min.css */
</style>
<style id="coblocks-inline-format-inline-css">
.uppercase{text-transform:uppercase}
/*# sourceURL=coblocks-inline-format-inline-css */
</style>
<link crossorigin='anonymous' rel='stylesheet' id='all-css-12-1' href='/_static/??/wp-content/mu-plugins/core-compat/wp-mediaelement.css,/wp-content/mu-plugins/wpcom-bbpress-premium-themes.css?m=1432920480j&cssminify=yes' type='text/css' media='all' />
<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: #fff;--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--color--medium-blue: #0087be;--wp--preset--color--bright-blue: #00aadc;--wp--preset--color--dark-gray: #4d4d4b;--wp--preset--color--light-gray: #b3b3b1;--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--albert-sans: 'Albert Sans', sans-serif;--wp--preset--font-family--alegreya: Alegreya, serif;--wp--preset--font-family--arvo: Arvo, serif;--wp--preset--font-family--bodoni-moda: 'Bodoni Moda', serif;--wp--preset--font-family--bricolage-grotesque: 'Bricolage Grotesque', sans-serif;--wp--preset--font-family--cabin: Cabin, sans-serif;--wp--preset--font-family--chivo: Chivo, sans-serif;--wp--preset--font-family--commissioner: Commissioner, sans-serif;--wp--preset--font-family--cormorant: Cormorant, serif;--wp--preset--font-family--courier-prime: 'Courier Prime', monospace;--wp--preset--font-family--crimson-pro: 'Crimson Pro', serif;--wp--preset--font-family--dm-mono: 'DM Mono', monospace;--wp--preset--font-family--dm-sans: 'DM Sans', sans-serif;--wp--preset--font-family--dm-serif-display: 'DM Serif Display', serif;--wp--preset--font-family--domine: Domine, serif;--wp--preset--font-family--eb-garamond: 'EB Garamond', serif;--wp--preset--font-family--epilogue: Epilogue, sans-serif;--wp--preset--font-family--fahkwang: Fahkwang, sans-serif;--wp--preset--font-family--figtree: Figtree, sans-serif;--wp--preset--font-family--fira-sans: 'Fira Sans', sans-serif;--wp--preset--font-family--fjalla-one: 'Fjalla One', sans-serif;--wp--preset--font-family--fraunces: Fraunces, serif;--wp--preset--font-family--gabarito: Gabarito, system-ui;--wp--preset--font-family--ibm-plex-mono: 'IBM Plex Mono', monospace;--wp--preset--font-family--ibm-plex-sans: 'IBM Plex Sans', sans-serif;--wp--preset--font-family--ibarra-real-nova: 'Ibarra Real Nova', serif;--wp--preset--font-family--instrument-serif: 'Instrument Serif', serif;--wp--preset--font-family--inter: Inter, sans-serif;--wp--preset--font-family--josefin-sans: 'Josefin Sans', sans-serif;--wp--preset--font-family--jost: Jost, sans-serif;--wp--preset--font-family--libre-baskerville: 'Libre Baskerville', serif;--wp--preset--font-family--libre-franklin: 'Libre Franklin', sans-serif;--wp--preset--font-family--literata: Literata, serif;--wp--preset--font-family--lora: Lora, serif;--wp--preset--font-family--merriweather: Merriweather, serif;--wp--preset--font-family--montserrat: Montserrat, sans-serif;--wp--preset--font-family--newsreader: Newsreader, serif;--wp--preset--font-family--noto-sans-mono: 'Noto Sans Mono', sans-serif;--wp--preset--font-family--nunito: Nunito, sans-serif;--wp--preset--font-family--open-sans: 'Open Sans', sans-serif;--wp--preset--font-family--overpass: Overpass, sans-serif;--wp--preset--font-family--pt-serif: 'PT Serif', serif;--wp--preset--font-family--petrona: Petrona, serif;--wp--preset--font-family--piazzolla: Piazzolla, serif;--wp--preset--font-family--playfair-display: 'Playfair Display', serif;--wp--preset--font-family--plus-jakarta-sans: 'Plus Jakarta Sans', sans-serif;--wp--preset--font-family--poppins: Poppins, sans-serif;--wp--preset--font-family--raleway: Raleway, sans-serif;--wp--preset--font-family--roboto: Roboto, sans-serif;--wp--preset--font-family--roboto-slab: 'Roboto Slab', serif;--wp--preset--font-family--rubik: Rubik, sans-serif;--wp--preset--font-family--rufina: Rufina, serif;--wp--preset--font-family--sora: Sora, sans-serif;--wp--preset--font-family--source-sans-3: 'Source Sans 3', sans-serif;--wp--preset--font-family--source-serif-4: 'Source Serif 4', serif;--wp--preset--font-family--space-mono: 'Space Mono', monospace;--wp--preset--font-family--syne: Syne, sans-serif;--wp--preset--font-family--texturina: Texturina, serif;--wp--preset--font-family--urbanist: Urbanist, sans-serif;--wp--preset--font-family--work-sans: 'Work Sans', 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);}.wp-block-button{--wp--preset--dimension--25: 25%;--wp--preset--dimension--50: 50%;--wp--preset--dimension--75: 75%;--wp--preset--dimension--100: 100%;}: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-medium-blue-color{color: var(--wp--preset--color--medium-blue) !important;}.has-bright-blue-color{color: var(--wp--preset--color--bright-blue) !important;}.has-dark-gray-color{color: var(--wp--preset--color--dark-gray) !important;}.has-light-gray-color{color: var(--wp--preset--color--light-gray) !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-medium-blue-background-color{background-color: var(--wp--preset--color--medium-blue) !important;}.has-bright-blue-background-color{background-color: var(--wp--preset--color--bright-blue) !important;}.has-dark-gray-background-color{background-color: var(--wp--preset--color--dark-gray) !important;}.has-light-gray-background-color{background-color: var(--wp--preset--color--light-gray) !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-medium-blue-border-color{border-color: var(--wp--preset--color--medium-blue) !important;}.has-bright-blue-border-color{border-color: var(--wp--preset--color--bright-blue) !important;}.has-dark-gray-border-color{border-color: var(--wp--preset--color--dark-gray) !important;}.has-light-gray-border-color{border-color: var(--wp--preset--color--light-gray) !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-albert-sans-font-family{font-family: var(--wp--preset--font-family--albert-sans) !important;}.has-alegreya-font-family{font-family: var(--wp--preset--font-family--alegreya) !important;}.has-arvo-font-family{font-family: var(--wp--preset--font-family--arvo) !important;}.has-bodoni-moda-font-family{font-family: var(--wp--preset--font-family--bodoni-moda) !important;}.has-bricolage-grotesque-font-family{font-family: var(--wp--preset--font-family--bricolage-grotesque) !important;}.has-cabin-font-family{font-family: var(--wp--preset--font-family--cabin) !important;}.has-chivo-font-family{font-family: var(--wp--preset--font-family--chivo) !important;}.has-commissioner-font-family{font-family: var(--wp--preset--font-family--commissioner) !important;}.has-cormorant-font-family{font-family: var(--wp--preset--font-family--cormorant) !important;}.has-courier-prime-font-family{font-family: var(--wp--preset--font-family--courier-prime) !important;}.has-crimson-pro-font-family{font-family: var(--wp--preset--font-family--crimson-pro) !important;}.has-dm-mono-font-family{font-family: var(--wp--preset--font-family--dm-mono) !important;}.has-dm-sans-font-family{font-family: var(--wp--preset--font-family--dm-sans) !important;}.has-dm-serif-display-font-family{font-family: var(--wp--preset--font-family--dm-serif-display) !important;}.has-domine-font-family{font-family: var(--wp--preset--font-family--domine) !important;}.has-eb-garamond-font-family{font-family: var(--wp--preset--font-family--eb-garamond) !important;}.has-epilogue-font-family{font-family: var(--wp--preset--font-family--epilogue) !important;}.has-fahkwang-font-family{font-family: var(--wp--preset--font-family--fahkwang) !important;}.has-figtree-font-family{font-family: var(--wp--preset--font-family--figtree) !important;}.has-fira-sans-font-family{font-family: var(--wp--preset--font-family--fira-sans) !important;}.has-fjalla-one-font-family{font-family: var(--wp--preset--font-family--fjalla-one) !important;}.has-fraunces-font-family{font-family: var(--wp--preset--font-family--fraunces) !important;}.has-gabarito-font-family{font-family: var(--wp--preset--font-family--gabarito) !important;}.has-ibm-plex-mono-font-family{font-family: var(--wp--preset--font-family--ibm-plex-mono) !important;}.has-ibm-plex-sans-font-family{font-family: var(--wp--preset--font-family--ibm-plex-sans) !important;}.has-ibarra-real-nova-font-family{font-family: var(--wp--preset--font-family--ibarra-real-nova) !important;}.has-instrument-serif-font-family{font-family: var(--wp--preset--font-family--instrument-serif) !important;}.has-inter-font-family{font-family: var(--wp--preset--font-family--inter) !important;}.has-josefin-sans-font-family{font-family: var(--wp--preset--font-family--josefin-sans) !important;}.has-jost-font-family{font-family: var(--wp--preset--font-family--jost) !important;}.has-libre-baskerville-font-family{font-family: var(--wp--preset--font-family--libre-baskerville) !important;}.has-libre-franklin-font-family{font-family: var(--wp--preset--font-family--libre-franklin) !important;}.has-literata-font-family{font-family: var(--wp--preset--font-family--literata) !important;}.has-lora-font-family{font-family: var(--wp--preset--font-family--lora) !important;}.has-merriweather-font-family{font-family: var(--wp--preset--font-family--merriweather) !important;}.has-montserrat-font-family{font-family: var(--wp--preset--font-family--montserrat) !important;}.has-newsreader-font-family{font-family: var(--wp--preset--font-family--newsreader) !important;}.has-noto-sans-mono-font-family{font-family: var(--wp--preset--font-family--noto-sans-mono) !important;}.has-nunito-font-family{font-family: var(--wp--preset--font-family--nunito) !important;}.has-open-sans-font-family{font-family: var(--wp--preset--font-family--open-sans) !important;}.has-overpass-font-family{font-family: var(--wp--preset--font-family--overpass) !important;}.has-pt-serif-font-family{font-family: var(--wp--preset--font-family--pt-serif) !important;}.has-petrona-font-family{font-family: var(--wp--preset--font-family--petrona) !important;}.has-piazzolla-font-family{font-family: var(--wp--preset--font-family--piazzolla) !important;}.has-playfair-display-font-family{font-family: var(--wp--preset--font-family--playfair-display) !important;}.has-plus-jakarta-sans-font-family{font-family: var(--wp--preset--font-family--plus-jakarta-sans) !important;}.has-poppins-font-family{font-family: var(--wp--preset--font-family--poppins) !important;}.has-raleway-font-family{font-family: var(--wp--preset--font-family--raleway) !important;}.has-roboto-font-family{font-family: var(--wp--preset--font-family--roboto) !important;}.has-roboto-slab-font-family{font-family: var(--wp--preset--font-family--roboto-slab) !important;}.has-rubik-font-family{font-family: var(--wp--preset--font-family--rubik) !important;}.has-rufina-font-family{font-family: var(--wp--preset--font-family--rufina) !important;}.has-sora-font-family{font-family: var(--wp--preset--font-family--sora) !important;}.has-source-sans-3-font-family{font-family: var(--wp--preset--font-family--source-sans-3) !important;}.has-source-serif-4-font-family{font-family: var(--wp--preset--font-family--source-serif-4) !important;}.has-space-mono-font-family{font-family: var(--wp--preset--font-family--space-mono) !important;}.has-syne-font-family{font-family: var(--wp--preset--font-family--syne) !important;}.has-texturina-font-family{font-family: var(--wp--preset--font-family--texturina) !important;}.has-urbanist-font-family{font-family: var(--wp--preset--font-family--urbanist) !important;}.has-work-sans-font-family{font-family: var(--wp--preset--font-family--work-sans) !important;}
/*# sourceURL=global-styles-inline-css */
</style>
<link crossorigin='anonymous' rel='stylesheet' id='all-css-14-1' href='/wp-content/mu-plugins/jetpack-mu-wpcom-plugin/moon/jetpack_vendor/automattic/jetpack-mu-wpcom/src/build/verbum-comments/verbum-comments.css?m=1785895867i&cssminify=yes' type='text/css' media='all' />
<link rel='stylesheet' id='verbum-gutenberg-css-css' href='https://widgets.wp.com/verbum-block-editor/block-editor.css?ver=1771405207' media='all' />
<link crossorigin='anonymous' rel='stylesheet' id='all-css-16-1' href='/_static/??-eJydkNEKwjAMRX/IGh0D7YP4KbLV2GVr09J2DP/ebAgOFB/2Eu59OPcmgSkqE7ggF/Cjim60xBl6LLExw9uDD4HhRmzAImMiIfJvuTc572AVWjr0mCGOLRDfMaIMLkq8o9xhUhXk8nS4BRQEWhfMsKl2PmepVlM0wX9FrN6RUGqsSLt0fuw/yGJQslxTSJ63NurhGkozevWX4+lcaX3Qte5fvXGUcQ==&cssminify=yes' type='text/css' media='all' />
<style id="independent-publisher-2-style-inline-css">
.published-on, .post-permalink, .site-posted-on, .cat-links, .byline { clip: rect(1px, 1px, 1px, 1px); height: 1px; position: absolute; overflow: hidden; width: 1px; }
/*# sourceURL=independent-publisher-2-style-inline-css */
</style>
<link crossorigin='anonymous' rel='stylesheet' id='print-css-17-1' href='/wp-content/mu-plugins/global-print/global-print.css?m=1465851035i&cssminify=yes' type='text/css' media='print' />
<style id="jetpack-global-styles-frontend-style-inline-css">
:root { --font-headings: unset; --font-base: unset; --font-headings-default: -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif; --font-base-default: -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;}
/*# sourceURL=jetpack-global-styles-frontend-style-inline-css */
</style>
<link crossorigin='anonymous' rel='stylesheet' id='all-css-20-1' href='/_static/??-eJyNjcEKAjEMRH/ImhVlqwfxU6TbhrZrmhTTIv69u+JFvHgZ5sHwBh7VeOGG3KB0U6nHzAoztur87cNQRNYInVBBk7tjcCE83zVz3HrVDfxvumb2MPVMAVR8dmRIougX/DhbwrK8pwNEksnROriU884e9+PJDnaYXxwFS20=&cssminify=yes' type='text/css' media='all' />
<script id="jetpack_related-posts-js-extra">
var related_posts_js_options = {"post_heading":"h4"};
//# sourceURL=jetpack_related-posts-js-extra
</script>
<script id="wpcom-actionbar-placeholder-js-extra">
var actionbardata = {"siteID":"20870870","postID":"2694","siteURL":"https://zwischenzugs.wordpress.com","xhrURL":"https://zwischenzugs.wordpress.com/wp-admin/admin-ajax.php","nonce":"1fb13c386d","isLoggedIn":"","statusMessage":"","subsEmailDefault":"instantly","proxyScriptUrl":"https://s0.wp.com/wp-content/js/wpcom-proxy-request.js?m=1513050504i&amp;ver=20211021","shortlink":"https://wp.me/p1pzsW-Hs","i18n":{"followedText":"New posts from this site will now appear in your \u003Ca href=\"https://wordpress.com/reader\"\u003EReader\u003C/a\u003E","foldBar":"Collapse this bar","unfoldBar":"Expand this bar","shortLinkCopied":"Shortlink copied to clipboard."}};
//# sourceURL=wpcom-actionbar-placeholder-js-extra
</script>
<script id="jetpack-mu-wpcom-settings-js-before">
var JETPACK_MU_WPCOM_SETTINGS = {"assetsUrl":"https://s1.wp.com/wp-content/mu-plugins/jetpack-mu-wpcom-plugin/moon/jetpack_vendor/automattic/jetpack-mu-wpcom/src/build/"};
//# sourceURL=jetpack-mu-wpcom-settings-js-before
</script>
<script crossorigin='anonymous' type='text/javascript' src='/_static/??-eJxdjU0KwjAQhS/kdGg3jQvxKJImoSQmM0MmtfX2tiCirh4f7w9XAcfUAjUsC0he5kiKKTSx7v5mLMyEt0gOpyVmjzVk24IHYW36S12J1CU94ddw2jO5gVTenv/elHn+3K5cvfUKLlvVoEfRFcHHcAgQE8xe6j5xLZd+NGY8GzP06QXK5EhL'></script>
<script id="rlt-proxy-js-after">
rltInitialize( {"token":null,"iframeOrigins":["https:\/\/widgets.wp.com"]} );
//# sourceURL=rlt-proxy-js-after
</script>
<link rel="EditURI" type="application/rsd+xml" title="RSD" href="https://zwischenzugs.wordpress.com/xmlrpc.php?rsd" />
<meta name="generator" content="WordPress.com" />
<link rel="canonical" href="https://zwischenzugs.wordpress.com/2017/04/04/things-i-learned-managing-site-reliability-for-some-of-the-worlds-busiest-gambling-sites/" />
<link rel='shortlink' href='https://wp.me/p1pzsW-Hs' />
<link rel="alternate" type="application/json+oembed" href="https://public-api.wordpress.com/oembed/?format=json&amp;url=https%3A%2F%2Fzwischenzugs.wordpress.com%2F2017%2F04%2F04%2Fthings-i-learned-managing-site-reliability-for-some-of-the-worlds-busiest-gambling-sites%2F&amp;for=wpcom-auto-discovery" /><link rel="alternate" type="application/xml+oembed" href="https://public-api.wordpress.com/oembed/?format=xml&amp;url=https%3A%2F%2Fzwischenzugs.wordpress.com%2F2017%2F04%2F04%2Fthings-i-learned-managing-site-reliability-for-some-of-the-worlds-busiest-gambling-sites%2F&amp;for=wpcom-auto-discovery" />
<!-- Jetpack Open Graph Tags -->
<meta property="og:type" content="article" />
<meta property="og:title" content="Things I Learned Managing Site Reliability for Some of the World&#8217;s Busiest Gambling Sites" />
<meta property="og:url" content="https://zwischenzugs.wordpress.com/2017/04/04/things-i-learned-managing-site-reliability-for-some-of-the-worlds-busiest-gambling-sites/" />
<meta property="og:description" content="tl;dr For several years I managed the 3rd line site reliability operation for many of the world&#8217;s busiest gambling sites, working for a little-known company that built and ran the core backen…" />
<meta property="article:published_time" content="2017-04-04T08:28:47+00:00" />
<meta property="article:modified_time" content="2018-03-18T11:26:31+00:00" />
<meta property="og:site_name" content="zwischenzugs" />
<meta property="og:image" content="https://zwischenzugs.wordpress.com/wp-content/uploads/2017/04/pile_of_papers.jpg" />
<meta property="og:image:width" content="612" />
<meta property="og:image:height" content="640" />
<meta property="og:image:alt" content="pile_of_papers" />
<meta property="og:locale" content="en_US" />
<meta property="fb:app_id" content="249643311490" />
<meta property="article:publisher" content="https://www.facebook.com/WordPresscom" />
<meta name="twitter:creator" content="@ianmiell" />
<meta name="twitter:site" content="@ianmiell" />
<meta name="twitter:text:title" content="Things I Learned Managing Site Reliability for Some of the World&#8217;s Busiest Gambling&nbsp;Sites" />
<meta name="twitter:image" content="https://zwischenzugs.wordpress.com/wp-content/uploads/2017/04/pile_of_papers.jpg?w=640" />
<meta name="twitter:image:alt" content="pile_of_papers" />
<meta name="twitter:card" content="summary_large_image" />
<!-- End Jetpack Open Graph Tags -->
<link rel="shortcut icon" type="image/x-icon" href="https://s1.wp.com/i/favicon.ico?m=1713425267i" sizes="16x16 24x24 32x32 48x48" />
<link rel="icon" type="image/x-icon" href="https://s1.wp.com/i/favicon.ico?m=1713425267i" sizes="16x16 24x24 32x32 48x48" />
<link rel="apple-touch-icon" href="https://s2.wp.com/i/webclip.png?m=1713868326i" />
<link rel='openid.server' href='https://zwischenzugs.wordpress.com/?openidserver=1' />
<link rel='openid.delegate' href='https://zwischenzugs.wordpress.com/' />
<link rel="search" type="application/opensearchdescription+xml" href="https://zwischenzugs.wordpress.com/osd.xml" title="zwischenzugs" />
<link rel="search" type="application/opensearchdescription+xml" href="https://s1.wp.com/opensearch.xml" title="WordPress.com" />
<link rel="pingback" href="https://zwischenzugs.wordpress.com/xmlrpc.php"> <style type="text/css">
.recentcomments a {
display: inline !important;
padding: 0 !important;
margin: 0 !important;
}
table.recentcommentsavatartop img.avatar, table.recentcommentsavatarend img.avatar {
border: 0px;
margin: 0;
}
table.recentcommentsavatartop a, table.recentcommentsavatarend a {
border: 0px !important;
background-color: transparent !important;
}
td.recentcommentsavatarend, td.recentcommentsavatartop {
padding: 0px 0px 1px 0px;
margin: 0px;
}
td.recentcommentstextend {
border: none !important;
padding: 0px 0px 2px 10px;
}
.rtl td.recentcommentstextend {
padding: 0px 10px 2px 0px;
}
td.recentcommentstexttop {
border: none;
padding: 0px 0px 0px 10px;
}
.rtl td.recentcommentstexttop {
padding: 0px 10px 0px 0px;
}
</style>
<meta name="description" content="tl;dr For several years I managed the 3rd line site reliability operation for many of the world&#039;s busiest gambling sites, working for a little-known company that built and ran the core backend online software for several businesses that each at peak could take tens of millions of pounds in revenue per hour. I left a&hellip;" />
<script>
var wa_client = {}; wa_client.cmd = []; wa_client.config = { 'blog_id': 20870870, 'blog_language': 'en', 'is_wordads': false, 'hosting_type': 0, 'afp_account_id': null, 'afp_host_id': 5038568878849053, 'theme': 'pub/independent-publisher-2', '_': { 'title': 'Advertisement', 'privacy_settings': 'Privacy Settings' }, 'formats': [ 'inline', 'belowpost', 'bottom_sticky', 'sidebar_sticky_right', 'gutenberg_rectangle', 'gutenberg_leaderboard', 'gutenberg_mobile_leaderboard', 'gutenberg_skyscraper' ] };
</script>
<script type="text/javascript">
window.doNotSellCallback = function() {
var linkElements = [
'a[href="https://wordpress.com/?ref=footer_blog"]',
'a[href="https://wordpress.com/?ref=footer_website"]',
'a[href="https://wordpress.com/?ref=vertical_footer"]',
'a[href^="https://wordpress.com/?ref=footer_segment_"]',
].join(',');
var dnsLink = document.createElement( 'a' );
dnsLink.href = 'https://wordpress.com/advertising-program-optout/';
dnsLink.classList.add( 'do-not-sell-link' );
dnsLink.rel = 'nofollow';
dnsLink.style.marginLeft = '0.5em';
dnsLink.textContent = 'Do Not Sell or Share My Personal Information';
var creditLinks = document.querySelectorAll( linkElements );
if ( 0 === creditLinks.length ) {
return false;
}
Array.prototype.forEach.call( creditLinks, function( el ) {
el.insertAdjacentElement( 'afterend', dnsLink );
});
return true;
};
</script>
<!-- Jetpack Google Analytics -->
<script type='text/javascript'>
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-96483456-3']);
_gaq.push(['_trackPageview']);
(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' === document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();
</script>
<!-- End Jetpack Google Analytics -->
<script type="text/javascript">
window.google_analytics_uacct = "UA-52447-2";
</script>
<script type="text/javascript">
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-52447-2']);
_gaq.push(['_gat._anonymizeIp']);
_gaq.push(['_setDomainName', 'wordpress.com']);
_gaq.push(['_initData']);
_gaq.push(['_trackPageview']);
(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
(document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(ga);
})();
</script>
<link crossorigin='anonymous' rel='stylesheet' id='all-css-0-3' href='/_static/??-eJydzMEKwkAMBNAfcg1tEXsRP0VqGsq2u0losiz9exVaz+JtZhgeVA0o7MQOuQRNZYpsMJPrgMveIYswPCIjPJPgYmA1Kq1nNDvB70KWsSQywGGVYpS+p2P4F6xxnMgNXDSo2DuZb4k+3D3fmmt/aduua/r5Bc6+Wdc=&cssminify=yes' type='text/css' media='all' />
</head>
<body class="wp-singular post-template-default single single-post postid-2694 single-format-standard wp-embed-responsive wp-theme-pubindependent-publisher-2 customizer-styles-applied has-sidebar jetpack-reblog-enabled date-hidden categories-hidden author-hidden">
<div id="page" class="hfeed site">
<a class="skip-link screen-reader-text" href="#content">Skip to content</a>
<div id="hero-header" class="site-hero-section">
<header id="masthead" class="site-header" role="banner">
<div class="inner">
<div class="site-branding">
<a class="site-logo-link" href="https://zwischenzugs.wordpress.com/">
<img referrerpolicy="no-referrer" alt='Unknown&#039;s avatar' src='https://1.gravatar.com/avatar/db8ac7dbddad89c65507a57fe711d467a0b3db585ad30b46f0c8244cf9c4927c?s=80&#038;d=identicon&#038;r=G' srcset='https://1.gravatar.com/avatar/db8ac7dbddad89c65507a57fe711d467a0b3db585ad30b46f0c8244cf9c4927c?s=80&#038;d=identicon&#038;r=G 1x, https://1.gravatar.com/avatar/db8ac7dbddad89c65507a57fe711d467a0b3db585ad30b46f0c8244cf9c4927c?s=120&#038;d=identicon&#038;r=G 1.5x, https://1.gravatar.com/avatar/db8ac7dbddad89c65507a57fe711d467a0b3db585ad30b46f0c8244cf9c4927c?s=160&#038;d=identicon&#038;r=G 2x, https://1.gravatar.com/avatar/db8ac7dbddad89c65507a57fe711d467a0b3db585ad30b46f0c8244cf9c4927c?s=240&#038;d=identicon&#038;r=G 3x, https://1.gravatar.com/avatar/db8ac7dbddad89c65507a57fe711d467a0b3db585ad30b46f0c8244cf9c4927c?s=320&#038;d=identicon&#038;r=G 4x' class='avatar avatar-80 site-logo-image' height='80' width='80' loading='eager' decoding='async' /> </a><!-- .site-logo-link -->
<p class="site-title"><a href="https://zwischenzugs.wordpress.com/" rel="home">zwischenzugs</a></p>
</div><!-- .site-branding -->
</div><!-- .inner -->
</header><!-- #masthead -->
</div>
<div id="content-wrapper" class="content-wrapper">
<div id="content" class="site-content">
<div id="primary" class="content-area">
<main id="main" class="site-main" role="main">
<article id="post-2694" class="post-2694 post type-post status-publish format-standard hentry category-uncategorized">
<header class="entry-header">
<h1 class="entry-title">Things I Learned Managing Site Reliability for Some of the World&#8217;s Busiest Gambling&nbsp;Sites</h1> </header><!-- .entry-header --> <div class="entry-meta">
<span class="byline">
<a href="https://zwischenzugs.wordpress.com/author/zwischenzugs/" rel="author">zwischenzugs</a> </span>
<span class="cat-links">
<a href="https://zwischenzugs.wordpress.com/category/uncategorized/" rel="category tag">Uncategorized</a> </span><!-- .cat-links -->
<span class="published-on">
<time class="entry-date published" datetime="2017-04-04T08:28:47+01:00">April 4, 2017</time><time class="updated" datetime="2018-03-18T11:26:31+00:00">March 18, 2018</time> </span>
<span class="word-count">13 Minutes</span> </div><!-- .entry-meta -->
<div class="entry-content">
<h2><b>tl;dr</b></h2>
<p>For several years I managed the 3rd line site reliability operation for many of the world&#8217;s busiest gambling sites, working for a little-known company that built and ran the core backend online software for several businesses that each at peak could take tens of millions of pounds in revenue per hour. I left a couple of years ago, so it&#8217;s a good time to reflect on what I learned in the process.</p>
<p>In many ways, what we did was similar to what&#8217;s now called an SRE function (I&#8217;m going to call us SREs, but the acronym didn&#8217;t exist at the time). We were on call, had to respond to incidents, made recommendations for re-engineering, provided robust feedback to developers and customer teams, managed escalations and emergency situations, ran monitoring systems, and so on.</p>
<p>The team I joined was around 5 engineers (all former developers and technical leaders), which grew to around 50 of more mixed experience across multiple locations by the time I left.</p>
<p>I&#8217;m going to focus here on process and documentation, since I don&#8217;t think they&#8217;re talked about usefully enough where I do read about them.</p>
<p>If you want to read something far longer <a href="https://landing.google.com/sre/book.html">Google&#8217;s SRE book </a>is a great resource<strong>.</strong></p>
<h2><b>Process</b></h2>
<p>Process is essential to running and scaling an SRE operation. It&#8217;s the core of everything we achieved. When I joined the team, habits were bad &#8211; there was a ticketing system, but one-journal resolutions were not uncommon (&#8216;Site down. Fixed, closing.&#8217;).</p>
<p>An SRE operation is basically a factory processing information and should act accordingly. You wouldn&#8217;t have a factory running without processes to take care of the movement of goods, and by the same token you shouldn&#8217;t have a knowledge-intensive SRE operation running without processes to take care of the movement of knowledge.</p>
<p>One frequent objection to process I heard is that it &#8216;stifles creativity&#8217;. In fact, effective process (bad process implemented poorly can mess anything up!) clears your mind to allow creative thought.</p>
<p>A great book on this subject is <a href="http://atulgawande.com/book/the-checklist-manifesto/">&#8216;The Checklist Manifesto&#8217;</a>, which inspired many of the changes we made, and was widely read within the team. It cites the examples of the aviation industry&#8217;s approach to process, which enables remarkable creativity under stressful conditions by mental automation of routine operations. There&#8217;s even a <a href="http://www.imdb.com/title/tt3263904/">film</a> about one incident discussed and the pilot himself <a href="http://www.airspacemag.com/as-interview/aamps-interview-sullys-tale-53584029/">cited checklists and routine as an enabler</a> of his fast-thinking creativity and control in that stressful situation. In fact, we used a similar process ourselves: in emergency situations, an experienced engineer would dive into finding a solution, while a more junior one would follow the checklist.</p>
<p>Another critique of process is that process can inhibit effective working and collaboration. It absolutely can if process is treated as an entity justified by its own existence rather than another living asset. The only thing that can guard against this is culture. More on that later.</p>
<h3><b>Process &#8211; Tooling</b></h3>
<p>The first thing to get right is the ticketing system. Like monitoring solutions, people obsess over which ticketing system is best. And they are wrong to. The ticketing system you use you will generally end up preferring simply due to familiarity. The ticketing system is only bad if it drives or encourages bad processes. What a bad process is depends on the constraints of your business.</p>
<p>It&#8217;s far more important to have a ticketing system that functions reliably and supports your processes than the other way round.</p>
<p>Here&#8217;s an example. We moved from RT to JIRA during my tenure. JIRA offered many advantages over RT, and I would generally recommend JIRA as a collaborative tool. The biggest problem we had switching, however, was the loss of some functionality we&#8217;d built into RT, which was critical to us. RT allowed us to get real-time updates on tickets, which meant that collaboration on incidents was somewhere between chat and ticketing. This record was invaluable in post-incident review. RT also allowed us to hide entries from customers, which again was really hard to lose. We got over it, but these things were surprisingly important because they&#8217;d become embedded in our process and culture.</p>
<p>When choosing or changing your ticketing system, think about what&#8217;s really important to operations, not specific features that seem nice when on a list. What&#8217;s important to you can vary from how nice it looks (seriously &#8211; your customers might take you more seriously, and your brand might be about good design), to whether the reporting tools are powerful.</p>
<h2><b>Documentation</b></h2>
<p>After process, documentation is the most important thing, and the two are intimately related.</p>
<p>There&#8217;s a book in documentation, because, again, people focus on the wrong things. The critical thing to understand is that documentation is an asset like any other. Like any business assets, documentation:</p>
<ul class="alternate" type="square">
<li>If properly looked after, will return investment many times over</li>
<li>Requires investment to maintain (like the fabric of a factory)</li>
<li>If out of date, costs money simply because it&#8217;s there (like out-of-date inventory)</li>
<li>If of poor quality, or not usable is a liability, not an asset</li>
</ul>
<p>But this is not controversial &#8211; few people disagree with the idea that good documentation is useful. The point is: what do you do about it?</p>
<h3><b>Documentation &#8211; Where We Were</b></h3>
<p>We were in a situation where documentation provided to us was not useful (eg from devs: &#8216;a network partition is not covered here as it is highly unlikely&#8217;. Well, guess what happened! And that was documentation they kindly bothered to write&#8230;), or we simply relied on previously-journalled investigations (by this time we <em>were</em> writing things down) to figure out what to do next time something similar happened.</p>
<p>This was frustrating all of us, and we spent a long time complaining about the documentation fairy not visiting us before we took responsibility for it ourselves.</p>
<h3><b>Documentation &#8211; What I Did</b></h3>
<p><img data-attachment-id="2752" data-permalink="https://zwischenzugs.wordpress.com/2017/04/04/things-i-learned-managing-site-reliability-for-some-of-the-worlds-busiest-gambling-sites/pile_of_papers/" data-orig-file="https://zwischenzugs.wordpress.com/wp-content/uploads/2017/04/pile_of_papers.jpg" data-orig-size="612,640" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="pile_of_papers" data-image-description="" data-image-caption="" data-large-file="https://zwischenzugs.wordpress.com/wp-content/uploads/2017/04/pile_of_papers.jpg?w=612" class="alignnone size-full wp-image-2752" src="https://zwischenzugs.wordpress.com/wp-content/uploads/2017/04/pile_of_papers.jpg?w=1100" alt="pile_of_papers" srcset="https://zwischenzugs.wordpress.com/wp-content/uploads/2017/04/pile_of_papers.jpg 612w, https://zwischenzugs.wordpress.com/wp-content/uploads/2017/04/pile_of_papers.jpg?w=143&amp;h=150 143w, https://zwischenzugs.wordpress.com/wp-content/uploads/2017/04/pile_of_papers.jpg?w=287&amp;h=300 287w" sizes="(max-width: 612px) 100vw, 612px" /></p>
<p>Here&#8217;s what I did.</p>
<ul class="alternate" type="square">
<li>I took two years&#8217; worth of priority incidents (ie those that triggered &#8211; or would have triggered &#8211; an out of hours call), and listed them. There were over 1700 of them.</li>
<li>Then I categorised them by type of issue.</li>
<li>Then I went through each type of issue and summarised the steps needed to either resolve, or get to a point where escalation was required</li>
</ul>
<p>This took <em>seven months</em> of my full-time attention. I was a senior employee and I was costing my company lots of money to sit there and write. And because I had a clueful boss, I never got questioned about whether this was a good use of time. I was trusted (culture, again!). I would say it took four months before any dividends at all were seen from this effort. I remember this four-month period as a nerve-wracking time, as my attention was taken away from operations to what could have been a complete waste of my time and my employer&#8217;s money and an embarrassing failure.</p>
<p>Why not give it to an underling to do? For a few reasons. This was so important, and we had not done it before so I needed to know it was being done properly. I knew exactly what was needed, so I knew I could write it in such a way that it would be useful to me at the very least. I was also a relatively experienced writer (arts grad, former journalist), so I liked to think that that would help me write well.</p>
<p>We called these &#8216;Incident Models&#8217; as per ITIL, but they can also be called &#8216;run books&#8217;, &#8216;crib sheets&#8217;, whatever. It doesn&#8217;t matter. What mattered was:</p>
<ul class="alternate" type="square">
<li>They were easy to find/search for</li>
<li>It was easy to identify whether you got a match</li>
<li>They were not duplicated</li>
<li>They could be trusted</li>
</ul>
<p>We put this documentation in plain text within the ticketing system, under a separate JIRA project.</p>
<p>The documentation team got wind of what we were up to and tried to pressure us to use an internal wiki for this. We flat-out refused, and that was critical: the documentation system&#8217;s colocation with the ticketing system meant that searching and updating the documentation had no impedance mismatch. Because it was plain text it was fast, simple to update, and uncluttered. We resisted process that jeopardised the utility of what we were doing.</p>
<hr />
<p><strong>If you want to learn more about bash, read my book <a href="https://leanpub.com/learnbashthehardway">Learn Bash the Hard Way</a>, available at <a href="https://leanpub.com/learnbashthehardway">$5</a>:</strong></p>
<p><a href="https://leanpub.com/learnbashthehardway"><img data-attachment-id="4192" data-permalink="https://zwischenzugs.wordpress.com/2018/01/06/ten-things-i-wish-id-known-about-bash/hero/" data-orig-file="https://zwischenzugs.wordpress.com/wp-content/uploads/2018/01/hero.png" data-orig-size="600,957" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="hero" data-image-description="" data-image-caption="" data-large-file="https://zwischenzugs.wordpress.com/wp-content/uploads/2018/01/hero.png?w=600" class="alignnone size-medium wp-image-4192" src="https://zwischenzugs.wordpress.com/wp-content/uploads/2018/01/hero.png?w=188&#038;h=300" alt="hero" width="188" height="300" srcset="https://zwischenzugs.wordpress.com/wp-content/uploads/2018/01/hero.png?w=188 188w, https://zwischenzugs.wordpress.com/wp-content/uploads/2018/01/hero.png?w=376 376w, https://zwischenzugs.wordpress.com/wp-content/uploads/2018/01/hero.png?w=94 94w" sizes="(max-width: 188px) 100vw, 188px" /></a></p>
<hr />
<h3><b>Documentation and the Criticality of De-cluttering</b></h3>
<p>When we started, we designed a schema for these Incident Models which was a thing of beauty, covering every scenario and situation that could crop up.</p>
<p><img data-attachment-id="2761" data-permalink="https://zwischenzugs.wordpress.com/2017/04/04/things-i-learned-managing-site-reliability-for-some-of-the-worlds-busiest-gambling-sites/bureaucracy/" data-orig-file="https://zwischenzugs.wordpress.com/wp-content/uploads/2017/04/bureaucracy.jpeg" data-orig-size="435,599" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="bureaucracy" data-image-description="" data-image-caption="" data-large-file="https://zwischenzugs.wordpress.com/wp-content/uploads/2017/04/bureaucracy.jpeg?w=435" class="alignnone size-full wp-image-2761" src="https://zwischenzugs.wordpress.com/wp-content/uploads/2017/04/bureaucracy.jpeg?w=1100" alt="bureaucracy.jpeg" srcset="https://zwischenzugs.wordpress.com/wp-content/uploads/2017/04/bureaucracy.jpeg 435w, https://zwischenzugs.wordpress.com/wp-content/uploads/2017/04/bureaucracy.jpeg?w=109&amp;h=150 109w, https://zwischenzugs.wordpress.com/wp-content/uploads/2017/04/bureaucracy.jpeg?w=218&amp;h=300 218w" sizes="(max-width: 435px) 100vw, 435px" /></p>
<p>In the end it was almost a complete waste of time. What we ended up using was a really dumb structure of:</p>
<ul class="alternate" type="square">
<li>Statement of problem</li>
<li>Steps 1-n of what to do</li>
<li>Further/deeper discussion, related articles</li>
</ul>
<p>That was it. Attempts to structure it more thoroughly all failed as it was either confusing to newcomers, created too much administrative overhead, or didn&#8217;t cover enough. Some articles developed their own schema over time that was appropriate to the task, and new categories (eg the &#8216;jump-off&#8217; article that told you which article to go to next) evolved over time. We couldn&#8217;t design for these things in advance because we didn&#8217;t know what would work or what would not.</p>
<p>Call it &#8216;agile documentation&#8217; if you want &#8211; agile&#8217;s what sells these days (it was ITIL back then). Again, what was critical was that <b>simplicity and utility</b> trumped everything else.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<h3><b>There Is No Documentation Fairy</b></h3>
<p>Having spent all this time and effort a couple of other things became clear regarding documentation.</p>
<p>&nbsp;</p>
<p><img data-attachment-id="2753" data-permalink="https://zwischenzugs.wordpress.com/2017/04/04/things-i-learned-managing-site-reliability-for-some-of-the-worlds-busiest-gambling-sites/documentation_fairy/" data-orig-file="https://zwischenzugs.wordpress.com/wp-content/uploads/2017/04/documentation_fairy.jpg" data-orig-size="800,800" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="documentation_fairy" data-image-description="" data-image-caption="" data-large-file="https://zwischenzugs.wordpress.com/wp-content/uploads/2017/04/documentation_fairy.jpg?w=800" loading="lazy" class="alignnone size-full wp-image-2753" src="https://zwischenzugs.wordpress.com/wp-content/uploads/2017/04/documentation_fairy.jpg?w=1100" alt="documentation_fairy" srcset="https://zwischenzugs.wordpress.com/wp-content/uploads/2017/04/documentation_fairy.jpg 800w, https://zwischenzugs.wordpress.com/wp-content/uploads/2017/04/documentation_fairy.jpg?w=150&amp;h=150 150w, https://zwischenzugs.wordpress.com/wp-content/uploads/2017/04/documentation_fairy.jpg?w=300&amp;h=300 300w, https://zwischenzugs.wordpress.com/wp-content/uploads/2017/04/documentation_fairy.jpg?w=768&amp;h=768 768w" sizes="(max-width: 800px) 100vw, 800px" /></p>
<p>First, we gave up accepting documentation from other teams. If they commented code, great, if there was something useful on the wiki for us to find, also great. But when it came to handing over projects we stopped &#8216;asking for documentation&#8217;. Instead we&#8217;d arrange sessions with experienced SREs where the design of the project would be discussed.</p>
<p>Invariably (assuming they had no ops experience), the developer would focus on the things they&#8217;d built and how it worked &#8211; and these things were often the most thoroughly tested and least likely to fail.</p>
<p>By contrast, the SRE would focus on the weak points, the things that would go wrong. &#8216;What happens if the network gets partitioned? What if the database runs out of disk? Can we work out from the logs why the user didn&#8217;t get paid?&#8217;</p>
<p>We&#8217;d then go away and write our own documentation and get the engineer to sign off on it &#8211; the reverse of the traditional flow! They&#8217;d often make useful comments and give us added insights in the process.</p>
<p>The second thing we noticed was that our engineers were still reluctant to update the docs that only they were using. There was still a sense that documentation should be given to them. The leadership had to constantly reinforce that this was their documentation, not tablets of stone handed down from on high, and if they didn&#8217;t constantly maintain this, they would become useless.</p>
<p><img data-attachment-id="2764" data-permalink="https://zwischenzugs.wordpress.com/2017/04/04/things-i-learned-managing-site-reliability-for-some-of-the-worlds-busiest-gambling-sites/writer-at-computer/" data-orig-file="https://zwischenzugs.wordpress.com/wp-content/uploads/2017/04/writer-at-computer.jpg" data-orig-size="640,433" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="writer-at-computer" data-image-description="" data-image-caption="" data-large-file="https://zwischenzugs.wordpress.com/wp-content/uploads/2017/04/writer-at-computer.jpg?w=640" loading="lazy" class="alignnone size-full wp-image-2764" src="https://zwischenzugs.wordpress.com/wp-content/uploads/2017/04/writer-at-computer.jpg?w=1100" alt="writer-at-computer.jpg" srcset="https://zwischenzugs.wordpress.com/wp-content/uploads/2017/04/writer-at-computer.jpg 640w, https://zwischenzugs.wordpress.com/wp-content/uploads/2017/04/writer-at-computer.jpg?w=150&amp;h=101 150w, https://zwischenzugs.wordpress.com/wp-content/uploads/2017/04/writer-at-computer.jpg?w=300&amp;h=203 300w" sizes="(max-width: 640px) 100vw, 640px" /></p>
<p>This was a cultural problem and took a long time to undo. Undoing it also required the documentation changes to be reinforced by process.</p>
<p>In the end, I&#8217;d say about 10% of the ongoing working time was spent maintaining and writing documentation. After the initial 7-month burst, most of that 10% was spent on maintenance rather than producing new material.</p>
<hr />
<p><strong>If you want to learn more about git, read my book <a href="https://leanpub.com/learngitthehardway">Learn Git the Hard Way</a>, available at <a href="https://leanpub.com/learngitthehardway">$8</a>:</strong></p>
<p><a href="https://leanpub.com/learngitthehardway/"><img data-attachment-id="4278" data-permalink="https://zwischenzugs.wordpress.com/learngitthehardway/" data-orig-file="https://zwischenzugs.wordpress.com/wp-content/uploads/2018/03/learngitthehardway.png" data-orig-size="1410,2250" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="learngitthehardway" data-image-description="" data-image-caption="" data-large-file="https://zwischenzugs.wordpress.com/wp-content/uploads/2018/03/learngitthehardway.png?w=642" loading="lazy" class=" size-medium wp-image-4278 aligncenter" src="https://zwischenzugs.wordpress.com/wp-content/uploads/2018/03/learngitthehardway.png?w=188&#038;h=300" alt="learngitthehardway" width="188" height="300" srcset="https://zwischenzugs.wordpress.com/wp-content/uploads/2018/03/learngitthehardway.png?w=188 188w, https://zwischenzugs.wordpress.com/wp-content/uploads/2018/03/learngitthehardway.png?w=376 376w, https://zwischenzugs.wordpress.com/wp-content/uploads/2018/03/learngitthehardway.png?w=94 94w" sizes="auto, (max-width: 188px) 100vw, 188px" /></a></p>
<hr />
<h3><b>Documentation &#8211; Benefits</b></h3>
<p>After getting all this documentation done, we experienced benefits <em>far</em> in excess of the 10% ongoing cost. To call out a few:</p>
<ul class="alternate" type="square">
<li>Easier onboarding</li>
</ul>
<p>Before this process started we were reluctant to take on less experienced staff. After, onboarding became a breeze. Among other things the training involved following incidents as they happened and shadowing more experienced staff. New staff were tasked with helping maintain docs, which helped them understand what gaps they had in their knowledge.</p>
<ul class="alternate" type="square">
<li>Better training</li>
</ul>
<p>The docs gave us a resource that allowed us to identify training requirements. This ended up being a curriculum of tools and techniques that any engineer could aim to get a working knowledge of.</p>
<ul class="alternate" type="square">
<li>Less stress through simpler escalation</li>
</ul>
<p>These was a big one. Before we had the step-by-step incident models, when to escalate was a stressful decision. Some engineers had a reputation for escalating early, and all were insecure about whether they&#8217;d &#8216;missed something obvious&#8217; before calling a responsible tech lead out of hours. SREs would also get called out for <em>not</em> escalating early enough as well!</p>
<p>The incident models removed that problem. Pretty soon, the first question an escalated-to techie asked was &#8216;have you followed the incident model&#8217;? If so, and there something obvious was missed, then gaps in it became clear and quickly-fixed. Soon, non-SREs were busy updating and maintaining the docs themselves for when they were escalated-to. It became a virtuous circle.</p>
<ul class="alternate" type="square">
<li>Better discipline</li>
</ul>
<p>The obvious value of documentation to the team helped improve discipline in other respects. Interestingly, SREs previously had the reputation for being the &#8216;loudest&#8217; team &#8211; there was often a lot of &#8216;lively&#8217; debate, and the team was very social &#8211; which made sense, as we relied on each other as a team to cover a large technical area, dealt with often non-technical customer execs, and sharing knowledge and culture was critical.</p>
<p>As time progressed, the team became quieter and quieter &#8211; partly due to the advent of chatrooms, increased remote working, and international teams, but also due to the fact that so much of the work became routine: follow the incident model, when you&#8217;re done, or don&#8217;t understand something, escalate to someone more senior<strong>.</strong></p>
<ul class="alternate" type="square">
<li>Automation</li>
</ul>
<p>Automating the investigations this way meant that the way was clear to further automate them with software.</p>
<p>Having metrics on which tickets were linked to which incident models meant that we knew where best to focus our effort. We wrote scripts to comb through log files in the background, make encoding issues quicker and simpler to figure out, automate responses to customers (&#8216;Issue was caused by a change made by app admin user XXX&#8217;), and a lot more.</p>
<p>These automations inspired an automation tool we built for ourselves based on pexpect: <a class="external-link" title="Follow link" href="http://ianmiell.github.io/shutit/" rel="nofollow">http://ianmiell.github.io/shutit/</a> But that&#8217;s another story. Basically, once we got going it was a virtuous circle of continuous improvement.</p>
<h3><b>Back to Process</b></h3>
<p>Given you have all these assets, how do you prevent them from degrading in value over time? This is where process is critical.</p>
<p>Two processes were critical in ensuring everything continued smoothly: triage and post-incident review.</p>
<h3><b>Process &#8211; Triage</b></h3>
<p><img data-attachment-id="2770" data-permalink="https://zwischenzugs.wordpress.com/2017/04/04/things-i-learned-managing-site-reliability-for-some-of-the-worlds-busiest-gambling-sites/heres-a-copy-of-our-new-triage-plan-the-order-is-now-walking-wounded-first-the-dying-and-dead-second-lawyers-last/" data-orig-file="https://zwischenzugs.wordpress.com/wp-content/uploads/2017/04/traige.jpg" data-orig-size="400,323" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;Bruce Bolinger via CartoonStock - www.cartoonstock.com/cartoonview.asp?catref=bbon56&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&#039;Here&#039;s a copy of our new triage plan...the order is now walking wounded first, the dying and dead second, lawyers last...&#039;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;\u00a9 Bruce Bolinger via CartoonStock - www.cartoonstock.com/cartoonview.asp?catref=bbon56&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&#039;Here&#039;s a copy of our new triage plan...the order is now walking wounded first, the dying and dead second, lawyers last...&#039;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="&amp;#8216;Here&amp;#8217;s a copy of our new triage plan&amp;#8230;the order is now walking wounded first, the dying and dead second, lawyers last&amp;#8230;&amp;#8217;" data-image-description="" data-image-caption="&lt;p&gt;&amp;#8216;Here&amp;#8217;s a copy of our new triage plan&amp;#8230;the order is now walking wounded first, the dying and dead second, lawyers last&amp;#8230;&amp;#8217;&lt;/p&gt;
" data-large-file="https://zwischenzugs.wordpress.com/wp-content/uploads/2017/04/traige.jpg?w=400" loading="lazy" class="alignnone size-full wp-image-2770" src="https://zwischenzugs.wordpress.com/wp-content/uploads/2017/04/traige.jpg?w=1100" alt="'Here's a copy of our new triage plan...the order is now walking wounded first, the dying and dead second, lawyers last...'" srcset="https://zwischenzugs.wordpress.com/wp-content/uploads/2017/04/traige.jpg 400w, https://zwischenzugs.wordpress.com/wp-content/uploads/2017/04/traige.jpg?w=150&amp;h=121 150w, https://zwischenzugs.wordpress.com/wp-content/uploads/2017/04/traige.jpg?w=300&amp;h=242 300w" sizes="(max-width: 400px) 100vw, 400px" /></p>
<p>5%-10% of time was spent on the triage process. Again, it took a long time to get the process right, but it resulted in massive savings:</p>
<ul class="alternate" type="square">
<li>Reduce the steps to the minimum <em>useful</em> steps</li>
</ul>
<p>It&#8217;s so tempting to put as much as possible into your triage process, but it&#8217;s vital to keep the value in the process over completeness. Any step that is not often useful tends to get skipped over and ignored by the triager.</p>
<ul class="alternate" type="square">
<li>Focus on saving cost in the process</li>
</ul>
<p>Looking for duplicates, finding the relevant incident model, reverting quickly to the customer, and escalating early all reduced the cost per ticket significantly. It also saved other engineers the context switch of being asked a question while they&#8217;re thinking about something else. It&#8217;s hard to evaluate the benefits of these items, but we were able to deal with increased volumes of incidents with fewer people and less difficulty. Senior management and customers noticed.</p>
<p>Recording the details of these efforts also saved time, as (for example) engineers given a triaged ticket could see that the triager searched for previous incidents with a string that maybe they could improve on. It also meant that more experienced staff could review the triage quality.</p>
<ul class="alternate" type="square">
<li>Review triage</li>
</ul>
<p>Experienced staff need to review the triage process regularly to ensure it&#8217;s actually being applied effectively.</p>
<p>When I moved to another operations team (in a domain I knew far less about), I cut the incident queue in half in about 3 days, just by applying these techniques properly. The triage process was there, but it wasn&#8217;t being followed with any thought or oversight, and was given to a junior member of staff who was not the most capable. Big mistake. Triage must be done &#8211; or overseen &#8211; by someone with a lot of experience, as while it looks routine and mechanical it involves a lot of significant decisions that rest on experience in the field.</p>
<p>And yes, I was the new boss, and I chose to spend my first week doing the &#8216;lowly&#8217; task of triage. That&#8217;s how important I thought it was.</p>
<ul class="alternate" type="square">
<li>Rota the task</li>
</ul>
<p>No-one wants to do triage for long, so we rota&#8217;d it per week. This allowed some continuity and consistency, but stopped engineers from going crazy by spending too long doing the same task over and over.</p>
<h3><b>Process &#8211; Post-Incident Review</b></h3>
<p><img data-attachment-id="2767" data-permalink="https://zwischenzugs.wordpress.com/2017/04/04/things-i-learned-managing-site-reliability-for-some-of-the-worlds-busiest-gambling-sites/autopsy/" data-orig-file="https://zwischenzugs.wordpress.com/wp-content/uploads/2017/04/autopsy.jpg" data-orig-size="590,421" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="autopsy" data-image-description="" data-image-caption="" data-large-file="https://zwischenzugs.wordpress.com/wp-content/uploads/2017/04/autopsy.jpg?w=590" loading="lazy" class="alignnone size-full wp-image-2767" src="https://zwischenzugs.wordpress.com/wp-content/uploads/2017/04/autopsy.jpg?w=1100" alt="autopsy" srcset="https://zwischenzugs.wordpress.com/wp-content/uploads/2017/04/autopsy.jpg 590w, https://zwischenzugs.wordpress.com/wp-content/uploads/2017/04/autopsy.jpg?w=150&amp;h=107 150w, https://zwischenzugs.wordpress.com/wp-content/uploads/2017/04/autopsy.jpg?w=300&amp;h=214 300w" sizes="(max-width: 590px) 100vw, 590px" /></p>
<p>The mirror image of triage was the &#8216;post incident review&#8217;. Every ticket was reviewed by an experienced team member. Again, this was a process that took up about 5% of effort, but was also significant.</p>
<p>A standard form was filled out and any recommendations were added to a list of backlog &#8216;improvement&#8217; tasks which could be prioritised. This gave us a number for technical/process debt that we wanted to look at.</p>
<h3><b>Culture</b></h3>
<p><img data-attachment-id="2773" data-permalink="https://zwischenzugs.wordpress.com/2017/04/04/things-i-learned-managing-site-reliability-for-some-of-the-worlds-busiest-gambling-sites/blame/" data-orig-file="https://zwischenzugs.wordpress.com/wp-content/uploads/2017/04/blame.jpg" data-orig-size="4167,4167" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="blame" data-image-description="" data-image-caption="" data-large-file="https://zwischenzugs.wordpress.com/wp-content/uploads/2017/04/blame.jpg?w=1024" loading="lazy" class="alignnone size-full wp-image-2773" src="https://zwischenzugs.wordpress.com/wp-content/uploads/2017/04/blame.jpg?w=1100" alt="blame.jpg" srcset="https://zwischenzugs.wordpress.com/wp-content/uploads/2017/04/blame.jpg 4167w, https://zwischenzugs.wordpress.com/wp-content/uploads/2017/04/blame.jpg?w=150&amp;h=150 150w, https://zwischenzugs.wordpress.com/wp-content/uploads/2017/04/blame.jpg?w=300&amp;h=300 300w, https://zwischenzugs.wordpress.com/wp-content/uploads/2017/04/blame.jpg?w=768&amp;h=768 768w, https://zwischenzugs.wordpress.com/wp-content/uploads/2017/04/blame.jpg?w=1024&amp;h=1024 1024w, https://zwischenzugs.wordpress.com/wp-content/uploads/2017/04/blame.jpg?w=1440&amp;h=1440 1440w" sizes="(max-width: 4167px) 100vw, 4167px" /></p>
<p>I&#8217;ve mentioned culture a few times, and it&#8217;s what you always return to if you&#8217;re trying to enact any kind of change at all, since culture is at root a set of conceptual frameworks that underlie all our actions.</p>
<p>I&#8217;ve also mentioned that people often focus on the &#8216;wrong thing&#8217;. Time and again I hear people focus on tools and technology rather than culture. Yes, tools and technology are important, but if you&#8217;re not using them effectively then they are worse than useless. You can have the best golf clubs in the world, but if you don&#8217;t know how to swing and you&#8217;re playing baseball then they won&#8217;t help much.</p>
<p>Culture requires investment far more than technology does (I invested over half a year just writing documentation, remember). If the culture is right, people will look for the right tools and technology when they need to.</p>
<p>When given a choice about what to spend time and money on, always go for culture first. It cost me a lot of budget, but forcibly removing an &#8216;unhelpful&#8217; team member was the best thing I did when I took over another team. The rest of the team flowered once he left, no longer stifled by his aggressive behaviour, and many things got done that didn&#8217;t before.</p>
<p>We also built a highly effective team with a budget so small that recruiters would phone me up to yell at me what I was looking for was &#8216;impossible&#8217;, but by focussing on the right behaviours, investing time in the people we found, and having good processes in place, we got an extremely effective and loyal team that all went on to bigger and better things within and outside the company (but mostly within!).</p>
<h3><b>Politics</b></h3>
<p>A quick word on politics. You&#8217;ve got to pick your battles. You&#8217;re unlikely to get the resources you need, so drop the stuff that wont get done to the floor.</p>
<p>Yes, you need a monitoring solution, better documentation, better trained staff, more testing&#8230; you are not going to get all these things unless you have a money machine, so pick the most important and try and solve that first. If you try and improve all these things at once, you will likely fail.</p>
<p>After process, and documentation, I tried to crack the &#8216;reproducible environment&#8217; puzzle. That led me to Docker, and a complete change of career. I talk about these things a little <a href="https://www.youtube.com/watch?v=Yj5I-yOaDao">here</a> and <a href="https://www.youtube.com/watch?v=-qHwL8C9UoA&amp;t=4s">here</a>.</p>
<h2>Any Questions?</h2>
<p>Reach me on twitter: @ianmiell</p>
<p>Or <a href="https://www.linkedin.com/in/ian-miell-694496">LinkedIn</a></p>
<p id="76f3" class="graf graf--p graf-after--h3">My book <a class="markup--anchor markup--p-anchor" href="http://manning.com/miell/?a_aid=zwischenzugs&amp;a_bid=e0d48f62" target="_blank" rel="nofollow noopener">Docker in Practice</a>:</p>
<figure id="d17e" class="graf graf--figure graf-after--p">
<div class="aspectRatioPlaceholder is-locked">
<div class="aspectRatioPlaceholder-fill"></div>
<div class="progressiveMedia js-progressiveMedia graf-image is-canvasLoaded is-imageLoaded"><img class="progressiveMedia-image js-progressiveMedia-image" src="https://zwischenzugs.wordpress.com/wp-content/uploads/2017/03/5d342-0v9jkbliyi3uzefqq.jpg?w=640" /></div>
</div>
</figure>
<p id="f56f" class="graf graf--p graf-after--figure graf--trailing"><strong class="markup--strong markup--p-strong"><em class="markup--em markup--p-em">Get 39% off with the code: 39miell2</em></strong></p>
<hr />
<p>If you liked this post, you might also like:</p>
<p><a href="http://zwischenzugs.com/2018/02/24/5-things-i-did-to-change-a-teams-culture/" target="_blank" rel="noopener">Five Things I Did to Change a Team’s Culture</a></p>
<p><a href="http://zwischenzugs.com/2018/01/06/ten-things-i-wish-id-known-about-bash/" target="_blank" rel="noopener">Ten Things I Wish I’d Known About bash</a></p>
<p><a href="http://zwischenzugs.com/2017/10/15/my-20-year-experience-of-software-development-methodologies/" target="_blank" rel="noopener">My 20-Year Experience of Software Development Methodologies</a></p>
<p><a href="http://zwischenzugs.com/2017/04/11/five-books-i-advise-every-devops-engineer-to-read/" target="_blank" rel="noopener">Five Books I Advise Every DevOps Engineer to Read</a></p>
<hr />
<p>&nbsp;</p>
<div id="atatags-370373-6aa36e93a42c2">
<script type="text/javascript">
__ATA = window.__ATA || {};
__ATA.cmd = window.__ATA.cmd || [];
__ATA.cmd.push(function() {
__ATA.initVideoSlot('atatags-370373-6aa36e93a42c2', {
sectionId: '370373',
format: 'inread'
});
});
</script>
</div><span id="wordads-inline-marker" style="display: none;"></span><div id="jp-post-flair" class="sharedaddy sd-like-enabled sd-sharing-enabled"><div class="sharedaddy sd-sharing-enabled"><div class="robots-nocontent sd-block sd-social sd-social-official sd-sharing"><h3 class="sd-title">Share this:</h3><div class="sd-content"><ul><li class="share-email"><a rel="nofollow noopener noreferrer"
data-shared="sharing-email-2694"
class="share-email sd-button"
href="mailto:?subject=%5BShared%20Post%5D%20Things%20I%20Learned%20Managing%20Site%20Reliability%20for%20Some%20of%20the%20World%27s%20Busiest%20Gambling%20Sites&#038;body=https%3A%2F%2Fzwischenzugs.wordpress.com%2F2017%2F04%2F04%2Fthings-i-learned-managing-site-reliability-for-some-of-the-worlds-busiest-gambling-sites%2F&#038;share=email"
target="_blank"
aria-labelledby="sharing-email-2694"
data-email-share-error-title="Do you have email set up?" data-email-share-error-text="If you&#039;re having problems sharing via email, you might not have email set up for your browser. You may need to create a new email yourself." data-email-share-nonce="576e7bd1dc" data-email-share-track-url="https://zwischenzugs.wordpress.com/2017/04/04/things-i-learned-managing-site-reliability-for-some-of-the-worlds-busiest-gambling-sites/?share=email">
<span id="sharing-email-2694" hidden>Email a link to a friend (Opens in new window)</span>
<span>Email</span>
</a></li><li class="share-linkedin"><div class="linkedin_button"><script type="in/share" data-url="https://zwischenzugs.wordpress.com/2017/04/04/things-i-learned-managing-site-reliability-for-some-of-the-worlds-busiest-gambling-sites/" data-counter="right"></script></div></li><li class="share-reddit"><a rel="nofollow noopener noreferrer"
data-shared="sharing-reddit-2694"
class="share-reddit sd-button"
href="https://zwischenzugs.wordpress.com/2017/04/04/things-i-learned-managing-site-reliability-for-some-of-the-worlds-busiest-gambling-sites/?share=reddit"
target="_blank"
aria-labelledby="sharing-reddit-2694"
>
<span id="sharing-reddit-2694" hidden>Share on Reddit (Opens in new window)</span>
<span>Reddit</span>
</a></li><li class="share-twitter"><a href="https://twitter.com/share" class="twitter-share-button" data-url="https://zwischenzugs.wordpress.com/2017/04/04/things-i-learned-managing-site-reliability-for-some-of-the-worlds-busiest-gambling-sites/" data-text="Things I Learned Managing Site Reliability for Some of the World&#039;s Busiest Gambling Sites" data-via="ianmiell" data-related="wordpressdotcom">Tweet</a></li><li class="share-tumblr"><a class="tumblr-share-button" target="_blank" href="https://www.tumblr.com/share" data-title="Things I Learned Managing Site Reliability for Some of the World&#039;s Busiest Gambling Sites" data-content="https://zwischenzugs.wordpress.com/2017/04/04/things-i-learned-managing-site-reliability-for-some-of-the-worlds-busiest-gambling-sites/" title="Share on Tumblr">Share on Tumblr</a></li><li class="share-facebook"><div class="fb-share-button" data-href="https://zwischenzugs.wordpress.com/2017/04/04/things-i-learned-managing-site-reliability-for-some-of-the-worlds-busiest-gambling-sites/" data-layout="button_count"></div></li><li class="share-end"></li></ul></div></div></div><div class='sharedaddy sd-block sd-like jetpack-likes-widget-wrapper jetpack-likes-widget-unloaded' id='like-post-wrapper-20870870-2694-6aa36e93a5106' data-src='//widgets.wp.com/likes/index.html?ver=20260911#blog_id=20870870&amp;post_id=2694&amp;origin=zwischenzugs.wordpress.com&amp;obj_id=20870870-2694-6aa36e93a5106' data-name='like-post-frame-20870870-2694-6aa36e93a5106' data-title='Like or Reblog'><div class='likes-widget-placeholder post-likes-widget-placeholder' style='height: 55px;'><span class='button'><span>Like</span></span> <span class='loading'>Loading...</span></div><span class='sd-text-color'></span><a class='sd-link-color'></a></div>
<div id='jp-relatedposts' class='jp-relatedposts' >
<h3 class="jp-relatedposts-headline"><em>Related</em></h3>
</div></div> </div><!-- .entry-content -->
<div class="entry-footer">
</div><!-- .entry-footer -->
<div class="entry-author-wrapper">
<div class="entry-author author-avatar-show">
<div class="author-avatar">
<img referrerpolicy="no-referrer" alt='Unknown&#039;s avatar' src='https://1.gravatar.com/avatar/db8ac7dbddad89c65507a57fe711d467a0b3db585ad30b46f0c8244cf9c4927c?s=80&#038;d=identicon&#038;r=G' srcset='https://1.gravatar.com/avatar/db8ac7dbddad89c65507a57fe711d467a0b3db585ad30b46f0c8244cf9c4927c?s=80&#038;d=identicon&#038;r=G 1x, https://1.gravatar.com/avatar/db8ac7dbddad89c65507a57fe711d467a0b3db585ad30b46f0c8244cf9c4927c?s=120&#038;d=identicon&#038;r=G 1.5x, https://1.gravatar.com/avatar/db8ac7dbddad89c65507a57fe711d467a0b3db585ad30b46f0c8244cf9c4927c?s=160&#038;d=identicon&#038;r=G 2x, https://1.gravatar.com/avatar/db8ac7dbddad89c65507a57fe711d467a0b3db585ad30b46f0c8244cf9c4927c?s=240&#038;d=identicon&#038;r=G 3x, https://1.gravatar.com/avatar/db8ac7dbddad89c65507a57fe711d467a0b3db585ad30b46f0c8244cf9c4927c?s=320&#038;d=identicon&#038;r=G 4x' class='avatar avatar-80' height='80' width='80' loading='lazy' decoding='async' /> </div><!-- .author-avatar -->
<div class="author-heading">
<h2 class="author-title">
Published by <span class="author-name">zwischenzugs</span> </h2>
</div><!-- .author-heading -->
<p class="author-bio">
<a class="author-link" href="https://zwischenzugs.wordpress.com/author/zwischenzugs/" rel="author">
View all posts by zwischenzugs </a>
</p><!-- .author-bio -->
</div><!-- .entry-auhtor -->
<div class="site-posted-on">
<strong>Published</strong>
<time class="entry-date published" datetime="2017-04-04T08:28:47+01:00">April 4, 2017</time><time class="updated" datetime="2018-03-18T11:26:31+00:00">March 18, 2018</time> </div><!-- .site-posted-on -->
</div>
</article><!-- #post-## -->
<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://zwischenzugs.wordpress.com/2017/03/18/clustered-vm-testing-how-to/" rel="prev"><span class="meta-nav screen-reader-text">Previous Post</span> Clustered VM Testing&nbsp;How-To</a></div><div class="nav-next"><a href="https://zwischenzugs.wordpress.com/2017/04/11/five-books-i-advise-every-devops-engineer-to-read/" rel="next"><span class="meta-nav screen-reader-text">Next Post</span> Five Books I Advise Every DevOps Engineer to&nbsp;Read</a></div></div>
</nav>
<div id="comments" class="comments-area">
<h2 class="comments-title">
23 thoughts on &ldquo;<span>Things I Learned Managing Site Reliability for Some of the World&#8217;s Busiest Gambling&nbsp;Sites</span>&rdquo; </h2><!-- .comments-title -->
<ol class="comment-list">
<li id="comment-735" class="pingback even thread-even depth-1">
<div class="comment-body">
Pingback: <a href="http://blog.extendtree.com/2017/04/04/things-i-learned-managing-site-reliability-for-some-of-the-worlds-busiest-gambling-sites/" class="url" rel="ugc external nofollow">Things I Learned Managing Site Reliability for Some of the World’s Busiest Gambling Sites | ExtendTree</a> </div>
</li><!-- #comment-## -->
<li id="comment-736" class="pingback odd alt thread-odd thread-alt depth-1">
<div class="comment-body">
Pingback: <a href="http://zerozone.com/mmp/aceinfoway/things-i-learned-managing-site-reliability-for-some-of-the-worlds-busiest-gambling-sites-/" class="url" rel="ugc external nofollow">Things I Learned Managing Site Reliability for Some of the World’s Busiest Gambling Sites | Ace Infoway</a> </div>
</li><!-- #comment-## -->
<li id="comment-738" class="comment byuser comment-author-cesc1989 even thread-even depth-1">
<article id="div-comment-738" class="comment-body">
<footer class="comment-meta">
<div class="comment-author vcard">
<img referrerpolicy="no-referrer" alt='cesc1989&#039;s avatar' src='https://1.gravatar.com/avatar/dd0ab394f2e1f59b4b4c6cf3c79a605545c348138301cad37f6f8b70cd01f1bf?s=48&#038;d=identicon&#038;r=G' srcset='https://1.gravatar.com/avatar/dd0ab394f2e1f59b4b4c6cf3c79a605545c348138301cad37f6f8b70cd01f1bf?s=48&#038;d=identicon&#038;r=G 1x, https://1.gravatar.com/avatar/dd0ab394f2e1f59b4b4c6cf3c79a605545c348138301cad37f6f8b70cd01f1bf?s=72&#038;d=identicon&#038;r=G 1.5x, https://1.gravatar.com/avatar/dd0ab394f2e1f59b4b4c6cf3c79a605545c348138301cad37f6f8b70cd01f1bf?s=96&#038;d=identicon&#038;r=G 2x, https://1.gravatar.com/avatar/dd0ab394f2e1f59b4b4c6cf3c79a605545c348138301cad37f6f8b70cd01f1bf?s=144&#038;d=identicon&#038;r=G 3x, https://1.gravatar.com/avatar/dd0ab394f2e1f59b4b4c6cf3c79a605545c348138301cad37f6f8b70cd01f1bf?s=192&#038;d=identicon&#038;r=G 4x' class='avatar avatar-48' height='48' width='48' loading='lazy' decoding='async' /> <b class="fn"><a href="http://otroespacioblog.wordpress.com" class="url" rel="ugc external nofollow">cesc1989</a></b> <span class="says">says:</span> </div><!-- .comment-author -->
<div class="comment-metadata">
<a href="https://zwischenzugs.wordpress.com/2017/04/04/things-i-learned-managing-site-reliability-for-some-of-the-worlds-busiest-gambling-sites/#comment-738"><time datetime="2017-04-05T01:41:42+01:00">April 5, 2017 at 1:41 am</time></a> </div><!-- .comment-metadata -->
</footer><!-- .comment-meta -->
<div class="comment-content">
<p>Thanks for sharing this with us.</p>
<p>Recently, I&#8217;ve been working more than never in servers(AWS) and came to realize that having a defined structure when deploying helps me automating the whole process even more. Just as you did back there, I&#8217;ve been taking some time to document what I&#8217;ve done(and doing) so that later on it benefits myself and my fellow coworkers.</p>
<p>Having a defined process and a clear documentation, in my opinion, really helps to get a reproducible environment.</p>
<p>First time I read from you. I&#8217;m eager to read more.</p>
</div><!-- .comment-content -->
<div class="reply"><a rel="nofollow" class="comment-reply-link" href="https://zwischenzugs.wordpress.com/2017/04/04/things-i-learned-managing-site-reliability-for-some-of-the-worlds-busiest-gambling-sites/?replytocom=738#respond" data-commentid="738" data-postid="2694" data-belowelement="div-comment-738" data-respondelement="respond" data-replyto="Reply to cesc1989" aria-label="Reply to cesc1989">Reply</a></div> </article><!-- .comment-body -->
</li><!-- #comment-## -->
<li id="comment-744" class="comment odd alt thread-odd thread-alt depth-1">
<article id="div-comment-744" class="comment-body">
<footer class="comment-meta">
<div class="comment-author vcard">
<img referrerpolicy="no-referrer" alt='Andrew, Andy, Drew (@AndrewRFeller)&#039;s avatar' src='https://i0.wp.com/pbs.twimg.com/profile_images/464084603762786305/aestyvXE_normal.jpeg?resize=48%2C48&#038;ssl=1' srcset='https://i0.wp.com/pbs.twimg.com/profile_images/464084603762786305/aestyvXE_normal.jpeg?resize=48%2C48&#038;ssl=1 1x, https://i0.wp.com/pbs.twimg.com/profile_images/464084603762786305/aestyvXE_normal.jpeg?resize=72%2C72&#038;ssl=1 1.5x, https://i0.wp.com/pbs.twimg.com/profile_images/464084603762786305/aestyvXE_normal.jpeg?resize=96%2C96&#038;ssl=1 2x, https://i0.wp.com/pbs.twimg.com/profile_images/464084603762786305/aestyvXE_normal.jpeg?resize=144%2C144&#038;ssl=1 3x, https://i0.wp.com/pbs.twimg.com/profile_images/464084603762786305/aestyvXE_normal.jpeg?resize=192%2C192&#038;ssl=1 4x' class='avatar avatar-48' height='48' width='48' loading='lazy' decoding='async' /> <b class="fn"><a href="http://twitter.com/AndrewRFeller" class="url" rel="ugc external nofollow">Andrew, Andy, Drew (@AndrewRFeller)</a></b> <span class="says">says:</span> </div><!-- .comment-author -->
<div class="comment-metadata">
<a href="https://zwischenzugs.wordpress.com/2017/04/04/things-i-learned-managing-site-reliability-for-some-of-the-worlds-busiest-gambling-sites/#comment-744"><time datetime="2017-04-05T16:54:09+01:00">April 5, 2017 at 4:54 pm</time></a> </div><!-- .comment-metadata -->
</footer><!-- .comment-meta -->
<div class="comment-content">
<p>Appreciate documenting your experience and see a lot of similarities with past job where we made the same transition with very similar problems.</p>
<p>I&#8217;d be interested more in how you built out documentation within JIRA itself rather than putting in Confluence.</p>
<p>One thing I&#8217;ll recommend for SRE teams is capturing performance metrics from applications, services, and systems through graphite/influxdb/promethus/etc so 1) your SRE/NOC team can team/silo specific dashboards to see what&#8217;s going on easily and 2) your monitoring system can build alerts against the same data for notifications. We ended up embedding these dashboard within Confluence runbooks/playbooks followed by diagnosing/triaging, resolving, and escalation information. We also ended up associating these runbooks/playbooks with the alerts and had the links outputted into the operational chat along with the alert in question so people could easily follow it back.</p>
<p>Definitely want to encourage others for automating as much of recovering from these alerts as possible but also the other operational processes within your organization. It&#8217;s embarrassing to tell management one of your team members caused an outage because they failed to copy and paste a command from the runbook in the proper order. Whether you use Ansible, Puppet, Chef, Salt stack, etc, invest in an automation framework.</p>
<p>Lastly, I definitely recommend checking out and watching BigPanda&#8217;s Monitoringscape (<a href="https://bigpanda.io/monitoringscape/" rel="nofollow ugc">https://bigpanda.io/monitoringscape/</a>) page as they track new and mature technologies most SRE teams leverage.</p>
</div><!-- .comment-content -->
<div class="reply"><a rel="nofollow" class="comment-reply-link" href="https://zwischenzugs.wordpress.com/2017/04/04/things-i-learned-managing-site-reliability-for-some-of-the-worlds-busiest-gambling-sites/?replytocom=744#respond" data-commentid="744" data-postid="2694" data-belowelement="div-comment-744" data-respondelement="respond" data-replyto="Reply to Andrew, Andy, Drew (@AndrewRFeller)" aria-label="Reply to Andrew, Andy, Drew (@AndrewRFeller)">Reply</a></div> </article><!-- .comment-body -->
</li><!-- #comment-## -->
<li id="comment-746" class="comment even thread-even depth-1 parent">
<article id="div-comment-746" class="comment-body">
<footer class="comment-meta">
<div class="comment-author vcard">
<img referrerpolicy="no-referrer" alt='hui&#039;s avatar' src='https://0.gravatar.com/avatar/94068c46be2876f3a384cc13de277137d120052e8ca4ce9ccd40273456b18423?s=48&#038;d=identicon&#038;r=G' srcset='https://0.gravatar.com/avatar/94068c46be2876f3a384cc13de277137d120052e8ca4ce9ccd40273456b18423?s=48&#038;d=identicon&#038;r=G 1x, https://0.gravatar.com/avatar/94068c46be2876f3a384cc13de277137d120052e8ca4ce9ccd40273456b18423?s=72&#038;d=identicon&#038;r=G 1.5x, https://0.gravatar.com/avatar/94068c46be2876f3a384cc13de277137d120052e8ca4ce9ccd40273456b18423?s=96&#038;d=identicon&#038;r=G 2x, https://0.gravatar.com/avatar/94068c46be2876f3a384cc13de277137d120052e8ca4ce9ccd40273456b18423?s=144&#038;d=identicon&#038;r=G 3x, https://0.gravatar.com/avatar/94068c46be2876f3a384cc13de277137d120052e8ca4ce9ccd40273456b18423?s=192&#038;d=identicon&#038;r=G 4x' class='avatar avatar-48' height='48' width='48' loading='lazy' decoding='async' /> <b class="fn">hui</b> <span class="says">says:</span> </div><!-- .comment-author -->
<div class="comment-metadata">
<a href="https://zwischenzugs.wordpress.com/2017/04/04/things-i-learned-managing-site-reliability-for-some-of-the-worlds-busiest-gambling-sites/#comment-746"><time datetime="2017-04-07T00:32:24+01:00">April 7, 2017 at 12:32 am</time></a> </div><!-- .comment-metadata -->
</footer><!-- .comment-meta -->
<div class="comment-content">
<p>Hi Ian ,</p>
<p>I am the editor of InfoQ China which focuses on software development. We like this article and wish to translate it.</p>
<p>Before we translate it into Chinese and publish it on our website, I want to ask for your permission first! This translation version is provided for informational purposes only, and does not make any commercial use.</p>
<p>In exchange, we will put the English title and link at the beginning of Chinese article. If our readers want to read more about this, they can click back to your website.</p>
<p>Thanks a lot, hope to get your help. Any more question, please let me know.</p>
</div><!-- .comment-content -->
<div class="reply"><a rel="nofollow" class="comment-reply-link" href="https://zwischenzugs.wordpress.com/2017/04/04/things-i-learned-managing-site-reliability-for-some-of-the-worlds-busiest-gambling-sites/?replytocom=746#respond" data-commentid="746" data-postid="2694" data-belowelement="div-comment-746" data-respondelement="respond" data-replyto="Reply to hui" aria-label="Reply to hui">Reply</a></div> </article><!-- .comment-body -->
<ol class="children">
<li id="comment-757" class="comment byuser comment-author-zwischenzugs bypostauthor odd alt depth-2">
<article id="div-comment-757" class="comment-body">
<footer class="comment-meta">
<div class="comment-author vcard">
<img referrerpolicy="no-referrer" alt='zwischenzugs&#039;s avatar' src='https://1.gravatar.com/avatar/db8ac7dbddad89c65507a57fe711d467a0b3db585ad30b46f0c8244cf9c4927c?s=48&#038;d=identicon&#038;r=G' srcset='https://1.gravatar.com/avatar/db8ac7dbddad89c65507a57fe711d467a0b3db585ad30b46f0c8244cf9c4927c?s=48&#038;d=identicon&#038;r=G 1x, https://1.gravatar.com/avatar/db8ac7dbddad89c65507a57fe711d467a0b3db585ad30b46f0c8244cf9c4927c?s=72&#038;d=identicon&#038;r=G 1.5x, https://1.gravatar.com/avatar/db8ac7dbddad89c65507a57fe711d467a0b3db585ad30b46f0c8244cf9c4927c?s=96&#038;d=identicon&#038;r=G 2x, https://1.gravatar.com/avatar/db8ac7dbddad89c65507a57fe711d467a0b3db585ad30b46f0c8244cf9c4927c?s=144&#038;d=identicon&#038;r=G 3x, https://1.gravatar.com/avatar/db8ac7dbddad89c65507a57fe711d467a0b3db585ad30b46f0c8244cf9c4927c?s=192&#038;d=identicon&#038;r=G 4x' class='avatar avatar-48' height='48' width='48' loading='lazy' decoding='async' /> <b class="fn"><a href="https://zwischenzugs.wordpress.com" class="url" rel="ugc">zwischenzugs</a></b> <span class="says">says:</span> </div><!-- .comment-author -->
<div class="comment-metadata">
<a href="https://zwischenzugs.wordpress.com/2017/04/04/things-i-learned-managing-site-reliability-for-some-of-the-worlds-busiest-gambling-sites/#comment-757"><time datetime="2017-04-10T09:00:48+01:00">April 10, 2017 at 9:00 am</time></a> </div><!-- .comment-metadata -->
</footer><!-- .comment-meta -->
<div class="comment-content">
<p>Sure, please go ahead.</p>
</div><!-- .comment-content -->
<div class="reply"><a rel="nofollow" class="comment-reply-link" href="https://zwischenzugs.wordpress.com/2017/04/04/things-i-learned-managing-site-reliability-for-some-of-the-worlds-busiest-gambling-sites/?replytocom=757#respond" data-commentid="757" data-postid="2694" data-belowelement="div-comment-757" data-respondelement="respond" data-replyto="Reply to zwischenzugs" aria-label="Reply to zwischenzugs">Reply</a></div> </article><!-- .comment-body -->
</li><!-- #comment-## -->
</ol><!-- .children -->
</li><!-- #comment-## -->
<li id="comment-754" class="comment even thread-odd thread-alt depth-1 parent">
<article id="div-comment-754" class="comment-body">
<footer class="comment-meta">
<div class="comment-author vcard">
<img referrerpolicy="no-referrer" alt='Jonathan Ballet&#039;s avatar' src='https://0.gravatar.com/avatar/0eae754f8fe53d9a4d1cafb59d73c96ccc19307d2a68adc05e6424411896b7cd?s=48&#038;d=identicon&#038;r=G' srcset='https://0.gravatar.com/avatar/0eae754f8fe53d9a4d1cafb59d73c96ccc19307d2a68adc05e6424411896b7cd?s=48&#038;d=identicon&#038;r=G 1x, https://0.gravatar.com/avatar/0eae754f8fe53d9a4d1cafb59d73c96ccc19307d2a68adc05e6424411896b7cd?s=72&#038;d=identicon&#038;r=G 1.5x, https://0.gravatar.com/avatar/0eae754f8fe53d9a4d1cafb59d73c96ccc19307d2a68adc05e6424411896b7cd?s=96&#038;d=identicon&#038;r=G 2x, https://0.gravatar.com/avatar/0eae754f8fe53d9a4d1cafb59d73c96ccc19307d2a68adc05e6424411896b7cd?s=144&#038;d=identicon&#038;r=G 3x, https://0.gravatar.com/avatar/0eae754f8fe53d9a4d1cafb59d73c96ccc19307d2a68adc05e6424411896b7cd?s=192&#038;d=identicon&#038;r=G 4x' class='avatar avatar-48' height='48' width='48' loading='lazy' decoding='async' /> <b class="fn"><a href="http://gravatar.com/multani0" class="url" rel="ugc external nofollow">Jonathan Ballet</a></b> <span class="says">says:</span> </div><!-- .comment-author -->
<div class="comment-metadata">
<a href="https://zwischenzugs.wordpress.com/2017/04/04/things-i-learned-managing-site-reliability-for-some-of-the-worlds-busiest-gambling-sites/#comment-754"><time datetime="2017-04-09T20:22:03+01:00">April 9, 2017 at 8:22 pm</time></a> </div><!-- .comment-metadata -->
</footer><!-- .comment-meta -->
<div class="comment-content">
<p>Thanks for that very interesting article!</p>
<p>I was particularly interested to read your part about &#8220;Culture&#8221;, but you are not really specific there, except that you should invest preferably in this part than in others.</p>
<p>Could you give more details about what &#8220;Culture&#8221; is for you (or was, in the position you are describing here) and what would it mean to invest into culture.</p>
<p>Thanks!</p>
</div><!-- .comment-content -->
<div class="reply"><a rel="nofollow" class="comment-reply-link" href="https://zwischenzugs.wordpress.com/2017/04/04/things-i-learned-managing-site-reliability-for-some-of-the-worlds-busiest-gambling-sites/?replytocom=754#respond" data-commentid="754" data-postid="2694" data-belowelement="div-comment-754" data-respondelement="respond" data-replyto="Reply to Jonathan Ballet" aria-label="Reply to Jonathan Ballet">Reply</a></div> </article><!-- .comment-body -->
<ol class="children">
<li id="comment-756" class="comment byuser comment-author-zwischenzugs bypostauthor odd alt depth-2 parent">
<article id="div-comment-756" class="comment-body">
<footer class="comment-meta">
<div class="comment-author vcard">
<img referrerpolicy="no-referrer" alt='zwischenzugs&#039;s avatar' src='https://1.gravatar.com/avatar/db8ac7dbddad89c65507a57fe711d467a0b3db585ad30b46f0c8244cf9c4927c?s=48&#038;d=identicon&#038;r=G' srcset='https://1.gravatar.com/avatar/db8ac7dbddad89c65507a57fe711d467a0b3db585ad30b46f0c8244cf9c4927c?s=48&#038;d=identicon&#038;r=G 1x, https://1.gravatar.com/avatar/db8ac7dbddad89c65507a57fe711d467a0b3db585ad30b46f0c8244cf9c4927c?s=72&#038;d=identicon&#038;r=G 1.5x, https://1.gravatar.com/avatar/db8ac7dbddad89c65507a57fe711d467a0b3db585ad30b46f0c8244cf9c4927c?s=96&#038;d=identicon&#038;r=G 2x, https://1.gravatar.com/avatar/db8ac7dbddad89c65507a57fe711d467a0b3db585ad30b46f0c8244cf9c4927c?s=144&#038;d=identicon&#038;r=G 3x, https://1.gravatar.com/avatar/db8ac7dbddad89c65507a57fe711d467a0b3db585ad30b46f0c8244cf9c4927c?s=192&#038;d=identicon&#038;r=G 4x' class='avatar avatar-48' height='48' width='48' loading='lazy' decoding='async' /> <b class="fn"><a href="https://zwischenzugs.wordpress.com" class="url" rel="ugc">zwischenzugs</a></b> <span class="says">says:</span> </div><!-- .comment-author -->
<div class="comment-metadata">
<a href="https://zwischenzugs.wordpress.com/2017/04/04/things-i-learned-managing-site-reliability-for-some-of-the-worlds-busiest-gambling-sites/#comment-756"><time datetime="2017-04-10T09:00:32+01:00">April 10, 2017 at 9:00 am</time></a> </div><!-- .comment-metadata -->
</footer><!-- .comment-meta -->
<div class="comment-content">
<p>Good question. Started a response, but I&#8217;m wondering whether it&#8217;s a separate article&#8230;</p>
</div><!-- .comment-content -->
<div class="reply"><a rel="nofollow" class="comment-reply-link" href="https://zwischenzugs.wordpress.com/2017/04/04/things-i-learned-managing-site-reliability-for-some-of-the-worlds-busiest-gambling-sites/?replytocom=756#respond" data-commentid="756" data-postid="2694" data-belowelement="div-comment-756" data-respondelement="respond" data-replyto="Reply to zwischenzugs" aria-label="Reply to zwischenzugs">Reply</a></div> </article><!-- .comment-body -->
<ol class="children">
<li id="comment-758" class="comment even depth-3">
<article id="div-comment-758" class="comment-body">
<footer class="comment-meta">
<div class="comment-author vcard">
<img referrerpolicy="no-referrer" alt='Jonathan Ballet&#039;s avatar' src='https://0.gravatar.com/avatar/0eae754f8fe53d9a4d1cafb59d73c96ccc19307d2a68adc05e6424411896b7cd?s=48&#038;d=identicon&#038;r=G' srcset='https://0.gravatar.com/avatar/0eae754f8fe53d9a4d1cafb59d73c96ccc19307d2a68adc05e6424411896b7cd?s=48&#038;d=identicon&#038;r=G 1x, https://0.gravatar.com/avatar/0eae754f8fe53d9a4d1cafb59d73c96ccc19307d2a68adc05e6424411896b7cd?s=72&#038;d=identicon&#038;r=G 1.5x, https://0.gravatar.com/avatar/0eae754f8fe53d9a4d1cafb59d73c96ccc19307d2a68adc05e6424411896b7cd?s=96&#038;d=identicon&#038;r=G 2x, https://0.gravatar.com/avatar/0eae754f8fe53d9a4d1cafb59d73c96ccc19307d2a68adc05e6424411896b7cd?s=144&#038;d=identicon&#038;r=G 3x, https://0.gravatar.com/avatar/0eae754f8fe53d9a4d1cafb59d73c96ccc19307d2a68adc05e6424411896b7cd?s=192&#038;d=identicon&#038;r=G 4x' class='avatar avatar-48' height='48' width='48' loading='lazy' decoding='async' /> <b class="fn"><a href="http://gravatar.com/multani0" class="url" rel="ugc external nofollow">Jonathan Ballet</a></b> <span class="says">says:</span> </div><!-- .comment-author -->
<div class="comment-metadata">
<a href="https://zwischenzugs.wordpress.com/2017/04/04/things-i-learned-managing-site-reliability-for-some-of-the-worlds-busiest-gambling-sites/#comment-758"><time datetime="2017-04-10T09:16:03+01:00">April 10, 2017 at 9:16 am</time></a> </div><!-- .comment-metadata -->
</footer><!-- .comment-meta -->
<div class="comment-content">
<p>I certainly wouldn&#8217;t mind a response as good as this article in its own dedicated article :D</p>
</div><!-- .comment-content -->
</article><!-- .comment-body -->
</li><!-- #comment-## -->
<li id="comment-759" class="comment odd alt depth-3">
<article id="div-comment-759" class="comment-body">
<footer class="comment-meta">
<div class="comment-author vcard">
<img referrerpolicy="no-referrer" alt='Chris Trotter&#039;s avatar' src='https://0.gravatar.com/avatar/0e452e4b26583ee3911d4bb4c07f0eea0ddae371af97366e89bb901012f4adb8?s=48&#038;d=identicon&#038;r=G' srcset='https://0.gravatar.com/avatar/0e452e4b26583ee3911d4bb4c07f0eea0ddae371af97366e89bb901012f4adb8?s=48&#038;d=identicon&#038;r=G 1x, https://0.gravatar.com/avatar/0e452e4b26583ee3911d4bb4c07f0eea0ddae371af97366e89bb901012f4adb8?s=72&#038;d=identicon&#038;r=G 1.5x, https://0.gravatar.com/avatar/0e452e4b26583ee3911d4bb4c07f0eea0ddae371af97366e89bb901012f4adb8?s=96&#038;d=identicon&#038;r=G 2x, https://0.gravatar.com/avatar/0e452e4b26583ee3911d4bb4c07f0eea0ddae371af97366e89bb901012f4adb8?s=144&#038;d=identicon&#038;r=G 3x, https://0.gravatar.com/avatar/0e452e4b26583ee3911d4bb4c07f0eea0ddae371af97366e89bb901012f4adb8?s=192&#038;d=identicon&#038;r=G 4x' class='avatar avatar-48' height='48' width='48' loading='lazy' decoding='async' /> <b class="fn"><a href="http://blog.practicaltech.ca" class="url" rel="ugc external nofollow">Chris Trotter</a></b> <span class="says">says:</span> </div><!-- .comment-author -->
<div class="comment-metadata">
<a href="https://zwischenzugs.wordpress.com/2017/04/04/things-i-learned-managing-site-reliability-for-some-of-the-worlds-busiest-gambling-sites/#comment-759"><time datetime="2017-04-10T13:14:55+01:00">April 10, 2017 at 1:14 pm</time></a> </div><!-- .comment-metadata -->
</footer><!-- .comment-meta -->
<div class="comment-content">
<p>Also would love to hear more on this. I get a lot of pushback when talking about the importance of culture &#8211; a success story is always worth sharing. :) Thanks so much for taking the time to write out your thoughts.</p>
</div><!-- .comment-content -->
</article><!-- .comment-body -->
</li><!-- #comment-## -->
</ol><!-- .children -->
</li><!-- #comment-## -->
</ol><!-- .children -->
</li><!-- #comment-## -->
<li id="comment-755" class="pingback even thread-even depth-1">
<div class="comment-body">
Pingback: <a href="http://sreweekly.com/sre-weekly-issue-67/" class="url" rel="ugc external nofollow">SRE Weekly Issue #67 &#8211; SRE WEEKLY</a> </div>
</li><!-- #comment-## -->
<li id="comment-761" class="pingback odd alt thread-odd thread-alt depth-1">
<div class="comment-body">
Pingback: <a href="https://zwischenzugs.wordpress.com/2017/04/11/five-books-i-advise-every-devops-engineer-to-read/" class="url" rel="ugc">Five Books I Advise Every DevOps Engineer to Read | zwischenzugs</a> </div>
</li><!-- #comment-## -->
<li id="comment-783" class="pingback even thread-even depth-1">
<div class="comment-body">
Pingback: <a href="http://chris.cothrun.com/2017/05/01/bookmarks-for-may-1st-17/" class="url" rel="ugc external nofollow">Bookmarks for May 1st | Chris&#039;s Digital Detritus</a> </div>
</li><!-- #comment-## -->
<li id="comment-842" class="comment odd alt thread-odd thread-alt depth-1">
<article id="div-comment-842" class="comment-body">
<footer class="comment-meta">
<div class="comment-author vcard">
<img referrerpolicy="no-referrer" alt='silvermachine&#039;s avatar' src='https://1.gravatar.com/avatar/a2ce1864396952052544d80af4022f564aef4a68b5be4ef86e8ee16561b7a700?s=48&#038;d=identicon&#038;r=G' srcset='https://1.gravatar.com/avatar/a2ce1864396952052544d80af4022f564aef4a68b5be4ef86e8ee16561b7a700?s=48&#038;d=identicon&#038;r=G 1x, https://1.gravatar.com/avatar/a2ce1864396952052544d80af4022f564aef4a68b5be4ef86e8ee16561b7a700?s=72&#038;d=identicon&#038;r=G 1.5x, https://1.gravatar.com/avatar/a2ce1864396952052544d80af4022f564aef4a68b5be4ef86e8ee16561b7a700?s=96&#038;d=identicon&#038;r=G 2x, https://1.gravatar.com/avatar/a2ce1864396952052544d80af4022f564aef4a68b5be4ef86e8ee16561b7a700?s=144&#038;d=identicon&#038;r=G 3x, https://1.gravatar.com/avatar/a2ce1864396952052544d80af4022f564aef4a68b5be4ef86e8ee16561b7a700?s=192&#038;d=identicon&#038;r=G 4x' class='avatar avatar-48' height='48' width='48' loading='lazy' decoding='async' /> <b class="fn"><a href="http://gravatar.com/silvermachine" class="url" rel="ugc external nofollow">silvermachine</a></b> <span class="says">says:</span> </div><!-- .comment-author -->
<div class="comment-metadata">
<a href="https://zwischenzugs.wordpress.com/2017/04/04/things-i-learned-managing-site-reliability-for-some-of-the-worlds-busiest-gambling-sites/#comment-842"><time datetime="2017-05-30T15:01:22+01:00">May 30, 2017 at 3:01 pm</time></a> </div><!-- .comment-metadata -->
</footer><!-- .comment-meta -->
<div class="comment-content">
<p>Do you have an example format for your KB/RunBook entries?</p>
</div><!-- .comment-content -->
<div class="reply"><a rel="nofollow" class="comment-reply-link" href="https://zwischenzugs.wordpress.com/2017/04/04/things-i-learned-managing-site-reliability-for-some-of-the-worlds-busiest-gambling-sites/?replytocom=842#respond" data-commentid="842" data-postid="2694" data-belowelement="div-comment-842" data-respondelement="respond" data-replyto="Reply to silvermachine" aria-label="Reply to silvermachine">Reply</a></div> </article><!-- .comment-body -->
</li><!-- #comment-## -->
<li id="comment-1402" class="pingback even thread-even depth-1">
<div class="comment-body">
Pingback: <a href="http://zwischenzugs.com/2017/12/03/how-i-manage-my-time/" class="url" rel="ugc external nofollow">How I Manage My Time &#8211; zwischenzugs</a> </div>
</li><!-- #comment-## -->
<li id="comment-1857" class="pingback odd alt thread-odd thread-alt depth-1">
<div class="comment-body">
Pingback: <a href="http://zwischenzugs.com/2018/02/24/5-things-i-did-to-change-a-teams-culture/" class="url" rel="ugc external nofollow">5 Things I Did to Change a Team&#8217;s Culture &#8211; zwischenzugs</a> </div>
</li><!-- #comment-## -->
<li id="comment-1862" class="pingback even thread-even depth-1">
<div class="comment-body">
Pingback: <a href="https://hckrnews.wordpress.com/2018/02/26/new-top-story-on-hacker-news-things-i-learned-managing-site-reliability-2017/" class="url" rel="ugc external nofollow">New top story on Hacker News: Things I Learned Managing Site Reliability (2017) &#8211; Tech + Hckr News</a> </div>
</li><!-- #comment-## -->
<li id="comment-1863" class="pingback odd alt thread-odd thread-alt depth-1">
<div class="comment-body">
Pingback: <a href="https://clusterassets.wordpress.com/2018/02/26/new-top-story-on-hacker-news-things-i-learned-managing-site-reliability-2017/" class="url" rel="ugc external nofollow">New top story on Hacker News: Things I Learned Managing Site Reliability (2017) &#8211; ÇlusterAssets Inc.,</a> </div>
</li><!-- #comment-## -->
<li id="comment-1864" class="pingback even thread-even depth-1">
<div class="comment-body">
Pingback: <a href="https://www.startupon.net/2018/02/26/things-i-realized-managing-space-reliability-for-a-pair-of-of-the-worlds-busiest-gambling-sites/" class="url" rel="ugc external nofollow">Things I Realized Managing Space Reliability for A pair of of the World’s Busiest Gambling Sites &#8211; Startupon.net</a> </div>
</li><!-- #comment-## -->
<li id="comment-3007" class="pingback odd alt thread-odd thread-alt depth-1">
<div class="comment-body">
Pingback: <a href="http://zwischenzugs.com/2018/10/02/why-are-enterprises-so-slow/" class="url" rel="ugc external nofollow">Why Are Enterprises So Slow? &#8211; zwischenzugs</a> </div>
</li><!-- #comment-## -->
<li id="comment-29676" class="pingback even thread-even depth-1">
<div class="comment-body">
Pingback: <a href="http://zwischenzugs.com/2019/11/06/why-everyone-working-in-devops-should-read-the-toyota-way/" class="url" rel="ugc external nofollow">Why Everyone Working in DevOps Should Read The Toyota Way &#8211; zwischenzugs</a> </div>
</li><!-- #comment-## -->
<li id="comment-62922" class="pingback odd alt thread-odd thread-alt depth-1">
<div class="comment-body">
Pingback: <a href="http://zwischenzugs.com/2020/06/25/the-runbooks-project/" class="url" rel="ugc external nofollow">The Runbooks Project &#8211; zwischenzugs</a> </div>
</li><!-- #comment-## -->
<li id="comment-116487" class="pingback even thread-even depth-1">
<div class="comment-body">
Pingback: <a href="http://zwischenzugs.com/2021/12/06/why-i-keep-coming-back-to-cynefin/" class="url" rel="ugc external nofollow">Why I Keep Coming Back to Cynefin &#8211; zwischenzugs</a> </div>
</li><!-- #comment-## -->
</ol><!-- .comment-list -->
<div id="respond" class="comment-respond">
<h3 id="reply-title" class="comment-reply-title">Leave a comment <small><a rel="nofollow" id="cancel-comment-reply-link" href="/2017/04/04/things-i-learned-managing-site-reliability-for-some-of-the-worlds-busiest-gambling-sites/#respond" style="display:none;">Cancel reply</a></small></h3><form action="https://zwischenzugs.wordpress.com/wp-comments-post.php" method="post" id="commentform" class="comment-form">
<div class="comment-form__verbum transparent"></div><div class="verbum-form-meta"><input type='hidden' name='comment_post_ID' value='2694' id='comment_post_ID' />
<input type='hidden' name='comment_parent' id='comment_parent' value='0' />
<input type="hidden" name="highlander_comment_nonce" id="highlander_comment_nonce" value="24086defa4" />
<input type="hidden" name="verbum_show_subscription_modal" value="" /></div><p style="display: none;"><input type="hidden" id="akismet_comment_nonce" name="akismet_comment_nonce" value="70713d51e9" /></p><p style="display: none !important;" class="akismet-fields-container" data-prefix="ak_"><label>&#916;<textarea name="ak_hp_textarea" cols="45" rows="8" maxlength="100"></textarea></label><input type="hidden" id="ak_js_1" name="ak_js" value="131"/><script>
document.getElementById( "ak_js_1" ).setAttribute( "value", ( new Date() ).getTime() );
</script>
</p></form> </div><!-- #respond -->
<p class="akismet_comment_form_privacy_notice">This site uses Akismet to reduce spam. <a href="https://akismet.com/privacy/" target="_blank" rel="nofollow noopener">Learn how your comment data is processed.</a></p>
</div><!-- #comments -->
</main><!-- #main -->
</div><!-- #primary -->
<div id="secondary" class="widget-area" role="complementary">
<aside id="top-posts-3" class="widget widget_top-posts"><h1 class="widget-title">Top Posts &amp; Pages</h1><ul><li><a href="https://zwischenzugs.wordpress.com/2025/07/12/im-writing-a-new-book/" class="bump-view" data-bump-view="tp">I&#039;m Writing a New Book!</a></li><li><a href="https://zwischenzugs.wordpress.com/2025/03/15/exploring-oscal-using-neo4j/" class="bump-view" data-bump-view="tp">Exploring OSCAL Using Neo4J</a></li><li><a href="https://zwischenzugs.wordpress.com/2024/07/16/does-crossplane-replace-terraform-part-i-the-theory/" class="bump-view" data-bump-view="tp">Does Crossplane Replace Terraform? Part I: the Theory</a></li><li><a href="https://zwischenzugs.wordpress.com/2024/07/05/in-praise-of-low-tech-devex/" class="bump-view" data-bump-view="tp">In Praise of Low Tech DevEx</a></li><li><a href="https://zwischenzugs.wordpress.com/2024/06/27/at-50-years-old-is-sql-becoming-a-niche-skill/" class="bump-view" data-bump-view="tp">At 50 Years Old, Is SQL Becoming a Niche Skill?</a></li><li><a href="https://zwischenzugs.wordpress.com/2024/06/18/ok-cloud-on-prem-is-alright/" class="bump-view" data-bump-view="tp">OK Cloud, On-Prem is Alright</a></li><li><a href="https://zwischenzugs.wordpress.com/2023/12/27/what-i-learned-using-private-llms-to-write-an-undergraduate-history-essay/" class="bump-view" data-bump-view="tp">What I Learned Using Private LLMs to Write an Undergraduate History Essay</a></li><li><a href="https://zwischenzugs.wordpress.com/2023/07/13/learn-jq-the-hard-waypart-iv-pipes/" class="bump-view" data-bump-view="tp">Learn jq the Hard Way,Part IV: Pipes</a></li><li><a href="https://zwischenzugs.wordpress.com/2023/06/27/learn-jq-the-hard-waypart-iii-filters/" class="bump-view" data-bump-view="tp">Learn jq the Hard Way,Part III: Filters</a></li><li><a href="https://zwischenzugs.wordpress.com/2023/06/27/learn-jq-the-hard-way-part-ii-the-jq-command/" class="bump-view" data-bump-view="tp">Learn jq the Hard Way, Part II: The jq Command</a></li></ul></aside>
<aside id="recent-posts-8" class="widget widget_recent_entries">
<h1 class="widget-title">Recent Posts</h1>
<ul>
<li>
<a href="https://zwischenzugs.wordpress.com/2025/07/12/im-writing-a-new-book/">I&#8217;m Writing a New&nbsp;Book!</a>
</li>
<li>
<a href="https://zwischenzugs.wordpress.com/2025/03/15/exploring-oscal-using-neo4j/">Exploring OSCAL Using&nbsp;Neo4J</a>
</li>
<li>
<a href="https://zwischenzugs.wordpress.com/2024/07/16/does-crossplane-replace-terraform-part-i-the-theory/">Does Crossplane Replace Terraform? Part I: the&nbsp;Theory</a>
</li>
<li>
<a href="https://zwischenzugs.wordpress.com/2024/07/05/in-praise-of-low-tech-devex/">In Praise of Low Tech&nbsp;DevEx</a>
</li>
<li>
<a href="https://zwischenzugs.wordpress.com/2024/06/27/at-50-years-old-is-sql-becoming-a-niche-skill/">At 50 Years Old, Is SQL Becoming a Niche&nbsp;Skill?</a>
</li>
<li>
<a href="https://zwischenzugs.wordpress.com/2024/06/18/ok-cloud-on-prem-is-alright/">OK Cloud, On-Prem is&nbsp;Alright</a>
</li>
<li>
<a href="https://zwischenzugs.wordpress.com/2023/12/27/what-i-learned-using-private-llms-to-write-an-undergraduate-history-essay/">What I Learned Using Private LLMs to Write an Undergraduate History&nbsp;Essay</a>
</li>
<li>
<a href="https://zwischenzugs.wordpress.com/2023/07/13/learn-jq-the-hard-waypart-iv-pipes/">Learn jq the Hard Way,Part IV:&nbsp;Pipes</a>
</li>
<li>
<a href="https://zwischenzugs.wordpress.com/2023/06/27/learn-jq-the-hard-waypart-iii-filters/">Learn jq the Hard Way,Part III:&nbsp;Filters</a>
</li>
<li>
<a href="https://zwischenzugs.wordpress.com/2023/06/27/learn-jq-the-hard-way-part-ii-the-jq-command/">Learn jq the Hard Way, Part II: The jq&nbsp;Command</a>
</li>
<li>
<a href="https://zwischenzugs.wordpress.com/2023/06/27/learn-jq-the-hard-way-part-i-json/">Learn jq the Hard Way, Part I:&nbsp;JSON</a>
</li>
<li>
<a href="https://zwischenzugs.wordpress.com/2023/06/04/monoliths-microservervices-and-mainframes-reflections-on-amazon-prime-videos-monolith-move/">Monoliths, Microservervices and Mainframes &#8211; Reflections on Amazon Prime Video’s Monolith&nbsp;Move</a>
</li>
<li>
<a href="https://zwischenzugs.wordpress.com/2023/04/27/is-it-imperative-to-be-declarative/">Is it Imperative to be&nbsp;Declarative?</a>
</li>
<li>
<a href="https://zwischenzugs.wordpress.com/2023/03/29/the-biggest-cloud-native-strategy-mistake/">The Biggest Cloud Native Strategy&nbsp;Mistake</a>
</li>
<li>
<a href="https://zwischenzugs.wordpress.com/2023/03/19/practical-strategies-for-implementing-devsecops-in-large-enterprises/">Practical Strategies for Implementing DevSecOps in Large&nbsp;Enterprises</a>
</li>
<li>
<a href="https://zwischenzugs.wordpress.com/2022/09/28/a-little-shell-rabbit-hole/">A Little Shell Rabbit&nbsp;Hole</a>
</li>
<li>
<a href="https://zwischenzugs.wordpress.com/2022/08/08/who-should-write-the-terraform/">&#8220;Who Should Write the Terraform?&#8221;</a>
</li>
<li>
<a href="https://zwischenzugs.wordpress.com/2022/05/29/business-value-management-autonomy-and-engineer-retention/">Business Value, Soccer Canteens, Engineer Retention, and the Bricklayer&nbsp;Fallacy</a>
</li>
<li>
<a href="https://zwischenzugs.wordpress.com/2022/04/05/five-reasons-to-master-git-on-the-command-line/">Five Reasons To Master Git On The Command&nbsp;Line</a>
</li>
<li>
<a href="https://zwischenzugs.wordpress.com/2022/03/13/how-3d-printing-kindled-a-love-for-baroque-sculpture/">How 3D Printing Kindled A Love For Baroque&nbsp;Sculpture</a>
</li>
<li>
<a href="https://zwischenzugs.wordpress.com/2022/02/02/grep-flags-the-good-stuff/">grep Flags &#8211; The Good&nbsp;Stuff</a>
</li>
<li>
<a href="https://zwischenzugs.wordpress.com/2022/01/17/why-its-great-to-be-a-consultant/">Why It&#8217;s Great To Be A&nbsp;Consultant</a>
</li>
<li>
<a href="https://zwischenzugs.wordpress.com/2022/01/04/practical-shell-patterns-i-actually-use/">Practical Shell Patterns I Actually&nbsp;Use</a>
</li>
<li>
<a href="https://zwischenzugs.wordpress.com/2021/12/06/why-i-keep-coming-back-to-cynefin/">Why I Keep Coming Back to&nbsp;Cynefin</a>
</li>
<li>
<a href="https://zwischenzugs.wordpress.com/2021/10/18/is-agility-related-to-commitment-money-flows-part-ii/">Is Agility Related to Commitment? &#8211; Money Flows Part&nbsp;II</a>
</li>
<li>
<a href="https://zwischenzugs.wordpress.com/2021/08/27/five-ansible-techniques-i-wish-id-known-earlier/">Five Ansible Techniques I Wish I&#8217;d Known&nbsp;Earlier</a>
</li>
<li>
<a href="https://zwischenzugs.wordpress.com/2021/07/31/a-hello-world-gitops-example-walkthrough/">A &#8216;Hello World&#8217; GitOps Example&nbsp;Walkthrough</a>
</li>
<li>
<a href="https://zwischenzugs.wordpress.com/2021/07/12/if-you-want-to-transform-it-start-with-finance/">If You Want To Transform IT, Start With&nbsp;Finance</a>
</li>
<li>
<a href="https://zwischenzugs.wordpress.com/2021/04/16/how-to-waste-hundreds-of-millions-on-your-it-transformation/">How To Waste Hundreds of Millions on Your IT&nbsp;Transformation</a>
</li>
<li>
<a href="https://zwischenzugs.wordpress.com/2021/03/15/when-should-i-interrupt-someone/">When Should I Interrupt&nbsp;Someone?</a>
</li>
<li>
<a href="https://zwischenzugs.wordpress.com/2021/02/21/an-incompetent-newbie-takes-up-3d-printing/">An Incompetent Newbie Takes Up 3D&nbsp;Printing</a>
</li>
<li>
<a href="https://zwischenzugs.wordpress.com/2020/11/30/gitops-decisions/">GitOps Decisions</a>
</li>
<li>
<a href="https://zwischenzugs.wordpress.com/2020/09/10/five-ways-to-undo-a-commit-in-git/">Five Ways to Undo a Commit in&nbsp;Git</a>
</li>
<li>
<a href="https://zwischenzugs.wordpress.com/2020/07/25/the-halving-of-the-centre-covid-and-its-effect-on-london-property/">The Halving of the Centre: Covid and its Effect on London&nbsp;Property</a>
</li>
<li>
<a href="https://zwischenzugs.wordpress.com/2020/07/13/why-do-we-have-dev-rels-now/">Why Do We Have Dev Rels&nbsp;Now?</a>
</li>
<li>
<a href="https://zwischenzugs.wordpress.com/2020/06/25/the-runbooks-project/">The Runbooks Project</a>
</li>
<li>
<a href="https://zwischenzugs.wordpress.com/2020/05/09/some-relatively-obscure-bash-tips/">Some Relatively Obscure Bash&nbsp;Tips</a>
</li>
<li>
<a href="https://zwischenzugs.wordpress.com/2020/05/05/riding-the-tiger-lessons-learned-implementing-istio/">Riding the Tiger: Lessons Learned Implementing&nbsp;Istio</a>
</li>
<li>
<a href="https://zwischenzugs.wordpress.com/2020/01/04/the-astonishing-prescience-of-nam-june-paik/">The Astonishing Prescience of Nam June&nbsp;Paik</a>
</li>
<li>
<a href="https://zwischenzugs.wordpress.com/2020/01/01/notes-on-books-read-in-2019/">Notes on Books Read in&nbsp;2019</a>
</li>
<li>
<a href="https://zwischenzugs.wordpress.com/2019/11/27/the-first-non-bullshit-book-about-culture-ive-read/">The First Non-Bullshit Book About Culture I&#8217;ve&nbsp;Read</a>
</li>
<li>
<a href="https://zwischenzugs.wordpress.com/2019/11/06/why-everyone-working-in-devops-should-read-the-toyota-way/">Why Everyone Working in DevOps Should Read The Toyota&nbsp;Way</a>
</li>
<li>
<a href="https://zwischenzugs.wordpress.com/2019/09/27/surgically-busting-the-docker-cache/">Surgically Busting the Docker&nbsp;Cache</a>
</li>
<li>
<a href="https://zwischenzugs.wordpress.com/2019/09/22/software-security-field-guide-for-the-bewildered/">Software Security Field Guide for the&nbsp;Bewildered</a>
</li>
<li>
<a href="https://zwischenzugs.wordpress.com/2019/09/04/the-lazy-persons-guide-to-the-info-command/">The Lazy Person&#8217;s Guide to the Info&nbsp;Command</a>
</li>
<li>
<a href="https://zwischenzugs.wordpress.com/2019/08/30/a-hot-take-on-github-actions/">A Hot Take on GitHub&nbsp;Actions</a>
</li>
<li>
<a href="https://zwischenzugs.wordpress.com/2019/08/25/seven-god-like-bash-history-shortcuts-you-will-actually-use/">Seven God-Like Bash History Shortcuts You Will Actually&nbsp;Use</a>
</li>
<li>
<a href="https://zwischenzugs.wordpress.com/2019/08/15/how-long-will-it-take-for-the-leavers-to-leave/">How Long Will It Take For The Leavers To&nbsp;Leave?</a>
</li>
<li>
<a href="https://zwischenzugs.wordpress.com/2019/07/27/goodbye-docker-purging-is-such-sweet-sorrow/">Goodbye Docker: Purging is Such Sweet&nbsp;Sorrow</a>
</li>
<li>
<a href="https://zwischenzugs.wordpress.com/2019/05/11/seven-surprising-bash-variables/">Seven Surprising Bash&nbsp;Variables</a>
</li>
<li>
<a href="https://zwischenzugs.wordpress.com/2019/04/23/the-missing-readline-primer/">The Missing Readline&nbsp;Primer</a>
</li>
<li>
<a href="https://zwischenzugs.wordpress.com/2019/04/12/apples-hq-ruskin-gothic-architecture-and-agile/">Apple&#8217;s HQ, Ruskin, Gothic Architecture, and&nbsp;Agile</a>
</li>
<li>
<a href="https://zwischenzugs.wordpress.com/2019/04/03/eight-obscure-bash-options-you-might-want-to-know-about/">Eight Obscure Bash Options You Might Want to Know&nbsp;About</a>
</li>
<li>
<a href="https://zwischenzugs.wordpress.com/2019/03/25/aws-vs-k8s-is-the-new-windows-vs-linux/">&#8216;AWS vs K8s&#8217; is the new &#8216;Windows vs&nbsp;Linux&#8217;</a>
</li>
<li>
<a href="https://zwischenzugs.wordpress.com/2019/03/16/pranking-the-bash-binary/">Pranking the Bash&nbsp;Binary</a>
</li>
<li>
<a href="https://zwischenzugs.wordpress.com/2019/02/27/bash-startup-explained/">Bash Startup Explained</a>
</li>
<li>
<a href="https://zwischenzugs.wordpress.com/2019/01/09/git-hooks-the-hard-way/">Git Hooks the Hard&nbsp;Way</a>
</li>
<li>
<a href="https://zwischenzugs.wordpress.com/2019/01/02/notes-on-books-read-in-2018/">Notes on Books Read in&nbsp;2018</a>
</li>
<li>
<a href="https://zwischenzugs.wordpress.com/2018/11/25/six-ways-to-level-up-your-nmap-game/">Six Ways to Level Up Your nmap&nbsp;Game</a>
</li>
<li>
<a href="https://zwischenzugs.wordpress.com/2018/10/30/five-things-i-wish-id-known-about-git/">Five Things I Wish I&#8217;d Known About&nbsp;Git</a>
</li>
<li>
<a href="https://zwischenzugs.wordpress.com/2018/10/12/eleven-bash-tips-you-might-want-to-know/">Eleven bash Tips You Might Want to&nbsp;Know</a>
</li>
<li>
<a href="https://zwischenzugs.wordpress.com/2018/10/09/learn-bash-debugging-techniques-the-hard-way/">Learn Bash Debugging Techniques the Hard&nbsp;Way</a>
</li>
<li>
<a href="https://zwischenzugs.wordpress.com/2018/10/02/why-are-enterprises-so-slow/">Why Are Enterprises So&nbsp;Slow?</a>
</li>
<li>
<a href="https://zwischenzugs.wordpress.com/2018/09/13/anatomy-of-a-linux-dns-lookup-part-v-two-debug-nightmares/">Anatomy of a Linux DNS Lookup &#8211; Part V &#8211; Two Debug&nbsp;Nightmares</a>
</li>
<li>
<a href="https://zwischenzugs.wordpress.com/2018/08/06/anatomy-of-a-linux-dns-lookup-part-iv/">Anatomy of a Linux DNS Lookup &#8211; Part&nbsp;IV</a>
</li>
<li>
<a href="https://zwischenzugs.wordpress.com/2018/07/06/anatomy-of-a-linux-dns-lookup-part-iii/">Anatomy of a Linux DNS Lookup &#8211; Part&nbsp;III</a>
</li>
<li>
<a href="https://zwischenzugs.wordpress.com/2018/06/18/anatomy-of-a-linux-dns-lookup-part-ii/">Anatomy of a Linux DNS Lookup &#8211; Part&nbsp;II</a>
</li>
<li>
<a href="https://zwischenzugs.wordpress.com/2018/06/08/anatomy-of-a-linux-dns-lookup-part-i/">Anatomy of a Linux DNS Lookup &#8211; Part&nbsp;I</a>
</li>
<li>
<a href="https://zwischenzugs.wordpress.com/2018/05/22/a-docker-image-in-less-than-1000-bytes/">A Docker Image in Less Than 1000&nbsp;Bytes</a>
</li>
<li>
<a href="https://zwischenzugs.wordpress.com/2018/05/21/autotrace-debug-on-steroids/">Autotrace &#8211; Debug on&nbsp;Steroids</a>
</li>
<li>
<a href="https://zwischenzugs.wordpress.com/2018/05/14/beyond-punk-rock-git-in-eleven-steps/">Beyond &#8216;Punk Rock Git&#8217; in Eleven&nbsp;Steps</a>
</li>
<li>
<a href="https://zwischenzugs.wordpress.com/2018/05/05/sandboxing-docker-with-googles-gvisor/">Sandboxing Docker with Google&#8217;s&nbsp;gVisor</a>
</li>
<li>
<a href="https://zwischenzugs.wordpress.com/2018/04/23/unprivileged-docker-builds-a-proof-of-concept/">Unprivileged Docker Builds &#8211; A Proof of&nbsp;Concept</a>
</li>
<li>
<a href="https://zwischenzugs.wordpress.com/2018/04/05/learn-git-rebase-interactively/">Learn Git Rebase&nbsp;Interactively</a>
</li>
<li>
<a href="https://zwischenzugs.wordpress.com/2018/03/27/terminal-perf-graphs-in-one-command/">Terminal Perf Graphs in one&nbsp;Command</a>
</li>
<li>
<a href="https://zwischenzugs.wordpress.com/2018/03/26/git-log-the-good-parts/">git log &#8211; the Good&nbsp;Parts</a>
</li>
<li>
<a href="https://zwischenzugs.wordpress.com/2018/03/14/five-key-git-concepts-explained-the-hard-way/">Five Key Git Concepts Explained the Hard&nbsp;Way</a>
</li>
<li>
<a href="https://zwischenzugs.wordpress.com/2018/03/08/create-your-own-git-diagrams/">Create Your Own Git&nbsp;Diagrams</a>
</li>
<li>
<a href="https://zwischenzugs.wordpress.com/2018/02/24/5-things-i-did-to-change-a-teams-culture/">Five Things I Did to Change a Team&#8217;s&nbsp;Culture</a>
</li>
<li>
<a href="https://zwischenzugs.wordpress.com/2018/02/05/centralise-your-bash-history/">Centralise Your Bash&nbsp;History</a>
</li>
<li>
<a href="https://zwischenzugs.wordpress.com/2018/01/26/how-and-why-i-run-my-own-dns-servers/">How (and Why) I Run My Own DNS&nbsp;Servers</a>
</li>
<li>
<a href="https://zwischenzugs.wordpress.com/2018/01/21/ten-more-things-i-wish-id-known-about-bash/">Ten More Things I Wish I&#039;d Known About&nbsp;bash</a>
</li>
<li>
<a href="https://zwischenzugs.wordpress.com/2018/01/18/download-a-free-sample-of-learn-bash-the-hard-way/">Download a Free Sample of Learn Bash the Hard&nbsp;Way</a>
</li>
<li>
<a href="https://zwischenzugs.wordpress.com/2018/01/06/ten-things-i-wish-id-known-about-bash/">Ten Things I Wish I&#8217;d Known About&nbsp;bash</a>
</li>
<li>
<a href="https://zwischenzugs.wordpress.com/2017/12/18/project-management-as-code-with-graphviz/">Project Management as Code with&nbsp;Graphviz</a>
</li>
<li>
<a href="https://zwischenzugs.wordpress.com/2017/12/11/how-to-manually-clear-locks-in-jenkins/">How to Manually Clear Locks in&nbsp;Jenkins</a>
</li>
<li>
<a href="https://zwischenzugs.wordpress.com/2017/12/03/how-i-manage-my-time/">How I Manage My&nbsp;Time</a>
</li>
<li>
<a href="https://zwischenzugs.wordpress.com/2017/11/25/ten-things-i-wish-id-known-about-chef/">Ten Things I Wish I&#8217;d Known About&nbsp;Chef</a>
</li>
<li>
<a href="https://zwischenzugs.wordpress.com/2017/11/18/__trashed-4/">Vagrant and Ohai / Chef IP Address&nbsp;Hack</a>
</li>
<li>
<a href="https://zwischenzugs.wordpress.com/2017/11/11/towards-a-national-computer-grid-electronic-computers-1965/">&#8216;Towards a National Computer Grid&#8217; &#8211; Electronic Computers,&nbsp;1965</a>
</li>
<li>
<a href="https://zwischenzugs.wordpress.com/2017/10/31/a-complete-chef-infrastructure-on-your-laptop/">A Complete Chef Infrastructure on Your&nbsp;Laptop</a>
</li>
<li>
<a href="https://zwischenzugs.wordpress.com/2017/10/27/ten-things-i-wish-id-known-before-using-vagrant/">Ten Things I Wish I&#8217;d Known Before Using&nbsp;Vagrant</a>
</li>
<li>
<a href="https://zwischenzugs.wordpress.com/2017/10/23/a-checklist-for-docker-in-the-enterprise-updated/">A Checklist for Docker in the Enterprise&nbsp;(Updated)</a>
</li>
<li>
<a href="https://zwischenzugs.wordpress.com/2017/10/21/openshift-3-6-dns-in-pictures/">OpenShift 3.6 DNS In&nbsp;Pictures</a>
</li>
<li>
<a href="https://zwischenzugs.wordpress.com/2017/10/16/puppeteer-headless-chrome-in-a-container/">Puppeteer &#8211; Headless Chrome in a&nbsp;Container</a>
</li>
<li>
<a href="https://zwischenzugs.wordpress.com/2017/10/15/my-20-year-experience-of-software-development-methodologies/">My 20-Year Experience of Software Development&nbsp;Methodologies</a>
</li>
<li>
<a href="https://zwischenzugs.wordpress.com/2017/08/07/a-non-cloud-serverless-application-pattern-using-git-and-docker/">A Non-Cloud Serverless Application Pattern Using Git and&nbsp;Docker</a>
</li>
<li>
<a href="https://zwischenzugs.wordpress.com/2017/07/31/run-your-own-aws-apis-on-openshift/">Run Your Own AWS APIs on&nbsp;OpenShift</a>
</li>
<li>
<a href="https://zwischenzugs.wordpress.com/2017/07/15/dockerized-headless-chrome-example/">Dockerized Headless Chrome&nbsp;Example</a>
</li>
<li>
<a href="https://zwischenzugs.wordpress.com/2017/06/18/convert-any-server-to-a-docker-container-update-ii/">Convert a Server to a Docker Container (Update&nbsp;II)</a>
</li>
<li>
<a href="https://zwischenzugs.wordpress.com/2017/05/06/automating-dockerized-jenkins-upgrades/">Automating Dockerized Jenkins&nbsp;Upgrades</a>
</li>
<li>
<a href="https://zwischenzugs.wordpress.com/2017/04/23/things-i-wish-i-knew-before-using-jenkins-pipelines/">Ten Things I Wish I&#8217;d Known Before Using Jenkins&nbsp;Pipelines</a>
</li>
<li>
<a href="https://zwischenzugs.wordpress.com/2017/04/11/five-books-i-advise-every-devops-engineer-to-read/">Five Books I Advise Every DevOps Engineer to&nbsp;Read</a>
</li>
<li>
<a href="https://zwischenzugs.wordpress.com/2017/04/04/things-i-learned-managing-site-reliability-for-some-of-the-worlds-busiest-gambling-sites/" aria-current="page">Things I Learned Managing Site Reliability for Some of the World&#8217;s Busiest Gambling&nbsp;Sites</a>
</li>
<li>
<a href="https://zwischenzugs.wordpress.com/2017/03/18/clustered-vm-testing-how-to/">Clustered VM Testing&nbsp;How-To</a>
</li>
<li>
<a href="https://zwischenzugs.wordpress.com/2017/03/04/easy-shell-automation/">Easy Shell Automation</a>
</li>
<li>
<a href="https://zwischenzugs.wordpress.com/2017/03/04/1-minute-multi-node-vm-setup/">1-Minute Multi-Node VM Setup</a>
</li>
<li>
<a href="https://zwischenzugs.wordpress.com/2017/03/04/migrating-an-openshift-etcd-cluster/">Migrating an OpenShift etcd&nbsp;Cluster</a>
</li>
<li>
<a href="https://zwischenzugs.wordpress.com/2017/03/04/a-complete-openshift-cluster-on-vagrant-step-by-step/">A Complete OpenShift Cluster on Vagrant, Step by&nbsp;Step</a>
</li>
<li>
<a href="https://zwischenzugs.wordpress.com/2017/03/04/learn-kubernetes-the-hard-way-the-easy-and-cheap-way/">Learn Kubernetes the Hard Way (the Easy and Cheap&nbsp;Way)</a>
</li>
<li>
<a href="https://zwischenzugs.wordpress.com/2017/03/04/docker-in-the-enterprise/">Docker in the&nbsp;Enterprise</a>
</li>
<li>
<a href="https://zwischenzugs.wordpress.com/2017/02/21/terraform-and-dynamic-environments/">Terraform and Dynamic&nbsp;Environments</a>
</li>
<li>
<a href="https://zwischenzugs.wordpress.com/2016/08/29/bash-to-python-converter/">Bash to Python&nbsp;Converter</a>
</li>
<li>
<a href="https://zwischenzugs.wordpress.com/2016/07/22/hello-world-unikernel-walkthrough/">Hello world Unikernel&nbsp;Walkthrough</a>
</li>
<li>
<a href="https://zwischenzugs.wordpress.com/2016/07/08/a-checklist-for-docker-in-the-enterprise/">A checklist for Docker in the&nbsp;Enterprise</a>
</li>
<li>
<a href="https://zwischenzugs.wordpress.com/2016/06/23/a-quick-tour-of-docker-1-12/">A Quick Tour of Docker&nbsp;1.12</a>
</li>
<li>
<a href="https://zwischenzugs.wordpress.com/2016/06/04/power-git-log-graphing/">Power &#8216;git log&#8217;&nbsp;graphing</a>
</li>
<li>
<a href="https://zwischenzugs.wordpress.com/2016/05/21/ssh-r-reverse-tunnel-man-page-hell/">ssh -R (reverse tunnel) man page&nbsp;hell</a>
</li>
<li>
<a href="https://zwischenzugs.wordpress.com/2016/05/15/writing-a-technical-book/">Writing a Technical&nbsp;Book</a>
</li>
<li>
<a href="https://zwischenzugs.wordpress.com/2016/04/24/interactive-git-tutorials-rebase-and-bisect/">Interactive Git Tutorials &#8211; Rebase and&nbsp;Bisect</a>
</li>
<li>
<a href="https://zwischenzugs.wordpress.com/2016/04/12/hitler-uses-docker-annotated/">Hitler Uses Docker,&nbsp;Annotated</a>
</li>
<li>
<a href="https://zwischenzugs.wordpress.com/2016/04/05/linux-scales/">Linux Scales</a>
</li>
<li>
<a href="https://zwischenzugs.wordpress.com/2016/04/05/play-with-kubernetes-quickly-using-docker-updated/">Play With Kubernetes Quickly Using Docker&nbsp;(Updated)</a>
</li>
<li>
<a href="https://zwischenzugs.wordpress.com/2016/04/04/convert-any-server-to-a-docker-container-updated/">Convert Any Server to a Docker Container&nbsp;(Updated)</a>
</li>
<li>
<a href="https://zwischenzugs.wordpress.com/2016/02/25/922/">CI as Code Part III: Dynamic Jenkins-Swarm&nbsp;Example</a>
</li>
<li>
<a href="https://zwischenzugs.wordpress.com/2016/02/06/docker-1-10-highlights/">Docker 1.10 Highlights &#8211;&nbsp;Updated</a>
</li>
<li>
<a href="https://zwischenzugs.wordpress.com/2016/01/30/ci-as-code-part-ii-stateless-jenkins-with-dynamic-docker-slaves/">CI as Code Part II: Stateless Jenkins With Dynamic Docker&nbsp;Slaves</a>
</li>
<li>
<a href="https://zwischenzugs.wordpress.com/2016/01/24/ci-as-code-stateless-jenkins-deployments-using-docker/">CI as Code Part I: Stateless Jenkins Deployments Using&nbsp;Docker</a>
</li>
<li>
<a href="https://zwischenzugs.wordpress.com/2015/12/22/docker-ecosystem-rosetta-stones/">Docker Ecosystem Rosetta&nbsp;Stones</a>
</li>
<li>
<a href="https://zwischenzugs.wordpress.com/2015/12/17/understanding-docker-a-tour-of-logical-volume-management/">Understanding Docker &#8211; A Tour of Logical Volume&nbsp;Management</a>
</li>
<li>
<a href="https://zwischenzugs.wordpress.com/2015/12/17/888/">Automating Docker Security&nbsp;Validation</a>
</li>
<li>
<a href="https://zwischenzugs.wordpress.com/2015/11/26/the-it-crowd-was-right-what-i-learned-by-reading-a-lot-of-rfcs/">The IT Crowd Was Right &#8211; What I learned by reading a lot of&nbsp;RFCs</a>
</li>
<li>
<a href="https://zwischenzugs.wordpress.com/2015/11/21/understanding-docker-network-namespaces/">Understanding Docker &#8211; Network&nbsp;Namespaces</a>
</li>
<li>
<a href="https://zwischenzugs.wordpress.com/2015/11/17/dockerconeu-2015-talk-you-know-more-than-you-think/">DockerConEU 2015 Talk &#8211; You Know More Than You&nbsp;Think</a>
</li>
<li>
<a href="https://zwischenzugs.wordpress.com/2015/10/11/docker-migration-in-flight-criu/">Docker Migration In-Flight&nbsp;CRIU</a>
</li>
<li>
<a href="https://zwischenzugs.wordpress.com/2015/08/26/a-high-availability-phoenix-and-ab-deployment-framework-using-docker/">A High Availability Phoenix and A/B Deployment Framework using&nbsp;Docker</a>
</li>
<li>
<a href="https://zwischenzugs.wordpress.com/2015/08/06/quick-intro-to-kubernetes/">Quick Intro to&nbsp;Kubernetes</a>
</li>
<li>
<a href="https://zwischenzugs.wordpress.com/2015/07/18/take-openshift-for-a-spin-in-four-commands/">Take OpenShift for a spin in four&nbsp;commands</a>
</li>
<li>
<a href="https://zwischenzugs.wordpress.com/2015/07/04/redhats-docker-build-method-s2i-2/">RedHat&#039;s Docker Build Method &#8211;&nbsp;S2I</a>
</li>
<li>
<a href="https://zwischenzugs.wordpress.com/2015/07/04/redhats-docker-build-method-s2i/">RedHat&#8217;s Docker Build Method &#8211;&nbsp;S2I</a>
</li>
<li>
<a href="https://zwischenzugs.wordpress.com/2015/07/01/bash-shortcuts-gem/">Bash Shortcuts Gem</a>
</li>
<li>
<a href="https://zwischenzugs.wordpress.com/2015/06/28/a-coreos-cluster-in-two-minutes-with-four-commands/">A CoreOS Cluster in Two Minutes With Four&nbsp;Commands</a>
</li>
<li>
<a href="https://zwischenzugs.wordpress.com/2015/06/24/the-most-pointless-docker-command-ever/">The Most Pointless Docker Command&nbsp;Ever</a>
</li>
<li>
<a href="https://zwischenzugs.wordpress.com/2015/06/14/my-favourite-docker-tip/">My Favourite Docker&nbsp;Tip</a>
</li>
<li>
<a href="https://zwischenzugs.wordpress.com/2015/05/21/a-field-guide-to-docker-security-measures/">A Field Guide to Docker Security&nbsp;Measures</a>
</li>
<li>
<a href="https://zwischenzugs.wordpress.com/2015/04/29/docker-selinux-experimentation-with-reduced-pain/">Docker SELinux Experimentation with Reduced&nbsp;Pain</a>
</li>
<li>
<a href="https://zwischenzugs.wordpress.com/2015/04/20/storage-drivers-and-docker/">Storage Drivers and&nbsp;Docker</a>
</li>
<li>
<a href="https://zwischenzugs.wordpress.com/2015/04/06/play-with-kubernetes-quickly-using-docker/">Play With Kubernetes Quickly Using&nbsp;Docker</a>
</li>
<li>
<a href="https://zwischenzugs.wordpress.com/2015/04/01/play-with-an-openshift-paas-using-docker/">Play with an OpenShift PaaS using&nbsp;Docker</a>
</li>
<li>
<a href="https://zwischenzugs.wordpress.com/2015/03/19/scale-your-jenkins-compute-with-your-dev-team-use-docker-and-jenkins-swarm/">Scale Your Jenkins Compute With Your Dev Team: Use Docker and Jenkins&nbsp;Swarm</a>
</li>
</ul>
</aside><aside id="follow_button_widget-5" class="widget widget_follow_button_widget">
<a class="wordpress-follow-button" href="https://zwischenzugs.wordpress.com" data-blog="20870870" data-lang="en" >Follow zwischenzugs on WordPress.com</a>
<script type="text/javascript">(function(d){ window.wpcomPlatform = {"titles":{"timelines":"Embeddable Timelines","followButton":"Follow Button","wpEmbeds":"WordPress Embeds"}}; var f = d.getElementsByTagName('SCRIPT')[0], p = d.createElement('SCRIPT');p.type = 'text/javascript';p.async = true;p.src = '//widgets.wp.com/platform.js';f.parentNode.insertBefore(p,f);}(document));</script>
</aside></div><!-- #secondary -->
</div><!-- #content -->
<footer id="colophon" class="site-footer" role="contentinfo">
<div class="site-info">
<a href="https://wordpress.com/?ref=footer_custom_com" rel="nofollow">Website Built with WordPress.com</a>.
</div><!-- .site-info -->
</footer><!-- #colophon -->
</div><!-- #content-wrapper -->
</div><!-- #page -->
<!-- -->
<script type="speculationrules">
{"prefetch":[{"source":"document","where":{"and":[{"href_matches":"/*"},{"not":{"href_matches":["/wp-*.php","/wp-admin/*","/files/*","/wp-content/*","/wp-content/plugins/*","/wp-content/themes/pub/independent-publisher-2/*","/*\\?(.+)"]}},{"not":{"selector_matches":"a[rel~=\"nofollow\"]"}},{"not":{"selector_matches":".no-prefetch, .no-prefetch a"}}]},"eagerness":"conservative"}]}
</script>
<script id="grofiles-cards-js" src="//0.gravatar.com/js/hovercards/hovercards.min.js?ver=202637d1133547e8a1f2801609f51cef12522abe7f6647d869e9fbc974fe356a37e613"></script>
<script id="wpgroho-js-extra">
var WPGroHo = {"my_hash":""};
//# sourceURL=wpgroho-js-extra
</script>
<script crossorigin='anonymous' type='text/javascript' src='/wp-content/mu-plugins/gravatar-hovercards/wpgroho.js?m=1610363240i'></script>
<script>
// Initialize and attach hovercards to all gravatars
( function() {
function init() {
if ( typeof Gravatar === 'undefined' ) {
return;
}
if ( typeof Gravatar.init !== 'function' ) {
return;
}
Gravatar.profile_cb = function ( hash, id ) {
WPGroHo.syncProfileData( hash, id );
};
Gravatar.my_hash = WPGroHo.my_hash;
Gravatar.init(
'body',
'#wp-admin-bar-my-account',
{
i18n: {
'Edit your profile →': 'Edit your profile →',
'View profile →': 'View profile →',
'Contact': 'Contact',
'Send money': 'Send money',
'Sorry, we are unable to load this Gravatar profile.': 'Sorry, we are unable to load this Gravatar profile.',
'Gravatar not found.': 'Gravatar not found.',
'Too Many Requests.': 'Too Many Requests.',
'Internal Server Error.': 'Internal Server Error.',
'Is this you?': 'Is this you?',
'Claim your free profile.': 'Claim your free profile.',
'Email': 'Email',
'Home Phone': 'Home Phone',
'Work Phone': 'Work Phone',
'Cell Phone': 'Cell Phone',
'Contact Form': 'Contact Form',
'Calendar': 'Calendar',
},
}
);
}
if ( document.readyState !== 'loading' ) {
init();
} else {
document.addEventListener( 'DOMContentLoaded', init );
}
} )();
</script>
<div style="display:none">
<div class="grofile-hash-map-4f37af910d4d089ee4a4b5d4782ca78e">
</div>
<div class="grofile-hash-map-da7b439956d8f5f03c343beec9c454aa">
</div>
<div class="grofile-hash-map-372ef863ecf6055408d4e09eda8e63b6">
</div>
<div class="grofile-hash-map-d20fb28c1749e6154e2df58785f9a4a0">
</div>
<div class="grofile-hash-map-4f37af910d4d089ee4a4b5d4782ca78e">
</div>
<div class="grofile-hash-map-13789173efc8ea92ddd65b23535937d4">
</div>
<div class="grofile-hash-map-e8baf9035cb4bfe31b743934f1881e26">
</div>
<div class="grofile-hash-map-1f43981ee22d54effaf9965646659691">
</div>
</div>
<!-- CCPA [start] -->
<script type="text/javascript">
( function () {
var setupPrivacy = function() {
// Minimal Mozilla Cookie library
// https://developer.mozilla.org/en-US/docs/Web/API/Document/cookie/Simple_document.cookie_framework
var cookieLib = window.cookieLib = {getItem:function(e){return e&&decodeURIComponent(document.cookie.replace(new RegExp("(?:(?:^|.*;)\\s*"+encodeURIComponent(e).replace(/[\-\.\+\*]/g,"\\$&")+"\\s*\\=\\s*([^;]*).*$)|^.*$"),"$1"))||null},setItem:function(e,o,n,t,r,i){if(!e||/^(?:expires|max\-age|path|domain|secure)$/i.test(e))return!1;var c="";if(n)switch(n.constructor){case Number:c=n===1/0?"; expires=Fri, 31 Dec 9999 23:59:59 GMT":"; max-age="+n;break;case String:c="; expires="+n;break;case Date:c="; expires="+n.toUTCString()}return"rootDomain"!==r&&".rootDomain"!==r||(r=(".rootDomain"===r?".":"")+document.location.hostname.split(".").slice(-2).join(".")),document.cookie=encodeURIComponent(e)+"="+encodeURIComponent(o)+c+(r?"; domain="+r:"")+(t?"; path="+t:"")+(i?"; secure":""),!0}};
// Implement IAB USP API.
window.__uspapi = function( command, version, callback ) {
// Validate callback.
if ( typeof callback !== 'function' ) {
return;
}
// Validate the given command.
if ( command !== 'getUSPData' || version !== 1 ) {
callback( null, false );
return;
}
// Check for GPC. If set, override any stored cookie.
if ( navigator.globalPrivacyControl ) {
callback( { version: 1, uspString: '1YYN' }, true );
return;
}
// Check for cookie.
var consent = cookieLib.getItem( 'usprivacy' );
// Invalid cookie.
if ( null === consent ) {
callback( null, false );
return;
}
// Everything checks out. Fire the provided callback with the consent data.
callback( { version: 1, uspString: consent }, true );
};
// Initialization.
document.addEventListener( 'DOMContentLoaded', function() {
// Internal functions.
var setDefaultOptInCookie = function() {
var value = '1YNN';
var domain = '.wordpress.com' === location.hostname.slice( -14 ) ? '.rootDomain' : location.hostname;
cookieLib.setItem( 'usprivacy', value, 365 * 24 * 60 * 60, '/', domain );
};
var setDefaultOptOutCookie = function() {
var value = '1YYN';
var domain = '.wordpress.com' === location.hostname.slice( -14 ) ? '.rootDomain' : location.hostname;
cookieLib.setItem( 'usprivacy', value, 24 * 60 * 60, '/', domain );
};
var setDefaultNotApplicableCookie = function() {
var value = '1---';
var domain = '.wordpress.com' === location.hostname.slice( -14 ) ? '.rootDomain' : location.hostname;
cookieLib.setItem( 'usprivacy', value, 24 * 60 * 60, '/', domain );
};
var setCcpaAppliesCookie = function( applies ) {
var domain = '.wordpress.com' === location.hostname.slice( -14 ) ? '.rootDomain' : location.hostname;
cookieLib.setItem( 'ccpa_applies', applies, 24 * 60 * 60, '/', domain );
}
var maybeCallDoNotSellCallback = function() {
if ( 'function' === typeof window.doNotSellCallback ) {
return window.doNotSellCallback();
}
return false;
}
// Look for usprivacy cookie first.
var usprivacyCookie = cookieLib.getItem( 'usprivacy' );
// Found a usprivacy cookie.
if ( null !== usprivacyCookie ) {
// If the cookie indicates that CCPA does not apply, then bail.
if ( '1---' === usprivacyCookie ) {
return;
}
// CCPA applies, so call our callback to add Do Not Sell link to the page.
maybeCallDoNotSellCallback();
// We're all done, no more processing needed.
return;
}
// We don't have a usprivacy cookie, so check to see if we have a CCPA applies cookie.
var ccpaCookie = cookieLib.getItem( 'ccpa_applies' );
// No CCPA applies cookie found, so we'll need to geolocate if this visitor is from California.
// This needs to happen client side because we do not have region geo data in our $SERVER headers,
// only country data -- therefore we can't vary cache on the region.
if ( null === ccpaCookie ) {
var request = new XMLHttpRequest();
request.open( 'GET', 'https://public-api.wordpress.com/geo/', true );
request.onreadystatechange = function () {
if ( 4 === this.readyState ) {
if ( 200 === this.status ) {
// Got a geo response. Parse out the region data.
var data = JSON.parse( this.response );
var region = data.region ? data.region.toLowerCase() : '';
var ccpa_applies = ['california', 'colorado', 'connecticut', 'delaware', 'indiana', 'iowa', 'montana', 'new jersey', 'oregon', 'tennessee', 'texas', 'utah', 'virginia'].indexOf( region ) > -1;
// Set CCPA applies cookie. This keeps us from having to make a geo request too frequently.
setCcpaAppliesCookie( ccpa_applies );
// Check if CCPA applies to set the proper usprivacy cookie.
if ( ccpa_applies ) {
if ( maybeCallDoNotSellCallback() ) {
// Do Not Sell link added, so set default opt-in.
setDefaultOptInCookie();
} else {
// Failed showing Do Not Sell link as required, so default to opt-OUT just to be safe.
setDefaultOptOutCookie();
}
} else {
// CCPA does not apply.
setDefaultNotApplicableCookie();
}
} else {
// Could not geo, so let's assume for now that CCPA applies to be safe.
setCcpaAppliesCookie( true );
if ( maybeCallDoNotSellCallback() ) {
// Do Not Sell link added, so set default opt-in.
setDefaultOptInCookie();
} else {
// Failed showing Do Not Sell link as required, so default to opt-OUT just to be safe.
setDefaultOptOutCookie();
}
}
}
};
// Send the geo request.
request.send();
} else {
// We found a CCPA applies cookie.
if ( ccpaCookie === 'true' ) {
if ( maybeCallDoNotSellCallback() ) {
// Do Not Sell link added, so set default opt-in.
setDefaultOptInCookie();
} else {
// Failed showing Do Not Sell link as required, so default to opt-OUT just to be safe.
setDefaultOptOutCookie();
}
} else {
// CCPA does not apply.
setDefaultNotApplicableCookie();
}
}
} );
};
// Kickoff initialization.
if ( window.defQueue && defQueue.isLOHP && defQueue.isLOHP === 2020 ) {
defQueue.items.push( setupPrivacy );
} else {
setupPrivacy();
}
} )();
</script>
<!-- CCPA [end] -->
<div class="widget widget_eu_cookie_law_widget">
<div
class="hide-on-button ads-active"
data-hide-timeout="30"
data-consent-expiration="180"
id="eu-cookie-law"
style="display: none"
>
<form method="post">
<input type="submit" value="Close and accept" class="accept" />
Privacy &amp; Cookies: This site uses cookies. By continuing to use this website, you agree to their use. <br />
To find out more, including how to control cookies, see here:
<a href="https://automattic.com/cookies/" rel="nofollow">
Cookie Policy </a>
</form>
</div>
</div> <div id="actionbar" dir="ltr" style="display: none;"
class="actnbr-pub-independent-publisher-2 actnbr-has-follow actnbr-has-actions">
<ul>
<li class="actnbr-btn actnbr-hidden">
<a class="actnbr-action actnbr-actn-comment" href="https://zwischenzugs.wordpress.com/2017/04/04/things-i-learned-managing-site-reliability-for-some-of-the-worlds-busiest-gambling-sites/#comments">
<svg class="gridicon gridicons-comment" height="20" width="20" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><g><path d="M12 16l-5 5v-5H5c-1.1 0-2-.9-2-2V5c0-1.1.9-2 2-2h14c1.1 0 2 .9 2 2v9c0 1.1-.9 2-2 2h-7z"/></g></svg> <span>Comment </span>
</a>
</li>
<li class="actnbr-btn actnbr-hidden">
<a class="actnbr-action actnbr-actn-reblog" href="">
<svg class="gridicon gridicons-reblog" height="20" width="20" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><g><path d="M22.086 9.914L20 7.828V18c0 1.105-.895 2-2 2h-7v-2h7V7.828l-2.086 2.086L14.5 8.5 19 4l4.5 4.5-1.414 1.414zM6 16.172V6h7V4H6c-1.105 0-2 .895-2 2v10.172l-2.086-2.086L.5 15.5 5 20l4.5-4.5-1.414-1.414L6 16.172z"/></g></svg><span>Reblog</span>
</a>
</li>
<li class="actnbr-btn actnbr-hidden">
<a class="actnbr-action actnbr-actn-follow " href="">
<svg class="gridicon" height="20" width="20" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20"><path clip-rule="evenodd" d="m4 4.5h12v6.5h1.5v-6.5-1.5h-1.5-12-1.5v1.5 10.5c0 1.1046.89543 2 2 2h7v-1.5h-7c-.27614 0-.5-.2239-.5-.5zm10.5 2h-9v1.5h9zm-5 3h-4v1.5h4zm3.5 1.5h-1v1h1zm-1-1.5h-1.5v1.5 1 1.5h1.5 1 1.5v-1.5-1-1.5h-1.5zm-2.5 2.5h-4v1.5h4zm6.5 1.25h1.5v2.25h2.25v1.5h-2.25v2.25h-1.5v-2.25h-2.25v-1.5h2.25z" fill-rule="evenodd"></path></svg>
<span>Subscribe</span>
</a>
<a class="actnbr-action actnbr-actn-following no-display" href="">
<svg class="gridicon" height="20" width="20" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="none"><path fill-rule="evenodd" clip-rule="evenodd" d="M16 4.5H4V15C4 15.2761 4.22386 15.5 4.5 15.5H11.5V17H4.5C3.39543 17 2.5 16.1046 2.5 15V3H17.5V12.5H16V4.5ZM5.5 6.5H14.5V8H5.5V6.5ZM5.5 9.5H9.5V11H5.5V9.5ZM12 11H13V12H12V11ZM10.5 9.5H14.5V13.5H10.5V9.5ZM5.5 12H9.5V13.5H5.5V12Z" fill="#008A20"></path><path d="M19.5303 15.0303L15.5 19.0605L12.9697 16.5303L14.0303 15.4697L15.5 16.9395L18.4697 13.9697L19.5303 15.0303Z" fill="#008A20"></path></svg>
<span>Subscribed</span>
</a>
<div class="actnbr-popover tip tip-top-left actnbr-notice" id="follow-bubble">
<div class="tip-arrow"></div>
<div class="tip-inner actnbr-follow-bubble">
<ul>
<li class="actnbr-sitename">
<a href="https://zwischenzugs.wordpress.com">
<img loading='lazy' alt='' src='https://s2.wp.com/i/logo/wpcom-gray-white.png?m=1479929237i' srcset='https://s2.wp.com/i/logo/wpcom-gray-white.png 1x' class='avatar avatar-50' height='50' width='50' /> zwischenzugs </a>
</li>
<div class="actnbr-message no-display"></div>
<form method="post" action="https://subscribe.wordpress.com" accept-charset="utf-8" style="display: none;">
<div class="actnbr-follow-count">Join 268 other subscribers</div>
<div>
<input type="email" name="email" placeholder="Enter your email address" class="actnbr-email-field" aria-label="Enter your email address" />
</div>
<input type="hidden" name="action" value="subscribe" />
<input type="hidden" name="blog_id" value="20870870" />
<input type="hidden" name="source" value="https://zwischenzugs.wordpress.com/2017/04/04/things-i-learned-managing-site-reliability-for-some-of-the-worlds-busiest-gambling-sites/" />
<input type="hidden" name="sub-type" value="actionbar-follow" />
<input type="hidden" id="_wpnonce" name="_wpnonce" value="736b3cf9a2" /> <div class="actnbr-button-wrap">
<button type="submit" value="Sign me up">
Sign me up </button>
</div>
</form>
<li class="actnbr-login-nudge">
<div>
Already have a WordPress.com account? <a href="https://wordpress.com/log-in?redirect_to=https%3A%2F%2Fzwischenzugs.wordpress.com%2F2017%2F04%2F04%2Fthings-i-learned-managing-site-reliability-for-some-of-the-worlds-busiest-gambling-sites%2F&#038;signup_flow=account">Log in now.</a> </div>
</li>
</ul>
</div>
</div>
</li>
<li class="actnbr-ellipsis actnbr-hidden">
<svg class="gridicon gridicons-ellipsis" height="24" width="24" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><g><path d="M7 12c0 1.104-.896 2-2 2s-2-.896-2-2 .896-2 2-2 2 .896 2 2zm12-2c-1.104 0-2 .896-2 2s.896 2 2 2 2-.896 2-2-.896-2-2-2zm-7 0c-1.104 0-2 .896-2 2s.896 2 2 2 2-.896 2-2-.896-2-2-2z"/></g></svg> <div class="actnbr-popover tip tip-top-left actnbr-more">
<div class="tip-arrow"></div>
<div class="tip-inner">
<ul>
<li class="actnbr-sitename">
<a href="https://zwischenzugs.wordpress.com">
<img loading='lazy' alt='' src='https://s2.wp.com/i/logo/wpcom-gray-white.png?m=1479929237i' srcset='https://s2.wp.com/i/logo/wpcom-gray-white.png 1x' class='avatar avatar-50' height='50' width='50' /> zwischenzugs </a>
</li>
<li class="actnbr-folded-follow">
<a class="actnbr-action actnbr-actn-follow " href="">
<svg class="gridicon" height="20" width="20" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20"><path clip-rule="evenodd" d="m4 4.5h12v6.5h1.5v-6.5-1.5h-1.5-12-1.5v1.5 10.5c0 1.1046.89543 2 2 2h7v-1.5h-7c-.27614 0-.5-.2239-.5-.5zm10.5 2h-9v1.5h9zm-5 3h-4v1.5h4zm3.5 1.5h-1v1h1zm-1-1.5h-1.5v1.5 1 1.5h1.5 1 1.5v-1.5-1-1.5h-1.5zm-2.5 2.5h-4v1.5h4zm6.5 1.25h1.5v2.25h2.25v1.5h-2.25v2.25h-1.5v-2.25h-2.25v-1.5h2.25z" fill-rule="evenodd"></path></svg>
<span>Subscribe</span>
</a>
<a class="actnbr-action actnbr-actn-following no-display" href="">
<svg class="gridicon" height="20" width="20" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="none"><path fill-rule="evenodd" clip-rule="evenodd" d="M16 4.5H4V15C4 15.2761 4.22386 15.5 4.5 15.5H11.5V17H4.5C3.39543 17 2.5 16.1046 2.5 15V3H17.5V12.5H16V4.5ZM5.5 6.5H14.5V8H5.5V6.5ZM5.5 9.5H9.5V11H5.5V9.5ZM12 11H13V12H12V11ZM10.5 9.5H14.5V13.5H10.5V9.5ZM5.5 12H9.5V13.5H5.5V12Z" fill="#008A20"></path><path d="M19.5303 15.0303L15.5 19.0605L12.9697 16.5303L14.0303 15.4697L15.5 16.9395L18.4697 13.9697L19.5303 15.0303Z" fill="#008A20"></path></svg>
<span>Subscribed</span>
</a>
</li>
<li class="actnbr-signup"><a href="https://wordpress.com/start/">Sign up</a></li>
<li class="actnbr-login"><a href="https://wordpress.com/log-in?redirect_to=https%3A%2F%2Fzwischenzugs.wordpress.com%2F2017%2F04%2F04%2Fthings-i-learned-managing-site-reliability-for-some-of-the-worlds-busiest-gambling-sites%2F&#038;signup_flow=account">Log in</a></li>
<li class="actnbr-shortlink">
<a href="https://wp.me/p1pzsW-Hs">
<span class="actnbr-shortlink__text">Copy shortlink</span>
<span class="actnbr-shortlink__icon"><svg class="gridicon gridicons-checkmark" height="16" width="16" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><g><path d="M9 19.414l-6.707-6.707 1.414-1.414L9 16.586 20.293 5.293l1.414 1.414"/></g></svg></span>
</a>
</li>
<li class="flb-report">
<a href="https://wordpress.com/abuse/?report_url=https://zwischenzugs.wordpress.com/2017/04/04/things-i-learned-managing-site-reliability-for-some-of-the-worlds-busiest-gambling-sites/" target="_blank" rel="noopener noreferrer">
Report this content </a>
</li>
<li class="actnbr-reader">
<a href="https://wordpress.com/reader/blogs/20870870/posts/2694">
View post in Reader </a>
</li>
<li class="actnbr-subs">
<a href="https://subscribe.wordpress.com/">Manage subscriptions</a>
</li>
<li class="actnbr-fold"><a href="">Collapse this bar</a></li>
</ul>
</div>
</div>
</li>
</ul>
</div>
<script>
window.addEventListener( "DOMContentLoaded", function( event ) {
var link = document.createElement( "link" );
link.href = "/wp-content/mu-plugins/actionbar/actionbar.css?v=20250116";
link.type = "text/css";
link.rel = "stylesheet";
document.head.appendChild( link );
var script = document.createElement( "script" );
script.src = "/wp-content/mu-plugins/actionbar/actionbar.js?v=20250204";
document.body.appendChild( script );
} );
</script>
<div id="jp-carousel-loading-overlay" style="display: none;">
<div id="jp-carousel-loading-wrapper">
<span id="jp-carousel-library-loading"><svg class="jetpack-spinner" width="40" height="40" viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false"><circle cx="50" cy="50" r="46" fill="none" stroke="#ddd" stroke-width="8"/><path d="M 50 4 A 46 46 0 0 1 96 50" fill="none" stroke="currentColor" stroke-width="8" stroke-linecap="round"><animateTransform attributeName="transform" type="rotate" dur="1.4s" from="0 50 50" to="360 50 50" repeatCount="indefinite"/></path></svg></span>
</div>
</div>
<div class="jp-carousel-overlay" style="display: none;">
<div class="jp-carousel-container">
<!-- The Carousel Swiper -->
<div
class="jp-carousel-wrap swiper jp-carousel-swiper-container jp-carousel-transitions"
itemscope
itemtype="https://schema.org/ImageGallery">
<div class="jp-carousel swiper-wrapper"></div>
<div class="jp-swiper-button-prev swiper-button-prev">
<svg width="25" height="24" viewBox="0 0 25 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<mask id="maskPrev" mask-type="alpha" maskUnits="userSpaceOnUse" x="8" y="6" width="9" height="12">
<path d="M16.2072 16.59L11.6496 12L16.2072 7.41L14.8041 6L8.8335 12L14.8041 18L16.2072 16.59Z" fill="white"/>
</mask>
<g mask="url(#maskPrev)">
<rect x="0.579102" width="23.8823" height="24" fill="#FFFFFF"/>
</g>
</svg>
</div>
<div class="jp-swiper-button-next swiper-button-next">
<svg width="25" height="24" viewBox="0 0 25 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<mask id="maskNext" mask-type="alpha" maskUnits="userSpaceOnUse" x="8" y="6" width="8" height="12">
<path d="M8.59814 16.59L13.1557 12L8.59814 7.41L10.0012 6L15.9718 12L10.0012 18L8.59814 16.59Z" fill="white"/>
</mask>
<g mask="url(#maskNext)">
<rect x="0.34375" width="23.8822" height="24" fill="#FFFFFF"/>
</g>
</svg>
</div>
</div>
<!-- The main close buton -->
<div class="jp-carousel-close-hint">
<svg width="25" height="24" viewBox="0 0 25 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<mask id="maskClose" mask-type="alpha" maskUnits="userSpaceOnUse" x="5" y="5" width="15" height="14">
<path d="M19.3166 6.41L17.9135 5L12.3509 10.59L6.78834 5L5.38525 6.41L10.9478 12L5.38525 17.59L6.78834 19L12.3509 13.41L17.9135 19L19.3166 17.59L13.754 12L19.3166 6.41Z" fill="white"/>
</mask>
<g mask="url(#maskClose)">
<rect x="0.409668" width="23.8823" height="24" fill="#FFFFFF"/>
</g>
</svg>
</div>
<!-- Image info, comments and meta -->
<div class="jp-carousel-info">
<div class="jp-carousel-info-footer">
<div class="jp-carousel-pagination-container">
<div class="jp-swiper-pagination swiper-pagination"></div>
<div class="jp-carousel-pagination"></div>
</div>
<div class="jp-carousel-photo-title-container">
<div class="jp-carousel-photo-caption"></div>
</div>
<div class="jp-carousel-photo-icons-container">
<a href="#" class="jp-carousel-icon-btn jp-carousel-icon-info" aria-label="Toggle photo metadata visibility">
<span class="jp-carousel-icon">
<svg width="25" height="24" viewBox="0 0 25 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<mask id="maskInfo" mask-type="alpha" maskUnits="userSpaceOnUse" x="2" y="2" width="21" height="20">
<path fill-rule="evenodd" clip-rule="evenodd" d="M12.7537 2C7.26076 2 2.80273 6.48 2.80273 12C2.80273 17.52 7.26076 22 12.7537 22C18.2466 22 22.7046 17.52 22.7046 12C22.7046 6.48 18.2466 2 12.7537 2ZM11.7586 7V9H13.7488V7H11.7586ZM11.7586 11V17H13.7488V11H11.7586ZM4.79292 12C4.79292 16.41 8.36531 20 12.7537 20C17.142 20 20.7144 16.41 20.7144 12C20.7144 7.59 17.142 4 12.7537 4C8.36531 4 4.79292 7.59 4.79292 12Z" fill="white"/>
</mask>
<g mask="url(#maskInfo)">
<rect x="0.8125" width="23.8823" height="24" fill="#FFFFFF"/>
</g>
</svg>
</span>
</a>
<a href="#" class="jp-carousel-icon-btn jp-carousel-icon-comments" aria-label="Toggle photo comments visibility">
<span class="jp-carousel-icon">
<svg width="25" height="24" viewBox="0 0 25 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<mask id="maskComments" mask-type="alpha" maskUnits="userSpaceOnUse" x="2" y="2" width="21" height="20">
<path fill-rule="evenodd" clip-rule="evenodd" d="M4.3271 2H20.2486C21.3432 2 22.2388 2.9 22.2388 4V16C22.2388 17.1 21.3432 18 20.2486 18H6.31729L2.33691 22V4C2.33691 2.9 3.2325 2 4.3271 2ZM6.31729 16H20.2486V4H4.3271V18L6.31729 16Z" fill="white"/>
</mask>
<g mask="url(#maskComments)">
<rect x="0.34668" width="23.8823" height="24" fill="#FFFFFF"/>
</g>
</svg>
<span class="jp-carousel-has-comments-indicator" aria-label="This image has comments."></span>
</span>
</a>
</div>
</div>
<div class="jp-carousel-info-extra">
<div class="jp-carousel-info-content-wrapper">
<div class="jp-carousel-photo-title-container">
<div class="jp-carousel-photo-title"></div>
</div>
<div class="jp-carousel-comments-wrapper">
<div id="jp-carousel-comments-loading">
<span>Loading Comments...</span>
</div>
<div class="jp-carousel-comments"></div>
<div id="jp-carousel-comment-form-container">
<span id="jp-carousel-comment-form-spinner"><svg class="jetpack-spinner" width="20" height="20" viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false"><circle cx="50" cy="50" r="46" fill="none" stroke="#ddd" stroke-width="8"/><path d="M 50 4 A 46 46 0 0 1 96 50" fill="none" stroke="currentColor" stroke-width="8" stroke-linecap="round"><animateTransform attributeName="transform" type="rotate" dur="1.4s" from="0 50 50" to="360 50 50" repeatCount="indefinite"/></path></svg></span>
<div id="jp-carousel-comment-post-results"></div>
<form id="jp-carousel-comment-form">
<label for="jp-carousel-comment-form-comment-field" class="screen-reader-text">Write a Comment...</label>
<textarea
name="comment"
class="jp-carousel-comment-form-field jp-carousel-comment-form-textarea"
id="jp-carousel-comment-form-comment-field"
placeholder="Write a Comment..."
></textarea>
<div id="jp-carousel-comment-form-submit-and-info-wrapper">
<div id="jp-carousel-comment-form-commenting-as">
<fieldset>
<label for="jp-carousel-comment-form-email-field">Email (Required)</label>
<input type="text" name="email" class="jp-carousel-comment-form-field jp-carousel-comment-form-text-field" id="jp-carousel-comment-form-email-field" />
</fieldset>
<fieldset>
<label for="jp-carousel-comment-form-author-field">Name (Required)</label>
<input type="text" name="author" class="jp-carousel-comment-form-field jp-carousel-comment-form-text-field" id="jp-carousel-comment-form-author-field" />
</fieldset>
<fieldset>
<label for="jp-carousel-comment-form-url-field">Website</label>
<input type="text" name="url" class="jp-carousel-comment-form-field jp-carousel-comment-form-text-field" id="jp-carousel-comment-form-url-field" />
</fieldset>
</div>
<input
type="submit"
name="submit"
class="jp-carousel-comment-form-button"
id="jp-carousel-comment-form-button-submit"
value="Post Comment" />
</div>
</form>
</div>
</div>
<div class="jp-carousel-image-meta">
<div class="jp-carousel-title-and-caption">
<div class="jp-carousel-photo-info">
<div class="jp-carousel-caption" itemprop="caption description"></div>
</div>
<div class="jp-carousel-photo-description"></div>
</div>
<a class="jp-carousel-image-download" href="#" aria-label="Download image" target="_blank" style="display: none;">
<svg width="25" height="24" viewBox="0 0 25 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<mask id="mask0" mask-type="alpha" maskUnits="userSpaceOnUse" x="3" y="3" width="19" height="18">
<path fill-rule="evenodd" clip-rule="evenodd" d="M5.84615 5V19H19.7775V12H21.7677V19C21.7677 20.1 20.8721 21 19.7775 21H5.84615C4.74159 21 3.85596 20.1 3.85596 19V5C3.85596 3.9 4.74159 3 5.84615 3H12.8118V5H5.84615ZM14.802 5V3H21.7677V10H19.7775V6.41L9.99569 16.24L8.59261 14.83L18.3744 5H14.802Z" fill="white"/>
</mask>
<g mask="url(#mask0)">
<rect x="0.870605" width="23.8823" height="24" fill="#FFFFFF"/>
</g>
</svg>
<span class="jp-carousel-download-text"></span>
</a>
<div class="jp-carousel-image-map" style="display: none;"></div>
</div>
</div>
</div>
</div>
</div>
</div>
<script type="text/javascript">
window.WPCOM_sharing_counts = {"https://zwischenzugs.wordpress.com/2017/04/04/things-i-learned-managing-site-reliability-for-some-of-the-worlds-busiest-gambling-sites/":2694};
</script>
<script type="text/javascript">
( function () {
var currentScript = document.currentScript;
// Helper function to load an external script.
function loadScript( url, cb ) {
var script = document.createElement( 'script' );
var prev = currentScript || document.getElementsByTagName( 'script' )[ 0 ];
script.setAttribute( 'async', true );
script.setAttribute( 'src', url );
prev.parentNode.insertBefore( script, prev );
script.addEventListener( 'load', cb );
}
function init() {
loadScript( 'https://platform.linkedin.com/in.js?async=true', function () {
if ( typeof IN !== 'undefined' ) {
IN.init();
}
} );
}
if ( document.readyState === 'loading' ) {
document.addEventListener( 'DOMContentLoaded', init );
} else {
init();
}
document.body.addEventListener( 'is.post-load', function() {
if ( typeof IN !== 'undefined' ) {
IN.parse();
}
} );
} )();
</script>
<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+'://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js,fjs);}}(document, 'script', 'twitter-wjs');</script>
<script id="tumblr-js" type="text/javascript" src="https://assets.tumblr.com/share-button.js"></script>
<div id="fb-root"></div>
<script>(function(d, s, id) { var js, fjs = d.getElementsByTagName(s)[0]; if (d.getElementById(id)) return; js = d.createElement(s); js.id = id; js.src = 'https://connect.facebook.net/en_US/sdk.js#xfbml=1&amp;appId=249643311490&version=v2.3'; fjs.parentNode.insertBefore(js, fjs); }(document, 'script', 'facebook-jssdk'));</script>
<script>
document.body.addEventListener( 'is.post-load', function() {
if ( 'undefined' !== typeof FB ) {
FB.XFBML.parse();
}
} );
</script>
<script type="text/javascript">
(function () {
var wpcom_reblog = {
source: 'toolbar',
toggle_reblog_box_flair: function (obj_id, post_id) {
// Go to site selector. This will redirect to their blog if they only have one.
const postEndpoint = `https://wordpress.com/post`;
// Ideally we would use the permalink here, but fortunately this will be replaced with the
// post permalink in the editor.
const originalURL = `${ document.location.href }?page_id=${ post_id }`;
const url =
postEndpoint +
'?url=' +
encodeURIComponent( originalURL ) +
'&is_post_share=true' +
'&v=5';
const redirect = function () {
if (
! window.open( url, '_blank' )
) {
location.href = url;
}
};
if ( /Firefox/.test( navigator.userAgent ) ) {
setTimeout( redirect, 0 );
} else {
redirect();
}
},
};
window.wpcom_reblog = wpcom_reblog;
})();
</script>
<script crossorigin='anonymous' type='text/javascript' src='/_static/??-eJx9jEsOwjAMBS9EcIuqdoU4i2msNKnzoXbI9ckO1AXbeTMPWjFrTkpJ4cnZmcLV+STQ8mHRilkZRUggdITK5n27BrnATxbrN/LWkQpQ7WvePRnGBkqxMCqd+J8f9nu3X5UqbZgs09HlR7yPyzxM0zyMS/gAPatD8g=='></script>
<script id="wp-hooks-js" src="/wp-content/plugins/gutenberg-core/v23.9.1/build/scripts/hooks/index.min.js?m=1788785546i&#038;ver=f0f188028580e8dc1255"></script>
<script id="wp-i18n-js" src="/wp-content/plugins/gutenberg-core/v23.9.1/build/scripts/i18n/index.min.js?m=1788785546i&#038;ver=1dfe7db3940c23ea9216"></script>
<script id="wp-i18n-js-after">
wp.i18n.setLocaleData( { 'text direction\u0004ltr': [ 'ltr' ] } );
//# sourceURL=wp-i18n-js-after
</script>
<script id="verbum-settings-js-before">
window.VerbumComments = {"Log in or provide your name and email to leave a reply.":"Log in or provide your name and email to leave a reply.","Log in or provide your name and email to leave a comment.":"Log in or provide your name and email to leave a comment.","Receive web and mobile notifications for posts on this site.":"Receive web and mobile notifications for posts on this site.","Name":"Name","Email (address never made public)":"Email (address never made public)","Website (optional)":"Website (optional)","Leave a reply. (log in optional)":"Leave a reply. (log in optional)","Leave a comment. (log in optional)":"Leave a comment. (log in optional)","Log in to leave a reply.":"Log in to leave a reply.","Log in to leave a comment.":"Log in to leave a comment.","Logged in via %s":"Logged in via %s","Log out":"Log out","Your browser is blocking the cookies needed to log in and comment here. Allow cookies in your privacy settings, then reload the page.":"Your browser is blocking the cookies needed to log in and comment here. Allow cookies in your privacy settings, then reload the page.","Email":"Email","(Address never made public)":"(Address never made public)","Instantly":"Instantly","Daily":"Daily","Reply":"Reply","Comment":"Comment","WordPress":"WordPress","Weekly":"Weekly","Notify me of new posts":"Notify me of new posts","Email me new posts":"Email me new posts","Email me new comments":"Email me new comments","Cancel":"Cancel","Write a comment...":"Write a comment...","Write a reply...":"Write a reply...","Website":"Website","Optional":"Optional","We'll keep you in the loop!":"We'll keep you in the loop!","Loading your comment...":"Loading your comment...","Discover more from":"Discover more from zwischenzugs","Subscribe now to keep reading and get access to the full archive.":"Subscribe now to keep reading and get access to the full archive.","Continue reading":"Continue reading","Never miss a beat!":"Never miss a beat!","Interested in getting blog post updates? Simply click the button below to stay in the loop!":"Interested in getting blog post updates? Simply click the button below to stay in the loop!","Enter your email address":"Enter your email address","Subscribe":"Subscribe","Comment sent successfully":"Comment sent successfully","Save my name, email, and website in this browser for the next time I comment.":"Save my name, email, and website in this browser for the next time I comment.","hovercardi18n":{"Edit your profile \u2192":"Edit your profile \u2192","View profile \u2192":"View profile \u2192","Contact":"Contact","Send money":"Send money","Gravatar not found.":"Gravatar not found.","This profile is private.":"This profile is private.","Too Many Requests.":"Too Many Requests.","Internal Server Error.":"Internal Server Error.","Sorry, we are unable to load this Gravatar profile.":"Sorry, we are unable to load this Gravatar profile."},"siteId":20870870,"postId":2694,"mustLogIn":false,"requireNameEmail":true,"commentRegistration":false,"connectURL":"https://zwischenzugs.wordpress.com/public.api/connect/?action=request\u0026from_comments=yes","logoutURL":"https://zwischenzugs.wordpress.com/wp-login.php?action=logout\u0026_wpnonce=c44900ab01","homeURL":"https://zwischenzugs.wordpress.com/","subscribeToBlog":true,"subscribeToComment":true,"isJetpackCommentsLoggedIn":false,"jetpackUsername":"","jetpackUserId":0,"jetpackSignature":"","jetpackAvatar":"https://0.gravatar.com/avatar/?s=96\u0026amp;d=identicon\u0026amp;r=G","enableBlocks":true,"enableSubscriptionModal":true,"currentLocale":"en","isJetpackComments":false,"allowedBlocks":["core/paragraph","core/list","core/code","core/list-item","core/quote","core/image","core/embed","core/quote","core/code"],"embedNonce":"9a9d0e2ad4","verbumBundleUrl":"/wp-content/mu-plugins/jetpack-mu-wpcom-plugin/moon/jetpack_vendor/automattic/jetpack-mu-wpcom/src/features/verbum-comments/dist/index.js","isRTL":false,"vbeCacheBuster":1771405207,"iframeUniqueId":0,"colorScheme":false}
//# sourceURL=verbum-settings-js-before
</script>
<script data-wp-strategy="defer" defer id="verbum-dynamic-loader-js" src="/wp-content/mu-plugins/jetpack-mu-wpcom-plugin/moon/jetpack_vendor/automattic/jetpack-mu-wpcom/src/build/verbum-comments/assets/dynamic-loader.js?m=1772518873i&#038;minify=false&#038;ver=8b5296f9195db92c42e4"></script>
<script id="jetpack-carousel-js-extra">
var jetpackSwiperLibraryPath = {"url":"/wp-content/mu-plugins/jetpack-plugin/moon/_inc/blocks/swiper.js"};
var jetpackCarouselStrings = {"widths":[370,700,1000,1200,1400,2000],"is_logged_in":"","lang":"en","ajaxurl":"https://zwischenzugs.wordpress.com/wp-admin/admin-ajax.php","nonce":"1c8af60010","display_exif":"1","display_comments":"1","single_image_gallery":"1","single_image_gallery_media_file":"","background_color":"black","comment":"Comment","post_comment":"Post Comment","write_comment":"Write a Comment...","loading_comments":"Loading Comments...","image_label":"Open image in full-screen.","download_original":"View full size \u003Cspan class=\"photo-size\"\u003E{0}\u003Cspan class=\"photo-size-times\"\u003E\u00d7\u003C/span\u003E{1}\u003C/span\u003E","no_comment_text":"Please be sure to submit some text with your comment.","no_comment_email":"Please provide an email address to comment.","no_comment_author":"Please provide your name to comment.","comment_post_error":"Sorry, but there was an error posting your comment. Please try again later.","comment_approved":"Your comment was approved.","comment_unapproved":"Your comment is in moderation.","camera":"Camera","aperture":"Aperture","shutter_speed":"Shutter Speed","focal_length":"Focal Length","copyright":"Copyright","comment_registration":"0","require_name_email":"1","login_url":"https://zwischenzugs.wordpress.com/wp-login.php?redirect_to=https%3A%2F%2Fzwischenzugs.wordpress.com%2F2017%2F04%2F04%2Fthings-i-learned-managing-site-reliability-for-some-of-the-worlds-busiest-gambling-sites%2F","blog_id":"20870870","meta_data":["camera","aperture","shutter_speed","focal_length","copyright"],"stats_query_args":"blog=20870870&v=wpcom&tz=1&user_id=0&subd=zwischenzugs","is_public":"1"};
//# sourceURL=jetpack-carousel-js-extra
</script>
<script id="sharing-js-js-extra">
var sharing_js_options = {"lang":"en","counts":"1","is_stats_active":"1"};
//# sourceURL=sharing-js-js-extra
</script>
<script id="jetpack-script-data-js-before">
window.JetpackScriptData = {"site":{"host":"wpcom","is_wpcom_platform":true}};
//# sourceURL=jetpack-script-data-js-before
</script>
<script crossorigin='anonymous' type='text/javascript' src='/_static/??-eJydkFtuAjEMRTfUENqqQD+qLgWZxDPjmbwUO1B23zAPhFBVtfxEyfX1ubH1KSkTg2AQLR16ZJ3KQVOwmLAeQVR9O+IOs3rRPesAR2pBKIZVz0/63/08UFKOwqCaaAqrhr4WEAXjiq2IajPR+0t3xuTOK0+PpFWeZpMpiTqlCrxH+KKSKy2FmoiSwAyqSqN1LmgfY1iK+2PNiFlDkehBhMy1DZhRWB8KOXsV52gLAn9Ivg3cX34+wQzkWBjd1bcIP+3kBgsDsUdRr6v1hFuEJo9m+0vvEjGt4u75+CjcQUYL1p7HK4V2nuHTfzxvd9v3t/Vus+m/Ac0d91A='></script>
<script id="sharing-js-js-after">
window.WPCOM_sharing_popups = window.WPCOM_sharing_popups || {};
window.WPCOM_sharing_popups[ "facebook" ] = "menubar=1,resizable=1,width=600,height=400";
//# sourceURL=sharing-js-js-after
</script>
<script id="wp-emoji-settings" type="application/json">
{"baseUrl":"https://s0.wp.com/wp-content/mu-plugins/wpcom-smileys/twemoji/2/72x72/","ext":".png","svgUrl":"https://s0.wp.com/wp-content/mu-plugins/wpcom-smileys/twemoji/2/svg/","svgExt":".svg","source":{"concatemoji":"/wp-includes/js/wp-emoji-release.min.js?m=1783090810i&ver=7.1.1-alpha-63555"}}
</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=/wp-includes/js/wp-emoji-loader.min.js
</script>
<iframe src='https://widgets.wp.com/likes/master.html?ver=20260911#ver=20260911' scrolling='no' id='likes-master' name='likes-master' style='display:none;'></iframe>
<div id='likes-other-gravatars' role="dialog" aria-hidden="true" tabindex="-1"><div class="likes-text"><span>%d</span></div><ul class="wpl-avatars sd-like-gravatars"></ul></div>
<script src="//stats.wp.com/w.js?69" defer></script> <script type="text/javascript">
_tkq = window._tkq || [];
_stq = window._stq || [];
_tkq.push(['storeContext', {'blog_id':'20870870','blog_tz':'1','user_lang':'en','blog_lang':'en','user_id':'0'}]);
// Prevent sending pageview tracking from WP-Admin pages.
_stq.push(['view', {'blog':'20870870','v':'wpcom','tz':'1','user_id':'0','post':'2694','subd':'zwischenzugs'}]);
_stq.push(['extra', {'crypt':'UE5XaGUuOTlwaD85flAmcm1mcmZsaDhkV11YdWtpP0NsWnVkPS9sL0ViLndld3BuVT01Uj14Ti1yYTBnX3xuYUQ3Qz1oblZbVHV3MTZoVXFwTTVDK2wuPT1KWzJNV19iQk9bTmF0PUUlUlYzbW1nYyxHTnlKQiUsT0hKb2tYK094eVFmWEpuRW9XOFF2JituP0dBLV9+aHhSSmouN19TOHVqfmNOXXl1OWtndHZKYyVlSVlqZjN5VHRJVDdBdWtfN2pINVJmaklsNU9NWT9STGNpPS5ZR3VNNUN0Si0sbXBZSlhbJTJzcTVrSDFoPS1wTWJwL2t4VXJQMGpzMHk9TEluUGttNmlxYXlQaHpwOUJ4WTV4ViZFVERMUV9vfDVMOWxbLlJ1OT9rdE9GSC93Ul05VWdRJTg2NXUtPV90bkQwWC5LK1k/ZFNdNFdjdzY3LjRXP2xrenRnUDZ6JVVmVl91R0hyfGJSaT9jb29WM2VtaWRkUGtsZGN2Y3F1PXUyXyxiR1o9VFBxU3g='}]);
_stq.push([ 'clickTrackerInit', '20870870', '2694' ]);
</script>
<noscript><img src="https://pixel.wp.com/b.gif?v=noscript" style="height:1px;width:1px;overflow:hidden;position:absolute;bottom:1px;" alt="" /></noscript>
<meta id="bilmur" property="bilmur:data" content="" data-provider="wordpress.com" data-service="simple" data-site-tz="Europe/London" data-custom-props="{&quot;logged_in&quot;:&quot;0&quot;,&quot;wptheme&quot;:&quot;pub\/independent-publisher-2&quot;,&quot;wptheme_is_block&quot;:&quot;0&quot;}" >
<script defer src="/wp-content/js/bilmur.min.js?i=17&amp;m=202637"></script>
<script>
(function() {
'use strict';
const fetches = {};
const promises = {};
const urls = {
'wp-polyfill': '/wp-includes/js/dist/vendor/wp-polyfill.min.js?m=1786440387i&ver=3.15.0',
'verbum': '/wp-content/mu-plugins/jetpack-mu-wpcom-plugin/moon/jetpack_vendor/automattic/jetpack-mu-wpcom/src/build/verbum-comments/verbum-comments.js?m=1788898305i&minify=false&ver=3d6130a57c3104d5bc3b'
};
const loaders = {
'verbum': () => {
fetchExternalScript('wp-polyfill');
fetchExternalScript('verbum');
promises['wp-polyfill'] = promises['wp-polyfill'] || loadWPScript('wp-polyfill');
promises['verbum'] = promises['verbum'] || promises['wp-polyfill'].then( () => loadWPScript('verbum') );
return promises['verbum'];
},
};
const scriptExtras = {
};
window.WP_Enqueue_Dynamic_Script = {
loadScript: (handle) => {
if (!loaders[handle]) {
console.error('WP_Enqueue_Dynamic_Script: unregistered script `' + handle + '`.');
}
return loaders[handle]();
}
};
function fetchExternalScript(handle) {
if (!urls[handle]) {
return Promise.resolve();
}
fetches[handle] = fetches[handle] || fetch(urls[handle], { mode: 'no-cors' });
return fetches[handle];
}
function runExtraScript(handle, type, index) {
const id = 'wp-enqueue-dynamic-script:' + handle + ':' + type + ':' + (index + 1);
const template = document.getElementById(id);
if (!template) {
return Promise.reject();
}
const script = document.createElement( 'script' );
script.innerHTML = template.innerHTML;
document.body.appendChild( script );
return Promise.resolve();
}
function loadExternalScript(handle) {
if (!urls[handle]) {
return Promise.resolve();
}
return fetches[handle].then(() => {
return new Promise((resolve, reject) => {
const script = document.createElement('script');
script.onload = () => resolve();
script.onerror = (e) => reject(e);
script.src = urls[handle];
document.body.appendChild(script);
});
});
}
function loadExtra(handle, pos) {
const count = (scriptExtras[handle] && scriptExtras[handle][pos]) || 0;
let promise = Promise.resolve();
for (let i = 0; i < count; i++) {
promise = promise.then(() => runExtraScript(handle, pos, i));
}
return promise;
}
function loadWPScript(handle) {
// Core loads scripts in this order. See: https://github.com/WordPress/WordPress/blob/a59eb9d39c4fcba834b70c9e8dfd64feeec10ba6/wp-includes/class-wp-scripts.php#L428.
return loadExtra(handle, 'translations')
.then(() => loadExtra(handle, 'before'))
.then(() => loadExternalScript(handle))
.then(() => loadExtra(handle, 'after'));
}
} )();
</script>
</body>
</html>