Files
nexus/sreweekly/articles/372/03-reckoning-with-the-harm-we-do-in-search-of-restorative-just-culture-in.html
2026-09-12 17:23:01 +08:00

2839 lines
183 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
<!-- Google Optimize Anti-flicker snippet (recommended) -->
<style>.async-hide { opacity: 0 !important} </style>
<style>.promo{background:#222528;position:fixed;z-index:1001!important;left:0;top:0;right:0;max-height:48px;min-height:48px;padding-top:0!important;padding-bottom:0!important}.promo,.promo p{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.promo p{font-size:.8125rem;line-height:1rem;color:#fff;margin-bottom:0;margin-top:0;margin:0 auto;display:-webkit-box;display:-ms-flexbox;display:flex;font-weight:700}@media only screen and (max-width:650px){.promo p{font-size:.6875rem}}.promo span{overflow:hidden;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical}.promo a{color:#fff!important;text-decoration:underline!important}.promo a.btn{background:#d0021b;padding:7px 20px;text-decoration:none!important;font-weight:700;margin-left:10px;margin-right:10px;white-space:nowrap;border-radius:5px}@media only screen and (max-width:650px){.promo a.btn{font-size:.6875rem;padding:7px 10px}}.promo.container{padding-top:8px;padding-bottom:8px}@media only screen and (min-width:1050px){.promo.container{padding-top:0;padding-bottom:0}}.promo .actions{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.promo .actions__left{-ms-flex-preferred-size:100%;flex-basis:100%;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.promo .actions__right{-ms-flex-preferred-size:40px;flex-basis:40px;margin-top:0;margin-bottom:0;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.promo.hidden{display:none}.promo.show{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.promo.show .container__inner{-webkit-box-flex:1;-ms-flex:1;flex:1}.promo.fixed{position:fixed}.promo.show+header.header{margin-top:48px}.header{background:#fff;-webkit-box-shadow:0 1px 0 #dde2e5;box-shadow:0 1px 0 #dde2e5}.header .actions__left,.header__bottom__events{max-width:100%!important;margin:0}.header .header__events-all{margin:0;display:-webkit-box;display:-ms-flexbox;display:flex;position:relative}.header .header__events-all .header__event-slot{-webkit-box-flex:1;-ms-flex:1 100%;flex:1 100%;border-right:1px solid #dde2e5;margin-top:3px;margin-bottom:3px;padding-left:15px;text-align:left;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding-right:5px;min-width:300px}.header .header__events-all .header__event-slot:hover{text-decoration:none!important}.header .header__events-all .header__event-slot img{min-width:40px;height:40px}.header .header__events-all .header__event-slot div{margin-left:10px}.header .header__events-all .header__event-slot span{font-weight:700!important;font-size:.75rem;margin-bottom:0!important;margin-top:0;display:block;line-height:1.125rem;text-align:left}.header .header__events-all .header__event-slot p{font-weight:400;font-size:.625rem;line-height:130%!important;color:#495057!important;margin:0}@media only screen and (min-width:1050px){.header .header__events-all .header__event-slot p{font-size:.625rem}}.header .header__events-all .header__event-slot:first-child{padding-left:0}.header .header__events-all .header__event-slot:last-child{padding-right:0;border-right:0}@media only screen and (min-width:1050px){.header__bottom,.header__middle,.header__top{position:relative;white-space:nowrap}}.header__top{padding:10px 0}@media only screen and (min-width:800px){.header__top{padding:5px 0}}.header__bottom{padding:5px 0;z-index:29;max-width:100%}.header__bottom a{font-size:.8125rem}.header__bottom .trending{margin-left:0;margin-right:0}.header__bottom .actions{-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.header__bottom .actions__left{max-width:calc(100% + 8px)}@media only screen and (min-width:800px){.header__bottom .actions__left{max-width:calc(100% + 24px)}}.header__bottom .actions__right{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;display:none}@media only screen and (min-width:1050px){.header__bottom .actions__right{display:-webkit-box;display:-ms-flexbox;display:flex}}.header__middle{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap}@media only screen and (min-width:1050px){.header__middle{-ms-flex-wrap:nowrap;flex-wrap:nowrap}}.header__top .actions__left{-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-line-pack:center;align-content:center}@media only screen and (min-width:1050px){.header__top .actions__right{max-width:430px}}.no-style.header__nav li:nth-child(3){font-weight:700}.no-style.header__nav li:nth-child(3) a{color:#0e5ef1!important}.header__bottom__events::after{background:-webkit-gradient(linear,left top,right top,color-stop(0,rgba(255,255,255,0)),to(#fff));background:linear-gradient(90deg,rgba(255,255,255,0) 0,#fff 100%);content:'';position:absolute;height:60px;right:10px;width:25px}@media only screen and (min-width:1050px){.header__bottom__events::after{display:none}}.contribute-link{font-weight:400;font-size:.6875rem;color:#000!important;position:relative;padding-left:10px}.contribute-link:hover{color:#00791d!important;text-decoration:none!important}.contribute-link::before{content:'';width:1px;height:12px;position:absolute;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);background:rgba(0,0,0,.1);left:-1px}.my-0{margin-top:0!important;margin-bottom:0!important}.header__desc.my-0{margin-left:0}.header__bottom__events .actions__left{max-width:100%!important;overflow-x:scroll;-ms-overflow-style:none;scrollbar-width:none;display:block;scroll-behavior:smooth;min-width:100%}.header__bottom__events .actions__left::-webkit-scrollbar{display:none}.header__bottom__events .actions__left:-webkit-scrollbar-thumb{background:#fff}.logo{line-height:1rem}.header{position:relative;z-index:41;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.header .input:focus,.header input[type=password]:focus,.header input[type=text]:focus{border:1px solid #00791d}.header a:not(.button):not(.login__action):not(.active){text-decoration:none;color:#222}.header a:not(.button):not(.login__action):not(.active):hover{text-decoration:underline;color:#222}.header__items{display:none;-ms-flex-wrap:wrap;flex-wrap:wrap}@media only screen and (min-width:1050px){.header__items{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.header__items nav{position:relative;background:0 0;padding:0;left:0;top:0;line-height:inherit;display:block;-webkit-box-shadow:none;box-shadow:none;max-width:100%;max-height:80px}}.header__items>div{width:100%;margin-bottom:32px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-flow:column nowrap;flex-flow:column nowrap}@media only screen and (min-width:552px){.header__items>div:not(:nth-last-child(-n+2)){margin-bottom:32px}}@media only screen and (min-width:552px) and (max-width:1050px){.header__items>div{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;-ms-flex-preferred-size:calc(99.7% * 1/2 - (32px - 32px * 1/2));flex-basis:calc(99.7% * 1/2 - (32px - 32px * 1/2));max-width:calc(99.7% * 1/2 - (32px - 32px * 1/2));width:calc(99.7% * 1/2 - (32px - 32px * 1/2))}.header__items>div:nth-child(1n){margin-right:32px;margin-left:0}.header__items>div:last-child{margin-right:0}.header__items>div:nth-child(2n){margin-right:0;margin-left:auto}}@media only screen and (min-width:800px) and (max-width:1050px){.header__items>div{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;-ms-flex-preferred-size:calc(99.7% * 1/4 - (32px - 32px * 1/4));flex-basis:calc(99.7% * 1/4 - (32px - 32px * 1/4));max-width:calc(99.7% * 1/4 - (32px - 32px * 1/4));width:calc(99.7% * 1/4 - (32px - 32px * 1/4))}.header__items>div:nth-child(1n){margin-right:32px;margin-left:0}.header__items>div:last-child{margin-right:0}.header__items>div:nth-child(4n){margin-right:0;margin-left:auto}}@media only screen and (min-width:1050px){.header__items>div{margin-bottom:0!important;margin-right:0!important;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}}.header__items .language__switcher{display:none}.header__items .language__switcher .li-nav.active>a,.header__items .language__switcher>li.active>a{color:#fff!important}.header__items .language__switcher .li-nav.active>a:hover,.header__items .language__switcher>li.active>a:hover{color:#fff!important;background:#0e5ef1}.header__items .language__switcher .li-nav:hover>a,.header__items .language__switcher>li:hover>a{color:#fff}.header+main{display:block;min-height:210px;-webkit-transition:margin .15s ease;transition:margin .15s ease;margin-top:0!important}.header--hide .header+main{margin-top:50px}.header--hide .header__toggle{opacity:0;top:20px;visibility:hidden}.header--hide .header__logo{max-height:0}.header--hide .header__middle,.header--hide .header__top{max-height:0;overflow:hidden;padding-top:0;padding-bottom:0;border-color:transparent}.header--hide .header__bottom .vue-portal-target{top:3px;right:0;bottom:auto;left:auto;position:absolute}.header__middle,.header__top{-webkit-transition:all .15s ease;transition:all .15s ease}.header__middle{border-bottom:1px solid rgba(0,0,0,.1);z-index:33}.header__middle .vue-portal-target{width:100%}@media only screen and (min-width:1050px){.header__middle .vue-portal-target{display:none}}@media only screen and (min-width:1050px){.header__middle{line-height:5.75rem;text-align:left;padding:0;z-index:30}.header__middle .widget__heading{display:none}}.header__top>.actions__left{display:none}@media only screen and (min-width:1050px){.header__top>.actions__left{display:-webkit-box;display:-ms-flexbox;display:flex}}.header__top>.actions__right{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;margin-right:0;margin-top:0;margin-bottom:0;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.header__top>.actions__right .dropdown__holder{width:calc(100vw - 16px);max-height:80vh}@media only screen and (min-width:600px){.header__top>.actions__right .dropdown__holder{width:auto}}.header__top>.actions__right>*{margin:0}.header__top>.actions__right .search{display:none}@media only screen and (min-width:1050px){.header__top>.actions__right>*{display:-webkit-box;display:-ms-flexbox;display:flex;white-space:nowrap}.header__top>.actions__right .search{display:block}}.header__top .user__login{display:block}.header__top .user__login>.button,.header__top .user__login>button{border-top-right-radius:0;border-bottom-right-radius:0}@media only screen and (min-width:1050px){.header__top{position:relative;right:auto;width:100%}}.header__logo{max-width:165px;position:absolute;top:8px;overflow:hidden;-webkit-transition:all .1s ease;transition:all .1s ease;z-index:32;line-height:2.25rem;height:36px;width:100px;margin-left:50px;-ms-flex-preferred-size:190px;flex-basis:190px}@media only screen and (min-width:800px){.header__logo{top:4px}}@media only screen and (min-width:1050px){.header__logo{position:relative;top:0;overflow:visible;margin-right:20px;margin-left:0;line-height:3.125rem;height:50px}.header__logo>*{width:165px}}@media only screen and (min-width:1280px){.header__logo{margin-right:30px}}.header__desc,.header__more>button{text-transform:capitalize;color:#666;letter-spacing:0;font-size:0;font-weight:400;line-height:1.5rem;vertical-align:top;font-smoothing:antialiased;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI Variable","Segoe UI",system-ui,ui-sans-serif,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";-webkit-transition:font-size .15s ease-in-out;transition:font-size .15s ease-in-out}@media only screen and (min-width:1050px){.header__desc,.header__more>button{font-size:.6875rem}}.header__desc{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;position:relative;width:auto}.header__topics{white-space:nowrap;float:right;position:relative}.header__topics *{display:inline-block;vertical-align:top}.header__topics a{font-size:.8125rem}@media only screen and (min-width:1050px){.header__topics{float:none}}.header__more{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;vertical-align:top}.header__more:before{left:-12px}.header__more:after,.header__more:before{content:'';width:1px;height:12px;position:absolute;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);background:rgba(0,0,0,.1)}.header__more:after{right:-12px}.header__more:hover{cursor:pointer;color:rgba(0,0,0,.75)}.header__user{display:inline-block;vertical-align:top;white-space:nowrap;margin-left:8px}@media only screen and (min-width:1050px){.header__user{margin-left:0}}.header__user>div{display:inline-block;vertical-align:top}.header__user-nav a:not(.button){text-transform:uppercase;font-size:.75rem;font-weight:600}.header__user-nav a:not(.button):not(.active){opacity:.5}.header__user-nav a:not(.button):not(.active):hover{opacity:.75}.header__user-nav a:not(.button):hover{text-decoration:none}.header__user-nav a:not(.button).active{color:#222;cursor:default;text-decoration:none}.header__user-nav a:not(.button):before{margin-right:0}.header__user-nav a:not(.button):not(:last-child){margin-right:16px}@media only screen and (min-width:1050px){.header__user-nav a:not(.button):not(:last-child){margin-right:32px}}@media only screen and (min-width:1050px){.header__user-nav+.header__topics{margin-left:56px}}.header__search{display:none;vertical-align:top;margin-right:0}@media only screen and (min-width:1050px){.header__search{display:inline-block}}.header__search,.header__user{line-height:inherit}.header__nav{border-bottom:1px solid rgba(0,0,0,.1)}@media only screen and (min-width:800px){.header__nav{border-bottom:0}}.header__nav .button{margin-left:0}.header__nav .button__more{margin-right:20px}.header__nav .li-nav,.header__nav>li{-webkit-transition:all .15s ease;transition:all .15s ease}@media only screen and (min-width:1050px){.header__nav .li-nav,.header__nav>li{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;vertical-align:middle;position:static;border:none;min-height:65px}.header__nav .li-nav:hover.has--subnav .nav .li-nav,.header__nav .li-nav:hover.has--subnav .nav>li,.header__nav>li:hover.has--subnav .nav .li-nav,.header__nav>li:hover.has--subnav .nav>li{white-space:normal}.header__nav .li-nav:hover.has--subnav .nav__subnav,.header__nav>li:hover.has--subnav .nav__subnav{opacity:1;top:100%;visibility:visible;-webkit-transition-delay:.25s;transition-delay:.25s}.header__nav .li-nav:hover.has--subnav .nav__category,.header__nav>li:hover.has--subnav .nav__category{width:100%}.header__nav .li-nav:hover.has--subnav .nav__category:after,.header__nav .li-nav:hover.has--subnav .nav__category:before,.header__nav>li:hover.has--subnav .nav__category:after,.header__nav>li:hover.has--subnav .nav__category:before{-webkit-transition-delay:.25s;transition-delay:.25s;opacity:1}}@media only screen and (min-width:1080px){.header__nav .li-nav:not(:last-child),.header__nav>li:not(:last-child){margin-right:23px;margin-left:23px}}@media only screen and (min-width:1280px){.header__nav .li-nav:not(:last-child),.header__nav>li:not(:last-child){margin-right:23px;margin-left:23px}}@media only screen and (min-width:1338px){.header__nav .li-nav:not(:last-child),.header__nav>li:not(:last-child){margin-right:23px;margin-left:23px}}.header__nav .li-nav>a,.header__nav>li>a{font-size:.875rem;line-height:1.5rem;padding:12px 0;color:#000;display:inline-block;max-width:100%;position:relative;z-index:61;white-space:normal}@media only screen and (min-width:1050px){.header__nav .li-nav>a,.header__nav>li>a{padding:8px 0 0;font-weight:700}}.header__nav .li-nav>a:after,.header__nav .li-nav>a:before,.header__nav>li>a:after,.header__nav>li>a:before{content:'';position:absolute;bottom:-1px;left:50%;width:0;height:0;opacity:0;-webkit-transform:translateX(-50%);transform:translateX(-50%);border-style:solid;border-width:0 5px 5px 5px;-webkit-transition:opacity .15s ease-in-out;transition:opacity .15s ease-in-out;border-color:transparent transparent #fff transparent}.header__nav .li-nav>a:before,.header__nav>li>a:before{left:50%;bottom:0;border-width:0 6px 6px 6px;border-color:transparent transparent #f5f7f8 transparent}@media only screen and (min-width:1050px){.header__nav .li-nav>a,.header__nav>li>a{font-size:1rem}}@media only screen and (min-width:1800px){.header__nav .li-nav>a,.header__nav>li>a{font-size:1.125rem}}.header--open{overflow:hidden}@media only screen and (min-width:600px){.header--open{overflow:visible}}.header--open .content-items{max-height:215px;margin:12px 0 24px}.header--open .search{margin-top:16px;display:block}.header--open .header__toggle:before{z-index:10}.header--open .header__toggle>span:nth-child(1){top:50%;-webkit-transform:rotate(45deg);transform:rotate(45deg)}.header--open .header__toggle>span:nth-child(2){opacity:0}.header--open .header__toggle>span:nth-child(3){top:50%;-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}.header--open .header__items,.header--open .header__items .language__switcher{display:-webkit-box;display:-ms-flexbox;display:flex}.header--open .header__top{z-index:100;position:absolute;left:0;right:8px;background:#fff}@media only screen and (min-width:800px){.header--open .header__top{right:20px}}.header--open .header__top .search{display:none}.header--open .header__logo{z-index:101}.header--open .header__middle{padding-top:60px}.header--open .header__bottom{display:none}.header--open .header__container{max-height:90vh;overflow-x:hidden;overflow-y:auto}@media only screen and (min-width:1050px){.header--open .header__container{overflow:visible}}.header .subnav{position:absolute;-webkit-box-shadow:0 5px 25px 1px rgba(0,0,0,.15);box-shadow:0 5px 25px 1px rgba(0,0,0,.15);background:#fff;visibility:hidden;line-height:1.75rem;max-width:100%;width:100%;left:0;opacity:0;overflow:hidden;border:1px solid #f5f7f8;border-radius:2px;-webkit-transition:all .15s ease-in-out;transition:all .15s ease-in-out;top:105%;z-index:60;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}.header .subnav .subnav__categories{-webkit-box-flex:0;-ms-flex:0 1 280px;flex:0 1 280px;padding:24px 0;background:#f5f7f8;margin-right:0!important}.header .subnav .subnav__categories>li{display:block;font-size:.9375rem;padding:2px 48px 2px 24px}.header .subnav .subnav__categories>li a{display:block;font-weight:700}.header .subnav .subnav__categories>li:hover{background:#e1e1e1}.header .subnav .subnav__heading{margin-bottom:20px}.header .subnav .subnav__content{position:relative;-ms-flex-item-align:start;align-self:flex-start;padding:24px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap}@media only screen and (min-width:1050px){.header .subnav .subnav__content{padding-left:32px;padding-right:32px;margin:0 auto;-webkit-box-flex:1;-ms-flex:1 1 600px;flex:1 1 600px}}.header .subnav .subnav__content .heading__container{-ms-flex-preferred-size:100%;flex-basis:100%}.header .subnav .subnav__content:before{content:'';position:absolute;left:0;top:0;bottom:-100%;width:1px;background:rgba(0,0,0,.1)}.languagesEdition .active{font-weight:700}.header__more.dropdown:after{content:'';display:inline-block;vertical-align:middle;-ms-flex-item-align:center;-ms-grid-row-align:center;align-self:center;background-repeat:no-repeat;background-position:center;margin-bottom:2px;width:7px;height:7px;-webkit-transition:-webkit-transform .15s ease;transition:-webkit-transform .15s ease;transition:transform .15s ease;transition:transform .15s ease,-webkit-transform .15s ease;background-color:#fff!important;background-size:contain}.header__more.dropdown button{color:#000!important;margin-right:-20px;padding-right:20px;z-index:1000}.header__more.dropdown .dropdown__holder{width:165px}.header__more.dropdown .dropdown__content{padding:13px;padding-top:5px;padding-bottom:5px}.header__more.dropdown .languagesEdition li{border-bottom:1px solid #e6e6e6}.header__more.dropdown .languagesEdition li:last-child{border:0}.logo__data{display:none;color:#666;font-size:.6875rem}@media only screen and (min-width:1050px){.logo__data{display:block;line-height:.8125rem}}.container{padding-left:12px;padding-right:12px;margin:0 auto;min-width:320px;-webkit-transition:padding .15s ease-in-out;transition:padding .15s ease-in-out}@media only screen and (min-width:600px){.container{padding-left:16px;padding-right:16px}}@media only screen and (min-width:800px){.container{padding-left:20px;padding-right:20px}}@media only screen and (min-width:1250px){.container{padding-left:60px;padding-right:60px}}@media only screen and (min-width:1400px){.container{padding-left:20px;padding-right:20px}}.container.white{background:#fff}.container__inner{max-width:1290px;margin:0 auto;-webkit-transition:max-width .15s ease-out;transition:max-width .15s ease-out}.search{display:block;position:relative;z-index:33;width:100%;max-width:100%;margin:0}.search:before{position:absolute;top:50%;right:24px;-webkit-transform:translateY(-50%);transform:translateY(-50%);margin-right:0;z-index:34}.search__bar{display:block;border-radius:2px;position:relative;z-index:33}.search__bar #search{margin-bottom:0;max-width:100%;background:#fff}.search__go{top:50%;right:0;bottom:0;left:auto;position:absolute;-webkit-transform:translateY(-50%);transform:translateY(-50%);z-index:32;-webkit-appearance:none;-moz-appearance:none;appearance:none;width:36px;height:36px;line-height:2.25rem;-webkit-box-shadow:none;box-shadow:none;display:block;background:0 0;border:0;font-size:0}@media only screen and (min-width:600px){.search__go{z-index:35}}.header #search,.search__go:hover{cursor:pointer}.header #search{height:36px;position:relative;max-width:100%;background-color:#f5f7f8!important}@media only screen and (min-width:600px){.header #search{font-size:.8125rem;min-width:165px;max-width:100%;opacity:1}}.header #search:hover{cursor:auto}@media only screen and (min-width:1050px){.header #search{margin-left:auto;border-top-right-radius:0;border-bottom-right-radius:0;border-right:0}.header #search:focus{min-width:215px}}.header #search:focus{cursor:auto}.header #search .field__desc{display:none}.header #searchForm{width:100%;margin-top:8px}.header #searchForm:before{right:8px}@media only screen and (min-width:600px){.header #searchForm{margin-top:16px}}@media only screen and (min-width:1050px){.header #searchForm{margin-top:0}}</style>
<script>(function(a,s,y,n,c,h,i,d,e){s.className+=' '+y;h.start=1*new Date;
h.end=i=function(){s.className=s.className.replace(RegExp(' ?'+y),'')};
(a[n]=a[n]||[]).hide=h;setTimeout(function(){i();h.end=null},c);h.timeout=c;
})(window,document.documentElement,'async-hide','dataLayer',4000,
{'GTM-W9GJ5DL':true});</script>
<script type="text/javascript">
var loggedIn = false;
if (loggedIn) {
var userCountryId = '';
}
</script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
//CookieControl tool recomendation
// Call the default command before gtag.js or Tag Manager runs to
// adjust how the tags operate when they run. Modify the defaults
// per your business requirements and prior consent granted/denied, e.g.:
gtag('consent', 'default', {
'ad_storage': 'denied',
'ad_user_data': 'denied',
'ad_personalization': 'denied',
'analytics_storage': 'denied',
wait_for_update: 500
});
gtag('set', 'ads_data_redaction', true);
gtag('set', 'url_passthrough', true);
if((typeof loggedIn != "undefined") && loggedIn){
window.dataLayer.push({'logged_in': 'true'});
} else {
window.dataLayer.push({'logged_in': 'false'});
}
window.dataLayer.push({'show_queryz': ''});
gtag('config', 'G-VMVPD4D2JY');
</script>
<!-- Google Tag Manager -->
<script>
var gtmProfile="GTM-W9GJ5DL";
(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
})(window,document,'script','dataLayer', gtmProfile);</script>
<!-- End Google Tag Manager -->
<title>Reckoning with the Harm We Do: in Search of Restorative Just Culture in Software and Web Operations - InfoQ</title>
<link rel="canonical" href="https://www.infoq.com/presentations/blame-accountability/"/>
<link rel="alternate" href="https://www.infoq.com/presentations/blame-accountability/" hreflang="en"/>
<link rel="alternate" href="https://www.infoq.com/presentations/blame-accountability/" hreflang="x-default" />
<meta http-equiv="pragma" content="no-cache" />
<meta http-equiv="cache-control" content="private,no-cache,no-store,must-revalidate" />
<meta http-equiv="expires" content="0" />
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<meta name="copyright" content="&copy; 2006 C4Media" />
<meta name="google-site-verification" content="0qInQx_1WYOeIIbxnh7DnXlw1XOxNgAYakO2k4GhNnY" />
<meta name="msapplication-TileColor" content="#ffffff"/>
<meta name="msapplication-TileImage" content="/styles/static/images/logo/logo.jpg"/>
<meta property="wb:webmaster" content="3eac1729a8bbe046" />
<meta content="width=device-width,initial-scale=1" name="viewport">
<meta http-equiv="X-UA-Compatible" content="IE=10, IE=edge">
<link rel="stylesheet" type="text/css" media="screen" href="https://cdn.infoq.com/statics_s1_20260910111632/styles/style.css"/>
<link rel="stylesheet" type="text/css" media="print" href="https://cdn.infoq.com/statics_s1_20260910111632/styles/print.css"/>
<link rel="preload" type="text/css" href="https://cdn.infoq.com/statics_s1_20260910111632/styles/style_en.css" as="style" onload="this.onload=null;this.rel='stylesheet'">
<link rel="preload" href="https://cdn.infoq.com/statics_s1_20260910111632/styles/icons.css" as="style" onload="this.onload=null;this.rel='stylesheet'">
<link rel="preload" type="text/css" media="screen" href="https://cdn.infoq.com/statics_s1_20260910111632/styles/style_extra.css" as="style" onload="this.onload=null;this.rel='stylesheet'">
<noscript>
<link rel="stylesheet" type="text/css" href="https://cdn.infoq.com/statics_s1_20260910111632/styles/style_en.css"/>
<link rel="stylesheet" href="https://cdn.infoq.com/statics_s1_20260910111632/styles/icons.css">
<link rel="stylesheet" type="text/css" media="screen" href="https://cdn.infoq.com/statics_s1_20260910111632/styles/style_extra.css"/>
</noscript>
<link rel="stylesheet" type="text/css" href="https://cdn.infoq.com/statics_s1_20260910111632/styles/fonts/font.css"/>
<link rel="shortcut icon" href="https://cdn.infoq.com/statics_s1_20260910111632/favicon.ico" type="image/x-icon" />
<link rel="apple-touch-icon" href="https://cdn.infoq.com/statics_s1_20260910111632/apple-touch-icon.png"/>
<script type="text/javascript">
var device='desktop';
var InfoQConstants = {};
InfoQConstants.language = 'en';
InfoQConstants.countryCode = '';
InfoQConstants.scp = 'eyJTdGF0ZW1lbnQiOiBbeyJSZXNvdXJjZSI6IioiLCJDb25kaXRpb24iOnsiRGF0ZUxlc3NUaGFuIjp7IkFXUzpFcG9jaFRpbWUiOjE3ODkxOTkxNzh9LCJJcEFkZHJlc3MiOnsiQVdTOlNvdXJjZUlwIjoiMC4wLjAuMC8wIn19fV19';
InfoQConstants.scs = 'fnBTUv0kbTDJvq4q5HQJ4995Q-kKf2WVhqhiMInTISILAFfGxkWJFIxlRqcsvfrWl-75YRZQ9cu3XaRFeyBIBhvYtLgTySwjNYVGWLmwaDNfUYBuGhoYtYbOz03DGpthCpHXeVXILDPUQgBjVFEx-wPgywRYO745G3bbdYB1MWg_';
InfoQConstants.sck = 'APKAIMZVI7QH4C5YKH6Q';
InfoQConstants.scd = '.infoq.com';
InfoQConstants.sct = '7200';
InfoQConstants.pageUrl = (typeof window.location != 'undefined' && window.location && typeof window.location.href != 'undefined' && window.location.href) ? window.location.href : "URL_UNAVAILABLE";
InfoQConstants.cet='sPy3KoqV8lIMRdpY';
InfoQConstants.userDetectedCountryCode = 'US';
InfoQConstants.bpadb = '3PoHelVdDuUlnG1iFrPq';
</script>
<script type="text/javascript" src="https://cdn.infoq.com/statics_s1_20260910111632/scripts/combinedJs.min.js"></script>
<script type="text/javascript">
var JSi18n = JSi18n || {}; // define only if not already defined
JSi18n.error='Error';
JSi18n.login_unverifiedAccount='Unverified account';
JSi18n.contentSummary_showPresentations_1='';
JSi18n.contentSummary_showPresentations_2='';
JSi18n.contentSummary_showPresentations_3='';
JSi18n.contentSummary_showInterviews_1='';
JSi18n.contentSummary_showInterviews_2='';
JSi18n.contentSummary_showInterviews_3='';
JSi18n.contentSummary_showMinibooks_1='';
JSi18n.contentSummary_showMinibooks_2='';
JSi18n.login_sendingRequest='Sending request ...';
JSi18n.bookmark_saved='<q>&nbsp;&nbsp;&nbsp;Saved&nbsp;&nbsp;&nbsp;&nbsp;</q>';
JSi18n.bookmark_error='<q style=color:black;>&nbsp;&nbsp;&nbsp;Error&nbsp;&nbsp;&nbsp;&nbsp;</q>';
JSi18n.categoryManagement_showpopup_viewAllLink_viewAllPrefix='View All';
JSi18n.categoryManagement_showpopup_viewAllLink_viewAllSuffix='';
JSi18n.categoryManagement_showpopup_includeExcludeLink_Exclude='Exclude';
JSi18n.categoryManagement_showpopup_includeExcludeLink_Include='Include';
JSi18n.login_invalid_email='Please specify a valid email';
JSi18n.login_email_not_found = 'No user found with that email';
JSi18n.content_datetime_format='MMM dd, yyyy';
// used by frontend
JSi18n.FE = {
labels: {
follow: "Follow",
followTopic: "Follow Topic",
unfollow: "Unfollow",
unfollowTopic: "Unfollow Topic",
following: "Following",
followers: "Followers",
like: "Like",
liked: "Liked",
authors: "Peers",
users : "Users",
topics: "Topics",
hide: "Hide Item",
hidden: "%s was hidden on your profile page.",
undo: "Undo",
showLess: "Show less",
showMore: "Show more",
moreAuthors: "And %s more",
bookmarked: "Content Bookmarked",
unbookmarked: "Content Unbookmarked",
characterLimit: "Characters Remaining"
}
}
var usersInPage = JSON.parse('[{\"id\":\"62671158\",\"ref\":\"author-Monica-Beckwith\",\"url\":\"\/profile\/Monica-Beckwith\",\"followedByCurrentUser\":false,\"minibio\":\"\",\"name\":\"Monica Beckwith\",\"bio\":\"\",\"followers\":1833,\"imgSrc\":\"https:\/\/cdn.infoq.com\/statics_s1_20260910111632\/images\/profiles\/QhDv7pXEUK1sdLsYArFmnLxecH4rYhAc.jpg\"},{\"id\":\"45723890\",\"ref\":\"author-Rags-Srinivas\",\"url\":\"\/profile\/Rags-Srinivas\",\"followedByCurrentUser\":false,\"minibio\":\"\",\"name\":\"Rags Srinivas\",\"bio\":\"\",\"followers\":356,\"imgSrc\":\"https:\/\/cdn.infoq.com\/statics_s1_20260910111632\/images\/profiles\/t4nyfgw1THkp4wMZ9EZ59RGJx8Hf9Rk8.jpg\"},{\"id\":\"87551248\",\"ref\":\"author-Steef~Jan-Wiggers\",\"url\":\"\/profile\/Steef~Jan-Wiggers\",\"followedByCurrentUser\":false,\"minibio\":\"Cloud Queue Lead Editor | Domain Architect | Cloud Expert\",\"name\":\"Steef-Jan Wiggers\",\"bio\":\"\",\"followers\":895,\"imgSrc\":\"https:\/\/cdn.infoq.com\/statics_s1_20260910111632\/images\/profiles\/BhZx03k3Hj0pZVXmTzGqItwZxtJ06oIb.jpg\"},{\"id\":\"80977916\",\"ref\":\"author-Thomas-Betts\",\"url\":\"\/profile\/Thomas-Betts\",\"followedByCurrentUser\":false,\"minibio\":\"Senior Laureate Application Architect at Blackbaud\",\"name\":\"Thomas Betts\",\"bio\":\"\",\"followers\":1171,\"imgSrc\":\"https:\/\/cdn.infoq.com\/statics_s1_20260910111632\/images\/profiles\/pSqI6HrU3k9rmmVjwS34OHG0bOMYiE6a.jpg\"},{\"id\":\"72028228\",\"ref\":\"author-Sergio-De-Simone\",\"url\":\"\/profile\/Sergio-De-Simone\",\"followedByCurrentUser\":false,\"minibio\":\"\",\"name\":\"Sergio De Simone\",\"bio\":\"\",\"followers\":777,\"imgSrc\":\"https:\/\/cdn.infoq.com\/statics_s1_20260910111632\/images\/profiles\/NovciOoQOAYWqYqRQBFo97SuMm0xbUiC.jpg\"},{\"id\":\"126467140\",\"ref\":\"author-Renato-Losio\",\"url\":\"\/profile\/Renato-Losio\",\"followedByCurrentUser\":false,\"minibio\":\"Cloud Expert | AWS Data Hero \",\"name\":\"Renato Losio\",\"bio\":\"\",\"followers\":913,\"imgSrc\":\"https:\/\/cdn.infoq.com\/statics_s1_20260910111632\/images\/profiles\/ptroF8HdI2vWXm0NDaKeS0JdiPxMOAra.jpg\"},{\"id\":\"126464202\",\"ref\":\"author-Johan-Janssen\",\"url\":\"\/profile\/Johan-Janssen\",\"followedByCurrentUser\":false,\"minibio\":\"Architect at ASML\",\"name\":\"Johan Janssen\",\"bio\":\"\",\"followers\":536,\"imgSrc\":\"https:\/\/cdn.infoq.com\/statics_s1_20260910111632\/images\/profiles\/Fb4eZ0mtvMf6MhsmBIhsUVueV4xAs2FD.jpg\"},{\"id\":\"39485652\",\"ref\":\"author-Daniel-Bryant\",\"url\":\"\/profile\/Daniel-Bryant\",\"followedByCurrentUser\":false,\"minibio\":\"InfoQ News Manager | Building Platforms at Syntasso\",\"name\":\"Daniel Bryant\",\"bio\":\"\",\"followers\":2751,\"imgSrc\":\"https:\/\/cdn.infoq.com\/statics_s1_20260910111632\/images\/profiles\/tSe5dczMaSGtRUm18VkTR2tcF4W3SogA.jpg\"},{\"id\":\"63268344\",\"ref\":\"author-Chris-Swan\",\"url\":\"\/profile\/Chris-Swan\",\"followedByCurrentUser\":false,\"minibio\":\"Engineer, Atsign\",\"name\":\"Chris Swan\",\"bio\":\"\",\"followers\":1873,\"imgSrc\":\"https:\/\/cdn.infoq.com\/statics_s1_20260910111632\/images\/profiles\/8PE76nOujWAoCM8yqLn9Hfv2HqW3VlIP.jpg\"},{\"id\":\"4927376\",\"ref\":\"author-Karsten-Silz\",\"url\":\"\/profile\/Karsten-Silz\",\"followedByCurrentUser\":false,\"minibio\":\"Full-Stack Java Developer\",\"name\":\"Karsten Silz\",\"bio\":\"\",\"followers\":399,\"imgSrc\":\"https:\/\/cdn.infoq.com\/statics_s1_20260910111632\/images\/profiles\/p6zmOdOcqXiRj09iiZNeDZap7f0IglQW.jpg\"},{\"id\":\"343314\",\"ref\":\"author-Jonathan-Allen\",\"url\":\"\/profile\/Jonathan-Allen\",\"followedByCurrentUser\":false,\"minibio\":\"Software Architect\",\"name\":\"Jonathan Allen\",\"bio\":\"\",\"followers\":1833,\"imgSrc\":\"https:\/\/cdn.infoq.com\/statics_s1_20260910111632\/images\/profiles\/Wk_C09_mzwK23YkTkKMXResJv3LKUN5D.jpg\"},{\"id\":\"114725059\",\"ref\":\"author-Holly-Cummins\",\"url\":\"\/profile\/Holly-Cummins\",\"followedByCurrentUser\":false,\"minibio\":\"Senior Technical Staff Member, IBM\",\"name\":\"Holly Cummins\",\"bio\":\"\",\"followers\":615,\"imgSrc\":\"https:\/\/cdn.infoq.com\/statics_s1_20260910111632\/images\/profiles\/cRsuGlFgKyGmGfEHvafpMO63CxbrEm22.jpg\"},{\"id\":\"126440612\",\"ref\":\"author-Jessica-DeVita\",\"url\":\"\/profile\/Jessica-DeVita\",\"followedByCurrentUser\":false,\"minibio\":\"\",\"name\":\"Jessica DeVita\",\"bio\":\"\",\"followers\":8,\"imgSrc\":\"\"}]');
var topicsInPage = JSON.parse('[{\"name\":\"Architecture & Design\",\"id\":\"6816\",\"url\":\"\/architecture-design\",\"followers\":10383,\"followedByCurrentUser\":false},{\"name\":\"Culture & Methods\",\"id\":\"6817\",\"url\":\"\/culture-methods\",\"followers\":3994,\"followedByCurrentUser\":false},{\"name\":\"Culture\",\"id\":\"6243\",\"url\":\"\/Culture\",\"followers\":47,\"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\":\"Machine Learning\",\"id\":\"5449\",\"url\":\"\/MachineLearning\",\"followers\":14751,\"followedByCurrentUser\":false},{\"name\":\"Microservices\",\"id\":\"15274\",\"url\":\"\/microservices\",\"followers\":22348,\"followedByCurrentUser\":false},{\"name\":\"AI, ML & Data Engineering\",\"id\":\"16690\",\"url\":\"\/ai-ml-data-eng\",\"followers\":6077,\"followedByCurrentUser\":false},{\"name\":\"QCon Plus November 2022\",\"id\":\"18387\",\"url\":\"\/qcon-plus-november-2022\",\"followers\":3,\"followedByCurrentUser\":false},{\"name\":\"Team Leader\",\"id\":\"6548\",\"url\":\"\/teamlead\",\"followers\":9,\"followedByCurrentUser\":false},{\"name\":\"QCon Software Development Conference\",\"id\":\"597\",\"url\":\"\/qcon\",\"followers\":261,\"followedByCurrentUser\":false},{\"name\":\"QCon Plus\",\"id\":\"18198\",\"url\":\"\/qcon-plus\",\"followers\":11,\"followedByCurrentUser\":false},{\"name\":\"Java9\",\"id\":\"7097\",\"url\":\"\/Java9\",\"followers\":5540,\"followedByCurrentUser\":false},{\"name\":\"DevOps\",\"id\":\"6043\",\"url\":\"\/Devops\",\"followers\":5131,\"followedByCurrentUser\":false},{\"name\":\"Leadership\",\"id\":\"29\",\"url\":\"\/leadership\",\"followers\":423,\"followedByCurrentUser\":false},{\"name\":\"Reactive Programming\",\"id\":\"15453\",\"url\":\"\/reactive-programming\",\"followers\":12430,\"followedByCurrentUser\":false},{\"name\":\"Development\",\"id\":\"6815\",\"url\":\"\/development\",\"followers\":4154,\"followedByCurrentUser\":false}]');
var userContentLikesInPage = [];
var userCommentsLikesInPage = [];
var currentUserId = 2;
</script>
<!-- Latest Version -->
<script src="https://cc.cdn.civiccomputing.com/9/cookieControl-9.x.min.js" type="text/javascript"></script>
<script>
const config = {
apiKey: '8910ea974a96ffb6f927952b4ae9b9b0cc3e5973',
product: 'PRO_MULTISITE',
// general settings
consentCookieExpiry: 90,
encodeCookie: true,
sameSiteCookie: true, // if false, cookie set as SameSite=None;secure;
sameSiteValue: ';secure', // either 'Strict', 'Lax', or 'None'
subDomains: true,
initialState: 'notify', // 'notify','top','box' require pro licence
notifyOnce: false,
setInnerHTML: true,
//layout settings
layout: 'slideout',
position: 'left',
theme: 'light',
acceptButton: true,
rejectButton: true,
closeOnGlobalChange: true,
closeStyle: 'icon',
toggleType: 'slider',
notifyDismissButton: true,
settingsStyle: 'link',
excludedCountries: ['US'],
/*accessibility: {
disableSiteScrolling: true,
},*/
statement: {
description: 'For more detailed information about the cookies we use, see our',
name: 'Cookie Policy',
url: 'https://www.infoq.com/cookie-policy',
updated: '01/01/2024',
},
// cookies starting from 'cookie_expire' are from live.infoq.com but since we use the same tool on the same domain we need to specify those too so
// that infoq.com cookieControl does not delete live.infoq.com cookies(also infoq.com cookies have been specified in live.infoq.com cookieControl configs)
necessaryCookies: ['RegUserCookie', 'UserCookie', 'IdpCookie', 'ConversionTrackingV2_','PSAdialog','*P13NWN*','topbarSurvey','__bkm','JSESSIONID','mp_','_mixpanel','CloudFront-Key-Pair-Id','CloudFront-Policy','CloudFront-Signature','cookie_expire','discount_promo_closed','discount_promo_code','discount_promo_submitted','exit_survey_popup','referrer_popup','voting_popup_*','AWSALB','AWSALBCORS','aws-waf-token','iq_sub_preview'],
optionalCookies: [
{
name: 'analytics',
label: 'Analytics',
description: 'Analytical cookies help us to improve our website by collecting and reporting information on its usage.',
cookies: ['_ga', '_ga*', '_gid', '_gat', '__utma', '__utmt', '__utmb', '__utmc', '__utmz', '__utmv'],
onAccept: function(){
gtag('consent', 'update', {'analytics_storage': 'granted'});
},
onRevoke: function(){
gtag('consent', 'update', {'analytics_storage': 'denied'});
}
},
{
name: 'marketing',
label: 'Advertising',
description: 'We use advertising cookies to display advertisements to you for our products.',
onAccept: function(){
gtag('consent', 'update', {'ad_storage': 'granted', 'ad_personalization': 'granted', 'ad_user_data': 'granted'});
},
onRevoke: function(){
gtag('consent', 'update', {'ad_storage': 'denied', 'ad_personalization': 'denied', 'ad_user_data': 'denied'});
}
}
],
text : {
// main preference panels
title: '<h3>Our use of cookies</h3>',
intro: 'We use necessary cookies to make our site work. Functional cookies help enhance the performance and functionality of the site. '+
'We\'d also like to set analytics cookies to help us improve your experience by measuring how you use the site. '+
'These will be set only if you accept. ',
acceptSettings: 'I Accept',
rejectSettings: 'I Do Not Accept',
necessaryTitle : '<h3>Necessary Cookies</h3>',
necessaryDescription : 'Necessary cookies enable core functionality ' +
'such as page navigation and access to secure areas. '+
'The website cannot function properly without '+
'these cookies, and can only be disabled by changing '+
'your browser preferences.',
closeLabel: 'Close Cookie Control',
cornerButton: 'Set cookie preferences',
// main preference panel controls
on: 'On',
off : 'Off',
thirdPartyTitle : 'Some cookies require your attention',
thirdPartyDescription : 'Consent for the following cookies could not be '+
'automatically revoked. Please follow the link(s) '+
'below to opt out manually.',
// notification panels (only accessible for pro licences)
notifyTitle : 'Your choice regarding cookies on this site',
notifyDescription : 'We use cookies to optimise site functionality and '+
'give you the best possible experience.',
accept : 'I Accept',
reject: 'I Do Not Accept',
settings : 'Settings',
},
branding : {
removeAbout: true,
},
};
// do not load this for local envs only. for testing on local envs remove/modify this condition
if(InfoQConstants.pageUrl.indexOf('local')===-1){
CookieControl.load( config );
}
</script>
<script type="application/ld+json">
{
"@context": "http://schema.org",
"@type": "NewsArticle",
"mainEntityOfPage": {
"@type": "WebPage",
"@id": "https://www.infoq.com/presentations/blame-accountability/"
},
"headline": "Reckoning with the Harm We Do: in Search of Restorative Just Culture in Software and Web Operations",
"image": ["https://res.infoq.com/presentations/blame-accountability/en/mediumimage/jessica-de-vita-medium-1683196247794.jpg"
],
"datePublished": "2023-05-12T16:14:00+0000",
"dateModified": "2023-05-12T16:14:00+0000",
"author": [
{
"@type": "Person",
"name": "Jessica DeVita",
"url": "https://www.infoq.com/profile/Jessica-DeVita/"
}
],
"publisher": {
"@type": "Organization",
"name": "InfoQ",
"logo": {
"@type": "ImageObject",
"url": "https://assets.infoq.com/resources/en/logo_scrubber_big_4_3.jpg"
}
},
"description": "Jessica DeVita discusses the difference between blame and accountability and building a Restorative Just Culture.",
"video":
{
"@type": "VideoObject",
"name": "Reckoning with the Harm We Do: in Search of Restorative Just Culture in Software and Web Operations",
"description": "Jessica DeVita discusses the difference between blame and accountability and building a Restorative Just Culture.",
"thumbnailUrl": [
"https://res.infoq.com/presentations/blame-accountability/en/mediumimage/jessica-de-vita-medium-1683196247794.jpg"
],
"uploadDate": "2023-05-12T16:14:00+0000",
"duration": "PT49M31S",
"contentUrl": "https://videog.infoq.com/presentations/22-nov-reckoningharm.mp4"
},
"isAccessibleForFree": "False",
"hasPart":
{
"@type": "WebPageElement",
"isAccessibleForFree": "False",
"cssSelector" : ".paywallPdf"
}
}
</script>
<meta name="ifq:pageType" content="PRESENTATION_PAGE"/>
<script type="text/javascript">
InfoQConstants.pageType = 'PRESENTATION_PAGE';
</script>
<meta property="og:type" content="website" />
<meta property="og:image" content="https://res.infoq.com/presentations/blame-accountability/en/card_header_image/twitter_card+%285%29-1683196247794.jpg"/>
<meta property="twitter:image" content="https://res.infoq.com/presentations/blame-accountability/en/card_header_image/twitter_card+%285%29-1683196247794.jpg"/>
<meta property="og:title" content="Reckoning with the Harm We Do: in Search of Restorative Just Culture in Software and Web Operations "/>
<meta property="og:description" content="Jessica DeVita discusses the difference between blame and accountability and building a Restorative Just Culture." />
<meta property="og:site_name" content="InfoQ"/>
<meta property="og:url" content="https://www.infoq.com/presentations/blame-accountability/"/>
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:title" content="Reckoning with the Harm We Do: in Search of Restorative Just Culture in Software and Web Operations "/>
<meta name="twitter:description" content="Jessica DeVita discusses the difference between blame and accountability and building a Restorative Just Culture." />
<link rel="image_src" href="https://res.infoq.com/presentations/blame-accountability/en/mediumimage/jessica-de-vita-medium-1683196247794.jpg"/>
<meta name="keywords" content="blame accountability,Culture &amp; Methods,QCon Plus November 2022,QCon Plus,Leadership,Culture,QCon Software Development Conference,Team Leader,Agile,"/>
<meta name="description" content="Jessica DeVita discusses the difference between blame and accountability and building a Restorative Just Culture."/>
<meta name="tprox" content="1683908040000" />
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/swfobject/2.1/swfobject.js"></script>
<script type="text/javascript">
var slides = new Array('https://imgopt.infoq.com/fit-in/1288x0/filters:quality(80)/presentations/blame-accountability/en/slides/Jes-1683907149886.JPG'),
TIMES = new Array(0,2971),
EXPRESSINSTALL_SWF = 'https://cdn.infoq.com/statics_s1_20260910111632/scripts/video/flash/expressinstall.swf',
SVMPLAYER_SWF = 'https://cdn.infoq.com/statics_s1_20260910111632/scripts/video/flash/svmplayer.swf',
isWideScreen = true,
// i18n text for the to full view/minimize button
i18nFullScreen = 'Full',
i18nMinimize = 'Minimize',
demoTimings = '5,2970';
var playerSplash = 'https://cdn.infoq.com/statics_s1_20260910111632/styles/static/images/logo/logo_scrubber_16_9.jpg';
var vhf = 'cnRtcGU6Ly92aWRlb2YuaW5mb3EuY29tL2NmeC9zdC8=';
var jsclassref = 'cHJlc2VudGF0aW9ucy8yMi1ub3YtcmVja29uaW5naGFybS5tcDQ=';
</script>
<script type="text/javascript" src="https://cdn.infoq.com/statics_s1_20260910111632/scripts/video/player/PlayerPresentation_mobile.js"></script>
<script type="text/javascript">
$(document).ready(function() {
init();
});
</script>
<script type='text/javascript' src='https://cdn.infoq.com/statics_s1_20260910111632/scripts/video/videoPlayercombinedJsPresentation.js'></script>
<script type='text/javascript' src='https://cdn.infoq.com/statics_s1_20260910111632/scripts/video/PresentationUI.js'></script>
<script type='text/javascript' src='https://cdn.infoq.com/statics_s1_20260910111632/scripts/ui/jquery.tipsy.js'></script>
<link rel="stylesheet" href="https://cdn.infoq.com/statics_s1_20260910111632/styles/tipsy.css" type="text/css" />
<script type="text/javascript">
P.s = 'https://videoh.infoq.com/presentations/22-nov-reckoningharm.mp4';
</script>
<script type="text/javascript" src="https://cdn.infoq.com/statics_s1_20260910111632/scripts/relatedVcr.min.js"></script>
<script type="application/javascript">
var communityIds = "2499";
var topicIds = "6896,6724,26,2064,593,2309,3";
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="sPy3KoqV8lIMRdpY"/>
<input type="hidden" id="dataCollectNewsletterType" name="dataCollectNewsletterType" value="regular"/>
<input type="hidden" id="cmpi_d" name="cmpi_d" value="4"/>
</div>
<div class="hidden">
<span class="input__select field country">
<label for="input-dataCollect-newsletter-country" class="label field__label">Select your country</label>
<select id="input-dataCollect-newsletter-country" class="select field__input">
<option value="" class="select__option">Select a country</option>
</select>
<p class="input__message field__desc"></p>
</span>
<span class="input__checkbox field hidden">
<input type="checkbox" id="gdpr-consent-campaign">
<label for="gdpr-consent-campaign" class="label"><span>I consent to InfoQ.com handling my data as explained in this <a href="https://www.infoq.com/privacy-notice">Privacy Notice</a>.</span></label>
</span>
</div>
<input type="submit" role="button" value="Subscribe" class="button button__medium button__red" onclick="return dataCollectNewsletter.validateEmail('Invalid email address');"/>
</form>
<p class="meta">
<a href="/privacy-notice/" target="_blank">We protect your privacy.</a>
</p>
<span class="success" style="display:none;" id="dataCollectNewsletterMessage"></span>
</div>
</div>
<div class="actions__right">
<button aria-label="Close" class="close closeBox button button__unstyled button__icon icon icon__close-black icon--only">Close</button>
</div>
</div>
</div>
</section>
<script type="text/javascript">
var dataCollectNewsletter = new Newsletter('Enter your e-mail address',
'email-dataCollectnewsletter-infoq', 'dataCollectNewsletterType','dataCollectNewsletterMessage', 'fnt_d', 'input_email_h_d', 'input-dataCollect-newsletter-country', 'cmpi_d','popup_all_pages');
</script>
<div class="infoq" id="infoq">
<!-- ####### SITE START ######### -->
<section class="section container promo hidden">
<div class="container__inner">
<div class="actions">
<div class="actions__left">
<p>
<span>Online InfoQ AI-Assisted Engineering Certification (Oct 19): Your agent got faster. Did your code get better?</span>
<a class="btn" href="/url/pb/b23b7e3c-f8b5-4f46-bbf3-cddf2aeb2a9e/" target="_blank" rel="nofollow">
Register Now
</a>
</p>
</div>
<div class="actions__right">
<button aria-label="Close"
class="close button button__unstyled button__icon icon icon__close-white icon--only close-top-promo">Close
</button>
</div>
</div>
</div>
</section>
<header class="header">
<button aria-label="Toggle Navigation" tabindex="0" class="burger header__toggle button">Toggle Navigation <span></span><span></span><span></span></button>
<div class="header__container container">
<div class="container__inner">
<div data-nosnippet class="actions header__top">
<div class="actions__left">
<p class="header__desc my-0">
Facilitating the Spread of Knowledge and Innovation in Professional Software Development
</p>
<div class="button__dropdown dropdown header__more my-0 dropdown__center">
<button aria-label="English edition" class="button button__unstyled button__small">English edition </button>
<div class="dropdown__holder">
<!---->
<div class="dropdown__content">
<ul class="no-style dropdown__nav languagesEdition">
<li class="active"><a href="#" onclick="return false;">English edition</a></li>
<li><a href="https://www.infoq.cn">Chinese edition</a></li>
<li><a href="/jp/">Japanese edition</a></li>
<li><a href="/fr/">French edition</a></li>
</ul>
</div>
<!---->
</div>
</div>
<a class="my-0 contribute-link" role="button" href="/write-for-infoq/" title="Write for InfoQ">
Write for InfoQ
</a>
</div>
<div class="actions__right">
<div>
<form id="searchForm" name="search-form" action="/search.action" enctype="multipart/form-data" class="search icon__search icon icon__green">
<div class="field search__bar input__text input__no-label input__small">
<label for="search" class="label field__label">Search</label>
<input name="queryString" type="text" id="search" value="" placeholder="Search" class="input field__input">
<input type="hidden" name="page" value="1"/>
<input type="hidden" size="15" name="searchOrder">
</div>
<input value="Search" type="submit" class="search__go">
</form>
</div>
<div class="action_button__group">
<a href="/reginit.action?" onclick="return UserActions_Login.addLoginInfo(this);" class="button button__green button__small">Register</a>
<a href="/social/keycloakLogin.action?fl=login" onclick="return UserActions_Login.addLoginInfo(this);" class="button button__small button__outline">Sign in</a>
</div>
<div class="modal_auth_required">
<div class="modal_auth_required__actions">
<h2 class="h2">Unlock the full InfoQ experience</h2>
<p>Unlock the full InfoQ experience by logging in! Stay updated with your favorite authors and topics, engage with content, and download exclusive resources.</p>
<a href="/social/keycloakLogin.action?fl=login" onclick="return UserActions_Login.addLoginInfo(this);" class="button button__has-transition">Log In</a>
<div class="separator"><span>or</span></div>
<h3 class="h3">Don't have an InfoQ account?</h3>
<a href="/reginit.action?" onclick="return UserActions_Login.addLoginInfo(this);" class="button__outline button__has-transition">Register</a>
</div>
<div class="modal_auth_required__content">
<ul class="newsletter__features">
<li><strong>Stay updated on topics and peers that matter to you</strong>Receive instant alerts on the latest insights and trends.</li>
<li><strong>Quickly access free resources for continuous learning</strong>Minibooks, videos with transcripts, and training materials.</li>
<li><strong>Save articles and read at anytime</strong>Bookmark articles to read whenever youre ready.</li>
</ul>
</div>
<form id="login-form" data-vv-scope="login" class="login__form form" action="#" data-gtm-form-interact-id="0">
<input type="hidden" id="loginWidgetOrigin" name="loginWidgetOrigin" value="mainLogin">
<input type="hidden" name="fromP13N" id="isP13n" value="">
<input type="hidden" name="fromP13NId" id="p13n-id" value="">
<input type="hidden" name="fromP13NType" id="p13n-type" value="">
</form>
</div>
</div>
</div>
<div class="header__middle">
<div class="logo header__logo">
<a href="/" class="logo__symbol active">
Logo - Back to homepage
</a>
</div>
<div class="content-items">
<a href="/news/" class="icon icon__news">News</a>
<a href="/articles/" class="icon icon__articles">Articles</a>
<a href="/presentations/" class="icon icon__presentations">Presentations</a>
<a href="/podcasts/" class="icon icon__podcasts">Podcasts</a>
<a href="/minibooks/" class="icon icon__guides">Guides</a>
</div>
<div class="header__items columns">
<div>
<h3 class="widget__heading">Topics</h3>
<nav class="nav header__nav topics" data-trk-ref="header_personas">
<div class="has--subnav li-nav">
<a href="/development/" title="Development" class="nav__category">Development</a>
<div class="nav__subnav subnav">
<ul class="subnav__categories no-style">
<li><a href="/java/" title="Java">Java</a></li>
<li><a href="/kotlin/" title="Kotlin">Kotlin</a></li>
<li><a href="/dotnet/" title=".Net">.Net</a></li>
<li><a href="/c_sharp/" title="C#">C#</a></li>
<li><a href="/swift/" title="Swift">Swift</a></li>
<li><a href="/golang/" title="Go">Go</a></li>
<li><a href="/rust/" title="Rust">Rust</a></li>
<li><a href="/javascript/" title="JavaScript">JavaScript</a></li>
</ul>
<div class="subnav__content" data-id="6815">
<div class="heading__container actions">
<div class="actions__left">
<h3 class="heading section__heading">Featured in Development</h3>
</div>
</div>
<ul data-size="large" data-horizontal="true" data-tax="" taxonomy="articles" class="cards no-style">
<li>
<div class="card__content">
<div class="card__data">
<h4 class="card__title">
<a href="/presentations/solopreneur-journey">A Solopreneur's Journey: From Engineer to Puzzle Master and Storyteller</a>
</h4>
<p class="card__excerpt">Joe Cassavaugh shares his journey from software engineer to successful solopreneur with a $2M+ indie franchise. He explains how he scaled production to 10 games in 5 years, adopted Unity to boost velocity 4-6x, optimized content pipelines, and leveraged refactoring patterns. He discusses key trade-offs between corporate engineering and solopreneurship for senior devs and leaders.</p>
<div class="card__footer"></div>
</div>
<a href="/presentations/solopreneur-journey" class="card__header">
<img loading="lazy" alt="A Solopreneur's Journey: From Engineer to Puzzle Master and Storyteller" src="https://imgopt.infoq.com/fit-in/100x100/filters:quality(80)/presentations/solopreneur-journey/en/smallimage/joe-cassavaugh-thumbnail-1788338336404.jpg" class="card__image"/>
</a>
</div>
</li>
</ul>
<a href="/development/" class="button__more button button__large button__arrow arrow__right">All in development</a>
</div>
</div>
</div>
<div class="has--subnav li-nav">
<a href="/architecture-design/" title="Architecture &amp; Design" class="nav__category">Architecture &amp; Design</a>
<div class="nav__subnav subnav">
<ul class="subnav__categories no-style">
<li><a href="/architecture/" title="Architecture">Architecture</a></li>
<li><a href="/enterprise-architecture/" title="Enterprise Architecture">Enterprise Architecture</a></li>
<li><a href="/performance-scalability/" title="Scalability/Performance">Scalability/Performance</a></li>
<li><a href="/design/" title="Design">Design</a></li>
<li><a href="/Case_Study/" title="Case Studies">Case Studies</a></li>
<li><a href="/microservices/" title="Microservices">Microservices</a></li>
<li><a href="/servicemesh/" title="Service Mesh">Service Mesh</a></li>
<li><a href="/DesignPattern/" title="Patterns">Patterns</a></li>
<li><a href="/Security/" title="Security">Security</a></li>
</ul>
<div class="subnav__content" data-id="6816">
<div class="heading__container actions">
<div class="actions__left">
<h3 class="heading section__heading">Featured in Architecture &amp; Design</h3>
</div>
</div>
<ul data-size="large" data-horizontal="true" data-tax="" taxonomy="articles" class="cards no-style">
<li>
<div class="card__content">
<div class="card__data">
<h4 class="card__title">
<a href="/minibooks/next-gen-architecture-ai-era">Next-Gen Architecture Playbook: Insights and Patterns for the AI Era</a>
</h4>
<p class="card__excerpt">This eMag examines how architects can lead with clarity in a rapidly evolving engineering world, distilling industry insights into field-tested practices for teams. Together, these stories reveal a core theme: the technology leader’s role is expanding from building systems to guiding how tech behaves and learns, while enabling engineers and organizations to bring out their best.</p>
<div class="card__footer"></div>
</div>
<a href="/minibooks/next-gen-architecture-ai-era" class="card__header">
<img loading="lazy" alt="Next-Gen Architecture Playbook: Insights and Patterns for the AI Era" src="https://imgopt.infoq.com/fit-in/100x100/filters:quality(80)/minibooks/next-gen-architecture-ai-era/en/smallimage/thumb-image-emag-next-gen-architecture-playbook-1787922032442.jpg" class="card__image"/>
</a>
</div>
</li>
</ul>
<a href="/architecture-design/" class="button__more button button__large button__arrow arrow__right">All in architecture-design</a>
</div>
</div>
</div>
<div class="has--subnav li-nav">
<a href="/ai-ml-data-eng/" title="AI Infrastructure" class="nav__category">AI Infrastructure</a>
<div class="nav__subnav subnav">
<ul class="subnav__categories no-style">
<li><a href="/bigdata/" title="Big Data">Big Data</a></li>
<li><a href="/machinelearning/" title="Machine Learning">Machine Learning</a></li>
<li><a href="/nosql/" title="NoSQL">NoSQL</a></li>
<li><a href="/database/" title="Database">Database</a></li>
<li><a href="/data-analytics/" title="Data Analytics">Data Analytics</a></li>
<li><a href="/streaming/" title="Streaming">Streaming</a></li>
</ul>
<div class="subnav__content" data-id="16690">
<div class="heading__container actions">
<div class="actions__left">
<h3 class="heading section__heading">Featured in AI, ML &amp; Data Engineering</h3>
</div>
</div>
<ul data-size="large" data-horizontal="true" data-tax="" taxonomy="articles" class="cards no-style">
<li>
<div class="card__content">
<div class="card__data">
<h4 class="card__title">
<a href="/articles/when-spec-driven-development-pays-off">When Spec-Driven Development Pays Off</a>
</h4>
<p class="card__excerpt">AI coding assistants have become a core part of software development. AI-generated code has shown productivity gains, but it's also contributing to security weaknesses and familiar bug patterns. In this article, author Nitin Garg highlights the bottleneck has moved from code generation to code verification, and how to detect &amp; mitigate it when the AI-generated behavior diverges from the intent.</p>
<div class="card__footer"></div>
</div>
<a href="/articles/when-spec-driven-development-pays-off" class="card__header">
<img loading="lazy" alt="When Spec-Driven Development Pays Off" src="https://imgopt.infoq.com/fit-in/100x100/filters:quality(80)/articles/when-spec-driven-development-pays-off/en/smallimage/When-Spec-Driven-Development-Pays-Off-thumb-1788790605567.jpg" class="card__image"/>
</a>
</div>
</li>
</ul>
<a href="/ai-ml-data-eng/" class="button__more button button__large button__arrow arrow__right">All in ai-ml-data-eng</a>
</div>
</div>
</div>
<div class="has--subnav li-nav">
<a href="/culture-methods/" title="Culture &amp; Methods" class="nav__category">Culture &amp; Methods</a>
<div class="nav__subnav subnav">
<ul class="subnav__categories no-style">
<li><a href="/agile/" title="Agile">Agile</a></li>
<li><a href="/diversity/" title="Diversity">Diversity</a></li>
<li><a href="/leadership/" title="Leadership">Leadership</a></li>
<li><a href="/lean/" title="Lean/Kanban">Lean/Kanban</a></li>
<li><a href="/personal-growth/" title="Personal Growth">Personal Growth</a></li>
<li><a href="/scrum/" title="Scrum">Scrum</a></li>
<li><a href="/sociocracy/" title="Sociocracy">Sociocracy</a></li>
<li><a href="/software_craftsmanship/" title="Software Craftmanship">Software Craftmanship</a></li>
<li><a href="/team-collaboration/" title="Team Collaboration">Team Collaboration</a></li>
<li><a href="/testing/" title="Testing">Testing</a></li>
<li><a href="/ux/" title="UX">UX</a></li>
</ul>
<div class="subnav__content" data-id="6817">
<div class="heading__container actions">
<div class="actions__left">
<h3 class="heading section__heading">Featured in Culture &amp; Methods</h3>
</div>
</div>
<ul data-size="large" data-horizontal="true" data-tax="" taxonomy="articles" class="cards no-style">
<li>
<div class="card__content">
<div class="card__data">
<h4 class="card__title">
<a href="/presentations/rust-refactoring">Accelerating Performance by Incrementally Integrating Rust Into Existing Codebase</a>
</h4>
<p class="card__excerpt">Lily Mara explains how to avoid high-risk software rewrites through incremental FFI refactoring. She shares how engineering teams can replace Python bottlenecks with Rust via PyO3, demonstrating how to achieve dramatic function-level speedups, seamless integration testing, and meaningful infrastructure cost savings without microservice overhead.</p>
<div class="card__footer"></div>
</div>
<a href="/presentations/rust-refactoring" class="card__header">
<img loading="lazy" alt="Accelerating Performance by Incrementally Integrating Rust Into Existing Codebase" src="https://imgopt.infoq.com/fit-in/100x100/filters:quality(80)/presentations/rust-refactoring/en/smallimage/lily-mara-thumbnail-1788338447565.jpeg" class="card__image"/>
</a>
</div>
</li>
</ul>
<a href="/culture-methods/" class="button__more button button__large button__arrow arrow__right">All in culture-methods</a>
</div>
</div>
</div>
<div class="has--subnav li-nav">
<a href="/devops/" class="nav__category">DevOps</a>
<div class="nav__subnav subnav">
<ul class="subnav__categories no-style">
<li><a href="/infrastructure/" title="Infrastructure">Infrastructure</a></li>
<li><a href="/continuous_delivery/" title="Continuous Delivery">Continuous Delivery</a></li>
<li><a href="/automation/" title="Automation">Automation</a></li>
<li><a href="/containers/" title="Containers">Containers</a></li>
<li><a href="/cloud-computing/" title="Cloud">Cloud</a></li>
<li><a href="/observability/" title="Observability">Observability</a></li>
</ul>
<div class="subnav__content" data-id="6043">
<div class="heading__container actions">
<div class="actions__left">
<h3 class="heading section__heading">Featured in DevOps</h3>
</div>
</div>
<ul data-size="large" data-horizontal="true" data-tax="" taxonomy="articles" class="cards no-style">
<li>
<div class="card__content">
<div class="card__data">
<h4 class="card__title">
<a href="/presentations/ai-platform-engineering-roundtable">Platform Engineering in the Age of AI</a>
</h4>
<p class="card__excerpt">The panelists explain how platform teams adapt to support AI-assisted engineering, highlighting which capabilities belong in the platform. They discuss trade-offs between standardization and developer autonomy, while sharing strategies to manage AI tooling, security guardrails, and shifting workflows.</p>
<div class="card__footer"></div>
</div>
<a href="/presentations/ai-platform-engineering-roundtable" class="card__header">
<img loading="lazy" alt="Platform Engineering in the Age of AI" src="https://imgopt.infoq.com/fit-in/100x100/filters:quality(80)/presentations/ai-platform-engineering-roundtable/en/smallimage/thumb-1788861349861.jpg" class="card__image"/>
</a>
</div>
</li>
</ul>
<a href="/devops/" class="button__more button button__large button__arrow arrow__right">All in devops</a>
</div>
</div>
</div>
<div class="li-nav">
<a rel="noreferrer noopener" href="https://events.infoq.com/" class="nav__category" title="Events" target="_blank">Events</a>
</div>
</nav>
</div>
<div>
<h3 class="widget__heading">Helpful links</h3>
<ul class="no-style header__nav">
<li>
<a href="/about-infoq" title="About InfoQ">
About InfoQ
</a>
</li>
<li>
<a href="/infoq-editors" title="InfoQ Editors">
InfoQ Editors
</a>
</li>
<li>
<a href="/write-for-infoq" title="Write for InfoQ">
Write for InfoQ
</a>
</li>
<li>
<a href="https://c4media.com/" target="_blank" title="About C4Media">
About C4Media
</a>
</li>
<li>
<a rel="noreferrer noopener" href="https://c4media.com/diversity" title="Diversity" target="_blank">Diversity</a>
</li>
</ul>
</div>
<div>
<h3 class="widget__heading">Choose your language</h3>
<ul class="language__switcher no-style">
<li class="active"><a href="#" onclick="return false;" title="InfoQ English">En</a></li>
<li><a href="https://www.infoq.cn">中文</a></li>
<li><a href="/jp/">日本</a></li>
<li><a href="/fr/">Fr</a></li>
</ul>
</div>
</div>
</div>
<div data-nosnippet class="actions header__bottom header__bottom__events">
<div class="actions__left">
<div class="events-list" role="list" aria-label="Upcoming events">
<div class="event-item" role="listitem" data-event-type="certification" data-sort-date="2026-09-14">
<a class="event-card" href="https://certification.qconferences.com/architecture?utm_source=infoq&amp;utm_medium=referral&amp;utm_campaign=homepageheader_onlinecohortarchitecture26" target="_blank" rel="noopener noreferrer" aria-label="Online InfoQ Architect Certification, Sep 14, 2026">
<div class="event-date">
<div class="event-date-box" aria-hidden="true"><span>Sep</span><span>14,</span><span>2026</span></div>
</div>
<div class="event-content">
<p class="event-title">Architect Certification</p>
<p class="event-description">Distributed systems, decentralized decisions, platform engineering, and AI architecture. <br/><strong>Online. Register Now.</strong></p>
</div>
</a>
</div>
<div class="event-item" role="listitem" data-event-type="certification" data-sort-date="2026-09-18">
<a class="event-card" href="https://certification.qconferences.com/ai-assisted-engineering?utm_source=infoq&utm_medium=referral&utm_campaign=homepageheader_onlinecohortaiassistedengineering26" target="_blank" rel="noopener noreferrer" aria-label="AI-Assisted Engineering Certification, Sep 18, 2026">
<div class="event-date">
<div class="event-date-box" aria-hidden="true"><span>Sep</span><span>18,</span><span>2026</span></div>
</div>
<div class="event-content">
<p class="event-title">AI-Assisted Engineering Certification</p>
<p class="event-description">Your coding agent moves fast. Who checks whether it's making the codebase better? <br/><strong>Online. Register Now.</strong></p>
</div>
</a>
</div>
<div class="event-item" role="listitem" data-event-type="certification" data-sort-date="2026-10-14">
<a class="event-card" href="https://certification.qconferences.com/ai-security-privacy?utm_source=infoq&amp;utm_medium=referral&amp;utm_campaign=homepageheader_onlinecohortaisecurity26" target="_blank" rel="noopener noreferrer" aria-label="Online InfoQ AI Security &amp; Privacy Engineering Certification, August 26, 2026">
<div class="event-date">
<div class="event-date-box" aria-hidden="true"><span>Oct</span><span>14,</span><span>2026</span></div>
</div>
<div class="event-content">
<p class="event-title">AI Security &amp; Privacy Engineering Certification</p>
<p class="event-description">Secure and govern production AI systems, from sensitive data to guardrails, evals, and audits.<br><strong>Online. Register now.</strong></p>
</div>
</a>
</div>
<div class="event-item" role="listitem" data-event-type="qcon" data-sort-date="2026-11-16">
<a class="event-card" href="https://qconsf.com/?utm_source=infoq&amp;utm_medium=referral&amp;utm_campaign=homepageheader_qsf26" target="_blank" rel="noopener noreferrer" aria-label="QCon San Francisco, Nov 16-20, 2026">
<div class="event-date">
<div class="event-date-box" aria-hidden="true"><span>Nov</span><span>16-20,</span><span>2026</span></div>
</div>
<div class="event-content">
<p class="event-title">QCon San Francisco</p>
<p class="event-description">What's working across AI, architecture, and leadership, from the teams doing it. <br/><strong>Register. Early bird ends August 11.</strong></p>
</div>
</a>
</div>
<div class="event-item" role="listitem" data-event-type="qcon" data-sort-date="2026-12-15">
<a class="event-card" href="https://newyork.qcon.ai/?utm_source=infoq&utm_medium=referral&utm_campaign=homepageheader_qainy26" target="_blank" rel="noopener noreferrer" aria-label="QCon AI New York, December 15-16, 2026">
<div class="event-date">
<div class="event-date-box" aria-hidden="true"><span>Dec</span><span>15-16,</span><span>2026</span></div>
</div>
<div class="event-content">
<p class="event-title">QCon AI New York</p>
<p class="event-description">Production AI across agents, context, evals, security, and infrastructure, from the senior engineers building it.<br/><strong>Registration open.</strong></p>
</div>
</a>
</div>
<div class="event-item" role="listitem" data-event-type="qcon" data-sort-date="2027-04-13">
<a class="event-card" href="https://qconlondon.com/?utm_source=infoq&amp;utm_medium=referral&amp;utm_campaign=homepageheader_qconlondon27" target="_blank" rel="noopener noreferrer" aria-label="QCon London, April 13-16, 2027">
<div class="event-date">
<div class="event-date-box" aria-hidden="true"><span>Apr</span><span>13-16,</span><span>2027</span></div>
</div>
<div class="event-content">
<p class="event-title">QCon London</p>
<p class="event-description">What early-adopter teams have proven in production, across 15 engineering tracks. <br/><strong> Register. Early bird ends August 11.</strong></p>
</div>
</a>
</div>
</div>
</div>
<!---->
</div>
</div>
</div>
</header>
<!-- ####### CONTENT START ######### -->
<main>
<div>
<section class="container section white">
<div class="container__inner">
<article data-type="presentation" class="article grid transcript rightbar">
<p class="crumbs">
<span data-nosnippet><a href="/" title="InfoQ Homepage">InfoQ Homepage</a></span>
<span data-nosnippet><a href="/presentations" title="Presentations">Presentations</a></span>
<span data-nosnippet class="active">Reckoning with the Harm We Do: in Search of Restorative Just Culture in Software and Web Operations</span>
</p>
<div class="article__category culture-methods">
<a
href="/culture-methods/"
class="article__tag box--info" title="Culture &amp; Methods">
Culture &amp; Methods
</a>
</div>
<div data-nosnippet class="notice">
<div class="box--warning">
<a target="_blank" rel="nofollow" href="https://qconsf.com/?utm_source=infoq&amp;utm_medium=referral&amp;utm_campaign=infoqyellowbox_qsf26 ">QCon San Francisco (Nov 16-20): Deep technical sessions. Peer conversations that change how you think. </a>
</div>
</div>
<h1>Reckoning with the Harm We Do: in Search of Restorative Just Culture in Software and Web Operations</h1>
<div class="article__actions">
<div class="actions__left actions__sidebar article__actions">
<button id="toggleLikeContent" class="icon button button__icon like button__gray icon__like" aria-label="Like">Like</button>
<div class="bookmarkReading">
<button id="bookmarkBtn" data-ref="bookmarkPage" aria-label="Read later" class="login button__gray button button__icon icon icon__bookmark icon--only"> </button>
<!-- new dropdown rading list -->
<div class="my-0 button__dropdown dropdown reading_list dropdown__center" id="showBookmarks">
<button aria-label="Reading list" class="button button__unstyled button__small"></button>
<div class="dropdown__holder">
<div class="dropdown__content">
<ul class="no-style dropdown__nav">
<li class="active"><a href="/showbookmarks.action">Reading list</a></li>
</ul>
</div>
</div>
</div>
<div id="toastContainer" class="toast-none toast-hide">
<div class="toast"><span></span></div>
</div>
</div>
<script type="text/javascript">
if(loggedIn){
$('#showBookmarks').css('display', 'flex');
}
function performBookmark() {
Bookmarks.toggleBookmark('presentations', 'blame-accountability');
}
infoq.event.on('bookmarkRequested', function(e) {
Bookmarks.toggleBookmark('presentations', 'blame-accountability');
});
infoq.event.on("loaded", function(){
if(loggedIn){
var href = window.location.href;
if(href.indexOf("#bookmarkPage") != -1){
$('#bookmarkBtn').click();
}
}
});
$(document).ready(function() {
if(Bookmarks.isContentBookmarked == 'true'){
$('#bookmarkBtn').addClass('button__green');
$('#bookmarkBtn').removeClass('button__gray');
}else{
$('#bookmarkBtn').removeClass('button__green');
$('#bookmarkBtn').addClass('button__gray');
}
});
</script>
</div>
</div>
<div class="presentation__switch">
<label class="label">View Presentation</label>
<ul class="no-style">
<li><button class="button button__unstyled button__tooltip tooltip__top button__icon icon icon__pres-2-cols icon--only active" aria-label="Vertical" data-tip="Vertical" data-tip-placement="top" data-key="pres-2-cols">Vertical</button></li>
<li><button class="button button__unstyled button__tooltip tooltip__top button__icon icon icon__pres-1-col icon--only" aria-label="Horizontal" data-tip="Horizontal" data-tip-placement="top" data-key="pres-1-col">Horizontal</button></li>
<li><button class="button button__unstyled button__tooltip tooltip__top button__icon icon icon__pres-fs icon--only" aria-label="Full" data-tip="Full" data-tip-placement="top" data-key="pres-fs">Full</button></li>
</ul>
</div>
<div class="speed">
<label class="label">Speed:</label>
<ul id="presentation_speed" class="no-style presentation_speed">
<li><button class="button button__unstyled active" aria-label="1x" onclick="P.adjustSpeed(1.0, $(this));return false;">1x</button></li>
<li><button class="button button__unstyled" aria-label="1.25x" onclick="P.adjustSpeed(1.25, $(this));return false;">1.25x</button></li>
<li><button class="button button__unstyled" aria-label="1.5x" onclick="P.adjustSpeed(1.5, $(this));return false;">1.5x</button></li>
<li><button class="button button__unstyled" aria-label="2x" onclick="P.adjustSpeed(2.0, $(this));return false;">2x</button></li>
</ul>
</div>
<div class="player">
<div id="player">
<script type="text/javascript">
SlideSynchronizer.setTimes(TIMES);
SlideSynchronizer.playerId="video";
</script>
<video id="video" playsinline controls controlsList="nodownload" width="100%" height="100%" onplay="SlideSynchronizer.start();"></video>
</div>
<div class="actions player__actions">
<div class="actions__left">
</div>
<div class="actions__right"><span>49:31</span></div>
</div>
</div>
<div id="slideContainer" class="intro slides">
<div id="slide"></div>
</div>
<div class="summary">
<h2 class="heading">Summary</h2>
<p>Jessica DeVita discusses the difference between blame and accountability and building a Restorative Just Culture.</p>
</div>
<div data-nosnippet class="bio">
<h2 class="heading">Bio</h2>
<p>Jessica DeVita has 20+ years of experience in IT operations in a variety of roles and industries including healthcare, entertainment, and cloud computing. DeVita most recently served as SRE Manager for the AKS team at Microsoft. Previously she was at Netflix, chef software, UberGeekGirl, Inc., and St. Jude Medical.</p>
</div>
<div data-nosnippet class="about-conference">
<h2 class="heading">About the conference</h2>
<p>QCon Plus is a virtual conference for senior software engineers and architects that covers the trends, best practices, and solutions leveraged by the world's most innovative software organizations.</p>
</div>
<div class="article__content">
<div class="article__data">
<div id="presentationNotes">
<h2 class="expanded">Transcript</h2>
<p>DeVita: I&#39;m Jessica DeVita. We&#39;re talking a lot about Just Culture. Instead of sharing with you more about the theory of it, or what different people have said about it, I want to share with you the results of a study I did on the lived experiences of the people on the ground who are responding to incidents and outages. I&#39;m inspired by the Just Culture manifesto. In particular, the first two commitments of the Just Culture manifesto are that people should feel free to work and speak up and report harmful situations or incidents that they experience or are involved in without fear of unjust or unreasonable blame or punishment. That they should support people. That organizations need to support people who are involved in these incidents and outages. That, in fact, supporting people is the first priority after an unwanted event. The other commitments are important as well, but I wanted to focus on the first two.</p>
<h2 class="expanded">Research Methods</h2>
<p>I went to go talk with folks to find out what&#39;s happening for them. What are they experiencing? As a brief overview of the study, I asked participants about whether they&#39;d felt harmed or traumatized by their experiences. The likelihood of being blamed, or of blaming themselves, and whether they were considering leaving their jobs as a result. I invited them to describe what blameless and accountability meant to them. Before we go into the results, I&#39;ll just speak briefly about how I did the research. As a safety science researcher, I primarily focus on phenomenology, which emphasizes the importance of the lived experiences of people. For each interview that I do, I record them and I transcribe them. Then I print those out and I grab my highlighter and pen, and I&#39;m looking for those significant statements that really speak to the research question that I have. This is often referred to as coding. We&#39;re reviewing the transcripts and looking for these larger themes and grouping what the codes are into these larger meaning units and themes. Some people will then take their handwritten notes and go into using a qualitative data analysis tool. In that, they will group these findings into those larger meaning units. This is really what forms a codebook. The codebook is where we have a better understanding that we&#39;ve really captured what it&#39;s like for people. The goal of phenomenology is that we would leave with a feeling that we better understand what it&#39;s like for someone to experience that. In this study, I used a mixed methods approach, where I surveyed 31 people. I had two focus groups, and had several individual conversations with folks.</p>
<p>Next, I&#39;m going to give you a brief overview of the questions that we asked. Have you felt harmed or traumatized from your involvement in incidents and outages? What exactly is trauma? Trauma results from events where the individual experiences them as physically or emotionally harmful. Trauma has lasting effects on people&#39;s well-being. I was surprised, I must say, that very few people said that they had not experienced trauma. Only 7 out of 31 responders indicated that they have not felt harmed or traumatized by their experiences. Only one person left a qualitative comment. They said outages are considered an opportunity to learn as well as share what you learned. If an outage is called, people will volunteer to be the incident commander or chime in hands to indicate that they&#39;re available to help. Even with upper management, there&#39;s very little negativity or blame. Again, I was surprised, I was really hoping that with all the work that we&#39;ve done that more people would report that they&#39;d had better experiences. The vast majority of participants described experiencing harm or trauma. They may have used other words, and I invited them to describe their experiences. These folks are what we might call a second victim. Second victims is maybe a new term you may not have heard before. Second victims suffer significant emotional harm regardless of whether their actions actually contributed to the incident. Second victims may experience harm related to stress from adversarial root cause investigations as well. The issues that they experience were not limited to them alone, they also affected their families.</p>
<h2 class="expanded">Themes That People Shared</h2>
<p>Next, let&#39;s explore what people shared. Some of the larger themes and descriptions were that there was a punitive culture, that impacts their mental and physical health. They reported a loss of sleep, and disruptions to family time, and personal time, as well as no time to fix underlying issues. We&#39;ll go into some of the significant statements for each of those larger themes that I described. As I mentioned, that people are still experiencing this punitive culture. One participant shared that a CTO told me to take the blame for an incident, or he&#39;d fire me. I remember getting yelled at by the CEO that I wasn&#39;t using the right tool. A lack of trust in the team is crippling, to be honest. People have memories like elephants. No one is ever satisfied. The process we have to deal with incidents, 5 whys based, inevitably leads to the determination of root cause that more often than not ends with human error. Postmortems were called recrimination meetings. One responder described how their COO flew into town after a particularly bad incident. They said, in the aftermath of that incident, the COO asked me, &quot;Why did you release the software?&quot; I told him we&#39;d done all these tests, and we thought we were in good shape, but we missed it. He said again, &quot;Why did you release the software?&quot; I said, &quot;I made a mistake, an error in judgment.&quot; This is an hour-long meeting. The third time he asked again, &quot;Why did you do this?&quot; I said, &quot;I don&#39;t know what to tell you. I screwed up. I don&#39;t know what more you want from me.&quot; It wasn&#39;t like I got fired or anything, but I definitely felt blamed.</p>
<p>The impact to their mental and physical health was the next finding, the next theme that emerged. One respondent said, &quot;I have been traumatized for being involved in incidents for the past five years, to the point that every time I see an alert today, I get an anxiety attack.&quot; &quot;Sometimes I can&#39;t help but not hide it. It will explode in emotional bursts or manifest in bright red hives all over my body, or I&#39;ll completely shut down.&quot; &quot;I remember my lower back hurting because of the amount of adrenaline I&#39;d been running on for the past 36 hours.&quot; &quot;It was very stressful and it gave me a lot of anxiety which led to a loss of sleep, and I would say a more profound sense of disengagement from the workplace.&quot; Sleep loss was a very common theme among the responders. Asked people, what&#39;s your relationship with sleep? One participant shared that sleep damage makes it very difficult for me to be on-call. When a page wakes me up, I generally do not sleep afterwards. I asked if sleep was ever discussed by management. They said formal sleep discussion doesn&#39;t happen. It&#39;s a very dangerous discussion. Not being able to go to sleep at a reasonable hour takes its toll on your mental abilities. Another participant shared that they are asleep with one eye open. &quot;It&#39;s like you&#39;re asleep with one eye open. Don&#39;t dolphins do that? It&#39;s like half my brain is at work, ready and poised to respond to the pager while the other half of my brain is trying to relax.&quot; &quot;Sleep is very holy to me. I&#39;m not on-call right now. I have a hard time separating work and non-work stuff, and so being on-call right now, I couldn&#39;t cope with it in a healthy way.&quot;</p>
<p>Some participants also described that working in Europe, there was a lot of questions and avoidance around something called the European Working Time Directive. That it was awkward to meet the requirements of this directive in a modern 24/7 on-call team. The European Working Time Directive, as I learned, doesn&#39;t cover sleep very much, but it does cover rest. It&#39;s quite complicated, but that you&#39;re not supposed to have less rest than 11 hours in every 24 hours and not supposed to work more than 48 hours in any given week. Another participant shared that, &quot;After the incident, when I tried to get back to sleep, my adrenaline was still going, so it took me a while to get back to sleep. It wiped me out for the whole day.&quot; &quot;There were some periods of time where I just would not respond. I wouldn&#39;t even wake up to the pager. My partner would end up waking me up, &#39;Your phone is going off, go get it.&#39;&quot;</p>
<p>This disruption to family life was a significant theme for many participants. One person described feeling exhausted, spent, drained, and guilty for working and being away from my children. &quot;They were unable to count on me for being able to participate through the duration of some event whether that be a meal or anything else.&quot; That interruption became a highly negative emotionally charged topic for this participant. &quot;Scheduling of shifts is never done with any consideration for family events.&quot; How are people coping? One participant shared that they are not coping well. &quot;Having a good support network and therapy helps, but this industry can be absolute shit for them.&quot; Some participants described disengagement as a coping mechanism, that they would disassociate or leave the job. Another participant described using it as fuel. Another person shared that they mostly get angry and try to change our industry as a way to cope. Using it as fuel so I feel better by at least knowing I have helped others to not deal with it alone. The resentment I felt from those experiences turned into fuel.</p>
<h2 class="expanded">Restorative Just Culture Checklist</h2>
<p>Next, I want to talk a little bit about a resource that Sidney Dekker has shared on Just Culture. He&#39;s provided this Restorative Just Culture checklist. This is another set of questions that I asked some of the participants. First of all, it says that a Restorative Just Culture aims to repair trust and relationships damaged after an incident. It allows all parties to discuss how they&#39;ve been affected and to collaboratively decide what should be done to repair the harm. Who has been hurt here? These second victims are these engineers who again were involved or just responding to the incident. I also want to mention that there is a third victim here. There&#39;s incident analysts, those people who are tasked with supporting engineers after an incident and investigating what really happened. They are what&#39;s known as a third victim. Have we acknowledged how we&#39;ve harmed people? Do we acknowledge them? Second victims can experience this harm related to adversarial root cause analysis investigations. They can suffer significant emotional harm, again, whether or not their actions contributed to the incident or whether it was preventable at all. The impact on them can be severe, as we learned from some of the responders. They can take the form of signs, symptoms associated with acute stress syndrome, or post-traumatic stress disorder.</p>
<p>Some of this comes out of some research on patient safety professionals as the third victims of adverse events. These third victims, according to this research that Holden and Card did, are those that experience psychosocial harm as a result of indirect exposure to an incident, such as leading those incident investigations. Their study found that these third victims have an almost complete lack of emotional support, and a sense that the harm that they experience goes unacknowledged. The harm is clearly real. Respondents experienced anxiety, lost sleep, emotional exhaustion, and a sense of being blamed by everyone for events they weren&#39;t involved in. These led to some of them considering leaving the profession.</p>
<p>We often talk about the organization as a victim. While organizations can certainly suffer reputational harm after these events, Holden and Card found that corporate victimhood is qualitatively different from the harm that the individuals experience. That organizations do not experience acute stress syndrome although their employees might. Organizations do not burn out and leave the profession although their employees might. Have we overfocused on the organizational harms and the reputational harms and ignored the needs of our responders and the incident analysts? The Just Culture checklist asks us, what do they need? What do these folks need? I&#39;ll share with you next what some of our study participants shared in response to this question of, what do they need? How could we reduce the harm to them? Some of the larger themes that emerged are that we really need to educate management. They suggested we need to listen to engineers. We need to trust people. We need to take care of people. We need to slow down and alleviate the pressure to ship. They spoke about needing more training, more staffing, and more sustainable rotations. They asked us to focus on learning instead of blaming, and to use inclusive language. No more human error. No more root cause. No more fat fingering a change.</p>
<h2 class="expanded">What People Needed</h2>
<p>Let&#39;s take a look at some of the significant statements that people shared about what they needed. They wanted us to invest in maintenance and plan for failure. Spend more time on maintenance. &quot;I think what does harm at my company is the frequency of incidents and false alarms. Sometimes our SRE team gets paged for things that resolve themselves before the SRE even gets online to check things out.&quot; &quot;Make investing in resilience a priority for product teams. Make it clear to those teams as well. Usually, they want to improve things but they feel this external pressure to ship. Stop with the &#39;Get it right the first time&#39; mentality.&quot; One person shared that they wanted regular fire drills or empowerment training, so everyone is prepared and it doesn&#39;t feel like a total shock and scare. Being unfamiliar when you&#39;re a frontend engineer and suddenly having to parse through logs and APM like you&#39;re a DevOps person at 1 a.m.</p>
<p>Educate management. &quot;Just give us a break.&quot; &quot;Education for senior management around learning from incidents, accident models, helpful and unhelpful behavior including language.&quot; &quot;Better training for managers on how to manage their staff. Several managers simply shouldn&#39;t be managing people.&quot; Another respondent said that we would really need serious culture change from the top, but that there was no appetite for that. The next theme is really focus on learning instead of blaming. &quot;Allowing for human nature to thrive instead of sanctioning individuals due to the complexity of systems.&quot; &quot;Adopting investigation approaches that are capable of uncovering systemic challenges far away from the frontline. If the tools you use only uncover causes close to the last people who are involved, then that&#39;s all we&#39;ll learn and focus on. Also focus on multiple perspectives.&quot; One person said that if you make people mad and you chew them out, you&#39;re not going to get good work out of them, so don&#39;t do that. Another theme was the need to talk about what happened. &quot;Personal outreach and giving people an opportunity to talk through things is very helpful, but also quite rare,&quot; according to one participant. &quot;Provide a safe space to talk about what happened.&quot; &quot;Build a space for them to share their concerns about the work they do at the sharp end.&quot; The next theme was really sustainable rotations. One person shared that it really has to be six people at a minimum for a somewhat humane rotation. I think managers get very upset when I say that.</p>
<h2 class="expanded">What Is Blameless?</h2>
<p>I invited participants to describe, what is blameless? What does it mean to them? What does it mean to you? Way back in 2012, John Allspaw was talking about blameless postmortems and a Just Culture at Etsy. He said that having a Just Culture means that you are making an effort to balance safety and accountability. He also described that a blameless postmortem process means that engineers whose actions have contributed to an accident can give a detailed account and that they can give this detailed account without fear of punishment or retribution. What did our participants have to say? They characterized blameless as a behavior. It&#39;s just something people say, as a doorway for inquiry, and a number of other ways of characterizing it, but mostly just not pointing fingers.</p>
<p>Let&#39;s go into some of the statements that people shared. Blameless is a behavior. &quot;When faced with a surprise, often negative, the primary goal is not to blame individuals, although blameless does not mean sanction-less, but to learn and understand what can be improved with the goal of keeping our systems sustainable and adaptable in the long run.&quot; &quot;Blameless means not pointing fingers at people for causing an incident.&quot; &quot;Blameless means that we don&#39;t accept so and so messed up as the root cause of an incident. We look at the system&#39;s tools and procedures that failed to prevent the mistake or mitigate the consequences.&quot; Blameless was just something people say. &quot;It&#39;s just something people say nowadays, like we do Agile or psychological safety. It would be weird not to do it. A lot of folks don&#39;t understand what it takes. I&#39;ve seen some very blameful conclusions come out of blameless postmortems. You can still see the blame in the language and the actions.&quot; &quot;Blameless is a squishy marketing term used by part of the safety community to try to make blame attributed to frontline workers go down. It&#39;s hard to tell how well it succeeded.&quot; &quot;Blameless has been Agile-ified to mean whatever the person in charge wants it to mean.&quot;</p>
<p>Blameless was a doorway for inquiry. &quot;Blameless means the emptiness of blame, not the dissolution of it. It means accepting that blame will happen as a natural result of a fleeting human emotional reaction, and that we should see it as a doorway for inquiry.&quot; &quot;We look beyond human error to discover the cause of an incident.&quot; &quot;Approaching incidents from a perspective that all involved were doing the best that they knew how, and the incidents occur because of systems factors and systemic pressures, not individual mistakes.&quot; Blameless recognizes that software is hard. Another participant shared that we need to recognize how blame occurs and what it can tell us about the way our brain is recognizing patterns, and to transform it into something more useful. Finally, they shared that developing an empathy, an understanding of how a situation could unfold and why these decisions made were sound and reasonable from every operator&#39;s perspective.</p>
<p>I asked participants how likely they are to be blamed for incidents at their workplace and how likely they were to blame themselves. I was a bit surprised to see that a majority of participants said that they were very unlikely to be blamed. Just as surprising was that a lot of participants said that they would blame themselves. It&#39;s interesting how the notion of blamelessness manifests and how people describe it. Even then, these blameless organizations that claim to hold these values that actually self-blame is a significant emotion for people. I asked people, if they were likely to change their jobs as a result, to leave their jobs. Actually, another surprising result is that many people were not looking to leave their jobs. That a few of them obviously had left their jobs or were actively looking. Another person shared that they had lost two people out of their team due to the heavy on-call burden. It&#39;s a significant risk to lose these people.</p>
<h2 class="expanded">What Is Accountability?</h2>
<p>I next invited people to talk about, what is accountability? What does it mean? What does it mean to them? Accountability was described in a few themes. It was characterized as culpability, being on the hook. It was shared as being a capability. A plurality, it takes a team. Also, described as prevention. Let&#39;s look at some of those significant statements that people shared in these larger themes. Accountability as a capability. &quot;The capability to accept your own role in an event, and your ability to go through restorative steps with other people involved.&quot; &quot;That people would have control over their work, but also their responsibility for it. Without both of those concepts that things fall apart.&quot; &quot;The power of agency supported by the reciprocity of others.&quot; That you can be doing the best you can and still fall short of your goals, but that&#39;s where we help each other out and don&#39;t beat each other up when we miss. Accountability, it takes a team. &quot;We all pitch in to get the service restored as quickly as possible, and to figure out how to improve the situation in the future.&quot;</p>
<p>That there&#39;s a group of individuals that are stewards of a given system and service and are committed to its improvement and long-term sustainability. Accountability as prevention. &quot;Accepting that existing tools or procedures failed to prevent the incident, and spending time fixing those things as a team before we move on to more exciting work.&quot; &quot;Taking action so that the system cannot allow the mistake again.&quot; Accountability as account giving. One person shared that it was about forthrightly being able to recount decisions and actions that were taken. Another participant described their unpopular opinion that accountability can only come from yourself, that you can hold someone accountable, but that&#39;s typically punitive in nature. Accountability being self-imposed, meant that I&#39;m going to take steps to educate myself and hopefully others around me to the best of my abilities such that future events are mitigated based on what I&#39;ve learned.</p>
<h2 class="expanded">Is There Conflict Between Blameless and Accountability?</h2>
<p>I asked them if there was conflict in these concepts, conflict between blameless and accountability. For one participant the answer was yes. They said, &quot;Some events aren&#39;t blameless. When someone intentionally violates a policy or is malicious, then there should be accountability. When policies and cultures don&#39;t support staff in being successful, I can see where blameless may be ok.&quot; For the majority of the participants, there wasn&#39;t conflict between the two concepts. This person said that it&#39;s possible to say that we as a team need to spend more time making our system more stable, without finger pointing at any particular person or team. Despite the fact that blame serves a social function, blameless and accountable are not necessarily at odds, especially if organizations want to learn from incidents, and explore why locally rational decisions that may have been successful until there was an incident, had surprising effects. Accountability is the thing revealed to us when blame is but a passing phase instead of a concrete resting point. We discover that accountability is a plurality. It takes a team to be accountable in complex systems. How can we treat blame as anything but a film that we allow ourselves to recognize, politely remove, and move on?</p>
<h2 class="expanded">Study Conclusions</h2>
<p>I want to share now some of the conclusions from the study. Accountability means different things to different people. There&#39;s no one definition. Even in cultures that practice blamelessness or that claim to have a Just Culture, people are still being harmed. Sleep is holy, we need to talk about sleep. Why are we still waking people up in the middle of the night?</p>
<h2 class="expanded">Closing Thoughts on Accountability and Just Culture</h2>
<p>Some closing thoughts on accountability and Just Culture. The word accountability, it&#39;s the condition of being able to render accounting of something to someone, according to Dubnick, whereas the idea of accountability is less amenable to easy definitions. Dubnick explains crucially, &quot;To perceive oneself as accountable is to accept the fact that there is an external reference point, a relevant other that must be taken into consideration. Being accountable is thus a social relationship.&quot; Accountability, looking forward, instead of backwards. Sidney Dekker has written about Just Culture extensively. He described how that in a backward-looking accountability, that holding someone accountable is directed at events that have already happened. That accountability can also be forward looking. He references Virginia Sharpe.</p>
<p>Restorative justice, according to Dekker, achieves accountability by listening to multiple accounts, and looking ahead at what must be done to repair the trust and the relationships that were harmed. Perhaps operators involved in mishaps could be held accountable by inviting them to tell their story, their account, and then systematizing and distributing the lessons in it. By using this to sponsor vicarious learning for all. Dekker says that perhaps such notions of accountability would be better able to move us in the direction of an as-yet elusive blame-free culture.</p>
<p>Dr. Richard Cook says that, &quot;There is no such thing as a Just Culture. There&#39;s Just Culture. Where complex systems failure has occurred, culture plays out predictably. It&#39;s more about the power dynamics, reserving the decision about what is acceptable, and calling that just is a species of nonsense. Just Culture is almost entirely a fig leaf for the usual management blame assignment. Justice is in the eye of the beholder.&quot; Culture is what you do, it&#39;s not what you say, as one participant shared. I hope this has offered you some insights into the lived experiences of people. We should still pursue the restorative approach to learning from incidents.</p>
<h2 class="expanded">Questions and Answers</h2>
<p>Brush: As a manager that supports folks both doing incident analysis but also responders. I&#39;m curious if you can give me any tips and tricks on day-to-day things that managers can do to better support the emotional load.</p>
<p>DeVita: I think as managers we have that special opportunity, but every word we say carries extra meaning. I think probably modeling some of the blameless language, but also, I think day-to-day, what I&#39;d love to see more managers doing is maybe just trying to check in with people after they&#39;ve been on a long incident. It can take some time. Asking how folks are doing can be really impactful. It sounds maybe simple, but if you ask it and really try to check in with people afterwards, I just think that goes a long way. Also, monitor, how many times are people being woken up? What are you doing about it? Stop what you&#39;re doing and go fix that. It&#39;s not worth it. The cost to humans, it&#39;s just incalculable.</p>
<p>Brush: If you got a company that is offering 24/7 services, and they do need tight turnaround times on responders, what do you suggest to avoid waking people up at night?</p>
<p>DeVita: I&#39;m not saying it is going to be possible to not do it entirely. I think when we discover that the entire thing is resting on these two people, that&#39;s a burden that&#39;s really pretty great for them to bear. I would just say, first of all, again, noticing that that has happened, and show that you&#39;re investing in it, because there&#39;s fulfillment with doing your service really well. When you do get woken up for a problem, you definitely, I think, have a more connected experience with how it&#39;s breaking. The breaks don&#39;t respect the clock. They don&#39;t care about our schedules. I would just really try to think about if this person was in Fiji enjoying the sunshine, would our other responders be able to do something to mitigate at least until the next business hours? Like, what&#39;s possible here? That&#39;s a question I would ask people afterwards. When you find that your experts have been woken up, definitely reach out and try to talk with them. Maybe ask if you have that good relationship with them, &quot;If you haven&#39;t been able to pick up for some reason, do you think your team could have handled it for you? Would you have been able to enjoy your vacation,&quot; hypothetically? That question can come very differently from a manager than it can come from an independent incident analyst, if you have folks that are neutral, or strive to be neutral. Those are some questions I would ask, but knowing your power influences all of that. Dr. Cook reminds us at the end, like the power dynamic, may be not verbally spoken, but is always there.</p>
<p>Brush: I hadn&#39;t thought of that. That&#39;s an interesting thing to bring up about how the manager asking the question might get a less direct or not really honest, but a more like packaged answer about how this happens and what can happen instead.</p>
<p>The other thing that I was curious about is kind of like the opposite end of it, maybe this relates to it. What are some things that sometimes folks on the team will do inadvertently to make the whole experience somewhat worse. They&#39;re well-meaning but accidentally they make things worse.</p>
<p>DeVita: First of all, that is an observation, and it depends on who&#39;s observing. When we have that observation, it&#39;s probably in hindsight. It&#39;s, ok, it looks like this made things worse, but we only know that in hindsight, usually. We have sometimes well-meaning people who may join an incident call, and it&#39;s not helping. I would just invite us to remember that the incident manager, commander&#39;s role if you&#39;re running that incident, and please explicitly identify yourself that you are running that incident, so that anybody joining always knows who&#39;s running the show. That person has a duty, I think, to say, unless you&#39;re taking over as incident commander, this needs to be a voice only bridge between the engineers, please take it to text only.</p>
<p>Brush: No, I think it&#39;s great, like the roles and responsibilities, inserting them.</p>
<p>DeVita: Or if you have a relationship with that person, maybe you do that. It really depends on the situation. Incidents are never really scripted. They&#39;re a bunch of people coordinating together who may not have experience working together. That&#39;s why some of the incident management things can be helpful, because even if you&#39;ve never worked together, if you identify your roles, maybe people know what to expect. Unless they&#39;re going to relieve you, that might be just like, whoever is speaking right now, can I ask you to go to text only? Or you message that, or maybe your other helpers are messaging like, we&#39;re all moderators, we all have to help each other in these incidents.</p>
<p>Brush: I think this question is around strategic incompetence, or I&#39;ve heard it called malicious incompetence. How do you get folks to widen their knowledge? They can be more effective overall as a team, in terms of redundancy.</p>
<p>DeVita: Remember the viewpoint that you&#39;re taking. You are seeing that as strategic incompetence. I&#39;m not challenging that you have that experience. It&#39;s a judgment, essentially, that they are avoiding learning. I would invite you to be really curious about what&#39;s going on there. I&#39;m not a gambling woman, but I would say to you that there&#39;s something very fearful going on there. If they are afraid to touch that system, you should probably slow down and fix that. Because if the system is so fragile that they&#39;re like, not touching that at all. I would not enjoy having that continue. If you just add the manager power dynamic, and push them, no, you have to go learn. It seems like there&#39;s some safety issues there, either from, they&#39;re afraid of the deployment system. They know it&#39;s held together with bubblegum and toothpicks. Adding a manager push in there is absolutely not going to help. I would see if you can find a way to bring people together after an incident, and if you can start to build your trust with people that it&#39;s ok to be curious about other parts of the system that are opaque to them. Until they see a blameless experience, they won&#39;t believe you.</p>
<p>&nbsp;</p>
<script>
$(function() {
jQuery(function() {
jQuery.scrollDepth();
});
});
</script>
<p><big><strong>See more <a href="https://www.infoq.com/transcripts/presentations/">presentations with transcripts</a></strong></big></p>
<p>&nbsp;</p>
</div>
</div>
</div>
<div class="aside">
<div class="recorded">
<p class="meta recorded__meta">Recorded at:</p>
<a href="https://plus.qconferences.com/">
<img loading="lazy" alt="QCon Plus is a virtual conference for senior software engineers and architects that covers the trends, best practices, and solutions leveraged by the world's most innovative software organizations." src="https://res.infoq.com/presentations/blame-accountability/en/promoimage/Logo_QCon+Plus-1683907149886.png">
</a>
</div>
<p class="date">May 12, 2023</p>
<div class="article__authors authors">
<div>
<p class="meta">by</p>
<ul class="no-style authors">
<li data-id="author-Jessica-DeVita">
<p class="meta author__bio">
<a href="/profile/Jessica-DeVita/" class="avatar author__avatar" aria-label="Jessica DeVita"></a>
<span class="author__name">
<a href="/profile/Jessica-DeVita/" class="author__link">Jessica DeVita</a>
</span>
</p>
</li>
</ul>
</div>
</div>
<div class="ads__area">
<script type="text/javascript">
var uriMapping = "presentations";
var showVcr = "false";
var fillWithVcr = "true";
var sponsorshipsJson = "{&quot;links&quot;:[{&quot;styleName&quot;:&quot;pdf&quot;,&quot;style&quot;:&quot;PDF&quot;,&quot;text&quot;:&quot;The Practical Agentic Coding Playbook&quot;,&quot;id&quot;:&quot;18089bbe-8e7c-4b03-a6ef-ca191b8d102e&quot;,&quot;target&quot;:&quot;https://www.infoq.com/vendorcontent/show.action?vcr=430ffe46-9047-4739-a817-b7d64d070721&amp;utm_source=infoq&amp;utm_medium=VCR&amp;utm_campaign=vcr_fixed_link&quot;,&quot;active&quot;:true}]}";
var sponsoredLinks = $.parseJSON($("<div/>").html(sponsorshipsJson).text()).links;
var numberOfSponsoredVcrIds = sponsoredLinks != null ? sponsoredLinks.length : 0;
var maxItems = 5 - numberOfSponsoredVcrIds;
var intervalVcrSponsorship = setInterval(function() {
if (window.vcrsLoaded) {
clearInterval(intervalVcrSponsorship);
if(showVcr || fillWithVcr) {
if(fillWithVcr) {
for(var index in window.vcrList) {
if(VCR.isVcrSponsored(sponsoredLinks, window.vcrList[index])) {
VCR.addToExcludedList(window.vcrList[index]);
}
}
}
var vcrs = VCR.getByTopicsAndCommunities(window.vcrList, topicIds, communityIds, maxItems, false, null);
if (vcrs != null && vcrs.length > 0 || (sponsoredLinks != null && sponsoredLinks.length > 0)) {
VCR.addToExcludedList(vcrs);
var $widget = jQuery('.relatedVendor');
getCommonElementsForPresentationsWithTranscripts(vcrs, uriMapping, "RIGHT_BAR_RVC");
$widget.css("display", "block");
} else {
var $widget = jQuery('.relatedVendor');
$widget.removeClass("f_rvcbox");
}
}
window.contentVcrFinished = true;
// search for infoq.event.on("contentVcrFinished",... to see how/where it is used
infoq.event.trigger("contentVcrFinished");
}
}, 200);
</script>
<input type="hidden" name="" value="2499" id="cont_item_primary_topic"/>
<div class="widget relatedVendor"
style="display: block"
>
<h4 class="widget__heading">Related Sponsors</h4>
<ul data-tax="prsp" data-horizontal="true" data-size="small"
class="prsp__items no-style cards showImageFirst">
<div class="f_rvcList"></div>
<li class="book">
<div class="book__info">
<h4 class="book__title">
<a href="/url/f/18089bbe-8e7c-4b03-a6ef-ca191b8d102e/" rel="nofollow">
The Practical Agentic Coding Playbook
</a>
</h4>
</div>
</li>
</ul>
<ul class="related-prsp" jsh="{&quot;topic&quot;:&quot;QCon Software Development Conference&quot;,&quot;id&quot;:&quot;12605306-ee86-4a5c-bc22-ab8b965bfc4a&quot;,&quot;title&quot;:&quot;Moderne - Architect Influence Program 08/11/2026 - 11/11/2026&quot;}">
<h4 class="widget__heading">Related Sponsor</h4>
<a href="/url/f/66abda2e-0d1f-4030-92f5-2d460e845635/" target="_blank" rel="nofollow">
<img loading="lazy" src="https://imgopt.infoq.com//fit-in/250x380/filters:quality(100)/filters:no_upscale()/sponsorship/topic/12605306-ee86-4a5c-bc22-ab8b965bfc4a/ModerneLogoMicrosite-1786453474094.png"/>
</a>
<p style="clear: both; padding: 10px 0 0 0;"><b>Automated code transformation at scale. Fix vulnerabilities, migrate frameworks, and modernize legacy code across every repo. <a href="/url/f/b66b8015-fc94-4daf-88dc-691741225dd6/" target="_blank" rel="nofollow">Try Moderne Free</a>.</b></p>
</ul>
</div>
<script type="text/javascript">
window.finishedRightbarVcr = false;
var whitepaperVcrsJson = null;
var topicSponsorshipJson = "{&quot;iconLink&quot;:&quot;/url/f/66abda2e-0d1f-4030-92f5-2d460e845635/&quot;,&quot;iconHref&quot;:&quot;https://imgopt.infoq.com//fit-in/275x500/filters:quality(100)/filters:no_upscale()/sponsorship/topic/12605306-ee86-4a5c-bc22-ab8b965bfc4a/ModerneLogoMicrosite-1786453474094.png&quot;,&quot;id&quot;:&quot;44704352-e094-4805-9d0b-c9675f61311a&quot;}";
var vcrOptionalListJson = null;
/* do not delete these two, as they are used further in the code */
var contentDatetimeFormat='MMM dd, yyyy';
var contentUriMapping="presentations";
JSi18n.relatedRightbar_relatedContent='Related Content';
JSi18n.relatedRightbar_sponsoredContent='Related Sponsors';
JSi18n.relatedRightbar_sponsoredBy='Sponsored by';
var topicIds = "6896,6724,26,2064,593,2309,3";
var communityIds = "2499";
var company = "Moderne";
// this event is fired by frontend once all the necessary things have been done(mobile display, moving vcr boxes around when needed...)
var canStartTrackingCustomRightbar = false;
infoq.event.on('loaded', function(e) {
canStartTrackingCustomRightbar = true;
});
var intervalRightbar = setInterval(function() {
if (window.vcrsLoaded) {
clearInterval(intervalRightbar);
if(company != null && company != "") {
whitepaperVcrsJson = VCR.filterByCompany(company, window.vcrList);
}
vcrOptionalListJson = VCR.getByTopicsAndCommunities(window.vcrList, topicIds, communityIds, 20, true, null);
var adsArea = $('.ads__area');
// 1. display whitepaperVcrs
var topicSponsorship = $.parseJSON($("<div/>").html(topicSponsorshipJson).text());
var whitepaperVcrItems = $.parseJSON($("<div/>").html(JSON.stringify(whitepaperVcrsJson)).text());
var index = 0;
var hasWhitepaper = whitepaperVcrItems !== null && whitepaperVcrItems.length > 0;
if (hasWhitepaper) {
index++;
var whitepaperDiv = getRightbarCustomVcrWidget(whitepaperVcrItems, index, topicSponsorship, "transcriptsright", 1);
$(whitepaperDiv).addClass('prspContent_side');
$(whitepaperDiv).removeClass('box');
$(whitepaperDiv).find('a.book__image img').addClass("book__cover");
adsArea.append(whitepaperDiv);
}
// 2. repeat the "VCR OPTIONAL box as many times as possible, but not more than 5 times"
var items = $.parseJSON($("<div/>").html(JSON.stringify(vcrOptionalListJson)).text());
var minimumBoxHeight = 2000;
var availableSpace = $('.aside').height() - $('.relatedVendor').height();
var numberOfBoxes = Math.floor(availableSpace / minimumBoxHeight);
if (numberOfBoxes > 5) {
numberOfBoxes = 5;
}
for (var i = 0; i<numberOfBoxes; i++) {
index++;
var relatedVcrDiv = getRightbarCustomVcrWidget(items, index, null, "transcriptsright", 1);
$(relatedVcrDiv).addClass('prspContent_side');
$(relatedVcrDiv).removeClass('box');
$(relatedVcrDiv).find('a.book__image img').addClass("book__cover");
adsArea.append(relatedVcrDiv);
}
window.finishedRightbarVcr = true;
}
}, 200);
// these two events can happen one before another async(no precedence any can be first or second). Make sure tracking starts when both happened
var intervalTrackingRightbar = setInterval(function() {
if(canStartTrackingCustomRightbar && window.finishedRightbarVcr){
clearInterval(intervalTrackingRightbar);
VCR.doTrackingCustomRightbarForPresentations();
}
}, 200);
</script>
</div>
</div>
<div class="widget article__fromTopic topics">
<div class="widget__head related__for-topic" data-id="6817" data-trk-ref="content_primary_topic">
<h4 class="heading related__heading">
This content is in the <a href='/culture-methods/'>Culture &amp; 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 &amp; Methods</a>
</li>
<li data-id="18387">
<a href="/qcon-plus-november-2022/" class="button related__topic button__small button__black">QCon Plus November 2022</a>
</li>
<li data-id="18198">
<a href="/qcon-plus/" class="button related__topic button__small button__black">QCon Plus</a>
</li>
<li data-id="29">
<a href="/leadership/" class="button related__topic button__small button__black">Leadership</a>
</li>
<li data-id="6243">
<a href="/Culture/" class="button related__topic button__small button__black">Culture</a>
</li>
<li data-id="597">
<a href="/qcon/" class="button related__topic button__small button__black">QCon Software Development Conference</a>
</li>
<li data-id="6548">
<a href="/teamlead/" class="button related__topic button__small button__black">Team Leader</a>
</li>
<li data-id="3">
<a href="/agile/" class="button related__topic button__small button__black">Agile</a>
</li>
</ul>
</div>
<input type="hidden" name="" value="2499" id="cont_item_primary_topic"/>
<script type="text/javascript">
$(document).ready(function() {
$.ajax({
url: "/api/recommendationlinks.action",
contentType: "application/x-www-form-urlencoded; charset=utf-8",
type: 'POST',
data: {
"primaryTopicAlias": "culture-methods",
"topicIds": "26,6896,2309,2064",
"title": "Reckoning with the Harm We Do: in Search of Restorative Just Culture in Software and Web Operations",
"contentPath": "/presentations/blame-accountability",
"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 &amp; Methods";
//replace html entity since it conflicts with style
box_title=box_title.replace("&amp;","&");
$('.related__editorial h4').text("Popular in " + box_title);
}
for (var i = 0; i < data.length; i++) {
if (i === 5) {
break;
}
if (data[i].url.indexOf("/presentations/blame-accountability") !== -1) {
console.log("Removing the current item from list...");
continue;
}
var theLinkURL = data[i].url;
if(!theLinkURL.endsWith("/")) {
theLinkURL = theLinkURL + "/";
}
var link = $('<li><h5 class="rvc__title"><a title="" href="' + theLinkURL + '/">' + data[i].title + '</a></h5></li>');
$('.related__editorial ul').append(link);
}
$('.related__editorial').show();
displayWidget = true;
}else{
$('.related__editorial').parent("li").remove();
}
if(displayWidget==true){
$('.related__group').attr("data-cols", $('.related__group').find(">li").length);
$('.related__group').css("display", "flex");
}
}
</script>
<ul class="no-style related__group nocontent cards">
<li>
<div class="related__editorial">
<h4 class="heading">Related Editorial</h4>
<ul></ul>
</div>
</li>
<li class="bg-gray">
<div class="related__prsp">
<h4 class="heading">Popular across InfoQ</h4>
<ul>
<li>
<h5 class="rvc__title">
<a href="/news/2026/09/netflix-flink-autoscaler/" class="rvc__link">
Netflix Moves toward Open Source Flink Autoscaler for 30,000+ Streaming Jobs
</a>
</h5>
</li>
<li>
<h5 class="rvc__title">
<a href="/news/2026/09/java-news-roundup-aug31-2026/" class="rvc__link">
Java News Roundup: TornadoVM 6, JReleaser, LangChain4j, Java Operator SDK, JHipster, Yupiik Fusion
</a>
</h5>
</li>
<li>
<h5 class="rvc__title">
<a href="/news/2026/09/google-mantis-vulnerability-scan/" class="rvc__link">
Google Mantis: an Agentic Vulnerability Scanning Harness for Reducing False Positives
</a>
</h5>
</li>
<li>
<h5 class="rvc__title">
<a href="/news/2026/09/blume-docs-ai/" class="rvc__link">
Blume: Zero-Config Docs Framework That Turns a Markdown Folder into an AI-Ready Website
</a>
</h5>
</li>
<li>
<h5 class="rvc__title">
<a href="/news/2026/09/cern-debian-infra/" class="rvc__link">
CERN Renounces RHEL in Favor of Debian for its Accelerator Controls Infrastructure
</a>
</h5>
</li>
<li>
<h5 class="rvc__title">
<a href="/podcasts/personality-over-skillset/" class="rvc__link">
Personality Over Skillset: How Adam Wachtel Builds Engineering Teams
</a>
</h5>
</li>
</ul>
</div>
</li>
</ul>
</article>
</div>
</section>
</div>
<div id="imgPreload"></div>
<script type="text/javascript">
// global vars that can be used for this page, use this section to add more.
var contentTitle = "Reckoning with the Harm We Do: in Search of Restorative Just Culture in Software and Web Operations",
contentPath = "/presentations/blame-accountability",
contentUUID = "4e7fb94d-f1d8-4a99-9a36-c23c09bcb171",
authorUserCSVIds = "126440612";
</script>
<script type="text/javascript">
// needed for starting download after IDP login, processing starts after frontend modules are loaded
infoq.event.on("loaded", function(){
if(loggedIn){
var href = window.location.href;
if(href.indexOf("#downloadPdf") != -1){
//window.location.href = href.substring(0, href.indexOf('#'));
$('#slides').click();
} else if(href.indexOf("#downloadPresentationMp3") != -1){
//window.location.href = href.substring(0, href.indexOf('#'));
$('#mp3').click();
}
}
});
P.c(false, 'p', isWideScreen, 'https://cdn.infoq.com/statics_s1_20260910111632/styles/static/images/logo/logo_scrubber_16_9.jpg', 'https://cdn.infoq.com/statics_s1_20260910111632/styles/static/images/logo/logo_scrubber_4_3.jpg');
//wait for the player to be ready
document.getElementById("video").addEventListener('loadeddata', function() {
//check if we are requested to jump to a specific time in the video
var t = CommonUtils.getQueryParameterByName("t");
if(t !== null && t.length <= 9) {
SlideSynchronizer.start();
P.seekPlayerTime(t, true);
}
}, false);
</script>
</main>
<footer class="footer ">
<section data-nosnippet class="section container">
<div class="container__inner">
<ul data-cols="5" class="no-style columns boxes topic__boxes">
<li class="development">
<div class="box__header">
<a class="t_all_footer_more-boxes-header" href="/development/">Development</a>
</div>
<div class="box__content">
<ul class="no-style box__list small">
<li>
<h5><a class="t_all_footer_more-boxes-item" href="/news/2026/09/tinygo-devkit/" title="Advancing Embedded Go: Recoverable Panics, UEFI, Radio and Hardware Dev Kit">Advancing Embedded Go: Recoverable Panics, UEFI, Radio and Hardware Dev Kit</a></h5>
</li>
<li>
<h5><a class="t_all_footer_more-boxes-item" href="/news/2026/09/riscv-cpython/" title="CPython Officially Adds RISC-V Support as a Tier 3 Platform">CPython Officially Adds RISC-V Support as a Tier 3 Platform</a></h5>
</li>
<li>
<h5><a class="t_all_footer_more-boxes-item" href="/news/2026/09/async-lua-neovim/" title="vim.async&#039;s Addition Modernizes Neovim&amp;rsquo;s Async Architecture for Better Stability">vim.async's Addition Modernizes Neovim&rsquo;s Async Architecture for Better Stability</a></h5>
</li>
</ul>
</div>
</li>
<li class="architecture-design">
<div class="box__header">
<a class="t_all_footer_more-boxes-header" href="/architecture-design/">Architecture &amp; Design</a>
</div>
<div class="box__content">
<ul class="no-style box__list small">
<li>
<h5><a class="t_all_footer_more-boxes-item" href="/news/2026/09/netflix-conductor-4-workflow/" title="Netflix Reworks Conductor for 420 Million Monthly Workflow Executions and 10X Larger Workflows">Netflix Reworks Conductor for 420 Million Monthly Workflow Executions and 10X Larger Workflows</a></h5>
</li>
<li>
<h5><a class="t_all_footer_more-boxes-item" href="/news/2026/09/meta-organizational-agents/" title="Meta&#039;s Recipe for Building Agents as &amp;quot;Organizational Second Brains&amp;quot;">Meta's Recipe for Building Agents as &quot;Organizational Second Brains&quot;</a></h5>
</li>
<li>
<h5><a class="t_all_footer_more-boxes-item" href="/news/2026/09/netflix-flink-autoscaler/" title="Netflix Moves toward Open Source Flink Autoscaler for 30,000+ Streaming Jobs">Netflix Moves toward Open Source Flink Autoscaler for 30,000+ Streaming Jobs</a></h5>
</li>
</ul>
</div>
</li>
<li class="culture-methods">
<div class="box__header">
<a class="t_all_footer_more-boxes-header" href="/culture-methods/">Culture &amp; Methods</a>
</div>
<div class="box__content">
<ul class="no-style box__list small">
<li>
<h5><a class="t_all_footer_more-boxes-item" href="/news/2026/09/autonomous-software-teams/" title="Beyond Autonomous Teams in Software Product Development">Beyond Autonomous Teams in Software Product Development</a></h5>
</li>
<li>
<h5><a class="t_all_footer_more-boxes-item" href="/presentations/rust-refactoring/" title="Accelerating Performance by Incrementally Integrating Rust Into Existing Codebase">Accelerating Performance by Incrementally Integrating Rust Into Existing Codebase</a></h5>
</li>
<li>
<h5><a class="t_all_footer_more-boxes-item" href="/podcasts/personality-over-skillset/" title="Personality Over Skillset: How Adam Wachtel Builds Engineering Teams">Personality Over Skillset: How Adam Wachtel Builds Engineering Teams</a></h5>
</li>
</ul>
</div>
</li>
<li class="ai-ml-data-eng">
<div class="box__header">
<a class="t_all_footer_more-boxes-header" href="/ai-ml-data-eng/">AI, ML &amp; Data Engineering</a>
</div>
<div class="box__content">
<ul class="no-style box__list small">
<li>
<h5><a class="t_all_footer_more-boxes-item" href="/news/2026/09/nvidia-pair-ai-task-router/" title="NVIDIA Personal AI Router Distributes AI Tasks across Local Compute">NVIDIA Personal AI Router Distributes AI Tasks across Local Compute</a></h5>
</li>
<li>
<h5><a class="t_all_footer_more-boxes-item" href="/news/2026/09/linkedin-ai-multi-teacher/" title="How LinkedIn Trains AI Job Search 8x Faster with Multi-Teacher Distillation">How LinkedIn Trains AI Job Search 8x Faster with Multi-Teacher Distillation</a></h5>
</li>
<li>
<h5><a class="t_all_footer_more-boxes-item" href="/news/2026/09/openai-gpt6-astra/" title="OpenAI Releases GPT-6 Astra for Coding and Computer Use">OpenAI Releases GPT-6 Astra for Coding and Computer Use</a></h5>
</li>
</ul>
</div>
</li>
<li class="devops">
<div class="box__header">
<a class="t_all_footer_more-boxes-header" href="/devops/">DevOps</a>
</div>
<div class="box__content">
<ul class="no-style box__list small">
<li>
<h5><a class="t_all_footer_more-boxes-item" href="/news/2026/09/terraform-aws-provider-6-62/" title="Terraform AWS Provider Continues Rapid Expansion as AWS Infrastructure Becomes More Complex">Terraform AWS Provider Continues Rapid Expansion as AWS Infrastructure Becomes More Complex</a></h5>
</li>
<li>
<h5><a class="t_all_footer_more-boxes-item" href="/news/2026/09/observability-ai-agents/" title="Session Traces and Cost Controls Help Diagnose AI Agent Failures">Session Traces and Cost Controls Help Diagnose AI Agent Failures</a></h5>
</li>
<li>
<h5><a class="t_all_footer_more-boxes-item" href="/news/2026/09/hashicorp-packer-verification/" title="HashiCorp Packer 1.16 Adds Native SLSA Provenance Generation and Verification for Machine Images">HashiCorp Packer 1.16 Adds Native SLSA Provenance Generation and Verification for Machine Images</a></h5>
</li>
</ul>
</div>
</li>
</ul>
</div>
</section>
<section data-nosnippet class="container section section__newsletter">
<div class="columns container__inner">
<div class="newsletter" data-col="1/2"
id="infoq-nl"
>
<h2 class="heading">
<strong>The InfoQ</strong> Newsletter
</h2>
<p class="intro">A round-up of last week&#x2019;s content on InfoQ sent out every Tuesday. Join a community of over 250,000 senior developers.
<a target="_blank" href="https://assets.infoq.com/newsletter/regular/en/newsletter_sample/newsletter_sample.html">View an example</a>
</p>
<ul class="newsletter__features">
<li>Get a quick overview of content published on a variety of innovator and early adopter technologies</li>
<li>Learn what you don&#x2019;t know that you don&#x2019;t know</li>
<li>Stay up to date with the latest information from the topics you are interested in</li>
</ul>
<div class="newsletter__subscribe">
<form class="form gdpr" name="footerNewsletterForm" id="footerNewsletterForm" action="#" onsubmit="footerNewsletter.saveSubscription(); return false;">
<div class="field newsletter__mail input__text input__no-label input__medium email">
<label for="email-newsletter-infoq" class="label field__label">Enter your e-mail address</label>
<input id="email-newsletter-infoq" name="footerNewsletterEmail" placeholder="Enter your e-mail address" class="input field__input" type="email"/>
<input type="text" name="emailH" id="input_email_h" aria-required="false" style="display:none !important" tabindex="-1" autocomplete="off"/>
<input type="hidden" id="fnt" name="fnt" value="sPy3KoqV8lIMRdpY"/>
<input type="hidden" id="footerNewsletterType" name="footerNewsletterType" value="regular"/>
<input type="hidden" id="cmpi" name="cmpi" value="1"/>
</div>
<div class="hidden">
<span class="input__select field country">
<label for="input-simple-newsletter-country" class="label field__label">Select your country</label>
<select id="input-simple-newsletter-country" class="select field__input">
<option value="" class="select__option">Select a country</option>
</select>
<p class="input__message field__desc"></p>
</span>
<span class="input__checkbox field hidden">
<input type="checkbox" id="gdpr-consent-simple-nl">
<label for="gdpr-consent-simple-nl" class="label"><span>I consent to InfoQ.com handling my data as explained in this <a href="https://www.infoq.com/privacy-notice">Privacy Notice</a>.</span></label>
</span>
</div>
<input type="submit" role="button" value="Subscribe" class="button button__medium button__red" onclick="return footerNewsletter.validateEmail('Invalid email address');"/>
</form>
<p class="meta">
<a href="/privacy-notice/" target="_blank">We protect your privacy.</a>
</p>
<span class="success" style="display:none;" id="footerNewsletterMessage"></span>
</div>
<script type="text/javascript">
var footerNewsletter = new Newsletter('Enter your e-mail address',
'email-newsletter-infoq', 'footerNewsletterType','footerNewsletterMessage', 'fnt', 'input_email_h', 'input-simple-newsletter-country', 'cmpi','footer_except_homepage');
</script>
</div>
<div data-col="1/2" data-bg="certification" class="event__container" style="padding-right: 20px;">
<a href="https://certification.qconferences.com/?utm_source=infoq&amp;utm_medium=referral&amp;utm_campaign=largefooterad_onlinecohorts26" target="_blank" class="qconplus__events-slider" style="">
<div>
<div class="logo-certification"></div>
</div>
<p class="intro" style="margin-bottom: 0;color: white !important;">
<b>InfoQ Online Certification Programs</b>
<br>For Senior Engineers, Architects, and Technical Leaders
</p>
<ul style="margin-bottom: 0;">
<li style="color: white !important;"><b>Architect</b> with Luca Mezzalira | September 14</li>
<li style="color: white !important;"><b>Engineering Leadership</b> with Michelle Brush | September 18</li>
<li style="color: white !important;"><b>AI-Assisted Engineering</b> with Zichuan Xiong & Premanand Chandrasekaran | September 18</li>
<li style="color: white !important;"><b>AI Security &amp; Privacy Engineering</b> with Katharine Jarmul | October 14</li>
</ul>
<br>
<p class="intro" style="margin-bottom: 0;color: white !important;">As your role becomes more senior, the work changes. You're no longer just implementing decisions; you're shaping the systems, trade-offs, and technical direction other teams depend on.<br>These 5-week online programs give you a structured way to work through real decisions from your current role with senior peers from other companies.</p>
<strong class="button button__green cta__button">RESERVE YOUR PLACE</strong>
<small style="color: white;"><br>Live online. 4 hours a week, for 5 weeks.</small>
</a>
</div>
</div>
</section>
<section data-nosnippet class="section container footer__subfooter align__left">
<div class="container__inner columns">
<div data-col="1/4" class="columns footer__links-wrap">
<div class="footer__links">
<a href="/" class="nuxt-link-exact-active active" title="Home">Home</a>
<a href="/reginit.action" class="emphasis" title="Create account">Create account</a>
<button aria-label="Log In" class="login" data-ref="mainLogin">Log In</button>
<a rel="noreferrer noopener" href="http://qconferences.com/" target="_blank" title="QCon Conferences">QCon Conferences</a>
<a rel="noreferrer noopener" href="https://events.infoq.com/" target="_blank">Events</a>
<a href="/write-for-infoq/" title="Write for InfoQ">Write for InfoQ</a>
<a href="/infoq-editors/" title="InfoQ Editors">InfoQ Editors</a>
<a href="/about-infoq/" title="About InfoQ">About InfoQ</a>
<a href="https://c4media.com/" target="_blank" title="About C4Media">About C4Media</a>
<a rel="noreferrer noopener" href="https://get.infoq.com/infoq-mediakit/" title="Media Kit" target="_blank">
Media Kit
</a>
<a href="https://devmarketing.c4media.com/?utm_source=infoq" title="InfoQ Developer Marketing Blog" target="_blank">InfoQ Developer Marketing Blog</a>
<a rel="noreferrer noopener" href="https://c4media.com/diversity" title="Diversity" target="_blank">Diversity</a>
</div>
</div>
<div data-col="1/4" class="events__list">
<h4 class="heading footer__heading">Events</h4>
<ul class="qcons__list no-style">
<li><span class="icon event__type conference"></span>
<div class="qcon__detail">
<h5 class="heading">
<a rel="noreferrer noopener" href="https://certification.qconferences.com/architecture?utm_source=infoq&utm_medium=referral&utm_campaign=footer_onlinecohortarchitecture26" target="_blank">Online InfoQ Architect Certification</a>
</h5>
<span class="meta date">September 14, 2026</span>
</div>
</li>
<li><span class="icon event__type conference"></span>
<div class="qcon__detail">
<h5 class="heading">
<a rel="noreferrer noopener" href="https://certification.qconferences.com/ai-assisted-engineering?utm_source=infoq&utm_medium=referral&utm_campaign=footer_onlinecohortaiassistedengineering26" target="_blank">Online InfoQ AI-Assisted Engineering Certification</a>
</h5>
<span class="meta date">September 18, 2026</span>
</div>
</li>
<li><span class="icon event__type conference"></span>
<div class="qcon__detail">
<h5 class="heading">
<a rel="noreferrer noopener" href="https://certification.qconferences.com/ai-security-privacy?utm_source=infoq&utm_medium=referral&utm_campaign=footer_onlinecohortaisecurity26" target="_blank">Online InfoQ AI Security & Privacy Engineering Program</a>
</h5>
<span class="meta date">October 14, 2026</span>
</div>
</li>
<li><span class="icon event__type conference"></span>
<div class="qcon__detail">
<h5 class="heading">
<a rel="noreferrer noopener" href="https://qconsf.com/?utm_source=infoq&utm_medium=referral&utm_campaign=footer_qsf26" target="_blank">QCon San Francisco</a>
</h5>
<span class="meta date">November 16-20, 2026</span>
</div>
</li>
<li><span class="icon event__type conference"></span>
<div class="qcon__detail">
<h5 class="heading">
<a rel="noreferrer noopener" href="https://newyork.qcon.ai/?utm_source=infoq&utm_medium=referral&utm_campaign=footer_qainy26" target="_blank">QCon AI New York</a>
</h5>
<span class="meta date">December 15-16, 2026</span>
</div>
</li>
<li><span class="icon event__type conference"></span>
<div class="qcon__detail">
<h5 class="heading">
<a rel="noreferrer noopener" href="https://qconlondon.com/?utm_source=infoq&utm_medium=referral&utm_campaign=footer_qlondon27" target="_blank">QCon London 2027</a>
</h5>
<span class="meta date">April 13-16, 2027</span>
</div>
</li>
</ul>
</div>
<div data-col="1/4" class="footer__social-wrap">
<h4 class="heading text-left footer__heading">Follow us on </h4>
<div class="social__links columns social__links__row">
<a href="https://www.youtube.com/infoq"><span class="icon icon__large icon__social icon__youtube"></span><div><span class="social__count">Youtube</span><span class="social__followers">232K Followers</span></div></a>
<a href="http://www.linkedin.com/company/infoq"><span class="icon icon__large icon__social icon__linkedin"></span><div><span class="social__count">Linkedin</span><span class="social__followers">26K Followers</span></div></a>
<a rel="noreferrer noopener" href="https://www.instagram.com/infoqdotcom/" target="_blank"><span class="icon icon__large icon__social icon__instagram"></span><div><span class="social__count">Instagram</span><span class="social__followers">New</span></div></a>
<a href="#" id="footerNewsletterRssLink"><span class="icon icon__large icon__social icon__rss"></span><div><span class="social__count">RSS</span><span class="social__followers">19K Readers</span></div></a>
<a rel="noreferrer noopener" href="http://twitter.com/infoq" target="_blank"><span class="icon icon__large icon__social icon__twitter"></span><div><span class="social__count">X</span><span class="social__followers">57.1k Followers</span></div></a>
<a rel="noreferrer noopener" href="https://www.facebook.com/InfoQ-75911537320" target="_blank"><span class="icon icon__large icon__social icon__fb"></span><div><span class="social__count">Facebook</span><span class="social__followers">21K Likes</span></div></a>
<a rel="noreferrer noopener" href="https://bsky.app/profile/infoq.com" target="_blank"><span class="icon icon__large icon__social icon__bluesky"></span><div><span class="social__count">Bluesky</span><span class="social__followers">New</span></div></a>
</div>
</div>
<div data-col="1/4" class="footer__stayin-wrap">
<h4 class="heading text-left footer__heading">Stay in the know</h4>
<div class="stayIn_panel_container">
<a href="/podcasts/" class="stayIn_panel" target="_blank" rel="noreferrer noopener"><span>The InfoQ Podcast</span><picture><source srcset="https://imgopt.infoq.com/eyJidWNrZXQiOiAiYXNzZXRzLmluZm9xLmNvbSIsImtleSI6ICJ3ZWIvZm9vdGVyL2luZm9xLXBvZGNhc3QuanBnIiwiZWRpdHMiOiB7IndlYnAiOiB7ICJxdWFsaXR5Ijo4MH19fQ==" type="image/webp"><source srcset="https://imgopt.infoq.com/eyJidWNrZXQiOiAiYXNzZXRzLmluZm9xLmNvbSIsImtleSI6ICJ3ZWIvZm9vdGVyL2luZm9xLXBvZGNhc3QuanBnIiwiZWRpdHMiOiB7ImpwZWciOiB7ICJxdWFsaXR5Ijo4MH19fQ==" type="image/webp"><img src="https://imgopt.infoq.com/eyJidWNrZXQiOiAiYXNzZXRzLmluZm9xLmNvbSIsImtleSI6ICJ3ZWIvZm9vdGVyL2luZm9xLXBvZGNhc3QuanBnIiwiZWRpdHMiOiB7ImpwZWciOiB7ICJxdWFsaXR5Ijo4MH19fQ==" loading="lazy" width="65px" height="64px" alt="The InfoQ Podcast Logo - Stay in the know"></picture></a>
<a href="/podcasts/#engineering_culture" class="stayIn_panel" target="_blank" rel="noreferrer noopener"><span>Engineering Culture Podcast</span><picture><source srcset="https://imgopt.infoq.com/eyJidWNrZXQiOiAiYXNzZXRzLmluZm9xLmNvbSIsImtleSI6ICJ3ZWIvZm9vdGVyL2luZm9xLXBvZGNhc3QtZW5naW5lZXJpbmctY3VsdHVyZS5qcGciLCJlZGl0cyI6IHsid2VicCI6IHsgInF1YWxpdHkiOjgwfX19" type="image/webp"><source srcset="https://imgopt.infoq.com/eyJidWNrZXQiOiAiYXNzZXRzLmluZm9xLmNvbSIsImtleSI6ICJ3ZWIvZm9vdGVyL2luZm9xLXBvZGNhc3QtZW5naW5lZXJpbmctY3VsdHVyZS5qcGciLCJlZGl0cyI6IHsianBlZyI6IHsgInF1YWxpdHkiOjgwfX19" type="image/webp"><img src="https://imgopt.infoq.com/eyJidWNrZXQiOiAiYXNzZXRzLmluZm9xLmNvbSIsImtleSI6ICJ3ZWIvZm9vdGVyL2luZm9xLXBvZGNhc3QtZW5naW5lZXJpbmctY3VsdHVyZS5qcGciLCJlZGl0cyI6IHsianBlZyI6IHsgInF1YWxpdHkiOjgwfX19" loading="lazy" width="65px" height="64px" alt="Engineering Culture Podcast Logo - Stay in the knoww"></picture></a>
<a href="/software-architects-newsletter/" class="stayIn_panel" target="_blank" rel="noreferrer noopener"><span>The Software Architects' Newsletter</span><picture><source srcset="https://imgopt.infoq.com/eyJidWNrZXQiOiAiYXNzZXRzLmluZm9xLmNvbSIsImtleSI6ICJ3ZWIvZm9vdGVyL2luZm9xLWFyY2hpdGVjdC1uZXdzbGV0dGVyLmpwZyIsImVkaXRzIjogeyJ3ZWJwIjogeyAicXVhbGl0eSI6ODB9fX0=" type="image/webp"><source srcset="https://imgopt.infoq.com/eyJidWNrZXQiOiAiYXNzZXRzLmluZm9xLmNvbSIsImtleSI6ICJ3ZWIvZm9vdGVyL2luZm9xLWFyY2hpdGVjdC1uZXdzbGV0dGVyLmpwZyIsImVkaXRzIjogeyJqcGVnIjogeyAicXVhbGl0eSI6ODB9fX0=" type="image/webp"><img src="https://imgopt.infoq.com/eyJidWNrZXQiOiAiYXNzZXRzLmluZm9xLmNvbSIsImtleSI6ICJ3ZWIvZm9vdGVyL2luZm9xLWFyY2hpdGVjdC1uZXdzbGV0dGVyLmpwZyIsImVkaXRzIjogeyJqcGVnIjogeyAicXVhbGl0eSI6ODB9fX0=" loading="lazy" width="65px" height="64px" alt="The Software Architects' Newsletter Logo - Stay in the know"></picture></a>
</div>
</div>
</div>
</section>
<section data-nosnippet class="container footer__bottom section white align__left">
<div class="container__inner columns">
<div data-col="2/3" class="column">
<div class="footer__contact contact columns">
<span data-col="1/6">
General Feedback
<a href="mailto:feedback@infoq.com">feedback@infoq.com</a>
</span>
<span data-col="1/6">
Advertising
<a href="mailto:sales@infoq.com">sales@infoq.com</a>
</span>
<span data-col="1/6">
Editorial
<a href="mailto:editors@infoq.com">editors@infoq.com</a>
</span>
<span data-col="1/6">
Marketing
<a href="mailto:marketing@infoq.com">marketing@infoq.com</a>
</span>
</div>
</div>
<div class="column" data-col="1/3">
<p class="footer__more">
InfoQ.com and all content copyright &#169; 2006-2026 C4Media Inc.<br/>
<a href="/privacy-notice" target="_blank">Privacy Notice</a>, <a href="/terms-and-conditions " target="_blank">Terms And Conditions</a>, <a href="/cookie-policy " target="_blank">Cookie Policy</a>
</p>
</div>
</div>
</section>
</footer>
<!-- ####### SITE END ######### -->
</div>
<div class="intbt">
<a href="/int/bt/" title="bt">BT</a>
</div>
<script type="text/javascript">
$.when(humanDetectionAsync()).then(
function(status) {
$.getScript("/scripts/__hd.ifq?hdt=sPy3KoqV8lIMRdpY&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 = "Reckoning with the Harm We Do: in Search of Restorative Just Culture in Software and Web Operations";
Bookmarks.apiUrl = '/widgets/bookmark.action';
Bookmarks.isContentBookmarked = "false";
</script>
<script type="text/javascript">
var $buoop = {vs:{i:6,f:1,o:10.1,s:1}}
$buoop.ol = window.onload;
$(document).ready(function() {
try {if ($buoop.ol) $buoop.ol();}catch (e) {}
var e = document.createElement("script");
e.setAttribute("type", "text/javascript");
e.setAttribute("src", "https://cdn.infoq.com/statics_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 -->