1037 lines
51 KiB
HTML
1037 lines
51 KiB
HTML
<!DOCTYPE html>
|
|
<html class='v2' dir='ltr' lang='en'>
|
|
<head>
|
|
<link href='https://www.blogger.com/static/v1/widgets/3772415480-widget_css_mobile_2_bundle.css' rel='stylesheet' type='text/css'/>
|
|
<meta content='width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0' name='viewport'/>
|
|
<meta content='text/html; charset=UTF-8' http-equiv='Content-Type'/>
|
|
<meta content='blogger' name='generator'/>
|
|
<link href='https://sysadvent.blogspot.com/favicon.ico' rel='icon' type='image/x-icon'/>
|
|
<link href='https://sysadvent.blogspot.com/2016/12/day-1-why-you-need-postmortem-process.html' rel='canonical'/>
|
|
<link rel="alternate" type="application/atom+xml" title="sysadvent - Atom" href="https://sysadvent.blogspot.com/feeds/posts/default" />
|
|
<link rel="alternate" type="application/rss+xml" title="sysadvent - RSS" href="https://sysadvent.blogspot.com/feeds/posts/default?alt=rss" />
|
|
<link rel="service.post" type="application/atom+xml" title="sysadvent - Atom" href="https://draft.blogger.com/feeds/3615332969083650973/posts/default" />
|
|
|
|
<link rel="alternate" type="application/atom+xml" title="sysadvent - Atom" href="https://sysadvent.blogspot.com/feeds/5078299608436421221/comments/default" />
|
|
<!--Can't find substitution for tag [blog.ieCssRetrofitLinks]-->
|
|
<meta content='https://sysadvent.blogspot.com/2016/12/day-1-why-you-need-postmortem-process.html' property='og:url'/>
|
|
<meta content='Day 1 - Why You Need a Postmortem Process' property='og:title'/>
|
|
<meta content='Written by: Gabe Abinante ( @gabinante ) Edited by: Shaun Mouton ( @sdmouton ) Why Postmortems? Failure is inevitable. As engineers build...' property='og:description'/>
|
|
<title>sysadvent: Day 1 - Why You Need a Postmortem Process</title>
|
|
<style id='page-skin-1' type='text/css'><!--
|
|
/*
|
|
-----------------------------------------------
|
|
Blogger Template Style
|
|
Name: Simple
|
|
Designer: Blogger
|
|
URL: www.blogger.com
|
|
----------------------------------------------- */
|
|
/* Content
|
|
----------------------------------------------- */
|
|
body {
|
|
font: normal normal 12px 'Trebuchet MS', Trebuchet, Verdana, sans-serif;
|
|
color: #666666;
|
|
background: #ffffff none repeat scroll top left;
|
|
padding: 0 0 0 0;
|
|
}
|
|
html body .region-inner {
|
|
min-width: 0;
|
|
max-width: 100%;
|
|
width: auto;
|
|
}
|
|
h2 {
|
|
font-size: 22px;
|
|
}
|
|
a:link {
|
|
text-decoration:none;
|
|
color: #2288bb;
|
|
}
|
|
a:visited {
|
|
text-decoration:none;
|
|
color: #888888;
|
|
}
|
|
a:hover {
|
|
text-decoration:underline;
|
|
color: #33aaff;
|
|
}
|
|
.body-fauxcolumn-outer .fauxcolumn-inner {
|
|
background: transparent none repeat scroll top left;
|
|
_background-image: none;
|
|
}
|
|
.body-fauxcolumn-outer .cap-top {
|
|
position: absolute;
|
|
z-index: 1;
|
|
height: 400px;
|
|
width: 100%;
|
|
}
|
|
.body-fauxcolumn-outer .cap-top .cap-left {
|
|
width: 100%;
|
|
background: transparent none repeat-x scroll top left;
|
|
_background-image: none;
|
|
}
|
|
.content-outer {
|
|
-moz-box-shadow: 0 0 0 rgba(0, 0, 0, .15);
|
|
-webkit-box-shadow: 0 0 0 rgba(0, 0, 0, .15);
|
|
-goog-ms-box-shadow: 0 0 0 #333333;
|
|
box-shadow: 0 0 0 rgba(0, 0, 0, .15);
|
|
margin-bottom: 1px;
|
|
}
|
|
.content-inner {
|
|
padding: 10px 40px;
|
|
}
|
|
.content-inner {
|
|
background-color: #ffffff;
|
|
}
|
|
/* Header
|
|
----------------------------------------------- */
|
|
.header-outer {
|
|
background: transparent none repeat-x scroll 0 -400px;
|
|
_background-image: none;
|
|
}
|
|
.Header h1 {
|
|
font: normal normal 40px 'Trebuchet MS',Trebuchet,Verdana,sans-serif;
|
|
color: #000000;
|
|
text-shadow: 0 0 0 rgba(0, 0, 0, .2);
|
|
}
|
|
.Header h1 a {
|
|
color: #000000;
|
|
}
|
|
.Header .description {
|
|
font-size: 18px;
|
|
color: #000000;
|
|
}
|
|
.header-inner .Header .titlewrapper {
|
|
padding: 22px 0;
|
|
}
|
|
.header-inner .Header .descriptionwrapper {
|
|
padding: 0 0;
|
|
}
|
|
/* Tabs
|
|
----------------------------------------------- */
|
|
.tabs-inner .section:first-child {
|
|
border-top: 0 solid #dddddd;
|
|
}
|
|
.tabs-inner .section:first-child ul {
|
|
margin-top: -1px;
|
|
border-top: 1px solid #dddddd;
|
|
border-left: 1px solid #dddddd;
|
|
border-right: 1px solid #dddddd;
|
|
}
|
|
.tabs-inner .widget ul {
|
|
background: transparent none repeat-x scroll 0 -800px;
|
|
_background-image: none;
|
|
border-bottom: 1px solid #dddddd;
|
|
margin-top: 0;
|
|
margin-left: -30px;
|
|
margin-right: -30px;
|
|
}
|
|
.tabs-inner .widget li a {
|
|
display: inline-block;
|
|
padding: .6em 1em;
|
|
font: normal normal 12px 'Trebuchet MS', Trebuchet, Verdana, sans-serif;
|
|
color: #000000;
|
|
border-left: 1px solid #ffffff;
|
|
border-right: 1px solid #dddddd;
|
|
}
|
|
.tabs-inner .widget li:first-child a {
|
|
border-left: none;
|
|
}
|
|
.tabs-inner .widget li.selected a, .tabs-inner .widget li a:hover {
|
|
color: #000000;
|
|
background-color: #eeeeee;
|
|
text-decoration: none;
|
|
}
|
|
/* Columns
|
|
----------------------------------------------- */
|
|
.main-outer {
|
|
border-top: 0 solid #dddddd;
|
|
}
|
|
.fauxcolumn-left-outer .fauxcolumn-inner {
|
|
border-right: 1px solid #dddddd;
|
|
}
|
|
.fauxcolumn-right-outer .fauxcolumn-inner {
|
|
border-left: 1px solid #dddddd;
|
|
}
|
|
/* Headings
|
|
----------------------------------------------- */
|
|
div.widget > h2,
|
|
div.widget h2.title {
|
|
margin: 0 0 1em 0;
|
|
font: normal bold 11px 'Trebuchet MS',Trebuchet,Verdana,sans-serif;
|
|
color: #000000;
|
|
}
|
|
/* Widgets
|
|
----------------------------------------------- */
|
|
.widget .zippy {
|
|
color: #999999;
|
|
text-shadow: 2px 2px 1px rgba(0, 0, 0, .1);
|
|
}
|
|
.widget .popular-posts ul {
|
|
list-style: none;
|
|
}
|
|
/* Posts
|
|
----------------------------------------------- */
|
|
h2.date-header {
|
|
font: normal bold 11px Arial, Tahoma, Helvetica, FreeSans, sans-serif;
|
|
}
|
|
.date-header span {
|
|
background-color: #bbbbbb;
|
|
color: #ffffff;
|
|
padding: 0.4em;
|
|
letter-spacing: 3px;
|
|
margin: inherit;
|
|
}
|
|
.main-inner {
|
|
padding-top: 35px;
|
|
padding-bottom: 65px;
|
|
}
|
|
.main-inner .column-center-inner {
|
|
padding: 0 0;
|
|
}
|
|
.main-inner .column-center-inner .section {
|
|
margin: 0 1em;
|
|
}
|
|
.post {
|
|
margin: 0 0 45px 0;
|
|
}
|
|
h3.post-title, .comments h4 {
|
|
font: normal normal 22px 'Trebuchet MS',Trebuchet,Verdana,sans-serif;
|
|
margin: .75em 0 0;
|
|
}
|
|
.post-body {
|
|
font-size: 110%;
|
|
line-height: 1.4;
|
|
position: relative;
|
|
}
|
|
.post-body img, .post-body .tr-caption-container, .Profile img, .Image img,
|
|
.BlogList .item-thumbnail img {
|
|
padding: 2px;
|
|
background: #ffffff;
|
|
border: 1px solid #eeeeee;
|
|
-moz-box-shadow: 1px 1px 5px rgba(0, 0, 0, .1);
|
|
-webkit-box-shadow: 1px 1px 5px rgba(0, 0, 0, .1);
|
|
box-shadow: 1px 1px 5px rgba(0, 0, 0, .1);
|
|
}
|
|
.post-body img, .post-body .tr-caption-container {
|
|
padding: 5px;
|
|
}
|
|
.post-body .tr-caption-container {
|
|
color: #666666;
|
|
}
|
|
.post-body .tr-caption-container img {
|
|
padding: 0;
|
|
background: transparent;
|
|
border: none;
|
|
-moz-box-shadow: 0 0 0 rgba(0, 0, 0, .1);
|
|
-webkit-box-shadow: 0 0 0 rgba(0, 0, 0, .1);
|
|
box-shadow: 0 0 0 rgba(0, 0, 0, .1);
|
|
}
|
|
.post-header {
|
|
margin: 0 0 1.5em;
|
|
line-height: 1.6;
|
|
font-size: 90%;
|
|
}
|
|
.post-footer {
|
|
margin: 20px -2px 0;
|
|
padding: 5px 10px;
|
|
color: #666666;
|
|
background-color: #eeeeee;
|
|
border-bottom: 1px solid #eeeeee;
|
|
line-height: 1.6;
|
|
font-size: 90%;
|
|
}
|
|
#comments .comment-author {
|
|
padding-top: 1.5em;
|
|
border-top: 1px solid #dddddd;
|
|
background-position: 0 1.5em;
|
|
}
|
|
#comments .comment-author:first-child {
|
|
padding-top: 0;
|
|
border-top: none;
|
|
}
|
|
.avatar-image-container {
|
|
margin: .2em 0 0;
|
|
}
|
|
#comments .avatar-image-container img {
|
|
border: 1px solid #eeeeee;
|
|
}
|
|
/* Comments
|
|
----------------------------------------------- */
|
|
.comments .comments-content .icon.blog-author {
|
|
background-repeat: no-repeat;
|
|
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEgAACxIB0t1+/AAAAAd0SU1FB9sLFwMeCjjhcOMAAAD+SURBVDjLtZSvTgNBEIe/WRRnm3U8RC1neQdsm1zSBIU9VVF1FkUguQQsD9ITmD7ECZIJSE4OZo9stoVjC/zc7ky+zH9hXwVwDpTAWWLrgS3QAe8AZgaAJI5zYAmc8r0G4AHYHQKVwII8PZrZFsBFkeRCABYiMh9BRUhnSkPTNCtVXYXURi1FpBDgArj8QU1eVXUzfnjv7yP7kwu1mYrkWlU33vs1QNu2qU8pwN0UpKoqokjWwCztrMuBhEhmh8bD5UDqur75asbcX0BGUB9/HAMB+r32hznJgXy2v0sGLBcyAJ1EK3LFcbo1s91JeLwAbwGYu7TP/3ZGfnXYPgAVNngtqatUNgAAAABJRU5ErkJggg==);
|
|
}
|
|
.comments .comments-content .loadmore a {
|
|
border-top: 1px solid #999999;
|
|
border-bottom: 1px solid #999999;
|
|
}
|
|
.comments .comment-thread.inline-thread {
|
|
background-color: #eeeeee;
|
|
}
|
|
.comments .continue {
|
|
border-top: 2px solid #999999;
|
|
}
|
|
/* Accents
|
|
---------------------------------------------- */
|
|
.section-columns td.columns-cell {
|
|
border-left: 1px solid #dddddd;
|
|
}
|
|
.blog-pager {
|
|
background: transparent url(https://resources.blogblog.com/blogblog/data/1kt/simple/paging_dot.png) repeat-x scroll top center;
|
|
}
|
|
.blog-pager-older-link, .home-link,
|
|
.blog-pager-newer-link {
|
|
background-color: #ffffff;
|
|
padding: 5px;
|
|
}
|
|
.footer-outer {
|
|
border-top: 1px dashed #bbbbbb;
|
|
}
|
|
/* Mobile
|
|
----------------------------------------------- */
|
|
body.mobile {
|
|
background-size: auto;
|
|
}
|
|
.mobile .body-fauxcolumn-outer {
|
|
background: transparent none repeat scroll top left;
|
|
}
|
|
.mobile .body-fauxcolumn-outer .cap-top {
|
|
background-size: 100% auto;
|
|
}
|
|
.mobile .content-outer {
|
|
-webkit-box-shadow: 0 0 3px rgba(0, 0, 0, .15);
|
|
box-shadow: 0 0 3px rgba(0, 0, 0, .15);
|
|
}
|
|
.mobile .tabs-inner .widget ul {
|
|
margin-left: 0;
|
|
margin-right: 0;
|
|
}
|
|
.mobile .post {
|
|
margin: 0;
|
|
}
|
|
.mobile .main-inner .column-center-inner .section {
|
|
margin: 0;
|
|
}
|
|
.mobile .date-header span {
|
|
padding: 0.1em 10px;
|
|
margin: 0 -10px;
|
|
}
|
|
.mobile h3.post-title {
|
|
margin: 0;
|
|
}
|
|
.mobile .blog-pager {
|
|
background: transparent none no-repeat scroll top center;
|
|
}
|
|
.mobile .footer-outer {
|
|
border-top: none;
|
|
}
|
|
.mobile .main-inner, .mobile .footer-inner {
|
|
background-color: #ffffff;
|
|
}
|
|
.mobile-index-contents {
|
|
color: #666666;
|
|
}
|
|
.mobile-link-button {
|
|
background-color: #2288bb;
|
|
}
|
|
.mobile-link-button a:link, .mobile-link-button a:visited {
|
|
color: #ffffff;
|
|
}
|
|
.mobile .tabs-inner .section:first-child {
|
|
border-top: none;
|
|
}
|
|
.mobile .tabs-inner .PageList .widget-content {
|
|
background-color: #eeeeee;
|
|
color: #000000;
|
|
border-top: 1px solid #dddddd;
|
|
border-bottom: 1px solid #dddddd;
|
|
}
|
|
.mobile .tabs-inner .PageList .widget-content .pagelist-arrow {
|
|
border-left: 1px solid #dddddd;
|
|
}
|
|
|
|
--></style>
|
|
<style id='template-skin-1' type='text/css'><!--
|
|
body {
|
|
min-width: 960px;
|
|
}
|
|
.content-outer, .content-fauxcolumn-outer, .region-inner {
|
|
min-width: 960px;
|
|
max-width: 960px;
|
|
_width: 960px;
|
|
}
|
|
.main-inner .columns {
|
|
padding-left: 0;
|
|
padding-right: 0;
|
|
}
|
|
.main-inner .fauxcolumn-center-outer {
|
|
left: 0;
|
|
right: 0;
|
|
/* IE6 does not respect left and right together */
|
|
_width: expression(this.parentNode.offsetWidth -
|
|
parseInt("0") -
|
|
parseInt("0") + 'px');
|
|
}
|
|
.main-inner .fauxcolumn-left-outer {
|
|
width: 0;
|
|
}
|
|
.main-inner .fauxcolumn-right-outer {
|
|
width: 0;
|
|
}
|
|
.main-inner .column-left-outer {
|
|
width: 0;
|
|
right: 100%;
|
|
margin-left: -0;
|
|
}
|
|
.main-inner .column-right-outer {
|
|
width: 0;
|
|
margin-right: -0;
|
|
}
|
|
#layout {
|
|
min-width: 0;
|
|
}
|
|
#layout .content-outer {
|
|
min-width: 0;
|
|
width: 800px;
|
|
}
|
|
#layout .region-inner {
|
|
min-width: 0;
|
|
width: auto;
|
|
}
|
|
body#layout div.add_widget {
|
|
padding: 8px;
|
|
}
|
|
body#layout div.add_widget a {
|
|
margin-left: 32px;
|
|
}
|
|
--></style>
|
|
<link href='https://draft.blogger.com/dyncss/3615332969083650973/authorization.css?zx=24cd04b2-38ff-45f4-a3f0-f0a07f75ec8f' media='none' onload='if(media!='all')media='all'' rel='stylesheet'/><noscript><link href='https://draft.blogger.com/dyncss/3615332969083650973/authorization.css?zx=24cd04b2-38ff-45f4-a3f0-f0a07f75ec8f' rel='stylesheet'/></noscript>
|
|
<meta name='google-adsense-platform-account' content='ca-host-pub-1556223355139109'/>
|
|
<meta name='google-adsense-platform-domain' content='blogspot.com'/>
|
|
|
|
<!-- data-ad-client=ca-pub-6194074709963145 -->
|
|
|
|
</head>
|
|
<body class='loading mobile variant-simplysimple'>
|
|
<div class='navbar section' id='navbar' name='Navbar'><div class='widget Navbar' data-version='1' id='Navbar1'><script type="text/javascript">
|
|
function setAttributeOnload(object, attribute, val) {
|
|
if(window.addEventListener) {
|
|
window.addEventListener('load',
|
|
function(){ object[attribute] = val; }, false);
|
|
} else {
|
|
window.attachEvent('onload', function(){ object[attribute] = val; });
|
|
}
|
|
}
|
|
</script>
|
|
<script type="text/javascript">
|
|
(function() {
|
|
var script = document.createElement('script');
|
|
script.type = 'text/javascript';
|
|
script.src = '//pagead2.googlesyndication.com/pagead/js/google_top_exp.js';
|
|
var head = document.getElementsByTagName('head')[0];
|
|
if (head) {
|
|
head.appendChild(script);
|
|
}})();
|
|
</script>
|
|
</div></div>
|
|
<div class='body-fauxcolumns'>
|
|
<div class='fauxcolumn-outer body-fauxcolumn-outer'>
|
|
<div class='cap-top'>
|
|
<div class='cap-left'></div>
|
|
<div class='cap-right'></div>
|
|
</div>
|
|
<div class='fauxborder-left'>
|
|
<div class='fauxborder-right'></div>
|
|
<div class='fauxcolumn-inner'>
|
|
</div>
|
|
</div>
|
|
<div class='cap-bottom'>
|
|
<div class='cap-left'></div>
|
|
<div class='cap-right'></div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class='content'>
|
|
<div class='content-fauxcolumns'>
|
|
<div class='fauxcolumn-outer content-fauxcolumn-outer'>
|
|
<div class='cap-top'>
|
|
<div class='cap-left'></div>
|
|
<div class='cap-right'></div>
|
|
</div>
|
|
<div class='fauxborder-left'>
|
|
<div class='fauxborder-right'></div>
|
|
<div class='fauxcolumn-inner'>
|
|
</div>
|
|
</div>
|
|
<div class='cap-bottom'>
|
|
<div class='cap-left'></div>
|
|
<div class='cap-right'></div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class='content-outer'>
|
|
<div class='content-cap-top cap-top'>
|
|
<div class='cap-left'></div>
|
|
<div class='cap-right'></div>
|
|
</div>
|
|
<div class='fauxborder-left content-fauxborder-left'>
|
|
<div class='fauxborder-right content-fauxborder-right'></div>
|
|
<div class='content-inner'>
|
|
<header>
|
|
<div class='header-outer'>
|
|
<div class='header-cap-top cap-top'>
|
|
<div class='cap-left'></div>
|
|
<div class='cap-right'></div>
|
|
</div>
|
|
<div class='fauxborder-left header-fauxborder-left'>
|
|
<div class='fauxborder-right header-fauxborder-right'></div>
|
|
<div class='region-inner header-inner'>
|
|
<div class='header section' id='header' name='Header'><div class='widget Header' data-version='1' id='Header1'>
|
|
<div id='header-inner'>
|
|
<a href='https://sysadvent.blogspot.com/?m=1' style='display: block'>
|
|
<img alt='sysadvent' height='auto; ' id='Header1_headerimg' src='https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiYVlIMEU0sXvTBtcY5iFj5QtiT3Klf0S3sgSamkTPsjU1QGvOWHA-6yq173iHys3-ImrIFY26KIPuKEoSNSbitvtnXsZU6b8YPGQ48ir-8Jo2NFrTsaiO_Nl9W9XLt_wyWhTM_16_HeN0/s400/sys-advent-long.png' style='display: block' width='100%; '/>
|
|
</a>
|
|
</div>
|
|
</div></div>
|
|
</div>
|
|
</div>
|
|
<div class='header-cap-bottom cap-bottom'>
|
|
<div class='cap-left'></div>
|
|
<div class='cap-right'></div>
|
|
</div>
|
|
</div>
|
|
</header>
|
|
<div class='tabs-outer'>
|
|
<div class='tabs-cap-top cap-top'>
|
|
<div class='cap-left'></div>
|
|
<div class='cap-right'></div>
|
|
</div>
|
|
<div class='fauxborder-left tabs-fauxborder-left'>
|
|
<div class='fauxborder-right tabs-fauxborder-right'></div>
|
|
<div class='region-inner tabs-inner'>
|
|
<div class='tabs no-items section' id='crosscol' name='Cross-Column'></div>
|
|
<div class='tabs no-items section' id='crosscol-overflow' name='Cross-Column 2'></div>
|
|
</div>
|
|
</div>
|
|
<div class='tabs-cap-bottom cap-bottom'>
|
|
<div class='cap-left'></div>
|
|
<div class='cap-right'></div>
|
|
</div>
|
|
</div>
|
|
<div class='main-outer'>
|
|
<div class='main-cap-top cap-top'>
|
|
<div class='cap-left'></div>
|
|
<div class='cap-right'></div>
|
|
</div>
|
|
<div class='fauxborder-left main-fauxborder-left'>
|
|
<div class='fauxborder-right main-fauxborder-right'></div>
|
|
<div class='region-inner main-inner'>
|
|
<div class='columns fauxcolumns'>
|
|
<div class='fauxcolumn-outer fauxcolumn-center-outer'>
|
|
<div class='cap-top'>
|
|
<div class='cap-left'></div>
|
|
<div class='cap-right'></div>
|
|
</div>
|
|
<div class='fauxborder-left'>
|
|
<div class='fauxborder-right'></div>
|
|
<div class='fauxcolumn-inner'>
|
|
</div>
|
|
</div>
|
|
<div class='cap-bottom'>
|
|
<div class='cap-left'></div>
|
|
<div class='cap-right'></div>
|
|
</div>
|
|
</div>
|
|
<div class='fauxcolumn-outer fauxcolumn-left-outer'>
|
|
<div class='cap-top'>
|
|
<div class='cap-left'></div>
|
|
<div class='cap-right'></div>
|
|
</div>
|
|
<div class='fauxborder-left'>
|
|
<div class='fauxborder-right'></div>
|
|
<div class='fauxcolumn-inner'>
|
|
</div>
|
|
</div>
|
|
<div class='cap-bottom'>
|
|
<div class='cap-left'></div>
|
|
<div class='cap-right'></div>
|
|
</div>
|
|
</div>
|
|
<div class='fauxcolumn-outer fauxcolumn-right-outer'>
|
|
<div class='cap-top'>
|
|
<div class='cap-left'></div>
|
|
<div class='cap-right'></div>
|
|
</div>
|
|
<div class='fauxborder-left'>
|
|
<div class='fauxborder-right'></div>
|
|
<div class='fauxcolumn-inner'>
|
|
</div>
|
|
</div>
|
|
<div class='cap-bottom'>
|
|
<div class='cap-left'></div>
|
|
<div class='cap-right'></div>
|
|
</div>
|
|
</div>
|
|
<!-- corrects IE6 width calculation -->
|
|
<div class='columns-inner'>
|
|
<div class='column-center-outer'>
|
|
<div class='column-center-inner'>
|
|
<div class='main section' id='main' name='Main'><div class='widget Blog' data-version='1' id='Blog1'>
|
|
<div class='blog-posts hfeed'>
|
|
<div class='date-outer'>
|
|
<h2 class='date-header'><span>December 1, 2016</span></h2>
|
|
<div class='date-posts'>
|
|
<div class='post-outer'>
|
|
<div class='post hentry uncustomized-post-template' itemscope='itemscope' itemtype='http://schema.org/BlogPosting'>
|
|
<meta content='3615332969083650973' itemprop='blogId'/>
|
|
<meta content='5078299608436421221' itemprop='postId'/>
|
|
<a name='5078299608436421221'></a>
|
|
<h3 class='post-title entry-title' itemprop='name'>
|
|
Day 1 - Why You Need a Postmortem Process
|
|
</h3>
|
|
<div class='post-header'>
|
|
<div class='post-header-line-1'></div>
|
|
</div>
|
|
<div class='post-body entry-content' id='post-body-5078299608436421221' itemprop='articleBody'>
|
|
Written by: Gabe Abinante (<a href="https://twitter.com/gabinante">@gabinante</a>)<br />
|
|
Edited by: Shaun Mouton (<a href="https://twitter.com/sdmouton">@sdmouton</a>)<br />
|
|
<h2>Why Postmortems?</h2>
|
|
Failure is inevitable. As engineers building and maintaining complex systems, we likely encounter failure in some form on a daily basis. Not every failure requires a postmortem, but if a failure impacts the bottom line of the business, it becomes important to follow a postmortem process. I say “follow a postmortem process” instead of “do a postmortem”, because a postmortem should have very specific goals designed to prevent future failures in your environment. Simply asking the <a href="https://en.wikipedia.org/wiki/5_Whys">five whys</a> to try and determine the root cause is not enough.<br />
|
|
<br />
|
|
A postmortem is intended to fill out the sort of knowledge gaps that inevitably exist after an outage:<br />
|
|
<ol>
|
|
<li>Who was involved / Who should have been involved?</li>
|
|
<li>Was/is communication good between those parties?</li>
|
|
<li>How exactly did the incident happen, according to the people who were closest to it?</li>
|
|
<li>What went well / what did we do right?</li>
|
|
<li>What could have gone better?</li>
|
|
<li>What action items can we take from this postmortem to prevent future occurrence?</li>
|
|
<li>What else did we learn?</li>
|
|
</ol>
|
|
Without a systematic examination of failure, observers can resort to baseless speculation.<br />
|
|
<br />
|
|
Without an analysis of what went right as well as what went wrong, the process can be viewed as a complete failure.<br />
|
|
<br />
|
|
Without providing key learnings and developing action items, observers are left to imagine that the problem will almost certainly happen again.<br />
|
|
<h2>
|
|
<a href="https://www.blogger.com/null" id="A_Case_Study_of_the_Knight_Capital_critical_SMARS_error_2012_22"></a>A Case Study of the Knight Capital critical SMARS error 2012</h2>
|
|
Knight Capital was a financial services firm engaging in high frequency trading in the New York Stock Exchange and NASDAQ. It posted revenue of 1.404 billion in 2011, but went out of business by the end of 2012.<br />
|
|
<br />
|
|
On August 1, 2012, Knight Capital deployed untested software which contained an obsolete function to a production environment. The incident happened due to an engineer deploying new code to only 7/8 of the servers responsible for Knight’s automated routing system for equity orders. The code repurposed a flag that was formerly used to activate an old function known as “Power Peg”, which was designed to move stock prices higher and lower in order to verify the behavior of trading algorithms in a controlled environment. All orders sent with the repurposed flag to one of the servers triggered the obsolete code still present on that server. As a result, Knight’s trading activities caused a major disruption in the prices of 148 companies listed at the New York Stock Exchange. This caused the prices of certain stocks to jump by as much as 1200%. For the incoming parent orders that were processed by the defective code, Knight Capital sent millions of child orders, resulting in 4 million executions in 154 stocks for more than 397 million shares in approximately 45 minutes (<a href="http://www.sec.gov/litigation/admin/2013/34-70694.pdf" rel="nofollow">1</a>). Knight Capital took a pre-tax loss of $440 million. Despite a bailout the day after, this precipitated the collapse of Knight Capital’s stock, losing 75% of their equity value.<br />
|
|
<br />
|
|
I chose to write about this incident because there is an incredible body of writing about it, but actually remarkably little information or substance beyond the SEC release. The amount of material is certainly partially because the incident had such a high impact - few companies have a technical glitch that puts them out of business so quickly. I believe that there’s more to it however - this type of response is an attempt by the community to make sense of the incident because the company itself never released a public postmortem. This is an incredibly interesting case because a production bug and operational failure actually perpetuated the collapse of a seemingly successful business - but the lack of a public postmortem exposed the company to all kinds of baseless speculation about lackadaisical attitudes towards change controls, testing, and production changes (see various citations, especially <a href="http://pythonsweetness.tumblr.com/post/64740079543/how-to-lose-172222-a-second-for-45-minutes" rel="nofollow">11</a>, <a href="http://dougseven.com/2014/04/17/knightmare-a-devops-cautionary-tale/" rel="nofollow">12</a>). It would also seem that there was not an internal postmortem, or that it was not well circulated, based upon the Knight Capital CEO’s comments to the press (<a href="http://spectrum.ieee.org/riskfactor/computing/it/-knuckleheads-in-it-responsible-for-errant-trading-knight-capital-ceo-claims" rel="nofollow">2</a>).<br />
|
|
<br />
|
|
As the John Allspaw notes in his blog (<a href="http://www.kitchensoap.com/2013/10/29/counterfactuals-knight-capital/" rel="nofollow">3</a>), one of the worst consequences of Knight’s reticence was news companies and bloggers using the SEC investigation as a substitute for a postmortem. This was harmful to the business and particularly to the engineers involved in the incident. The SEC document is blamey. It’s supposed to be blamey. It details the incident timeline and outlines procedures that should have been in place to prevent an error - and in doing so it focuses entirely on what was lacking from their outside perspective. What it doesn’t do is accurately explain how the event came to be. What processes WERE in place that the engineers relied upon? What change controls WERE being used? What went right and what will be done to ensure this doesn’t happen in the future?<br />
|
|
<br />
|
|
Did Knight Capital go out of business because they lost a bunch of money in a catastrophic way? Sure. But their core business was still a profitable model - it’s conceivable that they could have received a bailout, continued operations, and gotten out of the hole created by this massive failure. Unfortunately, they failed to demonstrate to their investors and to the public that they were capable of doing so. By failing to release a public document, they allowed the narrative to be controlled by news sites and bloggers.<br />
|
|
<h2>
|
|
<a href="https://www.blogger.com/null" id="Taking_a_look_at_IaaS_provider_outages_38"></a>Taking a look at IaaS provider outages</h2>
|
|
Infrastructure providers are in a unique position where they have to release postmortems to all of their customers for every outage, because all of their customers’ business systems rely upon IaaS uptime.<br />
|
|
<br />
|
|
AWS experienced an outage that spanned April 21st-April 24th, 2011 and brought down the web infrastructure of several large companies such as Quora and Hootsuite. The incident began when someone improperly executed a network change and shunted a bunch of traffic to the wrong place, which cut a ton of nodes off from each other. Because so many nodes were affected at one time, all of them trying to re-establish replication and hunt for free nodes caused the entire EBS cluster to run out of free space. This generated a cascading failure scenario that required a massive amount of storage capacity in order to untangle. Recovery took quite a while because capacity had to be physically added to the cluster. The postmortem was published via Amazon’s blog on April 29th, 2011. This incident is notable because it was somewhat widespread (affected multiple availability zones) and resolution took longer than 24 hours - making it one of the largest outages that AWS has experienced. AWS has a response pattern that is characterized by communication throughout; updates to status page during the incident, followed by a detailed postmortem afterwards (<a href="https://aws.amazon.com/message/65648/" rel="nofollow">4</a>). Amazon’s postmortem structure seems to be consistent across multiple events. Many seem to use roughly this outline:<br />
|
|
<ol>
|
|
<li>Statement of Purpose</li>
|
|
<li>Infrastructure overview of affected systems</li>
|
|
<li>Detailed recap of incident by service</li>
|
|
<li>Explanation of recovery steps & key learnings</li>
|
|
<li>Wrap-up and conclusion</li>
|
|
</ol>
|
|
From this we can learn two things: Firstly, we know that amazon has a postmortem process. They are pursuing specific goals around analyzing the failure of their service. Secondly, we know what they want to communicate. Primarily, they want to explain why the failure occurred and why it will not happen again in the future. They also provide an avenue for disgruntled stakeholders to reach out, receive compensation, get additional explanation, etc.<br />
|
|
<br />
|
|
Azure experienced a similar storage failure in 2014 and we see a similar response from them - immediate communication via status pages, followed by a postmortem after the incident (<a href="https://azure.microsoft.com/en-us/blog/update-on-azure-storage-service-interruption/" rel="nofollow">5</a>).<br />
|
|
<br />
|
|
Taking a look at how the media approaches these failure events, it’s worthy of note that the articles written about the outages include links to the postmortem itself, as well as status pages and social media (<a href="https://www.wired.com/insights/2011/08/amazon-outage-post-mortem/" rel="nofollow">6</a>,<a href="http://www.rightscale.com/blog/cloud-industry-insights/amazon-ec2-outage-summary-and-lessons-learned" rel="nofollow">7</a>). Because the companies are communicative and providing documentation about the problem, the journalist can disseminate that information in their article - thus allowing the company that experienced the failure to control the narrative. Because so much information is supplied, there’s very little speculation about what went right or wrong on the part of individuals or journalists, despite the outage events impacting a huge number of individuals and companies utilizing the services themselves or software which relied upon them.<br />
|
|
<h2>
|
|
<a href="https://www.blogger.com/null" id="Conclusion_61"></a>Conclusion</h2>
|
|
So, while postmortems are often considered a useful tool only from an engineering perspective, they are critical to all parts of a business for four reasons:<br />
|
|
<br />
|
|
<ul>
|
|
<li>Resolving existing issues causing failures</li>
|
|
<li>Preventing future failures</li>
|
|
<li>Controlling public perception of the incident</li>
|
|
<li>Helping internal business units and stakeholders to understand the failure</li>
|
|
</ul>
|
|
<br />
|
|
Having a process is equally critical, and that process needs to be informed by the needs of the business both internally and externally. A process helps ensure that the right questions get asked and the right actions are taken to understand and mitigate failure. With the typical software development lifecycle increasing in speed, availability is becoming more of a moving target than ever. Postmortem processes help us zero in on threats to our availability and efficiently attack problems at the source.<br />
|
|
<h2>
|
|
<a href="https://www.blogger.com/null" id="About_the_Author_74"></a>About the Author</h2>
|
|
My name is Gabe Abinante and I am an SRE at ClearSlide. You can reach me at <a href="mailto:gabe@abinante.com">gabe@abinante.com</a> or @gabinante on twitter. If you are interested in developing or refining a postmortem process, check out the Operations Incident Board on GitHub: <a href="https://github.com/Operations-Incident-Board">https://github.com/Operations-Incident-Board</a><br />
|
|
<h2>
|
|
<a href="https://www.blogger.com/null" id="Citations__Additional_Reading_78"></a>Citations / Additional Reading:</h2>
|
|
<ol>
|
|
<li><a href="http://www.sec.gov/litigation/admin/2013/34-70694.pdf">http://www.sec.gov/litigation/admin/2013/34-70694.pdf</a></li>
|
|
</ol>
|
|
<ol start="2">
|
|
<li><a href="http://spectrum.ieee.org/riskfactor/computing/it/-knuckleheads-in-it-responsible-for-errant-trading-knight-capital-ceo-claims">http://spectrum.ieee.org/riskfactor/computing/it/-knuckleheads-in-it-responsible-for-errant-trading-knight-capital-ceo-claims</a></li>
|
|
</ol>
|
|
<ol start="3">
|
|
<li><a href="http://www.kitchensoap.com/2013/10/29/counterfactuals-knight-capital/">http://www.kitchensoap.com/2013/10/29/counterfactuals-knight-capital/</a></li>
|
|
</ol>
|
|
<ol start="4">
|
|
<li><a href="https://aws.amazon.com/message/65648/">https://aws.amazon.com/message/65648/</a></li>
|
|
</ol>
|
|
<ol start="5">
|
|
<li><a href="https://azure.microsoft.com/en-us/blog/update-on-azure-storage-service-interruption/">https://azure.microsoft.com/en-us/blog/update-on-azure-storage-service-interruption/</a></li>
|
|
</ol>
|
|
<ol start="6">
|
|
<li><a href="https://www.wired.com/insights/2011/08/amazon-outage-post-mortem/">https://www.wired.com/insights/2011/08/amazon-outage-post-mortem/</a></li>
|
|
</ol>
|
|
<ol start="7">
|
|
<li><a href="http://www.rightscale.com/blog/cloud-industry-insights/amazon-ec2-outage-summary-and-lessons-learned">http://www.rightscale.com/blog/cloud-industry-insights/amazon-ec2-outage-summary-and-lessons-learned</a></li>
|
|
</ol>
|
|
<ol start="8">
|
|
<li><a href="http://www.forbes.com/sites/benkepes/2014/11/18/its-a-return-to-the-azure-alypse-microsoft-azure-suffers-widespread-outage/#76bfc0194852">http://www.forbes.com/sites/benkepes/2014/11/18/its-a-return-to-the-azure-alypse-microsoft-azure-suffers-widespread-outage/#76bfc0194852</a></li>
|
|
</ol>
|
|
<ol start="9">
|
|
<li><a href="http://moneymorning.com/2012/08/07/the-real-story-behind-the-knight-capital-trading-fiasco/">http://moneymorning.com/2012/08/07/the-real-story-behind-the-knight-capital-trading-fiasco/</a></li>
|
|
</ol>
|
|
<ol start="10">
|
|
<li><a href="https://developer.ibm.com/urbancode/2013/10/28/%EF%BB%BF-knight-capitals-472-million-release-failure/">https://developer.ibm.com/urbancode/2013/10/28/-knight-capitals-472-million-release-failure/</a></li>
|
|
</ol>
|
|
<ol start="11">
|
|
<li><a href="http://pythonsweetness.tumblr.com/post/64740079543/how-to-lose-172222-a-second-for-45-minutes">http://pythonsweetness.tumblr.com/post/64740079543/how-to-lose-172222-a-second-for-45-minutes</a></li>
|
|
</ol>
|
|
<ol start="12">
|
|
<li><a href="http://dougseven.com/2014/04/17/knightmare-a-devops-cautionary-tale/">http://dougseven.com/2014/04/17/knightmare-a-devops-cautionary-tale/</a></li>
|
|
</ol>
|
|
<ol start="13">
|
|
<li><a href="http://www.cio.com/article/2393212/agile-development/software-testing-lessons-learned-from-knight-capital-fiasco.html">http://www.cio.com/article/2393212/agile-development/software-testing-lessons-learned-from-knight-capital-fiasco.html</a></li>
|
|
</ol>
|
|
<ol start="14">
|
|
<li><a href="http://dealbook.nytimes.com/2012/08/02/knight-capital-says-trading-mishap-cost-it-440-million/">http://dealbook.nytimes.com/2012/08/02/knight-capital-says-trading-mishap-cost-it-440-million/</a></li>
|
|
</ol>
|
|
<ol start="15">
|
|
<li><a href="https://codeascraft.com/2016/11/17/debriefing-facilitation-guide/">https://codeascraft.com/2016/11/17/debriefing-facilitation-guide/</a></li>
|
|
</ol>
|
|
<ol start="16">
|
|
<li><a href="https://github.com/Operations-Incident-Board">https://github.com/Operations-Incident-Board</a></li>
|
|
</ol>
|
|
<div style='clear: both;'></div>
|
|
</div>
|
|
<div class='post-footer'>
|
|
<div class='post-footer-line post-footer-line-1'>
|
|
<span class='post-author vcard'>
|
|
<span class='fn' itemprop='author' itemscope='itemscope' itemtype='http://schema.org/Person'>
|
|
<meta content='https://draft.blogger.com/profile/16550788803145425493' itemprop='url'/>
|
|
<a href='https://draft.blogger.com/profile/16550788803145425493' rel='author' title='author profile'>
|
|
<span itemprop='name'>Shaun Mouton</span>
|
|
</a>
|
|
</span>
|
|
</span>
|
|
<span class='post-timestamp'>
|
|
</span>
|
|
<span class='post-comment-link'>
|
|
</span>
|
|
</div>
|
|
<div class='post-footer-line post-footer-line-2'>
|
|
<div class='mobile-link-button goog-inline-block' id='mobile-share-button'>
|
|
<a href='javascript:void(0);'>Share</a>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class='comments' id='comments'>
|
|
<a name='comments'></a>
|
|
<h4>2 comments:</h4>
|
|
<div class='comments-content'>
|
|
<script async='async' src='' type='text/javascript'></script>
|
|
<script type='text/javascript'>
|
|
(function() {
|
|
var items = null;
|
|
var msgs = null;
|
|
var config = {};
|
|
|
|
// <![CDATA[
|
|
var cursor = null;
|
|
if (items && items.length > 0) {
|
|
cursor = parseInt(items[items.length - 1].timestamp) + 1;
|
|
}
|
|
|
|
var bodyFromEntry = function(entry) {
|
|
var text = (entry &&
|
|
((entry.content && entry.content.$t) ||
|
|
(entry.summary && entry.summary.$t))) ||
|
|
'';
|
|
if (entry && entry.gd$extendedProperty) {
|
|
for (var k in entry.gd$extendedProperty) {
|
|
if (entry.gd$extendedProperty[k].name == 'blogger.contentRemoved') {
|
|
return '<span class="deleted-comment">' + text + '</span>';
|
|
}
|
|
}
|
|
}
|
|
return text;
|
|
}
|
|
|
|
var parse = function(data) {
|
|
cursor = null;
|
|
var comments = [];
|
|
if (data && data.feed && data.feed.entry) {
|
|
for (var i = 0, entry; entry = data.feed.entry[i]; i++) {
|
|
var comment = {};
|
|
// comment ID, parsed out of the original id format
|
|
var id = /blog-(\d+).post-(\d+)/.exec(entry.id.$t);
|
|
comment.id = id ? id[2] : null;
|
|
comment.body = bodyFromEntry(entry);
|
|
comment.timestamp = Date.parse(entry.published.$t) + '';
|
|
if (entry.author && entry.author.constructor === Array) {
|
|
var auth = entry.author[0];
|
|
if (auth) {
|
|
comment.author = {
|
|
name: (auth.name ? auth.name.$t : undefined),
|
|
profileUrl: (auth.uri ? auth.uri.$t : undefined),
|
|
avatarUrl: (auth.gd$image ? auth.gd$image.src : undefined)
|
|
};
|
|
}
|
|
}
|
|
if (entry.link) {
|
|
if (entry.link[2]) {
|
|
comment.link = comment.permalink = entry.link[2].href;
|
|
}
|
|
if (entry.link[3]) {
|
|
var pid = /.*comments\/default\/(\d+)\?.*/.exec(entry.link[3].href);
|
|
if (pid && pid[1]) {
|
|
comment.parentId = pid[1];
|
|
}
|
|
}
|
|
}
|
|
comment.deleteclass = 'item-control blog-admin';
|
|
if (entry.gd$extendedProperty) {
|
|
for (var k in entry.gd$extendedProperty) {
|
|
if (entry.gd$extendedProperty[k].name == 'blogger.itemClass') {
|
|
comment.deleteclass += ' ' + entry.gd$extendedProperty[k].value;
|
|
} else if (entry.gd$extendedProperty[k].name == 'blogger.displayTime') {
|
|
comment.displayTime = entry.gd$extendedProperty[k].value;
|
|
}
|
|
}
|
|
}
|
|
comments.push(comment);
|
|
}
|
|
}
|
|
return comments;
|
|
};
|
|
|
|
var paginator = function(callback) {
|
|
if (hasMore()) {
|
|
var url = config.feed + '?alt=json&v=2&orderby=published&reverse=false&max-results=50';
|
|
if (cursor) {
|
|
url += '&published-min=' + new Date(cursor).toISOString();
|
|
}
|
|
window.bloggercomments = function(data) {
|
|
var parsed = parse(data);
|
|
cursor = parsed.length < 50 ? null
|
|
: parseInt(parsed[parsed.length - 1].timestamp) + 1
|
|
callback(parsed);
|
|
window.bloggercomments = null;
|
|
}
|
|
url += '&callback=bloggercomments';
|
|
var script = document.createElement('script');
|
|
script.type = 'text/javascript';
|
|
script.src = url;
|
|
document.getElementsByTagName('head')[0].appendChild(script);
|
|
}
|
|
};
|
|
var hasMore = function() {
|
|
return !!cursor;
|
|
};
|
|
var getMeta = function(key, comment) {
|
|
if ('iswriter' == key) {
|
|
var matches = !!comment.author
|
|
&& comment.author.name == config.authorName
|
|
&& comment.author.profileUrl == config.authorUrl;
|
|
return matches ? 'true' : '';
|
|
} else if ('deletelink' == key) {
|
|
return config.baseUri + '/comment/delete/'
|
|
+ config.blogId + '/' + comment.id;
|
|
} else if ('deleteclass' == key) {
|
|
return comment.deleteclass;
|
|
}
|
|
return '';
|
|
};
|
|
|
|
var replybox = null;
|
|
var replyUrlParts = null;
|
|
var replyParent = undefined;
|
|
|
|
var onReply = function(commentId, domId) {
|
|
if (replybox == null) {
|
|
// lazily cache replybox, and adjust to suit this style:
|
|
replybox = document.getElementById('comment-editor');
|
|
if (replybox != null) {
|
|
replybox.height = '250px';
|
|
replybox.style.display = 'block';
|
|
replyUrlParts = replybox.src.split('#');
|
|
}
|
|
}
|
|
if (replybox && (commentId !== replyParent)) {
|
|
replybox.src = '';
|
|
document.getElementById(domId).insertBefore(replybox, null);
|
|
replybox.src = replyUrlParts[0]
|
|
+ (commentId ? '&parentID=' + commentId : '')
|
|
+ '#' + replyUrlParts[1];
|
|
replyParent = commentId;
|
|
}
|
|
};
|
|
|
|
var hash = (window.location.hash || '#').substring(1);
|
|
var startThread, targetComment;
|
|
if (/^comment-form_/.test(hash)) {
|
|
startThread = hash.substring('comment-form_'.length);
|
|
} else if (/^c[0-9]+$/.test(hash)) {
|
|
targetComment = hash.substring(1);
|
|
}
|
|
|
|
// Configure commenting API:
|
|
var configJso = {
|
|
'maxDepth': config.maxThreadDepth
|
|
};
|
|
var provider = {
|
|
'id': config.postId,
|
|
'data': items,
|
|
'loadNext': paginator,
|
|
'hasMore': hasMore,
|
|
'getMeta': getMeta,
|
|
'onReply': onReply,
|
|
'rendered': true,
|
|
'initComment': targetComment,
|
|
'initReplyThread': startThread,
|
|
'config': configJso,
|
|
'messages': msgs
|
|
};
|
|
|
|
var render = function() {
|
|
if (window.goog && window.goog.comments) {
|
|
var holder = document.getElementById('comment-holder');
|
|
window.goog.comments.render(holder, provider);
|
|
}
|
|
};
|
|
|
|
// render now, or queue to render when library loads:
|
|
if (window.goog && window.goog.comments) {
|
|
render();
|
|
} else {
|
|
window.goog = window.goog || {};
|
|
window.goog.comments = window.goog.comments || {};
|
|
window.goog.comments.loadQueue = window.goog.comments.loadQueue || [];
|
|
window.goog.comments.loadQueue.push(render);
|
|
}
|
|
})();
|
|
// ]]>
|
|
</script>
|
|
<div id='comment-holder'>
|
|
<div class="comment-thread toplevel-thread"><ol id="top-ra"><li class="comment" id="c6394162849726752697"><div class="avatar-image-container"><img src="" alt=""/></div><div class="comment-block"><div class="comment-header"><cite class="user"><a href="https://draft.blogger.com/profile/16076012099616164796" rel="nofollow">Naveen - +91-7827490192</a></cite><span class="icon user "></span><span class="datetime secondary-text"><a rel="nofollow" href="https://sysadvent.blogspot.com/2016/12/day-1-why-you-need-postmortem-process.html?showComment=1480581698358&m=1#c6394162849726752697">December 1, 2016 at 3:41 AM</a></span></div><p class="comment-content">This comment has been removed by a blog administrator.</p><span class="comment-actions secondary-text"><a class="comment-reply" target="_self" data-comment-id="6394162849726752697">Reply</a><span class="item-control blog-admin blog-admin "><a target="_self" href="https://draft.blogger.com/comment/delete/3615332969083650973/6394162849726752697">Delete</a></span></span></div><div class="comment-replies"><div id="c6394162849726752697-rt" class="comment-thread inline-thread hidden"><span class="thread-toggle thread-expanded"><span class="thread-arrow"></span><span class="thread-count"><a target="_self">Replies</a></span></span><ol id="c6394162849726752697-ra" class="thread-chrome thread-expanded"><div></div><div id="c6394162849726752697-continue" class="continue"><a class="comment-reply" target="_self" data-comment-id="6394162849726752697">Reply</a></div></ol></div></div><div class="comment-replybox-single" id="c6394162849726752697-ce"></div></li><li class="comment" id="c203034272039817847"><div class="avatar-image-container"><img src="" alt=""/></div><div class="comment-block"><div class="comment-header"><cite class="user"><a href="https://draft.blogger.com/profile/06716214040938019824" rel="nofollow">Jet Power</a></cite><span class="icon user "></span><span class="datetime secondary-text"><a rel="nofollow" href="https://sysadvent.blogspot.com/2016/12/day-1-why-you-need-postmortem-process.html?showComment=1480663474586&m=1#c203034272039817847">December 2, 2016 at 2:24 AM</a></span></div><p class="comment-content">This comment has been removed by a blog administrator.</p><span class="comment-actions secondary-text"><a class="comment-reply" target="_self" data-comment-id="203034272039817847">Reply</a><span class="item-control blog-admin blog-admin "><a target="_self" href="https://draft.blogger.com/comment/delete/3615332969083650973/203034272039817847">Delete</a></span></span></div><div class="comment-replies"><div id="c203034272039817847-rt" class="comment-thread inline-thread hidden"><span class="thread-toggle thread-expanded"><span class="thread-arrow"></span><span class="thread-count"><a target="_self">Replies</a></span></span><ol id="c203034272039817847-ra" class="thread-chrome thread-expanded"><div></div><div id="c203034272039817847-continue" class="continue"><a class="comment-reply" target="_self" data-comment-id="203034272039817847">Reply</a></div></ol></div></div><div class="comment-replybox-single" id="c203034272039817847-ce"></div></li></ol><div id="top-continue" class="continue"><a class="comment-reply" target="_self">Add comment</a></div><div class="comment-replybox-thread" id="top-ce"></div><div class="loadmore hidden" data-post-id="5078299608436421221"><a target="_self">Load more...</a></div></div>
|
|
</div>
|
|
</div>
|
|
<p class='comment-footer'>
|
|
<div class='comment-form'>
|
|
<a name='comment-form'></a>
|
|
<p>
|
|
</p>
|
|
<a href='https://draft.blogger.com/comment/frame/3615332969083650973?po=5078299608436421221&hl=en&saa=85391&origin=https://sysadvent.blogspot.com&m=1' id='comment-editor-src'></a>
|
|
<iframe allowtransparency='true' class='blogger-iframe-colorize blogger-comment-from-post' frameborder='0' height='410px' id='comment-editor' name='comment-editor' src='' style='display: none' width='100%'></iframe>
|
|
<script src='https://www.blogger.com/static/v1/jsbin/3790099508-comment_from_post_iframe.js' type='text/javascript'></script>
|
|
<script type='text/javascript'>
|
|
BLOG_CMT_createIframe('https://draft.blogger.com/rpc_relay.html');
|
|
</script>
|
|
</div>
|
|
</p>
|
|
<div id='backlinks-container'>
|
|
<div id='Blog1_backlinks-container'>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class='blog-pager' id='blog-pager'>
|
|
<div class='mobile-link-button' id='blog-pager-newer-link'>
|
|
<a class='blog-pager-newer-link' href='https://sysadvent.blogspot.com/2016/12/day-2-dbas-priesthood-no-more.html?m=1' id='Blog1_blog-pager-newer-link' title='Newer Post'>‹</a>
|
|
</div>
|
|
<div class='mobile-link-button' id='blog-pager-older-link'>
|
|
<a class='blog-pager-older-link' href='https://sysadvent.blogspot.com/2015/12/day-25-laziest-christmas-ever.html?m=1' id='Blog1_blog-pager-older-link' title='Older Post'>›</a>
|
|
</div>
|
|
<div class='mobile-link-button' id='blog-pager-home-link'>
|
|
<a class='home-link' href='https://sysadvent.blogspot.com/?m=1'>Home</a>
|
|
</div>
|
|
<div class='mobile-desktop-link'>
|
|
<a class='home-link' href='https://sysadvent.blogspot.com/2016/12/day-1-why-you-need-postmortem-process.html?m=0'>View web version</a>
|
|
</div>
|
|
</div>
|
|
<div class='clear'></div>
|
|
</div></div>
|
|
</div>
|
|
</div>
|
|
<div class='column-left-outer'>
|
|
<div class='column-left-inner'>
|
|
<aside>
|
|
</aside>
|
|
</div>
|
|
</div>
|
|
<div class='column-right-outer'>
|
|
<div class='column-right-inner'>
|
|
<aside>
|
|
</aside>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div style='clear: both'></div>
|
|
<!-- columns -->
|
|
</div>
|
|
<!-- main -->
|
|
</div>
|
|
</div>
|
|
<div class='main-cap-bottom cap-bottom'>
|
|
<div class='cap-left'></div>
|
|
<div class='cap-right'></div>
|
|
</div>
|
|
</div>
|
|
<footer>
|
|
<div class='footer-outer'>
|
|
<div class='footer-cap-top cap-top'>
|
|
<div class='cap-left'></div>
|
|
<div class='cap-right'></div>
|
|
</div>
|
|
<div class='fauxborder-left footer-fauxborder-left'>
|
|
<div class='fauxborder-right footer-fauxborder-right'></div>
|
|
<div class='region-inner footer-inner'>
|
|
<div class='foot no-items section' id='footer-1'></div>
|
|
<!-- outside of the include in order to lock Attribution widget -->
|
|
<div class='foot section' id='footer-3' name='Footer'><div class='widget Attribution' data-version='1' id='Attribution1'>
|
|
<div class='widget-content' style='text-align: center;'>
|
|
Powered by <a href='https://draft.blogger.com' target='_blank'>Blogger</a>.
|
|
</div>
|
|
<div class='clear'></div>
|
|
</div></div>
|
|
</div>
|
|
</div>
|
|
<div class='footer-cap-bottom cap-bottom'>
|
|
<div class='cap-left'></div>
|
|
<div class='cap-right'></div>
|
|
</div>
|
|
</div>
|
|
</footer>
|
|
<!-- content -->
|
|
</div>
|
|
</div>
|
|
<div class='content-cap-bottom cap-bottom'>
|
|
<div class='cap-left'></div>
|
|
<div class='cap-right'></div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<script type='text/javascript'>
|
|
window.setTimeout(function() {
|
|
document.body.className = document.body.className.replace('loading', '');
|
|
}, 10);
|
|
</script>
|
|
|
|
<script type="text/javascript" src="https://www.blogger.com/static/v1/widgets/851759228-widgets.js"></script>
|
|
<script type='text/javascript'>
|
|
var BLOG_BASE_IMAGE_URL = 'https://resources.blogblog.com/img';var BLOG_LANG_DIR = 'ltr';window['__wavt'] = 'AAPvtVnFMjc3IWPFontXfY9cXOA-:1789095113505';_WidgetManager._Init('//draft.blogger.com/rearrange?blogID\x3d3615332969083650973','//sysadvent.blogspot.com/2016/12/day-1-why-you-need-postmortem-process.html?m\x3d1','3615332969083650973');
|
|
_WidgetManager._SetDataContext([{'name': 'blog', 'data': {'blogId': '3615332969083650973', 'title': 'sysadvent', 'url': 'https://sysadvent.blogspot.com/2016/12/day-1-why-you-need-postmortem-process.html?m\x3d1', 'canonicalUrl': 'https://sysadvent.blogspot.com/2016/12/day-1-why-you-need-postmortem-process.html', 'homepageUrl': 'https://sysadvent.blogspot.com/?m\x3d1', 'searchUrl': 'https://sysadvent.blogspot.com/search', 'canonicalHomepageUrl': 'https://sysadvent.blogspot.com/', 'blogspotFaviconUrl': 'https://sysadvent.blogspot.com/favicon.ico', 'bloggerUrl': 'https://draft.blogger.com', 'hasCustomDomain': false, 'httpsEnabled': true, 'enabledCommentProfileImages': false, 'gPlusViewType': 'FILTERED_POSTMOD', 'adultContent': false, 'analyticsAccountNumber': '', 'encoding': 'UTF-8', 'locale': 'en', 'localeUnderscoreDelimited': 'en', 'languageDirection': 'ltr', 'isPrivate': false, 'isMobile': true, 'isMobileRequest': true, 'mobileClass': ' mobile', 'isPrivateBlog': false, 'isDynamicViewsAvailable': true, 'feedLinks': '\x3clink rel\x3d\x22alternate\x22 type\x3d\x22application/atom+xml\x22 title\x3d\x22sysadvent - Atom\x22 href\x3d\x22https://sysadvent.blogspot.com/feeds/posts/default\x22 /\x3e\n\x3clink rel\x3d\x22alternate\x22 type\x3d\x22application/rss+xml\x22 title\x3d\x22sysadvent - RSS\x22 href\x3d\x22https://sysadvent.blogspot.com/feeds/posts/default?alt\x3drss\x22 /\x3e\n\x3clink rel\x3d\x22service.post\x22 type\x3d\x22application/atom+xml\x22 title\x3d\x22sysadvent - Atom\x22 href\x3d\x22https://draft.blogger.com/feeds/3615332969083650973/posts/default\x22 /\x3e\n\n\x3clink rel\x3d\x22alternate\x22 type\x3d\x22application/atom+xml\x22 title\x3d\x22sysadvent - Atom\x22 href\x3d\x22https://sysadvent.blogspot.com/feeds/5078299608436421221/comments/default\x22 /\x3e\n', 'meTag': '', 'adsenseClientId': 'ca-pub-6194074709963145', 'adsenseHostId': 'ca-host-pub-1556223355139109', 'adsenseHasAds': false, 'adsenseAutoAds': false, 'boqCommentIframeForm': true, 'loginRedirectParam': '', 'isGoogleEverywhereLinkTooltipEnabled': true, 'view': '', 'dynamicViewsCommentsSrc': '//www.blogblog.com/dynamicviews/4224c15c4e7c9321/js/comments.js', 'dynamicViewsScriptSrc': '//www.blogblog.com/dynamicviews/31d4351e075118ef', 'plusOneApiSrc': 'https://apis.google.com/js/platform.js', 'disableGComments': true, 'interstitialAccepted': false, 'sharing': {'platforms': [{'name': 'Get link', 'key': 'link', 'shareMessage': 'Get link', 'target': ''}, {'name': 'Facebook', 'key': 'facebook', 'shareMessage': 'Share to Facebook', 'target': 'facebook'}, {'name': 'BlogThis!', 'key': 'blogThis', 'shareMessage': 'BlogThis!', 'target': 'blog'}, {'name': 'X', 'key': 'twitter', 'shareMessage': 'Share to X', 'target': 'twitter'}, {'name': 'Pinterest', 'key': 'pinterest', 'shareMessage': 'Share to Pinterest', 'target': 'pinterest'}, {'name': 'Email', 'key': 'email', 'shareMessage': 'Email', 'target': 'email'}], 'disableGooglePlus': true, 'googlePlusShareButtonWidth': 0, 'googlePlusBootstrap': '\x3cscript type\x3d\x22text/javascript\x22\x3ewindow.___gcfg \x3d {\x27lang\x27: \x27en\x27};\x3c/script\x3e'}, 'hasCustomJumpLinkMessage': false, 'jumpLinkMessage': 'Read more', 'pageType': 'item', 'postId': '5078299608436421221', 'pageName': 'Day 1 - Why You Need a Postmortem Process', 'pageTitle': 'sysadvent: Day 1 - Why You Need a Postmortem Process'}}, {'name': 'features', 'data': {}}, {'name': 'messages', 'data': {'edit': 'Edit', 'linkCopiedToClipboard': 'Link copied to clipboard!', 'ok': 'Ok', 'postLink': 'Post Link'}}, {'name': 'template', 'data': {'name': 'Simple', 'localizedName': 'Simple', 'isResponsive': false, 'isAlternateRendering': true, 'isCustom': false, 'variant': 'simplysimple', 'variantId': 'simplysimple'}}, {'name': 'view', 'data': {'classic': {'name': 'classic', 'url': '?view\x3dclassic'}, 'flipcard': {'name': 'flipcard', 'url': '?view\x3dflipcard'}, 'magazine': {'name': 'magazine', 'url': '?view\x3dmagazine'}, 'mosaic': {'name': 'mosaic', 'url': '?view\x3dmosaic'}, 'sidebar': {'name': 'sidebar', 'url': '?view\x3dsidebar'}, 'snapshot': {'name': 'snapshot', 'url': '?view\x3dsnapshot'}, 'timeslide': {'name': 'timeslide', 'url': '?view\x3dtimeslide'}, 'isMobile': true, 'title': 'Day 1 - Why You Need a Postmortem Process', 'description': 'Written by: Gabe Abinante ( @gabinante ) Edited by: Shaun Mouton ( @sdmouton ) Why Postmortems? Failure is inevitable. As engineers build...', 'url': 'https://sysadvent.blogspot.com/2016/12/day-1-why-you-need-postmortem-process.html?m\x3d1', 'type': 'item', 'isSingleItem': true, 'isMultipleItems': false, 'isError': false, 'isPage': false, 'isPost': true, 'isHomepage': false, 'isArchive': false, 'isLabelSearch': false, 'postId': 5078299608436421221}}]);
|
|
_WidgetManager._RegisterWidget('_HeaderView', new _WidgetInfo('Header1', 'header', document.getElementById('Header1'), {}, 'displayModeFull'));
|
|
_WidgetManager._RegisterWidget('_BlogView', new _WidgetInfo('Blog1', 'main', document.getElementById('Blog1'), {'cmtInteractionsEnabled': false, 'mobile': true}, 'displayModeFull'));
|
|
_WidgetManager._RegisterWidget('_AttributionView', new _WidgetInfo('Attribution1', 'footer-3', document.getElementById('Attribution1'), {}, 'displayModeFull'));
|
|
_WidgetManager._RegisterWidget('_NavbarView', new _WidgetInfo('Navbar1', 'navbar', document.getElementById('Navbar1'), {}, 'displayModeFull'));
|
|
</script>
|
|
</body>
|
|
</html> |