1794 lines
154 KiB
HTML
1794 lines
154 KiB
HTML
<!DOCTYPE html>
|
||
<!--[if IE 6]>
|
||
<html id="ie6" lang="en">
|
||
<![endif]-->
|
||
<!--[if IE 8]>
|
||
<html id="ie8" lang="en">
|
||
<![endif]-->
|
||
<!--[if (!IE)]><!-->
|
||
<html lang="en">
|
||
<!--<![endif]-->
|
||
|
||
<head>
|
||
<meta charset="UTF-8" />
|
||
<title>Developer On Call | Henrik Warne's blog</title>
|
||
<link rel="profile" href="http://gmpg.org/xfn/11" />
|
||
<link rel="pingback" href="https://henrikwarne.com/xmlrpc.php" />
|
||
<meta name='robots' content='max-image-preview:large' />
|
||
|
||
<!-- Async WordPress.com Remote Login -->
|
||
<script id="wpcom_remote_login_js">
|
||
var wpcom_remote_login_extra_auth = '';
|
||
function wpcom_remote_login_remove_dom_node_id( element_id ) {
|
||
var dom_node = document.getElementById( element_id );
|
||
if ( dom_node ) { dom_node.parentNode.removeChild( dom_node ); }
|
||
}
|
||
function wpcom_remote_login_remove_dom_node_classes( class_name ) {
|
||
var dom_nodes = document.querySelectorAll( '.' + class_name );
|
||
for ( var i = 0; i < dom_nodes.length; i++ ) {
|
||
dom_nodes[ i ].parentNode.removeChild( dom_nodes[ i ] );
|
||
}
|
||
}
|
||
function wpcom_remote_login_final_cleanup() {
|
||
wpcom_remote_login_remove_dom_node_classes( "wpcom_remote_login_msg" );
|
||
wpcom_remote_login_remove_dom_node_id( "wpcom_remote_login_key" );
|
||
wpcom_remote_login_remove_dom_node_id( "wpcom_remote_login_validate" );
|
||
wpcom_remote_login_remove_dom_node_id( "wpcom_remote_login_js" );
|
||
wpcom_remote_login_remove_dom_node_id( "wpcom_request_access_iframe" );
|
||
wpcom_remote_login_remove_dom_node_id( "wpcom_request_access_styles" );
|
||
}
|
||
|
||
// Watch for messages back from the remote login
|
||
window.addEventListener( "message", function( e ) {
|
||
if ( e.origin === "https://r-login.wordpress.com" ) {
|
||
var data = {};
|
||
try {
|
||
data = JSON.parse( e.data );
|
||
} catch( e ) {
|
||
wpcom_remote_login_final_cleanup();
|
||
return;
|
||
}
|
||
|
||
if ( data.msg === 'LOGIN' ) {
|
||
// Clean up the login check iframe
|
||
wpcom_remote_login_remove_dom_node_id( "wpcom_remote_login_key" );
|
||
|
||
var id_regex = new RegExp( /^[0-9]+$/ );
|
||
var token_regex = new RegExp( /^.*|.*|.*$/ );
|
||
if (
|
||
token_regex.test( data.token )
|
||
&& id_regex.test( data.wpcomid )
|
||
) {
|
||
// We have everything we need to ask for a login
|
||
var script = document.createElement( "script" );
|
||
script.setAttribute( "id", "wpcom_remote_login_validate" );
|
||
script.src = '/remote-login.php?wpcom_remote_login=validate'
|
||
+ '&wpcomid=' + data.wpcomid
|
||
+ '&token=' + encodeURIComponent( data.token )
|
||
+ '&host=' + window.location.protocol
|
||
+ '//' + window.location.hostname
|
||
+ '&postid=1689'
|
||
+ '&is_singular=1';
|
||
document.body.appendChild( script );
|
||
}
|
||
|
||
return;
|
||
}
|
||
|
||
// Safari ITP, not logged in, so redirect
|
||
if ( data.msg === 'LOGIN-REDIRECT' ) {
|
||
window.location = 'https://wordpress.com/log-in?redirect_to=' + window.location.href;
|
||
return;
|
||
}
|
||
|
||
// Safari ITP, storage access failed, remove the request
|
||
if ( data.msg === 'LOGIN-REMOVE' ) {
|
||
var css_zap = 'html { -webkit-transition: margin-top 1s; transition: margin-top 1s; } /* 9001 */ html { margin-top: 0 !important; } * html body { margin-top: 0 !important; } @media screen and ( max-width: 782px ) { html { margin-top: 0 !important; } * html body { margin-top: 0 !important; } }';
|
||
var style_zap = document.createElement( 'style' );
|
||
style_zap.type = 'text/css';
|
||
style_zap.appendChild( document.createTextNode( css_zap ) );
|
||
document.body.appendChild( style_zap );
|
||
|
||
var e = document.getElementById( 'wpcom_request_access_iframe' );
|
||
e.parentNode.removeChild( e );
|
||
|
||
document.cookie = 'wordpress_com_login_access=denied; path=/; max-age=31536000';
|
||
|
||
return;
|
||
}
|
||
|
||
// Safari ITP
|
||
if ( data.msg === 'REQUEST_ACCESS' ) {
|
||
console.log( 'request access: safari' );
|
||
|
||
// Check ITP iframe enable/disable knob
|
||
if ( wpcom_remote_login_extra_auth !== 'safari_itp_iframe' ) {
|
||
return;
|
||
}
|
||
|
||
// If we are in a "private window" there is no ITP.
|
||
var private_window = false;
|
||
try {
|
||
var opendb = window.openDatabase( null, null, null, null );
|
||
} catch( e ) {
|
||
private_window = true;
|
||
}
|
||
|
||
if ( private_window ) {
|
||
console.log( 'private window' );
|
||
return;
|
||
}
|
||
|
||
var iframe = document.createElement( 'iframe' );
|
||
iframe.id = 'wpcom_request_access_iframe';
|
||
iframe.setAttribute( 'scrolling', 'no' );
|
||
iframe.setAttribute( 'sandbox', 'allow-storage-access-by-user-activation allow-scripts allow-same-origin allow-top-navigation-by-user-activation' );
|
||
iframe.src = 'https://r-login.wordpress.com/remote-login.php?wpcom_remote_login=request_access&origin=' + encodeURIComponent( data.origin ) + '&wpcomid=' + encodeURIComponent( data.wpcomid );
|
||
|
||
var css = 'html { -webkit-transition: margin-top 1s; transition: margin-top 1s; } /* 9001 */ html { margin-top: 46px !important; } * html body { margin-top: 46px !important; } @media screen and ( max-width: 660px ) { html { margin-top: 71px !important; } * html body { margin-top: 71px !important; } #wpcom_request_access_iframe { display: block; height: 71px !important; } } #wpcom_request_access_iframe { border: 0px; height: 46px; position: fixed; top: 0; left: 0; width: 100%; min-width: 100%; z-index: 99999; background: #23282d; } ';
|
||
|
||
var style = document.createElement( 'style' );
|
||
style.type = 'text/css';
|
||
style.id = 'wpcom_request_access_styles';
|
||
style.appendChild( document.createTextNode( css ) );
|
||
document.body.appendChild( style );
|
||
|
||
document.body.appendChild( iframe );
|
||
}
|
||
|
||
if ( data.msg === 'DONE' ) {
|
||
wpcom_remote_login_final_cleanup();
|
||
}
|
||
}
|
||
}, false );
|
||
|
||
// Inject the remote login iframe after the page has had a chance to load
|
||
// more critical resources
|
||
window.addEventListener( "DOMContentLoaded", function( e ) {
|
||
var iframe = document.createElement( "iframe" );
|
||
iframe.style.display = "none";
|
||
iframe.setAttribute( "scrolling", "no" );
|
||
iframe.setAttribute( "id", "wpcom_remote_login_key" );
|
||
iframe.src = "https://r-login.wordpress.com/remote-login.php"
|
||
+ "?wpcom_remote_login=key"
|
||
+ "&origin=aHR0cHM6Ly9oZW5yaWt3YXJuZS5jb20%3D"
|
||
+ "&wpcomid=27679227"
|
||
+ "&time=" + Math.floor( Date.now() / 1000 );
|
||
document.body.appendChild( iframe );
|
||
}, false );
|
||
</script>
|
||
<link rel='dns-prefetch' href='//widgets.wp.com' />
|
||
<link rel='dns-prefetch' href='//s2.wp.com' />
|
||
<link rel='dns-prefetch' href='//s1.wp.com' />
|
||
<link rel='dns-prefetch' href='//s0.wp.com' />
|
||
<link rel="alternate" type="application/rss+xml" title="Henrik Warne's blog » Feed" href="https://henrikwarne.com/feed/" />
|
||
<link rel="alternate" type="application/rss+xml" title="Henrik Warne's blog » Comments Feed" href="https://henrikwarne.com/comments/feed/" />
|
||
<link rel="alternate" type="application/rss+xml" title="Henrik Warne's blog » Developer On Call Comments Feed" href="https://henrikwarne.com/2018/12/03/developer-on-call/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/??-eJxtzN0KQEAQQOEXssaKcCHPsq1Jy+xPZjavL1JKLr86HTiSsjEIBgGfVaK8uMCwoiRjt8fAOYCPcyZk2JGM4KxSZPmotMwF/B/Jbfh+b1355EfdddWg26av1xMpeTR5&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/??-eJx9jcEKg0AMRH+oaVhorR7Eb9E16IpZg8min2889FZ6GYbhPQYPgbhlo2zIBWQtU8qKcdvJd5be0AmmMfW0Ejv2jKoP/K0daZzIXNdvB6PzvyJ+A8MgO6mCJ6fCYLN/6e113IZXU9WfUL/DcgHSTkDo&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: #ffffff;--wp--preset--color--pale-pink: #f78da7;--wp--preset--color--vivid-red: #cf2e2e;--wp--preset--color--luminous-vivid-orange: #ff6900;--wp--preset--color--luminous-vivid-amber: #fcb900;--wp--preset--color--light-green-cyan: #7bdcb5;--wp--preset--color--vivid-green-cyan: #00d084;--wp--preset--color--pale-cyan-blue: #8ed1fc;--wp--preset--color--vivid-cyan-blue: #0693e3;--wp--preset--color--vivid-purple: #9b51e0;--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple: linear-gradient(135deg,rgb(6,147,227) 0%,rgb(155,81,224) 100%);--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan: linear-gradient(135deg,rgb(122,220,180) 0%,rgb(0,208,130) 100%);--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange: linear-gradient(135deg,rgb(252,185,0) 0%,rgb(255,105,0) 100%);--wp--preset--gradient--luminous-vivid-orange-to-vivid-red: linear-gradient(135deg,rgb(255,105,0) 0%,rgb(207,46,46) 100%);--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray: linear-gradient(135deg,rgb(238,238,238) 0%,rgb(169,184,195) 100%);--wp--preset--gradient--cool-to-warm-spectrum: linear-gradient(135deg,rgb(74,234,220) 0%,rgb(151,120,209) 20%,rgb(207,42,186) 40%,rgb(238,44,130) 60%,rgb(251,105,98) 80%,rgb(254,248,76) 100%);--wp--preset--gradient--blush-light-purple: linear-gradient(135deg,rgb(255,206,236) 0%,rgb(152,150,240) 100%);--wp--preset--gradient--blush-bordeaux: linear-gradient(135deg,rgb(254,205,165) 0%,rgb(254,45,45) 50%,rgb(107,0,62) 100%);--wp--preset--gradient--luminous-dusk: linear-gradient(135deg,rgb(255,203,112) 0%,rgb(199,81,192) 50%,rgb(65,88,208) 100%);--wp--preset--gradient--pale-ocean: linear-gradient(135deg,rgb(255,245,203) 0%,rgb(182,227,212) 50%,rgb(51,167,181) 100%);--wp--preset--gradient--electric-grass: linear-gradient(135deg,rgb(202,248,128) 0%,rgb(113,206,126) 100%);--wp--preset--gradient--midnight: linear-gradient(135deg,rgb(2,3,129) 0%,rgb(40,116,252) 100%);--wp--preset--font-size--small: 13px;--wp--preset--font-size--medium: 20px;--wp--preset--font-size--large: 36px;--wp--preset--font-size--x-large: 42px;--wp--preset--font-family--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-black-background-color{background-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-background-color{background-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-background-color{background-color: var(--wp--preset--color--white) !important;}.has-pale-pink-background-color{background-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-background-color{background-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-background-color{background-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-background-color{background-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-background-color{background-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-background-color{background-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-background-color{background-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-background-color{background-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-background-color{background-color: var(--wp--preset--color--vivid-purple) !important;}.has-black-border-color{border-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-border-color{border-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-border-color{border-color: var(--wp--preset--color--white) !important;}.has-pale-pink-border-color{border-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-border-color{border-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-border-color{border-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-border-color{border-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-border-color{border-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-border-color{border-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-border-color{border-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-border-color{border-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-border-color{border-color: var(--wp--preset--color--vivid-purple) !important;}.has-vivid-cyan-blue-to-vivid-purple-gradient-background{background: var(--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple) !important;}.has-light-green-cyan-to-vivid-green-cyan-gradient-background{background: var(--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan) !important;}.has-luminous-vivid-amber-to-luminous-vivid-orange-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange) !important;}.has-luminous-vivid-orange-to-vivid-red-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-orange-to-vivid-red) !important;}.has-very-light-gray-to-cyan-bluish-gray-gradient-background{background: var(--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray) !important;}.has-cool-to-warm-spectrum-gradient-background{background: var(--wp--preset--gradient--cool-to-warm-spectrum) !important;}.has-blush-light-purple-gradient-background{background: var(--wp--preset--gradient--blush-light-purple) !important;}.has-blush-bordeaux-gradient-background{background: var(--wp--preset--gradient--blush-bordeaux) !important;}.has-luminous-dusk-gradient-background{background: var(--wp--preset--gradient--luminous-dusk) !important;}.has-pale-ocean-gradient-background{background: var(--wp--preset--gradient--pale-ocean) !important;}.has-electric-grass-gradient-background{background: var(--wp--preset--gradient--electric-grass) !important;}.has-midnight-gradient-background{background: var(--wp--preset--gradient--midnight) !important;}.has-small-font-size{font-size: var(--wp--preset--font-size--small) !important;}.has-medium-font-size{font-size: var(--wp--preset--font-size--medium) !important;}.has-large-font-size{font-size: var(--wp--preset--font-size--large) !important;}.has-x-large-font-size{font-size: var(--wp--preset--font-size--x-large) !important;}.has-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/sun/jetpack_vendor/automattic/jetpack-mu-wpcom/src/build/verbum-comments/verbum-comments.css?m=1785880900i&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/??-eJyFi0EKAjEMAD9kDevKigfxLd0QayRNSpuy+HtXvCiC3mZgBpYS0NRJHfxKmRqUPgNajcJK0PwutMXWNvCnZMVXHZaClr+e3EORnlgbVJrF0ooJ1upNf02JLIhhdDb9kHCRyPW5nvNpOOyH6TiOu+n2AKDtUTE=&cssminify=yes' type='text/css' media='all' />
|
||
<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-18-1' href='/_static/??-eJyNjcsKAjEMRX/ImhmUURfip0inLW3GNCmmQfx7H7gRN+7ugcs5cGsuCPfEHaq5RpaRFZbUmw+XD4MaQ5VolBS0+GuKPsb7eyLndVBdwd+iM3KA2ZAiqAT05Eiy6Bf8KHtJ9RkvW8gks6fX4VSP426/mQ7TMA7LA38FSqA=&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":"27679227","postID":"1689","siteURL":"https://henrikwarne.com","xhrURL":"https://henrikwarne.com/wp-admin/admin-ajax.php","nonce":"819ed244dc","isLoggedIn":"","statusMessage":"","subsEmailDefault":"instantly","proxyScriptUrl":"https://s0.wp.com/wp-content/js/wpcom-proxy-request.js?m=1513050504i&ver=20211021","shortlink":"https://wp.me/p1S8D9-rf","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/sun/jetpack_vendor/automattic/jetpack-mu-wpcom/src/build/"};
|
||
//# sourceURL=jetpack-mu-wpcom-settings-js-before
|
||
</script>
|
||
<script crossorigin='anonymous' type='text/javascript' src='/_static/??/wp-content/mu-plugins/jetpack-plugin/sun/_inc/build/related-posts/related-posts.min.js,/wp-content/js/rlt-proxy.js?m=1788794984j'></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://henrikwarne1.wordpress.com/xmlrpc.php?rsd" />
|
||
<meta name="generator" content="WordPress.com" />
|
||
<link rel="canonical" href="https://henrikwarne.com/2018/12/03/developer-on-call/" />
|
||
<link rel='shortlink' href='https://wp.me/p1S8D9-rf' />
|
||
<link rel="alternate" type="application/json+oembed" href="https://public-api.wordpress.com/oembed/?format=json&url=https%3A%2F%2Fhenrikwarne.com%2F2018%2F12%2F03%2Fdeveloper-on-call%2F&for=wpcom-auto-discovery" /><link rel="alternate" type="application/xml+oembed" href="https://public-api.wordpress.com/oembed/?format=xml&url=https%3A%2F%2Fhenrikwarne.com%2F2018%2F12%2F03%2Fdeveloper-on-call%2F&for=wpcom-auto-discovery" />
|
||
<!-- Jetpack Open Graph Tags -->
|
||
<meta property="og:type" content="article" />
|
||
<meta property="og:title" content="Developer On Call" />
|
||
<meta property="og:url" content="https://henrikwarne.com/2018/12/03/developer-on-call/" />
|
||
<meta property="og:description" content="For the system at work, I am on call one week every seven weeks. For most of the past ten years, I have been on organized on call rotations for the systems I have been developing. I think being on …" />
|
||
<meta property="article:published_time" content="2018-12-03T05:48:28+00:00" />
|
||
<meta property="article:modified_time" content="2018-12-03T12:49:46+00:00" />
|
||
<meta property="og:site_name" content="Henrik Warne's blog" />
|
||
<meta property="og:image" content="https://henrikwarne.com/wp-content/uploads/2018/12/dsc_8891-e1543679260354.jpg?w=300" />
|
||
<meta property="og:image:width" content="511" />
|
||
<meta property="og:image:height" content="218" />
|
||
<meta property="og:image:alt" content="" />
|
||
<meta property="og:locale" content="en_US" />
|
||
<meta property="article:publisher" content="https://www.facebook.com/WordPresscom" />
|
||
<meta name="twitter:creator" content="@henrikwarne" />
|
||
<meta name="twitter:site" content="@henrikwarne" />
|
||
<meta name="twitter:text:title" content="Developer On Call" />
|
||
<meta name="twitter:image" content="https://henrikwarne.com/wp-content/uploads/2018/12/dsc_8891-e1543679260354.jpg?w=640" />
|
||
<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://henrikwarne.com/?openidserver=1' />
|
||
<link rel='openid.delegate' href='https://henrikwarne.com/' />
|
||
<link rel="search" type="application/opensearchdescription+xml" href="https://henrikwarne.com/osd.xml" title="Henrik Warne's blog" />
|
||
<link rel="search" type="application/opensearchdescription+xml" href="https://s1.wp.com/opensearch.xml" title="WordPress.com" />
|
||
<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="For the system at work, I am on call one week every seven weeks. For most of the past ten years, I have been on organized on call rotations for the systems I have been developing. I think being on call is a logical way of taking responsibility for your work. You also learn a…" />
|
||
<link crossorigin='anonymous' rel='stylesheet' id='all-css-0-3' href='/_static/??-eJyNjMEKgzAQBX9IfVpq60X8lGLXRaLJJrhZ/P1SUM8eZxgGeyopSmbJCFYmb7MTxcI5jbQeDDXBxwnh6yOtCt1d4q0i1QK3ByFO5llB4xZN2V/NKf6/IfTNu2sfzbPuXssPrlM6pw==&cssminify=yes' type='text/css' media='all' />
|
||
<style id="jetpack-subscriptions-inline-css">
|
||
#subscribe-email input {
|
||
width: 95%;
|
||
}
|
||
|
||
.comment-subscription-form {
|
||
margin-bottom: 1em;
|
||
}
|
||
|
||
.comment-subscription-form .subscribe-label {
|
||
display: inline !important;
|
||
}
|
||
|
||
/*
|
||
Text meant only for screen readers.
|
||
Provides support for themes that do not bundle this CSS yet.
|
||
@see https://make.wordpress.org/accessibility/2015/02/09/hiding-text-for-screen-readers-with-wordpress-core/
|
||
***********************************/
|
||
.screen-reader-text {
|
||
border: 0;
|
||
clip-path: inset(50%);
|
||
height: 1px;
|
||
margin: -1px;
|
||
overflow: hidden;
|
||
padding: 0;
|
||
position: absolute !important;
|
||
width: 1px;
|
||
overflow-wrap: normal !important;
|
||
}
|
||
|
||
/*# sourceURL=/wp-content/mu-plugins/jetpack-plugin/sun/_inc/build/subscriptions/subscriptions.min.css */
|
||
</style>
|
||
|
||
</head>
|
||
|
||
<body class="wp-singular post-template-default single single-post postid-1689 single-format-standard wp-theme-pubcoraline customizer-styles-applied two-column content-sidebar jetpack-reblog-enabled">
|
||
<div id="container" class="hfeed contain">
|
||
<div id="header">
|
||
<div id="masthead" role="banner">
|
||
<div id="site-title">
|
||
<span>
|
||
<a href="https://henrikwarne.com/" title="Henrik Warne's blog" rel="home">Henrik Warne's blog</a>
|
||
</span>
|
||
</div>
|
||
<div id="site-description">Thoughts on programming…</div>
|
||
</div><!-- #masthead -->
|
||
|
||
<div id="access" role="navigation">
|
||
<div class="skip-link screen-reader-text"><a href="#content" title="Skip to content">Skip to content</a></div>
|
||
<div class="menu"><ul>
|
||
<li ><a href="https://henrikwarne.com/">Home</a></li><li class="page_item page-item-2"><a href="https://henrikwarne.com/about/">About</a></li>
|
||
</ul></div>
|
||
</div><!-- #access -->
|
||
|
||
<div id="branding">
|
||
<a href="https://henrikwarne.com/">
|
||
<img src="https://henrikwarne.com/wp-content/uploads/2011/09/cropped-desk1.jpg" width="990" height="180" alt="" />
|
||
</a>
|
||
</div><!-- #branding -->
|
||
</div><!-- #header -->
|
||
|
||
<div id="content-box">
|
||
|
||
<div id="content-container">
|
||
<div id="content" role="main">
|
||
|
||
|
||
<div id="nav-above" class="navigation">
|
||
<div class="nav-previous"><a href="https://henrikwarne.com/2018/08/11/my-favorite-command-line-shortcuts/" rel="prev"><span class="meta-nav">←</span> My Favorite Command-Line Shortcuts</a></div>
|
||
<div class="nav-next"><a href="https://henrikwarne.com/2019/03/30/programming-math-or-writing/" rel="next">Programming: Math or Writing? <span class="meta-nav">→</span></a></div>
|
||
</div><!-- #nav-above -->
|
||
|
||
<div id="post-1689" class="post-1689 post type-post status-publish format-standard hentry category-work tag-on-call">
|
||
|
||
|
||
<h1 class="entry-title">Developer On Call</h1>
|
||
<div class="entry-meta">
|
||
<span class="meta-prep meta-prep-author">Posted on</span> <a href="https://henrikwarne.com/2018/12/03/developer-on-call/" title="6:48 am" rel="bookmark"><span class="entry-date">December 3, 2018</span></a> <span class="comments-link"><span class="meta-sep">|</span> <a href="https://henrikwarne.com/2018/12/03/developer-on-call/#comments">14 Comments</a></span>
|
||
</div><!-- .entry-meta -->
|
||
|
||
<div class="entry-content">
|
||
<p>For the system at work, I am on call one week every seven weeks. For most of the past ten years, I have been on organized on call rotations for the systems I have been developing. I think being on call is a logical way of taking responsibility for your work. You also learn a lot from it. However, it is stressful and an inconvenience, so you should get paid for it.<a href="https://henrikwarne.com/wp-content/uploads/2018/12/dsc_8891-e1543679260354.jpg"><img data-attachment-id="1693" data-permalink="https://henrikwarne.com/2018/12/03/developer-on-call/dsc_8891/" data-orig-file="https://henrikwarne.com/wp-content/uploads/2018/12/dsc_8891-e1543679260354.jpg" data-orig-size="4000,1700" data-comments-opened="1" data-image-meta="{"aperture":"2","credit":"","camera":"G8441","caption":"","created_timestamp":"1542141229","copyright":"","focal_length":"4.4","iso":"3200","shutter_speed":"0.0625","title":"","orientation":"1","latitude":"59.303830277778","longitude":"18.082775"}" data-image-title="DSC_8891" data-image-description="" data-image-caption="" data-large-file="https://henrikwarne.com/wp-content/uploads/2018/12/dsc_8891-e1543679260354.jpg?w=500" class="aligncenter wp-image-1693" src="https://henrikwarne.com/wp-content/uploads/2018/12/dsc_8891-e1543679260354.jpg?w=511&h=218" alt="" width="511" height="218" srcset="https://henrikwarne.com/wp-content/uploads/2018/12/dsc_8891-e1543679260354.jpg?w=300 300w, https://henrikwarne.com/wp-content/uploads/2018/12/dsc_8891-e1543679260354.jpg?w=511 511w, https://henrikwarne.com/wp-content/uploads/2018/12/dsc_8891-e1543679260354.jpg?w=1022 1022w, https://henrikwarne.com/wp-content/uploads/2018/12/dsc_8891-e1543679260354.jpg?w=150 150w, https://henrikwarne.com/wp-content/uploads/2018/12/dsc_8891-e1543679260354.jpg?w=768 768w" sizes="(max-width: 511px) 100vw, 511px" /></a><span id="more-1689"></span></p>
|
||
<h1>Why Developers Should Be On Call</h1>
|
||
<p>Many systems need to be available around the clock, so <em>somebody</em> has to be on call for support. In my mind, it is natural that the people developing it also support it.</p>
|
||
<p><strong>Skin in the game</strong>. As a developer, taking responsibility for your code means not just writing it, but testing it and making sure it does what it is supposed to, even when it is running in production. When you know you might get woken up in the middle of the night if there is a problem, you become more careful coding and testing. In his book <a href="https://henrikwarne.com/2014/06/08/antifragility-and-software-development/">Antifragile</a>, Nassim Nicholas Taleb mentions how Roman engineers had to spend some time under the bridges they built – to ensure they did a good job.</p>
|
||
<p><strong>Holistic view.</strong> Troubleshooting the system forces you to get a good understanding of how it all works. If you don’t work with support, it is easy to end up knowing some parts really well, but not seeing the whole picture of how all the parts connect and interact. Also, you get to see firsthand all the ways in which the customers are using the system.</p>
|
||
<p><strong>Drives improvements.</strong> When you work on fixing problems in the system, it is immediately clear if the logging or troubleshooting tools aren’t as good as they should be. As a developer of the system, you can fix these problems as you run in to them. You can improve the logging by adding more relevant information, or by removing log statements that only clog up the logs. You can write scripts and other tools that help in troubleshooting and recovery. You can remove false alarms. Over time, many such small improvements add up to a much better and more resilient system.</p>
|
||
<h1>Alarms</h1>
|
||
<p><strong>Phone calls and alarms.</strong> At <a href="https://www.trioptima.com/">TriOptima</a>, we have an emergency number that can be called if there is a problem with the system. The number is forwarded to the developer on call. Over time, we have also added more and more monitoring of, for example, exceptions thrown, queue lengths and memory, CPU and disk utilization. The monitoring will generate alarms that will wake up the developer on call. These days we are almost never woken up by phone calls, because we get the alarms from the monitoring before most customers notice a problem.</p>
|
||
<p><strong>Heartbeat jobs.</strong> For two of the major interacting systems, we run periodic heartbeat jobs (every minute and every five minutes). If they are not executed as expected, alarms are raised. These have proven to be extremely useful, because they tend to catch a whole range of problems. For example, recently the server sending us data ran out of threads. One effect of that was that our heartbeat job did not run, so we got an alarm. On other occasions, we have become aware of connectivity problems through the heartbeat jobs. In the book <a href="https://henrikwarne.com/2016/10/27/book-review-release-it/">Release It!</a>, Michael T. Nygard calls these synthetic transactions.</p>
|
||
<p><span style="color:#444444;"><strong>Easy roll backs.</strong> At work, we deploy new features and bug fixes as they are ready. This means many small deploys throughout the day. If we get woken up at night because of a problem, the solution is often to roll back the most recent deploy. This is an easy and quick operation thanks to Kubernetes. A few changes, such as database migrations, can be harder to roll back. But since we know this, and have skin in the game, we try to write these to be as easy as possible to roll back. We also make high risk deployments in the morning, to have the whole day to monitor the system.</span></p>
|
||
<p><strong>Improving the alarms.</strong> We are continuously tuning the alarms to make them more precise, and to weed out false alarms. One example is the queue length alarms. We started out by raising an alarm if the average length during the last 10 minutes was over a threshold. However, after fixing such problems, the queue length alarm did not clear until the average came down below the threshold. Not clearing it right away could mask a new problems happening. So we changed it to be raised as soon as the threshold was reached, and to clear it as soon as the queue length got down to zero. This made that particular alarm more precise and responsive. Only last Friday I was tweaking another alarm – some synchronization problems can wait until regular office hours, so those no longer wake anybody up.</p>
|
||
<h1>Compensation and Scheduling</h1>
|
||
<p><strong>Pay.</strong> People on call should get paid extra for it. There is a significant impact on your life if you have to be ready to log on and troubleshoot issues at any time during a week, so you deserve to be compensated for that. I think the best system is when you both get a fixed amount just for being on call, whether there are incidents or not, and you also get paid every time you get called out. Getting time off in lieu is also a possibility.</p>
|
||
<p><strong>Scheduling.</strong> When I have been on call, it has always been one week at a time, and I think that is a good duration. It is good to draw up the schedule far in advance (many months ahead). That way it is easier to plan other activities in your life. It is also really good to be able to swap weeks with other developers in the team. It is hard to say what the ideal cycle time for on call is. Too often, and it is hard to live a normal life. Too seldom and you don’t get enough practice and get rusty. Every seven or eight weeks is a good interval for me.</p>
|
||
<p><strong>Escalation.</strong> There should always be an escalation path if there is a real crisis. If the whole system is down and you are not making any progress fixing the problem, you need to bring in more help. Typically a manager will be the escalation point, and they will try to get hold of whoever else can help. I also tell my colleagues that I don’t mind being called, even if I am not on call that week, if there is something I can help with. I have only been called a few times in ten years, but just knowing that you can call other team members if necessary helps lower the stress of being on call.</p>
|
||
<p><strong>Onboarding.</strong> New members on the team need time to get to know the system and practice troubleshooting before they join the on call rotation. After that, we pair up with the new member for a week of on call together, before they are scheduled on their own.</p>
|
||
<h1>Conclusion</h1>
|
||
<p>Even though being on call can be quite stressful at times, I think it is really beneficial. Being on call means taking responsibility for what you develop. In the process you learn how the system works (or doesn’t work), and can use that feedback to improve the system. However, the burden of being on call needs to be shared between team members, and you should get paid properly for it.</p>
|
||
<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-icon-text sd-sharing"><h3 class="sd-title">Share this:</h3><div class="sd-content"><ul><li class="share-twitter"><a rel="nofollow noopener noreferrer"
|
||
data-shared="sharing-twitter-1689"
|
||
class="share-twitter sd-button share-icon"
|
||
href="https://henrikwarne.com/2018/12/03/developer-on-call/?share=twitter"
|
||
target="_blank"
|
||
aria-labelledby="sharing-twitter-1689"
|
||
>
|
||
<span id="sharing-twitter-1689" hidden>Share on X (Opens in new window)</span>
|
||
<span>X</span>
|
||
</a></li><li class="share-facebook"><a rel="nofollow noopener noreferrer"
|
||
data-shared="sharing-facebook-1689"
|
||
class="share-facebook sd-button share-icon"
|
||
href="https://henrikwarne.com/2018/12/03/developer-on-call/?share=facebook"
|
||
target="_blank"
|
||
aria-labelledby="sharing-facebook-1689"
|
||
>
|
||
<span id="sharing-facebook-1689" hidden>Share on Facebook (Opens in new window)</span>
|
||
<span>Facebook</span>
|
||
</a></li><li class="share-linkedin"><a rel="nofollow noopener noreferrer"
|
||
data-shared="sharing-linkedin-1689"
|
||
class="share-linkedin sd-button share-icon"
|
||
href="https://henrikwarne.com/2018/12/03/developer-on-call/?share=linkedin"
|
||
target="_blank"
|
||
aria-labelledby="sharing-linkedin-1689"
|
||
>
|
||
<span id="sharing-linkedin-1689" hidden>Share on LinkedIn (Opens in new window)</span>
|
||
<span>LinkedIn</span>
|
||
</a></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-27679227-1689-6aa0894fd6791' data-src='//widgets.wp.com/likes/index.html?ver=20260908#blog_id=27679227&post_id=1689&origin=henrikwarne1.wordpress.com&obj_id=27679227-1689-6aa0894fd6791&domain=henrikwarne.com' data-name='like-post-frame-27679227-1689-6aa0894fd6791' 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-info">
|
||
This entry was posted in <a href="https://henrikwarne.com/category/work/" rel="category tag">Work</a> and tagged <a href="https://henrikwarne.com/tag/on-call/" rel="tag">on call</a>. Bookmark the <a href="https://henrikwarne.com/2018/12/03/developer-on-call/" title="Permalink to Developer On Call" rel="bookmark">permalink</a>. </div><!-- .entry-info -->
|
||
</div><!-- #post-## -->
|
||
|
||
<div id="nav-below" class="navigation">
|
||
<div class="nav-previous"><a href="https://henrikwarne.com/2018/08/11/my-favorite-command-line-shortcuts/" rel="prev"><span class="meta-nav">←</span> My Favorite Command-Line Shortcuts</a></div>
|
||
<div class="nav-next"><a href="https://henrikwarne.com/2019/03/30/programming-math-or-writing/" rel="next">Programming: Math or Writing? <span class="meta-nav">→</span></a></div>
|
||
</div><!-- #nav-below -->
|
||
|
||
|
||
<div id="comments">
|
||
|
||
|
||
<h3 id="comments-title">
|
||
14 responses to “<span>Developer On Call</span>” </h3>
|
||
|
||
|
||
<ol class="commentlist">
|
||
<li class="comment even thread-even depth-1" id="li-comment-16577">
|
||
<div id="comment-16577">
|
||
<div class="comment-author vcard">
|
||
<img referrerpolicy="no-referrer" alt='Kay's avatar' src='https://1.gravatar.com/avatar/ad3ae64a7f2c05dc5906201d9c3aff743dc7be1cbbbb107ab17fd676fe5e17ac?s=48&d=identicon&r=G' srcset='https://1.gravatar.com/avatar/ad3ae64a7f2c05dc5906201d9c3aff743dc7be1cbbbb107ab17fd676fe5e17ac?s=48&d=identicon&r=G 1x, https://1.gravatar.com/avatar/ad3ae64a7f2c05dc5906201d9c3aff743dc7be1cbbbb107ab17fd676fe5e17ac?s=72&d=identicon&r=G 1.5x, https://1.gravatar.com/avatar/ad3ae64a7f2c05dc5906201d9c3aff743dc7be1cbbbb107ab17fd676fe5e17ac?s=96&d=identicon&r=G 2x, https://1.gravatar.com/avatar/ad3ae64a7f2c05dc5906201d9c3aff743dc7be1cbbbb107ab17fd676fe5e17ac?s=144&d=identicon&r=G 3x, https://1.gravatar.com/avatar/ad3ae64a7f2c05dc5906201d9c3aff743dc7be1cbbbb107ab17fd676fe5e17ac?s=192&d=identicon&r=G 4x' class='avatar avatar-48' height='48' width='48' decoding='async' />
|
||
<cite class="fn">Kay</cite>
|
||
|
||
<span class="comment-meta commentmetadata">
|
||
|
|
||
<a href="https://henrikwarne.com/2018/12/03/developer-on-call/#comment-16577">
|
||
December 3, 2018 at 8:06 am</a>
|
||
|
|
||
<a rel="nofollow" class="comment-reply-link" href="https://henrikwarne.com/2018/12/03/developer-on-call/?replytocom=16577#respond" data-commentid="16577" data-postid="1689" data-belowelement="comment-16577" data-respondelement="respond" data-replyto="Reply to Kay" aria-label="Reply to Kay">Reply</a> </span><!-- .comment-meta .commentmetadata -->
|
||
</div><!-- .comment-author .vcard -->
|
||
|
||
<div class="comment-body"><p>This is the standard model at most places I’ve worked. It will continue to become even more common if devops culture succeeds in producing more teams that own the systems they write. The tradition AM model is finally dying.</p>
|
||
</div>
|
||
|
||
</div><!-- #comment-## -->
|
||
|
||
</li><!-- #comment-## -->
|
||
<li class="comment byuser comment-author-henrikw1 bypostauthor odd alt thread-odd thread-alt depth-1" id="li-comment-16585">
|
||
<div id="comment-16585">
|
||
<div class="comment-author vcard">
|
||
<img referrerpolicy="no-referrer" alt='Henrik Warne's avatar' src='https://0.gravatar.com/avatar/c2db5a42ecb31f210fdcc13590652ad51ddb7629cc1cd344d51a7aa269f29a0b?s=48&d=identicon&r=G' srcset='https://0.gravatar.com/avatar/c2db5a42ecb31f210fdcc13590652ad51ddb7629cc1cd344d51a7aa269f29a0b?s=48&d=identicon&r=G 1x, https://0.gravatar.com/avatar/c2db5a42ecb31f210fdcc13590652ad51ddb7629cc1cd344d51a7aa269f29a0b?s=72&d=identicon&r=G 1.5x, https://0.gravatar.com/avatar/c2db5a42ecb31f210fdcc13590652ad51ddb7629cc1cd344d51a7aa269f29a0b?s=96&d=identicon&r=G 2x, https://0.gravatar.com/avatar/c2db5a42ecb31f210fdcc13590652ad51ddb7629cc1cd344d51a7aa269f29a0b?s=144&d=identicon&r=G 3x, https://0.gravatar.com/avatar/c2db5a42ecb31f210fdcc13590652ad51ddb7629cc1cd344d51a7aa269f29a0b?s=192&d=identicon&r=G 4x' class='avatar avatar-48' height='48' width='48' decoding='async' />
|
||
<cite class="fn"><a href="http://henrikwarne.com" class="url" rel="ugc">Henrik Warne</a></cite>
|
||
|
||
<span class="comment-meta commentmetadata">
|
||
|
|
||
<a href="https://henrikwarne.com/2018/12/03/developer-on-call/#comment-16585">
|
||
December 3, 2018 at 9:09 am</a>
|
||
|
|
||
<a rel="nofollow" class="comment-reply-link" href="https://henrikwarne.com/2018/12/03/developer-on-call/?replytocom=16585#respond" data-commentid="16585" data-postid="1689" data-belowelement="comment-16585" data-respondelement="respond" data-replyto="Reply to Henrik Warne" aria-label="Reply to Henrik Warne">Reply</a> </span><!-- .comment-meta .commentmetadata -->
|
||
</div><!-- .comment-author .vcard -->
|
||
|
||
<div class="comment-body"><p>Hacker News discussion: <a href="https://news.ycombinator.com/item?id=18586743" rel="nofollow ugc">https://news.ycombinator.com/item?id=18586743</a></p>
|
||
</div>
|
||
|
||
</div><!-- #comment-## -->
|
||
|
||
</li><!-- #comment-## -->
|
||
<li class="comment byuser comment-author-henrikw1 bypostauthor even thread-even depth-1" id="li-comment-16589">
|
||
<div id="comment-16589">
|
||
<div class="comment-author vcard">
|
||
<img referrerpolicy="no-referrer" alt='Henrik Warne's avatar' src='https://0.gravatar.com/avatar/c2db5a42ecb31f210fdcc13590652ad51ddb7629cc1cd344d51a7aa269f29a0b?s=48&d=identicon&r=G' srcset='https://0.gravatar.com/avatar/c2db5a42ecb31f210fdcc13590652ad51ddb7629cc1cd344d51a7aa269f29a0b?s=48&d=identicon&r=G 1x, https://0.gravatar.com/avatar/c2db5a42ecb31f210fdcc13590652ad51ddb7629cc1cd344d51a7aa269f29a0b?s=72&d=identicon&r=G 1.5x, https://0.gravatar.com/avatar/c2db5a42ecb31f210fdcc13590652ad51ddb7629cc1cd344d51a7aa269f29a0b?s=96&d=identicon&r=G 2x, https://0.gravatar.com/avatar/c2db5a42ecb31f210fdcc13590652ad51ddb7629cc1cd344d51a7aa269f29a0b?s=144&d=identicon&r=G 3x, https://0.gravatar.com/avatar/c2db5a42ecb31f210fdcc13590652ad51ddb7629cc1cd344d51a7aa269f29a0b?s=192&d=identicon&r=G 4x' class='avatar avatar-48' height='48' width='48' loading='lazy' decoding='async' />
|
||
<cite class="fn"><a href="http://henrikwarne.com" class="url" rel="ugc">Henrik Warne</a></cite>
|
||
|
||
<span class="comment-meta commentmetadata">
|
||
|
|
||
<a href="https://henrikwarne.com/2018/12/03/developer-on-call/#comment-16589">
|
||
December 3, 2018 at 9:26 am</a>
|
||
|
|
||
<a rel="nofollow" class="comment-reply-link" href="https://henrikwarne.com/2018/12/03/developer-on-call/?replytocom=16589#respond" data-commentid="16589" data-postid="1689" data-belowelement="comment-16589" data-respondelement="respond" data-replyto="Reply to Henrik Warne" aria-label="Reply to Henrik Warne">Reply</a> </span><!-- .comment-meta .commentmetadata -->
|
||
</div><!-- .comment-author .vcard -->
|
||
|
||
<div class="comment-body"><p>Reddit discussion: <a href="https://www.reddit.com/r/programming/comments/a2lrrh/" rel="nofollow ugc">https://www.reddit.com/r/programming/comments/a2lrrh/</a></p>
|
||
</div>
|
||
|
||
</div><!-- #comment-## -->
|
||
|
||
</li><!-- #comment-## -->
|
||
<li class="comment odd alt thread-odd thread-alt depth-1" id="li-comment-16592">
|
||
<div id="comment-16592">
|
||
<div class="comment-author vcard">
|
||
<img referrerpolicy="no-referrer" alt='Aby's avatar' src='https://0.gravatar.com/avatar/61b3c9ca87a3fdb2d2ab66bb7241af342070e2d41947d47e0c310c1507408f94?s=48&d=identicon&r=G' srcset='https://0.gravatar.com/avatar/61b3c9ca87a3fdb2d2ab66bb7241af342070e2d41947d47e0c310c1507408f94?s=48&d=identicon&r=G 1x, https://0.gravatar.com/avatar/61b3c9ca87a3fdb2d2ab66bb7241af342070e2d41947d47e0c310c1507408f94?s=72&d=identicon&r=G 1.5x, https://0.gravatar.com/avatar/61b3c9ca87a3fdb2d2ab66bb7241af342070e2d41947d47e0c310c1507408f94?s=96&d=identicon&r=G 2x, https://0.gravatar.com/avatar/61b3c9ca87a3fdb2d2ab66bb7241af342070e2d41947d47e0c310c1507408f94?s=144&d=identicon&r=G 3x, https://0.gravatar.com/avatar/61b3c9ca87a3fdb2d2ab66bb7241af342070e2d41947d47e0c310c1507408f94?s=192&d=identicon&r=G 4x' class='avatar avatar-48' height='48' width='48' loading='lazy' decoding='async' />
|
||
<cite class="fn">Aby</cite>
|
||
|
||
<span class="comment-meta commentmetadata">
|
||
|
|
||
<a href="https://henrikwarne.com/2018/12/03/developer-on-call/#comment-16592">
|
||
December 3, 2018 at 12:37 pm</a>
|
||
|
|
||
<a rel="nofollow" class="comment-reply-link" href="https://henrikwarne.com/2018/12/03/developer-on-call/?replytocom=16592#respond" data-commentid="16592" data-postid="1689" data-belowelement="comment-16592" data-respondelement="respond" data-replyto="Reply to Aby" aria-label="Reply to Aby">Reply</a> </span><!-- .comment-meta .commentmetadata -->
|
||
</div><!-- .comment-author .vcard -->
|
||
|
||
<div class="comment-body"><p>Thanks for this post. I learned alot.</p>
|
||
</div>
|
||
|
||
</div><!-- #comment-## -->
|
||
|
||
</li><!-- #comment-## -->
|
||
<li class="comment byuser comment-author-borghildhedda even thread-even depth-1" id="li-comment-16594">
|
||
<div id="comment-16594">
|
||
<div class="comment-author vcard">
|
||
<img referrerpolicy="no-referrer" alt='borghild hedda's avatar' src='https://1.gravatar.com/avatar/ab6578fd542d109afe659d8faceaf297fb24434c6c8797873073dc3583c7a76d?s=48&d=identicon&r=G' srcset='https://1.gravatar.com/avatar/ab6578fd542d109afe659d8faceaf297fb24434c6c8797873073dc3583c7a76d?s=48&d=identicon&r=G 1x, https://1.gravatar.com/avatar/ab6578fd542d109afe659d8faceaf297fb24434c6c8797873073dc3583c7a76d?s=72&d=identicon&r=G 1.5x, https://1.gravatar.com/avatar/ab6578fd542d109afe659d8faceaf297fb24434c6c8797873073dc3583c7a76d?s=96&d=identicon&r=G 2x, https://1.gravatar.com/avatar/ab6578fd542d109afe659d8faceaf297fb24434c6c8797873073dc3583c7a76d?s=144&d=identicon&r=G 3x, https://1.gravatar.com/avatar/ab6578fd542d109afe659d8faceaf297fb24434c6c8797873073dc3583c7a76d?s=192&d=identicon&r=G 4x' class='avatar avatar-48' height='48' width='48' loading='lazy' decoding='async' />
|
||
<cite class="fn">borghild hedda</cite>
|
||
|
||
<span class="comment-meta commentmetadata">
|
||
|
|
||
<a href="https://henrikwarne.com/2018/12/03/developer-on-call/#comment-16594">
|
||
December 3, 2018 at 2:40 pm</a>
|
||
|
|
||
<a rel="nofollow" class="comment-reply-link" href="https://henrikwarne.com/2018/12/03/developer-on-call/?replytocom=16594#respond" data-commentid="16594" data-postid="1689" data-belowelement="comment-16594" data-respondelement="respond" data-replyto="Reply to borghild hedda" aria-label="Reply to borghild hedda">Reply</a> </span><!-- .comment-meta .commentmetadata -->
|
||
</div><!-- .comment-author .vcard -->
|
||
|
||
<div class="comment-body"><p>1. for every week of oncall a developer should get 1 day off.<br />
|
||
2. If developer had to work nights, he should be compensation with additional days off.<br />
|
||
3. no payment would reduce the stress so we should not ask for payment compensation.</p>
|
||
</div>
|
||
|
||
</div><!-- #comment-## -->
|
||
|
||
</li><!-- #comment-## -->
|
||
<li class="comment odd alt thread-odd thread-alt depth-1" id="li-comment-16598">
|
||
<div id="comment-16598">
|
||
<div class="comment-author vcard">
|
||
<img referrerpolicy="no-referrer" alt='Jim's avatar' src='https://2.gravatar.com/avatar/5a9015d8b411672e457a796602e9157e32105253d2251625bc9958620b522637?s=48&d=identicon&r=G' srcset='https://2.gravatar.com/avatar/5a9015d8b411672e457a796602e9157e32105253d2251625bc9958620b522637?s=48&d=identicon&r=G 1x, https://2.gravatar.com/avatar/5a9015d8b411672e457a796602e9157e32105253d2251625bc9958620b522637?s=72&d=identicon&r=G 1.5x, https://2.gravatar.com/avatar/5a9015d8b411672e457a796602e9157e32105253d2251625bc9958620b522637?s=96&d=identicon&r=G 2x, https://2.gravatar.com/avatar/5a9015d8b411672e457a796602e9157e32105253d2251625bc9958620b522637?s=144&d=identicon&r=G 3x, https://2.gravatar.com/avatar/5a9015d8b411672e457a796602e9157e32105253d2251625bc9958620b522637?s=192&d=identicon&r=G 4x' class='avatar avatar-48' height='48' width='48' loading='lazy' decoding='async' />
|
||
<cite class="fn">Jim</cite>
|
||
|
||
<span class="comment-meta commentmetadata">
|
||
|
|
||
<a href="https://henrikwarne.com/2018/12/03/developer-on-call/#comment-16598">
|
||
December 3, 2018 at 8:07 pm</a>
|
||
|
|
||
<a rel="nofollow" class="comment-reply-link" href="https://henrikwarne.com/2018/12/03/developer-on-call/?replytocom=16598#respond" data-commentid="16598" data-postid="1689" data-belowelement="comment-16598" data-respondelement="respond" data-replyto="Reply to Jim" aria-label="Reply to Jim">Reply</a> </span><!-- .comment-meta .commentmetadata -->
|
||
</div><!-- .comment-author .vcard -->
|
||
|
||
<div class="comment-body"><p>And yet, there are places that claim since US engineering is typically an “exempt” position, “it’s just a part of the job.”</p>
|
||
<p>We need to push to not accept that anymore.</p>
|
||
</div>
|
||
|
||
</div><!-- #comment-## -->
|
||
|
||
</li><!-- #comment-## -->
|
||
<li class="comment even thread-even depth-1" id="li-comment-16599">
|
||
<div id="comment-16599">
|
||
<div class="comment-author vcard">
|
||
<img referrerpolicy="no-referrer" alt='null's avatar' src='https://1.gravatar.com/avatar/dfc4f61810f3f09ae6673b1bab60e607698c0bc343482c13efa20648fdd9e25b?s=48&d=identicon&r=G' srcset='https://1.gravatar.com/avatar/dfc4f61810f3f09ae6673b1bab60e607698c0bc343482c13efa20648fdd9e25b?s=48&d=identicon&r=G 1x, https://1.gravatar.com/avatar/dfc4f61810f3f09ae6673b1bab60e607698c0bc343482c13efa20648fdd9e25b?s=72&d=identicon&r=G 1.5x, https://1.gravatar.com/avatar/dfc4f61810f3f09ae6673b1bab60e607698c0bc343482c13efa20648fdd9e25b?s=96&d=identicon&r=G 2x, https://1.gravatar.com/avatar/dfc4f61810f3f09ae6673b1bab60e607698c0bc343482c13efa20648fdd9e25b?s=144&d=identicon&r=G 3x, https://1.gravatar.com/avatar/dfc4f61810f3f09ae6673b1bab60e607698c0bc343482c13efa20648fdd9e25b?s=192&d=identicon&r=G 4x' class='avatar avatar-48' height='48' width='48' loading='lazy' decoding='async' />
|
||
<cite class="fn">null</cite>
|
||
|
||
<span class="comment-meta commentmetadata">
|
||
|
|
||
<a href="https://henrikwarne.com/2018/12/03/developer-on-call/#comment-16599">
|
||
December 3, 2018 at 9:13 pm</a>
|
||
|
|
||
<a rel="nofollow" class="comment-reply-link" href="https://henrikwarne.com/2018/12/03/developer-on-call/?replytocom=16599#respond" data-commentid="16599" data-postid="1689" data-belowelement="comment-16599" data-respondelement="respond" data-replyto="Reply to null" aria-label="Reply to null">Reply</a> </span><!-- .comment-meta .commentmetadata -->
|
||
</div><!-- .comment-author .vcard -->
|
||
|
||
<div class="comment-body"><p>At my last company we were considered on call every day of the year and every hour of the week. It was quite stressful.</p>
|
||
</div>
|
||
|
||
</div><!-- #comment-## -->
|
||
|
||
</li><!-- #comment-## -->
|
||
<li class="comment odd alt thread-odd thread-alt depth-1" id="li-comment-16600">
|
||
<div id="comment-16600">
|
||
<div class="comment-author vcard">
|
||
<img referrerpolicy="no-referrer" alt='missionsix's avatar' src='https://1.gravatar.com/avatar/d5763aa612b12dbb4f103ecfc780d4a9b5ebb44b49bb1346362abf123bba46f3?s=48&d=identicon&r=G' srcset='https://1.gravatar.com/avatar/d5763aa612b12dbb4f103ecfc780d4a9b5ebb44b49bb1346362abf123bba46f3?s=48&d=identicon&r=G 1x, https://1.gravatar.com/avatar/d5763aa612b12dbb4f103ecfc780d4a9b5ebb44b49bb1346362abf123bba46f3?s=72&d=identicon&r=G 1.5x, https://1.gravatar.com/avatar/d5763aa612b12dbb4f103ecfc780d4a9b5ebb44b49bb1346362abf123bba46f3?s=96&d=identicon&r=G 2x, https://1.gravatar.com/avatar/d5763aa612b12dbb4f103ecfc780d4a9b5ebb44b49bb1346362abf123bba46f3?s=144&d=identicon&r=G 3x, https://1.gravatar.com/avatar/d5763aa612b12dbb4f103ecfc780d4a9b5ebb44b49bb1346362abf123bba46f3?s=192&d=identicon&r=G 4x' class='avatar avatar-48' height='48' width='48' loading='lazy' decoding='async' />
|
||
<cite class="fn"><a href="http://gravatar.com/missionsixnet" class="url" rel="ugc external nofollow">missionsix</a></cite>
|
||
|
||
<span class="comment-meta commentmetadata">
|
||
|
|
||
<a href="https://henrikwarne.com/2018/12/03/developer-on-call/#comment-16600">
|
||
December 3, 2018 at 9:31 pm</a>
|
||
|
|
||
<a rel="nofollow" class="comment-reply-link" href="https://henrikwarne.com/2018/12/03/developer-on-call/?replytocom=16600#respond" data-commentid="16600" data-postid="1689" data-belowelement="comment-16600" data-respondelement="respond" data-replyto="Reply to missionsix" aria-label="Reply to missionsix">Reply</a> </span><!-- .comment-meta .commentmetadata -->
|
||
</div><!-- .comment-author .vcard -->
|
||
|
||
<div class="comment-body"><p>Paying for firefighting is a bad idea. It incentivizes the wrong things.</p>
|
||
</div>
|
||
|
||
</div><!-- #comment-## -->
|
||
|
||
<ul class="children">
|
||
<li class="comment byuser comment-author-henrikw1 bypostauthor even depth-2" id="li-comment-16601">
|
||
<div id="comment-16601">
|
||
<div class="comment-author vcard">
|
||
<img referrerpolicy="no-referrer" alt='Henrik Warne's avatar' src='https://0.gravatar.com/avatar/c2db5a42ecb31f210fdcc13590652ad51ddb7629cc1cd344d51a7aa269f29a0b?s=48&d=identicon&r=G' srcset='https://0.gravatar.com/avatar/c2db5a42ecb31f210fdcc13590652ad51ddb7629cc1cd344d51a7aa269f29a0b?s=48&d=identicon&r=G 1x, https://0.gravatar.com/avatar/c2db5a42ecb31f210fdcc13590652ad51ddb7629cc1cd344d51a7aa269f29a0b?s=72&d=identicon&r=G 1.5x, https://0.gravatar.com/avatar/c2db5a42ecb31f210fdcc13590652ad51ddb7629cc1cd344d51a7aa269f29a0b?s=96&d=identicon&r=G 2x, https://0.gravatar.com/avatar/c2db5a42ecb31f210fdcc13590652ad51ddb7629cc1cd344d51a7aa269f29a0b?s=144&d=identicon&r=G 3x, https://0.gravatar.com/avatar/c2db5a42ecb31f210fdcc13590652ad51ddb7629cc1cd344d51a7aa269f29a0b?s=192&d=identicon&r=G 4x' class='avatar avatar-48' height='48' width='48' loading='lazy' decoding='async' />
|
||
<cite class="fn"><a href="http://henrikwarne.com" class="url" rel="ugc">Henrik Warne</a></cite>
|
||
|
||
<span class="comment-meta commentmetadata">
|
||
|
|
||
<a href="https://henrikwarne.com/2018/12/03/developer-on-call/#comment-16601">
|
||
December 3, 2018 at 9:37 pm</a>
|
||
|
|
||
<a rel="nofollow" class="comment-reply-link" href="https://henrikwarne.com/2018/12/03/developer-on-call/?replytocom=16601#respond" data-commentid="16601" data-postid="1689" data-belowelement="comment-16601" data-respondelement="respond" data-replyto="Reply to Henrik Warne" aria-label="Reply to Henrik Warne">Reply</a> </span><!-- .comment-meta .commentmetadata -->
|
||
</div><!-- .comment-author .vcard -->
|
||
|
||
<div class="comment-body"><p>My experience is that everyone on our team works to minimize being called, despite being paid when we *do* get called. Everybody wants a stable system. Is your experience different?</p>
|
||
</div>
|
||
|
||
</div><!-- #comment-## -->
|
||
|
||
</li><!-- #comment-## -->
|
||
</ul><!-- .children -->
|
||
</li><!-- #comment-## -->
|
||
<li class="comment byuser comment-author-missionsixnet odd alt thread-even depth-1" id="li-comment-16602">
|
||
<div id="comment-16602">
|
||
<div class="comment-author vcard">
|
||
<img referrerpolicy="no-referrer" alt='Pat Andrew's avatar' src='https://1.gravatar.com/avatar/d5763aa612b12dbb4f103ecfc780d4a9b5ebb44b49bb1346362abf123bba46f3?s=48&d=identicon&r=G' srcset='https://1.gravatar.com/avatar/d5763aa612b12dbb4f103ecfc780d4a9b5ebb44b49bb1346362abf123bba46f3?s=48&d=identicon&r=G 1x, https://1.gravatar.com/avatar/d5763aa612b12dbb4f103ecfc780d4a9b5ebb44b49bb1346362abf123bba46f3?s=72&d=identicon&r=G 1.5x, https://1.gravatar.com/avatar/d5763aa612b12dbb4f103ecfc780d4a9b5ebb44b49bb1346362abf123bba46f3?s=96&d=identicon&r=G 2x, https://1.gravatar.com/avatar/d5763aa612b12dbb4f103ecfc780d4a9b5ebb44b49bb1346362abf123bba46f3?s=144&d=identicon&r=G 3x, https://1.gravatar.com/avatar/d5763aa612b12dbb4f103ecfc780d4a9b5ebb44b49bb1346362abf123bba46f3?s=192&d=identicon&r=G 4x' class='avatar avatar-48' height='48' width='48' loading='lazy' decoding='async' />
|
||
<cite class="fn">missionsixnet</cite>
|
||
|
||
<span class="comment-meta commentmetadata">
|
||
|
|
||
<a href="https://henrikwarne.com/2018/12/03/developer-on-call/#comment-16602">
|
||
December 3, 2018 at 9:50 pm</a>
|
||
|
|
||
<a rel="nofollow" class="comment-reply-link" href="https://henrikwarne.com/2018/12/03/developer-on-call/?replytocom=16602#respond" data-commentid="16602" data-postid="1689" data-belowelement="comment-16602" data-respondelement="respond" data-replyto="Reply to missionsixnet" aria-label="Reply to missionsixnet">Reply</a> </span><!-- .comment-meta .commentmetadata -->
|
||
</div><!-- .comment-author .vcard -->
|
||
|
||
<div class="comment-body"><p>What I meant by paying for firefighting, is paying extra for incident handling. If an on call shift is part of the work every N weeks, bake that into the salary, don’t incentivize overtime pay. </p>
|
||
<p>Software development and Operations of that software includes keeping it functional and supporting the customer. If you fail to deliver a working product to the customer, your pay should be impacted.</p>
|
||
</div>
|
||
|
||
</div><!-- #comment-## -->
|
||
|
||
<ul class="children">
|
||
<li class="comment byuser comment-author-borghildhedda even depth-2" id="li-comment-16604">
|
||
<div id="comment-16604">
|
||
<div class="comment-author vcard">
|
||
<img referrerpolicy="no-referrer" alt='borghild hedda's avatar' src='https://1.gravatar.com/avatar/ab6578fd542d109afe659d8faceaf297fb24434c6c8797873073dc3583c7a76d?s=48&d=identicon&r=G' srcset='https://1.gravatar.com/avatar/ab6578fd542d109afe659d8faceaf297fb24434c6c8797873073dc3583c7a76d?s=48&d=identicon&r=G 1x, https://1.gravatar.com/avatar/ab6578fd542d109afe659d8faceaf297fb24434c6c8797873073dc3583c7a76d?s=72&d=identicon&r=G 1.5x, https://1.gravatar.com/avatar/ab6578fd542d109afe659d8faceaf297fb24434c6c8797873073dc3583c7a76d?s=96&d=identicon&r=G 2x, https://1.gravatar.com/avatar/ab6578fd542d109afe659d8faceaf297fb24434c6c8797873073dc3583c7a76d?s=144&d=identicon&r=G 3x, https://1.gravatar.com/avatar/ab6578fd542d109afe659d8faceaf297fb24434c6c8797873073dc3583c7a76d?s=192&d=identicon&r=G 4x' class='avatar avatar-48' height='48' width='48' loading='lazy' decoding='async' />
|
||
<cite class="fn">borghild hedda</cite>
|
||
|
||
<span class="comment-meta commentmetadata">
|
||
|
|
||
<a href="https://henrikwarne.com/2018/12/03/developer-on-call/#comment-16604">
|
||
December 4, 2018 at 6:49 am</a>
|
||
|
|
||
<a rel="nofollow" class="comment-reply-link" href="https://henrikwarne.com/2018/12/03/developer-on-call/?replytocom=16604#respond" data-commentid="16604" data-postid="1689" data-belowelement="comment-16604" data-respondelement="respond" data-replyto="Reply to borghild hedda" aria-label="Reply to borghild hedda">Reply</a> </span><!-- .comment-meta .commentmetadata -->
|
||
</div><!-- .comment-author .vcard -->
|
||
|
||
<div class="comment-body"><p>– you might join a team or existing project, so by that logic, your pay is impacted immediately for a new project you have taken and improving it will take you roughly half a year, shouldn’t you get extra for that.<br />
|
||
– the company might put you on 2-4 people on-call rotation that is insane.<br />
|
||
– the oncall is the easiest solution, you just put developers on call, do you support them for adding tasks to sprint to minimize the call? in many cases I have seen that was not the case, the pressure from above to add features at the expense of firefighting at nights is sometimes something a company prefers.<br />
|
||
– the above is not anecdotal<br />
|
||
– why are you expected to work a day after a stressful 24/7 week? the low stress even if there is no call is hurting most of our health, the recuperate it we must have time off immediately after the shift.</p>
|
||
</div>
|
||
|
||
</div><!-- #comment-## -->
|
||
|
||
</li><!-- #comment-## -->
|
||
</ul><!-- .children -->
|
||
</li><!-- #comment-## -->
|
||
<li class="post pingback">
|
||
<p>Pingback: <a href="https://www.geoffmazeroff.com/2018/12/10/professional-development-2018-week-49/" class="url" rel="ugc external nofollow">Professional Development – 2018 – Week 49 – Geoff Mazeroff</a></p>
|
||
</li><!-- #comment-## -->
|
||
<li class="post pingback">
|
||
<p>Pingback: <a href="http://sreweekly.com/sre-weekly-issue-155/" class="url" rel="ugc external nofollow">SRE Weekly Issue #155 – SRE WEEKLY</a></p>
|
||
</li><!-- #comment-## -->
|
||
<li class="comment odd alt thread-odd thread-alt depth-1" id="li-comment-53620">
|
||
<div id="comment-53620">
|
||
<div class="comment-author vcard">
|
||
<img referrerpolicy="no-referrer" alt='Alan's avatar' src='https://2.gravatar.com/avatar/554e510ec81a0e31be51ea4b0a2f217c2741749fc9ef17ed3c55e6d1a0d3a7db?s=48&d=identicon&r=G' srcset='https://2.gravatar.com/avatar/554e510ec81a0e31be51ea4b0a2f217c2741749fc9ef17ed3c55e6d1a0d3a7db?s=48&d=identicon&r=G 1x, https://2.gravatar.com/avatar/554e510ec81a0e31be51ea4b0a2f217c2741749fc9ef17ed3c55e6d1a0d3a7db?s=72&d=identicon&r=G 1.5x, https://2.gravatar.com/avatar/554e510ec81a0e31be51ea4b0a2f217c2741749fc9ef17ed3c55e6d1a0d3a7db?s=96&d=identicon&r=G 2x, https://2.gravatar.com/avatar/554e510ec81a0e31be51ea4b0a2f217c2741749fc9ef17ed3c55e6d1a0d3a7db?s=144&d=identicon&r=G 3x, https://2.gravatar.com/avatar/554e510ec81a0e31be51ea4b0a2f217c2741749fc9ef17ed3c55e6d1a0d3a7db?s=192&d=identicon&r=G 4x' class='avatar avatar-48' height='48' width='48' loading='lazy' decoding='async' />
|
||
<cite class="fn">Alan</cite>
|
||
|
||
<span class="comment-meta commentmetadata">
|
||
|
|
||
<a href="https://henrikwarne.com/2018/12/03/developer-on-call/#comment-53620">
|
||
January 10, 2025 at 3:48 pm</a>
|
||
|
|
||
<a rel="nofollow" class="comment-reply-link" href="https://henrikwarne.com/2018/12/03/developer-on-call/?replytocom=53620#respond" data-commentid="53620" data-postid="1689" data-belowelement="comment-53620" data-respondelement="respond" data-replyto="Reply to Alan" aria-label="Reply to Alan">Reply</a> </span><!-- .comment-meta .commentmetadata -->
|
||
</div><!-- .comment-author .vcard -->
|
||
|
||
<div class="comment-body"><p class="wp-block-paragraph">I have been on call for the last three years and feel no benefit. It’s just a stressful and restricting.</p>
|
||
<p class="wp-block-paragraph">You should be paid for every hour you are on call at an equal or higher (1.5x) amount than your current average hourly rate.</p>
|
||
<p class="wp-block-paragraph">If you are expected to drop anything to attend to work related incidents in your free time then this is no longer your time and is work time and overtime. So you should be paid for any of this time which you are essentially a prisoner to your work. You can’t go out for a meal or see a show, take your kids to a park, go grocery shopping, do a sports activity etc.</p>
|
||
<p class="wp-block-paragraph">“taking responsibility for your code” – The code is never your code, the company you work for makes this clear in the contract. That fact aside – if you want to speak in this way – it’s everyone’s code, and it can be a part of code you have never seen before, or worse (as with my company) not even in your project.</p>
|
||
<p class="wp-block-paragraph">“somebody has to be on call for support. In my mind, it is natural that the people developing it also support it.” In my experience 9 times out of 10 the issues I have been woken for are solved by restarting a service. With services spread out everywhere so they are hard to find, and all using different technologies and having different restart procedures this is seldom a straight forward task. And reading through pages of runbook in a crisis stressful. I find that the IT team is usually much better at administering the system and restarting the services than the people that wrote the code.</p>
|
||
<p class="wp-block-paragraph">“You also learn a lot from it.” People learn in different ways. Personally under pressure in a system I don’t know is where I learn the least.</p>
|
||
<p class="wp-block-paragraph">For me – on call is a necessary evil, for which I am not paid any extra, and often woken in the night. When there is an error it is never in a part of the system I know, almost always something needs restarting or an external service being down. Most colleagues I know go on call and just pray to the god of their choice – please be OK.</p>
|
||
</div>
|
||
|
||
</div><!-- #comment-## -->
|
||
|
||
</li><!-- #comment-## -->
|
||
</ol>
|
||
|
||
|
||
|
||
<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="/2018/12/03/developer-on-call/#respond" style="display:none;">Cancel reply</a></small></h3><form action="https://henrikwarne.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='1689' 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="f2f5bac474" />
|
||
<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="d25b4f2ffc" /></p><p style="display: none !important;" class="akismet-fields-container" data-prefix="ak_"><label>Δ<textarea name="ak_hp_textarea" cols="45" rows="8" maxlength="100"></textarea></label><input type="hidden" id="ak_js_1" name="ak_js" value="148"/><script>
|
||
document.getElementById( "ak_js_1" ).setAttribute( "value", ( new Date() ).getTime() );
|
||
</script>
|
||
</p></form> </div><!-- #respond -->
|
||
|
||
</div><!-- #comments -->
|
||
|
||
</div><!-- #content -->
|
||
</div><!-- #content-container -->
|
||
|
||
|
||
|
||
<div id="primary" class="widget-area" role="complementary">
|
||
<ul class="xoxo">
|
||
|
||
<li id="text-4" class="widget-container widget_text"><h3 class="widget-title">MOST POPULAR</h3> <div class="textwidget"><ul>
|
||
<li><a href="https://henrikwarne.com/2015/04/16/lessons-learned-in-software-development/" title="Lessons Learned in Software Development">Lessons Learned in Software Development</a></li>
|
||
<li><a href="https://henrikwarne.com/2012/08/22/top-5-surprises-when-starting-out-as-a-software-developer/" title="Top 5 Surprises When Starting Out as a Software Developer">Top 5 Surprises When Starting Out as a Software Developer</a></li>
|
||
<li><a href="https://henrikwarne.com/2012/12/12/working-as-a-software-developer/" title="Working as a Software Developer">Working as a Software Developer</a></li>
|
||
<li><a href="https://henrikwarne.com/2013/05/05/great-programmers-write-debuggable-code/" title="Great Programmers Write Debuggable Code">Great Programmers Write Debuggable Code</a></li>
|
||
<li><a href="https://henrikwarne.com/2014/06/30/what-makes-a-good-programmer/" title="What Makes a Good Programmer">What Makes a Good Programmer</a></li>
|
||
</ul>
|
||
</div>
|
||
</li>
|
||
<li id="recent-posts-3" class="widget-container widget_recent_entries">
|
||
<h3 class="widget-title">RECENT POSTS</h3>
|
||
<ul>
|
||
<li>
|
||
<a href="https://henrikwarne.com/2026/08/15/lessons-learned-from-fixing-flaky-tests-with-claude/">Lessons Learned from Fixing Flaky Tests with Claude</a>
|
||
</li>
|
||
<li>
|
||
<a href="https://henrikwarne.com/2026/05/31/with-claude-less-coding-more-testing/">With Claude: Less Coding, More Testing</a>
|
||
</li>
|
||
<li>
|
||
<a href="https://henrikwarne.com/2026/01/31/in-praise-of-dry-run/">In Praise of –dry-run</a>
|
||
</li>
|
||
<li>
|
||
<a href="https://henrikwarne.com/2025/06/15/lessons-from-9-more-years-of-tricky-bugs/">Lessons From 9 More Years of Tricky Bugs</a>
|
||
</li>
|
||
<li>
|
||
<a href="https://henrikwarne.com/2025/03/02/more-good-programming-quotes-part-6/">More Good Programming Quotes, Part 6</a>
|
||
</li>
|
||
<li>
|
||
<a href="https://henrikwarne.com/2025/02/08/programming-conference-jfokus-stockholm-2025/">Programming Conference – Jfokus Stockholm 2025</a>
|
||
</li>
|
||
<li>
|
||
<a href="https://henrikwarne.com/2024/11/09/my-simple-knowledge-management-and-time-tracking-system/">My Simple Knowledge Management and Time Tracking System</a>
|
||
</li>
|
||
<li>
|
||
<a href="https://henrikwarne.com/2024/08/25/programming-with-chatgpt/">Programming With ChatGPT</a>
|
||
</li>
|
||
<li>
|
||
<a href="https://henrikwarne.com/2024/07/07/john-von-neumann-the-man-from-the-future/">John von Neumann – The Man from the Future</a>
|
||
</li>
|
||
<li>
|
||
<a href="https://henrikwarne.com/2024/02/11/finding-a-new-software-developer-job/">Finding a New Software Developer Job</a>
|
||
</li>
|
||
<li>
|
||
<a href="https://henrikwarne.com/2024/01/10/tidy-first/">Tidy First?</a>
|
||
</li>
|
||
<li>
|
||
<a href="https://henrikwarne.com/2023/09/10/what-i-have-changed-my-mind-about-in-software-development/">What I Have Changed My Mind About in Software Development</a>
|
||
</li>
|
||
<li>
|
||
<a href="https://henrikwarne.com/2023/04/23/well-maintained-software/">Well-maintained Software</a>
|
||
</li>
|
||
<li>
|
||
<a href="https://henrikwarne.com/2023/02/12/algorithmic-trading-a-practitioners-guide/">Algorithmic Trading: A Practitioner’s Guide</a>
|
||
</li>
|
||
<li>
|
||
<a href="https://henrikwarne.com/2023/01/07/there-is-no-software-maintenance/">There Is No Software Maintenance</a>
|
||
</li>
|
||
<li>
|
||
<a href="https://henrikwarne.com/2022/12/11/switching-to-go-first-impressions/">Switching to Go – First Impressions</a>
|
||
</li>
|
||
<li>
|
||
<a href="https://henrikwarne.com/2022/06/19/effective-software-testing-a-developers-guide/">Effective Software Testing – A Developer’s Guide</a>
|
||
</li>
|
||
<li>
|
||
<a href="https://henrikwarne.com/2021/12/13/on-code-reviews/">On Code Reviews</a>
|
||
</li>
|
||
<li>
|
||
<a href="https://henrikwarne.com/2021/07/12/book-review-a-philosophy-of-software-design/">Book Review: A Philosophy of Software Design</a>
|
||
</li>
|
||
<li>
|
||
<a href="https://henrikwarne.com/2021/06/15/on-comments-in-code/">On Comments in Code</a>
|
||
</li>
|
||
<li>
|
||
<a href="https://henrikwarne.com/2021/05/24/4-things-i-like-about-microservices/">4 Things I Like About Microservices</a>
|
||
</li>
|
||
<li>
|
||
<a href="https://henrikwarne.com/2021/04/19/recruiting-software-developers-coding-tests/">Recruiting Software Developers – Coding Tests</a>
|
||
</li>
|
||
<li>
|
||
<a href="https://henrikwarne.com/2021/04/16/more-good-programming-quotes-part-5/">More Good Programming Quotes, Part 5</a>
|
||
</li>
|
||
<li>
|
||
<a href="https://henrikwarne.com/2020/12/28/6-small-unit-testing-tips/">6 Small Unit Testing Tips</a>
|
||
</li>
|
||
<li>
|
||
<a href="https://henrikwarne.com/2020/11/25/mathematical-modelling-of-football/">Mathematical Modelling of Football</a>
|
||
</li>
|
||
<li>
|
||
<a href="https://henrikwarne.com/2020/08/30/deployed-to-production-is-not-enough/">Deployed To Production Is Not Enough</a>
|
||
</li>
|
||
<li>
|
||
<a href="https://henrikwarne.com/2020/07/23/good-logging/">Good Logging</a>
|
||
</li>
|
||
<li>
|
||
<a href="https://henrikwarne.com/2020/06/09/working-from-home-cons-and-pros/">Working From Home – Cons and Pros</a>
|
||
</li>
|
||
<li>
|
||
<a href="https://henrikwarne.com/2020/05/19/artificial-intelligence-a-guide-for-thinking-humans/">Artificial Intelligence – A Guide for Thinking Humans</a>
|
||
</li>
|
||
<li>
|
||
<a href="https://henrikwarne.com/2020/04/27/20-5-years-of-xp-and-agile/">20.5 Years of XP and Agile</a>
|
||
</li>
|
||
<li>
|
||
<a href="https://henrikwarne.com/2020/03/22/secure-by-design/">Secure by Design</a>
|
||
</li>
|
||
<li>
|
||
<a href="https://henrikwarne.com/2020/01/20/more-good-programming-quotes-part-4/">More Good Programming Quotes, Part 4</a>
|
||
</li>
|
||
<li>
|
||
<a href="https://henrikwarne.com/2020/01/04/grokking-deep-learning/">Grokking Deep Learning</a>
|
||
</li>
|
||
<li>
|
||
<a href="https://henrikwarne.com/2019/12/08/eurostar-testing-conference-prague-2019/">EuroSTAR Testing Conference Prague 2019</a>
|
||
</li>
|
||
<li>
|
||
<a href="https://henrikwarne.com/2019/10/27/classic-computer-science-problems-in-python/">Classic Computer Science Problems in Python</a>
|
||
</li>
|
||
<li>
|
||
<a href="https://henrikwarne.com/2019/09/29/when-tdd-is-not-a-good-fit/">When TDD Is Not a Good Fit</a>
|
||
</li>
|
||
<li>
|
||
<a href="https://henrikwarne.com/2019/09/15/recruiting-software-developers-checking-out-a-company/">Recruiting Software Developers – Checking Out a Company</a>
|
||
</li>
|
||
<li>
|
||
<a href="https://henrikwarne.com/2019/07/27/book-review-designing-data-intensive-applications/">Book Review: Designing Data-Intensive Applications</a>
|
||
</li>
|
||
<li>
|
||
<a href="https://henrikwarne.com/2019/06/15/nordic-testing-days-tallinn-2019/">Nordic Testing Days Tallinn 2019</a>
|
||
</li>
|
||
<li>
|
||
<a href="https://henrikwarne.com/2019/05/26/book-review-accelerate/">Book review: Accelerate</a>
|
||
</li>
|
||
<li>
|
||
<a href="https://henrikwarne.com/2019/04/03/more-good-programming-quotes-part-3/">More Good Programming Quotes, Part 3</a>
|
||
</li>
|
||
<li>
|
||
<a href="https://henrikwarne.com/2019/03/30/programming-math-or-writing/">Programming: Math or Writing?</a>
|
||
</li>
|
||
<li>
|
||
<a href="https://henrikwarne.com/2018/12/03/developer-on-call/" aria-current="page">Developer On Call</a>
|
||
</li>
|
||
<li>
|
||
<a href="https://henrikwarne.com/2018/08/11/my-favorite-command-line-shortcuts/">My Favorite Command-Line Shortcuts</a>
|
||
</li>
|
||
<li>
|
||
<a href="https://henrikwarne.com/2018/06/25/6-git-aha-moments/">6 Git Aha Moments</a>
|
||
</li>
|
||
<li>
|
||
<a href="https://henrikwarne.com/2018/05/01/is-manual-testing-needed/">Is Manual Testing Needed?</a>
|
||
</li>
|
||
<li>
|
||
<a href="https://henrikwarne.com/2018/03/13/exercises-in-programming-style/">Exercises in Programming Style</a>
|
||
</li>
|
||
<li>
|
||
<a href="https://henrikwarne.com/2017/12/17/programming-for-grade-8/">Programming for Grade 8</a>
|
||
</li>
|
||
<li>
|
||
<a href="https://henrikwarne.com/2017/11/26/6-years-of-thoughts-on-programming/">6 Years of Thoughts on Programming</a>
|
||
</li>
|
||
<li>
|
||
<a href="https://henrikwarne.com/2017/11/19/benefits-of-continuous-delivery/">Benefits of Continuous Delivery</a>
|
||
</li>
|
||
<li>
|
||
<a href="https://henrikwarne.com/2017/09/16/more-good-programming-quotes-part-2/">More Good Programming Quotes, Part 2</a>
|
||
</li>
|
||
<li>
|
||
<a href="https://henrikwarne.com/2017/08/20/developer-testing/">Developer Testing</a>
|
||
</li>
|
||
<li>
|
||
<a href="https://henrikwarne.com/2017/07/10/programming-conference-qcon-new-york-2017/">Programming Conference – QCon New York 2017</a>
|
||
</li>
|
||
<li>
|
||
<a href="https://henrikwarne.com/2017/05/28/developers-talk-to-people/">Developers – Talk To People</a>
|
||
</li>
|
||
<li>
|
||
<a href="https://henrikwarne.com/2017/04/28/code-rot/">Code Rot</a>
|
||
</li>
|
||
<li>
|
||
<a href="https://henrikwarne.com/2017/03/12/programmer-career-planning/">Programmer Career Planning</a>
|
||
</li>
|
||
<li>
|
||
<a href="https://henrikwarne.com/2017/01/22/software-development-and-the-gig-economy/">Software Development and the Gig Economy</a>
|
||
</li>
|
||
<li>
|
||
<a href="https://henrikwarne.com/2017/01/15/book-review-the-effective-engineer/">Book Review: The Effective Engineer</a>
|
||
</li>
|
||
<li>
|
||
<a href="https://henrikwarne.com/2016/11/24/things-programmers-say/">Things Programmers Say</a>
|
||
</li>
|
||
<li>
|
||
<a href="https://henrikwarne.com/2016/11/08/developer-book-club/">Developer Book Club</a>
|
||
</li>
|
||
<li>
|
||
<a href="https://henrikwarne.com/2016/10/27/book-review-release-it/">Book Review: Release It!</a>
|
||
</li>
|
||
<li>
|
||
<a href="https://henrikwarne.com/2016/06/16/18-lessons-from-13-years-of-tricky-bugs/">18 Lessons From 13 Years of Tricky Bugs</a>
|
||
</li>
|
||
<li>
|
||
<a href="https://henrikwarne.com/2016/04/28/learning-from-your-bugs/">Learning From Your Bugs</a>
|
||
</li>
|
||
<li>
|
||
<a href="https://henrikwarne.com/2016/04/17/more-good-programming-quotes/">More Good Programming Quotes</a>
|
||
</li>
|
||
<li>
|
||
<a href="https://henrikwarne.com/2016/04/11/the-wisdom-of-programming-quotes/">The Wisdom of Programming Quotes</a>
|
||
</li>
|
||
<li>
|
||
<a href="https://henrikwarne.com/2016/03/07/ph-d-or-professional-programmer/">Ph.D. or Professional Programmer?</a>
|
||
</li>
|
||
<li>
|
||
<a href="https://henrikwarne.com/2015/12/27/social-engineering-from-kevin-mitnick/">Social Engineering from Kevin Mitnick</a>
|
||
</li>
|
||
<li>
|
||
<a href="https://henrikwarne.com/2015/11/22/recruiting-software-developers-initial-contact/">Recruiting Software Developers – Initial Contact</a>
|
||
</li>
|
||
<li>
|
||
<a href="https://henrikwarne.com/2015/10/20/coursera-course-review-software-security/">Coursera Course Review: Software Security</a>
|
||
</li>
|
||
<li>
|
||
<a href="https://henrikwarne.com/2015/04/16/lessons-learned-in-software-development/">Lessons Learned in Software Development</a>
|
||
</li>
|
||
<li>
|
||
<a href="https://henrikwarne.com/2015/01/03/book-review-clean-code/">Book Review: Clean Code</a>
|
||
</li>
|
||
<li>
|
||
<a href="https://henrikwarne.com/2015/01/01/coursera-course-review-computational-investing-part-1/">Coursera Course Review: Computational Investing Part 1</a>
|
||
</li>
|
||
<li>
|
||
<a href="https://henrikwarne.com/2014/12/15/programmer-knowledge/">Programmer Knowledge</a>
|
||
</li>
|
||
<li>
|
||
<a href="https://henrikwarne.com/2014/12/08/5-reasons-why-software-developer-is-a-great-career-choice/">5 Reasons Why Software Developer is a Great Career Choice</a>
|
||
</li>
|
||
<li>
|
||
<a href="https://henrikwarne.com/2014/09/04/a-response-to-why-most-unit-testing-is-waste/">A Response to “Why Most Unit Testing is Waste”</a>
|
||
</li>
|
||
<li>
|
||
<a href="https://henrikwarne.com/2014/06/30/what-makes-a-good-programmer/">What Makes a Good Programmer?</a>
|
||
</li>
|
||
<li>
|
||
<a href="https://henrikwarne.com/2014/06/22/switching-from-java-to-python-first-impressions/">Switching from Java to Python – First Impressions</a>
|
||
</li>
|
||
<li>
|
||
<a href="https://henrikwarne.com/2014/06/08/antifragility-and-software-development/">Antifragility and Software Development</a>
|
||
</li>
|
||
<li>
|
||
<a href="https://henrikwarne.com/2014/02/19/5-unit-testing-mistakes/">5 Unit Testing Mistakes</a>
|
||
</li>
|
||
<li>
|
||
<a href="https://henrikwarne.com/2014/02/09/unit-testing-private-methods/">Unit Testing Private Methods</a>
|
||
</li>
|
||
<li>
|
||
<a href="https://henrikwarne.com/2014/01/27/a-bug-a-trace-a-test-a-twist/">A Bug, a Trace, a Test, a Twist</a>
|
||
</li>
|
||
<li>
|
||
<a href="https://henrikwarne.com/2014/01/21/session-based-logging/">Session-based Logging</a>
|
||
</li>
|
||
<li>
|
||
<a href="https://henrikwarne.com/2014/01/01/finding-bugs-debugger-versus-logging/">Finding Bugs: Debugger versus Logging</a>
|
||
</li>
|
||
<li>
|
||
<a href="https://henrikwarne.com/2013/12/08/tdd-unit-tests-and-the-passage-of-time/">TDD, Unit Tests and the Passage of Time</a>
|
||
</li>
|
||
<li>
|
||
<a href="https://henrikwarne.com/2013/11/09/automatically-include-revision-in-log-statement/">Automatically Include Revision in Log Statement</a>
|
||
</li>
|
||
<li>
|
||
<a href="https://henrikwarne.com/2013/08/31/7-ways-more-methods-can-improve-your-program/">7 Ways More Methods Can Improve Your Program</a>
|
||
</li>
|
||
<li>
|
||
<a href="https://henrikwarne.com/2013/08/21/linkedin-good-or-bad/">LinkedIn – Good or Bad?</a>
|
||
</li>
|
||
<li>
|
||
<a href="https://henrikwarne.com/2013/05/05/great-programmers-write-debuggable-code/">Great Programmers Write Debuggable Code</a>
|
||
</li>
|
||
<li>
|
||
<a href="https://henrikwarne.com/2013/04/07/set-card-game-variation-complementary-pairs/">SET Card Game Variation – Complementary Pairs</a>
|
||
</li>
|
||
<li>
|
||
<a href="https://henrikwarne.com/2013/04/02/programmer-productivity-interruptions-meetings-and-working-remotely/">Programmer Productivity – Interruptions, Meetings and Working Remotely</a>
|
||
</li>
|
||
<li>
|
||
<a href="https://henrikwarne.com/2013/03/26/what-do-programmers-want/">What Do Programmers Want?</a>
|
||
</li>
|
||
<li>
|
||
<a href="https://henrikwarne.com/2013/02/18/coursera-algorithms-course-part2/">Coursera course review: Algorithms: Design and Analysis, Part 2</a>
|
||
</li>
|
||
<li>
|
||
<a href="https://henrikwarne.com/2012/12/31/blog-stats-for-2012-by-wordpress/">Blog stats for 2012 (by WordPress)</a>
|
||
</li>
|
||
<li>
|
||
<a href="https://henrikwarne.com/2012/12/12/working-as-a-software-developer/">Working as a Software Developer</a>
|
||
</li>
|
||
<li>
|
||
<a href="https://henrikwarne.com/2012/10/21/4-reasons-why-bugs-are-good-for-you/">4 Reasons Why Bugs Are Good For You</a>
|
||
</li>
|
||
<li>
|
||
<a href="https://henrikwarne.com/2012/09/23/book-review-how-google-tests-software/">Book Review: How Google Tests Software</a>
|
||
</li>
|
||
<li>
|
||
<a href="https://henrikwarne.com/2012/08/22/top-5-surprises-when-starting-out-as-a-software-developer/">Top 5 Surprises When Starting Out as a Software Developer</a>
|
||
</li>
|
||
<li>
|
||
<a href="https://henrikwarne.com/2012/06/17/programmer-productivity-emacs-versus-intellij-idea/">Programmer Productivity: Emacs versus IntelliJ IDEA</a>
|
||
</li>
|
||
<li>
|
||
<a href="https://henrikwarne.com/2012/06/02/why-i-love-coding/">Why I Love Coding</a>
|
||
</li>
|
||
<li>
|
||
<a href="https://henrikwarne.com/2012/05/08/coursera-algorithms-course/">Coursera course review: Design and Analysis of Algorithms I</a>
|
||
</li>
|
||
<li>
|
||
<a href="https://henrikwarne.com/2012/02/26/mac-os-x-break-programs-review/">Mac OS X Break Programs Review</a>
|
||
</li>
|
||
<li>
|
||
<a href="https://henrikwarne.com/2012/02/25/favorite-programming-quotes/">Favorite Programming Quotes</a>
|
||
</li>
|
||
<li>
|
||
<a href="https://henrikwarne.com/2012/02/18/how-i-beat-rsi/">How I Beat Repetitive Stress Injury</a>
|
||
</li>
|
||
<li>
|
||
<a href="https://henrikwarne.com/2011/12/18/introduction-to-databases-on-line-learning-done-well/">Introduction to Databases – On-line Learning Done Well</a>
|
||
</li>
|
||
<li>
|
||
<a href="https://henrikwarne.com/2011/09/30/10-million-set-games-random-most-similar-sets/">10 million SET games simulated using “Random among ‘most similar’ Sets”</a>
|
||
</li>
|
||
<li>
|
||
<a href="https://henrikwarne.com/2011/09/30/10-million-set-games-random-sets/">10 million SET games simulated using “Random among available Sets”</a>
|
||
</li>
|
||
<li>
|
||
<a href="https://henrikwarne.com/2011/09/30/10-million-set-games-first-found-set/">10 million SET games simulated using “First found Set”</a>
|
||
</li>
|
||
<li>
|
||
<a href="https://henrikwarne.com/2011/09/30/set-probabilities-revisited/">SET® Probabilities Revisited</a>
|
||
</li>
|
||
</ul>
|
||
|
||
</li><li id="wp_tag_cloud-2" class="widget-container wp_widget_tag_cloud"><h3 class="widget-title">TAG CLOUD</h3><a href="https://henrikwarne.com/tag/ai/" class="tag-cloud-link tag-link-14067 tag-link-position-1" style="font-size: 10.52pt;" aria-label="AI (2 items)">AI</a>
|
||
<a href="https://henrikwarne.com/tag/algorithms/" class="tag-cloud-link tag-link-3378 tag-link-position-2" style="font-size: 12.2pt;" aria-label="algorithms (3 items)">algorithms</a>
|
||
<a href="https://henrikwarne.com/tag/book/" class="tag-cloud-link tag-link-2364 tag-link-position-3" style="font-size: 21.72pt;" aria-label="book (18 items)">book</a>
|
||
<a href="https://henrikwarne.com/tag/book-review/" class="tag-cloud-link tag-link-7215 tag-link-position-4" style="font-size: 21.02pt;" aria-label="book review (16 items)">book review</a>
|
||
<a href="https://henrikwarne.com/tag/break-program/" class="tag-cloud-link tag-link-80544119 tag-link-position-5" style="font-size: 8pt;" aria-label="break program (1 item)">break program</a>
|
||
<a href="https://henrikwarne.com/tag/bugs/" class="tag-cloud-link tag-link-6354 tag-link-position-6" style="font-size: 10.52pt;" aria-label="bugs (2 items)">bugs</a>
|
||
<a href="https://henrikwarne.com/tag/career/" class="tag-cloud-link tag-link-14560 tag-link-position-7" style="font-size: 13.6pt;" aria-label="career (4 items)">career</a>
|
||
<a href="https://henrikwarne.com/tag/claude/" class="tag-cloud-link tag-link-560341 tag-link-position-8" style="font-size: 10.52pt;" aria-label="claude (2 items)">claude</a>
|
||
<a href="https://henrikwarne.com/tag/code/" class="tag-cloud-link tag-link-656 tag-link-position-9" style="font-size: 10.52pt;" aria-label="code (2 items)">code</a>
|
||
<a href="https://henrikwarne.com/tag/coding/" class="tag-cloud-link tag-link-332 tag-link-position-10" style="font-size: 14.72pt;" aria-label="coding (5 items)">coding</a>
|
||
<a href="https://henrikwarne.com/tag/conference/" class="tag-cloud-link tag-link-33525 tag-link-position-11" style="font-size: 13.6pt;" aria-label="conference (4 items)">conference</a>
|
||
<a href="https://henrikwarne.com/tag/coursera/" class="tag-cloud-link tag-link-76917337 tag-link-position-12" style="font-size: 13.6pt;" aria-label="coursera (4 items)">coursera</a>
|
||
<a href="https://henrikwarne.com/tag/creativity/" class="tag-cloud-link tag-link-789 tag-link-position-13" style="font-size: 8pt;" aria-label="creativity (1 item)">creativity</a>
|
||
<a href="https://henrikwarne.com/tag/databases/" class="tag-cloud-link tag-link-10286 tag-link-position-14" style="font-size: 10.52pt;" aria-label="databases (2 items)">databases</a>
|
||
<a href="https://henrikwarne.com/tag/debugging-2/" class="tag-cloud-link tag-link-37306965 tag-link-position-15" style="font-size: 17.1pt;" aria-label="debugging (8 items)">debugging</a>
|
||
<a href="https://henrikwarne.com/tag/developer-testing/" class="tag-cloud-link tag-link-24180372 tag-link-position-16" style="font-size: 10.52pt;" aria-label="developer testing (2 items)">developer testing</a>
|
||
<a href="https://henrikwarne.com/tag/devops/" class="tag-cloud-link tag-link-28070474 tag-link-position-17" style="font-size: 10.52pt;" aria-label="DevOps (2 items)">DevOps</a>
|
||
<a href="https://henrikwarne.com/tag/emacs/" class="tag-cloud-link tag-link-11362 tag-link-position-18" style="font-size: 8pt;" aria-label="emacs (1 item)">emacs</a>
|
||
<a href="https://henrikwarne.com/tag/ergonomics/" class="tag-cloud-link tag-link-277879 tag-link-position-19" style="font-size: 8pt;" aria-label="ergonomics (1 item)">ergonomics</a>
|
||
<a href="https://henrikwarne.com/tag/face-to-face/" class="tag-cloud-link tag-link-89572 tag-link-position-20" style="font-size: 8pt;" aria-label="face to face (1 item)">face to face</a>
|
||
<a href="https://henrikwarne.com/tag/google/" class="tag-cloud-link tag-link-81 tag-link-position-21" style="font-size: 8pt;" aria-label="Google (1 item)">Google</a>
|
||
<a href="https://henrikwarne.com/tag/hiring/" class="tag-cloud-link tag-link-113932 tag-link-position-22" style="font-size: 10.52pt;" aria-label="hiring (2 items)">hiring</a>
|
||
<a href="https://henrikwarne.com/tag/history/" class="tag-cloud-link tag-link-678 tag-link-position-23" style="font-size: 10.52pt;" aria-label="history (2 items)">history</a>
|
||
<a href="https://henrikwarne.com/tag/ide/" class="tag-cloud-link tag-link-7746 tag-link-position-24" style="font-size: 8pt;" aria-label="ide (1 item)">ide</a>
|
||
<a href="https://henrikwarne.com/tag/idea/" class="tag-cloud-link tag-link-2933 tag-link-position-25" style="font-size: 8pt;" aria-label="idea (1 item)">idea</a>
|
||
<a href="https://henrikwarne.com/tag/integration-testing/" class="tag-cloud-link tag-link-384988 tag-link-position-26" style="font-size: 10.52pt;" aria-label="integration testing (2 items)">integration testing</a>
|
||
<a href="https://henrikwarne.com/tag/intellij/" class="tag-cloud-link tag-link-114384 tag-link-position-27" style="font-size: 8pt;" aria-label="intellij (1 item)">intellij</a>
|
||
<a href="https://henrikwarne.com/tag/interruption/" class="tag-cloud-link tag-link-584215 tag-link-position-28" style="font-size: 8pt;" aria-label="interruption (1 item)">interruption</a>
|
||
<a href="https://henrikwarne.com/tag/interviewing/" class="tag-cloud-link tag-link-60134 tag-link-position-29" style="font-size: 10.52pt;" aria-label="interviewing (2 items)">interviewing</a>
|
||
<a href="https://henrikwarne.com/tag/java/" class="tag-cloud-link tag-link-1017 tag-link-position-30" style="font-size: 10.52pt;" aria-label="java (2 items)">java</a>
|
||
<a href="https://henrikwarne.com/tag/job/" class="tag-cloud-link tag-link-1114 tag-link-position-31" style="font-size: 10.52pt;" aria-label="job (2 items)">job</a>
|
||
<a href="https://henrikwarne.com/tag/knowledge/" class="tag-cloud-link tag-link-3324 tag-link-position-32" style="font-size: 8pt;" aria-label="knowledge (1 item)">knowledge</a>
|
||
<a href="https://henrikwarne.com/tag/learning-2/" class="tag-cloud-link tag-link-34939379 tag-link-position-33" style="font-size: 19.34pt;" aria-label="learning (12 items)">learning</a>
|
||
<a href="https://henrikwarne.com/tag/llm/" class="tag-cloud-link tag-link-642672 tag-link-position-34" style="font-size: 10.52pt;" aria-label="LLM (2 items)">LLM</a>
|
||
<a href="https://henrikwarne.com/tag/logging/" class="tag-cloud-link tag-link-62087 tag-link-position-35" style="font-size: 15.7pt;" aria-label="logging (6 items)">logging</a>
|
||
<a href="https://henrikwarne.com/tag/love/" class="tag-cloud-link tag-link-3785 tag-link-position-36" style="font-size: 8pt;" aria-label="love (1 item)">love</a>
|
||
<a href="https://henrikwarne.com/tag/machine-learning/" class="tag-cloud-link tag-link-40978 tag-link-position-37" style="font-size: 10.52pt;" aria-label="machine learning (2 items)">machine learning</a>
|
||
<a href="https://henrikwarne.com/tag/mac-os-x/" class="tag-cloud-link tag-link-3348 tag-link-position-38" style="font-size: 8pt;" aria-label="Mac OS X (1 item)">Mac OS X</a>
|
||
<a href="https://henrikwarne.com/tag/math/" class="tag-cloud-link tag-link-2813 tag-link-position-39" style="font-size: 10.52pt;" aria-label="math (2 items)">math</a>
|
||
<a href="https://henrikwarne.com/tag/mathematics/" class="tag-cloud-link tag-link-3582 tag-link-position-40" style="font-size: 10.52pt;" aria-label="mathematics (2 items)">mathematics</a>
|
||
<a href="https://henrikwarne.com/tag/meeting/" class="tag-cloud-link tag-link-9401 tag-link-position-41" style="font-size: 8pt;" aria-label="meeting (1 item)">meeting</a>
|
||
<a href="https://henrikwarne.com/tag/meta/" class="tag-cloud-link tag-link-171 tag-link-position-42" style="font-size: 8pt;" aria-label="meta (1 item)">meta</a>
|
||
<a href="https://henrikwarne.com/tag/office/" class="tag-cloud-link tag-link-315 tag-link-position-43" style="font-size: 8pt;" aria-label="office (1 item)">office</a>
|
||
<a href="https://henrikwarne.com/tag/on-line-course/" class="tag-cloud-link tag-link-2933806 tag-link-position-44" style="font-size: 12.2pt;" aria-label="on-line course (3 items)">on-line course</a>
|
||
<a href="https://henrikwarne.com/tag/probabilities/" class="tag-cloud-link tag-link-52114 tag-link-position-45" style="font-size: 14.72pt;" aria-label="probabilities (5 items)">probabilities</a>
|
||
<a href="https://henrikwarne.com/tag/production-software/" class="tag-cloud-link tag-link-10220245 tag-link-position-46" style="font-size: 8pt;" aria-label="production software (1 item)">production software</a>
|
||
<a href="https://henrikwarne.com/tag/productivity/" class="tag-cloud-link tag-link-2704 tag-link-position-47" style="font-size: 8pt;" aria-label="productivity (1 item)">productivity</a>
|
||
<a href="https://henrikwarne.com/tag/professional-software-development/" class="tag-cloud-link tag-link-26637092 tag-link-position-48" style="font-size: 8pt;" aria-label="professional software development (1 item)">professional software development</a>
|
||
<a href="https://henrikwarne.com/tag/programmer/" class="tag-cloud-link tag-link-37549 tag-link-position-49" style="font-size: 13.6pt;" aria-label="programmer (4 items)">programmer</a>
|
||
<a href="https://henrikwarne.com/tag/programming-2/" class="tag-cloud-link tag-link-24194809 tag-link-position-50" style="font-size: 22pt;" aria-label="programming (19 items)">programming</a>
|
||
<a href="https://henrikwarne.com/tag/programming-course/" class="tag-cloud-link tag-link-58398626 tag-link-position-51" style="font-size: 8pt;" aria-label="programming course (1 item)">programming course</a>
|
||
<a href="https://henrikwarne.com/tag/programming-job/" class="tag-cloud-link tag-link-9633908 tag-link-position-52" style="font-size: 8pt;" aria-label="programming job (1 item)">programming job</a>
|
||
<a href="https://henrikwarne.com/tag/python/" class="tag-cloud-link tag-link-832 tag-link-position-53" style="font-size: 14.72pt;" aria-label="python (5 items)">python</a>
|
||
<a href="https://henrikwarne.com/tag/quotes/" class="tag-cloud-link tag-link-755 tag-link-position-54" style="font-size: 17.1pt;" aria-label="quotes (8 items)">quotes</a>
|
||
<a href="https://henrikwarne.com/tag/recruiting/" class="tag-cloud-link tag-link-8452 tag-link-position-55" style="font-size: 13.6pt;" aria-label="recruiting (4 items)">recruiting</a>
|
||
<a href="https://henrikwarne.com/tag/repetitive-stress-injury/" class="tag-cloud-link tag-link-1426227 tag-link-position-56" style="font-size: 10.52pt;" aria-label="Repetitive Stress Injury (2 items)">Repetitive Stress Injury</a>
|
||
<a href="https://henrikwarne.com/tag/review/" class="tag-cloud-link tag-link-1745 tag-link-position-57" style="font-size: 20.6pt;" aria-label="review (15 items)">review</a>
|
||
<a href="https://henrikwarne.com/tag/rsi/" class="tag-cloud-link tag-link-290811 tag-link-position-58" style="font-size: 10.52pt;" aria-label="RSI (2 items)">RSI</a>
|
||
<a href="https://henrikwarne.com/tag/security/" class="tag-cloud-link tag-link-801 tag-link-position-59" style="font-size: 12.2pt;" aria-label="security (3 items)">security</a>
|
||
<a href="https://henrikwarne.com/tag/set-game/" class="tag-cloud-link tag-link-2100236 tag-link-position-60" style="font-size: 14.72pt;" aria-label="SET game (5 items)">SET game</a>
|
||
<a href="https://henrikwarne.com/tag/simulation/" class="tag-cloud-link tag-link-827 tag-link-position-61" style="font-size: 14.72pt;" aria-label="simulation (5 items)">simulation</a>
|
||
<a href="https://henrikwarne.com/tag/software-development/" class="tag-cloud-link tag-link-2301 tag-link-position-62" style="font-size: 12.2pt;" aria-label="software development (3 items)">software development</a>
|
||
<a href="https://henrikwarne.com/tag/statistics/" class="tag-cloud-link tag-link-5849 tag-link-position-63" style="font-size: 8pt;" aria-label="statistics (1 item)">statistics</a>
|
||
<a href="https://henrikwarne.com/tag/stats/" class="tag-cloud-link tag-link-7916 tag-link-position-64" style="font-size: 8pt;" aria-label="stats (1 item)">stats</a>
|
||
<a href="https://henrikwarne.com/tag/stretches/" class="tag-cloud-link tag-link-1647891 tag-link-position-65" style="font-size: 8pt;" aria-label="stretches (1 item)">stretches</a>
|
||
<a href="https://henrikwarne.com/tag/surprises/" class="tag-cloud-link tag-link-287685 tag-link-position-66" style="font-size: 8pt;" aria-label="surprises (1 item)">surprises</a>
|
||
<a href="https://henrikwarne.com/tag/tdd/" class="tag-cloud-link tag-link-76604 tag-link-position-67" style="font-size: 10.52pt;" aria-label="tdd (2 items)">tdd</a>
|
||
<a href="https://henrikwarne.com/tag/test-driven-development/" class="tag-cloud-link tag-link-78073 tag-link-position-68" style="font-size: 10.52pt;" aria-label="test-driven development (2 items)">test-driven development</a>
|
||
<a href="https://henrikwarne.com/tag/testing-2/" class="tag-cloud-link tag-link-210654 tag-link-position-69" style="font-size: 20.6pt;" aria-label="testing (15 items)">testing</a>
|
||
<a href="https://henrikwarne.com/tag/trouble-shooting/" class="tag-cloud-link tag-link-215032 tag-link-position-70" style="font-size: 10.52pt;" aria-label="trouble-shooting (2 items)">trouble-shooting</a>
|
||
<a href="https://henrikwarne.com/tag/unit-test/" class="tag-cloud-link tag-link-1100831 tag-link-position-71" style="font-size: 12.2pt;" aria-label="unit-test (3 items)">unit-test</a>
|
||
<a href="https://henrikwarne.com/tag/unit-testing/" class="tag-cloud-link tag-link-3882 tag-link-position-72" style="font-size: 16.4pt;" aria-label="unit testing (7 items)">unit testing</a>
|
||
<a href="https://henrikwarne.com/tag/university/" class="tag-cloud-link tag-link-4851 tag-link-position-73" style="font-size: 10.52pt;" aria-label="university (2 items)">university</a>
|
||
<a href="https://henrikwarne.com/tag/work-2/" class="tag-cloud-link tag-link-9167876 tag-link-position-74" style="font-size: 14.72pt;" aria-label="work (5 items)">work</a>
|
||
<a href="https://henrikwarne.com/tag/working/" class="tag-cloud-link tag-link-30025 tag-link-position-75" style="font-size: 15.7pt;" aria-label="working (6 items)">working</a></li><li id="rss_links-3" class="widget-container widget_rss_links"><h3 class="widget-title">RSS</h3><ul><li><a href="https://henrikwarne.com/feed/" title="Subscribe to Posts">RSS - Posts</a></li><li><a href="https://henrikwarne.com/comments/feed/" title="Subscribe to Comments">RSS - Comments</a></li></ul>
|
||
</li><li id="blog_subscription-3" class="widget-container widget_blog_subscription jetpack_subscription_widget"><h3 class="widget-title"><label for="subscribe-field">Follow Blog via Email</label></h3>
|
||
|
||
<div class="wp-block-jetpack-subscriptions__container">
|
||
<form
|
||
action="https://subscribe.wordpress.com"
|
||
method="post"
|
||
accept-charset="utf-8"
|
||
data-blog="27679227"
|
||
data-post_access_level="everybody"
|
||
id="subscribe-blog"
|
||
>
|
||
<p>Enter your email address to follow this blog and receive notifications of new posts by email.</p>
|
||
<p id="subscribe-email">
|
||
<label
|
||
id="subscribe-field-label"
|
||
for="subscribe-field"
|
||
class="screen-reader-text"
|
||
>
|
||
Email Address: </label>
|
||
|
||
<input
|
||
type="email"
|
||
name="email"
|
||
autocomplete="email"
|
||
|
||
style="width: 95%; padding: 1px 10px"
|
||
placeholder="Email Address"
|
||
value=""
|
||
id="subscribe-field"
|
||
required
|
||
/> </p>
|
||
|
||
<p id="subscribe-submit"
|
||
>
|
||
<input type="hidden" name="action" value="subscribe"/>
|
||
<input type="hidden" name="blog_id" value="27679227"/>
|
||
<input type="hidden" name="source" value="https://henrikwarne.com/2018/12/03/developer-on-call/"/>
|
||
<input type="hidden" name="sub-type" value="widget"/>
|
||
<input type="hidden" name="redirect_fragment" value="subscribe-blog"/>
|
||
<input type="hidden" id="_wpnonce" name="_wpnonce" value="8681bd0fb7" /> <button type="submit"
|
||
class="wp-block-button__link"
|
||
>
|
||
Follow </button>
|
||
</p>
|
||
</form>
|
||
<div class="wp-block-jetpack-subscriptions__subscount">
|
||
Join 406 other subscribers </div>
|
||
</div>
|
||
|
||
</li> </ul>
|
||
</div><!-- #primary .widget-area -->
|
||
|
||
|
||
</div><!-- #content-box -->
|
||
|
||
<div id="footer" role="contentinfo">
|
||
|
||
<div id="colophon">
|
||
<span class="generator-link"><a href="https://wordpress.com/?ref=footer_website" rel="nofollow">Create a free website or blog at WordPress.com.</a></span>
|
||
</div><!-- #colophon -->
|
||
</div><!-- #footer -->
|
||
|
||
</div><!-- #container -->
|
||
|
||
<!-- -->
|
||
<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/coraline/*","/*\\?(.+)"]}},{"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-c0aa9e6284f34b7bffddeec28b109939">
|
||
</div>
|
||
<div class="grofile-hash-map-a96dd0afc13b56a4a965eca289973c8f">
|
||
</div>
|
||
<div class="grofile-hash-map-864a81c688c3382176d5d97c2d249151">
|
||
</div>
|
||
<div class="grofile-hash-map-d9169d68fbafca91d174f86e1c69e913">
|
||
</div>
|
||
<div class="grofile-hash-map-6976c34a669e77f11db4effc2fab1279">
|
||
</div>
|
||
<div class="grofile-hash-map-088c1bd6142c57a3b09384fb4c7fc8d4">
|
||
</div>
|
||
<div class="grofile-hash-map-24dc57f7f6e7f0052efdafcbf8f6224a">
|
||
</div>
|
||
<div class="grofile-hash-map-24dc57f7f6e7f0052efdafcbf8f6224a">
|
||
</div>
|
||
<div class="grofile-hash-map-fa769667741f11076516e9714889c50a">
|
||
</div>
|
||
</div>
|
||
<div id="actionbar" dir="ltr" style="display: none;"
|
||
class="actnbr-pub-coraline actnbr-has-follow actnbr-has-actions">
|
||
<ul>
|
||
<li class="actnbr-btn actnbr-hidden">
|
||
<a class="actnbr-action actnbr-actn-comment" href="https://henrikwarne.com/2018/12/03/developer-on-call/#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://henrikwarne.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' /> Henrik Warne's blog </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 406 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="27679227" />
|
||
<input type="hidden" name="source" value="https://henrikwarne.com/2018/12/03/developer-on-call/" />
|
||
<input type="hidden" name="sub-type" value="actionbar-follow" />
|
||
<input type="hidden" id="_wpnonce" name="_wpnonce" value="8681bd0fb7" /> <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%2Fr-login.wordpress.com%2Fremote-login.php%3Faction%3Dlink%26back%3Dhttps%253A%252F%252Fhenrikwarne.com%252F2018%252F12%252F03%252Fdeveloper-on-call%252F">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://henrikwarne.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' /> Henrik Warne's blog </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%2Fr-login.wordpress.com%2Fremote-login.php%3Faction%3Dlink%26back%3Dhttps%253A%252F%252Fhenrikwarne.com%252F2018%252F12%252F03%252Fdeveloper-on-call%252F">Log in</a></li>
|
||
<li class="actnbr-shortlink">
|
||
<a href="https://wp.me/p1S8D9-rf">
|
||
<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://henrikwarne.com/2018/12/03/developer-on-call/" target="_blank" rel="noopener noreferrer">
|
||
Report this content </a>
|
||
</li>
|
||
<li class="actnbr-reader">
|
||
<a href="https://wordpress.com/reader/blogs/27679227/posts/1689">
|
||
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://henrikwarne.com/2018/12/03/developer-on-call/":1689};
|
||
</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='/wp-content/mu-plugins/likes/queuehandler.js?m=1741961244i'></script>
|
||
<script id="wp-hooks-js" src="/wp-content/plugins/gutenberg-core/v23.9.1/build/scripts/hooks/index.min.js?m=1788785546i&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&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 Henrik Warne's blog","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":27679227,"postId":1689,"mustLogIn":false,"requireNameEmail":true,"commentRegistration":false,"connectURL":"https://henrikwarne1.wordpress.com/public.api/connect/?action=request\u0026domain=henrikwarne.com","logoutURL":"https://henrikwarne1.wordpress.com/wp-login.php?action=logout\u0026_wpnonce=2516a4ff30","homeURL":"https://henrikwarne.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":"ebf13ac35d","verbumBundleUrl":"/wp-content/mu-plugins/jetpack-mu-wpcom-plugin/sun/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/sun/jetpack_vendor/automattic/jetpack-mu-wpcom/src/build/verbum-comments/assets/dynamic-loader.js?m=1772522099i&minify=false&ver=8b5296f9195db92c42e4"></script>
|
||
<script id="jetpack-carousel-js-extra">
|
||
var jetpackSwiperLibraryPath = {"url":"/wp-content/mu-plugins/jetpack-plugin/sun/_inc/blocks/swiper.js"};
|
||
var jetpackCarouselStrings = {"widths":[370,700,1000,1200,1400,2000],"is_logged_in":"","lang":"en","ajaxurl":"https://henrikwarne.com/wp-admin/admin-ajax.php","nonce":"3b7be0b96c","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://henrikwarne1.wordpress.com/wp-login.php?redirect_to=https%3A%2F%2Fhenrikwarne.com%2F2018%2F12%2F03%2Fdeveloper-on-call%2F","blog_id":"27679227","meta_data":["camera","aperture","shutter_speed","focal_length","copyright"],"stats_query_args":"blog=27679227&v=wpcom&tz=2&user_id=0&subd=henrikwarne1","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/??-eJydUNsKwjAM/SG7Kg6mD+KnSGyjdvZGkzr29xZdh/ig4kOgOZccTuUQhfHKZo0ke5IqOIeeRcJox8YZ3/S0kEWkgudCSJdFtPlsfJEjR1BXUaAhFuNESMq+cocbeh2ShMzBAbNRswuIkEkes7F6BkklE1loYPgh+CXvUEpMtxSkkAntLKvAlzpwNeSQxbpZPs9V4JQeYv3BWyOeH/G2/t2ELpBQg9bj42n8eaqwd7tVt+m2bVumvwPKqqmM'></script>
|
||
<script id="sharing-js-js-after">
|
||
window.WPCOM_sharing_popups = window.WPCOM_sharing_popups || {};
|
||
window.WPCOM_sharing_popups[ "twitter" ] = "menubar=1,resizable=1,width=600,height=350";
|
||
window.WPCOM_sharing_popups = window.WPCOM_sharing_popups || {};
|
||
window.WPCOM_sharing_popups[ "facebook" ] = "menubar=1,resizable=1,width=600,height=400";
|
||
window.WPCOM_sharing_popups = window.WPCOM_sharing_popups || {};
|
||
window.WPCOM_sharing_popups[ "linkedin" ] = "menubar=1,resizable=1,width=580,height=450";
|
||
//# 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-RC3-63320"}}
|
||
</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=20260908#ver=20260908' 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':'27679227','blog_tz':'2','user_lang':'en','blog_lang':'en','user_id':'0'}]);
|
||
// Prevent sending pageview tracking from WP-Admin pages.
|
||
_stq.push(['view', {'blog':'27679227','v':'wpcom','tz':'2','user_id':'0','post':'1689','subd':'henrikwarne1'}]);
|
||
_stq.push(['extra', {'crypt':'UE5tW3cvZGQ9cDN0NktwVkl5dT1+U3BPT1lLM2FDWG10MjkyYU14M3pTejlQVTJNa21+d0gzNz9QanlhYXdDR3NDdC1XRyU2QlFacl16WE5Rc0lRVWptSkpzS25CUUZvS3F+Qyx8MGQzLF9OVC1ybVFCNSY9OHVXek0xVHc4YkNzKz0lNVV+RGdoYX5kZjg0bnUzdXAteV14akdVU3olbVU/M1ppd3lUNVoyanRLdkRmNCt3dEVFVGVfcStSR298X1poK0dPLG0leEhBK3pGcEloPVBOVFdieHY3d3JqXS5qNURRMm1UdF8mTU9TLWozP2VL'}]);
|
||
_stq.push([ 'clickTrackerInit', '27679227', '1689' ]);
|
||
</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/Stockholm" data-custom-props="{"logged_in":"0","wptheme":"pub\/coraline","wptheme_is_block":"0"}" >
|
||
<script defer src="/wp-content/js/bilmur.min.js?i=17&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/sun/jetpack_vendor/automattic/jetpack-mu-wpcom/src/build/verbum-comments/verbum-comments.js?m=1788900463i&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> |