Files
nexus/sreweekly/articles/390/05-how-did-it-make-sense-at-the-time-understanding-incidents-as-they-occu.html
2026-09-12 17:23:01 +08:00

2856 lines
183 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
<!-- Google Optimize Anti-flicker snippet (recommended) -->
<style>.async-hide { opacity: 0 !important} </style>
<style>.promo{background:#222528;position:fixed;z-index:1001!important;left:0;top:0;right:0;max-height:48px;min-height:48px;padding-top:0!important;padding-bottom:0!important}.promo,.promo p{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.promo p{font-size:.8125rem;line-height:1rem;color:#fff;margin-bottom:0;margin-top:0;margin:0 auto;display:-webkit-box;display:-ms-flexbox;display:flex;font-weight:700}@media only screen and (max-width:650px){.promo p{font-size:.6875rem}}.promo span{overflow:hidden;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical}.promo a{color:#fff!important;text-decoration:underline!important}.promo a.btn{background:#d0021b;padding:7px 20px;text-decoration:none!important;font-weight:700;margin-left:10px;margin-right:10px;white-space:nowrap;border-radius:5px}@media only screen and (max-width:650px){.promo a.btn{font-size:.6875rem;padding:7px 10px}}.promo.container{padding-top:8px;padding-bottom:8px}@media only screen and (min-width:1050px){.promo.container{padding-top:0;padding-bottom:0}}.promo .actions{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.promo .actions__left{-ms-flex-preferred-size:100%;flex-basis:100%;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.promo .actions__right{-ms-flex-preferred-size:40px;flex-basis:40px;margin-top:0;margin-bottom:0;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.promo.hidden{display:none}.promo.show{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.promo.show .container__inner{-webkit-box-flex:1;-ms-flex:1;flex:1}.promo.fixed{position:fixed}.promo.show+header.header{margin-top:48px}.header{background:#fff;-webkit-box-shadow:0 1px 0 #dde2e5;box-shadow:0 1px 0 #dde2e5}.header .actions__left,.header__bottom__events{max-width:100%!important;margin:0}.header .header__events-all{margin:0;display:-webkit-box;display:-ms-flexbox;display:flex;position:relative}.header .header__events-all .header__event-slot{-webkit-box-flex:1;-ms-flex:1 100%;flex:1 100%;border-right:1px solid #dde2e5;margin-top:3px;margin-bottom:3px;padding-left:15px;text-align:left;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding-right:5px;min-width:300px}.header .header__events-all .header__event-slot:hover{text-decoration:none!important}.header .header__events-all .header__event-slot img{min-width:40px;height:40px}.header .header__events-all .header__event-slot div{margin-left:10px}.header .header__events-all .header__event-slot span{font-weight:700!important;font-size:.75rem;margin-bottom:0!important;margin-top:0;display:block;line-height:1.125rem;text-align:left}.header .header__events-all .header__event-slot p{font-weight:400;font-size:.625rem;line-height:130%!important;color:#495057!important;margin:0}@media only screen and (min-width:1050px){.header .header__events-all .header__event-slot p{font-size:.625rem}}.header .header__events-all .header__event-slot:first-child{padding-left:0}.header .header__events-all .header__event-slot:last-child{padding-right:0;border-right:0}@media only screen and (min-width:1050px){.header__bottom,.header__middle,.header__top{position:relative;white-space:nowrap}}.header__top{padding:10px 0}@media only screen and (min-width:800px){.header__top{padding:5px 0}}.header__bottom{padding:5px 0;z-index:29;max-width:100%}.header__bottom a{font-size:.8125rem}.header__bottom .trending{margin-left:0;margin-right:0}.header__bottom .actions{-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.header__bottom .actions__left{max-width:calc(100% + 8px)}@media only screen and (min-width:800px){.header__bottom .actions__left{max-width:calc(100% + 24px)}}.header__bottom .actions__right{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;display:none}@media only screen and (min-width:1050px){.header__bottom .actions__right{display:-webkit-box;display:-ms-flexbox;display:flex}}.header__middle{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap}@media only screen and (min-width:1050px){.header__middle{-ms-flex-wrap:nowrap;flex-wrap:nowrap}}.header__top .actions__left{-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-line-pack:center;align-content:center}@media only screen and (min-width:1050px){.header__top .actions__right{max-width:430px}}.no-style.header__nav li:nth-child(3){font-weight:700}.no-style.header__nav li:nth-child(3) a{color:#0e5ef1!important}.header__bottom__events::after{background:-webkit-gradient(linear,left top,right top,color-stop(0,rgba(255,255,255,0)),to(#fff));background:linear-gradient(90deg,rgba(255,255,255,0) 0,#fff 100%);content:'';position:absolute;height:60px;right:10px;width:25px}@media only screen and (min-width:1050px){.header__bottom__events::after{display:none}}.contribute-link{font-weight:400;font-size:.6875rem;color:#000!important;position:relative;padding-left:10px}.contribute-link:hover{color:#00791d!important;text-decoration:none!important}.contribute-link::before{content:'';width:1px;height:12px;position:absolute;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);background:rgba(0,0,0,.1);left:-1px}.my-0{margin-top:0!important;margin-bottom:0!important}.header__desc.my-0{margin-left:0}.header__bottom__events .actions__left{max-width:100%!important;overflow-x:scroll;-ms-overflow-style:none;scrollbar-width:none;display:block;scroll-behavior:smooth;min-width:100%}.header__bottom__events .actions__left::-webkit-scrollbar{display:none}.header__bottom__events .actions__left:-webkit-scrollbar-thumb{background:#fff}.logo{line-height:1rem}.header{position:relative;z-index:41;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.header .input:focus,.header input[type=password]:focus,.header input[type=text]:focus{border:1px solid #00791d}.header a:not(.button):not(.login__action):not(.active){text-decoration:none;color:#222}.header a:not(.button):not(.login__action):not(.active):hover{text-decoration:underline;color:#222}.header__items{display:none;-ms-flex-wrap:wrap;flex-wrap:wrap}@media only screen and (min-width:1050px){.header__items{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.header__items nav{position:relative;background:0 0;padding:0;left:0;top:0;line-height:inherit;display:block;-webkit-box-shadow:none;box-shadow:none;max-width:100%;max-height:80px}}.header__items>div{width:100%;margin-bottom:32px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-flow:column nowrap;flex-flow:column nowrap}@media only screen and (min-width:552px){.header__items>div:not(:nth-last-child(-n+2)){margin-bottom:32px}}@media only screen and (min-width:552px) and (max-width:1050px){.header__items>div{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;-ms-flex-preferred-size:calc(99.7% * 1/2 - (32px - 32px * 1/2));flex-basis:calc(99.7% * 1/2 - (32px - 32px * 1/2));max-width:calc(99.7% * 1/2 - (32px - 32px * 1/2));width:calc(99.7% * 1/2 - (32px - 32px * 1/2))}.header__items>div:nth-child(1n){margin-right:32px;margin-left:0}.header__items>div:last-child{margin-right:0}.header__items>div:nth-child(2n){margin-right:0;margin-left:auto}}@media only screen and (min-width:800px) and (max-width:1050px){.header__items>div{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;-ms-flex-preferred-size:calc(99.7% * 1/4 - (32px - 32px * 1/4));flex-basis:calc(99.7% * 1/4 - (32px - 32px * 1/4));max-width:calc(99.7% * 1/4 - (32px - 32px * 1/4));width:calc(99.7% * 1/4 - (32px - 32px * 1/4))}.header__items>div:nth-child(1n){margin-right:32px;margin-left:0}.header__items>div:last-child{margin-right:0}.header__items>div:nth-child(4n){margin-right:0;margin-left:auto}}@media only screen and (min-width:1050px){.header__items>div{margin-bottom:0!important;margin-right:0!important;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}}.header__items .language__switcher{display:none}.header__items .language__switcher .li-nav.active>a,.header__items .language__switcher>li.active>a{color:#fff!important}.header__items .language__switcher .li-nav.active>a:hover,.header__items .language__switcher>li.active>a:hover{color:#fff!important;background:#0e5ef1}.header__items .language__switcher .li-nav:hover>a,.header__items .language__switcher>li:hover>a{color:#fff}.header+main{display:block;min-height:210px;-webkit-transition:margin .15s ease;transition:margin .15s ease;margin-top:0!important}.header--hide .header+main{margin-top:50px}.header--hide .header__toggle{opacity:0;top:20px;visibility:hidden}.header--hide .header__logo{max-height:0}.header--hide .header__middle,.header--hide .header__top{max-height:0;overflow:hidden;padding-top:0;padding-bottom:0;border-color:transparent}.header--hide .header__bottom .vue-portal-target{top:3px;right:0;bottom:auto;left:auto;position:absolute}.header__middle,.header__top{-webkit-transition:all .15s ease;transition:all .15s ease}.header__middle{border-bottom:1px solid rgba(0,0,0,.1);z-index:33}.header__middle .vue-portal-target{width:100%}@media only screen and (min-width:1050px){.header__middle .vue-portal-target{display:none}}@media only screen and (min-width:1050px){.header__middle{line-height:5.75rem;text-align:left;padding:0;z-index:30}.header__middle .widget__heading{display:none}}.header__top>.actions__left{display:none}@media only screen and (min-width:1050px){.header__top>.actions__left{display:-webkit-box;display:-ms-flexbox;display:flex}}.header__top>.actions__right{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;margin-right:0;margin-top:0;margin-bottom:0;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.header__top>.actions__right .dropdown__holder{width:calc(100vw - 16px);max-height:80vh}@media only screen and (min-width:600px){.header__top>.actions__right .dropdown__holder{width:auto}}.header__top>.actions__right>*{margin:0}.header__top>.actions__right .search{display:none}@media only screen and (min-width:1050px){.header__top>.actions__right>*{display:-webkit-box;display:-ms-flexbox;display:flex;white-space:nowrap}.header__top>.actions__right .search{display:block}}.header__top .user__login{display:block}.header__top .user__login>.button,.header__top .user__login>button{border-top-right-radius:0;border-bottom-right-radius:0}@media only screen and (min-width:1050px){.header__top{position:relative;right:auto;width:100%}}.header__logo{max-width:165px;position:absolute;top:8px;overflow:hidden;-webkit-transition:all .1s ease;transition:all .1s ease;z-index:32;line-height:2.25rem;height:36px;width:100px;margin-left:50px;-ms-flex-preferred-size:190px;flex-basis:190px}@media only screen and (min-width:800px){.header__logo{top:4px}}@media only screen and (min-width:1050px){.header__logo{position:relative;top:0;overflow:visible;margin-right:20px;margin-left:0;line-height:3.125rem;height:50px}.header__logo>*{width:165px}}@media only screen and (min-width:1280px){.header__logo{margin-right:30px}}.header__desc,.header__more>button{text-transform:capitalize;color:#666;letter-spacing:0;font-size:0;font-weight:400;line-height:1.5rem;vertical-align:top;font-smoothing:antialiased;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI Variable","Segoe UI",system-ui,ui-sans-serif,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";-webkit-transition:font-size .15s ease-in-out;transition:font-size .15s ease-in-out}@media only screen and (min-width:1050px){.header__desc,.header__more>button{font-size:.6875rem}}.header__desc{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;position:relative;width:auto}.header__topics{white-space:nowrap;float:right;position:relative}.header__topics *{display:inline-block;vertical-align:top}.header__topics a{font-size:.8125rem}@media only screen and (min-width:1050px){.header__topics{float:none}}.header__more{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;vertical-align:top}.header__more:before{left:-12px}.header__more:after,.header__more:before{content:'';width:1px;height:12px;position:absolute;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);background:rgba(0,0,0,.1)}.header__more:after{right:-12px}.header__more:hover{cursor:pointer;color:rgba(0,0,0,.75)}.header__user{display:inline-block;vertical-align:top;white-space:nowrap;margin-left:8px}@media only screen and (min-width:1050px){.header__user{margin-left:0}}.header__user>div{display:inline-block;vertical-align:top}.header__user-nav a:not(.button){text-transform:uppercase;font-size:.75rem;font-weight:600}.header__user-nav a:not(.button):not(.active){opacity:.5}.header__user-nav a:not(.button):not(.active):hover{opacity:.75}.header__user-nav a:not(.button):hover{text-decoration:none}.header__user-nav a:not(.button).active{color:#222;cursor:default;text-decoration:none}.header__user-nav a:not(.button):before{margin-right:0}.header__user-nav a:not(.button):not(:last-child){margin-right:16px}@media only screen and (min-width:1050px){.header__user-nav a:not(.button):not(:last-child){margin-right:32px}}@media only screen and (min-width:1050px){.header__user-nav+.header__topics{margin-left:56px}}.header__search{display:none;vertical-align:top;margin-right:0}@media only screen and (min-width:1050px){.header__search{display:inline-block}}.header__search,.header__user{line-height:inherit}.header__nav{border-bottom:1px solid rgba(0,0,0,.1)}@media only screen and (min-width:800px){.header__nav{border-bottom:0}}.header__nav .button{margin-left:0}.header__nav .button__more{margin-right:20px}.header__nav .li-nav,.header__nav>li{-webkit-transition:all .15s ease;transition:all .15s ease}@media only screen and (min-width:1050px){.header__nav .li-nav,.header__nav>li{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;vertical-align:middle;position:static;border:none;min-height:65px}.header__nav .li-nav:hover.has--subnav .nav .li-nav,.header__nav .li-nav:hover.has--subnav .nav>li,.header__nav>li:hover.has--subnav .nav .li-nav,.header__nav>li:hover.has--subnav .nav>li{white-space:normal}.header__nav .li-nav:hover.has--subnav .nav__subnav,.header__nav>li:hover.has--subnav .nav__subnav{opacity:1;top:100%;visibility:visible;-webkit-transition-delay:.25s;transition-delay:.25s}.header__nav .li-nav:hover.has--subnav .nav__category,.header__nav>li:hover.has--subnav .nav__category{width:100%}.header__nav .li-nav:hover.has--subnav .nav__category:after,.header__nav .li-nav:hover.has--subnav .nav__category:before,.header__nav>li:hover.has--subnav .nav__category:after,.header__nav>li:hover.has--subnav .nav__category:before{-webkit-transition-delay:.25s;transition-delay:.25s;opacity:1}}@media only screen and (min-width:1080px){.header__nav .li-nav:not(:last-child),.header__nav>li:not(:last-child){margin-right:23px;margin-left:23px}}@media only screen and (min-width:1280px){.header__nav .li-nav:not(:last-child),.header__nav>li:not(:last-child){margin-right:23px;margin-left:23px}}@media only screen and (min-width:1338px){.header__nav .li-nav:not(:last-child),.header__nav>li:not(:last-child){margin-right:23px;margin-left:23px}}.header__nav .li-nav>a,.header__nav>li>a{font-size:.875rem;line-height:1.5rem;padding:12px 0;color:#000;display:inline-block;max-width:100%;position:relative;z-index:61;white-space:normal}@media only screen and (min-width:1050px){.header__nav .li-nav>a,.header__nav>li>a{padding:8px 0 0;font-weight:700}}.header__nav .li-nav>a:after,.header__nav .li-nav>a:before,.header__nav>li>a:after,.header__nav>li>a:before{content:'';position:absolute;bottom:-1px;left:50%;width:0;height:0;opacity:0;-webkit-transform:translateX(-50%);transform:translateX(-50%);border-style:solid;border-width:0 5px 5px 5px;-webkit-transition:opacity .15s ease-in-out;transition:opacity .15s ease-in-out;border-color:transparent transparent #fff transparent}.header__nav .li-nav>a:before,.header__nav>li>a:before{left:50%;bottom:0;border-width:0 6px 6px 6px;border-color:transparent transparent #f5f7f8 transparent}@media only screen and (min-width:1050px){.header__nav .li-nav>a,.header__nav>li>a{font-size:1rem}}@media only screen and (min-width:1800px){.header__nav .li-nav>a,.header__nav>li>a{font-size:1.125rem}}.header--open{overflow:hidden}@media only screen and (min-width:600px){.header--open{overflow:visible}}.header--open .content-items{max-height:215px;margin:12px 0 24px}.header--open .search{margin-top:16px;display:block}.header--open .header__toggle:before{z-index:10}.header--open .header__toggle>span:nth-child(1){top:50%;-webkit-transform:rotate(45deg);transform:rotate(45deg)}.header--open .header__toggle>span:nth-child(2){opacity:0}.header--open .header__toggle>span:nth-child(3){top:50%;-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}.header--open .header__items,.header--open .header__items .language__switcher{display:-webkit-box;display:-ms-flexbox;display:flex}.header--open .header__top{z-index:100;position:absolute;left:0;right:8px;background:#fff}@media only screen and (min-width:800px){.header--open .header__top{right:20px}}.header--open .header__top .search{display:none}.header--open .header__logo{z-index:101}.header--open .header__middle{padding-top:60px}.header--open .header__bottom{display:none}.header--open .header__container{max-height:90vh;overflow-x:hidden;overflow-y:auto}@media only screen and (min-width:1050px){.header--open .header__container{overflow:visible}}.header .subnav{position:absolute;-webkit-box-shadow:0 5px 25px 1px rgba(0,0,0,.15);box-shadow:0 5px 25px 1px rgba(0,0,0,.15);background:#fff;visibility:hidden;line-height:1.75rem;max-width:100%;width:100%;left:0;opacity:0;overflow:hidden;border:1px solid #f5f7f8;border-radius:2px;-webkit-transition:all .15s ease-in-out;transition:all .15s ease-in-out;top:105%;z-index:60;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}.header .subnav .subnav__categories{-webkit-box-flex:0;-ms-flex:0 1 280px;flex:0 1 280px;padding:24px 0;background:#f5f7f8;margin-right:0!important}.header .subnav .subnav__categories>li{display:block;font-size:.9375rem;padding:2px 48px 2px 24px}.header .subnav .subnav__categories>li a{display:block;font-weight:700}.header .subnav .subnav__categories>li:hover{background:#e1e1e1}.header .subnav .subnav__heading{margin-bottom:20px}.header .subnav .subnav__content{position:relative;-ms-flex-item-align:start;align-self:flex-start;padding:24px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap}@media only screen and (min-width:1050px){.header .subnav .subnav__content{padding-left:32px;padding-right:32px;margin:0 auto;-webkit-box-flex:1;-ms-flex:1 1 600px;flex:1 1 600px}}.header .subnav .subnav__content .heading__container{-ms-flex-preferred-size:100%;flex-basis:100%}.header .subnav .subnav__content:before{content:'';position:absolute;left:0;top:0;bottom:-100%;width:1px;background:rgba(0,0,0,.1)}.languagesEdition .active{font-weight:700}.header__more.dropdown:after{content:'';display:inline-block;vertical-align:middle;-ms-flex-item-align:center;-ms-grid-row-align:center;align-self:center;background-repeat:no-repeat;background-position:center;margin-bottom:2px;width:7px;height:7px;-webkit-transition:-webkit-transform .15s ease;transition:-webkit-transform .15s ease;transition:transform .15s ease;transition:transform .15s ease,-webkit-transform .15s ease;background-color:#fff!important;background-size:contain}.header__more.dropdown button{color:#000!important;margin-right:-20px;padding-right:20px;z-index:1000}.header__more.dropdown .dropdown__holder{width:165px}.header__more.dropdown .dropdown__content{padding:13px;padding-top:5px;padding-bottom:5px}.header__more.dropdown .languagesEdition li{border-bottom:1px solid #e6e6e6}.header__more.dropdown .languagesEdition li:last-child{border:0}.logo__data{display:none;color:#666;font-size:.6875rem}@media only screen and (min-width:1050px){.logo__data{display:block;line-height:.8125rem}}.container{padding-left:12px;padding-right:12px;margin:0 auto;min-width:320px;-webkit-transition:padding .15s ease-in-out;transition:padding .15s ease-in-out}@media only screen and (min-width:600px){.container{padding-left:16px;padding-right:16px}}@media only screen and (min-width:800px){.container{padding-left:20px;padding-right:20px}}@media only screen and (min-width:1250px){.container{padding-left:60px;padding-right:60px}}@media only screen and (min-width:1400px){.container{padding-left:20px;padding-right:20px}}.container.white{background:#fff}.container__inner{max-width:1290px;margin:0 auto;-webkit-transition:max-width .15s ease-out;transition:max-width .15s ease-out}.search{display:block;position:relative;z-index:33;width:100%;max-width:100%;margin:0}.search:before{position:absolute;top:50%;right:24px;-webkit-transform:translateY(-50%);transform:translateY(-50%);margin-right:0;z-index:34}.search__bar{display:block;border-radius:2px;position:relative;z-index:33}.search__bar #search{margin-bottom:0;max-width:100%;background:#fff}.search__go{top:50%;right:0;bottom:0;left:auto;position:absolute;-webkit-transform:translateY(-50%);transform:translateY(-50%);z-index:32;-webkit-appearance:none;-moz-appearance:none;appearance:none;width:36px;height:36px;line-height:2.25rem;-webkit-box-shadow:none;box-shadow:none;display:block;background:0 0;border:0;font-size:0}@media only screen and (min-width:600px){.search__go{z-index:35}}.header #search,.search__go:hover{cursor:pointer}.header #search{height:36px;position:relative;max-width:100%;background-color:#f5f7f8!important}@media only screen and (min-width:600px){.header #search{font-size:.8125rem;min-width:165px;max-width:100%;opacity:1}}.header #search:hover{cursor:auto}@media only screen and (min-width:1050px){.header #search{margin-left:auto;border-top-right-radius:0;border-bottom-right-radius:0;border-right:0}.header #search:focus{min-width:215px}}.header #search:focus{cursor:auto}.header #search .field__desc{display:none}.header #searchForm{width:100%;margin-top:8px}.header #searchForm:before{right:8px}@media only screen and (min-width:600px){.header #searchForm{margin-top:16px}}@media only screen and (min-width:1050px){.header #searchForm{margin-top:0}}</style>
<script>(function(a,s,y,n,c,h,i,d,e){s.className+=' '+y;h.start=1*new Date;
h.end=i=function(){s.className=s.className.replace(RegExp(' ?'+y),'')};
(a[n]=a[n]||[]).hide=h;setTimeout(function(){i();h.end=null},c);h.timeout=c;
})(window,document.documentElement,'async-hide','dataLayer',4000,
{'GTM-W9GJ5DL':true});</script>
<script type="text/javascript">
var loggedIn = false;
if (loggedIn) {
var userCountryId = '';
}
</script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
//CookieControl tool recomendation
// Call the default command before gtag.js or Tag Manager runs to
// adjust how the tags operate when they run. Modify the defaults
// per your business requirements and prior consent granted/denied, e.g.:
gtag('consent', 'default', {
'ad_storage': 'denied',
'ad_user_data': 'denied',
'ad_personalization': 'denied',
'analytics_storage': 'denied',
wait_for_update: 500
});
gtag('set', 'ads_data_redaction', true);
gtag('set', 'url_passthrough', true);
if((typeof loggedIn != "undefined") && loggedIn){
window.dataLayer.push({'logged_in': 'true'});
} else {
window.dataLayer.push({'logged_in': 'false'});
}
window.dataLayer.push({'show_queryz': ''});
gtag('config', 'G-VMVPD4D2JY');
</script>
<!-- Google Tag Manager -->
<script>
var gtmProfile="GTM-W9GJ5DL";
(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
})(window,document,'script','dataLayer', gtmProfile);</script>
<!-- End Google Tag Manager -->
<title>How Did It Make Sense at the Time? Understanding Incidents as They Occurred, Not as They are Remembered - InfoQ</title>
<link rel="canonical" href="https://www.infoq.com/presentations/incidents-investigation/"/>
<link rel="alternate" href="https://www.infoq.com/presentations/incidents-investigation/" hreflang="en"/>
<link rel="alternate" href="https://www.infoq.com/presentations/incidents-investigation/" hreflang="x-default" />
<meta http-equiv="pragma" content="no-cache" />
<meta http-equiv="cache-control" content="private,no-cache,no-store,must-revalidate" />
<meta http-equiv="expires" content="0" />
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<meta name="copyright" content="&copy; 2006 C4Media" />
<meta name="google-site-verification" content="0qInQx_1WYOeIIbxnh7DnXlw1XOxNgAYakO2k4GhNnY" />
<meta name="msapplication-TileColor" content="#ffffff"/>
<meta name="msapplication-TileImage" content="/styles/static/images/logo/logo.jpg"/>
<meta property="wb:webmaster" content="3eac1729a8bbe046" />
<meta content="width=device-width,initial-scale=1" name="viewport">
<meta http-equiv="X-UA-Compatible" content="IE=10, IE=edge">
<link rel="stylesheet" type="text/css" media="screen" href="https://cdn.infoq.com/statics_s1_20260910111632/styles/style.css"/>
<link rel="stylesheet" type="text/css" media="print" href="https://cdn.infoq.com/statics_s1_20260910111632/styles/print.css"/>
<link rel="preload" type="text/css" href="https://cdn.infoq.com/statics_s1_20260910111632/styles/style_en.css" as="style" onload="this.onload=null;this.rel='stylesheet'">
<link rel="preload" href="https://cdn.infoq.com/statics_s1_20260910111632/styles/icons.css" as="style" onload="this.onload=null;this.rel='stylesheet'">
<link rel="preload" type="text/css" media="screen" href="https://cdn.infoq.com/statics_s1_20260910111632/styles/style_extra.css" as="style" onload="this.onload=null;this.rel='stylesheet'">
<noscript>
<link rel="stylesheet" type="text/css" href="https://cdn.infoq.com/statics_s1_20260910111632/styles/style_en.css"/>
<link rel="stylesheet" href="https://cdn.infoq.com/statics_s1_20260910111632/styles/icons.css">
<link rel="stylesheet" type="text/css" media="screen" href="https://cdn.infoq.com/statics_s1_20260910111632/styles/style_extra.css"/>
</noscript>
<link rel="stylesheet" type="text/css" href="https://cdn.infoq.com/statics_s1_20260910111632/styles/fonts/font.css"/>
<link rel="shortcut icon" href="https://cdn.infoq.com/statics_s1_20260910111632/favicon.ico" type="image/x-icon" />
<link rel="apple-touch-icon" href="https://cdn.infoq.com/statics_s1_20260910111632/apple-touch-icon.png"/>
<script type="text/javascript">
var device='desktop';
var InfoQConstants = {};
InfoQConstants.language = 'en';
InfoQConstants.countryCode = '';
InfoQConstants.scp = 'eyJTdGF0ZW1lbnQiOiBbeyJSZXNvdXJjZSI6IioiLCJDb25kaXRpb24iOnsiRGF0ZUxlc3NUaGFuIjp7IkFXUzpFcG9jaFRpbWUiOjE3ODkxOTk2MDd9LCJJcEFkZHJlc3MiOnsiQVdTOlNvdXJjZUlwIjoiMC4wLjAuMC8wIn19fV19';
InfoQConstants.scs = 'FFG5OxGiNZo9CFzb19cglJDE7LS3uH76CLK8TmXVEBkGtdaMjl9Y533qLUILka1GLY0vs6MI2n6YsW7S7mmKJsN~Cx9-ELHgvS0myAwCoinF~yn7t~O8NgEKnYY9hXDMClPa0TlqGYCrJ9P8GJBGsnHBPe8m1w8Z3w4WkwL6vfc_';
InfoQConstants.sck = 'APKAIMZVI7QH4C5YKH6Q';
InfoQConstants.scd = '.infoq.com';
InfoQConstants.sct = '7200';
InfoQConstants.pageUrl = (typeof window.location != 'undefined' && window.location && typeof window.location.href != 'undefined' && window.location.href) ? window.location.href : "URL_UNAVAILABLE";
InfoQConstants.cet='cNsezpOXXVkTs2xp';
InfoQConstants.userDetectedCountryCode = 'US';
InfoQConstants.bpadb = '3PoHelVdDuUlnG1iFrPq';
</script>
<script type="text/javascript" src="https://cdn.infoq.com/statics_s1_20260910111632/scripts/combinedJs.min.js"></script>
<script type="text/javascript">
var JSi18n = JSi18n || {}; // define only if not already defined
JSi18n.error='Error';
JSi18n.login_unverifiedAccount='Unverified account';
JSi18n.contentSummary_showPresentations_1='';
JSi18n.contentSummary_showPresentations_2='';
JSi18n.contentSummary_showPresentations_3='';
JSi18n.contentSummary_showInterviews_1='';
JSi18n.contentSummary_showInterviews_2='';
JSi18n.contentSummary_showInterviews_3='';
JSi18n.contentSummary_showMinibooks_1='';
JSi18n.contentSummary_showMinibooks_2='';
JSi18n.login_sendingRequest='Sending request ...';
JSi18n.bookmark_saved='<q>&nbsp;&nbsp;&nbsp;Saved&nbsp;&nbsp;&nbsp;&nbsp;</q>';
JSi18n.bookmark_error='<q style=color:black;>&nbsp;&nbsp;&nbsp;Error&nbsp;&nbsp;&nbsp;&nbsp;</q>';
JSi18n.categoryManagement_showpopup_viewAllLink_viewAllPrefix='View All';
JSi18n.categoryManagement_showpopup_viewAllLink_viewAllSuffix='';
JSi18n.categoryManagement_showpopup_includeExcludeLink_Exclude='Exclude';
JSi18n.categoryManagement_showpopup_includeExcludeLink_Include='Include';
JSi18n.login_invalid_email='Please specify a valid email';
JSi18n.login_email_not_found = 'No user found with that email';
JSi18n.content_datetime_format='MMM dd, yyyy';
// used by frontend
JSi18n.FE = {
labels: {
follow: "Follow",
followTopic: "Follow Topic",
unfollow: "Unfollow",
unfollowTopic: "Unfollow Topic",
following: "Following",
followers: "Followers",
like: "Like",
liked: "Liked",
authors: "Peers",
users : "Users",
topics: "Topics",
hide: "Hide Item",
hidden: "%s was hidden on your profile page.",
undo: "Undo",
showLess: "Show less",
showMore: "Show more",
moreAuthors: "And %s more",
bookmarked: "Content Bookmarked",
unbookmarked: "Content Unbookmarked",
characterLimit: "Characters Remaining"
}
}
var usersInPage = JSON.parse('[{\"id\":\"62671158\",\"ref\":\"author-Monica-Beckwith\",\"url\":\"\/profile\/Monica-Beckwith\",\"followedByCurrentUser\":false,\"minibio\":\"\",\"name\":\"Monica Beckwith\",\"bio\":\"\",\"followers\":1833,\"imgSrc\":\"https:\/\/cdn.infoq.com\/statics_s1_20260910111632\/images\/profiles\/QhDv7pXEUK1sdLsYArFmnLxecH4rYhAc.jpg\"},{\"id\":\"45723890\",\"ref\":\"author-Rags-Srinivas\",\"url\":\"\/profile\/Rags-Srinivas\",\"followedByCurrentUser\":false,\"minibio\":\"\",\"name\":\"Rags Srinivas\",\"bio\":\"\",\"followers\":356,\"imgSrc\":\"https:\/\/cdn.infoq.com\/statics_s1_20260910111632\/images\/profiles\/t4nyfgw1THkp4wMZ9EZ59RGJx8Hf9Rk8.jpg\"},{\"id\":\"87551248\",\"ref\":\"author-Steef~Jan-Wiggers\",\"url\":\"\/profile\/Steef~Jan-Wiggers\",\"followedByCurrentUser\":false,\"minibio\":\"Cloud Queue Lead Editor | Domain Architect | Cloud Expert\",\"name\":\"Steef-Jan Wiggers\",\"bio\":\"\",\"followers\":895,\"imgSrc\":\"https:\/\/cdn.infoq.com\/statics_s1_20260910111632\/images\/profiles\/BhZx03k3Hj0pZVXmTzGqItwZxtJ06oIb.jpg\"},{\"id\":\"80977916\",\"ref\":\"author-Thomas-Betts\",\"url\":\"\/profile\/Thomas-Betts\",\"followedByCurrentUser\":false,\"minibio\":\"Senior Laureate Application Architect at Blackbaud\",\"name\":\"Thomas Betts\",\"bio\":\"\",\"followers\":1171,\"imgSrc\":\"https:\/\/cdn.infoq.com\/statics_s1_20260910111632\/images\/profiles\/pSqI6HrU3k9rmmVjwS34OHG0bOMYiE6a.jpg\"},{\"id\":\"72028228\",\"ref\":\"author-Sergio-De-Simone\",\"url\":\"\/profile\/Sergio-De-Simone\",\"followedByCurrentUser\":false,\"minibio\":\"\",\"name\":\"Sergio De Simone\",\"bio\":\"\",\"followers\":777,\"imgSrc\":\"https:\/\/cdn.infoq.com\/statics_s1_20260910111632\/images\/profiles\/NovciOoQOAYWqYqRQBFo97SuMm0xbUiC.jpg\"},{\"id\":\"126467140\",\"ref\":\"author-Renato-Losio\",\"url\":\"\/profile\/Renato-Losio\",\"followedByCurrentUser\":false,\"minibio\":\"Cloud Expert | AWS Data Hero \",\"name\":\"Renato Losio\",\"bio\":\"\",\"followers\":913,\"imgSrc\":\"https:\/\/cdn.infoq.com\/statics_s1_20260910111632\/images\/profiles\/ptroF8HdI2vWXm0NDaKeS0JdiPxMOAra.jpg\"},{\"id\":\"126464202\",\"ref\":\"author-Johan-Janssen\",\"url\":\"\/profile\/Johan-Janssen\",\"followedByCurrentUser\":false,\"minibio\":\"Architect at ASML\",\"name\":\"Johan Janssen\",\"bio\":\"\",\"followers\":536,\"imgSrc\":\"https:\/\/cdn.infoq.com\/statics_s1_20260910111632\/images\/profiles\/Fb4eZ0mtvMf6MhsmBIhsUVueV4xAs2FD.jpg\"},{\"id\":\"39485652\",\"ref\":\"author-Daniel-Bryant\",\"url\":\"\/profile\/Daniel-Bryant\",\"followedByCurrentUser\":false,\"minibio\":\"InfoQ News Manager | Building Platforms at Syntasso\",\"name\":\"Daniel Bryant\",\"bio\":\"\",\"followers\":2751,\"imgSrc\":\"https:\/\/cdn.infoq.com\/statics_s1_20260910111632\/images\/profiles\/tSe5dczMaSGtRUm18VkTR2tcF4W3SogA.jpg\"},{\"id\":\"63268344\",\"ref\":\"author-Chris-Swan\",\"url\":\"\/profile\/Chris-Swan\",\"followedByCurrentUser\":false,\"minibio\":\"Engineer, Atsign\",\"name\":\"Chris Swan\",\"bio\":\"\",\"followers\":1873,\"imgSrc\":\"https:\/\/cdn.infoq.com\/statics_s1_20260910111632\/images\/profiles\/8PE76nOujWAoCM8yqLn9Hfv2HqW3VlIP.jpg\"},{\"id\":\"4927376\",\"ref\":\"author-Karsten-Silz\",\"url\":\"\/profile\/Karsten-Silz\",\"followedByCurrentUser\":false,\"minibio\":\"Full-Stack Java Developer\",\"name\":\"Karsten Silz\",\"bio\":\"\",\"followers\":399,\"imgSrc\":\"https:\/\/cdn.infoq.com\/statics_s1_20260910111632\/images\/profiles\/p6zmOdOcqXiRj09iiZNeDZap7f0IglQW.jpg\"},{\"id\":\"343314\",\"ref\":\"author-Jonathan-Allen\",\"url\":\"\/profile\/Jonathan-Allen\",\"followedByCurrentUser\":false,\"minibio\":\"Software Architect\",\"name\":\"Jonathan Allen\",\"bio\":\"\",\"followers\":1833,\"imgSrc\":\"https:\/\/cdn.infoq.com\/statics_s1_20260910111632\/images\/profiles\/Wk_C09_mzwK23YkTkKMXResJv3LKUN5D.jpg\"},{\"id\":\"114725059\",\"ref\":\"author-Holly-Cummins\",\"url\":\"\/profile\/Holly-Cummins\",\"followedByCurrentUser\":false,\"minibio\":\"Senior Technical Staff Member, IBM\",\"name\":\"Holly Cummins\",\"bio\":\"\",\"followers\":615,\"imgSrc\":\"https:\/\/cdn.infoq.com\/statics_s1_20260910111632\/images\/profiles\/cRsuGlFgKyGmGfEHvafpMO63CxbrEm22.jpg\"},{\"id\":\"126638430\",\"ref\":\"author-Jacob-Scott\",\"url\":\"\/profile\/Jacob-Scott\",\"followedByCurrentUser\":false,\"minibio\":\"\",\"name\":\"Jacob Scott\",\"bio\":\"\",\"followers\":0,\"imgSrc\":\"\"}]');
var topicsInPage = JSON.parse('[{\"name\":\"Architecture & Design\",\"id\":\"6816\",\"url\":\"\/architecture-design\",\"followers\":10383,\"followedByCurrentUser\":false},{\"name\":\"Culture & Methods\",\"id\":\"6817\",\"url\":\"\/culture-methods\",\"followers\":3994,\"followedByCurrentUser\":false},{\"name\":\".NET Core\",\"id\":\"15683\",\"url\":\"\/Net-Core\",\"followers\":8030,\"followedByCurrentUser\":false},{\"name\":\"Incident Response\",\"id\":\"16293\",\"url\":\"\/incident-reponse\",\"followers\":11,\"followedByCurrentUser\":false},{\"name\":\"Failure\",\"id\":\"4454\",\"url\":\"\/Failure\",\"followers\":8,\"followedByCurrentUser\":false},{\"name\":\"Machine Learning\",\"id\":\"5449\",\"url\":\"\/MachineLearning\",\"followers\":14751,\"followedByCurrentUser\":false},{\"name\":\"Microservices\",\"id\":\"15274\",\"url\":\"\/microservices\",\"followers\":22348,\"followedByCurrentUser\":false},{\"name\":\"AI, ML & Data Engineering\",\"id\":\"16690\",\"url\":\"\/ai-ml-data-eng\",\"followers\":6077,\"followedByCurrentUser\":false},{\"name\":\"QCon Plus November 2022\",\"id\":\"18387\",\"url\":\"\/qcon-plus-november-2022\",\"followers\":3,\"followedByCurrentUser\":false},{\"name\":\"QCon Software Development Conference\",\"id\":\"597\",\"url\":\"\/qcon\",\"followers\":261,\"followedByCurrentUser\":false},{\"name\":\"QCon Plus\",\"id\":\"18198\",\"url\":\"\/qcon-plus\",\"followers\":11,\"followedByCurrentUser\":false},{\"name\":\"Java9\",\"id\":\"7097\",\"url\":\"\/Java9\",\"followers\":5540,\"followedByCurrentUser\":false},{\"name\":\"DevOps\",\"id\":\"6043\",\"url\":\"\/Devops\",\"followers\":5131,\"followedByCurrentUser\":false},{\"name\":\"Reactive Programming\",\"id\":\"15453\",\"url\":\"\/reactive-programming\",\"followers\":12430,\"followedByCurrentUser\":false},{\"name\":\"Development\",\"id\":\"6815\",\"url\":\"\/development\",\"followers\":4154,\"followedByCurrentUser\":false}]');
var userContentLikesInPage = [];
var userCommentsLikesInPage = [];
var currentUserId = 2;
</script>
<!-- Latest Version -->
<script src="https://cc.cdn.civiccomputing.com/9/cookieControl-9.x.min.js" type="text/javascript"></script>
<script>
const config = {
apiKey: '8910ea974a96ffb6f927952b4ae9b9b0cc3e5973',
product: 'PRO_MULTISITE',
// general settings
consentCookieExpiry: 90,
encodeCookie: true,
sameSiteCookie: true, // if false, cookie set as SameSite=None;secure;
sameSiteValue: ';secure', // either 'Strict', 'Lax', or 'None'
subDomains: true,
initialState: 'notify', // 'notify','top','box' require pro licence
notifyOnce: false,
setInnerHTML: true,
//layout settings
layout: 'slideout',
position: 'left',
theme: 'light',
acceptButton: true,
rejectButton: true,
closeOnGlobalChange: true,
closeStyle: 'icon',
toggleType: 'slider',
notifyDismissButton: true,
settingsStyle: 'link',
excludedCountries: ['US'],
/*accessibility: {
disableSiteScrolling: true,
},*/
statement: {
description: 'For more detailed information about the cookies we use, see our',
name: 'Cookie Policy',
url: 'https://www.infoq.com/cookie-policy',
updated: '01/01/2024',
},
// cookies starting from 'cookie_expire' are from live.infoq.com but since we use the same tool on the same domain we need to specify those too so
// that infoq.com cookieControl does not delete live.infoq.com cookies(also infoq.com cookies have been specified in live.infoq.com cookieControl configs)
necessaryCookies: ['RegUserCookie', 'UserCookie', 'IdpCookie', 'ConversionTrackingV2_','PSAdialog','*P13NWN*','topbarSurvey','__bkm','JSESSIONID','mp_','_mixpanel','CloudFront-Key-Pair-Id','CloudFront-Policy','CloudFront-Signature','cookie_expire','discount_promo_closed','discount_promo_code','discount_promo_submitted','exit_survey_popup','referrer_popup','voting_popup_*','AWSALB','AWSALBCORS','aws-waf-token','iq_sub_preview'],
optionalCookies: [
{
name: 'analytics',
label: 'Analytics',
description: 'Analytical cookies help us to improve our website by collecting and reporting information on its usage.',
cookies: ['_ga', '_ga*', '_gid', '_gat', '__utma', '__utmt', '__utmb', '__utmc', '__utmz', '__utmv'],
onAccept: function(){
gtag('consent', 'update', {'analytics_storage': 'granted'});
},
onRevoke: function(){
gtag('consent', 'update', {'analytics_storage': 'denied'});
}
},
{
name: 'marketing',
label: 'Advertising',
description: 'We use advertising cookies to display advertisements to you for our products.',
onAccept: function(){
gtag('consent', 'update', {'ad_storage': 'granted', 'ad_personalization': 'granted', 'ad_user_data': 'granted'});
},
onRevoke: function(){
gtag('consent', 'update', {'ad_storage': 'denied', 'ad_personalization': 'denied', 'ad_user_data': 'denied'});
}
}
],
text : {
// main preference panels
title: '<h3>Our use of cookies</h3>',
intro: 'We use necessary cookies to make our site work. Functional cookies help enhance the performance and functionality of the site. '+
'We\'d also like to set analytics cookies to help us improve your experience by measuring how you use the site. '+
'These will be set only if you accept. ',
acceptSettings: 'I Accept',
rejectSettings: 'I Do Not Accept',
necessaryTitle : '<h3>Necessary Cookies</h3>',
necessaryDescription : 'Necessary cookies enable core functionality ' +
'such as page navigation and access to secure areas. '+
'The website cannot function properly without '+
'these cookies, and can only be disabled by changing '+
'your browser preferences.',
closeLabel: 'Close Cookie Control',
cornerButton: 'Set cookie preferences',
// main preference panel controls
on: 'On',
off : 'Off',
thirdPartyTitle : 'Some cookies require your attention',
thirdPartyDescription : 'Consent for the following cookies could not be '+
'automatically revoked. Please follow the link(s) '+
'below to opt out manually.',
// notification panels (only accessible for pro licences)
notifyTitle : 'Your choice regarding cookies on this site',
notifyDescription : 'We use cookies to optimise site functionality and '+
'give you the best possible experience.',
accept : 'I Accept',
reject: 'I Do Not Accept',
settings : 'Settings',
},
branding : {
removeAbout: true,
},
};
// do not load this for local envs only. for testing on local envs remove/modify this condition
if(InfoQConstants.pageUrl.indexOf('local')===-1){
CookieControl.load( config );
}
</script>
<script type="application/ld+json">
{
"@context": "http://schema.org",
"@type": "NewsArticle",
"mainEntityOfPage": {
"@type": "WebPage",
"@id": "https://www.infoq.com/presentations/incidents-investigation/"
},
"headline": "How Did It Make Sense at the Time? Understanding Incidents as They Occurred, Not as They are Remembered",
"image": ["https://res.infoq.com/presentations/incidents-investigation/en/mediumimage/JacobScott-medium-1694080759044.jpg"
],
"datePublished": "2023-09-14T16:49:00+0000",
"dateModified": "2023-09-14T16:49:00+0000",
"author": [
{
"@type": "Person",
"name": "Jacob Scott",
"url": "https://www.infoq.com/profile/Jacob-Scott/"
}
],
"publisher": {
"@type": "Organization",
"name": "InfoQ",
"logo": {
"@type": "ImageObject",
"url": "https://assets.infoq.com/resources/en/logo_scrubber_big_4_3.jpg"
}
},
"description": "Jacob Scott explores the basics of failure in complex systems, the theory and practice of how it made sense at the time, and actions to take.",
"video":
{
"@type": "VideoObject",
"name": "How Did It Make Sense at the Time? Understanding Incidents as They Occurred, Not as They are Remembered",
"description": "Jacob Scott explores the basics of failure in complex systems, the theory and practice of how it made sense at the time, and actions to take.",
"thumbnailUrl": [
"https://res.infoq.com/presentations/incidents-investigation/en/mediumimage/JacobScott-medium-1694080759044.jpg"
],
"uploadDate": "2023-09-14T16:49:00+0000",
"duration": "PT38M15S",
"contentUrl": "https://videog.infoq.com/presentations/22-nov-understandingincidents.mp4"
},
"isAccessibleForFree": "False",
"hasPart":
{
"@type": "WebPageElement",
"isAccessibleForFree": "False",
"cssSelector" : ".paywallPdf"
}
}
</script>
<meta name="ifq:pageType" content="PRESENTATION_PAGE"/>
<script type="text/javascript">
InfoQConstants.pageType = 'PRESENTATION_PAGE';
</script>
<meta property="og:type" content="website" />
<meta property="og:image" content="https://res.infoq.com/presentations/incidents-investigation/en/card_header_image/twitter_card+%2854%29-1694080759044.jpg"/>
<meta property="twitter:image" content="https://res.infoq.com/presentations/incidents-investigation/en/card_header_image/twitter_card+%2854%29-1694080759044.jpg"/>
<meta property="og:title" content="How Did It Make Sense at the Time? Understanding Incidents as They Occurred, Not as They are Remembered "/>
<meta property="og:description" content="Jacob Scott explores the basics of failure in complex systems, the theory and practice of how it made sense at the time, and actions to take." />
<meta property="og:site_name" content="InfoQ"/>
<meta property="og:url" content="https://www.infoq.com/presentations/incidents-investigation/"/>
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:title" content="How Did It Make Sense at the Time? Understanding Incidents as They Occurred, Not as They are Remembered "/>
<meta name="twitter:description" content="Jacob Scott explores the basics of failure in complex systems, the theory and practice of how it made sense at the time, and actions to take." />
<link rel="image_src" href="https://res.infoq.com/presentations/incidents-investigation/en/mediumimage/JacobScott-medium-1694080759044.jpg"/>
<meta name="keywords" content="incidents investigation,DevOps,QCon Plus November 2022,QCon Plus,QCon Software Development Conference,Incident Response,Failure,"/>
<meta name="description" content="Jacob Scott explores the basics of failure in complex systems, the theory and practice of how it made sense at the time, and actions to take."/>
<meta name="tprox" content="1694710140000" />
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/swfobject/2.1/swfobject.js"></script>
<script type="text/javascript">
var slides = new Array('https://imgopt.infoq.com/fit-in/1288x0/filters:quality(80)/presentations/incidents-investigation/en/slides/Jac-1694709697567.JPG'),
TIMES = new Array(0,2295),
EXPRESSINSTALL_SWF = 'https://cdn.infoq.com/statics_s1_20260910111632/scripts/video/flash/expressinstall.swf',
SVMPLAYER_SWF = 'https://cdn.infoq.com/statics_s1_20260910111632/scripts/video/flash/svmplayer.swf',
isWideScreen = true,
// i18n text for the to full view/minimize button
i18nFullScreen = 'Full',
i18nMinimize = 'Minimize',
demoTimings = '5,2294';
var playerSplash = 'https://cdn.infoq.com/statics_s1_20260910111632/styles/static/images/logo/logo_scrubber_16_9.jpg';
var vhf = 'cnRtcGU6Ly92aWRlb2YuaW5mb3EuY29tL2NmeC9zdC8=';
var jsclassref = 'cHJlc2VudGF0aW9ucy8yMi1ub3YtdW5kZXJzdGFuZGluZ2luY2lkZW50cy5tcDQ=';
</script>
<script type="text/javascript" src="https://cdn.infoq.com/statics_s1_20260910111632/scripts/video/player/PlayerPresentation_mobile.js"></script>
<script type="text/javascript">
$(document).ready(function() {
init();
});
</script>
<script type='text/javascript' src='https://cdn.infoq.com/statics_s1_20260910111632/scripts/video/videoPlayercombinedJsPresentation.js'></script>
<script type='text/javascript' src='https://cdn.infoq.com/statics_s1_20260910111632/scripts/video/PresentationUI.js'></script>
<script type='text/javascript' src='https://cdn.infoq.com/statics_s1_20260910111632/scripts/ui/jquery.tipsy.js'></script>
<link rel="stylesheet" href="https://cdn.infoq.com/statics_s1_20260910111632/styles/tipsy.css" type="text/css" />
<script type="text/javascript">
P.s = 'https://videoh.infoq.com/presentations/22-nov-understandingincidents.mp4';
</script>
<script type="text/javascript" src="https://cdn.infoq.com/statics_s1_20260910111632/scripts/relatedVcr.min.js"></script>
<script type="application/javascript">
var communityIds = "1893";
var topicIds = "6896,6724,593,4910,1259";
VCR.loadAllVcrs(communityIds, topicIds);
</script>
<script type="text/javascript" src='https://cdn.infoq.com/statics_s1_20260910111632/scripts/subscription.js'></script>
<script type="text/javascript" src="https://cdn.infoq.com/statics_s1_20260910111632/scripts/infoq.js"></script>
<script type="text/javascript">
document.addEventListener('DOMContentLoaded', function() {
if (!window || !window.infoq) return
infoq.init()
})
</script>
<script defer data-domain="infoq.com" src="https://plausible.io/js/script.file-downloads.hash.outbound-links.pageview-props.tagged-events.js"></script>
<script>window.plausible = window.plausible || function() { (window.plausible.q = window.plausible.q || []).push(arguments) }</script>
</head>
<body >
<!-- Google Tag Manager (noscript) -->
<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-W9GJ5DL"
height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<!-- End Google Tag Manager (noscript) -->
<div class="intbt">
<a href="/int/bt/" title="bt">BT</a>
</div>
<script type="text/javascript">
var allCountries = [{"id":3,"name":"Afghanistan"},{"id":244,"name":"Åland"},{"id":6,"name":"Albania"},{"id":61,"name":"Algeria"},{"id":13,"name":"American Samoa"},{"id":1,"name":"Andorra"},{"id":9,"name":"Angola"},{"id":5,"name":"Anguilla"},{"id":11,"name":"Antarctica"},{"id":4,"name":"Antigua and Barbuda"},{"id":12,"name":"Argentina"},{"id":7,"name":"Armenia"},{"id":16,"name":"Aruba"},{"id":15,"name":"Australia"},{"id":14,"name":"Austria"},{"id":17,"name":"Azerbaijan"},{"id":31,"name":"Bahamas"},{"id":24,"name":"Bahrain"},{"id":20,"name":"Bangladesh"},{"id":19,"name":"Barbados"},{"id":35,"name":"Belarus"},{"id":21,"name":"Belgium"},{"id":36,"name":"Belize"},{"id":26,"name":"Benin"},{"id":27,"name":"Bermuda"},{"id":32,"name":"Bhutan"},{"id":29,"name":"Bolivia"},{"id":254,"name":"Bonaire, Sint Eustatius, and Saba"},{"id":18,"name":"Bosnia and Herzegovina"},{"id":34,"name":"Botswana"},{"id":33,"name":"Bouvet Island"},{"id":30,"name":"Brazil"},{"id":104,"name":"British Indian Ocean Territory"},{"id":28,"name":"Brunei Darussalam"},{"id":23,"name":"Bulgaria"},{"id":22,"name":"Burkina Faso"},{"id":25,"name":"Burundi"},{"id":114,"name":"Cambodia"},{"id":46,"name":"Cameroon"},{"id":37,"name":"Canada"},{"id":52,"name":"Cape Verde"},{"id":121,"name":"Cayman Islands"},{"id":40,"name":"Central African Republic"},{"id":207,"name":"Chad"},{"id":45,"name":"Chile"},{"id":47,"name":"China"},{"id":53,"name":"Christmas Island"},{"id":38,"name":"Cocos (Keeling) Islands"},{"id":48,"name":"Colombia"},{"id":116,"name":"Comoros"},{"id":39,"name":"Congo (Democratic Republic)"},{"id":41,"name":"Congo (People\u0027s Republic)"},{"id":44,"name":"Cook Islands"},{"id":49,"name":"Costa Rica"},{"id":43,"name":"Cote D\u0027Ivoire"},{"id":97,"name":"Croatia"},{"id":51,"name":"Cuba"},{"id":253,"name":"Curaçao"},{"id":54,"name":"Cyprus"},{"id":55,"name":"Czech Republic"},{"id":58,"name":"Denmark"},{"id":57,"name":"Djibouti"},{"id":59,"name":"Dominica"},{"id":60,"name":"Dominican Republic"},{"id":213,"name":"East Timor"},{"id":62,"name":"Ecuador"},{"id":64,"name":"Egypt"},{"id":203,"name":"El Salvador"},{"id":87,"name":"Equatorial Guinea"},{"id":66,"name":"Eritrea"},{"id":63,"name":"Estonia"},{"id":68,"name":"Ethiopia"},{"id":72,"name":"Falkland Islands (Malvinas)"},{"id":74,"name":"Faroe Islands"},{"id":71,"name":"Fiji"},{"id":70,"name":"Finland"},{"id":75,"name":"France"},{"id":80,"name":"French Guiana"},{"id":170,"name":"French Polynesia"},{"id":208,"name":"French Southern Territories"},{"id":76,"name":"Gabon"},{"id":84,"name":"Gambia"},{"id":79,"name":"Georgia"},{"id":56,"name":"Germany"},{"id":81,"name":"Ghana"},{"id":82,"name":"Gibraltar"},{"id":88,"name":"Greece"},{"id":83,"name":"Greenland"},{"id":78,"name":"Grenada"},{"id":86,"name":"Guadeloupe"},{"id":91,"name":"Guam"},{"id":90,"name":"Guatemala"},{"id":249,"name":"Guernsey"},{"id":85,"name":"Guinea"},{"id":92,"name":"Guinea-Bissau"},{"id":93,"name":"Guyana"},{"id":98,"name":"Haiti"},{"id":95,"name":"Heard Island and McDonald Islands"},{"id":96,"name":"Honduras"},{"id":94,"name":"Hong Kong"},{"id":99,"name":"Hungary"},{"id":107,"name":"Iceland"},{"id":103,"name":"India"},{"id":100,"name":"Indonesia"},{"id":106,"name":"Iran"},{"id":105,"name":"Iraq"},{"id":101,"name":"Ireland"},{"id":245,"name":"Isle of Man"},{"id":102,"name":"Israel"},{"id":108,"name":"Italy"},{"id":109,"name":"Jamaica"},{"id":111,"name":"Japan"},{"id":250,"name":"Jersey"},{"id":110,"name":"Jordan"},{"id":122,"name":"Kazakhstan"},{"id":112,"name":"Kenya"},{"id":115,"name":"Kiribati"},{"id":243,"name":"Kosovo"},{"id":120,"name":"Kuwait"},{"id":113,"name":"Kyrgyzstan"},{"id":123,"name":"Laos"},{"id":132,"name":"Latvia"},{"id":124,"name":"Lebanon"},{"id":129,"name":"Lesotho"},{"id":128,"name":"Liberia"},{"id":133,"name":"Libya"},{"id":126,"name":"Liechtenstein"},{"id":130,"name":"Lithuania"},{"id":131,"name":"Luxembourg"},{"id":143,"name":"Macau"},{"id":139,"name":"Macedonia"},{"id":137,"name":"Madagascar"},{"id":151,"name":"Malawi"},{"id":153,"name":"Malaysia"},{"id":150,"name":"Maldives"},{"id":140,"name":"Mali"},{"id":148,"name":"Malta"},{"id":138,"name":"Marshall Islands"},{"id":145,"name":"Martinique"},{"id":146,"name":"Mauritania"},{"id":149,"name":"Mauritius"},{"id":238,"name":"Mayotte"},{"id":152,"name":"Mexico"},{"id":73,"name":"Micronesia"},{"id":136,"name":"Moldova"},{"id":135,"name":"Monaco"},{"id":142,"name":"Mongolia"},{"id":246,"name":"Montenegro"},{"id":147,"name":"Montserrat"},{"id":134,"name":"Morocco"},{"id":154,"name":"Mozambique"},{"id":141,"name":"Myanmar"},{"id":155,"name":"Namibia"},{"id":164,"name":"Nauru"},{"id":163,"name":"Nepal"},{"id":161,"name":"Netherlands"},{"id":8,"name":"Netherlands Antilles"},{"id":156,"name":"New Caledonia"},{"id":166,"name":"New Zealand"},{"id":160,"name":"Nicaragua"},{"id":157,"name":"Niger"},{"id":159,"name":"Nigeria"},{"id":165,"name":"Niue"},{"id":158,"name":"Norfolk Island"},{"id":118,"name":"North Korea"},{"id":144,"name":"Northern Mariana Islands"},{"id":162,"name":"Norway"},{"id":167,"name":"Oman"},{"id":173,"name":"Pakistan"},{"id":180,"name":"Palau"},{"id":178,"name":"Palestinian Territory"},{"id":168,"name":"Panama"},{"id":171,"name":"Papua New Guinea"},{"id":181,"name":"Paraguay"},{"id":169,"name":"Peru"},{"id":172,"name":"Philippines"},{"id":176,"name":"Pitcairn"},{"id":174,"name":"Poland"},{"id":179,"name":"Portugal"},{"id":177,"name":"Puerto Rico"},{"id":182,"name":"Qatar"},{"id":183,"name":"Reunion"},{"id":184,"name":"Romania"},{"id":185,"name":"Russian Federation"},{"id":186,"name":"Rwanda"},{"id":193,"name":"Saint Helena"},{"id":117,"name":"Saint Kitts and Nevis"},{"id":125,"name":"Saint Lucia"},{"id":251,"name":"Saint Martin"},{"id":175,"name":"Saint Pierre and Miquelon"},{"id":229,"name":"Saint Vincent and the Grenadines"},{"id":247,"name":"Saint-Barthélemy"},{"id":236,"name":"Samoa"},{"id":198,"name":"San Marino"},{"id":202,"name":"Sao Tome and Principe"},{"id":187,"name":"Saudi Arabia"},{"id":199,"name":"Senegal"},{"id":248,"name":"Serbia"},{"id":189,"name":"Seychelles"},{"id":197,"name":"Sierra Leone"},{"id":192,"name":"Singapore"},{"id":252,"name":"Sint Maarten"},{"id":196,"name":"Slovakia"},{"id":194,"name":"Slovenia"},{"id":188,"name":"Solomon Islands"},{"id":200,"name":"Somalia"},{"id":239,"name":"South Africa"},{"id":89,"name":"South Georgia and the South Sandwich Islands"},{"id":119,"name":"South Korea"},{"id":255,"name":"South Sudan"},{"id":67,"name":"Spain"},{"id":127,"name":"Sri Lanka"},{"id":190,"name":"Sudan"},{"id":201,"name":"Suriname"},{"id":195,"name":"Svalbard and Jan Mayen"},{"id":205,"name":"Swaziland"},{"id":191,"name":"Sweden"},{"id":42,"name":"Switzerland"},{"id":204,"name":"Syria"},{"id":220,"name":"Taiwan"},{"id":211,"name":"Tajikistan"},{"id":221,"name":"Tanzania"},{"id":210,"name":"Thailand"},{"id":209,"name":"Togo"},{"id":212,"name":"Tokelau"},{"id":216,"name":"Tonga"},{"id":218,"name":"Trinidad and Tobago"},{"id":215,"name":"Tunisia"},{"id":217,"name":"Turkey"},{"id":214,"name":"Turkmenistan"},{"id":206,"name":"Turks and Caicos Islands"},{"id":219,"name":"Tuvalu"},{"id":223,"name":"Uganda"},{"id":222,"name":"Ukraine"},{"id":2,"name":"United Arab Emirates"},{"id":77,"name":"United Kingdom"},{"id":224,"name":"United States Minor Outlying Islands"},{"id":226,"name":"Uruguay"},{"id":225,"name":"USA"},{"id":227,"name":"Uzbekistan"},{"id":234,"name":"Vanuatu"},{"id":228,"name":"Vatican City (Holy See)"},{"id":230,"name":"Venezuela"},{"id":233,"name":"Vietnam"},{"id":231,"name":"Virgin Islands (British)"},{"id":232,"name":"Virgin Islands (U.S.)"},{"id":235,"name":"Wallis and Futuna"},{"id":65,"name":"Western Sahara"},{"id":237,"name":"Yemen"},{"id":241,"name":"Zaire"},{"id":240,"name":"Zambia"},{"id":242,"name":"Zimbabwe"}];
var gdprCountriesIds = [196,194,191,184,179,174,161,148,132,131,130,108,101,99,97,88,77,75,70,67,63,58,56,55,54,37,23,21,14];
</script>
<section data-nosnippet class="section container subscribe-box hidden">
<div class="container__inner">
<div class="actions">
<div class="actions__left">
<h2>InfoQ Software Architects' Newsletter</h2>
<span><p>A monthly overview of things you need to know as an architect or aspiring architect.</p>
<p><a href="https://www.infoq.com/software-architects-newsletter#placeholderPastIssues">View an example</a></p>
</span>
<div class="newsletter__subscribe">
<form class="form gdpr" name="dataCollectCampaignNewsletterForm" id="dataCollectCampaignNewsletterForm" action="#" onsubmit="dataCollectNewsletter.saveSubscription(); return false;">
<div class="field newsletter__mail input__text input__no-label input__medium email">
<label for="email-dataCollectnewsletter-infoq" class="label field__label">Enter your e-mail address</label>
<input id="email-dataCollectnewsletter-infoq" name="footerNewsletterEmail" placeholder="Enter your e-mail address" class="input field__input" type="email"/>
<input type="text" name="emailH" id="input_email_h_d" aria-required="false" style="display:none !important" tabindex="-1" autocomplete="off"/>
<input type="hidden" id="fnt_d" name="fnt_d" value="cNsezpOXXVkTs2xp"/>
<input type="hidden" id="dataCollectNewsletterType" name="dataCollectNewsletterType" value="regular"/>
<input type="hidden" id="cmpi_d" name="cmpi_d" value="4"/>
</div>
<div class="hidden">
<span class="input__select field country">
<label for="input-dataCollect-newsletter-country" class="label field__label">Select your country</label>
<select id="input-dataCollect-newsletter-country" class="select field__input">
<option value="" class="select__option">Select a country</option>
</select>
<p class="input__message field__desc"></p>
</span>
<span class="input__checkbox field hidden">
<input type="checkbox" id="gdpr-consent-campaign">
<label for="gdpr-consent-campaign" class="label"><span>I consent to InfoQ.com handling my data as explained in this <a href="https://www.infoq.com/privacy-notice">Privacy Notice</a>.</span></label>
</span>
</div>
<input type="submit" role="button" value="Subscribe" class="button button__medium button__red" onclick="return dataCollectNewsletter.validateEmail('Invalid email address');"/>
</form>
<p class="meta">
<a href="/privacy-notice/" target="_blank">We protect your privacy.</a>
</p>
<span class="success" style="display:none;" id="dataCollectNewsletterMessage"></span>
</div>
</div>
<div class="actions__right">
<button aria-label="Close" class="close closeBox button button__unstyled button__icon icon icon__close-black icon--only">Close</button>
</div>
</div>
</div>
</section>
<script type="text/javascript">
var dataCollectNewsletter = new Newsletter('Enter your e-mail address',
'email-dataCollectnewsletter-infoq', 'dataCollectNewsletterType','dataCollectNewsletterMessage', 'fnt_d', 'input_email_h_d', 'input-dataCollect-newsletter-country', 'cmpi_d','popup_all_pages');
</script>
<div class="infoq" id="infoq">
<!-- ####### SITE START ######### -->
<section class="section container promo hidden">
<div class="container__inner">
<div class="actions">
<div class="actions__left">
<p>
<span>Online InfoQ AI-Assisted Engineering Certification (Oct 19): Your agent got faster. Did your code get better?</span>
<a class="btn" href="/url/pb/b23b7e3c-f8b5-4f46-bbf3-cddf2aeb2a9e/" target="_blank" rel="nofollow">
Register Now
</a>
</p>
</div>
<div class="actions__right">
<button aria-label="Close"
class="close button button__unstyled button__icon icon icon__close-white icon--only close-top-promo">Close
</button>
</div>
</div>
</div>
</section>
<header class="header">
<button aria-label="Toggle Navigation" tabindex="0" class="burger header__toggle button">Toggle Navigation <span></span><span></span><span></span></button>
<div class="header__container container">
<div class="container__inner">
<div data-nosnippet class="actions header__top">
<div class="actions__left">
<p class="header__desc my-0">
Facilitating the Spread of Knowledge and Innovation in Professional Software Development
</p>
<div class="button__dropdown dropdown header__more my-0 dropdown__center">
<button aria-label="English edition" class="button button__unstyled button__small">English edition </button>
<div class="dropdown__holder">
<!---->
<div class="dropdown__content">
<ul class="no-style dropdown__nav languagesEdition">
<li class="active"><a href="#" onclick="return false;">English edition</a></li>
<li><a href="https://www.infoq.cn">Chinese edition</a></li>
<li><a href="/jp/">Japanese edition</a></li>
<li><a href="/fr/">French edition</a></li>
</ul>
</div>
<!---->
</div>
</div>
<a class="my-0 contribute-link" role="button" href="/write-for-infoq/" title="Write for InfoQ">
Write for InfoQ
</a>
</div>
<div class="actions__right">
<div>
<form id="searchForm" name="search-form" action="/search.action" enctype="multipart/form-data" class="search icon__search icon icon__green">
<div class="field search__bar input__text input__no-label input__small">
<label for="search" class="label field__label">Search</label>
<input name="queryString" type="text" id="search" value="" placeholder="Search" class="input field__input">
<input type="hidden" name="page" value="1"/>
<input type="hidden" size="15" name="searchOrder">
</div>
<input value="Search" type="submit" class="search__go">
</form>
</div>
<div class="action_button__group">
<a href="/reginit.action?" onclick="return UserActions_Login.addLoginInfo(this);" class="button button__green button__small">Register</a>
<a href="/social/keycloakLogin.action?fl=login" onclick="return UserActions_Login.addLoginInfo(this);" class="button button__small button__outline">Sign in</a>
</div>
<div class="modal_auth_required">
<div class="modal_auth_required__actions">
<h2 class="h2">Unlock the full InfoQ experience</h2>
<p>Unlock the full InfoQ experience by logging in! Stay updated with your favorite authors and topics, engage with content, and download exclusive resources.</p>
<a href="/social/keycloakLogin.action?fl=login" onclick="return UserActions_Login.addLoginInfo(this);" class="button button__has-transition">Log In</a>
<div class="separator"><span>or</span></div>
<h3 class="h3">Don't have an InfoQ account?</h3>
<a href="/reginit.action?" onclick="return UserActions_Login.addLoginInfo(this);" class="button__outline button__has-transition">Register</a>
</div>
<div class="modal_auth_required__content">
<ul class="newsletter__features">
<li><strong>Stay updated on topics and peers that matter to you</strong>Receive instant alerts on the latest insights and trends.</li>
<li><strong>Quickly access free resources for continuous learning</strong>Minibooks, videos with transcripts, and training materials.</li>
<li><strong>Save articles and read at anytime</strong>Bookmark articles to read whenever youre ready.</li>
</ul>
</div>
<form id="login-form" data-vv-scope="login" class="login__form form" action="#" data-gtm-form-interact-id="0">
<input type="hidden" id="loginWidgetOrigin" name="loginWidgetOrigin" value="mainLogin">
<input type="hidden" name="fromP13N" id="isP13n" value="">
<input type="hidden" name="fromP13NId" id="p13n-id" value="">
<input type="hidden" name="fromP13NType" id="p13n-type" value="">
</form>
</div>
</div>
</div>
<div class="header__middle">
<div class="logo header__logo">
<a href="/" class="logo__symbol active">
Logo - Back to homepage
</a>
</div>
<div class="content-items">
<a href="/news/" class="icon icon__news">News</a>
<a href="/articles/" class="icon icon__articles">Articles</a>
<a href="/presentations/" class="icon icon__presentations">Presentations</a>
<a href="/podcasts/" class="icon icon__podcasts">Podcasts</a>
<a href="/minibooks/" class="icon icon__guides">Guides</a>
</div>
<div class="header__items columns">
<div>
<h3 class="widget__heading">Topics</h3>
<nav class="nav header__nav topics" data-trk-ref="header_personas">
<div class="has--subnav li-nav">
<a href="/development/" title="Development" class="nav__category">Development</a>
<div class="nav__subnav subnav">
<ul class="subnav__categories no-style">
<li><a href="/java/" title="Java">Java</a></li>
<li><a href="/kotlin/" title="Kotlin">Kotlin</a></li>
<li><a href="/dotnet/" title=".Net">.Net</a></li>
<li><a href="/c_sharp/" title="C#">C#</a></li>
<li><a href="/swift/" title="Swift">Swift</a></li>
<li><a href="/golang/" title="Go">Go</a></li>
<li><a href="/rust/" title="Rust">Rust</a></li>
<li><a href="/javascript/" title="JavaScript">JavaScript</a></li>
</ul>
<div class="subnav__content" data-id="6815">
<div class="heading__container actions">
<div class="actions__left">
<h3 class="heading section__heading">Featured in Development</h3>
</div>
</div>
<ul data-size="large" data-horizontal="true" data-tax="" taxonomy="articles" class="cards no-style">
<li>
<div class="card__content">
<div class="card__data">
<h4 class="card__title">
<a href="/presentations/solopreneur-journey">A Solopreneur's Journey: From Engineer to Puzzle Master and Storyteller</a>
</h4>
<p class="card__excerpt">Joe Cassavaugh shares his journey from software engineer to successful solopreneur with a $2M+ indie franchise. He explains how he scaled production to 10 games in 5 years, adopted Unity to boost velocity 4-6x, optimized content pipelines, and leveraged refactoring patterns. He discusses key trade-offs between corporate engineering and solopreneurship for senior devs and leaders.</p>
<div class="card__footer"></div>
</div>
<a href="/presentations/solopreneur-journey" class="card__header">
<img loading="lazy" alt="A Solopreneur's Journey: From Engineer to Puzzle Master and Storyteller" src="https://imgopt.infoq.com/fit-in/100x100/filters:quality(80)/presentations/solopreneur-journey/en/smallimage/joe-cassavaugh-thumbnail-1788338336404.jpg" class="card__image"/>
</a>
</div>
</li>
</ul>
<a href="/development/" class="button__more button button__large button__arrow arrow__right">All in development</a>
</div>
</div>
</div>
<div class="has--subnav li-nav">
<a href="/architecture-design/" title="Architecture &amp; Design" class="nav__category">Architecture &amp; Design</a>
<div class="nav__subnav subnav">
<ul class="subnav__categories no-style">
<li><a href="/architecture/" title="Architecture">Architecture</a></li>
<li><a href="/enterprise-architecture/" title="Enterprise Architecture">Enterprise Architecture</a></li>
<li><a href="/performance-scalability/" title="Scalability/Performance">Scalability/Performance</a></li>
<li><a href="/design/" title="Design">Design</a></li>
<li><a href="/Case_Study/" title="Case Studies">Case Studies</a></li>
<li><a href="/microservices/" title="Microservices">Microservices</a></li>
<li><a href="/servicemesh/" title="Service Mesh">Service Mesh</a></li>
<li><a href="/DesignPattern/" title="Patterns">Patterns</a></li>
<li><a href="/Security/" title="Security">Security</a></li>
</ul>
<div class="subnav__content" data-id="6816">
<div class="heading__container actions">
<div class="actions__left">
<h3 class="heading section__heading">Featured in Architecture &amp; Design</h3>
</div>
</div>
<ul data-size="large" data-horizontal="true" data-tax="" taxonomy="articles" class="cards no-style">
<li>
<div class="card__content">
<div class="card__data">
<h4 class="card__title">
<a href="/minibooks/next-gen-architecture-ai-era">Next-Gen Architecture Playbook: Insights and Patterns for the AI Era</a>
</h4>
<p class="card__excerpt">This eMag examines how architects can lead with clarity in a rapidly evolving engineering world, distilling industry insights into field-tested practices for teams. Together, these stories reveal a core theme: the technology leader’s role is expanding from building systems to guiding how tech behaves and learns, while enabling engineers and organizations to bring out their best.</p>
<div class="card__footer"></div>
</div>
<a href="/minibooks/next-gen-architecture-ai-era" class="card__header">
<img loading="lazy" alt="Next-Gen Architecture Playbook: Insights and Patterns for the AI Era" src="https://imgopt.infoq.com/fit-in/100x100/filters:quality(80)/minibooks/next-gen-architecture-ai-era/en/smallimage/thumb-image-emag-next-gen-architecture-playbook-1787922032442.jpg" class="card__image"/>
</a>
</div>
</li>
</ul>
<a href="/architecture-design/" class="button__more button button__large button__arrow arrow__right">All in architecture-design</a>
</div>
</div>
</div>
<div class="has--subnav li-nav">
<a href="/ai-ml-data-eng/" title="AI Infrastructure" class="nav__category">AI Infrastructure</a>
<div class="nav__subnav subnav">
<ul class="subnav__categories no-style">
<li><a href="/bigdata/" title="Big Data">Big Data</a></li>
<li><a href="/machinelearning/" title="Machine Learning">Machine Learning</a></li>
<li><a href="/nosql/" title="NoSQL">NoSQL</a></li>
<li><a href="/database/" title="Database">Database</a></li>
<li><a href="/data-analytics/" title="Data Analytics">Data Analytics</a></li>
<li><a href="/streaming/" title="Streaming">Streaming</a></li>
</ul>
<div class="subnav__content" data-id="16690">
<div class="heading__container actions">
<div class="actions__left">
<h3 class="heading section__heading">Featured in AI, ML &amp; Data Engineering</h3>
</div>
</div>
<ul data-size="large" data-horizontal="true" data-tax="" taxonomy="articles" class="cards no-style">
<li>
<div class="card__content">
<div class="card__data">
<h4 class="card__title">
<a href="/articles/when-spec-driven-development-pays-off">When Spec-Driven Development Pays Off</a>
</h4>
<p class="card__excerpt">AI coding assistants have become a core part of software development. AI-generated code has shown productivity gains, but it's also contributing to security weaknesses and familiar bug patterns. In this article, author Nitin Garg highlights the bottleneck has moved from code generation to code verification, and how to detect &amp; mitigate it when the AI-generated behavior diverges from the intent.</p>
<div class="card__footer"></div>
</div>
<a href="/articles/when-spec-driven-development-pays-off" class="card__header">
<img loading="lazy" alt="When Spec-Driven Development Pays Off" src="https://imgopt.infoq.com/fit-in/100x100/filters:quality(80)/articles/when-spec-driven-development-pays-off/en/smallimage/When-Spec-Driven-Development-Pays-Off-thumb-1788790605567.jpg" class="card__image"/>
</a>
</div>
</li>
</ul>
<a href="/ai-ml-data-eng/" class="button__more button button__large button__arrow arrow__right">All in ai-ml-data-eng</a>
</div>
</div>
</div>
<div class="has--subnav li-nav">
<a href="/culture-methods/" title="Culture &amp; Methods" class="nav__category">Culture &amp; Methods</a>
<div class="nav__subnav subnav">
<ul class="subnav__categories no-style">
<li><a href="/agile/" title="Agile">Agile</a></li>
<li><a href="/diversity/" title="Diversity">Diversity</a></li>
<li><a href="/leadership/" title="Leadership">Leadership</a></li>
<li><a href="/lean/" title="Lean/Kanban">Lean/Kanban</a></li>
<li><a href="/personal-growth/" title="Personal Growth">Personal Growth</a></li>
<li><a href="/scrum/" title="Scrum">Scrum</a></li>
<li><a href="/sociocracy/" title="Sociocracy">Sociocracy</a></li>
<li><a href="/software_craftsmanship/" title="Software Craftmanship">Software Craftmanship</a></li>
<li><a href="/team-collaboration/" title="Team Collaboration">Team Collaboration</a></li>
<li><a href="/testing/" title="Testing">Testing</a></li>
<li><a href="/ux/" title="UX">UX</a></li>
</ul>
<div class="subnav__content" data-id="6817">
<div class="heading__container actions">
<div class="actions__left">
<h3 class="heading section__heading">Featured in Culture &amp; Methods</h3>
</div>
</div>
<ul data-size="large" data-horizontal="true" data-tax="" taxonomy="articles" class="cards no-style">
<li>
<div class="card__content">
<div class="card__data">
<h4 class="card__title">
<a href="/presentations/rust-refactoring">Accelerating Performance by Incrementally Integrating Rust Into Existing Codebase</a>
</h4>
<p class="card__excerpt">Lily Mara explains how to avoid high-risk software rewrites through incremental FFI refactoring. She shares how engineering teams can replace Python bottlenecks with Rust via PyO3, demonstrating how to achieve dramatic function-level speedups, seamless integration testing, and meaningful infrastructure cost savings without microservice overhead.</p>
<div class="card__footer"></div>
</div>
<a href="/presentations/rust-refactoring" class="card__header">
<img loading="lazy" alt="Accelerating Performance by Incrementally Integrating Rust Into Existing Codebase" src="https://imgopt.infoq.com/fit-in/100x100/filters:quality(80)/presentations/rust-refactoring/en/smallimage/lily-mara-thumbnail-1788338447565.jpeg" class="card__image"/>
</a>
</div>
</li>
</ul>
<a href="/culture-methods/" class="button__more button button__large button__arrow arrow__right">All in culture-methods</a>
</div>
</div>
</div>
<div class="has--subnav li-nav">
<a href="/devops/" class="nav__category">DevOps</a>
<div class="nav__subnav subnav">
<ul class="subnav__categories no-style">
<li><a href="/infrastructure/" title="Infrastructure">Infrastructure</a></li>
<li><a href="/continuous_delivery/" title="Continuous Delivery">Continuous Delivery</a></li>
<li><a href="/automation/" title="Automation">Automation</a></li>
<li><a href="/containers/" title="Containers">Containers</a></li>
<li><a href="/cloud-computing/" title="Cloud">Cloud</a></li>
<li><a href="/observability/" title="Observability">Observability</a></li>
</ul>
<div class="subnav__content" data-id="6043">
<div class="heading__container actions">
<div class="actions__left">
<h3 class="heading section__heading">Featured in DevOps</h3>
</div>
</div>
<ul data-size="large" data-horizontal="true" data-tax="" taxonomy="articles" class="cards no-style">
<li>
<div class="card__content">
<div class="card__data">
<h4 class="card__title">
<a href="/presentations/ai-platform-engineering-roundtable">Platform Engineering in the Age of AI</a>
</h4>
<p class="card__excerpt">The panelists explain how platform teams adapt to support AI-assisted engineering, highlighting which capabilities belong in the platform. They discuss trade-offs between standardization and developer autonomy, while sharing strategies to manage AI tooling, security guardrails, and shifting workflows.</p>
<div class="card__footer"></div>
</div>
<a href="/presentations/ai-platform-engineering-roundtable" class="card__header">
<img loading="lazy" alt="Platform Engineering in the Age of AI" src="https://imgopt.infoq.com/fit-in/100x100/filters:quality(80)/presentations/ai-platform-engineering-roundtable/en/smallimage/thumb-1788861349861.jpg" class="card__image"/>
</a>
</div>
</li>
</ul>
<a href="/devops/" class="button__more button button__large button__arrow arrow__right">All in devops</a>
</div>
</div>
</div>
<div class="li-nav">
<a rel="noreferrer noopener" href="https://events.infoq.com/" class="nav__category" title="Events" target="_blank">Events</a>
</div>
</nav>
</div>
<div>
<h3 class="widget__heading">Helpful links</h3>
<ul class="no-style header__nav">
<li>
<a href="/about-infoq" title="About InfoQ">
About InfoQ
</a>
</li>
<li>
<a href="/infoq-editors" title="InfoQ Editors">
InfoQ Editors
</a>
</li>
<li>
<a href="/write-for-infoq" title="Write for InfoQ">
Write for InfoQ
</a>
</li>
<li>
<a href="https://c4media.com/" target="_blank" title="About C4Media">
About C4Media
</a>
</li>
<li>
<a rel="noreferrer noopener" href="https://c4media.com/diversity" title="Diversity" target="_blank">Diversity</a>
</li>
</ul>
</div>
<div>
<h3 class="widget__heading">Choose your language</h3>
<ul class="language__switcher no-style">
<li class="active"><a href="#" onclick="return false;" title="InfoQ English">En</a></li>
<li><a href="https://www.infoq.cn">中文</a></li>
<li><a href="/jp/">日本</a></li>
<li><a href="/fr/">Fr</a></li>
</ul>
</div>
</div>
</div>
<div data-nosnippet class="actions header__bottom header__bottom__events">
<div class="actions__left">
<div class="events-list" role="list" aria-label="Upcoming events">
<div class="event-item" role="listitem" data-event-type="certification" data-sort-date="2026-09-14">
<a class="event-card" href="https://certification.qconferences.com/architecture?utm_source=infoq&amp;utm_medium=referral&amp;utm_campaign=homepageheader_onlinecohortarchitecture26" target="_blank" rel="noopener noreferrer" aria-label="Online InfoQ Architect Certification, Sep 14, 2026">
<div class="event-date">
<div class="event-date-box" aria-hidden="true"><span>Sep</span><span>14,</span><span>2026</span></div>
</div>
<div class="event-content">
<p class="event-title">Architect Certification</p>
<p class="event-description">Distributed systems, decentralized decisions, platform engineering, and AI architecture. <br/><strong>Online. Register Now.</strong></p>
</div>
</a>
</div>
<div class="event-item" role="listitem" data-event-type="certification" data-sort-date="2026-09-18">
<a class="event-card" href="https://certification.qconferences.com/ai-assisted-engineering?utm_source=infoq&utm_medium=referral&utm_campaign=homepageheader_onlinecohortaiassistedengineering26" target="_blank" rel="noopener noreferrer" aria-label="AI-Assisted Engineering Certification, Sep 18, 2026">
<div class="event-date">
<div class="event-date-box" aria-hidden="true"><span>Sep</span><span>18,</span><span>2026</span></div>
</div>
<div class="event-content">
<p class="event-title">AI-Assisted Engineering Certification</p>
<p class="event-description">Your coding agent moves fast. Who checks whether it's making the codebase better? <br/><strong>Online. Register Now.</strong></p>
</div>
</a>
</div>
<div class="event-item" role="listitem" data-event-type="certification" data-sort-date="2026-10-14">
<a class="event-card" href="https://certification.qconferences.com/ai-security-privacy?utm_source=infoq&amp;utm_medium=referral&amp;utm_campaign=homepageheader_onlinecohortaisecurity26" target="_blank" rel="noopener noreferrer" aria-label="Online InfoQ AI Security &amp; Privacy Engineering Certification, August 26, 2026">
<div class="event-date">
<div class="event-date-box" aria-hidden="true"><span>Oct</span><span>14,</span><span>2026</span></div>
</div>
<div class="event-content">
<p class="event-title">AI Security &amp; Privacy Engineering Certification</p>
<p class="event-description">Secure and govern production AI systems, from sensitive data to guardrails, evals, and audits.<br><strong>Online. Register now.</strong></p>
</div>
</a>
</div>
<div class="event-item" role="listitem" data-event-type="qcon" data-sort-date="2026-11-16">
<a class="event-card" href="https://qconsf.com/?utm_source=infoq&amp;utm_medium=referral&amp;utm_campaign=homepageheader_qsf26" target="_blank" rel="noopener noreferrer" aria-label="QCon San Francisco, Nov 16-20, 2026">
<div class="event-date">
<div class="event-date-box" aria-hidden="true"><span>Nov</span><span>16-20,</span><span>2026</span></div>
</div>
<div class="event-content">
<p class="event-title">QCon San Francisco</p>
<p class="event-description">What's working across AI, architecture, and leadership, from the teams doing it. <br/><strong>Register. Early bird ends August 11.</strong></p>
</div>
</a>
</div>
<div class="event-item" role="listitem" data-event-type="qcon" data-sort-date="2026-12-15">
<a class="event-card" href="https://newyork.qcon.ai/?utm_source=infoq&utm_medium=referral&utm_campaign=homepageheader_qainy26" target="_blank" rel="noopener noreferrer" aria-label="QCon AI New York, December 15-16, 2026">
<div class="event-date">
<div class="event-date-box" aria-hidden="true"><span>Dec</span><span>15-16,</span><span>2026</span></div>
</div>
<div class="event-content">
<p class="event-title">QCon AI New York</p>
<p class="event-description">Production AI across agents, context, evals, security, and infrastructure, from the senior engineers building it.<br/><strong>Registration open.</strong></p>
</div>
</a>
</div>
<div class="event-item" role="listitem" data-event-type="qcon" data-sort-date="2027-04-13">
<a class="event-card" href="https://qconlondon.com/?utm_source=infoq&amp;utm_medium=referral&amp;utm_campaign=homepageheader_qconlondon27" target="_blank" rel="noopener noreferrer" aria-label="QCon London, April 13-16, 2027">
<div class="event-date">
<div class="event-date-box" aria-hidden="true"><span>Apr</span><span>13-16,</span><span>2027</span></div>
</div>
<div class="event-content">
<p class="event-title">QCon London</p>
<p class="event-description">What early-adopter teams have proven in production, across 15 engineering tracks. <br/><strong> Register. Early bird ends August 11.</strong></p>
</div>
</a>
</div>
</div>
</div>
<!---->
</div>
</div>
</div>
</header>
<!-- ####### CONTENT START ######### -->
<main>
<div>
<section class="container section white">
<div class="container__inner">
<article data-type="presentation" class="article grid transcript rightbar">
<p class="crumbs">
<span data-nosnippet><a href="/" title="InfoQ Homepage">InfoQ Homepage</a></span>
<span data-nosnippet><a href="/presentations" title="Presentations">Presentations</a></span>
<span data-nosnippet class="active">How Did It Make Sense at the Time? Understanding Incidents as They Occurred, Not as They are Remembered</span>
</p>
<div class="article__category devops">
<a
href="/Devops/"
class="article__tag box--info" title="DevOps">
DevOps
</a>
</div>
<div data-nosnippet class="notice">
<div class="box--warning">
<a target="_blank" rel="nofollow" href="https://certification.qconferences.com/ai-assisted-engineering?utm_source=infoq&amp;utm_medium=referral&amp;utm_campaign=infoqyellowbox_onlinecohortaiassistedengineering26 ">InfoQ Certified AI-Assisted Engineering Program (online, Oct 19): Build the harness that holds. </a>
</div>
</div>
<h1>How Did It Make Sense at the Time? Understanding Incidents as They Occurred, Not as They are Remembered</h1>
<div class="article__actions">
<div class="actions__left actions__sidebar article__actions">
<button id="toggleLikeContent" class="icon button button__icon like button__gray icon__like" aria-label="Like">Like</button>
<div class="bookmarkReading">
<button id="bookmarkBtn" data-ref="bookmarkPage" aria-label="Read later" class="login button__gray button button__icon icon icon__bookmark icon--only"> </button>
<!-- new dropdown rading list -->
<div class="my-0 button__dropdown dropdown reading_list dropdown__center" id="showBookmarks">
<button aria-label="Reading list" class="button button__unstyled button__small"></button>
<div class="dropdown__holder">
<div class="dropdown__content">
<ul class="no-style dropdown__nav">
<li class="active"><a href="/showbookmarks.action">Reading list</a></li>
</ul>
</div>
</div>
</div>
<div id="toastContainer" class="toast-none toast-hide">
<div class="toast"><span></span></div>
</div>
</div>
<script type="text/javascript">
if(loggedIn){
$('#showBookmarks').css('display', 'flex');
}
function performBookmark() {
Bookmarks.toggleBookmark('presentations', 'incidents-investigation');
}
infoq.event.on('bookmarkRequested', function(e) {
Bookmarks.toggleBookmark('presentations', 'incidents-investigation');
});
infoq.event.on("loaded", function(){
if(loggedIn){
var href = window.location.href;
if(href.indexOf("#bookmarkPage") != -1){
$('#bookmarkBtn').click();
}
}
});
$(document).ready(function() {
if(Bookmarks.isContentBookmarked == 'true'){
$('#bookmarkBtn').addClass('button__green');
$('#bookmarkBtn').removeClass('button__gray');
}else{
$('#bookmarkBtn').removeClass('button__green');
$('#bookmarkBtn').addClass('button__gray');
}
});
</script>
</div>
</div>
<div class="presentation__switch">
<label class="label">View Presentation</label>
<ul class="no-style">
<li><button class="button button__unstyled button__tooltip tooltip__top button__icon icon icon__pres-2-cols icon--only active" aria-label="Vertical" data-tip="Vertical" data-tip-placement="top" data-key="pres-2-cols">Vertical</button></li>
<li><button class="button button__unstyled button__tooltip tooltip__top button__icon icon icon__pres-1-col icon--only" aria-label="Horizontal" data-tip="Horizontal" data-tip-placement="top" data-key="pres-1-col">Horizontal</button></li>
<li><button class="button button__unstyled button__tooltip tooltip__top button__icon icon icon__pres-fs icon--only" aria-label="Full" data-tip="Full" data-tip-placement="top" data-key="pres-fs">Full</button></li>
</ul>
</div>
<div class="speed">
<label class="label">Speed:</label>
<ul id="presentation_speed" class="no-style presentation_speed">
<li><button class="button button__unstyled active" aria-label="1x" onclick="P.adjustSpeed(1.0, $(this));return false;">1x</button></li>
<li><button class="button button__unstyled" aria-label="1.25x" onclick="P.adjustSpeed(1.25, $(this));return false;">1.25x</button></li>
<li><button class="button button__unstyled" aria-label="1.5x" onclick="P.adjustSpeed(1.5, $(this));return false;">1.5x</button></li>
<li><button class="button button__unstyled" aria-label="2x" onclick="P.adjustSpeed(2.0, $(this));return false;">2x</button></li>
</ul>
</div>
<div class="player">
<div id="player">
<script type="text/javascript">
SlideSynchronizer.setTimes(TIMES);
SlideSynchronizer.playerId="video";
</script>
<video id="video" playsinline controls controlsList="nodownload" width="100%" height="100%" onplay="SlideSynchronizer.start();"></video>
</div>
<div class="actions player__actions">
<div class="actions__left">
</div>
<div class="actions__right"><span>38:15</span></div>
</div>
</div>
<div id="slideContainer" class="intro slides">
<div id="slide"></div>
</div>
<div class="summary">
<h2 class="heading">Summary</h2>
<p>Jacob Scott explores the basics of failure in complex systems, the theory and practice of how it made sense at the time, and actions to take.</p>
</div>
<div data-nosnippet class="bio">
<h2 class="heading">Bio</h2>
<p>Jacob Scott a technologist who is deeply curious about reliability in complex socio-technical (software) systems. He is currently a staff software engineer in the Platform & Ecosystem group at Stripe, focused on user facing event systems. </p>
</div>
<div data-nosnippet class="about-conference">
<h2 class="heading">About the conference</h2>
<p>QCon Plus is a virtual conference for senior software engineers and architects that covers the trends, best practices, and solutions leveraged by the world's most innovative software organizations.</p>
</div>
<div data-nosnippet class="event__list-box box__border">
<h3>INFOQ EVENTS</h3>
<ul class="cards no-style webinarEvents">
<li data-col="1/1" data-type="webinar" hoverables=""><img alt="" data-src="sponsorship/eventsnotice/4b6b261f-58c2-44bd-856a-2189a99d6743/resources/1HarnessWebinarSept17-Transcript-1786634790914.png" style="width: 288px; height: 145px;" src="https://imgopt.infoq.com/fit-in/3000x4000/filters:quality(85)/filters:no_upscale()/sponsorship/eventsnotice/4b6b261f-58c2-44bd-856a-2189a99d6743/resources/1HarnessWebinarSept17-Transcript-1786634790914.png" rel="share"> <span class="date">September 17th, 2026, 1 PM EDT</span>
<h4 class="title"><a href="https://www.infoq.com/url/t/3370b6d4-7e2c-4875-8258-5601b235e3c3/?label=Harness-Transcripts" rel="nofollow" target="_blank">Beyond the PR: The New Control Plane for Agentic Software Delivery</a></h4>
<p class="card__excerpt"><a href="https://www.infoq.com/url/t/3370b6d4-7e2c-4875-8258-5601b235e3c3/?label=Harness-Transcripts" rel="nofollow" target="_blank">Presented by: Mohit Suman - Staff Product Manager at Harness</a></p>
<footer>
<div class="authors"><span><a data-id="author-SPONSORED BY SPONSOR" href="https://www.infoq.com/url/t/3370b6d4-7e2c-4875-8258-5601b235e3c3/?label=Harness-Transcripts" rel="nofollow" target="_blank">SPONSORED BY HARNESS</a></span></div>
</footer>
</li>
</ul>
<ul class="cards no-style webinarEvents">
<li data-col="1/1" data-type="webinar" hoverables=""><img alt="" data-src="sponsorship/eventsnotice/f2bd6c51-c5d2-41cf-957d-198b2d3a83a3/resources/1DatadogWebinarOct8-Transcripts-1787826934657.png" style="width: 288px; height: 145px;" src="https://imgopt.infoq.com/fit-in/3000x4000/filters:quality(85)/filters:no_upscale()/sponsorship/eventsnotice/f2bd6c51-c5d2-41cf-957d-198b2d3a83a3/resources/1DatadogWebinarOct8-Transcripts-1787826934657.png" rel="share"> <span class="date">October 8th, 2026, 12 PM EDT</span>
<h4 class="title"><a href="https://www.infoq.com/url/t/517ac1f3-a6c1-442e-84ed-c00c52ee13d4/?label=Datadog-Transcripts" rel="nofollow" target="_blank">When AI Accelerates Development, Can Your CI Pipeline Keep Up?</a></h4>
<p class="card__excerpt"><a href="https://www.infoq.com/url/t/517ac1f3-a6c1-442e-84ed-c00c52ee13d4/?label=Datadog-Transcripts" rel="nofollow" target="_blank">Presented by: Eric Metaj - Product Marketing Manager, Software Delivery at Datadog, and Rohin Chandra - Product Manager, CI/CD Optimization at Datadog</a></p>
<footer>
<div class="authors"><span><a data-id="author-SPONSORED BY SPONSOR" href="https://www.infoq.com/url/t/517ac1f3-a6c1-442e-84ed-c00c52ee13d4/?label=Datadog-Transcripts" rel="nofollow" target="_blank">SPONSORED BY DATADOG</a></span></div>
</footer>
</li>
</ul>
</div>
<div class="article__content">
<div class="article__data">
<div id="presentationNotes">
<h2 class="expanded">Transcript</h2>
<p>Scott: With apologies to Beauty and the Beast, we&#39;re kicking off with a tale of the oldest time, song as old as rhyme. An engineer hits return, and just like with the Ever Given container ship that launched a million memes when it got stuck in the Suez in 2021, what happens next is an incident. I learned on Wikipedia, of course, that the Ever Given can fit 20,000 containers on board. If anyone watching is responsible for operating Kubernetes, please let me know if this is the world&#39;s longest and largest CrashLoopBackOff. I&#39;m Jacob. I work as a staff engineer at Stripe.</p>
<h2 class="expanded">Outline</h2>
<p>I&#39;m here to discuss the question, how did it make sense at the time? Specifically, I&#39;m going to use examples of humans triggering incidents to explore the theory and practice of asking, how did it make sense at the time? With the goal of making users happy. I believe you should care about how it made sense at the time, because it will lead to happier users. There are many paths to happier users. Here&#39;s one concrete example relevant to us, laid out backwards. Fewer HTTP 500s mean happier users. Better decisions in incidents means fewer 500s. Better learning in post incident activities means better decisions in incidents. Asking, how did it make sense at the time, means better learning in post incident activities? Of course, before we can ask, how did it make sense at the time? We need to understand what we&#39;re asking. As I&#39;ve highlighted, we&#39;ll focus on the last two steps in this trend for the rest of the talk. Where we&#39;ll spend our time is as follows. First, we have a few more preliminaries to run through to provide context and set the stage. Second, we&#39;ll flesh out theory and concepts. Third, we&#39;ll explore applying that theory in post incident activities. Finally, we&#39;ll wrap up.</p>
<h2 class="expanded">Incident Triggers (The Human)</h2>
<p>Now I want to unpack incident triggers. Focusing on triggers means ignoring most of what happens during incidents. We&#39;re only looking at how they start. I&#39;m doing this because human triggers carry with them a common sense or intuition of, could they just have not pushed that button? This is strongly in tension with the perspective of, how does it make sense at the time? This tension in turn is fertile soil for those aha moments where everything clicks. We&#39;re focusing narrowly to spend our time in that fertile soil. I&#39;ve said, how did it make sense at the time, probably 10 times already. As a point of order, moving forward, I&#39;m going to use the acronym HDIMSATT interchangeably with how did it make sense at the time, to have a little bit less of a word salad.</p>
<h2 class="expanded">Caveats</h2>
<p>First, I&#39;m taking artistic license. We&#39;ll be covering fragments of incidents to help us wrangle HDIMSATT, but we shouldn&#39;t confuse that with a deep understanding of them, let alone how they were experienced by those involved at the time. Second, I&#39;ll be critiquing some parts of publicly available incident write-ups. I can only do that because they were written about. It can be fraught to explain your failures to the world, especially to customers who pay you or prospective customers considering paying you. If none were published, our ability to learn from each other will be crippled. Courtney Nash gave a really great talk in the effective SRE track, where she presented research built on top of the VOID, an open repository of over 2000 incident reports from software organizations.</p>
<h2 class="expanded">Salesforce&#39;s May 11, 2021 Multi-Instance Service Disruption</h2>
<p>Let&#39;s explore the theory of HDIMSATT through the lens of human triggers of incidents. This is going to be the bulk of the talk. My goal here is to spark your curiosity and provide sufficient foundation to support discussion of HDIMSATT in practice. On May 11, 2021, Salesforce went down for 5 hours. This might have been a snow day for your go-to market organization, since many of them basically live in Salesforce. In my experience, engineering rarely has a good understanding of how others experience incidents. I challenge you to find a friendly account executive and ask them if they remember May 11th of last year, and if so, how it impacted them. Let&#39;s look at what happened according to Salesforce&#39;s public explanation of this multi-instance service disruption. The trigger for this incident was DNS. An engineer made a configuration change to Salesforce&#39;s BIND DNS servers and hit an edge case in a long existing script where BIND didn&#39;t restart cleanly. Basically, pushing the change to a DNS server shut it down. The engineer pushed the change globally via an emergency break fix process. Then, basically, all Salesforce globally went down. That&#39;s the incident for our purposes, because, as we&#39;ve said, we&#39;re interested in the human trigger, which is the engineer running the script.</p>
<p>Now we can look at how Salesforce understood and explained what happened. This is a section of the document that they titled, Root Cause Analysis. I feel compelled to note here that I have problems with the term root cause analysis. Salesforce&#39;s RCA has two findings that are interesting to us. First, the staggering canary change management policy was not followed or enforced. Second, the emergency break fix process was subverted. Again, subverted is the term used by Salesforce. That is, they consider the use of this process during this change to be against policy. We could lift the RCA findings into a human trigger centric version to explore as follows. An engineer applying a DNS change did not follow staggering canary process and subverted emergency break fix process, and Salesforce went down for 5 hours. Now we hit a major killer. People don&#39;t show up to work to cause 5-hour outages. If there&#39;s anyone watching, who could ask a coworker, are you planning to cause a 5-hour outage today, and get a serious yes back. People don&#39;t show up to work intending to cause outages, but sometimes take actions which lead to outages. This is what motivates us to ask, how did it make sense at the time? Bringing this insight back to what happened to Salesforce on May 11th, we can ask, HDIMSATT to the engineer who triggered the incident to not follow and/or subvert these processes. Now we&#39;ll dive into that question.</p>
<p>First off, what Salesforce&#39;s write-up doesn&#39;t touch on is how frequently the emergency break fix process is, &quot;subverted&quot; in this way without anything going wrong. The background here is of a woman jaywalking, because, until recently, jaywalking was against the law in California. Everyone jaywalks. I think we all understand that we jaywalk because it saves us time, and we look both ways first to establish that it&#39;s safe. In my experience, I&#39;m a lot more likely to jaywalk if I&#39;m in a hurry because I&#39;m late, or busy with a lot to do that day. If you have jaywalked before and especially if you jaywalk regularly, consider how it makes sense to you at the time to jaywalk, and how those considerations and motivations might translate to an engineer making a DNS change. In the academic discipline of modern safety science, which is where, give or take, the idea of just culture as used in our track title originates. The jaywalking intuition is formalized as the gap between work as written and work as done. That is to say, documents, runbooks, and rules are an abstraction which do not and cannot map exactly to work as it is actually done. For example, you won&#39;t find a pictogram of a dad struggling to put together an IKEA crib in the official instruction guide. Ryan Reynolds is definitely having a chaotic time here.</p>
<p>Another thing that we can ask is what the purpose of this DNS change was. Who asked for it? What pressure the engineer making the change might have felt to complete it quickly. I don&#39;t think that any of the folks pictured on this slide asked for the change. If a VP or director of XYZ was trying to do a demo that required the change and needed it in a tight timeframe, what do we expect, or what does Salesforce expect the engineer to do next? While Salesforce&#39;s write-up didn&#39;t include any information on this. Just like we did with jaywalking, we can consider how you might have responded to two different time sensitive requests, one from a teammate, the other from an executive in your reporting chain. Which request would you be more willing to cut corners in order to deliver on time? The point here is that pressure applied even implicitly, from those who hold power in an organization can impact decision making. I want to highlight why at the time, it&#39;s so important. The late Dr. Richard Cook, was a seminal researcher in the field of modern safety science, and wrote an amazing short paper titled, &quot;How Complex Systems Fail,&quot; 22 years ago. One of the observations made in that paper is that all practitioner actions are gambles. Some of you may also be familiar with the business book, &quot;Thinking in Bets,&quot; by former professional poker player, Annie Duke. Unsurprisingly, given the title in this bestseller, Duke argues that considering decisions as bets is key to long-term business success. People generally do not gamble intending to lose. When someone gambles, just like when an engineer presses a button, they do not know the future. That is, they take actions which make sense to them at the time.</p>
<h2 class="expanded">Atlassian&#39;s April 5, 2022, 14-Day Cloud Downtime</h2>
<p>Let&#39;s talk about another incident. This time, in April of 2022, Atlassian&#39;s cloud went down for 14 days. That&#39;s 60 times longer than the Salesforce outage we just spoke about. What happened? An engineer was given a list of about 1000 IDs of a legacy plugin to delete as part of a migration related to an acquisition. They did a substantial amount of testing, including testing on staging, and taking a smaller sample of those IDs, running them on prod, and everything worked. Then they ran the rest of the IDs. It turned out that the folks who gave them those IDs, gave them 30 plugin IDs for the initial prod test, but then gave them site IDs for the other 900 IDs. Their script probably deleted 883 full installations. That&#39;s not the unimportant legacy plugin they intended to delete, but installation of Atlassian products that you&#39;ve heard of, like Jira and Confluence. Again, that&#39;s the trigger of the incident. Again, an engineer pressed return. If we look at how Atlassian explained what happened, the two things that they called out were, one, the fact that the engineer running the script was given IDs of an unexpected type. Two, that the script didn&#39;t provide any feedback or warning prior to deleting entire installation.</p>
<p>Even from this summary, I think we got a pretty good grasp of why it made sense for the engineer to press return. They got IDs. They followed a clear rollout process, and all of their preflight tests worked cleanly. To be honest, when I first read this incident report, and I got to the part where the first 30 IDs were app IDs and the rest were site IDs, I shivered. If I was doing that job that day, I do not think that there&#39;s any way I would have done anything different. That said, there wasn&#39;t much in the incident report about the folks who supplied the IDs, so there&#39;s not much to say about HDIMSATT to them. Notice that HDIMSATT is often different for everyone, and divergence can be painful. The multi-agent version of this problem is out of scope for this talk. If you&#39;re curious, what I recommend Googling is the phrase, Common Ground and Coordination in Joint Activity.</p>
<h2 class="expanded">Salesforce vs. Atlassian</h2>
<p>Boil down to the essentials, both Salesforce and Atlassian, or at least the shadow versions I&#39;ve constructed for this talk, remember that I didn&#39;t experience these incidents firsthand, had long painful outages after an engineer pressed return and a script did something surprising and unpleasant. At the same time, even skimming the surface of how these organizations publicly explained the trigger of these incidents shows real differences. After reading Salesforce&#39;s incident report, I think that Salesforce believes that had the DNS change been assigned to a &quot;better engineer&quot; who followed the organization&#39;s policy to the letter, the outage would have been completely avoided. After reading Atlassian&#39;s incident report, I think that the organization believes that running the script made sense at the time to the engineer who hit enter, and that if another engineer was at the keyboard, it probably would have made sense to them too. From this difference in understanding and explanation, which organization is poised to have richer and more accurate learning in post incident activities? Atlassian.</p>
<p>If there&#39;s a part of your brain that&#39;s whispering, yes. Why could the engineer have just not have hit return, or is this simply nihilistic chaos where no rules matter? This slide is for you. From the same paper we touched on earlier, come two more observations. First, complex systems are heavily and successfully defended against failure. Salesforce and Atlassian both already have a tremendous amount of infrastructure, SREs, paging, automation, things that work well, and follow best practice architectural patterns. That&#39;s how they got to be large businesses that are well known enough for me to select them as examples for this talk. All of that is for better or worse, table stakes for where we are, because the second point the paper makes is that catastrophe is always just around the corner. This is really uncomfortable but it&#39;s fundamental. What keeps catastrophe around that corner is people taking actions, which make sense to them at the time. On the other hand, when catastrophe turns the corner, and visits our system, who is frequently involved? Again, someone taking actions which make sense to them at the time: pedestrians jaywalk, and engineers hit return. To learn and adapt, we need to understand not just what went wrong, but why we believed it would go right.</p>
<h2 class="expanded">A Near Miss - Naomi&#39;s Baby Monitor</h2>
<p>I want to talk about one more very different non-incident. This is my baby daughter, Naomi, who&#39;s 15 months old. Earlier this month, my wife and I accidentally left Naomi&#39;s baby monitor off. Thankfully, unlike our previous examples, she slept through the night fine. Nothing bad happened. This is what modern safety science calls a near miss. It&#39;s really just random chance that Naomi slept through the night fine when we forgot the baby monitor. She could just as easily have woken up and been fussy, in which case our time to respond would have been higher than usual. Near misses are interesting because the lack of a bad outcome tends to make them less fraught to explore. Just think about the difference between an incident that costs your employer $10 million, and a very similar one that almost cost your employer $10 million, maybe a feature flag disabled money movement on that latter incident. Which incident would you expect participants to be more nervous about? Which incident review meeting do you think you would learn more from?</p>
<p>Beyond the near miss, the other interesting thing here is that the trigger was not action but inaction. We basically didn&#39;t hit enter, and we could have had an incident because of that. HDIMSATT. Like I imagine most parents watching, we don&#39;t have a formal checklist for bedtime, like a surgeon might before operating, nor do we have paging configured for the baby monitor. Really, what happens is that during the past year that Naomi has been sleeping in her crib with plenty of fussing, we&#39;ve come to understand intuitively that our bedroom is close enough to hers, that if something is really wrong, we&#39;ll hear her regardless. With a little bit of hand waving, basically as the importance of the baby monitor being enabled decreased, so did our cognitive vigilance. Another thing I want to point out is that learning from and adapting to Naomi&#39;s previous fussiness is what enabled our &quot;high reliability baby ops.&quot; Failure-free operations require experience with failure.</p>
<h2 class="expanded">In Practice, HDIMSATT is Contextual</h2>
<p>How do we take what we&#39;ve just learned to market at our jobs? How do we have impact and make things better? What does this look like when things stop being concepts and start getting real? In practice, HDIMSATT is squishy. Success in practice really depends on the organization. We&#39;ll go over some building blocks. The best high-level advice I have is to experiment, remix, and catch a wave. By catch a wave, I mean, for example, watch for something adjacent which spikes leadership&#39;s interests, frequently this is an incident. Sneak in some HDIMSATT to what is already in progress. Practically, when&#39;s the right time to bust out HDIMSATT? One thing you can do is look out for terms like these, which are frequently associated with actions that mostly make sense in hindsight. Given a failure, you can almost always find a test case, alert, or dashboard, which would have detected it. Of course, we build all of those things before the failure happens, so HDIMSATT to write or not write tests, before we knew that something had failed.</p>
<p>I love this figure. I think it does a great job of showing the dangers of hindsight. Whoever triggered the incident was faced with a very complex maze and made a number of decisions, but eventually ended up at a boom. If we don&#39;t uncover how things made sense at the time, we are left with a view of the incident, which not only isn&#39;t &quot;correct,&quot; but won&#39;t be representative of how folks will engage with the world tomorrow. We can&#39;t change what happened yesterday, but if we understand, how it made sense at the time, we might be able to do better tomorrow. An obvious place to HDIMSATT is existing post incident activities: post-mortem meetings, incident reports, and so on. There&#39;s a wide range of options here. Starting with asking HDIMSATT in post incident meetings, or putting the term in templates next to root cause or similar sections. More complex, which means a larger investment, but also a larger reward might look like updating your post incident activities to follow modern safety science informed approaches like those found in Etsy&#39;s debriefing facilitation guide, or Jeli&#39;s How We Got Here, or Howie guide. Understanding HDIMSATT during post incident activities often means asking adjacent questions to tease insight out of participants. We touched on many of these questions earlier when talking about Salesforce&#39;s outage. How does DNS work at Salesforce? What&#39;s the genesis of the change, and so on? It turns out that they serve well as a starting point for many other contexts.</p>
<p>Modern safety science can sometimes seem like a deep rabbit hole. As you&#39;ve seen, luckily for us, HDIMSATT is near the surface. Some resources, for example, the textbook, &quot;Foundations of Safety Science,&quot; by Sidney Dekker, are much deeper. In my opinion, perfect is the enemy of impact. I think you can almost certainly improve things in your organization without needing to venture too deep into this hole. I say that to dispel fear of the activation energy required for adoption. Let me be clear, this domain is fascinating. If you&#39;re curious, I encourage you to spelunk.</p>
<h2 class="expanded">How HDIMSATT Applies, Beyond Just Incidents</h2>
<p>We&#39;ve spent the talk zoomed in to incident triggers as a way to optimize for sparking intuition. Very little of what we&#39;ve discussed is actually trigger specific. Since we can take that prompt and have framed HDIMSATT in terms of incidents, we can also show examples of how it applies beyond just incidents. One thing we can do is ask HDIMSATT about anything in the past. HDIMSATT to Steve Jobs and Apple, but not Blackberry, that the future of computing was full touchscreen smartphones. How did it make sense at the time for Softbank to invest in WeWork? The woman you see on the right is Dr. Katalin Karik&oacute;. Her research was considered so disappointing in the 1990s that she was demoted from a tenure track position at the University of Pennsylvania. Today, she&#39;s famous and widely respected for her contributions to mRNA COVID vaccines. How did it make sense at the time?</p>
<p>HDIMSATT looking forward is perhaps the most tricky and most valuable. Because we&#39;re looking at the future, we can work to align what makes sense with our desired outcomes. A canonical example I think of is break glass systems, which might allow you to deploy from a non-main Git branch in emergencies, even if it&#39;s normally disallowed, or to Salesforce&#39;s emergency break fix system that we saw earlier. These will be used via work as done in ways that make sense at the time. We have agency today to design them as a pit of success. We can also think about what we might ask in the future, about how what we&#39;re doing now made sense and feel a bit more motivated to write down answers and context behind our decisions.</p>
<h2 class="expanded">Resources</h2>
<p>This talk is largely a work of synthesis. It really mixes many building blocks put together by researchers and practitioners, going back to the 1990s. You can find breadcrumbs for those building blocks, as well as citations, attributions, the full list of folks I need to thank, and so on, at qcon2022.jhscott.systems.</p>
<h2 class="expanded">Conclusion</h2>
<p>There&#39;s a limit to the reliability of systems built on understanding failure as being caused by software bugs or human error. One way to get beyond it is to learn from how it made sense at the time. HDIMSATT helps us pierce the illusion of work as written, and consider work as done. Understanding the safety and reliability of complex systems is an exploration we&#39;re on together, and you can help by sharing what you learn.</p>
<h2 class="expanded">Questions and Answers</h2>
<p>Brush: Let&#39;s say you have some executive that keeps wanting to add counterfactuals to your incident report, why didn&#39;t we just, or we should have? How would you suggest, politely or not politely, resetting back to, how did it make sense at the time?</p>
<p>Scott: One of the things that I&#39;m most curious about today is adoption. I think it really depends, unfortunately, on your relationship with this leader, what other allies or other people you have in your orbit, how the rest of the organization is doing. I think there&#39;s this question about whether it makes more sense to say, ok, we can do both, or to nudge them and say, do you have time to read how complex systems fail? Or engage with them, what are you really concerned about? Counterfactuals may not be that useful to what you&#39;re trying to do. Actually, I submitted a panel discussion at the Learning From Incidents conference, I think in February 2023. The talk I submitted there was a panel on exactly this question, about learning from chances in failures, and adoption of learning from incident reports. It&#39;s the same thing.</p>
<p>Brush: We all know that public incident reports aren&#39;t exactly the same thing as internal ones, because, obviously, there&#39;s a PR component and a legal component. Is there anyone that you&#39;ve ever read that you thought, this company gets it.</p>
<p>Scott: Laura Nolan, who&#39;s formerly a Senior Staff Engineer at Slack, if you go and look at Slack&#39;s incident reports, many of them up until October or something, many of the trickiest ones were written by Laura Nolan. I think they do a great job of covering both what happens from a user perspective, and what happens from the perspective of folks participating in the incident, and overlaps with, how did it make sense at the time? The other person is Pete Shima, who I think has helped. He works in reliability at Epic Games, helping make sure that Fortnite stays up. There are some interesting incident reports out of Epic when there have been big Fortnite outages. I think that one is especially interesting. Learning from incidents or this perspective of modern safety science intersecting with software reliability can really be anywhere. You don&#39;t have to be FAANG. You don&#39;t have to be X, Y, or Z. The people keeping Fortnite up can also apply this and have increased learning and build trust, and all those sorts of things, including through public incident reports.</p>
<p>Brush: It&#39;s interesting that you named two companies that are really what I would consider consumer based. I know Slack has enterprise customers and enterprise deals as well. I think we tend to think of them as a very consumer focused company. Do you think this is harder for enterprise?</p>
<p>Scott: For sure. This goes to adoption as well. Maybe you could compare it to, although it&#39;s very different, but publishing demographics for engineering organizations. Like, why would you want to do that, if it&#39;s bad, and the cultural sea change that had to happen. I think maybe it was Tracy Chou at Pinterest who drove a bunch of that. It&#39;s the bar to release that information. I think, yes, particularly for enterprise companies, where if I simulate being an executive, it&#39;s like, what&#39;s the good? The good here is like secondary, it&#39;s ephemeral. Like maybe he said, there&#39;s some kudos, we helped the industry a little bit at a time. The potential downside is like someone at an important contract, takes this the wrong way, because maybe they don&#39;t understand the differences between safety. It&#39;s complicated. It&#39;s complex. I don&#39;t think you can expect everyone to do that. There&#39;s a lot of apprehension, and the reward is qualitative. It all ties back. It&#39;s one of these things with learning from incidents in complex sociotechnical systems. It&#39;s particularly challenging for enterprise folks.</p>
<p>Brush: I was wondering if like, you have to have two versions of the learning. One is the one where your customers are mature enough, they&#39;re ready to see. Then there&#39;s one that is your organization that wants to do that.</p>
<p>Scott: For sure. I would point to, as you said, the differences between internal and external. The authority I would point to is Adaptive Capacity Labs, which is John Allspaw, Dr. David Woods, and the late Dr. Richard Cook, both of the former two being professors. They have a great blog post on the multiple audiences for incident reports and for post-mortems. That&#39;s something interesting as an engineer to think about systems thinking or whatever. There are different audiences. This is why maybe the reports from Slack and Epic are so interesting. The more you can learn from the more people the better, but also some of those learnings are highly contextual. I&#39;m going to learn a lot more from an incident report from an incident I&#39;ve been in that&#39;s written to engineers, because I know what systems they&#39;re talking about. One of the things from Sidney Dekker is that complex systems are path dependent. The history matters. How these decisions were made years ago, which led to the systems that you depend on now having weird quirks. That&#39;s not a thing that I think you can really expect to be in a public incident report. It&#39;s like, what weird language choice, you have to hunt in the Google Drive. I really do think there are different audiences and different learnings possible in different settings. John Allspaw retweeted a meme he had made, which is the Pawn Stars, or something, where there&#39;s like the dad and the father, and it&#39;s like, it&#39;s helpful. It&#39;s like, it&#39;s no good because it&#39;s public. It&#39;s like, but they have to start somewhere. Look at John Allspaw&#39;s Twitter for a recent meme, well-said, on this very topic.</p>
<p>Brush: What is the most interesting thing you think you&#39;ve ever learned by asking, how did it make sense at the time, that you don&#39;t think you would have learned?</p>
<p>Scott: I had an incident where, by doing something incremental, we thought that we were taking a safer approach, but, in fact, there were rails for doing a larger chunk of work at a time that would have made it safer. It&#39;s not exactly, how did it make sense at the time, but by continuing to ask and be curious, and think about, maybe how is this supposed to work? Or like, when other people did this migration, how did they not explode? Even though it wasn&#39;t like directly a remediation. It was actually like, we had a discussion about the incident as a team, and a few days later, we followed up with the other team who built the infrastructure they were building on. It turned out that, yes, actually, maybe the docs we were looking at were not exactly as good as we thought. Like, it&#39;d point us to a point in the code base, which actually had some of this dual read, dual write stuff built in, but only for this specific path, that if you chose a riskier path, you got a better outcome because there was protection for the risky path, but not for the safer path. If you back up from specifically, how did it make sense at the time, to sort of related like curiosity, systems thinking, whatever. That was pretty interesting. That was just in the past few months.</p>
<p>Brush: It seems like related, to me, like when folks sometimes slow down their deployments, so it doesn&#39;t trigger the alerting anymore.</p>
<p>Scott: Yes, all of these unintended consequences. Just after Black Friday, Cyber Monday, many folks may have had code freezes. The classic one is like, you have a memory leak, because your code froze for a week, and normally you deploy multiple times a day, and so like your Java [inaudible 00:37:35]. Then you&#39;re like, I had this thing I did that should have made me safer, in fact, made it worse.</p>
<p>&nbsp;</p>
<script>
$(function() {
jQuery(function() {
jQuery.scrollDepth();
});
});
</script>
<p><big><strong>See more <a href="https://www.infoq.com/transcripts/presentations/">presentations with transcripts</a></strong></big></p>
<p>&nbsp;</p>
</div>
</div>
</div>
<div class="aside">
<div class="recorded">
<p class="meta recorded__meta">Recorded at:</p>
<a href="https://plus.qconferences.com/">
<img loading="lazy" alt="QCon Plus is a virtual conference for senior software engineers and architects that covers the trends, best practices, and solutions leveraged by the world's most innovative software organizations." src="https://res.infoq.com/presentations/incidents-investigation/en/promoimage/Logo_QCon+Plus-1694709697567.png">
</a>
</div>
<p class="date">Sep 14, 2023</p>
<div class="article__authors authors">
<div>
<p class="meta">by</p>
<ul class="no-style authors">
<li data-id="author-Jacob-Scott">
<p class="meta author__bio">
<a href="/profile/Jacob-Scott/" class="avatar author__avatar" aria-label="Jacob Scott"></a>
<span class="author__name">
<a href="/profile/Jacob-Scott/" class="author__link">Jacob Scott</a>
</span>
</p>
</li>
</ul>
</div>
</div>
<div class="ads__area">
<script type="text/javascript">
var uriMapping = "presentations";
var showVcr = "false";
var fillWithVcr = "true";
var sponsorshipsJson = "{&quot;links&quot;:[{&quot;styleName&quot;:&quot;pdf&quot;,&quot;style&quot;:&quot;PDF&quot;,&quot;text&quot;:&quot;The Practical Agentic Coding Playbook&quot;,&quot;id&quot;:&quot;18089bbe-8e7c-4b03-a6ef-ca191b8d102e&quot;,&quot;target&quot;:&quot;https://www.infoq.com/vendorcontent/show.action?vcr=430ffe46-9047-4739-a817-b7d64d070721&amp;utm_source=infoq&amp;utm_medium=VCR&amp;utm_campaign=vcr_fixed_link&quot;,&quot;active&quot;:true}]}";
var sponsoredLinks = $.parseJSON($("<div/>").html(sponsorshipsJson).text()).links;
var numberOfSponsoredVcrIds = sponsoredLinks != null ? sponsoredLinks.length : 0;
var maxItems = 5 - numberOfSponsoredVcrIds;
var intervalVcrSponsorship = setInterval(function() {
if (window.vcrsLoaded) {
clearInterval(intervalVcrSponsorship);
if(showVcr || fillWithVcr) {
if(fillWithVcr) {
for(var index in window.vcrList) {
if(VCR.isVcrSponsored(sponsoredLinks, window.vcrList[index])) {
VCR.addToExcludedList(window.vcrList[index]);
}
}
}
var vcrs = VCR.getByTopicsAndCommunities(window.vcrList, topicIds, communityIds, maxItems, false, null);
if (vcrs != null && vcrs.length > 0 || (sponsoredLinks != null && sponsoredLinks.length > 0)) {
VCR.addToExcludedList(vcrs);
var $widget = jQuery('.relatedVendor');
getCommonElementsForPresentationsWithTranscripts(vcrs, uriMapping, "RIGHT_BAR_RVC");
$widget.css("display", "block");
} else {
var $widget = jQuery('.relatedVendor');
$widget.removeClass("f_rvcbox");
}
}
window.contentVcrFinished = true;
// search for infoq.event.on("contentVcrFinished",... to see how/where it is used
infoq.event.trigger("contentVcrFinished");
}
}, 200);
</script>
<input type="hidden" name="" value="1893" id="cont_item_primary_topic"/>
<div class="widget relatedVendor"
style="display: block"
>
<h4 class="widget__heading">Related Sponsors</h4>
<ul data-tax="prsp" data-horizontal="true" data-size="small"
class="prsp__items no-style cards showImageFirst">
<div class="f_rvcList"></div>
<li class="book">
<div class="book__info">
<h4 class="book__title">
<a href="/url/f/18089bbe-8e7c-4b03-a6ef-ca191b8d102e/" rel="nofollow">
The Practical Agentic Coding Playbook
</a>
</h4>
</div>
</li>
</ul>
<ul class="related-prsp" jsh="{&quot;topic&quot;:&quot;QCon Software Development Conference&quot;,&quot;id&quot;:&quot;12605306-ee86-4a5c-bc22-ab8b965bfc4a&quot;,&quot;title&quot;:&quot;Moderne - Architect Influence Program 08/11/2026 - 11/11/2026&quot;}">
<h4 class="widget__heading">Related Sponsor</h4>
<a href="/url/f/66abda2e-0d1f-4030-92f5-2d460e845635/" target="_blank" rel="nofollow">
<img loading="lazy" src="https://imgopt.infoq.com//fit-in/250x380/filters:quality(100)/filters:no_upscale()/sponsorship/topic/12605306-ee86-4a5c-bc22-ab8b965bfc4a/ModerneLogoMicrosite-1786453474094.png"/>
</a>
<p style="clear: both; padding: 10px 0 0 0;"><b>Automated code transformation at scale. Fix vulnerabilities, migrate frameworks, and modernize legacy code across every repo. <a href="/url/f/b66b8015-fc94-4daf-88dc-691741225dd6/" target="_blank" rel="nofollow">Try Moderne Free</a>.</b></p>
</ul>
</div>
<script type="text/javascript">
window.finishedRightbarVcr = false;
var whitepaperVcrsJson = null;
var topicSponsorshipJson = "{&quot;iconLink&quot;:&quot;/url/f/66abda2e-0d1f-4030-92f5-2d460e845635/&quot;,&quot;iconHref&quot;:&quot;https://imgopt.infoq.com//fit-in/275x500/filters:quality(100)/filters:no_upscale()/sponsorship/topic/12605306-ee86-4a5c-bc22-ab8b965bfc4a/ModerneLogoMicrosite-1786453474094.png&quot;,&quot;id&quot;:&quot;44704352-e094-4805-9d0b-c9675f61311a&quot;}";
var vcrOptionalListJson = null;
/* do not delete these two, as they are used further in the code */
var contentDatetimeFormat='MMM dd, yyyy';
var contentUriMapping="presentations";
JSi18n.relatedRightbar_relatedContent='Related Content';
JSi18n.relatedRightbar_sponsoredContent='Related Sponsors';
JSi18n.relatedRightbar_sponsoredBy='Sponsored by';
var topicIds = "6896,6724,593,4910,1259";
var communityIds = "1893";
var company = "Moderne";
// this event is fired by frontend once all the necessary things have been done(mobile display, moving vcr boxes around when needed...)
var canStartTrackingCustomRightbar = false;
infoq.event.on('loaded', function(e) {
canStartTrackingCustomRightbar = true;
});
var intervalRightbar = setInterval(function() {
if (window.vcrsLoaded) {
clearInterval(intervalRightbar);
if(company != null && company != "") {
whitepaperVcrsJson = VCR.filterByCompany(company, window.vcrList);
}
vcrOptionalListJson = VCR.getByTopicsAndCommunities(window.vcrList, topicIds, communityIds, 20, true, null);
var adsArea = $('.ads__area');
// 1. display whitepaperVcrs
var topicSponsorship = $.parseJSON($("<div/>").html(topicSponsorshipJson).text());
var whitepaperVcrItems = $.parseJSON($("<div/>").html(JSON.stringify(whitepaperVcrsJson)).text());
var index = 0;
var hasWhitepaper = whitepaperVcrItems !== null && whitepaperVcrItems.length > 0;
if (hasWhitepaper) {
index++;
var whitepaperDiv = getRightbarCustomVcrWidget(whitepaperVcrItems, index, topicSponsorship, "transcriptsright", 1);
$(whitepaperDiv).addClass('prspContent_side');
$(whitepaperDiv).removeClass('box');
$(whitepaperDiv).find('a.book__image img').addClass("book__cover");
adsArea.append(whitepaperDiv);
}
// 2. repeat the "VCR OPTIONAL box as many times as possible, but not more than 5 times"
var items = $.parseJSON($("<div/>").html(JSON.stringify(vcrOptionalListJson)).text());
var minimumBoxHeight = 2000;
var availableSpace = $('.aside').height() - $('.relatedVendor').height();
var numberOfBoxes = Math.floor(availableSpace / minimumBoxHeight);
if (numberOfBoxes > 5) {
numberOfBoxes = 5;
}
for (var i = 0; i<numberOfBoxes; i++) {
index++;
var relatedVcrDiv = getRightbarCustomVcrWidget(items, index, null, "transcriptsright", 1);
$(relatedVcrDiv).addClass('prspContent_side');
$(relatedVcrDiv).removeClass('box');
$(relatedVcrDiv).find('a.book__image img').addClass("book__cover");
adsArea.append(relatedVcrDiv);
}
window.finishedRightbarVcr = true;
}
}, 200);
// these two events can happen one before another async(no precedence any can be first or second). Make sure tracking starts when both happened
var intervalTrackingRightbar = setInterval(function() {
if(canStartTrackingCustomRightbar && window.finishedRightbarVcr){
clearInterval(intervalTrackingRightbar);
VCR.doTrackingCustomRightbarForPresentations();
}
}, 200);
</script>
</div>
</div>
<div class="widget article__fromTopic topics">
<div class="widget__head related__for-topic" data-id="6043" data-trk-ref="content_primary_topic">
<h4 class="heading related__heading">
This content is in the <a href='/Devops/'>DevOps</a> topic
</h4>
</div>
<h5 class="heading related__inline">Related Topics:</h5>
<ul class="no-style topics related__topics topics__small" data-trk-ref="content_related_topic">
<li data-id="6043">
<a href="/Devops/" class="button related__topic button__small button__black">DevOps</a>
</li>
<li data-id="18387">
<a href="/qcon-plus-november-2022/" class="button related__topic button__small button__black">QCon Plus November 2022</a>
</li>
<li data-id="18198">
<a href="/qcon-plus/" class="button related__topic button__small button__black">QCon Plus</a>
</li>
<li data-id="597">
<a href="/qcon/" class="button related__topic button__small button__black">QCon Software Development Conference</a>
</li>
<li data-id="16293">
<a href="/incident-reponse/" class="button related__topic button__small button__black">Incident Response</a>
</li>
<li data-id="4454">
<a href="/Failure/" class="button related__topic button__small button__black">Failure</a>
</li>
</ul>
</div>
<input type="hidden" name="" value="1893" id="cont_item_primary_topic"/>
<script type="text/javascript">
$(document).ready(function() {
$.ajax({
url: "/api/recommendationlinks.action",
contentType: "application/x-www-form-urlencoded; charset=utf-8",
type: 'POST',
data: {
"primaryTopicAlias": "Devops",
"topicIds": "6896,4910,1259",
"title": "How Did It Make Sense at the Time? Understanding Incidents as They Occurred, Not as They are Remembered",
"contentPath": "/presentations/incidents-investigation",
"language": "en"
},
success: displayRelatedEditorial,
async: false
});
});
function displayRelatedEditorial(data) {
$('.related__editorial h4').text("Related Editorial");
if (data && data.length > 0) {
if(data[0].fromEs) {
//change title and tracking params
var box_title="DevOps";
//replace html entity since it conflicts with style
box_title=box_title.replace("&amp;","&");
$('.related__editorial h4').text("Popular in " + box_title);
}
for (var i = 0; i < data.length; i++) {
if (i === 5) {
break;
}
if (data[i].url.indexOf("/presentations/incidents-investigation") !== -1) {
console.log("Removing the current item from list...");
continue;
}
var theLinkURL = data[i].url;
if(!theLinkURL.endsWith("/")) {
theLinkURL = theLinkURL + "/";
}
var link = $('<li><h5 class="rvc__title"><a title="" href="' + theLinkURL + '/">' + data[i].title + '</a></h5></li>');
$('.related__editorial ul').append(link);
}
$('.related__editorial').show();
displayWidget = true;
}else{
$('.related__editorial').parent("li").remove();
}
if(displayWidget==true){
$('.related__group').attr("data-cols", $('.related__group').find(">li").length);
$('.related__group').css("display", "flex");
}
}
</script>
<ul class="no-style related__group nocontent cards">
<li>
<div class="related__editorial">
<h4 class="heading">Related Editorial</h4>
<ul></ul>
</div>
</li>
<li class="bg-gray">
<div class="related__prsp">
<h4 class="heading">Popular across InfoQ</h4>
<ul>
<li>
<h5 class="rvc__title">
<a href="/news/2026/09/netflix-flink-autoscaler/" class="rvc__link">
Netflix Moves toward Open Source Flink Autoscaler for 30,000+ Streaming Jobs
</a>
</h5>
</li>
<li>
<h5 class="rvc__title">
<a href="/news/2026/09/java-news-roundup-aug31-2026/" class="rvc__link">
Java News Roundup: TornadoVM 6, JReleaser, LangChain4j, Java Operator SDK, JHipster, Yupiik Fusion
</a>
</h5>
</li>
<li>
<h5 class="rvc__title">
<a href="/news/2026/09/google-mantis-vulnerability-scan/" class="rvc__link">
Google Mantis: an Agentic Vulnerability Scanning Harness for Reducing False Positives
</a>
</h5>
</li>
<li>
<h5 class="rvc__title">
<a href="/news/2026/09/blume-docs-ai/" class="rvc__link">
Blume: Zero-Config Docs Framework That Turns a Markdown Folder into an AI-Ready Website
</a>
</h5>
</li>
<li>
<h5 class="rvc__title">
<a href="/news/2026/09/cern-debian-infra/" class="rvc__link">
CERN Renounces RHEL in Favor of Debian for its Accelerator Controls Infrastructure
</a>
</h5>
</li>
<li>
<h5 class="rvc__title">
<a href="/podcasts/personality-over-skillset/" class="rvc__link">
Personality Over Skillset: How Adam Wachtel Builds Engineering Teams
</a>
</h5>
</li>
</ul>
</div>
</li>
</ul>
</article>
</div>
</section>
</div>
<div id="imgPreload"></div>
<script type="text/javascript">
// global vars that can be used for this page, use this section to add more.
var contentTitle = "How Did It Make Sense at the Time? Understanding Incidents as They Occurred, Not as They are Remembered",
contentPath = "/presentations/incidents-investigation",
contentUUID = "bddf3dc8-0bd3-4a3b-80a7-2e1468b300f3",
authorUserCSVIds = "126638430";
</script>
<script type="text/javascript">
// needed for starting download after IDP login, processing starts after frontend modules are loaded
infoq.event.on("loaded", function(){
if(loggedIn){
var href = window.location.href;
if(href.indexOf("#downloadPdf") != -1){
//window.location.href = href.substring(0, href.indexOf('#'));
$('#slides').click();
} else if(href.indexOf("#downloadPresentationMp3") != -1){
//window.location.href = href.substring(0, href.indexOf('#'));
$('#mp3').click();
}
}
});
P.c(false, 'p', isWideScreen, 'https://cdn.infoq.com/statics_s1_20260910111632/styles/static/images/logo/logo_scrubber_16_9.jpg', 'https://cdn.infoq.com/statics_s1_20260910111632/styles/static/images/logo/logo_scrubber_4_3.jpg');
//wait for the player to be ready
document.getElementById("video").addEventListener('loadeddata', function() {
//check if we are requested to jump to a specific time in the video
var t = CommonUtils.getQueryParameterByName("t");
if(t !== null && t.length <= 9) {
SlideSynchronizer.start();
P.seekPlayerTime(t, true);
}
}, false);
</script>
</main>
<footer class="footer ">
<section data-nosnippet class="section container">
<div class="container__inner">
<ul data-cols="5" class="no-style columns boxes topic__boxes">
<li class="development">
<div class="box__header">
<a class="t_all_footer_more-boxes-header" href="/development/">Development</a>
</div>
<div class="box__content">
<ul class="no-style box__list small">
<li>
<h5><a class="t_all_footer_more-boxes-item" href="/news/2026/09/tinygo-devkit/" title="Advancing Embedded Go: Recoverable Panics, UEFI, Radio and Hardware Dev Kit">Advancing Embedded Go: Recoverable Panics, UEFI, Radio and Hardware Dev Kit</a></h5>
</li>
<li>
<h5><a class="t_all_footer_more-boxes-item" href="/news/2026/09/riscv-cpython/" title="CPython Officially Adds RISC-V Support as a Tier 3 Platform">CPython Officially Adds RISC-V Support as a Tier 3 Platform</a></h5>
</li>
<li>
<h5><a class="t_all_footer_more-boxes-item" href="/news/2026/09/async-lua-neovim/" title="vim.async&#039;s Addition Modernizes Neovim&amp;rsquo;s Async Architecture for Better Stability">vim.async's Addition Modernizes Neovim&rsquo;s Async Architecture for Better Stability</a></h5>
</li>
</ul>
</div>
</li>
<li class="architecture-design">
<div class="box__header">
<a class="t_all_footer_more-boxes-header" href="/architecture-design/">Architecture &amp; Design</a>
</div>
<div class="box__content">
<ul class="no-style box__list small">
<li>
<h5><a class="t_all_footer_more-boxes-item" href="/news/2026/09/netflix-conductor-4-workflow/" title="Netflix Reworks Conductor for 420 Million Monthly Workflow Executions and 10X Larger Workflows">Netflix Reworks Conductor for 420 Million Monthly Workflow Executions and 10X Larger Workflows</a></h5>
</li>
<li>
<h5><a class="t_all_footer_more-boxes-item" href="/news/2026/09/meta-organizational-agents/" title="Meta&#039;s Recipe for Building Agents as &amp;quot;Organizational Second Brains&amp;quot;">Meta's Recipe for Building Agents as &quot;Organizational Second Brains&quot;</a></h5>
</li>
<li>
<h5><a class="t_all_footer_more-boxes-item" href="/news/2026/09/netflix-flink-autoscaler/" title="Netflix Moves toward Open Source Flink Autoscaler for 30,000+ Streaming Jobs">Netflix Moves toward Open Source Flink Autoscaler for 30,000+ Streaming Jobs</a></h5>
</li>
</ul>
</div>
</li>
<li class="culture-methods">
<div class="box__header">
<a class="t_all_footer_more-boxes-header" href="/culture-methods/">Culture &amp; Methods</a>
</div>
<div class="box__content">
<ul class="no-style box__list small">
<li>
<h5><a class="t_all_footer_more-boxes-item" href="/news/2026/09/autonomous-software-teams/" title="Beyond Autonomous Teams in Software Product Development">Beyond Autonomous Teams in Software Product Development</a></h5>
</li>
<li>
<h5><a class="t_all_footer_more-boxes-item" href="/presentations/rust-refactoring/" title="Accelerating Performance by Incrementally Integrating Rust Into Existing Codebase">Accelerating Performance by Incrementally Integrating Rust Into Existing Codebase</a></h5>
</li>
<li>
<h5><a class="t_all_footer_more-boxes-item" href="/podcasts/personality-over-skillset/" title="Personality Over Skillset: How Adam Wachtel Builds Engineering Teams">Personality Over Skillset: How Adam Wachtel Builds Engineering Teams</a></h5>
</li>
</ul>
</div>
</li>
<li class="ai-ml-data-eng">
<div class="box__header">
<a class="t_all_footer_more-boxes-header" href="/ai-ml-data-eng/">AI, ML &amp; Data Engineering</a>
</div>
<div class="box__content">
<ul class="no-style box__list small">
<li>
<h5><a class="t_all_footer_more-boxes-item" href="/news/2026/09/nvidia-pair-ai-task-router/" title="NVIDIA Personal AI Router Distributes AI Tasks across Local Compute">NVIDIA Personal AI Router Distributes AI Tasks across Local Compute</a></h5>
</li>
<li>
<h5><a class="t_all_footer_more-boxes-item" href="/news/2026/09/linkedin-ai-multi-teacher/" title="How LinkedIn Trains AI Job Search 8x Faster with Multi-Teacher Distillation">How LinkedIn Trains AI Job Search 8x Faster with Multi-Teacher Distillation</a></h5>
</li>
<li>
<h5><a class="t_all_footer_more-boxes-item" href="/news/2026/09/openai-gpt6-astra/" title="OpenAI Releases GPT-6 Astra for Coding and Computer Use">OpenAI Releases GPT-6 Astra for Coding and Computer Use</a></h5>
</li>
</ul>
</div>
</li>
<li class="devops">
<div class="box__header">
<a class="t_all_footer_more-boxes-header" href="/devops/">DevOps</a>
</div>
<div class="box__content">
<ul class="no-style box__list small">
<li>
<h5><a class="t_all_footer_more-boxes-item" href="/news/2026/09/terraform-aws-provider-6-62/" title="Terraform AWS Provider Continues Rapid Expansion as AWS Infrastructure Becomes More Complex">Terraform AWS Provider Continues Rapid Expansion as AWS Infrastructure Becomes More Complex</a></h5>
</li>
<li>
<h5><a class="t_all_footer_more-boxes-item" href="/news/2026/09/observability-ai-agents/" title="Session Traces and Cost Controls Help Diagnose AI Agent Failures">Session Traces and Cost Controls Help Diagnose AI Agent Failures</a></h5>
</li>
<li>
<h5><a class="t_all_footer_more-boxes-item" href="/news/2026/09/hashicorp-packer-verification/" title="HashiCorp Packer 1.16 Adds Native SLSA Provenance Generation and Verification for Machine Images">HashiCorp Packer 1.16 Adds Native SLSA Provenance Generation and Verification for Machine Images</a></h5>
</li>
</ul>
</div>
</li>
</ul>
</div>
</section>
<section data-nosnippet class="container section section__newsletter">
<div class="columns container__inner">
<div class="newsletter" data-col="1/2"
id="infoq-nl"
>
<h2 class="heading">
<strong>The InfoQ</strong> Newsletter
</h2>
<p class="intro">A round-up of last week&#x2019;s content on InfoQ sent out every Tuesday. Join a community of over 250,000 senior developers.
<a target="_blank" href="https://assets.infoq.com/newsletter/regular/en/newsletter_sample/newsletter_sample.html">View an example</a>
</p>
<ul class="newsletter__features">
<li>Get a quick overview of content published on a variety of innovator and early adopter technologies</li>
<li>Learn what you don&#x2019;t know that you don&#x2019;t know</li>
<li>Stay up to date with the latest information from the topics you are interested in</li>
</ul>
<div class="newsletter__subscribe">
<form class="form gdpr" name="footerNewsletterForm" id="footerNewsletterForm" action="#" onsubmit="footerNewsletter.saveSubscription(); return false;">
<div class="field newsletter__mail input__text input__no-label input__medium email">
<label for="email-newsletter-infoq" class="label field__label">Enter your e-mail address</label>
<input id="email-newsletter-infoq" name="footerNewsletterEmail" placeholder="Enter your e-mail address" class="input field__input" type="email"/>
<input type="text" name="emailH" id="input_email_h" aria-required="false" style="display:none !important" tabindex="-1" autocomplete="off"/>
<input type="hidden" id="fnt" name="fnt" value="cNsezpOXXVkTs2xp"/>
<input type="hidden" id="footerNewsletterType" name="footerNewsletterType" value="regular"/>
<input type="hidden" id="cmpi" name="cmpi" value="1"/>
</div>
<div class="hidden">
<span class="input__select field country">
<label for="input-simple-newsletter-country" class="label field__label">Select your country</label>
<select id="input-simple-newsletter-country" class="select field__input">
<option value="" class="select__option">Select a country</option>
</select>
<p class="input__message field__desc"></p>
</span>
<span class="input__checkbox field hidden">
<input type="checkbox" id="gdpr-consent-simple-nl">
<label for="gdpr-consent-simple-nl" class="label"><span>I consent to InfoQ.com handling my data as explained in this <a href="https://www.infoq.com/privacy-notice">Privacy Notice</a>.</span></label>
</span>
</div>
<input type="submit" role="button" value="Subscribe" class="button button__medium button__red" onclick="return footerNewsletter.validateEmail('Invalid email address');"/>
</form>
<p class="meta">
<a href="/privacy-notice/" target="_blank">We protect your privacy.</a>
</p>
<span class="success" style="display:none;" id="footerNewsletterMessage"></span>
</div>
<script type="text/javascript">
var footerNewsletter = new Newsletter('Enter your e-mail address',
'email-newsletter-infoq', 'footerNewsletterType','footerNewsletterMessage', 'fnt', 'input_email_h', 'input-simple-newsletter-country', 'cmpi','footer_except_homepage');
</script>
</div>
<div data-col="1/2" data-bg="certification" class="event__container" style="padding-right: 20px;">
<a href="https://certification.qconferences.com/?utm_source=infoq&amp;utm_medium=referral&amp;utm_campaign=largefooterad_onlinecohorts26" target="_blank" class="qconplus__events-slider" style="">
<div>
<div class="logo-certification"></div>
</div>
<p class="intro" style="margin-bottom: 0;color: white !important;">
<b>InfoQ Online Certification Programs</b>
<br>For Senior Engineers, Architects, and Technical Leaders
</p>
<ul style="margin-bottom: 0;">
<li style="color: white !important;"><b>Architect</b> with Luca Mezzalira | September 14</li>
<li style="color: white !important;"><b>Engineering Leadership</b> with Michelle Brush | September 18</li>
<li style="color: white !important;"><b>AI-Assisted Engineering</b> with Zichuan Xiong & Premanand Chandrasekaran | September 18</li>
<li style="color: white !important;"><b>AI Security &amp; Privacy Engineering</b> with Katharine Jarmul | October 14</li>
</ul>
<br>
<p class="intro" style="margin-bottom: 0;color: white !important;">As your role becomes more senior, the work changes. You're no longer just implementing decisions; you're shaping the systems, trade-offs, and technical direction other teams depend on.<br>These 5-week online programs give you a structured way to work through real decisions from your current role with senior peers from other companies.</p>
<strong class="button button__green cta__button">RESERVE YOUR PLACE</strong>
<small style="color: white;"><br>Live online. 4 hours a week, for 5 weeks.</small>
</a>
</div>
</div>
</section>
<section data-nosnippet class="section container footer__subfooter align__left">
<div class="container__inner columns">
<div data-col="1/4" class="columns footer__links-wrap">
<div class="footer__links">
<a href="/" class="nuxt-link-exact-active active" title="Home">Home</a>
<a href="/reginit.action" class="emphasis" title="Create account">Create account</a>
<button aria-label="Log In" class="login" data-ref="mainLogin">Log In</button>
<a rel="noreferrer noopener" href="http://qconferences.com/" target="_blank" title="QCon Conferences">QCon Conferences</a>
<a rel="noreferrer noopener" href="https://events.infoq.com/" target="_blank">Events</a>
<a href="/write-for-infoq/" title="Write for InfoQ">Write for InfoQ</a>
<a href="/infoq-editors/" title="InfoQ Editors">InfoQ Editors</a>
<a href="/about-infoq/" title="About InfoQ">About InfoQ</a>
<a href="https://c4media.com/" target="_blank" title="About C4Media">About C4Media</a>
<a rel="noreferrer noopener" href="https://get.infoq.com/infoq-mediakit/" title="Media Kit" target="_blank">
Media Kit
</a>
<a href="https://devmarketing.c4media.com/?utm_source=infoq" title="InfoQ Developer Marketing Blog" target="_blank">InfoQ Developer Marketing Blog</a>
<a rel="noreferrer noopener" href="https://c4media.com/diversity" title="Diversity" target="_blank">Diversity</a>
</div>
</div>
<div data-col="1/4" class="events__list">
<h4 class="heading footer__heading">Events</h4>
<ul class="qcons__list no-style">
<li><span class="icon event__type conference"></span>
<div class="qcon__detail">
<h5 class="heading">
<a rel="noreferrer noopener" href="https://certification.qconferences.com/architecture?utm_source=infoq&utm_medium=referral&utm_campaign=footer_onlinecohortarchitecture26" target="_blank">Online InfoQ Architect Certification</a>
</h5>
<span class="meta date">September 14, 2026</span>
</div>
</li>
<li><span class="icon event__type conference"></span>
<div class="qcon__detail">
<h5 class="heading">
<a rel="noreferrer noopener" href="https://certification.qconferences.com/ai-assisted-engineering?utm_source=infoq&utm_medium=referral&utm_campaign=footer_onlinecohortaiassistedengineering26" target="_blank">Online InfoQ AI-Assisted Engineering Certification</a>
</h5>
<span class="meta date">September 18, 2026</span>
</div>
</li>
<li><span class="icon event__type conference"></span>
<div class="qcon__detail">
<h5 class="heading">
<a rel="noreferrer noopener" href="https://certification.qconferences.com/ai-security-privacy?utm_source=infoq&utm_medium=referral&utm_campaign=footer_onlinecohortaisecurity26" target="_blank">Online InfoQ AI Security & Privacy Engineering Program</a>
</h5>
<span class="meta date">October 14, 2026</span>
</div>
</li>
<li><span class="icon event__type conference"></span>
<div class="qcon__detail">
<h5 class="heading">
<a rel="noreferrer noopener" href="https://qconsf.com/?utm_source=infoq&utm_medium=referral&utm_campaign=footer_qsf26" target="_blank">QCon San Francisco</a>
</h5>
<span class="meta date">November 16-20, 2026</span>
</div>
</li>
<li><span class="icon event__type conference"></span>
<div class="qcon__detail">
<h5 class="heading">
<a rel="noreferrer noopener" href="https://newyork.qcon.ai/?utm_source=infoq&utm_medium=referral&utm_campaign=footer_qainy26" target="_blank">QCon AI New York</a>
</h5>
<span class="meta date">December 15-16, 2026</span>
</div>
</li>
<li><span class="icon event__type conference"></span>
<div class="qcon__detail">
<h5 class="heading">
<a rel="noreferrer noopener" href="https://qconlondon.com/?utm_source=infoq&utm_medium=referral&utm_campaign=footer_qlondon27" target="_blank">QCon London 2027</a>
</h5>
<span class="meta date">April 13-16, 2027</span>
</div>
</li>
</ul>
</div>
<div data-col="1/4" class="footer__social-wrap">
<h4 class="heading text-left footer__heading">Follow us on </h4>
<div class="social__links columns social__links__row">
<a href="https://www.youtube.com/infoq"><span class="icon icon__large icon__social icon__youtube"></span><div><span class="social__count">Youtube</span><span class="social__followers">232K Followers</span></div></a>
<a href="http://www.linkedin.com/company/infoq"><span class="icon icon__large icon__social icon__linkedin"></span><div><span class="social__count">Linkedin</span><span class="social__followers">26K Followers</span></div></a>
<a rel="noreferrer noopener" href="https://www.instagram.com/infoqdotcom/" target="_blank"><span class="icon icon__large icon__social icon__instagram"></span><div><span class="social__count">Instagram</span><span class="social__followers">New</span></div></a>
<a href="#" id="footerNewsletterRssLink"><span class="icon icon__large icon__social icon__rss"></span><div><span class="social__count">RSS</span><span class="social__followers">19K Readers</span></div></a>
<a rel="noreferrer noopener" href="http://twitter.com/infoq" target="_blank"><span class="icon icon__large icon__social icon__twitter"></span><div><span class="social__count">X</span><span class="social__followers">57.1k Followers</span></div></a>
<a rel="noreferrer noopener" href="https://www.facebook.com/InfoQ-75911537320" target="_blank"><span class="icon icon__large icon__social icon__fb"></span><div><span class="social__count">Facebook</span><span class="social__followers">21K Likes</span></div></a>
<a rel="noreferrer noopener" href="https://bsky.app/profile/infoq.com" target="_blank"><span class="icon icon__large icon__social icon__bluesky"></span><div><span class="social__count">Bluesky</span><span class="social__followers">New</span></div></a>
</div>
</div>
<div data-col="1/4" class="footer__stayin-wrap">
<h4 class="heading text-left footer__heading">Stay in the know</h4>
<div class="stayIn_panel_container">
<a href="/podcasts/" class="stayIn_panel" target="_blank" rel="noreferrer noopener"><span>The InfoQ Podcast</span><picture><source srcset="https://imgopt.infoq.com/eyJidWNrZXQiOiAiYXNzZXRzLmluZm9xLmNvbSIsImtleSI6ICJ3ZWIvZm9vdGVyL2luZm9xLXBvZGNhc3QuanBnIiwiZWRpdHMiOiB7IndlYnAiOiB7ICJxdWFsaXR5Ijo4MH19fQ==" type="image/webp"><source srcset="https://imgopt.infoq.com/eyJidWNrZXQiOiAiYXNzZXRzLmluZm9xLmNvbSIsImtleSI6ICJ3ZWIvZm9vdGVyL2luZm9xLXBvZGNhc3QuanBnIiwiZWRpdHMiOiB7ImpwZWciOiB7ICJxdWFsaXR5Ijo4MH19fQ==" type="image/webp"><img src="https://imgopt.infoq.com/eyJidWNrZXQiOiAiYXNzZXRzLmluZm9xLmNvbSIsImtleSI6ICJ3ZWIvZm9vdGVyL2luZm9xLXBvZGNhc3QuanBnIiwiZWRpdHMiOiB7ImpwZWciOiB7ICJxdWFsaXR5Ijo4MH19fQ==" loading="lazy" width="65px" height="64px" alt="The InfoQ Podcast Logo - Stay in the know"></picture></a>
<a href="/podcasts/#engineering_culture" class="stayIn_panel" target="_blank" rel="noreferrer noopener"><span>Engineering Culture Podcast</span><picture><source srcset="https://imgopt.infoq.com/eyJidWNrZXQiOiAiYXNzZXRzLmluZm9xLmNvbSIsImtleSI6ICJ3ZWIvZm9vdGVyL2luZm9xLXBvZGNhc3QtZW5naW5lZXJpbmctY3VsdHVyZS5qcGciLCJlZGl0cyI6IHsid2VicCI6IHsgInF1YWxpdHkiOjgwfX19" type="image/webp"><source srcset="https://imgopt.infoq.com/eyJidWNrZXQiOiAiYXNzZXRzLmluZm9xLmNvbSIsImtleSI6ICJ3ZWIvZm9vdGVyL2luZm9xLXBvZGNhc3QtZW5naW5lZXJpbmctY3VsdHVyZS5qcGciLCJlZGl0cyI6IHsianBlZyI6IHsgInF1YWxpdHkiOjgwfX19" type="image/webp"><img src="https://imgopt.infoq.com/eyJidWNrZXQiOiAiYXNzZXRzLmluZm9xLmNvbSIsImtleSI6ICJ3ZWIvZm9vdGVyL2luZm9xLXBvZGNhc3QtZW5naW5lZXJpbmctY3VsdHVyZS5qcGciLCJlZGl0cyI6IHsianBlZyI6IHsgInF1YWxpdHkiOjgwfX19" loading="lazy" width="65px" height="64px" alt="Engineering Culture Podcast Logo - Stay in the knoww"></picture></a>
<a href="/software-architects-newsletter/" class="stayIn_panel" target="_blank" rel="noreferrer noopener"><span>The Software Architects' Newsletter</span><picture><source srcset="https://imgopt.infoq.com/eyJidWNrZXQiOiAiYXNzZXRzLmluZm9xLmNvbSIsImtleSI6ICJ3ZWIvZm9vdGVyL2luZm9xLWFyY2hpdGVjdC1uZXdzbGV0dGVyLmpwZyIsImVkaXRzIjogeyJ3ZWJwIjogeyAicXVhbGl0eSI6ODB9fX0=" type="image/webp"><source srcset="https://imgopt.infoq.com/eyJidWNrZXQiOiAiYXNzZXRzLmluZm9xLmNvbSIsImtleSI6ICJ3ZWIvZm9vdGVyL2luZm9xLWFyY2hpdGVjdC1uZXdzbGV0dGVyLmpwZyIsImVkaXRzIjogeyJqcGVnIjogeyAicXVhbGl0eSI6ODB9fX0=" type="image/webp"><img src="https://imgopt.infoq.com/eyJidWNrZXQiOiAiYXNzZXRzLmluZm9xLmNvbSIsImtleSI6ICJ3ZWIvZm9vdGVyL2luZm9xLWFyY2hpdGVjdC1uZXdzbGV0dGVyLmpwZyIsImVkaXRzIjogeyJqcGVnIjogeyAicXVhbGl0eSI6ODB9fX0=" loading="lazy" width="65px" height="64px" alt="The Software Architects' Newsletter Logo - Stay in the know"></picture></a>
</div>
</div>
</div>
</section>
<section data-nosnippet class="container footer__bottom section white align__left">
<div class="container__inner columns">
<div data-col="2/3" class="column">
<div class="footer__contact contact columns">
<span data-col="1/6">
General Feedback
<a href="mailto:feedback@infoq.com">feedback@infoq.com</a>
</span>
<span data-col="1/6">
Advertising
<a href="mailto:sales@infoq.com">sales@infoq.com</a>
</span>
<span data-col="1/6">
Editorial
<a href="mailto:editors@infoq.com">editors@infoq.com</a>
</span>
<span data-col="1/6">
Marketing
<a href="mailto:marketing@infoq.com">marketing@infoq.com</a>
</span>
</div>
</div>
<div class="column" data-col="1/3">
<p class="footer__more">
InfoQ.com and all content copyright &#169; 2006-2026 C4Media Inc.<br/>
<a href="/privacy-notice" target="_blank">Privacy Notice</a>, <a href="/terms-and-conditions " target="_blank">Terms And Conditions</a>, <a href="/cookie-policy " target="_blank">Cookie Policy</a>
</p>
</div>
</div>
</section>
</footer>
<!-- ####### SITE END ######### -->
</div>
<div class="intbt">
<a href="/int/bt/" title="bt">BT</a>
</div>
<script type="text/javascript">
$.when(humanDetectionAsync()).then(
function(status) {
$.getScript("/scripts/__hd.ifq?hdt=cNsezpOXXVkTs2xp&ha=" + status);
}
);
</script>
<script type="text/javascript">
var pageFullyLoaded = false;
// this event is fired by frontend once all the necessary things have been done(mobile display, moving vcr boxes around when needed...)
infoq.event.on('loaded', function(e) {
pageFullyLoaded = true;
});
infoq.event.on('pageWidthChanged', function(e) {
// re-execute tracking vcr impressions when this event happens (it only happens when elements are added/removed from page)
// doTrackVcrImpressions takes into account the data-trk-impr="true" if =false the element was already tracked.
// this is needed when switching from mobile to desktop or when layout on mobile changes and desktop version is displayed. New elements become visible.
Tracker.safeExec(Tracker.doTrackVcrImpressions);
// these 2 need to be called also because we might be on a content page. In case we are not nothing happens
VCR.doTrackingCustomRightbar();
VCR.doTrackingCustomRightbarForPresentations()
});
//check to see if error page
if(window.device !== undefined) {
var intervalImpressions = setInterval(function() {
var shouldTrack = false;
// no vcr widgets on index pages
if(window.isIndexPage) {
if(window.sponsoredPodcastDone === undefined || window.sponsoredPodcastDone) {
shouldTrack = true;
}
} else
//on homepage, bottom widget + 2 native widgets
if(InfoQConstants.pageType == "HOMEPAGE" && window.finishedVcrOptional1 && window.finishedRelatedVcr && (window.finishedVcrOptional2 === undefined || window.finishedVcrOptional2)) {
shouldTrack = true;
} else
// rightbar widgets + native widgets + content vcr widgets
if((InfoQConstants.pageType == "NEWS_PAGE" || InfoQConstants.pageType == "ARTICLE_PAGE")
&& ((window.finishedRightbarVcr || window.finishedRightbarVcr === undefined) && window.contentVcrFinished)) {
shouldTrack = true;
} else if ((InfoQConstants.pageType == "PRESENTATION_PAGE")
&& (window.contentVcrFinished || window.contentVcrFinished === undefined)
&& (window.finishedRightbarVcr || window.finishedRightbarVcr === undefined)
) {
shouldTrack = true;
} else
// native widgets + content widgets
if(window.contentVcrFinished && (window.finishedVcrOptional1 || window.finishedVcrOptional1 === undefined)
&& (window.finishedVcrOptional2 || window.finishedVcrOptional2 === undefined)) {
shouldTrack = true;
}
// we start tracking only after the page is fully loaded, frontend signals that they finished everything related to page display.
if(shouldTrack && pageFullyLoaded) {
clearInterval(intervalImpressions);
Tracker.safeExec(Tracker.doTrackVcrImpressions);
// start tracking viewable impressions also only after everything is ready
function callbackRouter(entries, observer) {
var targets = new Array();
entries.forEach(function (entry) {
var target = entry.target;
if (target.dataset.trkView === 'false') return;
if (entry.intersectionRatio > 0) {
target.dataset.trkView = false;
targets.push(target);
}
});
Tracker.doTrackViewableImpressions(targets);
}
var elementsForTrackingViewableImpressions = document.querySelectorAll('[data-trk-view="true"]')
var observer = new IntersectionObserver(callbackRouter, { threshold: 0.3 });
elementsForTrackingViewableImpressions.forEach(observer.observe.bind(observer));
}
}, 500);
}
$(document).ready(function () {
// desktop notifications widget
Tracker.encodeNotificationLinks($(".f_notificationWidget"));
// mobile notifications widget
Tracker.encodeNotificationLinks($(".h_notifications"));
// desktop notifications page
Tracker.encodeNotificationLinks($(".notification-page"));
// mobile notifications page
Tracker.encodeNotificationLinks($(".notifications_page"));
});
</script>
<script type="text/javascript">
if(window.location.hash){
var hash = window.location.hash.substring(1);
if(hash == 'subscribe'){
$('html,body').animate({scrollTop: $('.ftxt3 > .newsletter').offset().top}, 'slow');
}
}
</script>
<script type="text/javascript">
var newsletterSubscriptionURL ='/newsletter/subscribe.action';
DynamicLinks.updateRssLinks('XnLuCjIf6z9BHCGZ6Nd4R76O32258ENr');
ContentSummary.setSelectedTab('en');
//when user enters the main content area show default topics in the topics bar
$("#content-wrapper").mouseenter(function() {
showDefaultTopics();
});
Bookmarks.contentTitle = "How Did It Make Sense at the Time? Understanding Incidents as They Occurred, Not as They are Remembered";
Bookmarks.apiUrl = '/widgets/bookmark.action';
Bookmarks.isContentBookmarked = "false";
</script>
<script type="text/javascript">
var $buoop = {vs:{i:6,f:1,o:10.1,s:1}}
$buoop.ol = window.onload;
$(document).ready(function() {
try {if ($buoop.ol) $buoop.ol();}catch (e) {}
var e = document.createElement("script");
e.setAttribute("type", "text/javascript");
e.setAttribute("src", "https://cdn.infoq.com/statics_s1_20260910111632/scripts/lib/browser-update-org/update.js");
document.body.appendChild(e);
});
</script>
<script>
!function(f,b,e,v,n,t,s)
{if(f.fbq)return;n=f.fbq=function(){n.callMethod?
n.callMethod.apply(n,arguments):n.queue.push(arguments)};
if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0';
n.queue=[];t=b.createElement(e);t.async=!0;
t.src=v;s=b.getElementsByTagName(e)[0];
s.parentNode.insertBefore(t,s)}(window,document,'script',
'https://connect.facebook.net/en_US/fbevents.js');
fbq('init', '842388869148196');
fbq('track', 'PageView');
</script>
<noscript>
<img height="1" width="1" src="https://www.facebook.com/tr?id=842388869148196&ev=PageView&noscript=1"/>
</noscript>
<script type='text/javascript'>
try {
mixpanel.track('page viewed', {
'page name' : document.title,
'url' : window.location.pathname
});
}
catch(err) {
}
</script>
</body>
</html>
<!-- s1 -->