3291 lines
220 KiB
HTML
3291 lines
220 KiB
HTML
<!DOCTYPE html>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
|
||
<head>
|
||
<!-- Google Optimize Anti-flicker snippet (recommended) -->
|
||
<style>.async-hide { opacity: 0 !important} </style>
|
||
<style>.promo{background:#222528;position:fixed;z-index:1001!important;left:0;top:0;right:0;max-height:48px;min-height:48px;padding-top:0!important;padding-bottom:0!important}.promo,.promo p{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.promo p{font-size:.8125rem;line-height:1rem;color:#fff;margin-bottom:0;margin-top:0;margin:0 auto;display:-webkit-box;display:-ms-flexbox;display:flex;font-weight:700}@media only screen and (max-width:650px){.promo p{font-size:.6875rem}}.promo span{overflow:hidden;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical}.promo a{color:#fff!important;text-decoration:underline!important}.promo a.btn{background:#d0021b;padding:7px 20px;text-decoration:none!important;font-weight:700;margin-left:10px;margin-right:10px;white-space:nowrap;border-radius:5px}@media only screen and (max-width:650px){.promo a.btn{font-size:.6875rem;padding:7px 10px}}.promo.container{padding-top:8px;padding-bottom:8px}@media only screen and (min-width:1050px){.promo.container{padding-top:0;padding-bottom:0}}.promo .actions{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.promo .actions__left{-ms-flex-preferred-size:100%;flex-basis:100%;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.promo .actions__right{-ms-flex-preferred-size:40px;flex-basis:40px;margin-top:0;margin-bottom:0;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.promo.hidden{display:none}.promo.show{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.promo.show .container__inner{-webkit-box-flex:1;-ms-flex:1;flex:1}.promo.fixed{position:fixed}.promo.show+header.header{margin-top:48px}.header{background:#fff;-webkit-box-shadow:0 1px 0 #dde2e5;box-shadow:0 1px 0 #dde2e5}.header .actions__left,.header__bottom__events{max-width:100%!important;margin:0}.header .header__events-all{margin:0;display:-webkit-box;display:-ms-flexbox;display:flex;position:relative}.header .header__events-all .header__event-slot{-webkit-box-flex:1;-ms-flex:1 100%;flex:1 100%;border-right:1px solid #dde2e5;margin-top:3px;margin-bottom:3px;padding-left:15px;text-align:left;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding-right:5px;min-width:300px}.header .header__events-all .header__event-slot:hover{text-decoration:none!important}.header .header__events-all .header__event-slot img{min-width:40px;height:40px}.header .header__events-all .header__event-slot div{margin-left:10px}.header .header__events-all .header__event-slot span{font-weight:700!important;font-size:.75rem;margin-bottom:0!important;margin-top:0;display:block;line-height:1.125rem;text-align:left}.header .header__events-all .header__event-slot p{font-weight:400;font-size:.625rem;line-height:130%!important;color:#495057!important;margin:0}@media only screen and (min-width:1050px){.header .header__events-all .header__event-slot p{font-size:.625rem}}.header .header__events-all .header__event-slot:first-child{padding-left:0}.header .header__events-all .header__event-slot:last-child{padding-right:0;border-right:0}@media only screen and (min-width:1050px){.header__bottom,.header__middle,.header__top{position:relative;white-space:nowrap}}.header__top{padding:10px 0}@media only screen and (min-width:800px){.header__top{padding:5px 0}}.header__bottom{padding:5px 0;z-index:29;max-width:100%}.header__bottom a{font-size:.8125rem}.header__bottom .trending{margin-left:0;margin-right:0}.header__bottom .actions{-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.header__bottom .actions__left{max-width:calc(100% + 8px)}@media only screen and (min-width:800px){.header__bottom .actions__left{max-width:calc(100% + 24px)}}.header__bottom .actions__right{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;display:none}@media only screen and (min-width:1050px){.header__bottom .actions__right{display:-webkit-box;display:-ms-flexbox;display:flex}}.header__middle{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap}@media only screen and (min-width:1050px){.header__middle{-ms-flex-wrap:nowrap;flex-wrap:nowrap}}.header__top .actions__left{-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-line-pack:center;align-content:center}@media only screen and (min-width:1050px){.header__top .actions__right{max-width:430px}}.no-style.header__nav li:nth-child(3){font-weight:700}.no-style.header__nav li:nth-child(3) a{color:#0e5ef1!important}.header__bottom__events::after{background:-webkit-gradient(linear,left top,right top,color-stop(0,rgba(255,255,255,0)),to(#fff));background:linear-gradient(90deg,rgba(255,255,255,0) 0,#fff 100%);content:'';position:absolute;height:60px;right:10px;width:25px}@media only screen and (min-width:1050px){.header__bottom__events::after{display:none}}.contribute-link{font-weight:400;font-size:.6875rem;color:#000!important;position:relative;padding-left:10px}.contribute-link:hover{color:#00791d!important;text-decoration:none!important}.contribute-link::before{content:'';width:1px;height:12px;position:absolute;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);background:rgba(0,0,0,.1);left:-1px}.my-0{margin-top:0!important;margin-bottom:0!important}.header__desc.my-0{margin-left:0}.header__bottom__events .actions__left{max-width:100%!important;overflow-x:scroll;-ms-overflow-style:none;scrollbar-width:none;display:block;scroll-behavior:smooth;min-width:100%}.header__bottom__events .actions__left::-webkit-scrollbar{display:none}.header__bottom__events .actions__left:-webkit-scrollbar-thumb{background:#fff}.logo{line-height:1rem}.header{position:relative;z-index:41;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.header .input:focus,.header input[type=password]:focus,.header input[type=text]:focus{border:1px solid #00791d}.header a:not(.button):not(.login__action):not(.active){text-decoration:none;color:#222}.header a:not(.button):not(.login__action):not(.active):hover{text-decoration:underline;color:#222}.header__items{display:none;-ms-flex-wrap:wrap;flex-wrap:wrap}@media only screen and (min-width:1050px){.header__items{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.header__items nav{position:relative;background:0 0;padding:0;left:0;top:0;line-height:inherit;display:block;-webkit-box-shadow:none;box-shadow:none;max-width:100%;max-height:80px}}.header__items>div{width:100%;margin-bottom:32px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-flow:column nowrap;flex-flow:column nowrap}@media only screen and (min-width:552px){.header__items>div:not(:nth-last-child(-n+2)){margin-bottom:32px}}@media only screen and (min-width:552px) and (max-width:1050px){.header__items>div{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;-ms-flex-preferred-size:calc(99.7% * 1/2 - (32px - 32px * 1/2));flex-basis:calc(99.7% * 1/2 - (32px - 32px * 1/2));max-width:calc(99.7% * 1/2 - (32px - 32px * 1/2));width:calc(99.7% * 1/2 - (32px - 32px * 1/2))}.header__items>div:nth-child(1n){margin-right:32px;margin-left:0}.header__items>div:last-child{margin-right:0}.header__items>div:nth-child(2n){margin-right:0;margin-left:auto}}@media only screen and (min-width:800px) and (max-width:1050px){.header__items>div{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;-ms-flex-preferred-size:calc(99.7% * 1/4 - (32px - 32px * 1/4));flex-basis:calc(99.7% * 1/4 - (32px - 32px * 1/4));max-width:calc(99.7% * 1/4 - (32px - 32px * 1/4));width:calc(99.7% * 1/4 - (32px - 32px * 1/4))}.header__items>div:nth-child(1n){margin-right:32px;margin-left:0}.header__items>div:last-child{margin-right:0}.header__items>div:nth-child(4n){margin-right:0;margin-left:auto}}@media only screen and (min-width:1050px){.header__items>div{margin-bottom:0!important;margin-right:0!important;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}}.header__items .language__switcher{display:none}.header__items .language__switcher .li-nav.active>a,.header__items .language__switcher>li.active>a{color:#fff!important}.header__items .language__switcher .li-nav.active>a:hover,.header__items .language__switcher>li.active>a:hover{color:#fff!important;background:#0e5ef1}.header__items .language__switcher .li-nav:hover>a,.header__items .language__switcher>li:hover>a{color:#fff}.header+main{display:block;min-height:210px;-webkit-transition:margin .15s ease;transition:margin .15s ease;margin-top:0!important}.header--hide .header+main{margin-top:50px}.header--hide .header__toggle{opacity:0;top:20px;visibility:hidden}.header--hide .header__logo{max-height:0}.header--hide .header__middle,.header--hide .header__top{max-height:0;overflow:hidden;padding-top:0;padding-bottom:0;border-color:transparent}.header--hide .header__bottom .vue-portal-target{top:3px;right:0;bottom:auto;left:auto;position:absolute}.header__middle,.header__top{-webkit-transition:all .15s ease;transition:all .15s ease}.header__middle{border-bottom:1px solid rgba(0,0,0,.1);z-index:33}.header__middle .vue-portal-target{width:100%}@media only screen and (min-width:1050px){.header__middle .vue-portal-target{display:none}}@media only screen and (min-width:1050px){.header__middle{line-height:5.75rem;text-align:left;padding:0;z-index:30}.header__middle .widget__heading{display:none}}.header__top>.actions__left{display:none}@media only screen and (min-width:1050px){.header__top>.actions__left{display:-webkit-box;display:-ms-flexbox;display:flex}}.header__top>.actions__right{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;margin-right:0;margin-top:0;margin-bottom:0;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.header__top>.actions__right .dropdown__holder{width:calc(100vw - 16px);max-height:80vh}@media only screen and (min-width:600px){.header__top>.actions__right .dropdown__holder{width:auto}}.header__top>.actions__right>*{margin:0}.header__top>.actions__right .search{display:none}@media only screen and (min-width:1050px){.header__top>.actions__right>*{display:-webkit-box;display:-ms-flexbox;display:flex;white-space:nowrap}.header__top>.actions__right .search{display:block}}.header__top .user__login{display:block}.header__top .user__login>.button,.header__top .user__login>button{border-top-right-radius:0;border-bottom-right-radius:0}@media only screen and (min-width:1050px){.header__top{position:relative;right:auto;width:100%}}.header__logo{max-width:165px;position:absolute;top:8px;overflow:hidden;-webkit-transition:all .1s ease;transition:all .1s ease;z-index:32;line-height:2.25rem;height:36px;width:100px;margin-left:50px;-ms-flex-preferred-size:190px;flex-basis:190px}@media only screen and (min-width:800px){.header__logo{top:4px}}@media only screen and (min-width:1050px){.header__logo{position:relative;top:0;overflow:visible;margin-right:20px;margin-left:0;line-height:3.125rem;height:50px}.header__logo>*{width:165px}}@media only screen and (min-width:1280px){.header__logo{margin-right:30px}}.header__desc,.header__more>button{text-transform:capitalize;color:#666;letter-spacing:0;font-size:0;font-weight:400;line-height:1.5rem;vertical-align:top;font-smoothing:antialiased;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI Variable","Segoe UI",system-ui,ui-sans-serif,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";-webkit-transition:font-size .15s ease-in-out;transition:font-size .15s ease-in-out}@media only screen and (min-width:1050px){.header__desc,.header__more>button{font-size:.6875rem}}.header__desc{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;position:relative;width:auto}.header__topics{white-space:nowrap;float:right;position:relative}.header__topics *{display:inline-block;vertical-align:top}.header__topics a{font-size:.8125rem}@media only screen and (min-width:1050px){.header__topics{float:none}}.header__more{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;vertical-align:top}.header__more:before{left:-12px}.header__more:after,.header__more:before{content:'';width:1px;height:12px;position:absolute;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);background:rgba(0,0,0,.1)}.header__more:after{right:-12px}.header__more:hover{cursor:pointer;color:rgba(0,0,0,.75)}.header__user{display:inline-block;vertical-align:top;white-space:nowrap;margin-left:8px}@media only screen and (min-width:1050px){.header__user{margin-left:0}}.header__user>div{display:inline-block;vertical-align:top}.header__user-nav a:not(.button){text-transform:uppercase;font-size:.75rem;font-weight:600}.header__user-nav a:not(.button):not(.active){opacity:.5}.header__user-nav a:not(.button):not(.active):hover{opacity:.75}.header__user-nav a:not(.button):hover{text-decoration:none}.header__user-nav a:not(.button).active{color:#222;cursor:default;text-decoration:none}.header__user-nav a:not(.button):before{margin-right:0}.header__user-nav a:not(.button):not(:last-child){margin-right:16px}@media only screen and (min-width:1050px){.header__user-nav a:not(.button):not(:last-child){margin-right:32px}}@media only screen and (min-width:1050px){.header__user-nav+.header__topics{margin-left:56px}}.header__search{display:none;vertical-align:top;margin-right:0}@media only screen and (min-width:1050px){.header__search{display:inline-block}}.header__search,.header__user{line-height:inherit}.header__nav{border-bottom:1px solid rgba(0,0,0,.1)}@media only screen and (min-width:800px){.header__nav{border-bottom:0}}.header__nav .button{margin-left:0}.header__nav .button__more{margin-right:20px}.header__nav .li-nav,.header__nav>li{-webkit-transition:all .15s ease;transition:all .15s ease}@media only screen and (min-width:1050px){.header__nav .li-nav,.header__nav>li{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;vertical-align:middle;position:static;border:none;min-height:65px}.header__nav .li-nav:hover.has--subnav .nav .li-nav,.header__nav .li-nav:hover.has--subnav .nav>li,.header__nav>li:hover.has--subnav .nav .li-nav,.header__nav>li:hover.has--subnav .nav>li{white-space:normal}.header__nav .li-nav:hover.has--subnav .nav__subnav,.header__nav>li:hover.has--subnav .nav__subnav{opacity:1;top:100%;visibility:visible;-webkit-transition-delay:.25s;transition-delay:.25s}.header__nav .li-nav:hover.has--subnav .nav__category,.header__nav>li:hover.has--subnav .nav__category{width:100%}.header__nav .li-nav:hover.has--subnav .nav__category:after,.header__nav .li-nav:hover.has--subnav .nav__category:before,.header__nav>li:hover.has--subnav .nav__category:after,.header__nav>li:hover.has--subnav .nav__category:before{-webkit-transition-delay:.25s;transition-delay:.25s;opacity:1}}@media only screen and (min-width:1080px){.header__nav .li-nav:not(:last-child),.header__nav>li:not(:last-child){margin-right:23px;margin-left:23px}}@media only screen and (min-width:1280px){.header__nav .li-nav:not(:last-child),.header__nav>li:not(:last-child){margin-right:23px;margin-left:23px}}@media only screen and (min-width:1338px){.header__nav .li-nav:not(:last-child),.header__nav>li:not(:last-child){margin-right:23px;margin-left:23px}}.header__nav .li-nav>a,.header__nav>li>a{font-size:.875rem;line-height:1.5rem;padding:12px 0;color:#000;display:inline-block;max-width:100%;position:relative;z-index:61;white-space:normal}@media only screen and (min-width:1050px){.header__nav .li-nav>a,.header__nav>li>a{padding:8px 0 0;font-weight:700}}.header__nav .li-nav>a:after,.header__nav .li-nav>a:before,.header__nav>li>a:after,.header__nav>li>a:before{content:'';position:absolute;bottom:-1px;left:50%;width:0;height:0;opacity:0;-webkit-transform:translateX(-50%);transform:translateX(-50%);border-style:solid;border-width:0 5px 5px 5px;-webkit-transition:opacity .15s ease-in-out;transition:opacity .15s ease-in-out;border-color:transparent transparent #fff transparent}.header__nav .li-nav>a:before,.header__nav>li>a:before{left:50%;bottom:0;border-width:0 6px 6px 6px;border-color:transparent transparent #f5f7f8 transparent}@media only screen and (min-width:1050px){.header__nav .li-nav>a,.header__nav>li>a{font-size:1rem}}@media only screen and (min-width:1800px){.header__nav .li-nav>a,.header__nav>li>a{font-size:1.125rem}}.header--open{overflow:hidden}@media only screen and (min-width:600px){.header--open{overflow:visible}}.header--open .content-items{max-height:215px;margin:12px 0 24px}.header--open .search{margin-top:16px;display:block}.header--open .header__toggle:before{z-index:10}.header--open .header__toggle>span:nth-child(1){top:50%;-webkit-transform:rotate(45deg);transform:rotate(45deg)}.header--open .header__toggle>span:nth-child(2){opacity:0}.header--open .header__toggle>span:nth-child(3){top:50%;-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}.header--open .header__items,.header--open .header__items .language__switcher{display:-webkit-box;display:-ms-flexbox;display:flex}.header--open .header__top{z-index:100;position:absolute;left:0;right:8px;background:#fff}@media only screen and (min-width:800px){.header--open .header__top{right:20px}}.header--open .header__top .search{display:none}.header--open .header__logo{z-index:101}.header--open .header__middle{padding-top:60px}.header--open .header__bottom{display:none}.header--open .header__container{max-height:90vh;overflow-x:hidden;overflow-y:auto}@media only screen and (min-width:1050px){.header--open .header__container{overflow:visible}}.header .subnav{position:absolute;-webkit-box-shadow:0 5px 25px 1px rgba(0,0,0,.15);box-shadow:0 5px 25px 1px rgba(0,0,0,.15);background:#fff;visibility:hidden;line-height:1.75rem;max-width:100%;width:100%;left:0;opacity:0;overflow:hidden;border:1px solid #f5f7f8;border-radius:2px;-webkit-transition:all .15s ease-in-out;transition:all .15s ease-in-out;top:105%;z-index:60;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}.header .subnav .subnav__categories{-webkit-box-flex:0;-ms-flex:0 1 280px;flex:0 1 280px;padding:24px 0;background:#f5f7f8;margin-right:0!important}.header .subnav .subnav__categories>li{display:block;font-size:.9375rem;padding:2px 48px 2px 24px}.header .subnav .subnav__categories>li a{display:block;font-weight:700}.header .subnav .subnav__categories>li:hover{background:#e1e1e1}.header .subnav .subnav__heading{margin-bottom:20px}.header .subnav .subnav__content{position:relative;-ms-flex-item-align:start;align-self:flex-start;padding:24px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap}@media only screen and (min-width:1050px){.header .subnav .subnav__content{padding-left:32px;padding-right:32px;margin:0 auto;-webkit-box-flex:1;-ms-flex:1 1 600px;flex:1 1 600px}}.header .subnav .subnav__content .heading__container{-ms-flex-preferred-size:100%;flex-basis:100%}.header .subnav .subnav__content:before{content:'';position:absolute;left:0;top:0;bottom:-100%;width:1px;background:rgba(0,0,0,.1)}.languagesEdition .active{font-weight:700}.header__more.dropdown:after{content:'';display:inline-block;vertical-align:middle;-ms-flex-item-align:center;-ms-grid-row-align:center;align-self:center;background-repeat:no-repeat;background-position:center;margin-bottom:2px;width:7px;height:7px;-webkit-transition:-webkit-transform .15s ease;transition:-webkit-transform .15s ease;transition:transform .15s ease;transition:transform .15s ease,-webkit-transform .15s ease;background-color:#fff!important;background-size:contain}.header__more.dropdown button{color:#000!important;margin-right:-20px;padding-right:20px;z-index:1000}.header__more.dropdown .dropdown__holder{width:165px}.header__more.dropdown .dropdown__content{padding:13px;padding-top:5px;padding-bottom:5px}.header__more.dropdown .languagesEdition li{border-bottom:1px solid #e6e6e6}.header__more.dropdown .languagesEdition li:last-child{border:0}.logo__data{display:none;color:#666;font-size:.6875rem}@media only screen and (min-width:1050px){.logo__data{display:block;line-height:.8125rem}}.container{padding-left:12px;padding-right:12px;margin:0 auto;min-width:320px;-webkit-transition:padding .15s ease-in-out;transition:padding .15s ease-in-out}@media only screen and (min-width:600px){.container{padding-left:16px;padding-right:16px}}@media only screen and (min-width:800px){.container{padding-left:20px;padding-right:20px}}@media only screen and (min-width:1250px){.container{padding-left:60px;padding-right:60px}}@media only screen and (min-width:1400px){.container{padding-left:20px;padding-right:20px}}.container.white{background:#fff}.container__inner{max-width:1290px;margin:0 auto;-webkit-transition:max-width .15s ease-out;transition:max-width .15s ease-out}.search{display:block;position:relative;z-index:33;width:100%;max-width:100%;margin:0}.search:before{position:absolute;top:50%;right:24px;-webkit-transform:translateY(-50%);transform:translateY(-50%);margin-right:0;z-index:34}.search__bar{display:block;border-radius:2px;position:relative;z-index:33}.search__bar #search{margin-bottom:0;max-width:100%;background:#fff}.search__go{top:50%;right:0;bottom:0;left:auto;position:absolute;-webkit-transform:translateY(-50%);transform:translateY(-50%);z-index:32;-webkit-appearance:none;-moz-appearance:none;appearance:none;width:36px;height:36px;line-height:2.25rem;-webkit-box-shadow:none;box-shadow:none;display:block;background:0 0;border:0;font-size:0}@media only screen and (min-width:600px){.search__go{z-index:35}}.header #search,.search__go:hover{cursor:pointer}.header #search{height:36px;position:relative;max-width:100%;background-color:#f5f7f8!important}@media only screen and (min-width:600px){.header #search{font-size:.8125rem;min-width:165px;max-width:100%;opacity:1}}.header #search:hover{cursor:auto}@media only screen and (min-width:1050px){.header #search{margin-left:auto;border-top-right-radius:0;border-bottom-right-radius:0;border-right:0}.header #search:focus{min-width:215px}}.header #search:focus{cursor:auto}.header #search .field__desc{display:none}.header #searchForm{width:100%;margin-top:8px}.header #searchForm:before{right:8px}@media only screen and (min-width:600px){.header #searchForm{margin-top:16px}}@media only screen and (min-width:1050px){.header #searchForm{margin-top:0}}</style>
|
||
<script>(function(a,s,y,n,c,h,i,d,e){s.className+=' '+y;h.start=1*new Date;
|
||
h.end=i=function(){s.className=s.className.replace(RegExp(' ?'+y),'')};
|
||
(a[n]=a[n]||[]).hide=h;setTimeout(function(){i();h.end=null},c);h.timeout=c;
|
||
})(window,document.documentElement,'async-hide','dataLayer',4000,
|
||
{'GTM-W9GJ5DL':true});</script>
|
||
|
||
<script type="text/javascript">
|
||
|
||
var loggedIn = false;
|
||
if (loggedIn) {
|
||
var userCountryId = '';
|
||
}
|
||
</script>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<script>
|
||
window.dataLayer = window.dataLayer || [];
|
||
function gtag(){dataLayer.push(arguments);}
|
||
|
||
//CookieControl tool recomendation
|
||
// Call the default command before gtag.js or Tag Manager runs to
|
||
// adjust how the tags operate when they run. Modify the defaults
|
||
// per your business requirements and prior consent granted/denied, e.g.:
|
||
gtag('consent', 'default', {
|
||
'ad_storage': 'denied',
|
||
'ad_user_data': 'denied',
|
||
'ad_personalization': 'denied',
|
||
'analytics_storage': 'denied',
|
||
wait_for_update: 500
|
||
});
|
||
gtag('set', 'ads_data_redaction', true);
|
||
gtag('set', 'url_passthrough', true);
|
||
|
||
if((typeof loggedIn != "undefined") && loggedIn){
|
||
window.dataLayer.push({'logged_in': 'true'});
|
||
} else {
|
||
window.dataLayer.push({'logged_in': 'false'});
|
||
}
|
||
|
||
window.dataLayer.push({'show_queryz': ''});
|
||
|
||
gtag('config', 'G-VMVPD4D2JY');
|
||
</script>
|
||
|
||
<!-- Google Tag Manager -->
|
||
<script>
|
||
var gtmProfile="GTM-W9GJ5DL";
|
||
(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
|
||
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
|
||
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
|
||
'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
|
||
})(window,document,'script','dataLayer', gtmProfile);</script>
|
||
<!-- End Google Tag Manager -->
|
||
|
||
<title>Establishing a Scalable SRE Infrastructure Using Standardization and Short Feedback Loops - InfoQ</title>
|
||
<link rel="canonical" href="https://www.infoq.com/articles/scalable-SRE-standardization-feedback/"/>
|
||
<link rel="alternate" href="https://www.infoq.com/articles/scalable-SRE-standardization-feedback/" hreflang="en"/>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<link rel="alternate" href="https://www.infoq.com/articles/scalable-SRE-standardization-feedback/" 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_s1_20260910111632/styles/style.css"/>
|
||
<link rel="stylesheet" type="text/css" media="print" href="https://cdn.infoq.com/statics_s1_20260910111632/styles/print.css"/>
|
||
<link rel="preload" type="text/css" href="https://cdn.infoq.com/statics_s1_20260910111632/styles/style_en.css" as="style" onload="this.onload=null;this.rel='stylesheet'">
|
||
<link rel="preload" href="https://cdn.infoq.com/statics_s1_20260910111632/styles/icons.css" as="style" onload="this.onload=null;this.rel='stylesheet'">
|
||
<link rel="preload" type="text/css" media="screen" href="https://cdn.infoq.com/statics_s1_20260910111632/styles/style_extra.css" as="style" onload="this.onload=null;this.rel='stylesheet'">
|
||
<noscript>
|
||
<link rel="stylesheet" type="text/css" href="https://cdn.infoq.com/statics_s1_20260910111632/styles/style_en.css"/>
|
||
<link rel="stylesheet" href="https://cdn.infoq.com/statics_s1_20260910111632/styles/icons.css">
|
||
<link rel="stylesheet" type="text/css" media="screen" href="https://cdn.infoq.com/statics_s1_20260910111632/styles/style_extra.css"/>
|
||
</noscript>
|
||
|
||
<link rel="stylesheet" type="text/css" href="https://cdn.infoq.com/statics_s1_20260910111632/styles/fonts/font.css"/>
|
||
|
||
<link rel="shortcut icon" href="https://cdn.infoq.com/statics_s1_20260910111632/favicon.ico" type="image/x-icon" />
|
||
<link rel="apple-touch-icon" href="https://cdn.infoq.com/statics_s1_20260910111632/apple-touch-icon.png"/>
|
||
|
||
<script type="text/javascript">
|
||
var device='desktop';
|
||
var InfoQConstants = {};
|
||
InfoQConstants.language = 'en';
|
||
InfoQConstants.countryCode = '';
|
||
|
||
InfoQConstants.pageUrl = (typeof window.location != 'undefined' && window.location && typeof window.location.href != 'undefined' && window.location.href) ? window.location.href : "URL_UNAVAILABLE";
|
||
InfoQConstants.cet='VMuH4TkUXHIPBskd';
|
||
InfoQConstants.userDetectedCountryCode = 'US';
|
||
InfoQConstants.bpadb = '3PoHelVdDuUlnG1iFrPq';
|
||
</script>
|
||
|
||
<script type="text/javascript" src="https://cdn.infoq.com/statics_s1_20260910111632/scripts/combinedJs.min.js"></script>
|
||
<script type="text/javascript">
|
||
|
||
var JSi18n = JSi18n || {}; // define only if not already defined
|
||
JSi18n.error='Error';
|
||
JSi18n.login_unverifiedAccount='Unverified account';
|
||
JSi18n.contentSummary_showPresentations_1='';
|
||
JSi18n.contentSummary_showPresentations_2='';
|
||
JSi18n.contentSummary_showPresentations_3='';
|
||
JSi18n.contentSummary_showInterviews_1='';
|
||
JSi18n.contentSummary_showInterviews_2='';
|
||
JSi18n.contentSummary_showInterviews_3='';
|
||
JSi18n.contentSummary_showMinibooks_1='';
|
||
JSi18n.contentSummary_showMinibooks_2='';
|
||
JSi18n.login_sendingRequest='Sending request ...';
|
||
JSi18n.bookmark_saved='<q> 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\":\"126604354\",\"ref\":\"author-Philipp-G\u00FCndisch\",\"url\":\"\/profile\/Philipp-G\u00FCndisch\",\"followedByCurrentUser\":false,\"minibio\":\"Operations Engineer \",\"name\":\"Philipp G\u00FCndisch\",\"bio\":\"Philipp G\u00FCndisch is an operations engineer who studied Computer Science at the University of Erlangen-Nuremberg, Germany. After he developed a passion for cloud products during his studies, he joined Siemens Healthineers to support operating the teamplay digital health platform.\",\"followers\":4,\"imgSrc\":\"https:\/\/cdn.infoq.com\/statics_s1_20260910111632\/images\/profiles\/28f6cb9134aedd54757925e9a9f453ca.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\":1833,\"imgSrc\":\"https:\/\/cdn.infoq.com\/statics_s1_20260910111632\/images\/profiles\/QhDv7pXEUK1sdLsYArFmnLxecH4rYhAc.jpg\"},{\"id\":\"45723890\",\"ref\":\"author-Rags-Srinivas\",\"url\":\"\/profile\/Rags-Srinivas\",\"followedByCurrentUser\":false,\"minibio\":\"\",\"name\":\"Rags Srinivas\",\"bio\":\"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\":356,\"imgSrc\":\"https:\/\/cdn.infoq.com\/statics_s1_20260910111632\/images\/profiles\/t4nyfgw1THkp4wMZ9EZ59RGJx8Hf9Rk8.jpg\"},{\"id\":\"87551248\",\"ref\":\"author-Steef~Jan-Wiggers\",\"url\":\"\/profile\/Steef~Jan-Wiggers\",\"followedByCurrentUser\":false,\"minibio\":\"Cloud Queue Lead Editor | Domain Architect | Cloud Expert\",\"name\":\"Steef-Jan Wiggers\",\"bio\":\"Steef-Jan Wiggers is one of InfoQ's senior cloud editors and works as a Domain Architect at VGZ in the Netherlands. His current technical expertise focuses on implementing integration platforms, Azure DevOps, AI, 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 a Microsoft Azure MVP for the past sixteen years.\",\"followers\":895,\"imgSrc\":\"https:\/\/cdn.infoq.com\/statics_s1_20260910111632\/images\/profiles\/BhZx03k3Hj0pZVXmTzGqItwZxtJ06oIb.jpg\"},{\"id\":\"80977916\",\"ref\":\"author-Thomas-Betts\",\"url\":\"\/profile\/Thomas-Betts\",\"followedByCurrentUser\":false,\"minibio\":\"Senior Laureate Application Architect at Blackbaud\",\"name\":\"Thomas Betts\",\"bio\":\"Thomas Betts is the former Lead Editor for Architecture and Design at InfoQ, a co-host of the InfoQ Podcast, and a Senior Laureate Software Architect at Blackbaud, working on Agents for Good.\\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\":1171,\"imgSrc\":\"https:\/\/cdn.infoq.com\/statics_s1_20260910111632\/images\/profiles\/pSqI6HrU3k9rmmVjwS34OHG0bOMYiE6a.jpg\"},{\"id\":\"72028228\",\"ref\":\"author-Sergio-De-Simone\",\"url\":\"\/profile\/Sergio-De-Simone\",\"followedByCurrentUser\":false,\"minibio\":\"\",\"name\":\"Sergio De Simone\",\"bio\":\"<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\":777,\"imgSrc\":\"https:\/\/cdn.infoq.com\/statics_s1_20260910111632\/images\/profiles\/NovciOoQOAYWqYqRQBFo97SuMm0xbUiC.jpg\"},{\"id\":\"126467140\",\"ref\":\"author-Renato-Losio\",\"url\":\"\/profile\/Renato-Losio\",\"followedByCurrentUser\":false,\"minibio\":\"Cloud Expert | AWS Data Hero \",\"name\":\"Renato Losio\",\"bio\":\"Renato has extensive experience as a cloud architect, advisor, and cloud services specialist. Currently, he lives in Berlin 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\":913,\"imgSrc\":\"https:\/\/cdn.infoq.com\/statics_s1_20260910111632\/images\/profiles\/ptroF8HdI2vWXm0NDaKeS0JdiPxMOAra.jpg\"},{\"id\":\"95860478\",\"ref\":\"author-Vladyslav-Ukis\",\"url\":\"\/profile\/Vladyslav-Ukis\",\"followedByCurrentUser\":false,\"minibio\":\"Head of R&D\",\"name\":\"Vladyslav Ukis\",\"bio\":\"Dr. Vladyslav Ukis graduated in Computer Science from the University of Erlangen-Nuremberg, Germany, and later from the University of Manchester, UK. He joined Siemens Healthineers after each graduation and has been working on Software Architecture, Enterprise Architecture, Innovation Management, Private and Public Cloud Computing, Team Management, Engineering Management, Portfolio Management, Partner Management, and Digital Transformation at large. \\r\\n\\r\\nHe currently works as the Head of R&D for the Siemens Healthineers teamplay digital health platform. \\r\\n\\r\\nHe shares his DevOps knowledge in the book \u201CEstablishing SRE Foundations\u201D published by Addison-Wesley in 2022: https:\/\/www.informit.com\/store\/establishing-sre-foundations-a-step-by-step-guide-to-9780137424658\",\"followers\":26,\"imgSrc\":\"https:\/\/cdn.infoq.com\/statics_s1_20260910111632\/images\/profiles\/MSMMmTcoQwi7dvPVMgUteRAItvmPdUxR.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\":536,\"imgSrc\":\"https:\/\/cdn.infoq.com\/statics_s1_20260910111632\/images\/profiles\/Fb4eZ0mtvMf6MhsmBIhsUVueV4xAs2FD.jpg\"},{\"id\":\"39485652\",\"ref\":\"author-Daniel-Bryant\",\"url\":\"\/profile\/Daniel-Bryant\",\"followedByCurrentUser\":false,\"minibio\":\"InfoQ News Manager | Building Platforms at Syntasso\",\"name\":\"Daniel Bryant\",\"bio\":\"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\":2751,\"imgSrc\":\"https:\/\/cdn.infoq.com\/statics_s1_20260910111632\/images\/profiles\/tSe5dczMaSGtRUm18VkTR2tcF4W3SogA.jpg\"},{\"id\":\"63268344\",\"ref\":\"author-Chris-Swan\",\"url\":\"\/profile\/Chris-Swan\",\"followedByCurrentUser\":false,\"minibio\":\"Engineer, Atsign\",\"name\":\"Chris Swan\",\"bio\":\"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\":1873,\"imgSrc\":\"https:\/\/cdn.infoq.com\/statics_s1_20260910111632\/images\/profiles\/8PE76nOujWAoCM8yqLn9Hfv2HqW3VlIP.jpg\"},{\"id\":\"4927376\",\"ref\":\"author-Karsten-Silz\",\"url\":\"\/profile\/Karsten-Silz\",\"followedByCurrentUser\":false,\"minibio\":\"Full-Stack Java Developer\",\"name\":\"Karsten Silz\",\"bio\":\"Karsten Silz has worked as a full-stack Java developer for 26 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\":399,\"imgSrc\":\"https:\/\/cdn.infoq.com\/statics_s1_20260910111632\/images\/profiles\/p6zmOdOcqXiRj09iiZNeDZap7f0IglQW.jpg\"},{\"id\":\"343314\",\"ref\":\"author-Jonathan-Allen\",\"url\":\"\/profile\/Jonathan-Allen\",\"followedByCurrentUser\":false,\"minibio\":\"Software Architect\",\"name\":\"Jonathan Allen\",\"bio\":\"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\":1833,\"imgSrc\":\"https:\/\/cdn.infoq.com\/statics_s1_20260910111632\/images\/profiles\/Wk_C09_mzwK23YkTkKMXResJv3LKUN5D.jpg\"},{\"id\":\"55454401\",\"ref\":\"author-Ben-Linders\",\"url\":\"\/profile\/Ben-Linders\",\"followedByCurrentUser\":false,\"minibio\":\"Trainer \/ Coach \/ Adviser \/ Author \/ Speaker \",\"name\":\"Ben Linders\",\"bio\":\"<strong>Ben Linders<\/strong>\u00A0runs a one-person business in Agile, Lean, Quality and Continuous Improvement. 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 Agile Coaching Tools, for example, the Agile Self-assessment Game.\\r\\n\\r\\nAs an adviser, coach, and trainer, he helps organizations by\u00A0deploying effective software development and management practices. He focuses on continuous improvement, collaboration and communication, and professional development.\\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\u00A0bilingual blog\u00A0(Dutch and English) 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\":721,\"imgSrc\":\"https:\/\/cdn.infoq.com\/statics_s1_20260910111632\/images\/profiles\/Dwyu3y5agoDZV9jPKwQcwQ6oYv7gVeR4.jpg\"},{\"id\":\"114725059\",\"ref\":\"author-Holly-Cummins\",\"url\":\"\/profile\/Holly-Cummins\",\"followedByCurrentUser\":false,\"minibio\":\"Senior Technical Staff Member, IBM\",\"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 bluesky at @@hollycummins.com or at hollycummins.com.\\r\\n\\r\\n\\r\\nBefore joining IBM, Holly completed a PhD in Quantum Computation.\\r\\n\",\"followers\":615,\"imgSrc\":\"https:\/\/cdn.infoq.com\/statics_s1_20260910111632\/images\/profiles\/cRsuGlFgKyGmGfEHvafpMO63CxbrEm22.jpg\"}]');
|
||
|
||
|
||
|
||
|
||
var topicsInPage = JSON.parse('[{\"name\":\"Architecture & Design\",\"id\":\"6816\",\"url\":\"\/architecture-design\",\"followers\":10383,\"followedByCurrentUser\":false},{\"name\":\"Culture & Methods\",\"id\":\"6817\",\"url\":\"\/culture-methods\",\"followers\":3994,\"followedByCurrentUser\":false},{\"name\":\"Continuous Improvement\",\"id\":\"66\",\"url\":\"\/continuous_improvement\",\"followers\":43,\"followedByCurrentUser\":false},{\"name\":\"Agile\",\"id\":\"3\",\"url\":\"\/agile\",\"followers\":1053,\"followedByCurrentUser\":false},{\"name\":\".NET Core\",\"id\":\"15683\",\"url\":\"\/Net-Core\",\"followers\":8030,\"followedByCurrentUser\":false},{\"name\":\"Enterprise Architecture\",\"id\":\"708\",\"url\":\"\/enterprise-architecture\",\"followers\":1189,\"followedByCurrentUser\":false},{\"name\":\"Stories & Case Studies\",\"id\":\"40\",\"url\":\"\/stories\",\"followers\":24,\"followedByCurrentUser\":false},{\"name\":\"Machine Learning\",\"id\":\"5449\",\"url\":\"\/MachineLearning\",\"followers\":14751,\"followedByCurrentUser\":false},{\"name\":\"Performance\",\"id\":\"7434\",\"url\":\"\/performance\",\"followers\":280,\"followedByCurrentUser\":false},{\"name\":\"Microservices\",\"id\":\"15274\",\"url\":\"\/microservices\",\"followers\":22348,\"followedByCurrentUser\":false},{\"name\":\"Architecture\",\"id\":\"1389\",\"url\":\"\/architecture\",\"followers\":3366,\"followedByCurrentUser\":false},{\"name\":\"Standardization\",\"id\":\"305\",\"url\":\"\/standardization\",\"followers\":2,\"followedByCurrentUser\":false},{\"name\":\"Monitoring\",\"id\":\"4562\",\"url\":\"\/Monitoring\",\"followers\":89,\"followedByCurrentUser\":false},{\"name\":\"AI, ML & Data Engineering\",\"id\":\"16690\",\"url\":\"\/ai-ml-data-eng\",\"followers\":6077,\"followedByCurrentUser\":false},{\"name\":\"Feedback\",\"id\":\"4532\",\"url\":\"\/Feedback\",\"followers\":2,\"followedByCurrentUser\":false},{\"name\":\"Reliability\",\"id\":\"5813\",\"url\":\"\/Reliability\",\"followers\":22,\"followedByCurrentUser\":false},{\"name\":\"Scaling\",\"id\":\"15318\",\"url\":\"\/Scaling\",\"followers\":30,\"followedByCurrentUser\":false},{\"name\":\"application performance management\",\"id\":\"7703\",\"url\":\"\/apm\",\"followers\":184,\"followedByCurrentUser\":false},{\"name\":\"Java9\",\"id\":\"7097\",\"url\":\"\/Java9\",\"followers\":5540,\"followedByCurrentUser\":false},{\"name\":\"DevOps\",\"id\":\"6043\",\"url\":\"\/Devops\",\"followers\":5131,\"followedByCurrentUser\":false},{\"name\":\"Reactive Programming\",\"id\":\"15453\",\"url\":\"\/reactive-programming\",\"followers\":12430,\"followedByCurrentUser\":false},{\"name\":\"Site Reliability Engineering\",\"id\":\"17182\",\"url\":\"\/sre\",\"followers\":82,\"followedByCurrentUser\":false},{\"name\":\"Support\",\"id\":\"5855\",\"url\":\"\/support\",\"followers\":0,\"followedByCurrentUser\":false},{\"name\":\"Development\",\"id\":\"6815\",\"url\":\"\/development\",\"followers\":4154,\"followedByCurrentUser\":false}]');
|
||
|
||
|
||
var userContentLikesInPage = [];
|
||
var userCommentsLikesInPage = [];
|
||
|
||
|
||
var currentUserId = 2;
|
||
</script>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<!-- Latest Version -->
|
||
<script src="https://cc.cdn.civiccomputing.com/9/cookieControl-9.x.min.js" type="text/javascript"></script>
|
||
<script>
|
||
const config = {
|
||
apiKey: '8910ea974a96ffb6f927952b4ae9b9b0cc3e5973',
|
||
product: 'PRO_MULTISITE',
|
||
|
||
// general settings
|
||
consentCookieExpiry: 90,
|
||
encodeCookie: true,
|
||
sameSiteCookie: true, // if false, cookie set as SameSite=None;secure;
|
||
sameSiteValue: ';secure', // either 'Strict', 'Lax', or 'None'
|
||
subDomains: true,
|
||
initialState: 'notify', // 'notify','top','box' require pro licence
|
||
notifyOnce: false,
|
||
setInnerHTML: true,
|
||
|
||
//layout settings
|
||
layout: 'slideout',
|
||
position: 'left',
|
||
theme: 'light',
|
||
acceptButton: true,
|
||
rejectButton: true,
|
||
closeOnGlobalChange: true,
|
||
closeStyle: 'icon',
|
||
toggleType: 'slider',
|
||
notifyDismissButton: true,
|
||
settingsStyle: 'link',
|
||
excludedCountries: ['US'],
|
||
|
||
/*accessibility: {
|
||
disableSiteScrolling: true,
|
||
},*/
|
||
|
||
statement: {
|
||
description: 'For more detailed information about the cookies we use, see our',
|
||
name: 'Cookie Policy',
|
||
url: 'https://www.infoq.com/cookie-policy',
|
||
updated: '01/01/2024',
|
||
},
|
||
|
||
// cookies starting from 'cookie_expire' are from live.infoq.com but since we use the same tool on the same domain we need to specify those too so
|
||
// that infoq.com cookieControl does not delete live.infoq.com cookies(also infoq.com cookies have been specified in live.infoq.com cookieControl configs)
|
||
necessaryCookies: ['RegUserCookie', 'UserCookie', 'IdpCookie', 'ConversionTrackingV2_','PSAdialog','*P13NWN*','topbarSurvey','__bkm','JSESSIONID','mp_','_mixpanel','CloudFront-Key-Pair-Id','CloudFront-Policy','CloudFront-Signature','cookie_expire','discount_promo_closed','discount_promo_code','discount_promo_submitted','exit_survey_popup','referrer_popup','voting_popup_*','AWSALB','AWSALBCORS','aws-waf-token','iq_sub_preview'],
|
||
|
||
optionalCookies: [
|
||
{
|
||
name: 'analytics',
|
||
label: 'Analytics',
|
||
description: 'Analytical cookies help us to improve our website by collecting and reporting information on its usage.',
|
||
cookies: ['_ga', '_ga*', '_gid', '_gat', '__utma', '__utmt', '__utmb', '__utmc', '__utmz', '__utmv'],
|
||
onAccept: function(){
|
||
gtag('consent', 'update', {'analytics_storage': 'granted'});
|
||
},
|
||
onRevoke: function(){
|
||
gtag('consent', 'update', {'analytics_storage': 'denied'});
|
||
}
|
||
},
|
||
{
|
||
name: 'marketing',
|
||
label: 'Advertising',
|
||
description: 'We use advertising cookies to display advertisements to you for our products.',
|
||
onAccept: function(){
|
||
gtag('consent', 'update', {'ad_storage': 'granted', 'ad_personalization': 'granted', 'ad_user_data': 'granted'});
|
||
},
|
||
onRevoke: function(){
|
||
gtag('consent', 'update', {'ad_storage': 'denied', 'ad_personalization': 'denied', 'ad_user_data': 'denied'});
|
||
}
|
||
}
|
||
],
|
||
|
||
text : {
|
||
// main preference panels
|
||
title: '<h3>Our use of cookies</h3>',
|
||
intro: 'We use necessary cookies to make our site work. Functional cookies help enhance the performance and functionality of the site. '+
|
||
'We\'d also like to set analytics cookies to help us improve your experience by measuring how you use the site. '+
|
||
'These will be set only if you accept. ',
|
||
acceptSettings: 'I Accept',
|
||
rejectSettings: 'I Do Not Accept',
|
||
necessaryTitle : '<h3>Necessary Cookies</h3>',
|
||
necessaryDescription : 'Necessary cookies enable core functionality ' +
|
||
'such as page navigation and access to secure areas. '+
|
||
'The website cannot function properly without '+
|
||
'these cookies, and can only be disabled by changing '+
|
||
'your browser preferences.',
|
||
closeLabel: 'Close Cookie Control',
|
||
cornerButton: 'Set cookie preferences',
|
||
// main preference panel controls
|
||
on: 'On',
|
||
off : 'Off',
|
||
thirdPartyTitle : 'Some cookies require your attention',
|
||
thirdPartyDescription : 'Consent for the following cookies could not be '+
|
||
'automatically revoked. Please follow the link(s) '+
|
||
'below to opt out manually.',
|
||
// notification panels (only accessible for pro licences)
|
||
notifyTitle : 'Your choice regarding cookies on this site',
|
||
notifyDescription : 'We use cookies to optimise site functionality and '+
|
||
'give you the best possible experience.',
|
||
accept : 'I Accept',
|
||
reject: 'I Do Not Accept',
|
||
settings : 'Settings',
|
||
},
|
||
branding : {
|
||
removeAbout: true,
|
||
},
|
||
};
|
||
// do not load this for local envs only. for testing on local envs remove/modify this condition
|
||
if(InfoQConstants.pageUrl.indexOf('local')===-1){
|
||
CookieControl.load( config );
|
||
}
|
||
</script>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<script type="application/ld+json">
|
||
{
|
||
"@context": "http://schema.org",
|
||
"@type": "NewsArticle",
|
||
"mainEntityOfPage": {
|
||
"@type": "WebPage",
|
||
"@id": "https://www.infoq.com/articles/scalable-SRE-standardization-feedback/"
|
||
},
|
||
"headline": "Establishing a Scalable SRE Infrastructure Using Standardization and Short Feedback Loops",
|
||
"image": ["https://res.infoq.com/articles/scalable-SRE-standardization-feedback/en/smallimage/logo-1656064079585.jpg"
|
||
],
|
||
"datePublished": "2022-06-27T07:00:00+0000",
|
||
"dateModified": "2022-06-27T07:00:00+0000",
|
||
"author": [
|
||
{
|
||
"@type": "Person",
|
||
"name": "Philipp Gündisch",
|
||
"url": "https://www.infoq.com/profile/Philipp-Gündisch/"
|
||
},
|
||
{
|
||
"@type": "Person",
|
||
"name": "Vladyslav Ukis",
|
||
"url": "https://www.infoq.com/profile/Vladyslav-Ukis/"
|
||
}
|
||
],
|
||
"publisher": {
|
||
"@type": "Organization",
|
||
"name": "InfoQ",
|
||
"logo": {
|
||
"@type": "ImageObject",
|
||
"url": "https://assets.infoq.com/resources/en/infoQ-logo-big.jpg"
|
||
}
|
||
},
|
||
|
||
"description": "This article explores an SRE implementation where the operations team builds and runs the SRE infrastructure and the development teams build and run the services leveraging the SRE infrastructure."
|
||
}
|
||
</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/scalable-SRE-standardization-feedback/en/headerimage/generatedHeaderImage-1656064079585.jpg"/>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<meta property="twitter:image" content="https://res.infoq.com/articles/scalable-SRE-standardization-feedback/en/card_header_image/generatedCard-1656064079585.jpg"/>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<meta property="og:title" content="Establishing a Scalable SRE Infrastructure Using Standardization and Short Feedback Loops "/>
|
||
<meta property="og:description" content="This article explores an SRE implementation where the operations team builds and runs the SRE infrastructure and the development teams build and run the services leveraging the SRE infrastructure. This SRE solution enables the software delivery organization to scale the number of services in operation without linearly scaling the number of people required to operate the services." />
|
||
<meta property="og:site_name" content="InfoQ"/>
|
||
<meta property="og:url" content="https://www.infoq.com/articles/scalable-SRE-standardization-feedback/"/>
|
||
|
||
<meta name="twitter:card" content="summary_large_image" />
|
||
<meta name="twitter:title" content="Establishing a Scalable SRE Infrastructure Using Standardization and Short Feedback Loops "/>
|
||
<meta name="twitter:description" content="This article explores an SRE implementation where the operations team builds and runs the SRE infrastructure and the development teams build and run the services leveraging the SRE infrastructure. This SRE solution enables the software delivery organization to scale the number of services in operation without linearly scaling the number of people required to operate the services." />
|
||
|
||
|
||
<link rel="image_src" href="https://res.infoq.com/articles/scalable-SRE-standardization-feedback/en/headerimage/generatedHeaderImage-1656064079585.jpg"/>
|
||
|
||
|
||
|
||
<link rel="stylesheet" href="https://cdn.infoq.com/statics_s1_20260910111632/styles/prism.css"/>
|
||
<meta name="keywords" content="scalable SRE standardization feedback,Culture & Methods,DevOps,Monitoring,Standardization,Feedback,Continuous Improvement,application performance management,Stories & Case Studies,Enterprise Architecture,Site Reliability Engineering,Reliability,Agile,Performance,Support,Architecture,Scaling,"/>
|
||
<meta name="description" content="This article explores an SRE implementation where the operations team builds and runs the SRE infrastructure and the development teams build and run the services leveraging the SRE infrastructure."/>
|
||
<meta name="tprox" content="1656313200000" />
|
||
|
||
|
||
|
||
|
||
|
||
<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_s1_20260910111632/scripts/relatedVcr.min.js"></script>
|
||
<script type="application/javascript">
|
||
var communityIds = "2499,1893";
|
||
var topicIds = "1339,301,1311,63,3124,37,704,5774,1736,3,2952,1764,876,4001";
|
||
VCR.loadAllVcrs(communityIds, topicIds);
|
||
</script>
|
||
<script type="text/javascript" src='https://cdn.infoq.com/statics_s1_20260910111632/scripts/subscription.js'></script>
|
||
|
||
|
||
|
||
|
||
<script type="text/javascript" src="https://cdn.infoq.com/statics_s1_20260910111632/scripts/infoq.js"></script>
|
||
|
||
<script type="text/javascript">
|
||
document.addEventListener('DOMContentLoaded', function() {
|
||
if (!window || !window.infoq) return
|
||
infoq.init()
|
||
})
|
||
</script>
|
||
|
||
<script defer data-domain="infoq.com" src="https://plausible.io/js/script.file-downloads.hash.outbound-links.pageview-props.tagged-events.js"></script>
|
||
<script>window.plausible = window.plausible || function() { (window.plausible.q = window.plausible.q || []).push(arguments) }</script>
|
||
|
||
</head>
|
||
|
||
<body >
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<!-- Google Tag Manager (noscript) -->
|
||
<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-W9GJ5DL"
|
||
height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
|
||
<!-- End Google Tag Manager (noscript) -->
|
||
|
||
<div class="intbt">
|
||
<a href="/int/bt/" title="bt">BT</a>
|
||
</div>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<script type="text/javascript">
|
||
var allCountries = [{"id":3,"name":"Afghanistan"},{"id":244,"name":"Åland"},{"id":6,"name":"Albania"},{"id":61,"name":"Algeria"},{"id":13,"name":"American Samoa"},{"id":1,"name":"Andorra"},{"id":9,"name":"Angola"},{"id":5,"name":"Anguilla"},{"id":11,"name":"Antarctica"},{"id":4,"name":"Antigua and Barbuda"},{"id":12,"name":"Argentina"},{"id":7,"name":"Armenia"},{"id":16,"name":"Aruba"},{"id":15,"name":"Australia"},{"id":14,"name":"Austria"},{"id":17,"name":"Azerbaijan"},{"id":31,"name":"Bahamas"},{"id":24,"name":"Bahrain"},{"id":20,"name":"Bangladesh"},{"id":19,"name":"Barbados"},{"id":35,"name":"Belarus"},{"id":21,"name":"Belgium"},{"id":36,"name":"Belize"},{"id":26,"name":"Benin"},{"id":27,"name":"Bermuda"},{"id":32,"name":"Bhutan"},{"id":29,"name":"Bolivia"},{"id":254,"name":"Bonaire, Sint Eustatius, and Saba"},{"id":18,"name":"Bosnia and Herzegovina"},{"id":34,"name":"Botswana"},{"id":33,"name":"Bouvet Island"},{"id":30,"name":"Brazil"},{"id":104,"name":"British Indian Ocean Territory"},{"id":28,"name":"Brunei Darussalam"},{"id":23,"name":"Bulgaria"},{"id":22,"name":"Burkina Faso"},{"id":25,"name":"Burundi"},{"id":114,"name":"Cambodia"},{"id":46,"name":"Cameroon"},{"id":37,"name":"Canada"},{"id":52,"name":"Cape Verde"},{"id":121,"name":"Cayman Islands"},{"id":40,"name":"Central African Republic"},{"id":207,"name":"Chad"},{"id":45,"name":"Chile"},{"id":47,"name":"China"},{"id":53,"name":"Christmas Island"},{"id":38,"name":"Cocos (Keeling) Islands"},{"id":48,"name":"Colombia"},{"id":116,"name":"Comoros"},{"id":39,"name":"Congo (Democratic Republic)"},{"id":41,"name":"Congo (People\u0027s Republic)"},{"id":44,"name":"Cook Islands"},{"id":49,"name":"Costa Rica"},{"id":43,"name":"Cote D\u0027Ivoire"},{"id":97,"name":"Croatia"},{"id":51,"name":"Cuba"},{"id":253,"name":"Curaçao"},{"id":54,"name":"Cyprus"},{"id":55,"name":"Czech Republic"},{"id":58,"name":"Denmark"},{"id":57,"name":"Djibouti"},{"id":59,"name":"Dominica"},{"id":60,"name":"Dominican Republic"},{"id":213,"name":"East Timor"},{"id":62,"name":"Ecuador"},{"id":64,"name":"Egypt"},{"id":203,"name":"El Salvador"},{"id":87,"name":"Equatorial Guinea"},{"id":66,"name":"Eritrea"},{"id":63,"name":"Estonia"},{"id":68,"name":"Ethiopia"},{"id":72,"name":"Falkland Islands (Malvinas)"},{"id":74,"name":"Faroe Islands"},{"id":71,"name":"Fiji"},{"id":70,"name":"Finland"},{"id":75,"name":"France"},{"id":80,"name":"French Guiana"},{"id":170,"name":"French Polynesia"},{"id":208,"name":"French Southern Territories"},{"id":76,"name":"Gabon"},{"id":84,"name":"Gambia"},{"id":79,"name":"Georgia"},{"id":56,"name":"Germany"},{"id":81,"name":"Ghana"},{"id":82,"name":"Gibraltar"},{"id":88,"name":"Greece"},{"id":83,"name":"Greenland"},{"id":78,"name":"Grenada"},{"id":86,"name":"Guadeloupe"},{"id":91,"name":"Guam"},{"id":90,"name":"Guatemala"},{"id":249,"name":"Guernsey"},{"id":85,"name":"Guinea"},{"id":92,"name":"Guinea-Bissau"},{"id":93,"name":"Guyana"},{"id":98,"name":"Haiti"},{"id":95,"name":"Heard Island and McDonald Islands"},{"id":96,"name":"Honduras"},{"id":94,"name":"Hong Kong"},{"id":99,"name":"Hungary"},{"id":107,"name":"Iceland"},{"id":103,"name":"India"},{"id":100,"name":"Indonesia"},{"id":106,"name":"Iran"},{"id":105,"name":"Iraq"},{"id":101,"name":"Ireland"},{"id":245,"name":"Isle of Man"},{"id":102,"name":"Israel"},{"id":108,"name":"Italy"},{"id":109,"name":"Jamaica"},{"id":111,"name":"Japan"},{"id":250,"name":"Jersey"},{"id":110,"name":"Jordan"},{"id":122,"name":"Kazakhstan"},{"id":112,"name":"Kenya"},{"id":115,"name":"Kiribati"},{"id":243,"name":"Kosovo"},{"id":120,"name":"Kuwait"},{"id":113,"name":"Kyrgyzstan"},{"id":123,"name":"Laos"},{"id":132,"name":"Latvia"},{"id":124,"name":"Lebanon"},{"id":129,"name":"Lesotho"},{"id":128,"name":"Liberia"},{"id":133,"name":"Libya"},{"id":126,"name":"Liechtenstein"},{"id":130,"name":"Lithuania"},{"id":131,"name":"Luxembourg"},{"id":143,"name":"Macau"},{"id":139,"name":"Macedonia"},{"id":137,"name":"Madagascar"},{"id":151,"name":"Malawi"},{"id":153,"name":"Malaysia"},{"id":150,"name":"Maldives"},{"id":140,"name":"Mali"},{"id":148,"name":"Malta"},{"id":138,"name":"Marshall Islands"},{"id":145,"name":"Martinique"},{"id":146,"name":"Mauritania"},{"id":149,"name":"Mauritius"},{"id":238,"name":"Mayotte"},{"id":152,"name":"Mexico"},{"id":73,"name":"Micronesia"},{"id":136,"name":"Moldova"},{"id":135,"name":"Monaco"},{"id":142,"name":"Mongolia"},{"id":246,"name":"Montenegro"},{"id":147,"name":"Montserrat"},{"id":134,"name":"Morocco"},{"id":154,"name":"Mozambique"},{"id":141,"name":"Myanmar"},{"id":155,"name":"Namibia"},{"id":164,"name":"Nauru"},{"id":163,"name":"Nepal"},{"id":161,"name":"Netherlands"},{"id":8,"name":"Netherlands Antilles"},{"id":156,"name":"New Caledonia"},{"id":166,"name":"New Zealand"},{"id":160,"name":"Nicaragua"},{"id":157,"name":"Niger"},{"id":159,"name":"Nigeria"},{"id":165,"name":"Niue"},{"id":158,"name":"Norfolk Island"},{"id":118,"name":"North Korea"},{"id":144,"name":"Northern Mariana Islands"},{"id":162,"name":"Norway"},{"id":167,"name":"Oman"},{"id":173,"name":"Pakistan"},{"id":180,"name":"Palau"},{"id":178,"name":"Palestinian Territory"},{"id":168,"name":"Panama"},{"id":171,"name":"Papua New Guinea"},{"id":181,"name":"Paraguay"},{"id":169,"name":"Peru"},{"id":172,"name":"Philippines"},{"id":176,"name":"Pitcairn"},{"id":174,"name":"Poland"},{"id":179,"name":"Portugal"},{"id":177,"name":"Puerto Rico"},{"id":182,"name":"Qatar"},{"id":183,"name":"Reunion"},{"id":184,"name":"Romania"},{"id":185,"name":"Russian Federation"},{"id":186,"name":"Rwanda"},{"id":193,"name":"Saint Helena"},{"id":117,"name":"Saint Kitts and Nevis"},{"id":125,"name":"Saint Lucia"},{"id":251,"name":"Saint Martin"},{"id":175,"name":"Saint Pierre and Miquelon"},{"id":229,"name":"Saint Vincent and the Grenadines"},{"id":247,"name":"Saint-Barthélemy"},{"id":236,"name":"Samoa"},{"id":198,"name":"San Marino"},{"id":202,"name":"Sao Tome and Principe"},{"id":187,"name":"Saudi Arabia"},{"id":199,"name":"Senegal"},{"id":248,"name":"Serbia"},{"id":189,"name":"Seychelles"},{"id":197,"name":"Sierra Leone"},{"id":192,"name":"Singapore"},{"id":252,"name":"Sint Maarten"},{"id":196,"name":"Slovakia"},{"id":194,"name":"Slovenia"},{"id":188,"name":"Solomon Islands"},{"id":200,"name":"Somalia"},{"id":239,"name":"South Africa"},{"id":89,"name":"South Georgia and the South Sandwich Islands"},{"id":119,"name":"South Korea"},{"id":255,"name":"South Sudan"},{"id":67,"name":"Spain"},{"id":127,"name":"Sri Lanka"},{"id":190,"name":"Sudan"},{"id":201,"name":"Suriname"},{"id":195,"name":"Svalbard and Jan Mayen"},{"id":205,"name":"Swaziland"},{"id":191,"name":"Sweden"},{"id":42,"name":"Switzerland"},{"id":204,"name":"Syria"},{"id":220,"name":"Taiwan"},{"id":211,"name":"Tajikistan"},{"id":221,"name":"Tanzania"},{"id":210,"name":"Thailand"},{"id":209,"name":"Togo"},{"id":212,"name":"Tokelau"},{"id":216,"name":"Tonga"},{"id":218,"name":"Trinidad and Tobago"},{"id":215,"name":"Tunisia"},{"id":217,"name":"Turkey"},{"id":214,"name":"Turkmenistan"},{"id":206,"name":"Turks and Caicos Islands"},{"id":219,"name":"Tuvalu"},{"id":223,"name":"Uganda"},{"id":222,"name":"Ukraine"},{"id":2,"name":"United Arab Emirates"},{"id":77,"name":"United Kingdom"},{"id":224,"name":"United States Minor Outlying Islands"},{"id":226,"name":"Uruguay"},{"id":225,"name":"USA"},{"id":227,"name":"Uzbekistan"},{"id":234,"name":"Vanuatu"},{"id":228,"name":"Vatican City (Holy See)"},{"id":230,"name":"Venezuela"},{"id":233,"name":"Vietnam"},{"id":231,"name":"Virgin Islands (British)"},{"id":232,"name":"Virgin Islands (U.S.)"},{"id":235,"name":"Wallis and Futuna"},{"id":65,"name":"Western Sahara"},{"id":237,"name":"Yemen"},{"id":241,"name":"Zaire"},{"id":240,"name":"Zambia"},{"id":242,"name":"Zimbabwe"}];
|
||
var gdprCountriesIds = [196,194,191,184,179,174,161,148,132,131,130,108,101,99,97,88,77,75,70,67,63,58,56,55,54,37,23,21,14];
|
||
</script>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<section data-nosnippet class="section container subscribe-box hidden">
|
||
<div class="container__inner">
|
||
<div class="actions">
|
||
<div class="actions__left">
|
||
<h2>InfoQ Software Architects' Newsletter</h2>
|
||
<span><p>A monthly overview of things you need to know as an architect or aspiring architect.</p>
|
||
|
||
<p><a href="https://www.infoq.com/software-architects-newsletter#placeholderPastIssues">View an example</a></p>
|
||
</span>
|
||
<div class="newsletter__subscribe">
|
||
<form class="form gdpr" name="dataCollectCampaignNewsletterForm" id="dataCollectCampaignNewsletterForm" action="#" onsubmit="dataCollectNewsletter.saveSubscription(); return false;">
|
||
<div class="field newsletter__mail input__text input__no-label input__medium email">
|
||
<label for="email-dataCollectnewsletter-infoq" class="label field__label">Enter your e-mail address</label>
|
||
<input id="email-dataCollectnewsletter-infoq" name="footerNewsletterEmail" placeholder="Enter your e-mail address" class="input field__input" type="email"/>
|
||
<input type="text" name="emailH" id="input_email_h_d" aria-required="false" style="display:none !important" tabindex="-1" autocomplete="off"/>
|
||
<input type="hidden" id="fnt_d" name="fnt_d" value="VMuH4TkUXHIPBskd"/>
|
||
<input type="hidden" id="dataCollectNewsletterType" name="dataCollectNewsletterType" value="regular"/>
|
||
<input type="hidden" id="cmpi_d" name="cmpi_d" value="4"/>
|
||
</div>
|
||
<div class="hidden">
|
||
<span class="input__select field country">
|
||
<label for="input-dataCollect-newsletter-country" class="label field__label">Select your country</label>
|
||
<select id="input-dataCollect-newsletter-country" class="select field__input">
|
||
<option value="" class="select__option">Select a country</option>
|
||
</select>
|
||
<p class="input__message field__desc"></p>
|
||
</span>
|
||
<span class="input__checkbox field hidden">
|
||
<input type="checkbox" id="gdpr-consent-campaign">
|
||
<label for="gdpr-consent-campaign" class="label"><span>I consent to InfoQ.com handling my data as explained in this <a href="https://www.infoq.com/privacy-notice">Privacy Notice</a>.</span></label>
|
||
</span>
|
||
</div>
|
||
<input type="submit" role="button" value="Subscribe" class="button button__medium button__red" onclick="return dataCollectNewsletter.validateEmail('Invalid email address');"/>
|
||
</form>
|
||
<p class="meta">
|
||
<a href="/privacy-notice/" target="_blank">We protect your privacy.</a>
|
||
</p>
|
||
|
||
<span class="success" style="display:none;" id="dataCollectNewsletterMessage"></span>
|
||
</div>
|
||
|
||
</div>
|
||
<div class="actions__right">
|
||
<button aria-label="Close" class="close closeBox button button__unstyled button__icon icon icon__close-black icon--only">Close</button>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
<script type="text/javascript">
|
||
var dataCollectNewsletter = new Newsletter('Enter your e-mail address',
|
||
'email-dataCollectnewsletter-infoq', 'dataCollectNewsletterType','dataCollectNewsletterMessage', 'fnt_d', 'input_email_h_d', 'input-dataCollect-newsletter-country', 'cmpi_d','popup_all_pages');
|
||
</script>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<div class="infoq" id="infoq">
|
||
|
||
<!-- ####### SITE START ######### -->
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<section class="section container promo hidden">
|
||
<div class="container__inner">
|
||
<div class="actions">
|
||
<div class="actions__left">
|
||
<p>
|
||
<span>Online InfoQ Architect Certification (Sept 14): This is where senior engineers pressure-test real architecture decisions.</span>
|
||
<a class="btn" href="/url/pb/bd633791-e46d-4845-82fa-330bf7e3c0c6/" target="_blank" rel="nofollow">
|
||
Register Now
|
||
</a>
|
||
</p>
|
||
</div>
|
||
<div class="actions__right">
|
||
<button aria-label="Close"
|
||
class="close button button__unstyled button__icon icon icon__close-white icon--only close-top-promo">Close
|
||
</button>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
|
||
|
||
|
||
|
||
|
||
<header class="header">
|
||
<button aria-label="Toggle Navigation" tabindex="0" class="burger header__toggle button">Toggle Navigation <span></span><span></span><span></span></button>
|
||
<div class="header__container container">
|
||
<div class="container__inner">
|
||
<div data-nosnippet class="actions header__top">
|
||
<div class="actions__left">
|
||
<p class="header__desc my-0">
|
||
Facilitating the Spread of Knowledge and Innovation in Professional Software Development
|
||
</p>
|
||
<div class="button__dropdown dropdown header__more my-0 dropdown__center">
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<button aria-label="English edition" class="button button__unstyled button__small">English edition </button>
|
||
<div class="dropdown__holder">
|
||
<!---->
|
||
<div class="dropdown__content">
|
||
<ul class="no-style dropdown__nav languagesEdition">
|
||
<li class="active"><a href="#" onclick="return false;">English edition</a></li>
|
||
<li><a href="https://www.infoq.cn">Chinese edition</a></li>
|
||
<li><a href="/jp/">Japanese edition</a></li>
|
||
<li><a href="/fr/">French edition</a></li>
|
||
</ul>
|
||
</div>
|
||
<!---->
|
||
</div>
|
||
</div>
|
||
<a class="my-0 contribute-link" role="button" href="/write-for-infoq/" title="Write for InfoQ">
|
||
Write for InfoQ
|
||
</a>
|
||
</div>
|
||
<div class="actions__right">
|
||
<div>
|
||
<form id="searchForm" name="search-form" action="/search.action" enctype="multipart/form-data" class="search icon__search icon icon__green">
|
||
<div class="field search__bar input__text input__no-label input__small">
|
||
<label for="search" class="label field__label">Search</label>
|
||
<input name="queryString" type="text" id="search" value="" placeholder="Search" class="input field__input">
|
||
<input type="hidden" name="page" value="1"/>
|
||
<input type="hidden" size="15" name="searchOrder">
|
||
</div>
|
||
<input value="Search" type="submit" class="search__go">
|
||
</form>
|
||
</div>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<div class="action_button__group">
|
||
<a href="/reginit.action?" onclick="return UserActions_Login.addLoginInfo(this);" class="button button__green button__small">Register</a>
|
||
<a href="/social/keycloakLogin.action?fl=login" onclick="return UserActions_Login.addLoginInfo(this);" class="button button__small button__outline">Sign in</a>
|
||
</div>
|
||
|
||
<div class="modal_auth_required">
|
||
<div class="modal_auth_required__actions">
|
||
<h2 class="h2">Unlock the full InfoQ experience</h2>
|
||
<p>Unlock the full InfoQ experience by logging in! Stay updated with your favorite authors and topics, engage with content, and download exclusive resources.</p>
|
||
<a href="/social/keycloakLogin.action?fl=login" onclick="return UserActions_Login.addLoginInfo(this);" class="button button__has-transition">Log In</a>
|
||
<div class="separator"><span>or</span></div>
|
||
<h3 class="h3">Don't have an InfoQ account?</h3>
|
||
<a href="/reginit.action?" onclick="return UserActions_Login.addLoginInfo(this);" class="button__outline button__has-transition">Register</a>
|
||
</div>
|
||
<div class="modal_auth_required__content">
|
||
<ul class="newsletter__features">
|
||
<li><strong>Stay updated on topics and peers that matter to you</strong>Receive instant alerts on the latest insights and trends.</li>
|
||
<li><strong>Quickly access free resources for continuous learning</strong>Minibooks, videos with transcripts, and training materials.</li>
|
||
<li><strong>Save articles and read at anytime</strong>Bookmark articles to read whenever youre ready.</li>
|
||
</ul>
|
||
</div>
|
||
<form id="login-form" data-vv-scope="login" class="login__form form" action="#" data-gtm-form-interact-id="0">
|
||
<input type="hidden" id="loginWidgetOrigin" name="loginWidgetOrigin" value="mainLogin">
|
||
<input type="hidden" name="fromP13N" id="isP13n" value="">
|
||
<input type="hidden" name="fromP13NId" id="p13n-id" value="">
|
||
<input type="hidden" name="fromP13NType" id="p13n-type" value="">
|
||
</form>
|
||
</div>
|
||
|
||
|
||
|
||
</div>
|
||
</div>
|
||
<div class="header__middle">
|
||
<div class="logo header__logo">
|
||
<a href="/" class="logo__symbol active">
|
||
Logo - Back to homepage
|
||
</a>
|
||
</div>
|
||
|
||
<div class="content-items">
|
||
<a href="/news/" class="icon icon__news">News</a>
|
||
<a href="/articles/" class="icon icon__articles">Articles</a>
|
||
<a href="/presentations/" class="icon icon__presentations">Presentations</a>
|
||
<a href="/podcasts/" class="icon icon__podcasts">Podcasts</a>
|
||
<a href="/minibooks/" class="icon icon__guides">Guides</a>
|
||
</div>
|
||
<div class="header__items columns">
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<div>
|
||
<h3 class="widget__heading">Topics</h3>
|
||
<nav class="nav header__nav topics" data-trk-ref="header_personas">
|
||
<div class="has--subnav li-nav">
|
||
<a href="/development/" title="Development" class="nav__category">Development</a>
|
||
<div class="nav__subnav subnav">
|
||
<ul class="subnav__categories no-style">
|
||
<li><a href="/java/" title="Java">Java</a></li>
|
||
<li><a href="/kotlin/" title="Kotlin">Kotlin</a></li>
|
||
<li><a href="/dotnet/" title=".Net">.Net</a></li>
|
||
<li><a href="/c_sharp/" title="C#">C#</a></li>
|
||
<li><a href="/swift/" title="Swift">Swift</a></li>
|
||
<li><a href="/golang/" title="Go">Go</a></li>
|
||
<li><a href="/rust/" title="Rust">Rust</a></li>
|
||
<li><a href="/javascript/" title="JavaScript">JavaScript</a></li>
|
||
</ul>
|
||
<div class="subnav__content" data-id="6815">
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<div class="heading__container actions">
|
||
<div class="actions__left">
|
||
<h3 class="heading section__heading">Featured in Development</h3>
|
||
</div>
|
||
</div>
|
||
<ul data-size="large" data-horizontal="true" data-tax="" taxonomy="articles" class="cards no-style">
|
||
<li>
|
||
<div class="card__content">
|
||
<div class="card__data">
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<h4 class="card__title">
|
||
<a href="/presentations/solopreneur-journey">A Solopreneur's Journey: From Engineer to Puzzle Master and Storyteller</a>
|
||
</h4>
|
||
<p class="card__excerpt">Joe Cassavaugh shares his journey from software engineer to successful solopreneur with a $2M+ indie franchise. He explains how he scaled production to 10 games in 5 years, adopted Unity to boost velocity 4-6x, optimized content pipelines, and leveraged refactoring patterns. He discusses key trade-offs between corporate engineering and solopreneurship for senior devs and leaders.</p>
|
||
<div class="card__footer"></div>
|
||
</div>
|
||
|
||
<a href="/presentations/solopreneur-journey" class="card__header">
|
||
<img loading="lazy" alt="A Solopreneur's Journey: From Engineer to Puzzle Master and Storyteller" src="https://imgopt.infoq.com/fit-in/100x100/filters:quality(80)/presentations/solopreneur-journey/en/smallimage/joe-cassavaugh-thumbnail-1788338336404.jpg" class="card__image"/>
|
||
</a>
|
||
|
||
</div>
|
||
</li>
|
||
</ul>
|
||
|
||
|
||
|
||
|
||
<a href="/development/" class="button__more button button__large button__arrow arrow__right">All in development</a>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="has--subnav li-nav">
|
||
<a href="/architecture-design/" title="Architecture & 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="/minibooks/next-gen-architecture-ai-era">Next-Gen Architecture Playbook: Insights and Patterns for the AI Era</a>
|
||
</h4>
|
||
<p class="card__excerpt">This eMag examines how architects can lead with clarity in a rapidly evolving engineering world, distilling industry insights into field-tested practices for teams. Together, these stories reveal a core theme: the technology leader’s role is expanding from building systems to guiding how tech behaves and learns, while enabling engineers and organizations to bring out their best.</p>
|
||
<div class="card__footer"></div>
|
||
</div>
|
||
|
||
<a href="/minibooks/next-gen-architecture-ai-era" class="card__header">
|
||
<img loading="lazy" alt="Next-Gen Architecture Playbook: Insights and Patterns for the AI Era" src="https://imgopt.infoq.com/fit-in/100x100/filters:quality(80)/minibooks/next-gen-architecture-ai-era/en/smallimage/thumb-image-emag-next-gen-architecture-playbook-1787922032442.jpg" class="card__image"/>
|
||
</a>
|
||
|
||
</div>
|
||
</li>
|
||
</ul>
|
||
|
||
|
||
|
||
|
||
<a href="/architecture-design/" class="button__more button button__large button__arrow arrow__right">All in architecture-design</a>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="has--subnav li-nav">
|
||
<a href="/ai-ml-data-eng/" title="AI Infrastructure" class="nav__category">AI Infrastructure</a>
|
||
<div class="nav__subnav subnav">
|
||
<ul class="subnav__categories no-style">
|
||
<li><a href="/bigdata/" title="Big Data">Big Data</a></li>
|
||
<li><a href="/machinelearning/" title="Machine Learning">Machine Learning</a></li>
|
||
<li><a href="/nosql/" title="NoSQL">NoSQL</a></li>
|
||
<li><a href="/database/" title="Database">Database</a></li>
|
||
<li><a href="/data-analytics/" title="Data Analytics">Data Analytics</a></li>
|
||
<li><a href="/streaming/" title="Streaming">Streaming</a></li>
|
||
</ul>
|
||
<div class="subnav__content" data-id="16690">
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<div class="heading__container actions">
|
||
<div class="actions__left">
|
||
<h3 class="heading section__heading">Featured in AI, ML & Data Engineering</h3>
|
||
</div>
|
||
</div>
|
||
<ul data-size="large" data-horizontal="true" data-tax="" taxonomy="articles" class="cards no-style">
|
||
<li>
|
||
<div class="card__content">
|
||
<div class="card__data">
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<h4 class="card__title">
|
||
<a href="/articles/when-spec-driven-development-pays-off">When Spec-Driven Development Pays Off</a>
|
||
</h4>
|
||
<p class="card__excerpt">AI coding assistants have become a core part of software development. AI-generated code has shown productivity gains, but it's also contributing to security weaknesses and familiar bug patterns. In this article, author Nitin Garg highlights the bottleneck has moved from code generation to code verification, and how to detect & mitigate it when the AI-generated behavior diverges from the intent.</p>
|
||
<div class="card__footer"></div>
|
||
</div>
|
||
|
||
<a href="/articles/when-spec-driven-development-pays-off" class="card__header">
|
||
<img loading="lazy" alt="When Spec-Driven Development Pays Off" src="https://imgopt.infoq.com/fit-in/100x100/filters:quality(80)/articles/when-spec-driven-development-pays-off/en/smallimage/When-Spec-Driven-Development-Pays-Off-thumb-1788790605567.jpg" class="card__image"/>
|
||
</a>
|
||
|
||
</div>
|
||
</li>
|
||
</ul>
|
||
|
||
|
||
|
||
|
||
<a href="/ai-ml-data-eng/" class="button__more button button__large button__arrow arrow__right">All in ai-ml-data-eng</a>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="has--subnav li-nav">
|
||
<a href="/culture-methods/" title="Culture & 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="/presentations/rust-refactoring">Accelerating Performance by Incrementally Integrating Rust Into Existing Codebase</a>
|
||
</h4>
|
||
<p class="card__excerpt">Lily Mara explains how to avoid high-risk software rewrites through incremental FFI refactoring. She shares how engineering teams can replace Python bottlenecks with Rust via PyO3, demonstrating how to achieve dramatic function-level speedups, seamless integration testing, and meaningful infrastructure cost savings without microservice overhead.</p>
|
||
<div class="card__footer"></div>
|
||
</div>
|
||
|
||
<a href="/presentations/rust-refactoring" class="card__header">
|
||
<img loading="lazy" alt="Accelerating Performance by Incrementally Integrating Rust Into Existing Codebase" src="https://imgopt.infoq.com/fit-in/100x100/filters:quality(80)/presentations/rust-refactoring/en/smallimage/lily-mara-thumbnail-1788338447565.jpeg" class="card__image"/>
|
||
</a>
|
||
|
||
</div>
|
||
</li>
|
||
</ul>
|
||
|
||
|
||
|
||
|
||
<a href="/culture-methods/" class="button__more button button__large button__arrow arrow__right">All in culture-methods</a>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="has--subnav li-nav">
|
||
<a href="/devops/" class="nav__category">DevOps</a>
|
||
<div class="nav__subnav subnav">
|
||
<ul class="subnav__categories no-style">
|
||
<li><a href="/infrastructure/" title="Infrastructure">Infrastructure</a></li>
|
||
<li><a href="/continuous_delivery/" title="Continuous Delivery">Continuous Delivery</a></li>
|
||
<li><a href="/automation/" title="Automation">Automation</a></li>
|
||
<li><a href="/containers/" title="Containers">Containers</a></li>
|
||
<li><a href="/cloud-computing/" title="Cloud">Cloud</a></li>
|
||
<li><a href="/observability/" title="Observability">Observability</a></li>
|
||
|
||
</ul>
|
||
<div class="subnav__content" data-id="6043">
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<div class="heading__container actions">
|
||
<div class="actions__left">
|
||
<h3 class="heading section__heading">Featured in DevOps</h3>
|
||
</div>
|
||
</div>
|
||
<ul data-size="large" data-horizontal="true" data-tax="" taxonomy="articles" class="cards no-style">
|
||
<li>
|
||
<div class="card__content">
|
||
<div class="card__data">
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<h4 class="card__title">
|
||
<a href="/presentations/ai-platform-engineering-roundtable">Platform Engineering in the Age of AI</a>
|
||
</h4>
|
||
<p class="card__excerpt">The panelists explain how platform teams adapt to support AI-assisted engineering, highlighting which capabilities belong in the platform. They discuss trade-offs between standardization and developer autonomy, while sharing strategies to manage AI tooling, security guardrails, and shifting workflows.</p>
|
||
<div class="card__footer"></div>
|
||
</div>
|
||
|
||
<a href="/presentations/ai-platform-engineering-roundtable" class="card__header">
|
||
<img loading="lazy" alt="Platform Engineering in the Age of AI" src="https://imgopt.infoq.com/fit-in/100x100/filters:quality(80)/presentations/ai-platform-engineering-roundtable/en/smallimage/thumb-1788861349861.jpg" class="card__image"/>
|
||
</a>
|
||
|
||
</div>
|
||
</li>
|
||
</ul>
|
||
|
||
|
||
|
||
|
||
<a href="/devops/" class="button__more button button__large button__arrow arrow__right">All in devops</a>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="li-nav">
|
||
|
||
<a rel="noreferrer noopener" href="https://events.infoq.com/" class="nav__category" title="Events" target="_blank">Events</a>
|
||
</div>
|
||
</nav>
|
||
</div>
|
||
|
||
<div>
|
||
<h3 class="widget__heading">Helpful links</h3>
|
||
<ul class="no-style header__nav">
|
||
<li>
|
||
<a href="/about-infoq" title="About InfoQ">
|
||
About InfoQ
|
||
</a>
|
||
</li>
|
||
<li>
|
||
<a href="/infoq-editors" title="InfoQ Editors">
|
||
InfoQ Editors
|
||
</a>
|
||
</li>
|
||
<li>
|
||
<a href="/write-for-infoq" title="Write for InfoQ">
|
||
Write for InfoQ
|
||
</a>
|
||
</li>
|
||
<li>
|
||
<a href="https://c4media.com/" target="_blank" title="About C4Media">
|
||
About C4Media
|
||
</a>
|
||
</li>
|
||
<li>
|
||
<a rel="noreferrer noopener" href="https://c4media.com/diversity" title="Diversity" target="_blank">Diversity</a>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
|
||
|
||
<div>
|
||
<h3 class="widget__heading">Choose your language</h3>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<ul class="language__switcher no-style">
|
||
<li class="active"><a href="#" onclick="return false;" title="InfoQ English">En</a></li>
|
||
<li><a href="https://www.infoq.cn">中文</a></li>
|
||
<li><a href="/jp/">日本</a></li>
|
||
<li><a href="/fr/">Fr</a></li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
<div data-nosnippet class="actions header__bottom header__bottom__events">
|
||
<div class="actions__left">
|
||
<div class="events-list" role="list" aria-label="Upcoming events">
|
||
<div class="event-item" role="listitem" data-event-type="certification" data-sort-date="2026-09-14">
|
||
<a class="event-card" href="https://certification.qconferences.com/architecture?utm_source=infoq&utm_medium=referral&utm_campaign=homepageheader_onlinecohortarchitecture26" target="_blank" rel="noopener noreferrer" aria-label="Online InfoQ Architect Certification, Sep 14, 2026">
|
||
<div class="event-date">
|
||
<div class="event-date-box" aria-hidden="true"><span>Sep</span><span>14,</span><span>2026</span></div>
|
||
</div>
|
||
<div class="event-content">
|
||
<p class="event-title">Architect Certification</p>
|
||
<p class="event-description">Distributed systems, decentralized decisions, platform engineering, and AI architecture. <br/><strong>Online. Register Now.</strong></p>
|
||
</div>
|
||
</a>
|
||
</div>
|
||
<div class="event-item" role="listitem" data-event-type="certification" data-sort-date="2026-09-18">
|
||
<a class="event-card" href="https://certification.qconferences.com/ai-assisted-engineering?utm_source=infoq&utm_medium=referral&utm_campaign=homepageheader_onlinecohortaiassistedengineering26" target="_blank" rel="noopener noreferrer" aria-label="AI-Assisted Engineering Certification, Sep 18, 2026">
|
||
<div class="event-date">
|
||
<div class="event-date-box" aria-hidden="true"><span>Sep</span><span>18,</span><span>2026</span></div>
|
||
</div>
|
||
<div class="event-content">
|
||
<p class="event-title">AI-Assisted Engineering Certification</p>
|
||
<p class="event-description">Your coding agent moves fast. Who checks whether it's making the codebase better? <br/><strong>Online. Register Now.</strong></p>
|
||
</div>
|
||
</a>
|
||
</div>
|
||
<div class="event-item" role="listitem" data-event-type="certification" data-sort-date="2026-10-14">
|
||
<a class="event-card" href="https://certification.qconferences.com/ai-security-privacy?utm_source=infoq&utm_medium=referral&utm_campaign=homepageheader_onlinecohortaisecurity26" target="_blank" rel="noopener noreferrer" aria-label="Online InfoQ AI Security & Privacy Engineering Certification, August 26, 2026">
|
||
<div class="event-date">
|
||
<div class="event-date-box" aria-hidden="true"><span>Oct</span><span>14,</span><span>2026</span></div>
|
||
</div>
|
||
<div class="event-content">
|
||
<p class="event-title">AI Security & Privacy Engineering Certification</p>
|
||
<p class="event-description">Secure and govern production AI systems, from sensitive data to guardrails, evals, and audits.<br><strong>Online. Register now.</strong></p>
|
||
</div>
|
||
</a>
|
||
</div>
|
||
<div class="event-item" role="listitem" data-event-type="qcon" data-sort-date="2026-11-16">
|
||
<a class="event-card" href="https://qconsf.com/?utm_source=infoq&utm_medium=referral&utm_campaign=homepageheader_qsf26" target="_blank" rel="noopener noreferrer" aria-label="QCon San Francisco, Nov 16-20, 2026">
|
||
<div class="event-date">
|
||
<div class="event-date-box" aria-hidden="true"><span>Nov</span><span>16-20,</span><span>2026</span></div>
|
||
</div>
|
||
<div class="event-content">
|
||
<p class="event-title">QCon San Francisco</p>
|
||
<p class="event-description">What's working across AI, architecture, and leadership, from the teams doing it. <br/><strong>Register. Early bird ends August 11.</strong></p>
|
||
</div>
|
||
</a>
|
||
</div>
|
||
<div class="event-item" role="listitem" data-event-type="qcon" data-sort-date="2026-12-15">
|
||
<a class="event-card" href="https://newyork.qcon.ai/?utm_source=infoq&utm_medium=referral&utm_campaign=homepageheader_qainy26" target="_blank" rel="noopener noreferrer" aria-label="QCon AI New York, December 15-16, 2026">
|
||
<div class="event-date">
|
||
<div class="event-date-box" aria-hidden="true"><span>Dec</span><span>15-16,</span><span>2026</span></div>
|
||
</div>
|
||
<div class="event-content">
|
||
<p class="event-title">QCon AI New York</p>
|
||
<p class="event-description">Production AI across agents, context, evals, security, and infrastructure, from the senior engineers building it.<br/><strong>Registration open.</strong></p>
|
||
</div>
|
||
</a>
|
||
</div>
|
||
<div class="event-item" role="listitem" data-event-type="qcon" data-sort-date="2027-04-13">
|
||
<a class="event-card" href="https://qconlondon.com/?utm_source=infoq&utm_medium=referral&utm_campaign=homepageheader_qconlondon27" target="_blank" rel="noopener noreferrer" aria-label="QCon London, April 13-16, 2027">
|
||
<div class="event-date">
|
||
<div class="event-date-box" aria-hidden="true"><span>Apr</span><span>13-16,</span><span>2027</span></div>
|
||
</div>
|
||
<div class="event-content">
|
||
<p class="event-title">QCon London</p>
|
||
<p class="event-description">What early-adopter teams have proven in production, across 15 engineering tracks. <br/><strong> Register. Early bird ends August 11.</strong></p>
|
||
</div>
|
||
</a>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<!---->
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</header>
|
||
|
||
|
||
|
||
<!-- ####### CONTENT START ######### -->
|
||
<main>
|
||
|
||
<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">Establishing a Scalable SRE Infrastructure Using Standardization and Short Feedback Loops</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://www.infoq.com/url/t/98a0cfa1-f39c-4fa3-a936-3678f07e2250/?label=Datadog-EventPromoBox ">When AI Accelerates Development, Can Your CI Pipeline Keep Up? (Webinar Oct 8th) </a>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
</div>
|
||
<div class="actions heading__container article__heading">
|
||
<div class="actions__left">
|
||
<h1 class="heading">
|
||
Establishing a Scalable SRE Infrastructure Using Standardization and Short Feedback Loops
|
||
</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">
|
||
<p class="article__readTime date">Jun 27, 2022<span class="dot"></span>
|
||
|
||
|
||
|
||
|
||
19
|
||
min read
|
||
|
||
</p>
|
||
<div class="widget article__authors">
|
||
<div>
|
||
<p class="meta">by</p>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<ul class="no-style authors">
|
||
|
||
|
||
|
||
|
||
<li data-id="author-Philipp-Gündisch">
|
||
<p class="meta author__bio">
|
||
|
||
<a href="/profile/Philipp-G%C3%BCndisch/" class="avatar author__avatar" aria-label="Philipp Gündisch"></a>
|
||
<span class="author__name">
|
||
<a href="/profile/Philipp-G%C3%BCndisch/" class="author__link">Philipp Gündisch</a>
|
||
</span>
|
||
</p>
|
||
|
||
</li>
|
||
|
||
|
||
|
||
|
||
<li data-id="author-Vladyslav-Ukis">
|
||
<p class="meta author__bio">
|
||
|
||
<a href="/profile/Vladyslav-Ukis/" class="avatar author__avatar" aria-label="Vladyslav Ukis"></a>
|
||
<span class="author__name">
|
||
<a href="/profile/Vladyslav-Ukis/" class="author__link">Vladyslav Ukis</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 class="heading text-left footer__heading">Follow us on </h4>
|
||
<div class="social__links columns social__links__row">
|
||
<a style="color:#222 !important;" rel="noreferrer noopener" href="https://bit.ly/4bg6QM8" target="_blank"><span class="icon icon__large icon__social icon__youtube"></span><div><span class="social__count" style="font-weight:700 !important">Youtube</span><span class="social__followers">232K Followers</span></div></a>
|
||
<a style="color:#222 !important;" rel="noreferrer noopener" href="https://bit.ly/44IzAtf" target="_blank"><span class="icon icon__large icon__social icon__linkedin"></span><div><span class="social__count" style="font-weight:700 !important">Linkedin</span><span class="social__followers">26K Followers</span></div></a>
|
||
<a style="color:#222 !important;" rel="noreferrer noopener" href="https://bit.ly/4eYXrtM" target="_blank"><span class="icon icon__large icon__social icon__instagram"></span><div><span class="social__count" style="font-weight:700 !important">Instagram</span><span class="social__followers">New</span></div></a>
|
||
<a style="color:#222 !important;" rel="noreferrer noopener" href="https://bit.ly/3RaJalC" target="_blank"><span class="icon icon__large icon__social icon__rss"></span><div><span class="social__count" style="font-weight:700 !important">RSS</span><span class="social__followers">19K Readers</span></div></a>
|
||
<a style="color:#222 !important;" rel="noreferrer noopener" href="https://bit.ly/4pfxivv" target="_blank"><span class="icon icon__large icon__social icon__twitter"></span><div><span class="social__count" style="font-weight:700 !important">X</span><span class="social__followers">57.1k Followers</span></div></a>
|
||
<a style="color:#222 !important;" rel="noreferrer noopener" href="https://bit.ly/3QrGMH2" target="_blank"><span class="icon icon__large icon__social icon__fb"></span><div><span class="social__count" style="font-weight:700 !important">Facebook</span><span class="social__followers">21K Likes</span></div></a>
|
||
<a style="color:#222 !important;" rel="noreferrer noopener" href="https://bit.ly/4eS8FjG" target="_blank"><span class="icon icon__large icon__social icon__bluesky"></span><div><span class="social__count" style="font-weight:700 !important">Bluesky</span><span class="social__followers">New</span></div></a>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
<div class="article__content">
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<div class="actions__left actions__sidebar article__actions">
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<button id="toggleLikeContent" class="icon button button__icon like button__gray icon__like" aria-label="Like">Like</button>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<div class="bookmarkReading">
|
||
<button id="bookmarkBtn" data-ref="bookmarkPage" aria-label="Read later" class="login button__gray button button__icon icon icon__bookmark icon--only"> </button>
|
||
<!-- new dropdown rading list -->
|
||
<div class="my-0 button__dropdown dropdown reading_list dropdown__center" id="showBookmarks">
|
||
<button aria-label="Reading list" class="button button__unstyled button__small"></button>
|
||
<div class="dropdown__holder">
|
||
<div class="dropdown__content">
|
||
<ul class="no-style dropdown__nav">
|
||
<li class="active"><a href="/showbookmarks.action">Reading list</a></li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="toastContainer" class="toast-none toast-hide">
|
||
<div class="toast"><span></span></div>
|
||
</div>
|
||
</div>
|
||
|
||
|
||
<script type="text/javascript">
|
||
|
||
if(loggedIn){
|
||
$('#showBookmarks').css('display', 'flex');
|
||
}
|
||
|
||
function performBookmark() {
|
||
Bookmarks.toggleBookmark('articles', 'scalable-SRE-standardization-feedback');
|
||
}
|
||
|
||
infoq.event.on('bookmarkRequested', function(e) {
|
||
Bookmarks.toggleBookmark('articles', 'scalable-SRE-standardization-feedback');
|
||
});
|
||
|
||
infoq.event.on("loaded", function(){
|
||
if(loggedIn){
|
||
var href = window.location.href;
|
||
if(href.indexOf("#bookmarkPage") != -1){
|
||
$('#bookmarkBtn').click();
|
||
}
|
||
}
|
||
});
|
||
|
||
$(document).ready(function() {
|
||
if(Bookmarks.isContentBookmarked == 'true'){
|
||
$('#bookmarkBtn').addClass('button__green');
|
||
$('#bookmarkBtn').removeClass('button__gray');
|
||
}else{
|
||
$('#bookmarkBtn').removeClass('button__green');
|
||
$('#bookmarkBtn').addClass('button__gray');
|
||
}
|
||
});
|
||
</script>
|
||
|
||
</div>
|
||
|
||
<div class="article__data">
|
||
|
||
<div class="takeaways">
|
||
<h3 class="icon icon__takeaways heading">Key Takeaways</h3>
|
||
<ul>
|
||
<li>Standardizing service operations is a business requirement, as without the standardization, development teams either spend lots of effort on implementing the basics of monitoring or just live with insufficient monitoring resulting in UX issues.</li>
|
||
<li>The standardization is achieved by using a shared infrastructure. The infrastructure beneficially implements the SRE methodology because it already provides a conceptual framework to standardize production monitoring. </li>
|
||
<li>The architecture of the SRE infrastructure needs to be scalable to handle any number of onboarded teams. The effort to maintain a team on the infrastructure should scale sublinearly with the number of teams onboarded. This ensures the right economy of scale for the initial and ongoing infrastructure investment. </li>
|
||
<li>Visualization dashboards provided by the SRE infrastructure need to be optimized for fast data-driven decision-making. They should immediately show where the biggest reliability problems are (e.g. least availability, highest latency in a given time frame). This should help the teams allocate reliability investments where it matters most. </li>
|
||
<li>Success criteria for the SRE infrastructure could be measured using the percentage of successfully defended SLOs and SLAs staying within the allocated error budgets, the number of services, teams and environments onboarded and the view numbers of the visualization dashboards per time unit.</li>
|
||
</ul>
|
||
|
||
<div class="separator separator__three-dots center"></div>
|
||
</div>
|
||
|
||
|
||
|
||
<p>In software organizations, there is an increasing need to operate services reliably at scale. The need can be met in different ways. One way proposed by Google is the so-called Site Reliability Engineering (SRE). It is a discipline rooted in applying software engineering techniques to operations problems. SRE enables a software delivery organization to scale the number of services in operation without linearly scaling the number of people required to operate the services. Furthermore, SRE enables teams to make data-driven decisions about when to invest in reliability of services vs. implement new features. </p>
|
||
|
||
<p>In recent years, SRE has become quite popular in the software industry. A growing number of software delivery organizations have adopted the discipline. At Siemens Healthineers <a href="https://www.siemens-healthineers.com/digital-health-solutions/teamplay-digital-health-platform">teamplay digital health platform</a> the SRE adoption started in 2019. It helped the organization with <a href="https://www.infoq.com/articles/data-driven-decision-product-operations">operating the platform reliably at scale</a>. </p>
|
||
|
||
<p>In our SRE implementation: </p>
|
||
|
||
<ul>
|
||
<li>The operations team builds and runs the SRE infrastructure </li>
|
||
<li>The development teams build and run the services leveraging the SRE infrastructure </li>
|
||
</ul>
|
||
|
||
|
||
<div class="clear"></div>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<script type="text/javascript">
|
||
var uriMapping = "articles";
|
||
var showVcr = "false";
|
||
var fillWithVcr = "true";
|
||
var sponsorshipsJson = "{"links":[{"styleName":"pdf","style":"PDF","text":"The Practical Agentic Coding Playbook","id":"65bac7cb-661e-4c0d-8c86-1f10784a9e30","target":"https://www.infoq.com/vendorcontent/show.action?vcr=430ffe46-9047-4739-a817-b7d64d070721&utm_source=infoq&utm_medium=VCR&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 Sponsors</h4>
|
||
|
||
<div class="f_rvcList"></div>
|
||
|
||
|
||
<li>
|
||
<span class="icon rvc__icon icon__small icon__pdf"></span>
|
||
<h5 class="rvc__title">
|
||
<a href="/url/f/65bac7cb-661e-4c0d-8c86-1f10784a9e30/" class="rvc__link" rel="nofollow">
|
||
The Practical Agentic Coding Playbook
|
||
</a>
|
||
</h5>
|
||
</li>
|
||
|
||
|
||
</ul>
|
||
|
||
<div class="related__prsp f_sponsorship" data-trk-view="true" data-place="EMBEDDED" data-trk-impr="true" jsh="{"topic":"Monitoring","id":"12605306-ee86-4a5c-bc22-ab8b965bfc4a","title":"Moderne - Architect Influence Program 08/11/2026 - 11/11/2026"}">
|
||
<h4 class="heading">Related Sponsor</h4>
|
||
|
||
<a href="/url/f/23bf88df-99d8-4d65-9312-314d309fe792/" target="_blank" rel="nofollow">
|
||
<img loading="lazy" src="https://imgopt.infoq.com//fit-in/290x500/filters:quality(100)/filters:no_upscale()/sponsorship/topic/12605306-ee86-4a5c-bc22-ab8b965bfc4a/ModerneLogoMicrosite-1786453474094.png" class="related__img" alt="Related sponsor icon"/>
|
||
</a>
|
||
|
||
|
||
<div class="related__desc">
|
||
<p style="clear: both; padding: 10px 0 0 0;"><b>Automated code transformation at scale. Fix vulnerabilities, migrate frameworks, and modernize legacy code across every repo. <a href="/url/f/6da3628e-6fd6-47a4-a71e-ff0fa261441a/" target="_blank" rel="nofollow">Try Moderne Free</a>.</b></p>
|
||
|
||
</div>
|
||
</div>
|
||
|
||
|
||
</div>
|
||
|
||
|
||
<p>It is a classic responsibility split for “you build it, you run it”. Our primary reason for implementing “you build it, you run it” was that this model provides maximum incentives for the development teams to implement reliability during feature development. Developers on-call do not like to be paged. With “you build it, you run it”, the developers are in full control of avoiding being paged by implementing sufficient reliability before the services hit production. </p>
|
||
|
||
<p>The establishment of the SRE infrastructure enabling the developers to run their services was done in an agile manner. We employed very short feedback loops and standardization in order to make the infrastructure useful and scalable at the same time. The short feedback loops support scaling because the infrastructure development is steered using the feedback from the developers trying to achieve their monitoring goals using the infrastructure. This way, over time, the infrastructure has enough useful features for many teams to want to jump on it. </p>
|
||
|
||
<p>In this article, we describe the architecture and implementation of our SRE infrastructure, how it is used and how it was adopted. </p>
|
||
|
||
<h2>Implementing the SRE Infrastructure </h2>
|
||
|
||
|
||
|
||
|
||
<div id="lowerFullwidthVCR"></div>
|
||
|
||
<p>The SRE infrastructure is a set of tools, algorithms and visualization dashboards that together enable a team to operate their services reliably at scale in an efficient manner. The implementation, maintenance and operations of the SRE infrastructure requires a, possibly small, team of dedicated developers. </p>
|
||
|
||
<h2>Agile Delivery</h2>
|
||
|
||
<p>When building up the SRE infrastructure, we established a very tight working mode between the operations team doing the implementation and the development teams being onboarded on the infrastructure. We ensured that the operations team was always only one step ahead, not more, of the development teams in terms of feature implementation. Every implemented feature went into immediate use by the development teams and was iterated upon relentlessly based on feedback. </p>
|
||
|
||
<h2>Architecture </h2>
|
||
|
||
<p>The architecture for the SRE infrastructure needs to fulfill multiple almost equally important goals. These are described in the following sections along with external and internal views on the architecture. </p>
|
||
|
||
<h3>Goals</h3>
|
||
|
||
<p>As the most important architectural goal for the SRE infrastructure, we selected scalability, so that a limited number of infrastructure developers can serve a huge number of development teams and their heterogeneous needs. A non-negotiable standardized set of the monitoring tools is essential to reduce the initial efforts for the SRE infrastructure engineers. The telemetry logs need to be standardized so that the same database query can be evaluated on different log tables. Otherwise, each service could log its own format of e.g. availability logs, which then requires a specialized query to check for the service`s availability. In this scenario, a huge amount of frequently outdated queries needs to be built and maintained by the SRE infrastructure engineer and is therefore not a feasible solution.</p>
|
||
|
||
<p>This connects to the second goal, which is consistency throughout time and across teams. The reasoning for any triggered alert should be immediately presentable for any interested alert responder. Ensuring a common schema throughout all the SRE relevant logs enables aggregations as well as monitoring of the huge amount of telemetry with a small amount of logic templates (e.g. queries on the log data to check for SLO breaches). These templates can be filled with team and service dependent information to customize them for each team’s needs. With this setup, consistency and scalability are not conflicting goals, and in fact benefit from each other. </p>
|
||
|
||
<p>The third goal is the usability of the infrastructure. Any developer who is familiar with the common SRE terms should be able to adjust, create and remove SLOs for their services on their own. To achieve this, a lot of thought should be put into the intuitiveness of any provided tool. In an optimal scenario you want to integrate your custom tool for SLO definitions into any existing deployment pipeline for the service so that the SLOs are active right from the start and the thought process of defining those has taken place before any new product is released. The configuration file itself can be very simplistic, and standardized targets should be automatically attached to a service so nothing gets missed by accident. Of course, the dev team should be able to explicitly remove or override default SLOs by extending the configuration.</p>
|
||
|
||
<h3>Customer View</h3>
|
||
|
||
<p>This section describes the view onto the SRE infrastructure architecture from a developer point of view who is consuming the tools to keep track of the services. As seen in the picture, the infrastructure itself is not accessible by the developers and therefore appears as a black box. You will find details on this part in the next section. The input describes all the necessary information which needs to be provided for each technical service. It usually contains several service level objectives. </p>
|
||
|
||
<p><img alt="" data-src="articles/scalable-SRE-standardization-feedback/en/resources/1Untitled-7-1656065528996.jpeg" style="width: 523px; height: 544px;" src="https://imgopt.infoq.com/fit-in/3000x4000/filters:quality(85)/filters:no_upscale()/articles/scalable-SRE-standardization-feedback/en/resources/1Untitled-7-1656065528996.jpeg" rel="share"></p>
|
||
|
||
<p>At teamplay a distinction is made between objectives for endpoints exposed to the outside world (SLAs) and objectives for internally and externally used services (SLOs). SLAs are committed SLOs to external partners and always paired with tighter internal SLOs. There is also a margin between the expected service behavior and what is contractually agreed upon so that alerts arrive prior to contract breaches. An SLO definition for the latency SLI contains an error budget, a threshold, and a list of service endpoints to be applied to. It is recommended to define a default (fallback) SLO which gets automatically assigned to all endpoints of a service if no explicit SLO is defined. An SLO definition for Availability contains the same information except the threshold, and instead defines valid or invalid HTTP result codes. Also, the identifier of a database needs to be given so that the checks for alert breaches can be installed at the correct location. The alerting information defines a webhook or a set of mail addresses which need to be notified when SLO breaches occur. To close the loop, the alert notifications are sent to the defined developers and webhook addresses. Also we offer an interactive PowerBi report which shows all SLOs, SLAs and their error budget depletions over the last three months.</p>
|
||
|
||
<h3>Internal View</h3>
|
||
|
||
<p>This section will cover the required steps to transform the SRE configuration into alerts and dashboards. </p>
|
||
|
||
<h3><img alt="" data-src="articles/scalable-SRE-standardization-feedback/en/resources/1Untitled-8-1656065528996.jpeg" style="width: 493px; height: 629px;" src="https://imgopt.infoq.com/fit-in/3000x4000/filters:quality(85)/filters:no_upscale()/articles/scalable-SRE-standardization-feedback/en/resources/1Untitled-8-1656065528996.jpeg" rel="share"></h3>
|
||
|
||
<p>The first step will install or update alerts on the configured SLO targets whenever a service gets deployed. In our scenario this includes the setup of Azure Monitor alert rules which are frequently executed log queries with an alert condition. They compare the defined SLO targets against the live data and alert on the current error budget consumption. Furthermore, a webhook entry will be configured in PagerDuty to consume the alerts on SLO breaches and notify relevant stakeholders and developers to mitigate the ongoing issue.</p>
|
||
|
||
<p>After that, the SRE configuration is uploaded to an SLO database. It is recommended to have all defined and deployed SLOs and services at the same place so they can easily be viewed. At teamplay, Azure Data Explorer is used to store this kind of information since it integrates well with Power BI and the query language is very powerful.</p>
|
||
|
||
<p>Apart from the deployment, a set of daily tasks needs to be executed to keep the infrastructure up-to-date. The alerts were already set up during the deployment and will alert on real time issues. The error budget instead will be consumed throughout a larger time frame. Due to the potentially massive amount of logs, it is recommended to aggregate the telemetry logs and precalculate the error budget depletion for each SLO on a daily basis. This SLO statistics summary is migrated by scripts to the same Kusto database as the SLO definitions and may include further attributes such as number of total requests for that day and endpoint. Once that data is available in Azure Data Explorer, an automated PowerBI refresh pulls the data in. </p>
|
||
|
||
<h2>Service Alerting</h2>
|
||
|
||
<p>Alerting is a very important topic in SRE. There is always a tradeoff between alerting too often versus alerting too late. In the famous series of Google SRE books, a few different flavors of alerting strategies are introduced and all of them have their benefits and drawbacks. At teamplay we calculate the burn rate over the last hour and send an alert if the service is consuming more than twice the amount of error budget as planned. At the end of each error budget period (four calendar weeks) we also send a notification for those endpoints which have consumed all of their error budget. </p>
|
||
|
||
<p>The figure below, taken from the book “<a href="https://www.amazon.de/-/en/Vladyslav-Ukis/dp/0137424604">Establishing SRE Foundations</a>”, shows the benefits of alert based on SLIs over regular alerts. </p>
|
||
|
||
<p><img alt="" class="zoom-image" data-src="articles/scalable-SRE-standardization-feedback/en/resources/1Untitled-9-1656065528996.jpeg" style="width: 992px; height: 701px;" src="https://imgopt.infoq.com/fit-in/3000x4000/filters:quality(85)/filters:no_upscale()/articles/scalable-SRE-standardization-feedback/en/resources/1Untitled-9-1656065528996.jpeg" rel="share"></p>
|
||
|
||
<h2>Visualization Dashboards </h2>
|
||
|
||
<p>The visualization dashboards enable teams to check defined SLOs of any service, investigate the error budget depletion by SLO and prioritize reliability work based on the error budget depletion over time. The dashboards are interactive PowerBI reports that support the user with filtering the data to their needs. They are updated once in 24h. </p>
|
||
|
||
<p>The following dashboards are available: </p>
|
||
|
||
<ul>
|
||
<li>SLOs definitions dashboard (individually for availability, latency and interval metrics) </li>
|
||
<li>SLO adherence dashboard (individually for availability, latency and interval metrics; shows SLO adherence over the last three error budget periods for a single SLO) </li>
|
||
<li>Reliability prioritization dashboard (shows SLO adherence over the last three error budget periods for all SLOs for a team, service or deployment sorted by the biggest error budget consumers shown on top) </li>
|
||
<li>Current overview dashboard (shows the SLO adherence so far in the current error budget period) </li>
|
||
</ul>
|
||
|
||
<p>Dashboard with additional insights: </p>
|
||
|
||
<ul>
|
||
<li>Retry suggestions (detection of missing retries for the HTTP result code “500”) </li>
|
||
</ul>
|
||
|
||
<p>Ideas for future dashboards: </p>
|
||
|
||
<ul>
|
||
<li>Absence of applicable stability patterns for distributed systems (e.g. detection of missing circuit breakers) </li>
|
||
<li>An SLO higher in the service hierarchy is tighter than a dependent SLO lower in the service hierarchy (although in some cases, it may be possible to build more reliable things on top of less reliable things: <a href="https://youtu.be/-lHPDx90Ppg">SLOconf: SLO Math - by Steve McGhee</a>) </li>
|
||
</ul>
|
||
|
||
<p>Some of the existing dashboards are shown and explained in detail below. </p>
|
||
|
||
<h3>Error budget depletion dashboard per SLI</h3>
|
||
|
||
<p>The following dashboard shows availability error budget depletion over time. It does so for an SLO specified on top of the dashboard: 99% availability for “post /api/categoriesdistribution/getcategoriesdistributiondata” </p>
|
||
|
||
<p><img alt="" class="zoom-image" data-src="articles/scalable-SRE-standardization-feedback/en/resources/1pasted image 0-18-1656065528996.jpeg" style="width: 1449px; height: 812px;" src="https://imgopt.infoq.com/fit-in/3000x4000/filters:quality(85)/filters:no_upscale()/articles/scalable-SRE-standardization-feedback/en/resources/1pasted image 0-18-1656065528996.jpeg" rel="share"></p>
|
||
|
||
<p>On top of the dashboard, the SLO, the definition of a failed request, the dates of the current error budget period and the remaining days in the current error budget period are shown to provide a quick orientation. </p>
|
||
|
||
<p>The upper graph with horizontal lines shows the remaining error budget in % per day per deployment environment over time. The steepest error budget depletion is in Production EU shown as a mahogany line. The second steepest error budget depletion is in Production JP shown as a red line. The error budget depletion in Production US shown as a yellow line is rather small. The error budget replenishments at the beginning of each shown error budget period are clearly visible with all the lines approaching 100% fast. </p>
|
||
|
||
<p>Premature error budget exhaustion (negative error budget in an error budget period) can be clearly seen in Production EU (green line) in March, April and May. It can also be seen in Production JP (yellow line) in April. This gives the team a clear direction as to where to investigate and invest in reliability. </p>
|
||
|
||
<p>The lower graph with vertical lines shows the failed request rate per day per deployment environment over time. It can be used for information purposes. </p>
|
||
|
||
<p>Similar dashboards exist to track the error budget depletion for the latency SLI and others. </p>
|
||
|
||
<h3>Reliability prioritization dashboards </h3>
|
||
|
||
<p>There are two reliability prioritization dashboards provided by the SRE infrastructure: </p>
|
||
|
||
<ul>
|
||
<li>Short-term dashboard with an overview of the current error budget period </li>
|
||
<li>Long-term dashboard with an overview of the last three completed error budget periods </li>
|
||
</ul>
|
||
|
||
<p>Below is the short-term reliability prioritization dashboard. On top in the middle of the dashboard, the dates for the current error budget period are shown. Right below, the remaining number of days in the current error budget period are displayed: 13 out of 28. </p>
|
||
|
||
<p><img alt="" class="zoom-image" data-src="articles/scalable-SRE-standardization-feedback/en/resources/1pasted image 0-19-1656065528996.jpeg" style="width: 1600px; height: 899px;" src="https://imgopt.infoq.com/fit-in/3000x4000/filters:quality(85)/filters:no_upscale()/articles/scalable-SRE-standardization-feedback/en/resources/1pasted image 0-19-1656065528996.jpeg" rel="share"></p>
|
||
|
||
<p>For the selection, the pie chart in the left upper corner of the dashboard displays an overview of all applicable SLOs vs. SLOs where the error budget is being depleted. That is, about 70% of SLOs do not have any error budget depletion so far in the 13 elapsed days of the current error budget period. </p>
|
||
|
||
<p>The tables in the lower part of the dashboard show individual SLOs for the data selection. On the left hand side, availability SLOs are shown. On the right hand side, latency SLOs are displayed. In color, the adherence to each SLO is shown in a visually compelling way: </p>
|
||
|
||
<ul>
|
||
<li>Red cells demonstrate the least SLO adherence, which equals to the most error budget depletion in the elapsed days of the current error budget period. The remaining error budget is too small for not being exhausted prematurely before the end of the current error budget period. The red cells are shown on top because this is where the developers’ attention is required most. </li>
|
||
<li>Yellow cells (there are none in the example above) demonstrate SLO adherence where the current error budget depletion is fairly high. If continued with the current rate, it may well lead to a premature error budget exhaustion in the current error budget period. It might be worth investigating the reasons for the significant error budget depletion in the elapsed days of the current error budget period. </li>
|
||
<li>Green cells demonstrate a fully acceptable error budget depletion in the current error budget period. If the depletion rate remains the same, the current error budget period will not end with a negative error budget. </li>
|
||
</ul>
|
||
|
||
<p>Using the dashboard, the teams can focus on the areas where immediate reliability attention is required. One of the use cases where the dashboard is useful is post release monitoring of services. The days after a production release are particularly interesting to assess the impact of the deployed changes on error budget depletion patterns. </p>
|
||
|
||
<p>The long-term reliability prioritization dashboard is shown below. It allows the teams to zoom out a bit and take a look at the error budget depletion of their services over the last three months. </p>
|
||
|
||
<p><img alt="" class="zoom-image" data-src="articles/scalable-SRE-standardization-feedback/en/resources/1pasted image 0-20-1656065528996.jpeg" style="width: 1600px; height: 865px;" src="https://imgopt.infoq.com/fit-in/3000x4000/filters:quality(85)/filters:no_upscale()/articles/scalable-SRE-standardization-feedback/en/resources/1pasted image 0-20-1656065528996.jpeg" rel="share"></p>
|
||
|
||
<p>Based on the data filtering, a list of applicable SLOs is displayed in the middle of the dashboard. On top of the dashboard, the dates of the last three completed error budget periods are displayed. In color on the right hand side, the adherence of each SLO for each error budget period is shown in a visually compelling way: </p>
|
||
|
||
<ul>
|
||
<li>Red cells demonstrate the least SLO adherence, with a negative error budget left at the end of a given error budget period. In brackets, the actual fulfillment percentage of an SLO is shown. The red cells are shown on top because this is where reliability prioritization is required most. </li>
|
||
<li>Yellow cells demonstrate a nearly exhausted error budget in a given error budget period. Although some error budget is left, it is worth investigating the reasons for such a significant error budget depletion. </li>
|
||
<li>Green cells demonstrate a fully acceptable error budget depletion. </li>
|
||
</ul>
|
||
|
||
<p>Using the dashboard, the teams can focus on the areas where reliability prioritization is required in a matter of seconds. Based on the data from the dashboard, the teams typically create work items that describe the necessary reliability work to be prioritized using an existing prioritization procedure established in a given team (e.g. Kanban or Scrum). </p>
|
||
|
||
<h3>UX for productivity </h3>
|
||
|
||
<p>We recommend using a very intuitive color coding, such as red / yellow / green, for error budget depletion and all other metrics the user should make decisions upon. Also, it should be easy for a user to filter all displayed data based on the context of a geographical region or technical service so that issues can be detected as well as limited to a certain domain. </p>
|
||
|
||
<p>For comparison reasons it makes sense to normalize error budget depletion graphs regardless of the defined error budget to 100%. This shifts the focus towards customer experience since the SLOs are defined based on customer happiness and a 99.9% SLO for one use case is therefore equally important as a 95% SLO set for another use case. </p>
|
||
|
||
<p>For alerts we recommend to present detailed contextual information within the alert payload so that a developer can easily locate the root cause. Also helpful links to resources, runbooks or even database queries should be included in the alert payload itself. All these contribute to reducing the time to recover from incidents. </p>
|
||
|
||
<p>The maintenance effort for the dashboard is pretty low since automated daily refreshes collect the latest data automatically. Manual maintenance effort is only needed if the data propagation fails due to a transient error (e.g. source data unavailable) which can be fixed by another refresh in most of the cases. Of course, the dashboard should be continuously improved according to the SREs needs. This work can include usability improvements or the extension by new graphs and additional information condensed from the logs. A daily refresh of the data is sufficient since the dashboard should not be used for reactive production monitoring. This is fulfilled by the alerting mechanism. The dashboard instead should be used to prioritize reliability against the development of new features on a development cycle basis. In addition, it should offer an overview about the defined SLOs and it is beneficial to visualize the effect on reliability of newly deployed changes. This can be achieved by comparing the service performance before, during and after a rollout.</p>
|
||
|
||
<h2>Using the SRE Infrastructure </h2>
|
||
|
||
<p>Getting the SRE infrastructure used requires development teams to be ready for SRE adoption. The teams need to understand the advantages of operating the services using SRE as opposed to other ways of doing so. In order to familiarize the teams with the SRE methodology, concepts and infrastructure, we used team coaching as a core method. </p>
|
||
|
||
<p>We went team by team and: </p>
|
||
|
||
<ul>
|
||
<li>implemented standardized logging </li>
|
||
<li>defined SLOs through iteration </li>
|
||
<li>taught the team members to react to the SLO breaches using on-call rotations </li>
|
||
<li>showed how to use error budget depletions to identify reliability issues </li>
|
||
<li>demonstrated how to prioritize reliability using provided dashboards </li>
|
||
<li>implemented error budget policies</li>
|
||
</ul>
|
||
|
||
<p>We took a team-based approach to SRE infrastructure adoption recognizing the fact that each team is unique and is on its own maturation journey. </p>
|
||
|
||
<p>Based on the experience, we embedded SRE in our continuous improvement programme using an <a href="https://www.infoq.com/articles/data-driven-decision-optimize-delivery">indicators framework</a> described earlier, which is systematically rolled out in the entire organization. </p>
|
||
|
||
<h2>SRE Infrastructure Adoption </h2>
|
||
|
||
<p>The adoption of the SRE infrastructure can be measured using several dimensions. These are: </p>
|
||
|
||
<ol>
|
||
<li>Number of teams on the SRE infrastructure over time </li>
|
||
<li>Number of services on the SRE infrastructure over time </li>
|
||
<li>Number of environments monitored with the SRE infrastructure </li>
|
||
<li>Percentage of services within SLOs over time </li>
|
||
<li>Percentage of services within SLAs over time </li>
|
||
<li>Number of postmortems over time </li>
|
||
<li>Number of views of visualization dashboards over time </li>
|
||
<li>Number of major outages over time </li>
|
||
<li>Number of customer escalations over time </li>
|
||
<li>Number of customer support tickets reporting failures over time </li>
|
||
</ol>
|
||
|
||
<p>The dimensions 1-7 are outputs rather than outcomes. The dimensions 8-10 can be considered outcomes. For our SRE infrastructure adoption of three years, the current data snapshot for some of the dimensions above is as follows:</p>
|
||
|
||
<ol>
|
||
<li>Number of teams on the SRE infrastructure: 17</li>
|
||
<li>Number of services on the SRE infrastructure: 57</li>
|
||
<li>Number of environments monitored with the SRE infrastructure: 15</li>
|
||
<li>Percentage of services within SLOs in the last 180 days
|
||
<ol>
|
||
<li>Percentage of availability SLOs across all services with no premature availability error budget exhaustion in the last 180 days: 99.72%</li>
|
||
<li>Percentage of latency SLOs across all services with no premature latency error budget exhaustion in the last 180 days: 95.89%</li>
|
||
</ol>
|
||
</li>
|
||
<li>Percentage of services within SLAs in the last 180 days
|
||
<ol>
|
||
<li>Percentage of availability SLAs across all applicable services with no premature availability error budget exhaustion in the last 180 days: 100%</li>
|
||
<li>Percentage of latency SLAs across all applicable services with no premature latency error budget exhaustion in the last 180 days: 100%</li>
|
||
</ol>
|
||
</li>
|
||
<li>Number of post mortems in the last six months: 9</li>
|
||
<li>Number of views of visualization dashboards in the last three months: 559</li>
|
||
<li>Number of major outages in the last six months: 1</li>
|
||
<li>Number of customer escalations in the last six months: 2</li>
|
||
</ol>
|
||
|
||
<p>We do have qualitative evidence that the application of SRE has significantly reduced the amount of customer escalations and, generally, outages reported to our teams from the outside. Further, we do have qualitative evidence that the application of SRE provides a good structure for defining, splitting and fulfilling operational responsibilities across roles in a development team, and beyond. </p>
|
||
|
||
<p>We do not yet have the evidence that the application of SRE allows to scale the number of people running the services sublinearly with scaling the number of services in operation. Additionally, we need to invest more into measuring the value of the SRE infrastructure to be able to see trends over time at a glance. </p>
|
||
|
||
<p>Finally, we have evidence that teams that adopted SRE well for existing services apply it to new services by default from the outset. This is a very profound insight. It allows new services to be incepted, prototyped, implemented and deployed with reliability built-in from the start. It will surely lead to more reliable services in production in future. </p>
|
||
|
||
<h2>Summary</h2>
|
||
|
||
<p>A net new SRE implementation in a product delivery organization is a considerable undertaking. It requires a build-up of an SRE infrastructure by dedicated people and the adoption of the infrastructure by the development teams. The process needs to be facilitated by extensive team coaching in order to drive the awareness and understanding of SRE as well as application of its concepts to the unique circumstances of each team. The coaching also establishes a tight feedback loop between developers in the teams and SRE infrastructure engineers to ensure the infrastructure meets the needs of its users. </p>
|
||
|
||
<p>More details about our work can be found in the upcoming book “<a href="https://www.informit.com/store/establishing-sre-foundations-a-step-by-step-guide-to-9780137424658">Establishing SRE Foundations</a>”, to appear later in 2022. </p>
|
||
|
||
<h2>Acknowledgements </h2>
|
||
|
||
<p>We would like to acknowledge many people in various roles at the Siemens Healthineers digital health platform who enabled and contributed to driving the SRE adoption at teamplay. </p>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<div class="author-section-full"> <!-- main wrapper for authors section -->
|
||
<h2>About the Authors</h2> <!-- section title -->
|
||
|
||
|
||
|
||
|
||
|
||
<div class="author" data-id="author-Philipp-Gündisch"> <!-- main wrapper for each author -->
|
||
<a href="/profile/Philipp-G%C3%BCndisch/" class="avatar author__avatar" aria-label="Philipp Gündisch"> </a>
|
||
<div class="content-author">
|
||
<h4><strong>Philipp Gündisch</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 class="author" data-id="author-Vladyslav-Ukis"> <!-- main wrapper for each author -->
|
||
<a href="/profile/Vladyslav-Ukis/" class="avatar author__avatar" aria-label="Vladyslav Ukis"> </a>
|
||
<div class="content-author">
|
||
<h4><strong>Vladyslav Ukis</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="Establishing a Scalable SRE Infrastructure Using Standardization and Short Feedback Loops" id="cr_item_title"/>
|
||
|
||
<input type="hidden" name="" value="Philipp Gündisch,Vladyslav Ukis" id="cr_item_author"/>
|
||
|
||
<input type="hidden" name="" value="http://www.infoq.com/articles/scalable-SRE-standardization-feedback/" 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="1656313200000" 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="6043">
|
||
<a href="/Devops/" class="button related__topic button__small button__black">DevOps</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li data-id="4562">
|
||
<a href="/Monitoring/" class="button related__topic button__small button__black">Monitoring</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
<li data-id="305">
|
||
<a href="/standardization/" class="button related__topic button__small button__black">Standardization</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
<li data-id="4532">
|
||
<a href="/Feedback/" class="button related__topic button__small button__black">Feedback</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="7703">
|
||
<a href="/apm/" class="button related__topic button__small button__black">application performance management</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
<li data-id="40">
|
||
<a href="/stories/" class="button related__topic button__small button__black">Stories & Case Studies</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
<li data-id="708">
|
||
<a href="/enterprise-architecture/" class="button related__topic button__small button__black">Enterprise Architecture</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
<li data-id="17182">
|
||
<a href="/sre/" class="button related__topic button__small button__black">Site Reliability Engineering</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
<li data-id="5813">
|
||
<a href="/Reliability/" class="button related__topic button__small button__black">Reliability</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
<li data-id="3">
|
||
<a href="/agile/" class="button related__topic button__small button__black">Agile</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
<li data-id="7434">
|
||
<a href="/performance/" class="button related__topic button__small button__black">Performance</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
<li data-id="5855">
|
||
<a href="/support/" class="button related__topic button__small button__black">Support</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
<li data-id="1389">
|
||
<a href="/architecture/" class="button related__topic button__small button__black">Architecture</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
<li data-id="15318">
|
||
<a href="/Scaling/" class="button related__topic button__small button__black">Scaling</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": "5774,301,1311,37,1736,4001,1339,1764",
|
||
"title": "Establishing a Scalable SRE Infrastructure Using Standardization and Short Feedback Loops",
|
||
"contentPath": "/articles/scalable-SRE-standardization-feedback",
|
||
"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/scalable-SRE-standardization-feedback") !== -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/2026/09/netflix-flink-autoscaler/" class="rvc__link">
|
||
Netflix Moves toward Open Source Flink Autoscaler for 30,000+ Streaming Jobs
|
||
</a>
|
||
</h5>
|
||
</li>
|
||
|
||
<li>
|
||
<h5 class="rvc__title">
|
||
|
||
<a href="/news/2026/09/java-news-roundup-aug31-2026/" class="rvc__link">
|
||
Java News Roundup: TornadoVM 6, JReleaser, LangChain4j, Java Operator SDK, JHipster, Yupiik Fusion
|
||
</a>
|
||
</h5>
|
||
</li>
|
||
|
||
<li>
|
||
<h5 class="rvc__title">
|
||
|
||
<a href="/news/2026/09/google-mantis-vulnerability-scan/" class="rvc__link">
|
||
Google Mantis: an Agentic Vulnerability Scanning Harness for Reducing False Positives
|
||
</a>
|
||
</h5>
|
||
</li>
|
||
|
||
<li>
|
||
<h5 class="rvc__title">
|
||
|
||
<a href="/news/2026/09/blume-docs-ai/" class="rvc__link">
|
||
Blume: Zero-Config Docs Framework That Turns a Markdown Folder into an AI-Ready Website
|
||
</a>
|
||
</h5>
|
||
</li>
|
||
|
||
<li>
|
||
<h5 class="rvc__title">
|
||
|
||
<a href="/news/2026/09/cern-debian-infra/" class="rvc__link">
|
||
CERN Renounces RHEL in Favor of Debian for its Accelerator Controls Infrastructure
|
||
</a>
|
||
</h5>
|
||
</li>
|
||
|
||
<li>
|
||
<h5 class="rvc__title">
|
||
|
||
<a href="/podcasts/personality-over-skillset/" class="rvc__link">
|
||
Personality Over Skillset: How Adam Wachtel Builds Engineering Teams
|
||
</a>
|
||
</h5>
|
||
</li>
|
||
|
||
</ul>
|
||
</div>
|
||
</li>
|
||
|
||
</ul>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
</div>
|
||
<div class="article__more f_article_rightbar" data-col="2/6">
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<script type="text/javascript">
|
||
window.finishedRightbarVcr = false;
|
||
|
||
var _gaq = _gaq || [];
|
||
var recomJson ="[{"imageStoragePath":"https://imgopt.infoq.com/fit-in/50x50/filters:quality(80)/presentations/ai-sre-incident-response/en/smallimage/infoq-live-thumbnail-1777368469045.jpg","topicsIds":null,"date":1777375260000,"contentType":"presentations","url":"/presentations/ai-sre-incident-response","title":"AI-Powered SRE for Autonomous Incident Response","authorsList":["Rohit Dhawan","Pavan Madduri","Alina Astapovich","Goutham Rao","Renato Losio"],"itemPath":"/presentations/ai-sre-incident-response","score":50001},{"imageStoragePath":null,"topicsIds":null,"date":1789114440000,"contentType":"news","url":"/news/2026/09/observability-ai-agents","title":"Session Traces and Cost Controls Help Diagnose AI Agent Failures","authorsList":["Mark Silvester"],"itemPath":"/news/2026/09/observability-ai-agents","score":200},{"imageStoragePath":null,"topicsIds":null,"date":1788436620000,"contentType":"news","url":"/news/2026/09/human-reviews-AI-era","title":"Rigorous Yet Sustainable Human Reviews in the AI Era","authorsList":["Ben Linders"],"itemPath":"/news/2026/09/human-reviews-AI-era","score":183},{"imageStoragePath":null,"topicsIds":null,"date":1788340020000,"contentType":"news","url":"/news/2026/09/cloudflare-optional-oauth-scopes","title":"Cloudflare Adds Optional OAuth Scopes, Letting Developers Mark What Users May Decline","authorsList":["Steef-Jan Wiggers"],"itemPath":"/news/2026/09/cloudflare-optional-oauth-scopes","score":181},{"imageStoragePath":null,"topicsIds":null,"date":1786790760000,"contentType":"news","url":"/news/2026/08/cloudflare-agent-tracing","title":"Cloudflare Adds Agent Tracing, with Truncation Limits and Uneven Payload Defaults","authorsList":["Steef-Jan Wiggers"],"itemPath":"/news/2026/08/cloudflare-agent-tracing","score":153},{"imageStoragePath":"https://imgopt.infoq.com/fit-in/50x50/filters:quality(80)/presentations/spotify-ai-codebase-migration-agent/en/smallimage/thumbnail-1784809804876.jpg","topicsIds":null,"date":1786100400000,"contentType":"presentations","url":"/presentations/spotify-ai-codebase-migration-agent","title":"Rewriting All of Spotify's Code Base, All the Time","authorsList":["Jo Kelly-Fenton","Aleksandar Mitic"],"itemPath":"/presentations/spotify-ai-codebase-migration-agent","score":139},{"imageStoragePath":"https://imgopt.infoq.com/fit-in/50x50/filters:quality(80)/articles/alternative-reduce-test-suite-size/en/smallimage/alternative-reduce-test-suite-size-thumbnail-1774943323622.jpg","topicsIds":null,"date":1775473200000,"contentType":"articles","url":"/articles/alternative-reduce-test-suite-size","title":"A Better Alternative to Reducing CI Regression Test Suite Sizes","authorsList":["James Bornefelt Westfall"],"itemPath":"/articles/alternative-reduce-test-suite-size","score":100},{"imageStoragePath":"https://imgopt.infoq.com/fit-in/50x50/filters:quality(80)/articles/rightsizing-platform-engineering/en/smallimage/rightsizing-platform-engineering-thumbnail-1787296955801.jpg","topicsIds":null,"date":1787569200000,"contentType":"articles","url":"/articles/rightsizing-platform-engineering","title":"Rightsizing Platform Engineering: Building the Platform Your Organization Actually Needs","authorsList":["John Keates"],"itemPath":"/articles/rightsizing-platform-engineering","score":14},{"imageStoragePath":"https://imgopt.infoq.com/fit-in/50x50/filters:quality(80)/articles/chaos-engineering-ecs-payments/en/smallimage/chaos-engineering-ecs-payments-thumbnail-1788254676411.jpg","topicsIds":null,"date":1788858000000,"contentType":"articles","url":"/articles/chaos-engineering-ecs-payments","title":"Implementing Chaos Engineering in Financial Payment Systems: Lessons from Enterprise ECS Deployments","authorsList":["Salim Adedeji"],"itemPath":"/articles/chaos-engineering-ecs-payments","score":3},{"imageStoragePath":"https://imgopt.infoq.com/fit-in/50x50/filters:quality(80)/articles/sovereign-fault-domains-cloud-resilience/en/smallimage/sovereign-fault-domains-cloud-resilience-thumbnail-1776430533702.jpg","topicsIds":null,"date":1776848400000,"contentType":"articles","url":"/articles/sovereign-fault-domains-cloud-resilience","title":"When a Cloud Region Fails: Rethinking High Availability in a Geopolitically Unstable World","authorsList":["Rohan Vardhan"],"itemPath":"/articles/sovereign-fault-domains-cloud-resilience","score":2},{"imageStoragePath":"https://imgopt.infoq.com/fit-in/50x50/filters:quality(80)/presentations/ai-agent-testing-evaluation/en/smallimage/zhou-yu-thumbnail-1787813732120.jpeg","topicsIds":null,"date":1788778800000,"contentType":"presentations","url":"/presentations/ai-agent-testing-evaluation","title":"From AI Agent Demo to Production: Automated Testing and Evaluation","authorsList":["Zhou Yu"],"itemPath":"/presentations/ai-agent-testing-evaluation","score":1},{"imageStoragePath":null,"topicsIds":null,"date":1788775740000,"contentType":"news","url":"/news/2026/09/apim-standard-v2-zone-redundancy","title":"Zone Redundancy Comes to API Management Standard v2","authorsList":["Steef-Jan Wiggers"],"itemPath":"/news/2026/09/apim-standard-v2-zone-redundancy","score":1},{"imageStoragePath":"https://imgopt.infoq.com/fit-in/50x50/filters:quality(80)/presentations/claude-sre-incidents/en/smallimage/alex-palcuie-thumbnail-1786539336984.jpg","topicsIds":null,"date":1787742000000,"contentType":"presentations","url":"/presentations/claude-sre-incidents","title":"Can Claude Fix Itself? Using LLMs for Incident Response","authorsList":["Alex Palcuie"],"itemPath":"/presentations/claude-sre-incidents","score":1},{"imageStoragePath":null,"topicsIds":null,"date":1787313600000,"contentType":"news","url":"/news/2026/08/cloudflare-ai-enforcement","title":"Cloudflare Turns Engineering Standards into an AI-Enforced Control System","authorsList":["Craig Risi"],"itemPath":"/news/2026/08/cloudflare-ai-enforcement","score":1},{"imageStoragePath":"https://imgopt.infoq.com/fit-in/50x50/filters:quality(80)/presentations/reliable-ai-platforms/en/smallimage/aaron-erickson-thumbnail-1782819611516.jpeg","topicsIds":null,"date":1783411380000,"contentType":"presentations","url":"/presentations/reliable-ai-platforms","title":"Designing AI Platforms for Reliability: Tools for Certainty, Agents for Discovery","authorsList":["Aaron Erickson"],"itemPath":"/presentations/reliable-ai-platforms","score":1},{"imageStoragePath":"https://imgopt.infoq.com/fit-in/50x50/filters:quality(80)/presentations/rust-autonomous-mobile-robots/en/smallimage/andy-brinkmeyer-thumbnail-1782817486635.jpeg","topicsIds":null,"date":1783328460000,"contentType":"presentations","url":"/presentations/rust-autonomous-mobile-robots","title":"Practical Robustness: Going beyond Memory Safety in Rust","authorsList":["Andy Brinkmeyer"],"itemPath":"/presentations/rust-autonomous-mobile-robots","score":1},{"imageStoragePath":"https://imgopt.infoq.com/fit-in/50x50/filters:quality(80)/presentations/architecting-deletion-system/en/smallimage/thumbnail-1779869686290.jpg","topicsIds":null,"date":1780568760000,"contentType":"presentations","url":"/presentations/architecting-deletion-system","title":"Architecting a Centralized Platform for Data Deletion at Netflix","authorsList":["Vidhya Arvind","Shawn Liu"],"itemPath":"/presentations/architecting-deletion-system","score":1},{"imageStoragePath":"https://imgopt.infoq.com/fit-in/50x50/filters:quality(80)/presentations/ai-platforms-reliability/en/smallimage/thumbnail-1779182751443.jpg","topicsIds":null,"date":1779872640000,"contentType":"presentations","url":"/presentations/ai-platforms-reliability","title":"Designing AI Platforms for Reliability: Tools for Certainty, Agents for Discovery","authorsList":["Aaron Erickson"],"itemPath":"/presentations/ai-platforms-reliability","score":1},{"imageStoragePath":"https://imgopt.infoq.com/fit-in/50x50/filters:quality(80)/articles/platform-reliability-cycle/en/smallimage/platform-reliability-cycle-thumbnail-1777467114542.jpg","topicsIds":null,"date":1777971600000,"contentType":"articles","url":"/articles/platform-reliability-cycle","title":"Three Pillars of Platform Engineering: a Virtuous Cycle","authorsList":["Pratik Agarwal"],"itemPath":"/articles/platform-reliability-cycle","score":1},{"imageStoragePath":"https://imgopt.infoq.com/fit-in/50x50/filters:quality(80)/presentations/outage-lessons/en/smallimage/molly-struve-thumbnail-1776864399990.jpeg","topicsIds":null,"date":1777371180000,"contentType":"presentations","url":"/presentations/outage-lessons","title":"Week-Long Outage: Lifelong Lessons","authorsList":["Molly Struve"],"itemPath":"/presentations/outage-lessons","score":1},{"imageStoragePath":"https://imgopt.infoq.com/fit-in/50x50/filters:quality(80)/articles/configuration-control-plane/en/smallimage/configuration-as-a-control-plane-designing-for-safety-and-reliability-at-scale-thumb-1773657574566.jpg","topicsIds":null,"date":1773997200000,"contentType":"articles","url":"/articles/configuration-control-plane","title":"Configuration as a Control Plane: Designing for Safety and Reliability at Scale","authorsList":["Karthiek Maralla"],"itemPath":"/articles/configuration-control-plane","score":1},{"imageStoragePath":null,"topicsIds":null,"date":1789138800000,"contentType":"news","url":"/news/2026/09/nvidia-pair-ai-task-router","title":"NVIDIA Personal AI Router Distributes AI Tasks across Local Compute","authorsList":["Sergio De Simone"],"itemPath":"/news/2026/09/nvidia-pair-ai-task-router","score":0},{"imageStoragePath":null,"topicsIds":null,"date":1789136220000,"contentType":"news","url":"/news/2026/09/netflix-conductor-4-workflow","title":"Netflix Reworks Conductor for 420 Million Monthly Workflow Executions and 10X Larger Workflows","authorsList":["Leela Kumili"],"itemPath":"/news/2026/09/netflix-conductor-4-workflow","score":0},{"imageStoragePath":null,"topicsIds":null,"date":1789128120000,"contentType":"news","url":"/news/2026/09/tsgolint-oxlint-typescript","title":"tsgolint Reaches Stable v7, Bringing Go-Powered Type-Aware Linting to Oxlint","authorsList":["Daniel Curtis"],"itemPath":"/news/2026/09/tsgolint-oxlint-typescript","score":0},{"imageStoragePath":null,"topicsIds":null,"date":1789128000000,"contentType":"news","url":"/news/2026/09/terraform-aws-provider-6-62","title":"Terraform AWS Provider Continues Rapid Expansion as AWS Infrastructure Becomes More Complex","authorsList":["Craig Risi"],"itemPath":"/news/2026/09/terraform-aws-provider-6-62","score":0},{"imageStoragePath":"https://imgopt.infoq.com/fit-in/50x50/filters:quality(80)/presentations/form3-multicloud-architecture/en/smallimage/ross-mcfarlane-kevin-holditch-thumbnail-1788338652847.jpg","topicsIds":null,"date":1789124400000,"contentType":"presentations","url":"/presentations/form3-multicloud-architecture","title":"How To Run on Three Clouds at Once, and When Not To","authorsList":["Ross McFarlane","Kevin Holditch"],"itemPath":"/presentations/form3-multicloud-architecture","score":0},{"imageStoragePath":null,"topicsIds":null,"date":1789120800000,"contentType":"news","url":"/news/2026/09/linkedin-ai-multi-teacher","title":"How LinkedIn Trains AI Job Search 8x Faster with Multi-Teacher Distillation","authorsList":["Claudio Masolo"],"itemPath":"/news/2026/09/linkedin-ai-multi-teacher","score":0},{"imageStoragePath":null,"topicsIds":null,"date":1789103100000,"contentType":"news","url":"/news/2026/09/tinygo-devkit","title":"Advancing Embedded Go: Recoverable Panics, UEFI, Radio and Hardware Dev Kit","authorsList":["Olimpiu Pop"],"itemPath":"/news/2026/09/tinygo-devkit","score":0},{"imageStoragePath":null,"topicsIds":null,"date":1789062540000,"contentType":"news","url":"/news/2026/09/openai-gpt6-astra","title":"OpenAI Releases GPT-6 Astra for Coding and Computer Use","authorsList":["Daniel Dominguez"],"itemPath":"/news/2026/09/openai-gpt6-astra","score":0},{"imageStoragePath":null,"topicsIds":null,"date":1789036140000,"contentType":"news","url":"/news/2026/09/autonomous-software-teams","title":"Beyond Autonomous Teams in Software Product Development","authorsList":["Ben Linders"],"itemPath":"/news/2026/09/autonomous-software-teams","score":0},{"imageStoragePath":"https://imgopt.infoq.com/fit-in/50x50/filters:quality(80)/presentations/rust-refactoring/en/smallimage/lily-mara-thumbnail-1788338447565.jpeg","topicsIds":null,"date":1789032840000,"contentType":"presentations","url":"/presentations/rust-refactoring","title":"Accelerating Performance by Incrementally Integrating Rust Into Existing Codebase","authorsList":["Lily Mara"],"itemPath":"/presentations/rust-refactoring","score":0},{"imageStoragePath":"https://imgopt.infoq.com/fit-in/50x50/filters:quality(80)/articles/when-spec-driven-development-pays-off/en/smallimage/When-Spec-Driven-Development-Pays-Off-thumb-1788790605567.jpg","topicsIds":null,"date":1789030800000,"contentType":"articles","url":"/articles/when-spec-driven-development-pays-off","title":"When Spec-Driven Development Pays Off","authorsList":["Nitin Garg"],"itemPath":"/articles/when-spec-driven-development-pays-off","score":0},{"imageStoragePath":null,"topicsIds":null,"date":1789021620000,"contentType":"news","url":"/news/2026/09/http-query-method","title":"IETF Publishes RFC 10008, Adding the QUERY Method for Safe Requests with a Body","authorsList":["Daniel Curtis"],"itemPath":"/news/2026/09/http-query-method","score":0},{"imageStoragePath":null,"topicsIds":null,"date":1789016700000,"contentType":"news","url":"/news/2026/09/riscv-cpython","title":"CPython Officially Adds RISC-V Support as a Tier 3 Platform","authorsList":["Olimpiu Pop"],"itemPath":"/news/2026/09/riscv-cpython","score":0},{"imageStoragePath":null,"topicsIds":null,"date":1788976800000,"contentType":"news","url":"/news/2026/09/meta-organizational-agents","title":"Meta's Recipe for Building Agents as \\\"Organizational Second Brains\\\"","authorsList":["Sergio De Simone"],"itemPath":"/news/2026/09/meta-organizational-agents","score":0},{"imageStoragePath":"https://imgopt.infoq.com/fit-in/50x50/filters:quality(80)/presentations/unikraft-microvm-sandboxes-cloud-scaling/en/smallimage/felipe-huici-thumbnail-1787813506607.jpg","topicsIds":null,"date":1788951600000,"contentType":"presentations","url":"/presentations/unikraft-microvm-sandboxes-cloud-scaling","title":"Fixing the AI Infra Scale Problem by Stuffing 1M Sandboxes in a Single Server","authorsList":["Felipe Huici"],"itemPath":"/presentations/unikraft-microvm-sandboxes-cloud-scaling","score":0},{"imageStoragePath":null,"topicsIds":null,"date":1788944040000,"contentType":"news","url":"/news/2026/09/avd-hybrid-ga","title":"Azure Virtual Desktop Hybrid Reaches GA with Licensing Details Unpublished","authorsList":["Steef-Jan Wiggers"],"itemPath":"/news/2026/09/avd-hybrid-ga","score":0},{"imageStoragePath":null,"topicsIds":null,"date":1788933960000,"contentType":"news","url":"/news/2026/09/async-lua-neovim","title":"vim.async's Addition Modernizes Neovim’s Async Architecture for Better Stability","authorsList":["Olimpiu Pop"],"itemPath":"/news/2026/09/async-lua-neovim","score":0},{"imageStoragePath":"https://imgopt.infoq.com/fit-in/50x50/filters:quality(80)/presentations/ai-platform-engineering-roundtable/en/smallimage/thumb-1788861349861.jpg","topicsIds":null,"date":1788876000000,"contentType":"presentations","url":"/presentations/ai-platform-engineering-roundtable","title":"Platform Engineering in the Age of AI","authorsList":["Stéphane Di Cesare","Davide de Paolis","Stephen Cihak","Camila Macedo","Renato Losio"],"itemPath":"/presentations/ai-platform-engineering-roundtable","score":0},{"imageStoragePath":null,"topicsIds":null,"date":1788876000000,"contentType":"news","url":"/news/2026/09/hashicorp-packer-verification","title":"HashiCorp Packer 1.16 Adds Native SLSA Provenance Generation and Verification for Machine Images","authorsList":["Claudio Masolo"],"itemPath":"/news/2026/09/hashicorp-packer-verification","score":0}]";
|
||
var whitepaperVcrsJson = null;
|
||
var topicSponsorshipJson = "{"iconLink":"/url/f/23bf88df-99d8-4d65-9312-314d309fe792/","iconHref":"https://imgopt.infoq.com//fit-in/275x500/filters:quality(100)/filters:no_upscale()/sponsorship/topic/12605306-ee86-4a5c-bc22-ab8b965bfc4a/ModerneLogoMicrosite-1786453474094.png","id":"cf88a2a4-ed28-4f98-8ba5-388fb263682f"}";
|
||
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 Sponsors';
|
||
JSi18n.relatedRightbar_sponsoredBy='Sponsored by';
|
||
|
||
var topicIds = "1339,301,1311,63,3124,37,704,5774,1736,3,2952,1764,876,4001";
|
||
var communityIds = "2499,1893";
|
||
var company = "Moderne";
|
||
|
||
|
||
// this event is fired by frontend once all the necessary things have been done(mobile display, moving vcr boxes around when needed...)
|
||
var canStartTrackingCustomRightbar = false;
|
||
infoq.event.on('loaded', function(e) {
|
||
canStartTrackingCustomRightbar = true;
|
||
});
|
||
|
||
var intervalRightbar = setInterval(function() {
|
||
if (window.vcrsLoaded) {
|
||
clearInterval(intervalRightbar);
|
||
if(company != null && company != "") {
|
||
whitepaperVcrsJson = VCR.filterByCompany(company, window.vcrList);
|
||
} 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="VMuH4TkUXHIPBskd"/>
|
||
<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 = "Establishing a Scalable SRE Infrastructure Using Standardization and Short Feedback Loops",
|
||
contentPath = "/articles/scalable-SRE-standardization-feedback",
|
||
contentUUID = "3d149905-3603-439b-a640-0fb66d45efbd",
|
||
authorUserCSVIds = "126604354,95860478";
|
||
</script>
|
||
|
||
<script src="https://cdn.infoq.com/statics_s1_20260910111632/scripts/prism-build.js"></script>
|
||
<script src="https://cdn.infoq.com/statics_s1_20260910111632/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/2026/09/tinygo-devkit/" title="Advancing Embedded Go: Recoverable Panics, UEFI, Radio and Hardware Dev Kit">Advancing Embedded Go: Recoverable Panics, UEFI, Radio and Hardware Dev Kit</a></h5>
|
||
</li>
|
||
|
||
<li>
|
||
|
||
<h5><a class="t_all_footer_more-boxes-item" href="/news/2026/09/riscv-cpython/" title="CPython Officially Adds RISC-V Support as a Tier 3 Platform">CPython Officially Adds RISC-V Support as a Tier 3 Platform</a></h5>
|
||
</li>
|
||
|
||
<li>
|
||
|
||
<h5><a class="t_all_footer_more-boxes-item" href="/news/2026/09/async-lua-neovim/" title="vim.async's Addition Modernizes Neovim&rsquo;s Async Architecture for Better Stability">vim.async's Addition Modernizes Neovim’s Async Architecture for Better Stability</a></h5>
|
||
</li>
|
||
|
||
</ul>
|
||
</div>
|
||
</li>
|
||
|
||
<li class="architecture-design">
|
||
<div class="box__header">
|
||
|
||
<a class="t_all_footer_more-boxes-header" href="/architecture-design/">Architecture & Design</a>
|
||
</div>
|
||
<div class="box__content">
|
||
<ul class="no-style box__list small">
|
||
|
||
<li>
|
||
|
||
<h5><a class="t_all_footer_more-boxes-item" href="/news/2026/09/netflix-conductor-4-workflow/" title="Netflix Reworks Conductor for 420 Million Monthly Workflow Executions and 10X Larger Workflows">Netflix Reworks Conductor for 420 Million Monthly Workflow Executions and 10X Larger Workflows</a></h5>
|
||
</li>
|
||
|
||
<li>
|
||
|
||
<h5><a class="t_all_footer_more-boxes-item" href="/news/2026/09/meta-organizational-agents/" title="Meta's Recipe for Building Agents as &quot;Organizational Second Brains&quot;">Meta's Recipe for Building Agents as "Organizational Second Brains"</a></h5>
|
||
</li>
|
||
|
||
<li>
|
||
|
||
<h5><a class="t_all_footer_more-boxes-item" href="/news/2026/09/netflix-flink-autoscaler/" title="Netflix Moves toward Open Source Flink Autoscaler for 30,000+ Streaming Jobs">Netflix Moves toward Open Source Flink Autoscaler for 30,000+ Streaming Jobs</a></h5>
|
||
</li>
|
||
|
||
</ul>
|
||
</div>
|
||
</li>
|
||
|
||
<li class="culture-methods">
|
||
<div class="box__header">
|
||
|
||
<a class="t_all_footer_more-boxes-header" href="/culture-methods/">Culture & Methods</a>
|
||
</div>
|
||
<div class="box__content">
|
||
<ul class="no-style box__list small">
|
||
|
||
<li>
|
||
|
||
<h5><a class="t_all_footer_more-boxes-item" href="/news/2026/09/autonomous-software-teams/" title="Beyond Autonomous Teams in Software Product Development">Beyond Autonomous Teams in Software Product Development</a></h5>
|
||
</li>
|
||
|
||
<li>
|
||
|
||
<h5><a class="t_all_footer_more-boxes-item" href="/presentations/rust-refactoring/" title="Accelerating Performance by Incrementally Integrating Rust Into Existing Codebase">Accelerating Performance by Incrementally Integrating Rust Into Existing Codebase</a></h5>
|
||
</li>
|
||
|
||
<li>
|
||
|
||
<h5><a class="t_all_footer_more-boxes-item" href="/podcasts/personality-over-skillset/" title="Personality Over Skillset: How Adam Wachtel Builds Engineering Teams">Personality Over Skillset: How Adam Wachtel Builds Engineering Teams</a></h5>
|
||
</li>
|
||
|
||
</ul>
|
||
</div>
|
||
</li>
|
||
|
||
<li class="ai-ml-data-eng">
|
||
<div class="box__header">
|
||
|
||
<a class="t_all_footer_more-boxes-header" href="/ai-ml-data-eng/">AI, ML & Data Engineering</a>
|
||
</div>
|
||
<div class="box__content">
|
||
<ul class="no-style box__list small">
|
||
|
||
<li>
|
||
|
||
<h5><a class="t_all_footer_more-boxes-item" href="/news/2026/09/nvidia-pair-ai-task-router/" title="NVIDIA Personal AI Router Distributes AI Tasks across Local Compute">NVIDIA Personal AI Router Distributes AI Tasks across Local Compute</a></h5>
|
||
</li>
|
||
|
||
<li>
|
||
|
||
<h5><a class="t_all_footer_more-boxes-item" href="/news/2026/09/linkedin-ai-multi-teacher/" title="How LinkedIn Trains AI Job Search 8x Faster with Multi-Teacher Distillation">How LinkedIn Trains AI Job Search 8x Faster with Multi-Teacher Distillation</a></h5>
|
||
</li>
|
||
|
||
<li>
|
||
|
||
<h5><a class="t_all_footer_more-boxes-item" href="/news/2026/09/openai-gpt6-astra/" title="OpenAI Releases GPT-6 Astra for Coding and Computer Use">OpenAI Releases GPT-6 Astra for Coding and Computer Use</a></h5>
|
||
</li>
|
||
|
||
</ul>
|
||
</div>
|
||
</li>
|
||
|
||
<li class="devops">
|
||
<div class="box__header">
|
||
|
||
<a class="t_all_footer_more-boxes-header" href="/devops/">DevOps</a>
|
||
</div>
|
||
<div class="box__content">
|
||
<ul class="no-style box__list small">
|
||
|
||
<li>
|
||
|
||
<h5><a class="t_all_footer_more-boxes-item" href="/news/2026/09/terraform-aws-provider-6-62/" title="Terraform AWS Provider Continues Rapid Expansion as AWS Infrastructure Becomes More Complex">Terraform AWS Provider Continues Rapid Expansion as AWS Infrastructure Becomes More Complex</a></h5>
|
||
</li>
|
||
|
||
<li>
|
||
|
||
<h5><a class="t_all_footer_more-boxes-item" href="/news/2026/09/observability-ai-agents/" title="Session Traces and Cost Controls Help Diagnose AI Agent Failures">Session Traces and Cost Controls Help Diagnose AI Agent Failures</a></h5>
|
||
</li>
|
||
|
||
<li>
|
||
|
||
<h5><a class="t_all_footer_more-boxes-item" href="/news/2026/09/hashicorp-packer-verification/" title="HashiCorp Packer 1.16 Adds Native SLSA Provenance Generation and Verification for Machine Images">HashiCorp Packer 1.16 Adds Native SLSA Provenance Generation and Verification for Machine Images</a></h5>
|
||
</li>
|
||
|
||
</ul>
|
||
</div>
|
||
</li>
|
||
|
||
</ul>
|
||
|
||
|
||
|
||
</div>
|
||
</section>
|
||
<section data-nosnippet class="container section section__newsletter">
|
||
<div class="columns container__inner">
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<div class="newsletter" data-col="1/2"
|
||
|
||
|
||
|
||
id="infoq-nl"
|
||
|
||
|
||
|
||
|
||
>
|
||
<h2 class="heading">
|
||
<strong>The InfoQ</strong> Newsletter
|
||
</h2>
|
||
<p class="intro">A round-up of last week’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="VMuH4TkUXHIPBskd"/>
|
||
<input type="hidden" id="footerNewsletterType" name="footerNewsletterType" value="regular"/>
|
||
<input type="hidden" id="cmpi" name="cmpi" value="1"/>
|
||
</div>
|
||
<div class="hidden">
|
||
<span class="input__select field country">
|
||
<label for="input-simple-newsletter-country" class="label field__label">Select your country</label>
|
||
<select id="input-simple-newsletter-country" class="select field__input">
|
||
<option value="" class="select__option">Select a country</option>
|
||
</select>
|
||
<p class="input__message field__desc"></p>
|
||
</span>
|
||
<span class="input__checkbox field hidden">
|
||
<input type="checkbox" id="gdpr-consent-simple-nl">
|
||
<label for="gdpr-consent-simple-nl" class="label"><span>I consent to InfoQ.com handling my data as explained in this <a href="https://www.infoq.com/privacy-notice">Privacy Notice</a>.</span></label>
|
||
</span>
|
||
</div>
|
||
<input type="submit" role="button" value="Subscribe" class="button button__medium button__red" onclick="return footerNewsletter.validateEmail('Invalid email address');"/>
|
||
</form>
|
||
<p class="meta">
|
||
<a href="/privacy-notice/" target="_blank">We protect your privacy.</a>
|
||
</p>
|
||
|
||
<span class="success" style="display:none;" id="footerNewsletterMessage"></span>
|
||
</div>
|
||
<script type="text/javascript">
|
||
var footerNewsletter = new Newsletter('Enter your e-mail address',
|
||
'email-newsletter-infoq', 'footerNewsletterType','footerNewsletterMessage', 'fnt', 'input_email_h', 'input-simple-newsletter-country', 'cmpi','footer_except_homepage');
|
||
</script>
|
||
</div>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<div data-col="1/2" data-bg="certification" class="event__container" style="padding-right: 20px;">
|
||
<a href="https://certification.qconferences.com/?utm_source=infoq&utm_medium=referral&utm_campaign=largefooterad_onlinecohorts26" target="_blank" class="qconplus__events-slider" style="">
|
||
<div>
|
||
<div class="logo-certification"></div>
|
||
</div>
|
||
<p class="intro" style="margin-bottom: 0;color: white !important;">
|
||
<b>InfoQ Online Certification Programs</b>
|
||
<br>For Senior Engineers, Architects, and Technical Leaders
|
||
</p>
|
||
<ul style="margin-bottom: 0;">
|
||
<li style="color: white !important;"><b>Architect</b> with Luca Mezzalira | September 14</li>
|
||
<li style="color: white !important;"><b>Engineering Leadership</b> with Michelle Brush | September 18</li>
|
||
<li style="color: white !important;"><b>AI-Assisted Engineering</b> with Zichuan Xiong & Premanand Chandrasekaran | September 18</li>
|
||
<li style="color: white !important;"><b>AI Security & Privacy Engineering</b> with Katharine Jarmul | October 14</li>
|
||
</ul>
|
||
<br>
|
||
<p class="intro" style="margin-bottom: 0;color: white !important;">As your role becomes more senior, the work changes. You're no longer just implementing decisions; you're shaping the systems, trade-offs, and technical direction other teams depend on.<br>These 5-week online programs give you a structured way to work through real decisions from your current role with senior peers from other companies.</p>
|
||
<strong class="button button__green cta__button">RESERVE YOUR PLACE</strong>
|
||
<small style="color: white;"><br>Live online. 4 hours a week, for 5 weeks.</small>
|
||
</a>
|
||
</div>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
</div>
|
||
</section>
|
||
|
||
<section data-nosnippet class="section container footer__subfooter align__left">
|
||
<div class="container__inner columns">
|
||
<div data-col="1/4" class="columns footer__links-wrap">
|
||
<div class="footer__links">
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<a href="/" class="nuxt-link-exact-active active" title="Home">Home</a>
|
||
|
||
|
||
<a href="/reginit.action" class="emphasis" title="Create account">Create account</a>
|
||
<button aria-label="Log In" class="login" data-ref="mainLogin">Log In</button>
|
||
|
||
|
||
<a rel="noreferrer noopener" href="http://qconferences.com/" target="_blank" title="QCon Conferences">QCon Conferences</a>
|
||
<a rel="noreferrer noopener" href="https://events.infoq.com/" target="_blank">Events</a>
|
||
|
||
<a href="/write-for-infoq/" title="Write for InfoQ">Write for InfoQ</a>
|
||
<a href="/infoq-editors/" title="InfoQ Editors">InfoQ Editors</a>
|
||
<a href="/about-infoq/" title="About InfoQ">About InfoQ</a>
|
||
<a href="https://c4media.com/" target="_blank" title="About C4Media">About C4Media</a>
|
||
|
||
<a rel="noreferrer noopener" href="https://get.infoq.com/infoq-mediakit/" title="Media Kit" target="_blank">
|
||
Media Kit
|
||
</a>
|
||
<a href="https://devmarketing.c4media.com/?utm_source=infoq" title="InfoQ Developer Marketing Blog" target="_blank">InfoQ Developer Marketing Blog</a>
|
||
|
||
<a rel="noreferrer noopener" href="https://c4media.com/diversity" title="Diversity" target="_blank">Diversity</a>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
<div data-col="1/4" class="events__list">
|
||
<h4 class="heading footer__heading">Events</h4>
|
||
<ul class="qcons__list no-style">
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li><span class="icon event__type conference"></span>
|
||
<div class="qcon__detail">
|
||
<h5 class="heading">
|
||
<a rel="noreferrer noopener" href="https://certification.qconferences.com/architecture?utm_source=infoq&utm_medium=referral&utm_campaign=footer_onlinecohortarchitecture26" target="_blank">Online InfoQ Architect Certification</a>
|
||
</h5>
|
||
<span class="meta date">September 14, 2026</span>
|
||
</div>
|
||
</li>
|
||
<li><span class="icon event__type conference"></span>
|
||
<div class="qcon__detail">
|
||
<h5 class="heading">
|
||
<a rel="noreferrer noopener" href="https://certification.qconferences.com/ai-assisted-engineering?utm_source=infoq&utm_medium=referral&utm_campaign=footer_onlinecohortaiassistedengineering26" target="_blank">Online InfoQ AI-Assisted Engineering Certification</a>
|
||
</h5>
|
||
<span class="meta date">September 18, 2026</span>
|
||
</div>
|
||
</li>
|
||
<li><span class="icon event__type conference"></span>
|
||
<div class="qcon__detail">
|
||
<h5 class="heading">
|
||
<a rel="noreferrer noopener" href="https://certification.qconferences.com/ai-security-privacy?utm_source=infoq&utm_medium=referral&utm_campaign=footer_onlinecohortaisecurity26" target="_blank">Online InfoQ AI Security & Privacy Engineering Program</a>
|
||
</h5>
|
||
<span class="meta date">October 14, 2026</span>
|
||
</div>
|
||
</li>
|
||
<li><span class="icon event__type conference"></span>
|
||
<div class="qcon__detail">
|
||
<h5 class="heading">
|
||
<a rel="noreferrer noopener" href="https://qconsf.com/?utm_source=infoq&utm_medium=referral&utm_campaign=footer_qsf26" target="_blank">QCon San Francisco</a>
|
||
</h5>
|
||
<span class="meta date">November 16-20, 2026</span>
|
||
</div>
|
||
</li>
|
||
<li><span class="icon event__type conference"></span>
|
||
<div class="qcon__detail">
|
||
<h5 class="heading">
|
||
<a rel="noreferrer noopener" href="https://newyork.qcon.ai/?utm_source=infoq&utm_medium=referral&utm_campaign=footer_qainy26" target="_blank">QCon AI New York</a>
|
||
</h5>
|
||
<span class="meta date">December 15-16, 2026</span>
|
||
</div>
|
||
</li>
|
||
<li><span class="icon event__type conference"></span>
|
||
<div class="qcon__detail">
|
||
<h5 class="heading">
|
||
<a rel="noreferrer noopener" href="https://qconlondon.com/?utm_source=infoq&utm_medium=referral&utm_campaign=footer_qlondon27" target="_blank">QCon London 2027</a>
|
||
</h5>
|
||
<span class="meta date">April 13-16, 2027</span>
|
||
</div>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
<div data-col="1/4" class="footer__social-wrap">
|
||
<h4 class="heading text-left footer__heading">Follow us on </h4>
|
||
<div class="social__links columns social__links__row">
|
||
|
||
|
||
<a href="https://www.youtube.com/infoq"><span class="icon icon__large icon__social icon__youtube"></span><div><span class="social__count">Youtube</span><span class="social__followers">232K Followers</span></div></a>
|
||
<a href="http://www.linkedin.com/company/infoq"><span class="icon icon__large icon__social icon__linkedin"></span><div><span class="social__count">Linkedin</span><span class="social__followers">26K Followers</span></div></a>
|
||
<a rel="noreferrer noopener" href="https://www.instagram.com/infoqdotcom/" target="_blank"><span class="icon icon__large icon__social icon__instagram"></span><div><span class="social__count">Instagram</span><span class="social__followers">New</span></div></a>
|
||
<a href="#" id="footerNewsletterRssLink"><span class="icon icon__large icon__social icon__rss"></span><div><span class="social__count">RSS</span><span class="social__followers">19K Readers</span></div></a>
|
||
<a rel="noreferrer noopener" href="http://twitter.com/infoq" target="_blank"><span class="icon icon__large icon__social icon__twitter"></span><div><span class="social__count">X</span><span class="social__followers">57.1k Followers</span></div></a>
|
||
<a rel="noreferrer noopener" href="https://www.facebook.com/InfoQ-75911537320" target="_blank"><span class="icon icon__large icon__social icon__fb"></span><div><span class="social__count">Facebook</span><span class="social__followers">21K Likes</span></div></a>
|
||
<a rel="noreferrer noopener" href="https://bsky.app/profile/infoq.com" target="_blank"><span class="icon icon__large icon__social icon__bluesky"></span><div><span class="social__count">Bluesky</span><span class="social__followers">New</span></div></a>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
</div>
|
||
</div>
|
||
<div data-col="1/4" class="footer__stayin-wrap">
|
||
<h4 class="heading text-left footer__heading">Stay in the know</h4>
|
||
<div class="stayIn_panel_container">
|
||
<a href="/podcasts/" class="stayIn_panel" target="_blank" rel="noreferrer noopener"><span>The InfoQ Podcast</span><picture><source srcset="https://imgopt.infoq.com/eyJidWNrZXQiOiAiYXNzZXRzLmluZm9xLmNvbSIsImtleSI6ICJ3ZWIvZm9vdGVyL2luZm9xLXBvZGNhc3QuanBnIiwiZWRpdHMiOiB7IndlYnAiOiB7ICJxdWFsaXR5Ijo4MH19fQ==" type="image/webp"><source srcset="https://imgopt.infoq.com/eyJidWNrZXQiOiAiYXNzZXRzLmluZm9xLmNvbSIsImtleSI6ICJ3ZWIvZm9vdGVyL2luZm9xLXBvZGNhc3QuanBnIiwiZWRpdHMiOiB7ImpwZWciOiB7ICJxdWFsaXR5Ijo4MH19fQ==" type="image/webp"><img src="https://imgopt.infoq.com/eyJidWNrZXQiOiAiYXNzZXRzLmluZm9xLmNvbSIsImtleSI6ICJ3ZWIvZm9vdGVyL2luZm9xLXBvZGNhc3QuanBnIiwiZWRpdHMiOiB7ImpwZWciOiB7ICJxdWFsaXR5Ijo4MH19fQ==" loading="lazy" width="65px" height="64px" alt="The InfoQ Podcast Logo - Stay in the know"></picture></a>
|
||
<a href="/podcasts/#engineering_culture" class="stayIn_panel" target="_blank" rel="noreferrer noopener"><span>Engineering Culture Podcast</span><picture><source srcset="https://imgopt.infoq.com/eyJidWNrZXQiOiAiYXNzZXRzLmluZm9xLmNvbSIsImtleSI6ICJ3ZWIvZm9vdGVyL2luZm9xLXBvZGNhc3QtZW5naW5lZXJpbmctY3VsdHVyZS5qcGciLCJlZGl0cyI6IHsid2VicCI6IHsgInF1YWxpdHkiOjgwfX19" type="image/webp"><source srcset="https://imgopt.infoq.com/eyJidWNrZXQiOiAiYXNzZXRzLmluZm9xLmNvbSIsImtleSI6ICJ3ZWIvZm9vdGVyL2luZm9xLXBvZGNhc3QtZW5naW5lZXJpbmctY3VsdHVyZS5qcGciLCJlZGl0cyI6IHsianBlZyI6IHsgInF1YWxpdHkiOjgwfX19" type="image/webp"><img src="https://imgopt.infoq.com/eyJidWNrZXQiOiAiYXNzZXRzLmluZm9xLmNvbSIsImtleSI6ICJ3ZWIvZm9vdGVyL2luZm9xLXBvZGNhc3QtZW5naW5lZXJpbmctY3VsdHVyZS5qcGciLCJlZGl0cyI6IHsianBlZyI6IHsgInF1YWxpdHkiOjgwfX19" loading="lazy" width="65px" height="64px" alt="Engineering Culture Podcast Logo - Stay in the knoww"></picture></a>
|
||
<a href="/software-architects-newsletter/" class="stayIn_panel" target="_blank" rel="noreferrer noopener"><span>The Software Architects' Newsletter</span><picture><source srcset="https://imgopt.infoq.com/eyJidWNrZXQiOiAiYXNzZXRzLmluZm9xLmNvbSIsImtleSI6ICJ3ZWIvZm9vdGVyL2luZm9xLWFyY2hpdGVjdC1uZXdzbGV0dGVyLmpwZyIsImVkaXRzIjogeyJ3ZWJwIjogeyAicXVhbGl0eSI6ODB9fX0=" type="image/webp"><source srcset="https://imgopt.infoq.com/eyJidWNrZXQiOiAiYXNzZXRzLmluZm9xLmNvbSIsImtleSI6ICJ3ZWIvZm9vdGVyL2luZm9xLWFyY2hpdGVjdC1uZXdzbGV0dGVyLmpwZyIsImVkaXRzIjogeyJqcGVnIjogeyAicXVhbGl0eSI6ODB9fX0=" type="image/webp"><img src="https://imgopt.infoq.com/eyJidWNrZXQiOiAiYXNzZXRzLmluZm9xLmNvbSIsImtleSI6ICJ3ZWIvZm9vdGVyL2luZm9xLWFyY2hpdGVjdC1uZXdzbGV0dGVyLmpwZyIsImVkaXRzIjogeyJqcGVnIjogeyAicXVhbGl0eSI6ODB9fX0=" loading="lazy" width="65px" height="64px" alt="The Software Architects' Newsletter Logo - Stay in the know"></picture></a>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
</section>
|
||
<section data-nosnippet class="container footer__bottom section white align__left">
|
||
<div class="container__inner columns">
|
||
<div data-col="2/3" class="column">
|
||
<div class="footer__contact contact columns">
|
||
|
||
|
||
<span data-col="1/6">
|
||
General Feedback
|
||
<a href="mailto:feedback@infoq.com">feedback@infoq.com</a>
|
||
</span>
|
||
<span data-col="1/6">
|
||
Advertising
|
||
<a href="mailto:sales@infoq.com">sales@infoq.com</a>
|
||
</span>
|
||
<span data-col="1/6">
|
||
Editorial
|
||
<a href="mailto:editors@infoq.com">editors@infoq.com</a>
|
||
</span>
|
||
<span data-col="1/6">
|
||
Marketing
|
||
<a href="mailto:marketing@infoq.com">marketing@infoq.com</a>
|
||
</span>
|
||
|
||
</div>
|
||
</div>
|
||
<div class="column" data-col="1/3">
|
||
<p class="footer__more">
|
||
InfoQ.com and all content copyright © 2006-2026 C4Media Inc.<br/>
|
||
|
||
<a href="/privacy-notice" target="_blank">Privacy Notice</a>, <a href="/terms-and-conditions " target="_blank">Terms And Conditions</a>, <a href="/cookie-policy " target="_blank">Cookie Policy</a>
|
||
|
||
|
||
</p>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
</footer>
|
||
<!-- ####### SITE END ######### -->
|
||
|
||
</div>
|
||
|
||
|
||
|
||
<div class="intbt">
|
||
<a href="/int/bt/" title="bt">BT</a>
|
||
</div>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<script type="text/javascript">
|
||
$.when(humanDetectionAsync()).then(
|
||
function(status) {
|
||
$.getScript("/scripts/__hd.ifq?hdt=VMuH4TkUXHIPBskd&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 = "Establishing a Scalable SRE Infrastructure Using Standardization and Short Feedback Loops";
|
||
Bookmarks.apiUrl = '/widgets/bookmark.action';
|
||
Bookmarks.isContentBookmarked = "false";
|
||
</script>
|
||
<script type="text/javascript">
|
||
var $buoop = {vs:{i:6,f:1,o:10.1,s:1}}
|
||
$buoop.ol = window.onload;
|
||
$(document).ready(function() {
|
||
try {if ($buoop.ol) $buoop.ol();}catch (e) {}
|
||
var e = document.createElement("script");
|
||
e.setAttribute("type", "text/javascript");
|
||
e.setAttribute("src", "https://cdn.infoq.com/statics_s1_20260910111632/scripts/lib/browser-update-org/update.js");
|
||
document.body.appendChild(e);
|
||
});
|
||
</script>
|
||
|
||
|
||
|
||
|
||
<script>
|
||
!function(f,b,e,v,n,t,s)
|
||
{if(f.fbq)return;n=f.fbq=function(){n.callMethod?
|
||
n.callMethod.apply(n,arguments):n.queue.push(arguments)};
|
||
if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0';
|
||
n.queue=[];t=b.createElement(e);t.async=!0;
|
||
t.src=v;s=b.getElementsByTagName(e)[0];
|
||
s.parentNode.insertBefore(t,s)}(window,document,'script',
|
||
'https://connect.facebook.net/en_US/fbevents.js');
|
||
fbq('init', '842388869148196');
|
||
fbq('track', 'PageView');
|
||
</script>
|
||
<noscript>
|
||
<img height="1" width="1" src="https://www.facebook.com/tr?id=842388869148196&ev=PageView&noscript=1"/>
|
||
</noscript>
|
||
|
||
|
||
|
||
<script type='text/javascript'>
|
||
try {
|
||
mixpanel.track('page viewed', {
|
||
'page name' : document.title,
|
||
'url' : window.location.pathname
|
||
});
|
||
}
|
||
catch(err) {
|
||
}
|
||
</script>
|
||
</body>
|
||
</html>
|
||
<!-- s1 -->
|