CINXE.COM
Adaptive Responses to Resiliently Handle Hard Problems in Software Operations - InfoQ
<!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);} gtag('config', 'G-VMVPD4D2JY'); //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' }); if((typeof loggedIn != "undefined") && loggedIn){ window.dataLayer.push({'logged_in': 'true'}); } else { window.dataLayer.push({'logged_in': 'false'}); } window.dataLayer.push({'show_queryz': ''}); </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>Adaptive Responses to Resiliently Handle Hard Problems in Software Operations - InfoQ</title> <link rel="canonical" href="https://www.infoq.com/articles/adaptive-responses-resilience-software-operations/"/> <link rel="alternate" href="https://www.infoq.com/articles/adaptive-responses-resilience-software-operations/" hreflang="en"/> <link rel="alternate" href="https://www.infoq.com/articles/adaptive-responses-resilience-software-operations/" 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="© 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_s2_20241119074149/styles/style.css"/> <link rel="stylesheet" type="text/css" media="print" href="https://cdn.infoq.com/statics_s2_20241119074149/styles/print.css"/> <link rel="preload" type="text/css" href="https://cdn.infoq.com/statics_s2_20241119074149/styles/style_en.css" as="style" onload="this.onload=null;this.rel='stylesheet'"> <link rel="preload" href="https://cdn.infoq.com/statics_s2_20241119074149/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_s2_20241119074149/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_s2_20241119074149/styles/style_en.css"/> <link rel="stylesheet" href="https://cdn.infoq.com/statics_s2_20241119074149/styles/icons.css"> <link rel="stylesheet" type="text/css" media="screen" href="https://cdn.infoq.com/statics_s2_20241119074149/styles/style_extra.css"/> </noscript> <link rel="stylesheet" type="text/css" href="https://cdn.infoq.com/statics_s2_20241119074149/styles/fonts/font.css"/> <link rel="shortcut icon" href="https://cdn.infoq.com/statics_s2_20241119074149/favicon.ico" type="image/x-icon" /> <link rel="apple-touch-icon" href="https://cdn.infoq.com/statics_s2_20241119074149/apple-touch-icon.png"/> <script type="text/javascript"> var device='desktop'; var InfoQConstants = {}; InfoQConstants.language = 'en'; InfoQConstants.countryCode = ''; InfoQConstants.pageUrl = (typeof window.location != 'undefined' && window.location && typeof window.location.href != 'undefined' && window.location.href) ? window.location.href : "URL_UNAVAILABLE"; InfoQConstants.cet='roufQ3DkNuc74QpR'; InfoQConstants.userDetectedCountryCode = 'SG'; InfoQConstants.bpadb = 'OvrWEfP8YWBdE7zexpSl'; </script> <script type="text/javascript" src="https://cdn.infoq.com/statics_s2_20241119074149/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> Saved </q>'; JSi18n.bookmark_error='<q style=color:black;> Error </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\":\"126440611\",\"ref\":\"author-Laura-Maguire\",\"url\":\"\/profile\/Laura-Maguire\",\"followedByCurrentUser\":false,\"minibio\":\"Principal Research Engineer\",\"name\":\"Laura Maguire\",\"bio\":\"Her research focuses on what makes modern work challenging. She is particularly interested in supporting jobs that require coping with complexity, managing multiple competing goals, navigating uncertainty, and handling time pressure across human-machine teams. \\r\\n\\r\\nShe is an international keynote speaker, a mentor and advocate for women in STEM. Laura loves learning and sharing knowledge both with colleagues and audiences around the world and across domains to promote greater understandings of everyday work. \",\"followers\":9,\"imgSrc\":\"https:\/\/cdn.infoq.com\/statics_s2_20241119074149\/images\/profiles\/3842eab8f66db1983a0349dcf9fce203.jpg\"},{\"id\":\"62671158\",\"ref\":\"author-Monica-Beckwith\",\"url\":\"\/profile\/Monica-Beckwith\",\"followedByCurrentUser\":false,\"minibio\":\"\",\"name\":\"Monica Beckwith\",\"bio\":\"Java Champion, Monica Beckwith is a Java performance engineer. She currently works on improving OpenJDK's HotSpot VM at Microsoft. Her past experiences include working with Arm, Oracle\/Sun and AMD; optimizing the JVM for server class systems. Monica was voted a JavaOne Rock Star speaker and was the performance lead for Garbage First Garbage Collector (G1 GC). You can follow Monica on twitter @mon_beck\",\"followers\":1704,\"imgSrc\":\"https:\/\/cdn.infoq.com\/statics_s2_20241119074149\/images\/profiles\/QhDv7pXEUK1sdLsYArFmnLxecH4rYhAc.jpg\"},{\"id\":\"45723890\",\"ref\":\"author-Rags-Srinivas\",\"url\":\"\/profile\/Rags-Srinivas\",\"followedByCurrentUser\":false,\"minibio\":\"\",\"name\":\"Rags Srinivas\",\"bio\":\"Raghavan "Rags" Srinivas (@ragss) works as an Architect\/Developer Evangelist goaled with helping developers build highly scalable and available systems. As an OpenStack advocate and solutions architect at Rackspace he was constantly challenged from low level infrastructure to high level application issues. His general focus area is in distributed systems, with a specialization in Cloud Computing and Big Data. He worked on Hadoop, HBase and NoSQL during its early stages. He has spoken on a variety of technical topics at conferences around the world, written for developer portals, conducted and organized Hands-on Labs and taught graduate and online classes in the evening. Rags brings with him over 25 years of hands-on software development and over 15 years of architecture and technology evangelism experience. He has evangelized and influenced the architecture of a number of emerging technology areas. He is also a repeat JavaOne rock star speaker award winner. Rags holds a Masters degree in Computer Science from the Center of Advanced Computer Studies at the University of Louisiana at Lafayette. He likes to hike, run and generally be outdoors but most of all loves to eat.\",\"followers\":254,\"imgSrc\":\"https:\/\/cdn.infoq.com\/statics_s2_20241119074149\/images\/profiles\/t4nyfgw1THkp4wMZ9EZ59RGJx8Hf9Rk8.jpg\"},{\"id\":\"87551248\",\"ref\":\"author-Steef~Jan-Wiggers\",\"url\":\"\/profile\/Steef~Jan-Wiggers\",\"followedByCurrentUser\":false,\"minibio\":\"Cloud Queue Lead Editor\",\"name\":\"Steef-Jan Wiggers\",\"bio\":\"Steef-Jan Wiggers is one of InfoQ's senior cloud editors and works as an Integration Architect at i8c in The Netherlands. His current technical expertise focuses on integration platform implementations, Azure DevOps, and Azure Platform Solution Architectures. Steef-Jan is a regular speaker at conferences and user groups and writes for InfoQ. Furthermore, Microsoft has recognized him as Microsoft Azure MVP for the past fourteen years.\",\"followers\":673,\"imgSrc\":\"https:\/\/cdn.infoq.com\/statics_s2_20241119074149\/images\/profiles\/BhZx03k3Hj0pZVXmTzGqItwZxtJ06oIb.jpeg\"},{\"id\":\"80977916\",\"ref\":\"author-Thomas-Betts\",\"url\":\"\/profile\/Thomas-Betts\",\"followedByCurrentUser\":false,\"minibio\":\"Laureate Application Architect at Blackbaud\",\"name\":\"Thomas Betts\",\"bio\":\"Thomas Betts is the Lead Editor for Architecture and Design at InfoQ, a co-host of the InfoQ Podcast, and a Laureate Software Architect at Blackbaud.\\r\\n\\r\\nFor over two decades, his focus has always been on providing software solutions that delight his customers. He has worked in a variety of industries, including social good, retail, finance, health care, defense and travel.\\r\\n\\r\\nThomas lives in Denver with his wife and son, and they love hiking and otherwise exploring beautiful Colorado.\",\"followers\":942,\"imgSrc\":\"https:\/\/cdn.infoq.com\/statics_s2_20241119074149\/images\/profiles\/pSqI6HrU3k9rmmVjwS34OHG0bOMYiE6a.jpg\"},{\"id\":\"72028228\",\"ref\":\"author-Sergio-De-Simone\",\"url\":\"\/profile\/Sergio-De-Simone\",\"followedByCurrentUser\":false,\"minibio\":\"\",\"name\":\"Sergio De Simone\",\"bio\":\"<b>Sergio De Simone<\/b> is a software engineer. Sergio has been working as a software engineer for over twenty five years across a range of different projects and companies, including such different work environments as Siemens, HP, and small startups. For the last 10+ years, his focus has been on development for mobile platforms and related technologies. He is currently working for BigML, Inc., where he leads iOS and macOS development.\",\"followers\":608,\"imgSrc\":\"https:\/\/cdn.infoq.com\/statics_s2_20241119074149\/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\":\"Renato has extensive experience as a cloud architect, tech lead, and cloud services specialist. Currently, he lives between Berlin and Trieste and works remotely as a principal cloud architect. His primary areas of interest include cloud services and relational databases. He is an editor at InfoQ and a recognized AWS Data Hero. You can connect with him on LinkedIn.\",\"followers\":609,\"imgSrc\":\"https:\/\/cdn.infoq.com\/statics_s2_20241119074149\/images\/profiles\/ptroF8HdI2vWXm0NDaKeS0JdiPxMOAra.jpg\"},{\"id\":\"126464202\",\"ref\":\"author-Johan-Janssen\",\"url\":\"\/profile\/Johan-Janssen\",\"followedByCurrentUser\":false,\"minibio\":\"Architect at ASML\",\"name\":\"Johan Janssen\",\"bio\":\"Architect at ASML, loves to share knowledge mainly around Java. Spoke at conferences such as Devoxx, Oracle Code One, Devnexus, and many more. Assisted conferences by participating in program committees and invented and organized JVMCON. Received the JavaOne Rock Star and Oracle Code One Star awards. Wrote various articles both for digital and printed media. Maintainer of various Java JDK\/JRE packages for Chocolatey with around 100 thousand downloads a month.\",\"followers\":381,\"imgSrc\":\"https:\/\/cdn.infoq.com\/statics_s2_20241119074149\/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\":\"Daniel Bryant is the news manager at InfoQ and the emeritus chair of QCon London. He is also a platform engineer and head of product marketing at Syntasso. Daniel's technical expertise focuses on \u2018DevOps\u2019 tooling, cloud\/container platforms, and microservice implementations. He is a long-time coder and Java Champion who has contributed to several open source projects. Daniel also writes for InfoQ, O\u2019Reilly, and The New Stack and regularly presents at international conferences such as KubeCon, QCon, and JavaOne. In his copious amounts of free time, he enjoys running, reading, and travelling.\",\"followers\":2565,\"imgSrc\":\"https:\/\/cdn.infoq.com\/statics_s2_20241119074149\/images\/profiles\/tSe5dczMaSGtRUm18VkTR2tcF4W3SogA.jpg\"},{\"id\":\"63268344\",\"ref\":\"author-Chris-Swan\",\"url\":\"\/profile\/Chris-Swan\",\"followedByCurrentUser\":false,\"minibio\":\"Engineer, Atsign\",\"name\":\"Chris Swan\",\"bio\":\"Chris Swan is an Engineer at <a href=\\\"https:\/\/atsign.com\\\" rel=\\\"nofollow\\\">Atsign<\/a>, building the atPlatform, a technology that is putting people in control of their data and removing the frictions and surveillance associated with today\u2019s Internet. He was previously a Fellow at DXC Technology where he held various CTO roles. Before that he held CTO and Director of R&D roles at Cohesive Networks, UBS, Capital SCF and Credit Suisse, where he worked on app servers, compute grids, security, mobile, cloud, networking and containers. Chris co-hosts the <a href=\\\"https:\/\/techdebtburndown.com\/\\\" rel=\\\"nofollow\\\">Tech Debt Burndown Podcast<\/a> and is a Dart Google Developer Expert (<a href=\\\"https:\/\/developers.google.com\/community\/experts\\\" rel=\\\"nofollow\\\">GDE<\/a>).\",\"followers\":1750,\"imgSrc\":\"https:\/\/cdn.infoq.com\/statics_s2_20241119074149\/images\/profiles\/8PE76nOujWAoCM8yqLn9Hfv2HqW3VlIP.jpg\"},{\"id\":\"4927376\",\"ref\":\"author-Karsten-Silz\",\"url\":\"\/profile\/Karsten-Silz\",\"followedByCurrentUser\":false,\"minibio\":\"Full-Stack Java Developer & Contractor\",\"name\":\"Karsten Silz\",\"bio\":\"Karsten Silz has worked as a full-stack Java developer (Spring Boot, Angular, Flutter) for 25 years in Europe and the US. In 2004, he co-founded a software product start-up in the US. Karsten led product development for 13 years and left after the company was sold successfully. Since 2003, he has also worked as a contractor. He co-founded the SaaS start-up "Your Home in Good Hands" as CTO in the UK in 2020.\",\"followers\":291,\"imgSrc\":\"https:\/\/cdn.infoq.com\/statics_s2_20241119074149\/images\/profiles\/p6zmOdOcqXiRj09iiZNeDZap7f0IglQW.jpg\"},{\"id\":\"343314\",\"ref\":\"author-Jonathan-Allen\",\"url\":\"\/profile\/Jonathan-Allen\",\"followedByCurrentUser\":false,\"minibio\":\"Software Architect\",\"name\":\"Jonathan Allen\",\"bio\":\"Jonathan Allen got his start working on MIS projects for a health clinic in the late 90's, bringing them up from Access and Excel to an enterprise solution by degrees. After spending five years writing automated trading systems for the financial sector, he became a consultant on a variety of projects including the UI for a robotic warehouse, the middle tier for cancer research software, and the big data needs of a major real estate insurance company. In his free time he enjoys studying and writing about martial arts from the 16th century.\\r\\n\",\"followers\":1717,\"imgSrc\":\"https:\/\/cdn.infoq.com\/statics_s2_20241119074149\/images\/profiles\/Wk_C09_mzwK23YkTkKMXResJv3LKUN5D.jpg\"},{\"id\":\"55454401\",\"ref\":\"author-Ben-Linders\",\"url\":\"\/profile\/Ben-Linders\",\"followedByCurrentUser\":false,\"minibio\":\"Trainer \/ Coach \/ Adviser \/ Author \/ Speaker @BenLinders.com\",\"name\":\"Ben Linders\",\"bio\":\"<strong>Ben Linders<\/strong>\u00A0is an Independent Consultant in Agile, Lean, Quality and Continuous Improvement, based in The Netherlands. Author of\u00A0<a href=\\\"https:\/\/www.benlinders.com\/getting-value-out-of-agile-retrospectives\/\\\" rel=\\\"nofollow\\\">Getting Value out of Agile Retrospectives<\/a>,\u00A0<a href=\\\"https:\/\/www.benlinders.com\/waardevolle-agile-retrospectives\/\\\" rel=\\\"nofollow\\\">Waardevolle Agile Retrospectives<\/a>,\u00A0<a href=\\\"https:\/\/www.benlinders.com\/what-drives-quality\/\\\" rel=\\\"nofollow\\\">What Drives Quality<\/a>, <a href=\\\"https:\/\/www.benlinders.com\/the-agile-self-assessment-game\/\\\" rel=\\\"nofollow\\\">The Agile Self-assessment Game<\/a>, <a href=\\\"https:\/\/www.benlinders.com\/problem-what-problem\/\\\" rel=\\\"nofollow\\\">Problem? What Problem?<\/a>, and <a href=\\\"https:\/\/leanpub.com\/continuousimprovement\\\" rel=\\\"nofollow\\\">Continuous Improvement<\/a>. Creator of many <a href=\\\"https:\/\/www.benlinders.com\/shop\/\\\" rel=\\\"nofollow\\\">Agile Coaching Tools<\/a>, for example, the <a href=\\\"https:\/\/www.benlinders.com\/game\/\\\" rel=\\\"nofollow\\\">Agile Self-assessment Game<\/a>.\\r\\n\\r\\nAs an adviser, coach and trainer he helps organizations by\u00A0<a href=\\\"https:\/\/www.benlinders.com\/services\/\\\" rel=\\\"nofollow\\\">deploying effective software development and management practices<\/a>. He focuses on continuous improvement, collaboration and communication, and professional development, to deliver business value to customers.\\r\\n\\r\\nBen is an active member of networks on Agile, Lean and Quality, and a frequent speaker and writer. He\u00A0shares his experience in a\u00A0<a href=\\\"https:\/\/www.benlinders.com\/\\\" rel=\\\"nofollow\\\">bilingual blog\u00A0(Dutch and English)<\/a> and\u00A0as\u00A0an\u00A0<a href=\\\"https:\/\/www.infoq.com\/author\/Ben-Linders\\\" rel=\\\"nofollow\\\">editor for Agile at InfoQ<\/a>. Follow him on twitter:\u00A0<a href=\\\"https:\/\/twitter.com\/BenLinders\\\" rel=\\\"nofollow\\\">@BenLinders<\/a>.\",\"followers\":656,\"imgSrc\":\"https:\/\/cdn.infoq.com\/statics_s2_20241119074149\/images\/profiles\/Dwyu3y5agoDZV9jPKwQcwQ6oYv7gVeR4.jpg\"},{\"id\":\"114725059\",\"ref\":\"author-Holly-Cummins\",\"url\":\"\/profile\/Holly-Cummins\",\"followedByCurrentUser\":false,\"minibio\":\"Senior Principal Software Engineer, Red Hat\",\"name\":\"Holly Cummins\",\"bio\":\"Holly Cummins is a Senior Principal Software Engineer on the Red Hat Quarkus team. Before joining Red Hat, Holly was a long time IBMer. In her time at IBM, Holly has been a full-stack javascript developer, a WebSphere Liberty build architect, a client-facing consultant, a JVM performance engineer, and an innovation leader. During her time in the IBM Garage, Holly led projects for enormous banks, tiny startups, and everything in between. Holly has used the power of cloud to understand climate risks, count fish, help a blind athlete run ultra-marathons in the desert solo, and invent stories (although not at all the same time). Holly is also a Java Champion, author, and regular keynote speaker. You can follow her on twitter at @holly_cummins or at hollycummins.com.\\r\\n\\r\\n\\r\\nBefore joining IBM, Holly completed a PhD in Quantum Computation.\\r\\n\",\"followers\":442,\"imgSrc\":\"https:\/\/cdn.infoq.com\/statics_s2_20241119074149\/images\/profiles\/cRsuGlFgKyGmGfEHvafpMO63CxbrEm22.jpg\"}]'); var topicsInPage = JSON.parse('[{\"name\":\"Architecture & Design\",\"id\":\"6816\",\"followers\":9372,\"url\":\"\/architecture-design\",\"followedByCurrentUser\":false},{\"name\":\"Culture & Methods\",\"id\":\"6817\",\"followers\":3664,\"url\":\"\/culture-methods\",\"followedByCurrentUser\":false},{\"name\":\"Continuous Improvement\",\"id\":\"66\",\"followers\":42,\"url\":\"\/continuous_improvement\",\"followedByCurrentUser\":false},{\"name\":\"Resilience\",\"id\":\"14722\",\"followers\":84,\"url\":\"\/Resilience\",\"followedByCurrentUser\":false},{\"name\":\"Agile\",\"id\":\"3\",\"followers\":1014,\"url\":\"\/agile\",\"followedByCurrentUser\":false},{\"name\":\".NET Core\",\"id\":\"15683\",\"followers\":7216,\"url\":\"\/Net-Core\",\"followedByCurrentUser\":false},{\"name\":\"Machine Learning\",\"id\":\"5449\",\"followers\":13159,\"url\":\"\/MachineLearning\",\"followedByCurrentUser\":false},{\"name\":\"Performance\",\"id\":\"7434\",\"followers\":257,\"url\":\"\/performance\",\"followedByCurrentUser\":false},{\"name\":\"Microservices\",\"id\":\"15274\",\"followers\":20418,\"url\":\"\/microservices\",\"followedByCurrentUser\":false},{\"name\":\"Architecture\",\"id\":\"1389\",\"followers\":3147,\"url\":\"\/architecture\",\"followedByCurrentUser\":false},{\"name\":\"AI, ML & Data Engineering\",\"id\":\"16690\",\"followers\":5023,\"url\":\"\/ai-ml-data-eng\",\"followedByCurrentUser\":false},{\"name\":\"QCon Software Development Conference\",\"id\":\"597\",\"followers\":241,\"url\":\"\/qcon\",\"followedByCurrentUser\":false},{\"name\":\"Java9\",\"id\":\"7097\",\"followers\":4928,\"url\":\"\/Java9\",\"followedByCurrentUser\":false},{\"name\":\"DevOps\",\"id\":\"6043\",\"followers\":4664,\"url\":\"\/Devops\",\"followedByCurrentUser\":false},{\"name\":\"Software Engineering\",\"id\":\"6044\",\"followers\":31,\"url\":\"\/SoftwareEngineering\",\"followedByCurrentUser\":false},{\"name\":\"Reactive Programming\",\"id\":\"15453\",\"followers\":11436,\"url\":\"\/reactive-programming\",\"followedByCurrentUser\":false},{\"name\":\"Development\",\"id\":\"6815\",\"followers\":3743,\"url\":\"\/development\",\"followedByCurrentUser\":false}]'); var userContentLikesInPage = []; var userCommentsLikesInPage = []; var currentUserId = 2; </script> <script type="application/ld+json"> { "@context": "http://schema.org", "@type": "NewsArticle", "mainEntityOfPage": { "@type": "WebPage", "@id": "https://www.infoq.com/articles/adaptive-responses-resilience-software-operations/" }, "headline": "Adaptive Responses to Resiliently Handle Hard Problems in Software Operations", "image": ["https://res.infoq.com/articles/adaptive-responses-resilience-software-operations/en/smallimage/5-strategies-to-resiliently-logo-small-1729165326496.jpg" ], "datePublished": "2024-10-23", "dateModified": "2024-10-23", "author": [ { "@type": "Person", "name": "Laura Maguire" } ], "publisher": { "@type": "Organization", "name": "InfoQ", "logo": { "@type": "ImageObject", "url": "https://assets.infoq.com/resources/en/infoQ-logo-big.jpg" } }, "description": "As engineers move into more senior positions, the scope of how their knowledge is applied changes. This article discusses strategies for approaching your role as a senior member of your organization." } </script> <meta name="ifq:pageType" content="ARTICLE_PAGE"/> <script type="text/javascript"> InfoQConstants.pageType = 'ARTICLE_PAGE'; </script> <meta property="og:type" content="website" /> <meta property="og:image" content="https://res.infoq.com/articles/adaptive-responses-resilience-software-operations/en/headerimage/5-strategies-to-resiliently-header-1729165326496.jpg"/> <meta property="twitter:image" content="https://res.infoq.com/articles/adaptive-responses-resilience-software-operations/en/card_header_image/5-strategies-to-resiliently-twitter-card-1729165326496.jpg"/> <meta property="og:title" content="Adaptive Responses to Resiliently Handle Hard Problems in Software Operations "/> <meta property="og:description" content="As engineers move into more senior positions such as Staff Engineer, Architect, or Sr Tech Lead roles, their knowledge and experience is often applied across the system. This expertise is increasingly needed for handling novel problems or designing innovative solutions to complex problems. This article discusses strategies for approaching your role as a senior member of your organization." /> <meta property="og:site_name" content="InfoQ"/> <meta property="og:url" content="https://www.infoq.com/articles/adaptive-responses-resilience-software-operations/"/> <meta name="twitter:card" content="summary_large_image" /> <meta name="twitter:title" content="Adaptive Responses to Resiliently Handle Hard Problems in Software Operations "/> <meta name="twitter:description" content="As engineers move into more senior positions such as Staff Engineer, Architect, or Sr Tech Lead roles, their knowledge and experience is often applied across the system. This expertise is increasingly needed for handling novel problems or designing innovative solutions to complex problems. This article discusses strategies for approaching your role as a senior member of your organization." /> <link rel="image_src" href="https://res.infoq.com/articles/adaptive-responses-resilience-software-operations/en/headerimage/5-strategies-to-resiliently-header-1729165326496.jpg"/> <link rel="stylesheet" href="https://cdn.infoq.com/statics_s2_20241119074149/styles/prism.css"/> <meta name="keywords" content="adaptive responses resilience software operations,Culture & Methods,Continuous Improvement,Resilience,QCon Software Development Conference,Software Engineering,Performance,Architecture,Agile,"/> <meta name="description" content="As engineers move into more senior positions, the scope of how their knowledge is applied changes. This article discusses strategies for approaching your role as a senior member of your organization."/> <meta name="tprox" content="1729674000000" /> <script type="text/javascript"> $(function() { var box = $('.related_sponsors'); if (box.length === 0) { return; } var nextSibling = $(box).next(); if ($('#lowerFullwidthVCR').length === 0) { moveLowerInThePage(box); return; } if (blockElement(nextSibling)) { moveLowerInThePage(box); return; } while (!blockElement($(nextSibling).next())) { nextSibling = $(nextSibling).next(); if (firstLowerThanSecond(nextSibling, box)) { return; } } moveLowerInThePage(box); function blockElement(elem) { if ($(elem).prop('tagName') === 'BLOCKQUOTE' || $(elem).prop('tagName') === 'IMG' || $(elem).prop('tagName') === 'PRE' || ($(elem).prop('tagName') === 'P' && $(elem).children().length === 1 && $(elem).children('img').length === 1)) { return true; } return false; } function firstLowerThanSecond(elem1, elem2) { var elem1BottomYCoordinate = $(elem1).offset().top + $(elem1).height() var elem2BottomYCoordinate = $(elem2).offset().top + $(elem2).height(); if (elem1BottomYCoordinate > elem2BottomYCoordinate) { return true; } return false; } function moveLowerInThePage(box) { if ($('#lowerFullwidthVCR').length !== 0) { $('#lowerFullwidthVCR').replaceWith(box); } $(box).removeClass('stacked'); } }); </script> <script type="text/javascript" src="https://cdn.infoq.com/statics_s2_20241119074149/scripts/relatedVcr.min.js"></script> <script type="application/javascript"> var communityIds = "2499"; var topicIds = "63,3450,593,1894,2952,876,3"; VCR.loadAllVcrs(communityIds, topicIds); </script> <script type="text/javascript" src="https://cdn.infoq.com/statics_s2_20241119074149/scripts/infoq.js"></script> <script type="text/javascript"> document.addEventListener('DOMContentLoaded', function() { if (!window || !window.infoq) return infoq.init() }) </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="roufQ3DkNuc74QpR"/> <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>InfoQ Dev Summit Boston (June 9-10, 2025): Actionable advice on critical development priorities from active, senior software developers. </span> <a class="btn" href="/url/pb/67be92fa-655a-4ec2-9dc1-f52c5f1888cb/" 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="button__dropdown dropdown user__login"> <button aria-label="Sign Up / Login" class="button button__small button__green button__arrow arrow__true button__icon icon icon__user icon--only">Sign Up / Login</button> <div class="dropdown__holder"> <div class="dropdown__content"> <div class="login__dropdown"> <div class="login__module"> <div class="login__username"> <form id="login-form" data-vv-scope="login" class="login__form form" action="/login.action"> <input type="hidden" id="loginWidgetOrigin" name="loginWidgetOrigin" value="mainLogin"/> <input type="hidden" name="fromP13N" id="isP13n" value="false"/> <input type="hidden" name="fromP13NId" id="p13n-id" value=""/> <input type="hidden" name="fromP13NType" id="p13n-type" value=""/> <div class="field form__row input__text input__small" data-vv-as="Email" data-vv-scope="login"> <label for="email" class="label field__label">Email</label> <input type="text" id="email" placeholder="" class="input field__input" name="username"> </div> <div class="field form__row input__password input__small" data-vv-as="Password" data-vv-scope="login"> <label for="password" class="label field__label">Password</label> <input type="password" id="password" placeholder="" class="input field__input" name="password"> <p data-message="resultMessage"></p> </div> <input type="submit" value="Login" class="form__row button button__medium button__green"> <div class="login__actions"> <button aria-label="Forgot password ?" class="forgot button button__unstyled">Forgot password ?</button> </div> </form> <form id="forgot-password-form" data-vv-scope="forgot" class="forgot__form form" action="/resetpasswordinit.action" onsubmit="UserActions_Login.showMessage($(this),JSi18n.login_sendingRequest);"> <div data-vv-as="Email" data-vv-scope="forgot" class="field form__row input__text input__small"> <label for="forgotten_email" class="label field__label">InfoQ Account Email</label> <input id="forgotten_email" name="email" placeholder="" class="input field__input" type="text" onkeyup="UserActions_ResetPass.checkInputStatus('forgotten_email','forgotPassMessage',JSi18n.login_invalid_email,'submit_resetPass');"> <p id="forgotPassMessage" data-message="resultMessage"></p> </div> <input type="submit" id="submit_resetPass" value="Send Recovery Email" class="button button__medium button__green" onclick="return UserActions_ResetPass.checkInputStatus('forgotten_email','forgotPassMessage',JSi18n.login_invalid_email,'submit_resetPass');"> <p class="login__actions"> <button aria-label="Back to login" class="back-to-login button button__unstyled">Back to login</button> </p> </form> <form id="email-revalidation-form" data-vv-scope="revalidation" class="revalidation__form form" action="/reactivate.action" onsubmit="UserActions_Login.showMessage($(this),JSi18n.login_sendingRequest);"> <div data-vv-as="Email" data-vv-scope="revalidation" class="field form__row input__text input__small"> <label for="revalidated_email" class="label field__label">Resend Activation</label> <input id="revalidated_email" name="email" placeholder="" class="input field__input" type="text" onkeyup="UserActions_ResetPass.checkInputStatus('revalidated_email','emailRevalidMessage',JSi18n.login_invalid_email,'submit_resetPass');"> <p id="emailRevalidMessage" data-message="resultMessage"></p> </div> <input type="submit" value="Resend" class="button button__medium button__green" onclick="return UserActions_ResetPass.checkInputStatus('revalidated_email','emailRevalidMessage',JSi18n.login_invalid_email,'submit_resetPass');"> <p class="login__actions"> <button id="show-login" aria-label="Back to login" class="back-to-login button button__unstyled">Back to login</button> </p> </form> </div> <div class="login__social"> <h4 class="heading">Login with:</h4> <div class="social__connect form__row login__socials"> <a href="/social/googleLogin.action?fl=login" onclick="return UserActions_Login.addLoginInfo(this);" class="button button__medium button__gray button__icon icon icon__google" title="Login with Google">Google</a> <a href="/social/liveLogin.action?fl=login" onclick="return UserActions_Login.addLoginInfo(this);" class="button button__medium button__icon icon icon__microsoft" title="Login with Microsoft">Microsoft</a> <a href="/twitter-info" class="button button__medium button__icon icon icon__twitter" title="Login with Twitter">Twitter</a> <a href="/social/facebookLogin.action?fl=login" onclick="return UserActions_Login.addLoginInfo(this);" class="button button__medium button__icon icon icon__fb" title="Login with Facebook">Facebook</a> </div> </div> <div class="login__signup"> <h4 class="heading">Don't have an InfoQ account?</h4> <a href="/reginit.action?" onclick="return UserActions_Login.addLoginInfo(this);" class="button button__medium button__green">Sign Up</a> </div> </div> </div> </div> </div> </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/security-advanaced-threats">Beyond the Breach: Proactive Defense in the Age of Advanced Threats</a> </h4> <p class="card__excerpt">Michael Brunton-Spall discusses some of the most advanced attacks that are in the public domain, mostly attributed in public by commercial organizations.</p> <div class="card__footer"></div> </div> <a href="/presentations/security-advanaced-threats" class="card__header"> <img loading="lazy" alt="Beyond the Breach: Proactive Defense in the Age of Advanced Threats" src="https://imgopt.infoq.com/fit-in/100x100/filters:quality(80)/presentations/security-advanaced-threats/en/smallimage/michael-small-1726825001794.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 & Design" class="nav__category">Architecture & 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 & 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="/articles/transforming-legacy-healthcare-systems">Transforming Legacy Healthcare Systems: A Journey to Cloud-Native Architecture</a> </h4> <p class="card__excerpt">Discover how Livi navigated the complexities of transitioning MJog, a legacy healthcare system, to a cloud-native architecture, sharing valuable insights for successful tech modernization. Our experience illustrates that transitioning from legacy systems to cloud-based microservices is not a one-time project but an ongoing journey.</p> <div class="card__footer"></div> </div> <a href="/articles/transforming-legacy-healthcare-systems" class="card__header"> <img loading="lazy" alt="Transforming Legacy Healthcare Systems: A Journey to Cloud-Native Architecture" src="https://imgopt.infoq.com/fit-in/100x100/filters:quality(80)/articles/transforming-legacy-healthcare-systems/en/smallimage/transforming-legacy-healthcare-logo-small-1731055590401.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, ML & Data Engineering" class="nav__category">AI, ML & Data Engineering</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 & 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="/presentations/llm-deployment">Navigating LLM Deployment: Tips, Tricks, and Techniques</a> </h4> <p class="card__excerpt">Meryem Arik discusses some of the best practices in model optimization, serving and monitoring - with practical tips and real case-studies.</p> <div class="card__footer"></div> </div> <a href="/presentations/llm-deployment" class="card__header"> <img loading="lazy" alt="Navigating LLM Deployment: Tips, Tricks, and Techniques" src="https://imgopt.infoq.com/fit-in/100x100/filters:quality(80)/presentations/llm-deployment/en/smallimage/Meryem-Arik-small-1728647474023.jpeg" 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 & Methods" class="nav__category">Culture & 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 & 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="/podcasts/participatory-leadership-developing-psychological-safety">Participatory Leadership and Developing a Culture of Psychological Safety</a> </h4> <p class="card__excerpt">In this podcast Shane Hastie, Lead Editor for Culture & Methods spoke to Nick Takavadii about participatory leadership practices and how to cultivate a workplace environment with psychological safety.</p> <div class="card__footer"></div> </div> <a href="/podcasts/participatory-leadership-developing-psychological-safety" class="card__header"> <img loading="lazy" alt="Participatory Leadership and Developing a Culture of Psychological Safety" src="https://imgopt.infoq.com/fit-in/100x100/filters:quality(80)/podcasts/participatory-leadership-developing-psychological-safety/en/smallimage/engineering-culture-podcast-logo-1732005964726.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/dev-journey-kubernetes">From Local to Production: A Modern Developer’s Journey Towards Kubernetes</a> </h4> <p class="card__excerpt">Urvashi Mohnani discusses the full developer experience of writing an application, containerizing it locally, deploying it to a Kubernetes cluster, and debugging Kubernetes applications locally.</p> <div class="card__footer"></div> </div> <a href="/presentations/dev-journey-kubernetes" class="card__header"> <img loading="lazy" alt="From Local to Production: A Modern Developer’s Journey Towards Kubernetes" src="https://imgopt.infoq.com/fit-in/100x100/filters:quality(80)/presentations/dev-journey-kubernetes/en/smallimage/urvashimohnani-small-1727693730075.jpeg" 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="/about-c4media" 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="header__events-all"> <a href="https://qconsf.com/?utm_source=infoq&utm_medium=referral&utm_campaign=homepageheader_qsf24" rel="nofollow" target="_blank" class="header__event-slot"> <picture><source srcset="https://imgopt.infoq.com/eyJidWNrZXQiOiAiYXNzZXRzLmluZm9xLmNvbSIsImtleSI6ICJ3ZWIvaGVhZGVyL2NvbmZlcmVuY2VzLzIwMjQvU0YtdG9wLmpwZyIsImVkaXRzIjogeyJ3ZWJwIjogeyAicXVhbGl0eSI6ODB9fX0=" type="image/webp"><source srcset="https://imgopt.infoq.com/eyJidWNrZXQiOiAiYXNzZXRzLmluZm9xLmNvbSIsImtleSI6ICJ3ZWIvaGVhZGVyL2NvbmZlcmVuY2VzLzIwMjQvU0YtdG9wLmpwZyIsImVkaXRzIjogeyJqcGVnIjogeyAicXVhbGl0eSI6ODB9fX0=" type="image/webp"><img src="https://imgopt.infoq.com/eyJidWNrZXQiOiAiYXNzZXRzLmluZm9xLmNvbSIsImtleSI6ICJ3ZWIvaGVhZGVyL2NvbmZlcmVuY2VzLzIwMjQvU0YtdG9wLmpwZyIsImVkaXRzIjogeyJqcGVnIjogeyAicXVhbGl0eSI6ODB9fX0=" loading="lazy" width="40px" height="40px" alt="QCon San Francisco - image"></picture> <div> <span>QCon San Francisco</span> <p>Level up your software skills by uncovering the emerging trends you should focus on. Register now.</p> </div> </a> <a href="https://qconlondon.com/?utm_source=infoq&utm_medium=referral&utm_campaign=homepageheader_qlondon25" rel="nofollow" target="_blank" class="header__event-slot"> <picture><source srcset="https://imgopt.infoq.com/eyJidWNrZXQiOiAiYXNzZXRzLmluZm9xLmNvbSIsImtleSI6ICJ3ZWIvaGVhZGVyL2NvbmZlcmVuY2VzLzIwMjUvbG9uZG9uLXRvcC5qcGciLCJlZGl0cyI6IHsid2VicCI6IHsgInF1YWxpdHkiOjgwfX19" type="image/webp"><source srcset="https://imgopt.infoq.com/eyJidWNrZXQiOiAiYXNzZXRzLmluZm9xLmNvbSIsImtleSI6ICJ3ZWIvaGVhZGVyL2NvbmZlcmVuY2VzLzIwMjUvbG9uZG9uLXRvcC5qcGciLCJlZGl0cyI6IHsianBlZyI6IHsgInF1YWxpdHkiOjgwfX19" type="image/webp"><img src="https://imgopt.infoq.com/eyJidWNrZXQiOiAiYXNzZXRzLmluZm9xLmNvbSIsImtleSI6ICJ3ZWIvaGVhZGVyL2NvbmZlcmVuY2VzLzIwMjUvbG9uZG9uLXRvcC5qcGciLCJlZGl0cyI6IHsianBlZyI6IHsgInF1YWxpdHkiOjgwfX19" loading="lazy" width="40px" height="40px" alt="QCon London - image"></picture> <div> <span>QCon London</span> <p>Discover emerging trends, insights, and real-world best practices in software development & tech leadership. Join now.</p> </div> </a> <a href="https://devsummit.infoq.com/conference/boston2025?utm_source=infoq&utm_medium=referral&utm_campaign=homepageheader_idsboston25" rel="nofollow" target="_blank" class="header__event-slot"> <picture><source srcset="https://imgopt.infoq.com/eyJidWNrZXQiOiAiYXNzZXRzLmluZm9xLmNvbSIsImtleSI6ICJ3ZWIvaGVhZGVyL2NvbmZlcmVuY2VzLzIwMjUvSW5mb1FEZXZTdW1taXQtdG9wLmpwZyIsImVkaXRzIjogeyJ3ZWJwIjogeyAicXVhbGl0eSI6ODB9fX0=" type="image/webp"><source srcset="https://imgopt.infoq.com/eyJidWNrZXQiOiAiYXNzZXRzLmluZm9xLmNvbSIsImtleSI6ICJ3ZWIvaGVhZGVyL2NvbmZlcmVuY2VzLzIwMjUvSW5mb1FEZXZTdW1taXQtdG9wLmpwZyIsImVkaXRzIjogeyJqcGVnIjogeyAicXVhbGl0eSI6ODB9fX0=" type="image/webp"><img src="https://imgopt.infoq.com/eyJidWNrZXQiOiAiYXNzZXRzLmluZm9xLmNvbSIsImtleSI6ICJ3ZWIvaGVhZGVyL2NvbmZlcmVuY2VzLzIwMjUvSW5mb1FEZXZTdW1taXQtdG9wLmpwZyIsImVkaXRzIjogeyJqcGVnIjogeyAicXVhbGl0eSI6ODB9fX0=" loading="lazy" width="40px" height="40px" alt="QCon London - image"></picture> <div> <span>InfoQ Dev Summit Boston</span> <p>Learn how senior software developers are solving the challenges you face. Register now with early bird tickets.</p> </div> </a> <a href="https://www.infoq.com/software-architects-newsletter/" rel="nofollow" target="_blank" class="header__event-slot"> <picture><source srcset="https://imgopt.infoq.com/eyJidWNrZXQiOiAiYXNzZXRzLmluZm9xLmNvbSIsImtleSI6ICJ3ZWIvaGVhZGVyL25ld3NsZXR0ZXItY292ZXIuanBlZyIsImVkaXRzIjogeyJ3ZWJwIjogeyAicXVhbGl0eSI6ODB9fX0=" type="image/webp"><source srcset="https://imgopt.infoq.com/eyJidWNrZXQiOiAiYXNzZXRzLmluZm9xLmNvbSIsImtleSI6ICJ3ZWIvaGVhZGVyL25ld3NsZXR0ZXItY292ZXIuanBlZyIsImVkaXRzIjogeyJqcGVnIjogeyAicXVhbGl0eSI6ODB9fX0=" type="image/webp"><img src="https://imgopt.infoq.com/eyJidWNrZXQiOiAiYXNzZXRzLmluZm9xLmNvbSIsImtleSI6ICJ3ZWIvaGVhZGVyL25ld3NsZXR0ZXItY292ZXIuanBlZyIsImVkaXRzIjogeyJqcGVnIjogeyAicXVhbGl0eSI6ODB9fX0=" loading="lazy" width="40px" height="40px" alt="The Software Architects Newsletter - image"></picture> <div> <span>The Software Architects' Newsletter</span> <p>Your monthly guide to all the topics, technologies and techniques that every professional needs to know about. Subscribe for free.</p> </div> </a> </div> </div> <!----> </div> </div> </div> </header> <!-- ####### CONTENT START ######### --> <main> <article data-type="article" class="article"> <section class="section container white"> <div class="container__inner"> <p class="crumbs"> <span data-nosnippet><a href="/" title="InfoQ Homepage">InfoQ Homepage</a></span> <span data-nosnippet><a href="/articles" title="Articles">Articles</a></span> <span data-nosnippet class="active">Adaptive Responses to Resiliently Handle Hard Problems in Software Operations</span> </p> <div class="actions"> <div class="actions__left"> <div class="article__category culture-methods"> <a href="/culture-methods/" class="article__tag box--info" title="Culture & Methods"> Culture & Methods </a> </div> </div> <div class="actions__right"> <div data-nosnippet class="notice"> <div class="box--warning"> <a target="_blank" rel="nofollow" href="https://qconlondon.com/?utm_source=infoq&utm_medium=referral&utm_campaign=infoqyellowbox_qlondon25 ">QCon London (April 7-9, 2025): Learn the emerging trends. Implement best practices. </a> </div> </div> </div> </div> <div class="actions heading__container article__heading"> <div class="actions__left"> <h1 class="heading"> Adaptive Responses to Resiliently Handle Hard Problems in Software Operations </h1> </div> </div> <script type="text/javascript"> $("#translated_"+InfoQConstants.userDetectedCountryCode.toLowerCase()).show(); </script> <div class="columns article__explore"> <div class="article__main" data-col="4/6"> <div class="article__metadata metadata"> <div class="actions__left article__actions actions__sidebar"> <button id="toggleLikeContent" class="icon button button__icon like button__gray icon__like" aria-label="Like">Like</button> <button id="bookmarkBtn" data-ref="bookmarkPage" aria-label="Read later" class="login button__gray button button__icon icon icon__bookmark icon--only"> </button> <a id="showBookmarks" href="/showbookmarks.action" class="button button__gray button__icon icon icon__bookmark">Bookmarks</a> <div id="toastContainer" class="toast-none toast-hide"> <div class="toast"><span></span></div> </div> <script type="text/javascript"> if(loggedIn){ $('#showBookmarks').show(); } function performBookmark() { Bookmarks.toggleBookmark('articles', 'adaptive-responses-resilience-software-operations'); } infoq.event.on('bookmarkRequested', function(e) { Bookmarks.toggleBookmark('articles', 'adaptive-responses-resilience-software-operations'); }); 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> <p class="article__readTime date">Oct 23, 2024<span class="dot"></span> 15 min read </p> <div class="widget article__authors"> <div> <p class="meta">by</p> <ul class="no-style authors"> <li data-id="author-Laura-Maguire"> <p class="meta author__bio"> <a href="/profile/Laura-Maguire/" class="avatar author__avatar" aria-label="Laura Maguire"></a> <span class="author__name"> <a href="/profile/Laura-Maguire/" class="author__link">Laura Maguire</a> </span> </p> </li> </ul> </div> <div> <p class="meta">reviewed by</p> <ul class="no-style authors"> <li data-id="author-Ben-Linders"> <p class="meta author__bio"> <a href="/profile/Ben-Linders/" class="avatar author__avatar" aria-label="Ben Linders"></a> <span class="author__name"> <a href="/profile/Ben-Linders/" class="author__link">Ben Linders</a> </span> </p> </li> </ul> </div> </div> <div data-nosnippet class="cta_write_infoq"> <h4>Write for InfoQ</h4> <strong>Feed your curiosity.</strong> <span style="line-height: 1.6; margin-bottom: 5px;">Help 550k+ global <br/>senior developers <br/>each month stay ahead.</span><a href="https://docs.google.com/forms/d/e/1FAIpQLSehsV5jwuXFRFPIoOQoSXm9aRjYam9bQjKbEHvGZBxsioyGGw/viewform " target="_blank">Get in touch</a> </div> </div> <div class="article__content"> <!-- Start PSA Section --> <!-- End PSA Section --> <div class="article__data"> <div class="takeaways"> <h3 class="icon icon__takeaways heading">Key Takeaways</h3> <ul> <li>Resilience - adapting to changing conditions in real time - is a hallmark of expert performance.</li> <li>Findings from Resilience Engineering studies have revealed generalizable patterns of human cognition when handling complex, changing environments.</li> <li>These studies guide how software engineers and their organizations can effectively organize teams and tasks.</li> <li>Five characteristics of resilient, adaptive expertise include early recognition of changing conditions, rapidly revising one’s mental model, accurately replanning, reconfiguring available resources, and reviewing to learn from past performance.</li> <li>These characteristics can be supported through various design techniques for software interfaces, changing work practices, and conducting training.</li> </ul> <div class="separator separator__three-dots center"></div> </div> <script type="application/javascript"> var playing = false; function ttsPlaying(content_url) { if (!playing) { gtag('event', 'GA4_EVENT', {'category': 'tts', 'action': 'play', 'label': content_url }); playing = true; } } </script> <div> </div> <p>As software developers progress in their careers, they develop deep technical systems knowledge and become highly proficient in specific software services, components, or languages. However, as engineers move into more senior positions such as Staff Engineer, Architect, or Sr Tech Lead roles, the scope of how their knowledge is applied changes. At the senior level, knowledge and experience are often applied across the system. This expertise is increasingly called upon for handling novel or unstructured problems or designing innovative solutions to complex problems. This means considering software and team interdependencies, recognizing cascading effects and their implications, and utilizing one’s network to bring appropriate attention and resources to new initiatives or developing situations. In this article, I will discuss several strategies for approaching your role as a senior member of your organization.</p> <h2>Resilience in cognitively demanding software development work</h2> <p>Modern software engineering requires many core capabilities to cope with the complexity of building and running systems at speed and scale and to adapt to continuously changing circumstances. Resilience Engineering offers several concepts that apply to adapting to inevitable pressures, constraints, and surprises.</p> <p>Resilience has been described in many ways by different fields. It has been used to describe psychological, economic, and societal attributes but comes primarily from ecology. It is used to describe adaptive characteristics of biological and ecological systems, and over the years, our understanding of resilience has changed. In software, perhaps the most impactful description of resilience is from safety researcher <a href="https://www.researchgate.net/publication/327427067_The_Theory_of_Graceful_Extensibility_Basic_rules_that_govern_adaptive_systems">David Woods and the Theory of Graceful Extensibility</a>. He defines it as "the ability of a system to extend its capacity to adapt when surprise events challenge its boundaries".</p> <div class="clear"></div> <script type="text/javascript"> var uriMapping = "articles"; var showVcr = "false"; var fillWithVcr = "true"; var sponsorshipsJson = "{"links":[{"styleName":"article","style":"ARTICLE","text":"Evolving the Agile Organization with Evidence-Based Management","id":"a4b400ae-73f9-4c87-8412-3700f983327a","target":"https://www.infoq.com/vendorcontent/show.action?vcr=0ce62b6c-ed5d-471b-be3f-631b28087232&utm_source=infoq&utm_medium=RSC&utm_campaign=vcr_fixed_link","active":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('.related__vc'); getCommonElements(vcrs, uriMapping, "EMBEDDED"); $widget.css("display", "flex"); } else { var $widget = jQuery('.related__vc'); $widget.remove(); } } 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="2499" id="cont_item_primary_topic"/> <div class="related__group related__vc nocontent f_rvcbox" data-trk-view="true" data-trk-impr="true" data-place="EMBEDDED" style="display: flex" > <ul class="no-style rvc__list"> <h4 class="heading">Related Sponsored Content</h4> <div class="f_rvcList"></div> <li> <span class="icon rvc__icon icon__small icon__article"></span> <h5 class="rvc__title"> <a href="/url/f/a4b400ae-73f9-4c87-8412-3700f983327a/" class="rvc__link" rel="nofollow"> Evolving the Agile Organization with Evidence-Based Management </a> </h5> </li> </ul> <div class="related__prsp f_sponsorship" data-trk-view="true" data-place="EMBEDDED" data-trk-impr="true" jsh="{"topic":"Culture & Methods","id":"cebad54e-98bc-4f4b-9b1d-9f0d4b1aaee5","title":"Scrum.org TS Spotlight 02/01/2024 - 01/31/2025"}"> <h4 class="heading">Related Sponsor</h4> <a href="/url/f/a7abcada-6771-482e-ab82-a94212a4327b/" target="_blank" rel="nofollow"> <img loading="lazy" src="https://imgopt.infoq.com//fit-in/290x500/filters:quality(100)/filters:no_upscale()/sponsorship/topic/cebad54e-98bc-4f4b-9b1d-9f0d4b1aaee5/ScrumLogoRSB-1706173049477.jpg" class="related__img" alt="Related sponsor icon"/> </a> <div class="related__desc"> <p style="clear: both; padding: 10px 0 0 0;">Scrum.org exists to help people and teams use Professional Scrum to solve complex problems through training, certification, and ongoing learning experiences. <b><a href="/url/f/61a4f32b-d2a9-4fa6-8716-390becd9b63d/" target="_blank" rel="nofollow">Learn more</a></b>.</p> </div> </div> </div> <p>This means an organization does not just "bounce back" or successfully defend itself from disruptions. Instead, it can respond in such a way that new capabilities emerge. Consider how, <a href="https://www.forbes.com/sites/blakemorgan/2020/05/01/10-examples-of-how-covid-19-forced-business-transformation/">as Forbes notes in their article on business transformations</a>, during the pandemic, commercial airlines responded to decreased travel by turning routes into cargo flights or how hotels that had lost travelers began offering daily room rates for employees working from home to stay productive safely.</p> <p>Similarly, this resilience perspective is helpful for software engineering since "surprises" are a core characteristic of everyday operations in large-scale, continuous deployment environments. A core aspect of system design that allows for more resilient and reliable service delivery comes from designing, planning, and training for <em>surprise handling</em>.</p> <h2>Resilience Engineering techniques for everyday performance improvement</h2> <p>Researchers studying performance in high-demand work - like flying a fighter jet at 1800 mph close to terrain, rapidly shutting down a nuclear power plant after an earthquake, or performing open heart surgery on an infant in distress - have identified important human perceptual, reasoning, and response capabilities that allow someone to respond quickly and appropriately to a given event.</p> <div id="lowerFullwidthVCR"></div> <p>Even with extensive preparations and training, unexpected events can make following a playbook or work process difficult or impossible. Add time pressure and uncertainty about what is happening and how quickly things might fail, and the situation becomes overwhelmingly hard to manage.</p> <p>People are forced to adapt in these kinds of surprising situations. They must rapidly identify a new way to handle the situation as it deteriorates to prevent the failure's impacts from spreading. Successful adaptation is often praised as "quick thinking", and in this article, we’ll explore the basis for quick thinking - or <em>resilient performance - </em>during software incidents.</p> <p>The theoretical basis for quick thinking is drawn from research into high-consequence work settings. When applied to software operations, it can enhance resilient performance and minimize outages and downtime. Here, these findings are adapted into strategies for action for individual engineers and their organizations. These are:</p> <ol> <li>Recognizing subtly changing events to provide early assessment and action</li> <li>Revising your mental model in real time of how to adjust your actions</li> <li>Replanning in real time as conditions change</li> <li>Reconfiguring your available technical and human resources</li> <li>Reviewing performance for continuous learning</li> </ol> <p>Together, these five capabilities can enable quick and accurate responses to unexpected events and move quickly without breaking things.</p> <h2>Recognizing: The importance of early detection</h2> <p>Early recognition of a problem, changing circumstances, or needing to revise our understanding of a situation is crucial to resilience. Early detection is beneficial in that it allows:</p> <ul> <li>more possibilities for action because the situation has not progressed very far</li> <li>the opportunity to gather more information before needing to act</li> <li>the ability to recruit additional resources to help cope with the situation</li> </ul> <p>Early detection is not always possible due to a lack of data or poor representation of the available data. However, engineers can better recognize problems earlier by continually calibrating their understanding of how the system operates under varying conditions and noticing even subtle changes quickly. Here are three practical ways for software engineers to achieve this in day-to-day work:</p> <p><strong>Calibrating to variance</strong>: One approach is to become more familiar with expected vs. unexpected system behavior by regularly monitoring different operating conditions, not just when there is a problem. An active monitoring practice helps calibrate variance, such as when a spike in volume indicates a problem versus when a certain time zone or customer heavily utilizes the service.</p> <p><strong>Expanding knowledge about changes</strong>: Another strategy is to develop a practice of reading incident reports and reviewing what the dashboards looked like at the earliest indication of trouble to get better at <em>noticing</em> what an anomalous event looks like.</p> <p><strong>Encouraging knowledge transfer</strong>: Lastly, another technique for lightweight calibration to help early detection is asking, "What did you notice that caused you to think there was a problem?" whenever a coworker describes a near miss or a time they proactively averted an outage. Their explanations and your interpretations of these vicarious experiences reinforce a more elaborate mental model of nominal and off-nominal behavior.</p> <h2>Revising: The role of mental models in solving hard problems</h2> <p>A mental model is an internal representation of a system’s behavior. All software engineers construct mental models of how the system runs and fails. Mental models typically include information about relationships, interdependencies, and interactivity that allow for inferences. They can also help predict how a system will likely respond to different interventions.</p> <p>For software engineers, this means mentally sifting through possible solutions, issues, and interactions to determine the most reasonable action. What is reasonable depends on assessing the action against the current and expected future conditions, goals, priorities, and available resources. In other words, to simulate how different choices will impact desired outcomes. A well-calibrated mental model can help engineers effectively simulate and be better prepared to assess the pros/cons of each and what risks may be involved.</p> <p>But mental models can be - and often are - wrong. As noted in <a href="https://www.routledge.com/Behind-Human-Error/Woods-Dekker-Cook-Johannesen-Sarter/p/book/9780754678342">Behind Human Error</a>, mental models are partial, incomplete, and flawed. This is not a criticism of the engineer. Instead, it acknowledges the complex and changing nature of large-scale software systems. No one person will have complete and current knowledge of the system. No one has a perfect understanding of the dependencies and interactions of a modern software system. Most software systems are simply too big, change too much, and too quickly for anyone’s knowledge to be consistently accurate.</p> <p>Having poorly calibrated knowledge is not the problem. The problem is when <em>you don’t know</em> you have poorly calibrated knowledge. This means engineers must continually focus on model updating. A strategic resilience approach is cultivating a continual awareness of <em>how current or stale your understanding of the situation may be</em>. As a researcher studying how engineers respond to incidents, I constantly look for clues indicating <em>how accurate</em> the responders’ mental models are. In other words, <em>is what they know or believe</em> about a situation or a system correct? This is a signal that model updating is needed. A high-performing team can quickly identify when they’ve got it wrong and rapidly find data to update their understanding of the situation. Some approaches to continual revising include:</p> <p><strong>Call out the uncertainties and ambiguities</strong>: A technique that helps teams notice when their mental models are incorrect or differ is to ask clarifying questions like "What do you mean when you say this query syntax is wrong?" It’s a simple and direct question that my research has shown is not commonly asked. Explicitly asking creates opportunities for others to reveal what they are thinking and allows all involved to make sure they have the same understanding. This is especially crucial as situations are rapidly changing. Teams can develop shorthand ways of ensuring model alignment to avoid disrupting the incident response.</p> <p>Developing a practice of explicitly stating assumptions and beliefs so that those around can track the line of reasoning and quickly identify an incorrect assumption or faulty belief. This seems so simple, but when you start doing this, you realize how much you "let slide" about inaccurate or faulty mental models in ourselves or others because it seems so small that it doesn’t seem worth revising, or time pressure prevents us from revising. A more junior engineer may be apprehensive about asking clarifying questions about a proposed deployment or hesitate to talk through their understanding of the risks of rolling back a change for fear of being wrong. The more senior engineer may not realize a gap in their mental model or may not want to publicly call out faulty knowledge.</p> <p><strong>Learn to be okay with being wrong</strong>: Software engineers must accept that their mental models will be wrong. Organizations need to normalize the practice of "being wrong". This shift means that the processes around model updating - like asking seemingly obvious questions - become an accepted and common part of working together. Post-incident learning reviews or pair programming are excellent opportunities to dig into each party’s mental models and assumptions about how the technology works, interacts, and behaves under different conditions.</p> <h2>Replanning: It’s not the plan that counts, it’s the ability to revise</h2> <p>Software engineers responding to a service outage are, for the most part, hard-wired to generate solutions and take action. Researchers <a href="https://journals.sagepub.com/doi/pdf/10.1177/154193128603000616?casa_token=Ho6s69lrdckAAAAA:5CX87zGluNw3yCPf7L3MqyrbxbAGnkAfaIzBKYEJnITJ-aE3r7KDdl55dVSLTpWPig6fc4Ovlv8hR1s">Gary Klein, Roberta Calderwood, and Anne Clinton-Cirocco studied expert practitioners</a> in various domains. He showed that anomaly recognition, information synthesis, and taking action were tightly coupled processes in human cognition. The cycle of perception and action is a continuous feedback loop, which means constant replanning based on the changing available information. The replanning gets increasingly tricky as time pressure increases, partly due to the coordination requirements.</p> <p>For example, replanning in everyday work situations such as in a sprint planning meeting and deciding how to prioritize one feature over another. In this scenario, there is time to consider the implications of changing the work sequencing or priorities. In this situation, it is possible to reach out to any parties affected by the decision and account for their input on how the plan may impact them. It is relatively easy to reorganize the workflow with less disruption for everyone.</p> <p>Contrast that with a high-severity incident where there may be potential data loss in a critical, widely used internal project management tool. The incident response team thinks the data loss may be limited to only a part of the organization. While there is a slight possibility they could recover this data, it would mean keeping the service down for another day, impacting more users. One team has a critical meeting with an important client and needs the service restored within the next hour. This meant responders had to determine the blast radius of impacted users, the extent of their data loss, and the implications to those teams while the clock was ticking. Time pressure makes any kind of mental or coordinative efforts more challenging, and replanning with limited information can have significant consequences as needed perspectives may be unavailable to weigh in, causing more stress to all involved and forcing unexpected shifts in priorities or undesirable tradeoffs.</p> <p>In <a href="https://www.youtube.com/watch?v=kBk9BpR9Yfs">a recent study looking at tradeoff decisions</a> during high-severity incidents, my colleague Courtney Nash and I found that successfully replanning decisions was inevitably "cross-boundary". A major outage often requires many different roles and levels of the organization to get involved. This meant that an understanding of the <em>differing goals and priorities of each role</em> was essential to being able to quickly replan without sacrificing anyone’s goals. Or, when goals and work need to be changed, the implications of doing so would be clearer to the replanning efforts. These findings and others from the resilience literature provide an important strategy for resilient replanning:</p> <p><strong>Create opportunities to broaden perspectives</strong>: Formal or informal discussions highlighting implicit perceptions and beliefs can influence how and when participants take action during an incident or work planning. They can use this information to revise inaccurate mental models, adjust policies and practices, and help organizations identify better approaches to team structure, escalation patterns, and other supporting workflows. A greater understanding of goals and priorities and how they may shift in response to different demands aids in prioritization during replanning. A crucial part of coping with degraded conditions is to assess achievable goals given the current situation and figure out which ones may need to be sacrificed or relaxed to sustain operations.</p> <h2>Reconfiguring: Adjusting to changing conditions</h2> <p>Surprises seldom occur when it is convenient to deal with them. Instead, organizations scramble to respond with whoever is available and whatever expertise, authority, or budget may be available. Organizations that flexibly and effectively use the given resources can support effective problem-solving and coordination even in challenging conditions. This can be simple things like having a widely accessible communication platform that doesn’t require special permissions, codes, or downloaded apps, allowing anyone who <em>could</em> help to join in the effort seamlessly. It may be more complex - such as an organization that promotes cross-training for adjacent roles.</p> <p>Or it could be holding company-wide game days to be able to efficiently engineers from multiple teams on a significant outage because they have common ground - they know each other, have some familiarity with different parts of the system than they usually work on, and can rely on their shared experiences to accurately predict who may have appropriate skills to perform complex tasks. Just like you might add, delete, or move resources within your network configuration, a strategy of dynamic reconfiguration of people and software helps resilience by moving expertise and capabilities to where they are needed while minimizing any impacts of degraded performance in other areas. A resilient strategy for reconfiguration in software organizations includes:</p> <p><strong>Cultivating cross-boundary awareness</strong>: Reconfiguring allows an organization to share resources more efficiently when there is accurate knowledge about the current state of the goals, priorities, and work underway of adjacent teams or major initiatives within the organization. <a href="https://www.researchgate.net/profile/David-Woods-19/publication/227992178_Common_Ground_and_Coordination_in_Joint_Activity/links/5ba284c892851ca9ed15cdc0/Common-Ground-and-Coordination-in-Joint-Activity.pdf">Research looking at complex coordination requirements has shown</a> better outcomes for real-time reconfiguring when the parties have a reasonably calibrated shared mental model about the situation and the context for the decision. This enables each participant to bring their knowledge to bear quickly and effectively, to support collaborative cross-checking (essentially vetting new ideas relative to different perspectives) and allows for reciprocity (being able to lend help or relax constraints) across teams or organizations.</p> <p><strong>Maintaining some degree of slack in the system</strong>: Modern organizations are fixated on eliminating waste and running lean. But what is considered inefficient or redundant before an incident is often recognized as critical, or at least necessary, in hindsight. In many incidents I’ve studied, Mean Time To Repair (MTTR) is usually reduced by engineers proactively joining a response even when they are not on-call. This additional capacity, not typically acknowledged or accounted for when assessing the actual requirements for maintaining the system, is nonetheless critical. It is realized due to engineers’ professional courtesy to one another. It is highly stressful to be responsible for a challenging incident or deal with the pressure of a public outage. I’ve seen other engineers jump into the slack to assist even when putting babies to bed or taking vacations. Burnout, turnover, and changing roles are inevitable. Maintaining a slightly larger team than optimally efficient can help make the team more resilient by increasing communication, opportunities to build and maintain common ground, and cross-training for new skills.</p> <h2>Reviewing performance: Continuous learning supports continued performance</h2> <p>There is a difference between how we <em>think</em> work gets done and how work <em>actually</em> gets done. Learning review techniques that focus on what happened, not what was clear after the fact, helps to show how the system behaves under varying conditions and how organizations and teams function in practice. Discussing the contributing factors to the failure, hidden or surprising interdependencies, and other technical details should also include details about organizational pressures, constraints, or practices that helped or hindered the response. This is true even around the "small stuff", like how an engineer noticed a spike in CPU usage on their day off or why a marketing intern was the only one who knew an engineering team was planning a major update the day before a critical feature launched. When the post-incident review broadens to include both the social and technical aspects of the event, the team can address both software and organizational factors, creating a more resilient future response.</p> <p>Some strategies for enabling continuous learning to support resilience include:</p> <p><strong>Practice humility</strong>: As mentioned before, inaccurate or incomplete mental models are a fact of life in large-scale distributed software system operations. Listening to and asking clarifying questions helps to create micro-learning opportunities to update faulty mental models (including your own!)</p> <p><strong>Don’t assume everyone is on the same page</strong>: Where possible, always start with the least experienced person’s understanding of a particular problem, interaction, or situation and work up from there, adding technical detail and context as the review progresses. This gives everyone a common basis of understanding and helps highlight any pervasive but faulty assumptions or beliefs.</p> <p><strong>Make the learnings widely accessible</strong>: Importantly, organizations can extend learning by creating readable and accessible artifacts (including documents, recordings, and visualizations) that are easily shared, that allow for publicly asking and answering questions to promote a culture of knowledge sharing, and are available to multiple parties across the organization even non-engineering roles. A narrative approach that "tells the story" of the incident is engaging and helps the reader <a href="https://www.humanfactors.lth.se/fileadmin/lusa/Sidney_Dekker/books/DekkersFieldGuide.pdf">understand why certain actions or decisions made sense at the time</a>. It’s a subtle but non-trivial framing. It encourages readers to be curious and promotes empathy, not judgment.</p> <h2>Resilience takeaways</h2> <p>Like any other key driver of performance, resilience requires investment. Organizations unwilling or unable to invest in taking a systems approach can reallocate resources to resilient performance in small but repeatable ways by maximizing the types of activities, interactions, and practices that allow for REvision, REcognition, REplanning, REconfiguring, and REviewing. In doing so, we can enable software teams to coordinate and collaborate more effectively under conditions of uncertainty, time pressure, and stress to improve operational outcomes.</p> <div class="author-section-full"> <!-- main wrapper for authors section --> <h2>About the Author</h2> <!-- section title --> <div class="author" data-id="author-Laura-Maguire"> <!-- main wrapper for each author --> <a href="/profile/Laura-Maguire/" class="avatar author__avatar" aria-label="Laura Maguire"> </a> <div class="content-author"> <h4><strong>Laura Maguire</strong></h4> <div class="show-author-bio"> <p> <!-- author bio will be inserted by frontend --> </p> <span> <div class="icon button-icon icon__plus-circle"></div><span class="show-more">Show more</span><span class="show-less">Show less</span> </span> </div> </div> </div> </div> </div> <div id="zoom-container"></div> <input type="hidden" name="" value="Thank you for your review!" id="cr_messages_submitSuccess"/> <input type="hidden" name="" value="Rating is required" id="cr_messages_ratingRequired"/> <input type="hidden" name="" value="Adaptive Responses to Resiliently Handle Hard Problems in Software Operations" id="cr_item_title"/> <input type="hidden" name="" value="Laura Maguire" id="cr_item_author"/> <input type="hidden" name="" value="http://www.infoq.com/articles/adaptive-responses-resilience-software-operations/" id="cr_item_url"/> <input type="hidden" name="" value="articles" id="cr_item_ctype"/> <input type="hidden" name="" value="en" id="cr_item_lang"/> <input type="hidden" name="" value="1729674000000" id="cr_item_published_time"/> <input type="hidden" name="" value="2499" id="cr_item_primary_topic"/> <script type="text/javascript"> ContentRating.readMessages(); ContentRating.readContentItem(); </script> <form class="box__border box form rate contentRatingWidget"> <h3 class="heading">Rate this Article</h3> <div class="criterias"> <div class="crit" id="relevance_fieldset"> <div class="crit__name">Adoption</div> <span class="stars"> <input type="radio" id="relevance-star5" name="rating-relevance" value="5" /><label class="star" for="relevance-star5" title="Innovator"></label> <input type="radio" id="relevance-star4" name="rating-relevance" value="4" /><label class="star" for="relevance-star4" title="Early adopter"></label> <input type="radio" id="relevance-star3" name="rating-relevance" value="3" /><label class="star" for="relevance-star3" title="Early majority"></label> <input type="radio" id="relevance-star2" name="rating-relevance" value="2" /><label class="star" for="relevance-star2" title="Late majority"></label> <input type="radio" id="relevance-star1" name="rating-relevance" value="1" /><label class="star" for="relevance-star1" title="Laggards"></label> </span> <span class="stars__total"></span> </div> <div class="crit" id="style_fieldset"> <div class="crit__name">Style</div> <span class="stars"> <input type="radio" id="style-star5" name="rating-style" value="5" /><label class="star" for="style-star5" title="Exceptional"></label> <input type="radio" id="style-star4" name="rating-style" value="4" /><label class="star" for="style-star4" title="Good"></label> <input type="radio" id="style-star3" name="rating-style" value="3" /><label class="star" for="style-star3" title="Average"></label> <input type="radio" id="style-star2" name="rating-style" value="2" /><label class="star" for="style-star2" title="Acceptable"></label> <input type="radio" id="style-star1" name="rating-style" value="1" /><label class="star" for="style-star1" title="Poor"></label> </span> <span class="stars__total"></span> </div> </div> </form> <div class="reviews tabs contentRatingWidget"> <div id="editorReview" class="tab" data-title="Editor Review"> <form class="box__border form contentRatingWidget" onsubmit="return false;"> <span class="field input__textarea" aria-required="false"> <textarea id="editor_input" placeholder="Click to leave your review..." name="textarea" value="" class="field__input"></textarea> <p class="input__message field__desc serverCallFeedback"></p> </span> <input class="button button__large submit_rating" type="submit" value="Submit"/> </form> </div> <div id="chiefEditorReview" class="tab" data-title="Chief Editor Action"> <form class="box__border form contentRatingWidget" onsubmit="return false;"> <span class="field input__textarea"> <textarea id="chiefEditor_input" placeholder="Chief Editor action..." value="" class="field__input"></textarea> <p class="input__message field__desc serverCallFeedback"></p> </span> <div class="actions"> <div class="actions__left"> <input class="button button__large submit_rating" type="submit" value="Submit"/> </div> <div class="actions__right"> <span class="field input__checkbox input--small"> <input type="checkbox" id="auth-checkbox" /> <label class="label" for="auth-checkbox"><span></span> Author Contacted</label> </span> </div> </div> </form> </div> </div> <script type="text/javascript"> if (!InfoQConstants.editorUser || InfoQConstants.editorUser == 'false') { $('.contentRatingWidget').remove(); } else { if (InfoQConstants.chiefEditor !== 'undefined' && InfoQConstants.chiefEditor == 'false') { $('#chiefEditorReview').remove(); } } </script> <div class="widget article__fromTopic topics"> <div class="widget__head related__for-topic" data-id="6817" data-trk-ref="content_primary_topic"> <h4 class="heading related__heading"> This content is in the <a href='/culture-methods/'>Culture & Methods</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="6817"> <a href="/culture-methods/" class="button related__topic button__small button__black">Culture & Methods</a> </li> <li data-id="66"> <a href="/continuous_improvement/" class="button related__topic button__small button__black">Continuous Improvement</a> </li> <li data-id="14722"> <a href="/Resilience/" class="button related__topic button__small button__black">Resilience</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="6044"> <a href="/SoftwareEngineering/" class="button related__topic button__small button__black">Software Engineering</a> </li> <li data-id="7434"> <a href="/performance/" class="button related__topic button__small button__black">Performance</a> </li> <li data-id="1389"> <a href="/architecture/" class="button related__topic button__small button__black">Architecture</a> </li> <li data-id="3"> <a href="/agile/" class="button related__topic button__small button__black">Agile</a> </li> </ul> </div> </div> <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": "culture-methods", "topicIds": "593,1894,2952,63,3450", "title": "Adaptive Responses to Resiliently Handle Hard Problems in Software Operations", "contentPath": "/articles/adaptive-responses-resilience-software-operations", "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="Culture & Methods"; //replace html entity since it conflicts with style box_title=box_title.replace("&","&"); $('.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("/articles/adaptive-responses-resilience-software-operations") !== -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 is-movable"> <div class="related__prsp"> <h4 class="heading">Popular across InfoQ</h4> <ul> <li> <h5 class="rvc__title"> <a href="/news/2024/11/aws-s3-static-website-hosting/" class="rvc__link"> AWS Amplify and Amazon S3 Integration Simplifies Static Website Hosting </a> </h5> </li> <li> <h5 class="rvc__title"> <a href="/news/2024/11/meta-notebook-llama/" class="rvc__link"> Meta Releases NotebookLlama: Open-Source PDF to Podcast Toolkit </a> </h5> </li> <li> <h5 class="rvc__title"> <a href="/news/2024/11/amazon-aurora-limiteless/" class="rvc__link"> Aurora Limitless: AWS Introduces New PostgreSQL Database with Automated Horizontal Scaling </a> </h5> </li> <li> <h5 class="rvc__title"> <a href="/news/2024/11/aws-websockets-costs/" class="rvc__link"> How Recall.ai Saved $1M on AWS by Eliminating WebSockets </a> </h5> </li> <li> <h5 class="rvc__title"> <a href="/news/2024/11/spring-6-2-spring-boot-3-4/" class="rvc__link"> Spring Framework 6.2 and Spring Boot 3.4 Improve Containers, Actuators ahead of New 2025 Generations </a> </h5> </li> <li> <h5 class="rvc__title"> <a href="/podcasts/engineering-leadership-trends/" class="rvc__link"> Trends in Engineering Leadership: Observability, Agile Backlash, and Building Autonomous Teams </a> </h5> </li> </ul> </div> </li> </ul> </div> <div class="article__more f_article_rightbar" data-col="2/6"> <script type="text/javascript"> window.finishedRightbarVcr = false; var _gaq = _gaq || []; var recomJson ="[{"topicsIds":null,"imageStoragePath":null,"contentType":"news","date":1732384800000,"title":"Netflix Rolls Out Service-Level Prioritized Load Shedding to Improve Resiliency","authorsList":["Rafal Gancarz"],"url":"https://www.infoq.com/news/2024/11/netflix-load-shedding","itemPath":"/news/2024/11/netflix-load-shedding","score":20},{"topicsIds":null,"imageStoragePath":"https://imgopt.infoq.com/fit-in/50x50/filters:quality(80)/articles/adapt-surprises-software-reliant-businesses/en/smallimage/Preparing-to-Be-Unprepared-logo-small-1723034897494.jpg","contentType":"articles","date":1723460400000,"title":"Prepare to Be Unprepared: Investing in Capacity to Adapt to Surprises in Software-Reliant Businesses","authorsList":["John Allspaw"],"url":"https://www.infoq.com/articles/adapt-surprises-software-reliant-businesses","itemPath":"/articles/adapt-surprises-software-reliant-businesses","score":20},{"topicsIds":null,"imageStoragePath":null,"contentType":"news","date":1732189140000,"title":"How to Delight Your Developers with User-Centric Platforms and Practices","authorsList":["Ben Linders"],"url":"https://www.infoq.com/news/2024/11/developers-platforms-practices","itemPath":"/news/2024/11/developers-platforms-practices","score":19},{"topicsIds":null,"imageStoragePath":null,"contentType":"news","date":1731583500000,"title":"Using DORA for Sustainable Engineering Performance Improvement","authorsList":["Ben Linders"],"url":"https://www.infoq.com/news/2024/11/DORA-engineering-improvement","itemPath":"/news/2024/11/DORA-engineering-improvement","score":19},{"topicsIds":null,"imageStoragePath":"https://imgopt.infoq.com/fit-in/50x50/filters:quality(80)/articles/foster-creativity-design-system/en/smallimage/how-rules-boundaries-logo-small-1730453357995.jpg","contentType":"articles","date":1730970000000,"title":"How Rules Can Foster Creativity: the Design System of Reykjavík","authorsList":["Auðbergur Gíslason"],"url":"https://www.infoq.com/articles/foster-creativity-design-system","itemPath":"/articles/foster-creativity-design-system","score":16},{"topicsIds":null,"imageStoragePath":null,"contentType":"news","date":1730466000000,"title":"Software Architecture Tracks at QCon San Francisco 2024 – Navigating Current Challenges and Trends","authorsList":["Artenisa Chatziou"],"url":"https://www.infoq.com/news/2024/11/architecture-qcon-san-francisco","itemPath":"/news/2024/11/architecture-qcon-san-francisco","score":16},{"topicsIds":null,"imageStoragePath":"https://imgopt.infoq.com/fit-in/50x50/filters:quality(80)/articles/transforming-legacy-healthcare-systems/en/smallimage/transforming-legacy-healthcare-logo-small-1731055590401.jpg","contentType":"articles","date":1731927900000,"title":"Transforming Legacy Healthcare Systems: A Journey to Cloud-Native Architecture","authorsList":["Leander Vanderbijl"],"url":"https://www.infoq.com/articles/transforming-legacy-healthcare-systems","itemPath":"/articles/transforming-legacy-healthcare-systems","score":15},{"topicsIds":null,"imageStoragePath":null,"contentType":"news","date":1730373900000,"title":"Staying Innovative on a Journey from Start-Up to Scale-Up","authorsList":["Ben Linders"],"url":"https://www.infoq.com/news/2024/10/innovative-scale-up","itemPath":"/news/2024/10/innovative-scale-up","score":15},{"topicsIds":null,"imageStoragePath":"https://imgopt.infoq.com/fit-in/50x50/filters:quality(80)/articles/cell-based-architecture-adoption-guidelines/en/smallimage/cell-based-architecture-logo-small-1730198054924.jpg","contentType":"articles","date":1730718000000,"title":"Cell-Based Architecture Adoption Guidelines","authorsList":["Guy Coleman"],"url":"https://www.infoq.com/articles/cell-based-architecture-adoption-guidelines","itemPath":"/articles/cell-based-architecture-adoption-guidelines","score":14},{"topicsIds":null,"imageStoragePath":"https://imgopt.infoq.com/fit-in/50x50/filters:quality(80)/articles/cell-based-architecture-resilient-fault-tolerant-systems/en/smallimage/taking-advantage-cell-based-logo-small-1728980269641.jpg","contentType":"articles","date":1729508400000,"title":"Taking Advantage of Cell-Based Architectures to Build Resilient and Fault-Tolerant Systems","authorsList":["Yury Niño Roa"],"url":"https://www.infoq.com/articles/cell-based-architecture-resilient-fault-tolerant-systems","itemPath":"/articles/cell-based-architecture-resilient-fault-tolerant-systems","score":13},{"topicsIds":null,"imageStoragePath":"https://imgopt.infoq.com/fit-in/50x50/filters:quality(80)/articles/cell-based-architecture-2024-series/en/smallimage/small-series-logo-1728400245988.jpg","contentType":"articles","date":1728907200000,"title":"Article Series: Cell-Based Architectures: How to Build Scalable and Resilient Systems","authorsList":["Rafal Gancarz"],"url":"https://www.infoq.com/articles/cell-based-architecture-2024-series","itemPath":"/articles/cell-based-architecture-2024-series","score":13},{"topicsIds":null,"imageStoragePath":"https://imgopt.infoq.com/fit-in/50x50/filters:quality(80)/articles/cell-based-architecture-distributed-systems/en/smallimage/how-cell-based-arhitecture-logo-small-1728382176391.jpg","contentType":"articles","date":1728903780000,"title":"How Cell-Based Architecture Enhances Modern Distributed Systems","authorsList":["Erica Pisani","Rafal Gancarz"],"url":"https://www.infoq.com/articles/cell-based-architecture-distributed-systems","itemPath":"/articles/cell-based-architecture-distributed-systems","score":13},{"topicsIds":null,"imageStoragePath":"https://imgopt.infoq.com/fit-in/50x50/filters:quality(80)/presentations/resilience-chaos-kubernetes/en/smallimage/infoq-live-logo-small-1727687975246.jpg","contentType":"presentations","date":1727699880000,"title":"Resilience and Chaos Engineering in a Kubernetes World","authorsList":["Supratip Banerjee","Soumyadip Chowdhury","Ana Medina","Uma Mukkara","Yury Niño Roa","Renato Losio"],"url":"https://www.infoq.com/presentations/resilience-chaos-kubernetes","itemPath":"/presentations/resilience-chaos-kubernetes","score":12},{"topicsIds":null,"imageStoragePath":"https://imgopt.infoq.com/fit-in/50x50/filters:quality(80)/articles/building-better-platforms-with-empathy/en/smallimage/Building-Better-Platforms-logo-small-1726212565814.jpg","contentType":"articles","date":1727089200000,"title":"Building Better Platforms with Empathy: Case Studies and Counter-Examples","authorsList":["David Stenglein"],"url":"https://www.infoq.com/articles/building-better-platforms-with-empathy","itemPath":"/articles/building-better-platforms-with-empathy","score":12},{"topicsIds":null,"imageStoragePath":"https://imgopt.infoq.com/fit-in/50x50/filters:quality(80)/articles/platform-engineering-developer-experience/en/smallimage/Curating-Developer-Experience-logo-small-1725956305853.jpg","contentType":"articles","date":1726740000000,"title":"Curating Developer Experience: Practical Insights from Building a Platform Team","authorsList":["Andy Burgin"],"url":"https://www.infoq.com/articles/platform-engineering-developer-experience","itemPath":"/articles/platform-engineering-developer-experience","score":12},{"topicsIds":null,"imageStoragePath":"https://imgopt.infoq.com/fit-in/50x50/filters:quality(80)/articles/analysis-optimization-change-release-process/en/smallimage/Mastering-Impact-Analysis-Optimizing-Change-logo-small-1724927868071.jpg","contentType":"articles","date":1726045200000,"title":"Mastering Impact Analysis and Optimizing Change Release Processes","authorsList":["Tejas Ghadge"],"url":"https://www.infoq.com/articles/analysis-optimization-change-release-process","itemPath":"/articles/analysis-optimization-change-release-process","score":11},{"topicsIds":null,"imageStoragePath":"https://imgopt.infoq.com/fit-in/50x50/filters:quality(80)/articles/shipping-threads-5-months/en/smallimage/Shipping-threads-5-months-logo-small-1723620326737.jpg","contentType":"articles","date":1724058000000,"title":"Simplicity, Speed, and Re-Use. Shipping Threads in 5 Months","authorsList":["Zahan Malkani"],"url":"https://www.infoq.com/articles/shipping-threads-5-months","itemPath":"/articles/shipping-threads-5-months","score":10},{"topicsIds":null,"imageStoragePath":"https://imgopt.infoq.com/fit-in/50x50/filters:quality(80)/presentations/organization-resilience-documentation/en/smallimage/DavidGrizzanti-small-1722859464877.jpg","contentType":"presentations","date":1723629060000,"title":"Building Organizational Resilience through Documentation and InnerSource Practices","authorsList":["David Grizzanti"],"url":"https://www.infoq.com/presentations/organization-resilience-documentation","itemPath":"/presentations/organization-resilience-documentation","score":10},{"topicsIds":null,"imageStoragePath":"https://imgopt.infoq.com/fit-in/50x50/filters:quality(80)/presentations/generative-ai-resilience/en/smallimage/AlexCruikshank-small-1720691409057.jpg","contentType":"presentations","date":1722591660000,"title":"Generative AI and Organizational Resilience","authorsList":["Alex Cruikshank"],"url":"https://www.infoq.com/presentations/generative-ai-resilience","itemPath":"/presentations/generative-ai-resilience","score":10},{"topicsIds":null,"imageStoragePath":"https://imgopt.infoq.com/fit-in/50x50/filters:quality(80)/articles/scaling-challenges/en/smallimage/ScalingChallengesProductivityCost EfficiencyandMicroserviceManagement-MilenaNikolic-small-1720627063694.jpg","contentType":"articles","date":1721638800000,"title":"Scaling Challenges: Productivity, Cost Efficiency, and Microservice Management","authorsList":["Milena Nikolic"],"url":"https://www.infoq.com/articles/scaling-challenges","itemPath":"/articles/scaling-challenges","score":10},{"topicsIds":null,"imageStoragePath":"https://imgopt.infoq.com/fit-in/50x50/filters:quality(80)/minibooks/cell-based-architecture-2024/en/smallimage/updated-small-image-cover-cell-based-architecture-2024-1722594875278.jpg","contentType":"minibooks","date":1721206800000,"title":"Cell-Based Architectures: How to Build Scalable and Resilient Systems","authorsList":["InfoQ"],"url":"https://www.infoq.com/minibooks/cell-based-architecture-2024","itemPath":"/minibooks/cell-based-architecture-2024","score":10},{"topicsIds":null,"imageStoragePath":"https://imgopt.infoq.com/fit-in/50x50/filters:quality(80)/presentations/culture-continuous-experimentation/en/smallimage/SarahAslanifar-small-1718796432139.jpg","contentType":"presentations","date":1720020300000,"title":"Building a Culture of Continuous Experimentation","authorsList":["Sarah Aslanifar"],"url":"https://www.infoq.com/presentations/culture-continuous-experimentation","itemPath":"/presentations/culture-continuous-experimentation","score":10},{"topicsIds":null,"imageStoragePath":"https://imgopt.infoq.com/fit-in/50x50/filters:quality(80)/articles/platform-runtime-engineering/en/smallimage/WhenDevOpsRunsItsCourseWeNeedPlatformasaRuntime-small-1719237072642.jpg","contentType":"articles","date":1719565200000,"title":"Platform as a Runtime - the Next Step in Platform Engineering","authorsList":["Aviran Mordo"],"url":"https://www.infoq.com/articles/platform-runtime-engineering","itemPath":"/articles/platform-runtime-engineering","score":10},{"topicsIds":null,"imageStoragePath":"https://imgopt.infoq.com/fit-in/50x50/filters:quality(80)/articles/virtual-panel-developer-experience-platform-engineering/en/smallimage/GettyImages-1457646484-small-1717772955687.jpg","contentType":"articles","date":1718182800000,"title":"Delivering Great Developer Experiences with Platform Engineering","authorsList":["Ben Linders","Aviran Mordo","Jemma Hussein Allen","Ana Petkovska","Andy Burgin"],"url":"https://www.infoq.com/articles/virtual-panel-developer-experience-platform-engineering","itemPath":"/articles/virtual-panel-developer-experience-platform-engineering","score":10},{"topicsIds":null,"imageStoragePath":"https://imgopt.infoq.com/fit-in/50x50/filters:quality(80)/presentations/collective-intelligence-productivity/en/smallimage/SwetaSaraf-small-1716451427557.jpg","contentType":"presentations","date":1717604640000,"title":"Multiplying Engineering Productivity in Face of Constant Change","authorsList":["Shweta Saraf"],"url":"https://www.infoq.com/presentations/collective-intelligence-productivity","itemPath":"/presentations/collective-intelligence-productivity","score":10},{"topicsIds":null,"imageStoragePath":null,"contentType":"news","date":1732096800000,"title":"High-Performance Serverless with Rust: Insights from Benjamen Pyle’s Talk at QCon San Francisco","authorsList":["Steef-Jan Wiggers"],"url":"https://www.infoq.com/news/2024/11/high-performance-serverless-rust","itemPath":"/news/2024/11/high-performance-serverless-rust","score":1},{"topicsIds":null,"imageStoragePath":null,"contentType":"news","date":1732035600000,"title":"Carle Lerche Talking at QCon SF about Rust: a Productive Language for Writing Database Applications","authorsList":["Steef-Jan Wiggers"],"url":"https://www.infoq.com/news/2024/11/rust-code-productive-databases","itemPath":"/news/2024/11/rust-code-productive-databases","score":1},{"topicsIds":null,"imageStoragePath":null,"contentType":"news","date":1730923200000,"title":"Improving the Efficiency of Goku Time-Series Database at Pinterest","authorsList":["Mohit Palriwal"],"url":"https://www.infoq.com/news/2024/11/time-series-db-pinterest","itemPath":"/news/2024/11/time-series-db-pinterest","score":1},{"topicsIds":null,"imageStoragePath":"https://imgopt.infoq.com/fit-in/50x50/filters:quality(80)/articles/multi-region-architecture/en/smallimage/optimizing-wellhub-autocomplete-logo-small-1728898753118.jpg","contentType":"articles","date":1729155600000,"title":"Optimizing Wellhub Autocomplete Service Latency: a Multi-Region Architecture","authorsList":["Matheus Felisberto"],"url":"https://www.infoq.com/articles/multi-region-architecture","itemPath":"/articles/multi-region-architecture","score":1},{"topicsIds":null,"imageStoragePath":"https://imgopt.infoq.com/fit-in/50x50/filters:quality(80)/presentations/gpu-memory-tools/en/smallimage/Joe-Rowell-small-logo-1727793898391.jpeg","contentType":"presentations","date":1727788200000,"title":"Pitfalls of Unified Memory Models in GPUs","authorsList":["Joe Rowell"],"url":"https://www.infoq.com/presentations/gpu-memory-tools","itemPath":"/presentations/gpu-memory-tools","score":1},{"topicsIds":null,"imageStoragePath":"https://imgopt.infoq.com/fit-in/50x50/filters:quality(80)/presentations/languages-packets/en/smallimage/AlanElder-small-1721421020665.jpg","contentType":"presentations","date":1724943900000,"title":"What Can You Learn from the Fastest Code in the World?","authorsList":["Alan Elder"],"url":"https://www.infoq.com/presentations/languages-packets","itemPath":"/presentations/languages-packets","score":1},{"topicsIds":null,"imageStoragePath":"https://imgopt.infoq.com/fit-in/50x50/filters:quality(80)/articles/java-virtual-threads-a-case-study/en/smallimage/java-virtual-threads-small-logo-1720447061699.jpg","contentType":"articles","date":1720688400000,"title":"Java Virtual Threads: a Case Study","authorsList":["Gary DeVal","Vijay Sundaresan","Rich Hagarty","Laura Cowen"],"url":"https://www.infoq.com/articles/java-virtual-threads-a-case-study","itemPath":"/articles/java-virtual-threads-a-case-study","score":1},{"topicsIds":null,"imageStoragePath":"https://imgopt.infoq.com/fit-in/50x50/filters:quality(80)/presentations/build-platform/en/smallimage/SmrutiPatel-small-1716887912686.jpg","contentType":"presentations","date":1718381160000,"title":"Building a Successful Platform: Acceleration, Autonomy & Accountability","authorsList":["Smruti Patel"],"url":"https://www.infoq.com/presentations/build-platform","itemPath":"/presentations/build-platform","score":1},{"topicsIds":null,"imageStoragePath":null,"contentType":"news","date":1732448100000,"title":"Vercel Expands AI Toolkit with AI SDK 4.0 Update","authorsList":["Daniel Dominguez"],"url":"https://www.infoq.com/news/2024/11/vercel-ai-sdk","itemPath":"/news/2024/11/vercel-ai-sdk","score":0},{"topicsIds":null,"imageStoragePath":null,"contentType":"news","date":1732428000000,"title":"First Google Axion Processor Now Available: Claims Best Performance in Cloud Market","authorsList":["Renato Losio"],"url":"https://www.infoq.com/news/2024/11/google-axion-c4a","itemPath":"/news/2024/11/google-axion-c4a","score":0},{"topicsIds":null,"imageStoragePath":null,"contentType":"news","date":1732313760000,"title":"QCon SF 2024 - Why ML Projects Fail to Reach Production","authorsList":["Andrew Hoblitzell"],"url":"https://www.infoq.com/news/2024/11/why-ml-fails","itemPath":"/news/2024/11/why-ml-fails","score":0},{"topicsIds":null,"imageStoragePath":null,"contentType":"news","date":1732299960000,"title":"QCon SF 2024 - Scale out Batch GPU Inference with Ray","authorsList":["Andrew Hoblitzell"],"url":"https://www.infoq.com/news/2024/11/batch-inference-ray","itemPath":"/news/2024/11/batch-inference-ray","score":0},{"topicsIds":null,"imageStoragePath":null,"contentType":"news","date":1732284000000,"title":"Techniques and Trends in AI-Powered Search by Faye Zhang at QCon SF","authorsList":["Anthony Alford"],"url":"https://www.infoq.com/news/2024/11/qcon-sf-zhang-search","itemPath":"/news/2024/11/qcon-sf-zhang-search","score":0},{"topicsIds":null,"imageStoragePath":null,"contentType":"news","date":1732280400000,"title":"WildFly 34 Adds Preview of Jakarta EE 11 and Support for Jakarta Data","authorsList":["Shaaf Syed"],"url":"https://www.infoq.com/news/2024/11/wildfly-34-jakarta-ee","itemPath":"/news/2024/11/wildfly-34-jakarta-ee","score":0},{"topicsIds":null,"imageStoragePath":null,"contentType":"news","date":1732268760000,"title":"Aurora Limitless: AWS Introduces New PostgreSQL Database with Automated Horizontal Scaling","authorsList":["Renato Losio"],"url":"https://www.infoq.com/news/2024/11/amazon-aurora-limiteless","itemPath":"/news/2024/11/amazon-aurora-limiteless","score":0}]"; var whitepaperVcrsJson = null; var topicSponsorshipJson = "{"iconLink":"/url/f/a7abcada-6771-482e-ab82-a94212a4327b/","iconHref":"https://imgopt.infoq.com//fit-in/275x500/filters:quality(100)/filters:no_upscale()/sponsorship/topic/cebad54e-98bc-4f4b-9b1d-9f0d4b1aaee5/ScrumLogoRSB-1706173049477.jpg","id":"9dc64c84-bd35-4cbd-8e52-3dedd5667d77"}"; var vcrOptionalListJson = null; /* do not delete these two, as they are used further in the code */ var contentDatetimeFormat='MMM dd, yyyy'; var contentUriMapping="articles"; JSi18n.relatedRightbar_relatedContent='Related Content'; JSi18n.relatedRightbar_sponsoredContent='Related Sponsored Content'; JSi18n.relatedRightbar_sponsoredBy='Sponsored by'; var topicIds = "63,3450,593,1894,2952,876,3"; var communityIds = "2499"; var company = "Scrum.org"; // 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); } else { whitepaperVcrsJson = VCR.getByTopicsAndCommunities(window.vcrList, topicIds, communityIds, 5, false, null); } vcrOptionalListJson = VCR.getByTopicsAndCommunities(window.vcrList, topicIds, communityIds, 10, true, null); VCR.displayCustomRightbar(recomJson, whitepaperVcrsJson, topicSponsorshipJson); VCR.displayCustomRightbarOptionalVcrWidget(vcrOptionalListJson); 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.doTrackingCustomRightbar(); } }, 200); </script> <noscript> <div class="widget related__content article__widget"> <h3 class="widget__heading">Related Content</h3> <ul class="no-style cards" data-horizontal="true" data-size="xs" data-tax=""> </ul> </div> </noscript> <div class="newsletter widget" data-bg="infoq"> <h3 class="heading"><strong>The InfoQ</strong> Newsletter</h3> <p class="intro"> A round-up of last week’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> <div class="newsletter__subscribe"> <form class="form gdpr" id="floatingNewsletterForm" action="#" onsubmit="floatingNewsletterForm.saveSubscription(); return false;"> <div class="field input__text input__no-label input__medium newsletter__mail email"> <label class="field__label label" for="email-newsletter-infoq-guide">Enter your e-mail address</label> <input class="field__input input" id="email-newsletter-infoq-guide" placeholder="Enter your e-mail address" type="email"> <input type="text" name="emailH" id="input_floating_email_h" aria-required="false" style="display:none !important" tabindex="-1" autocomplete="off"> <input type="hidden" id="floating_fnt" name="fnt" value="roufQ3DkNuc74QpR"/> <input type="hidden" id="floatingNewsletterType" name="footerNewsletterType" value="regular"/> <input type="hidden" id="cmpi_f" name="cmpi" value="1"/> </div> <div class="hidden"> <span class="input__select field country"> <label for="input-floating-newsletter-country" class="label field__label">Select your country</label> <select id="input-floating-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-floating-nl"> <label for="gdpr-consent-simple-floating-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 class="button button__medium button__yellow" type="submit" role="button" value="Subscribe" onclick="return floatingNewsletterForm.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="floatingNewsletterEmailMessage"></span> </div> </div> <script type="text/javascript"> var floatingNewsletterForm = new Newsletter('Enter your e-mail address', 'email-newsletter-infoq-guide', 'floatingNewsletterType','floatingNewsletterEmailMessage', 'floating_fnt', 'input_floating_email_h', 'input-floating-newsletter-country','cmpi_f','floating_box'); </script> </div> </div> </div> </section> </article> <script type="text/javascript"> // global vars that can be used for this page, us ethis section to add more. var contentTitle = "Adaptive Responses to Resiliently Handle Hard Problems in Software Operations", contentPath = "/articles/adaptive-responses-resilience-software-operations", contentUUID = "ab9c627d-bbb0-4db2-916f-fe25009f2ab5", authorUserCSVIds = "126440611"; </script> <script src="https://cdn.infoq.com/statics_s2_20241119074149/scripts/prism-build.js"></script> <script src="https://cdn.infoq.com/statics_s2_20241119074149/scripts/lib/MathJax/MathJax.js?config=TeX-AMS_HTML"></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/2024/11/rust-code-productive-databases/" title="Carle Lerche Talking at QCon SF about Rust: a Productive Language for Writing Database Applications">Carle Lerche Talking at QCon SF about Rust: a Productive Language for Writing Database Applications</a></h5> </li> <li> <h5><a class="t_all_footer_more-boxes-item" href="/news/2024/11/android-gemini/" title="Google Introduces Gemini AI Features to Android Studio">Google Introduces Gemini AI Features to Android Studio</a></h5> </li> <li> <h5><a class="t_all_footer_more-boxes-item" href="/news/2024/11/github-universe-2024-ai/" title="GitHub Universe 2024 Unveils AI Innovations and Developer-Centric Tools">GitHub Universe 2024 Unveils AI Innovations and Developer-Centric Tools</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 & 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/2024/11/netflix-load-shedding/" title="Netflix Rolls Out Service-Level Prioritized Load Shedding to Improve Resiliency">Netflix Rolls Out Service-Level Prioritized Load Shedding to Improve Resiliency</a></h5> </li> <li> <h5><a class="t_all_footer_more-boxes-item" href="/articles/transforming-legacy-healthcare-systems/" title="Transforming Legacy Healthcare Systems: A Journey to Cloud-Native Architecture">Transforming Legacy Healthcare Systems: A Journey to Cloud-Native Architecture</a></h5> </li> <li> <h5><a class="t_all_footer_more-boxes-item" href="/news/2024/11/laws-software-architecture/" title="New &quot;Laws&quot; Announced at iSAQB Software Architecture Gathering">New "Laws" Announced at iSAQB Software Architecture Gathering</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 & 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="/podcasts/participatory-leadership-developing-psychological-safety/" title="Participatory Leadership and Developing a Culture of Psychological Safety">Participatory Leadership and Developing a Culture of Psychological Safety</a></h5> </li> <li> <h5><a class="t_all_footer_more-boxes-item" href="/news/2024/11/developers-platforms-practices/" title="How to Delight Your Developers with User-Centric Platforms and Practices">How to Delight Your Developers with User-Centric Platforms and Practices</a></h5> </li> <li> <h5><a class="t_all_footer_more-boxes-item" href="/podcasts/engineering-leadership-trends/" title="Trends in Engineering Leadership: Observability, Agile Backlash, and Building Autonomous Teams">Trends in Engineering Leadership: Observability, Agile Backlash, and Building Autonomous 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 & 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/2024/11/fabric-api-for-graphql/" title="Microsoft Announces General Availability of Fabric API for GraphQL">Microsoft Announces General Availability of Fabric API for GraphQL</a></h5> </li> <li> <h5><a class="t_all_footer_more-boxes-item" href="/news/2024/11/vercel-ai-sdk/" title="Vercel Expands AI Toolkit with AI SDK 4.0 Update">Vercel Expands AI Toolkit with AI SDK 4.0 Update</a></h5> </li> <li> <h5><a class="t_all_footer_more-boxes-item" href="/news/2024/11/why-ml-fails/" title="QCon SF 2024 - Why ML Projects Fail to Reach Production">QCon SF 2024 - Why ML Projects Fail to Reach Production</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="/presentations/dev-journey-kubernetes/" title="From Local to Production: A Modern Developer&rsquo;s Journey Towards Kubernetes">From Local to Production: A Modern Developer’s Journey Towards Kubernetes</a></h5> </li> <li> <h5><a class="t_all_footer_more-boxes-item" href="/news/2024/11/timescale-pgai-vectorizer/" title="Timescale Bolsters AI-Ready PostgreSQL with pgai Vectorizer">Timescale Bolsters AI-Ready PostgreSQL with pgai Vectorizer</a></h5> </li> <li> <h5><a class="t_all_footer_more-boxes-item" href="/news/2024/11/kubecon-cloudnativecon-na-2024/" title="KubeCon + CloudNativeCon NA 2024: Key Announcements and Projects Updates">KubeCon + CloudNativeCon NA 2024: Key Announcements and Projects Updates</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’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’t know that you don’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="roufQ3DkNuc74QpR"/> <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="qconSF" class="event__container"> <a href="https://qconsf.com/?utm_source=infoq&utm_medium=referral&utm_campaign=largefooterad_qsf24 " target="_blank" class="qconplus__events-slider"> <div> <div class="logo-sf"></div> <br> </div> <p class="intro"><strong>QCon San Francisco<br style="margin:0">November 18-22, 2024.<br style="margin:0"><br></strong>QCon San Francisco International Software Conference returns on November 18-24. More than 1000 software professionals will join together and learn about the emerging trends they should pay attention to in 2024, how to adopt them, how to avoid pitfalls, and how to embrace the best practices. <br>Join the experience and get implementable ideas to shape your projects that last beyond the conference.<br><strong class="button button__green cta__button">Register Now</strong></p> </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="Login" class="login" data-ref="mainLogin">Login</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="/about-c4media/" 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://qconsf.com/?utm_source=infoq&utm_medium=referral&utm_campaign=footer_qsf24" target="_blank">QCon San Francisco</a> </h5> <span class="meta date">NOVEMBER 18-22, 2024</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_qlondon25" target="_blank">QCon London</a> </h5> <span class="meta date">APRIL 7-9, 2025</span> </div> </li> <li><span class="icon event__type conference"></span> <div class="qcon__detail"> <h5 class="heading"> <a rel="noreferrer noopener" href="https://devsummit.infoq.com/conference/boston2025?utm_source=infoq&utm_medium=referral&utm_campaign=footer_idsboston25" target="_blank">InfoQ Dev Summit Boston</a> </h5> <span class="meta date">June 9-10, 2025</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">223K 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">21K Followers</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">53.4k 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://www.amazon.com/dp/B07KMWGNNL" target="_blank"><span class="icon icon__large icon__social icon__alexa"></span><div><span class="social__count">Alexa</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><img loading="lazy" width="65px" height="64px" src="https://cdn.infoq.com/statics_s2_20241119074149/styles/static/images/ui/footer/infoq-podcast-small.jpg" alt="The InfoQ Podcast Logo - Stay in the know"></a> <a href="/podcasts/#engineering_culture" class="stayIn_panel" target="_blank" rel="noreferrer noopener"><span>Engineering Culture Podcast</span><img loading="lazy" width="65px" height="64px" alt="Engineering Culture Podcast Logo - Stay in the know" src="https://cdn.infoq.com/statics_s2_20241119074149/styles/static/images/ui/footer/engineering-culture-podcast-small.jpg"></a> <a href="/software-architects-newsletter/" class="stayIn_panel" target="_blank" rel="noreferrer noopener"><span>The Software Architects' Newsletter</span><img loading="lazy" width="65px" height="64px" alt="The Software Architects' Newsletter Logo - Stay in the know" src="https://cdn.infoq.com/statics_s2_20241119074149/styles/static/images/ui/footer/architects-newsletter-small.jpg"></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 © 2006-2024 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=roufQ3DkNuc74QpR&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 = "Adaptive Responses to Resiliently Handle Hard Problems in Software Operations"; 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_s2_20241119074149/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> <!-- 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'], 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> </body> </html> <!-- s2 -->