CINXE.COM

InfoQ: Software Development News, Trends & Best Practices - InfoQ

<!DOCTYPE html> <html lang="en" xmlns="http://www.w3.org/1999/xhtml"> <head> <!-- Google Optimize Anti-flicker snippet (recommended) --> <style>.async-hide { opacity: 0 !important} </style> <style>.promo{background:#222528;position:fixed;z-index:1001!important;left:0;top:0;right:0;max-height:48px;min-height:48px;padding-top:0!important;padding-bottom:0!important}.promo,.promo p{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.promo p{font-size:.8125rem;line-height:1rem;color:#fff;margin-bottom:0;margin-top:0;margin:0 auto;display:-webkit-box;display:-ms-flexbox;display:flex;font-weight:700}@media only screen and (max-width:650px){.promo p{font-size:.6875rem}}.promo span{overflow:hidden;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical}.promo a{color:#fff!important;text-decoration:underline!important}.promo a.btn{background:#d0021b;padding:7px 20px;text-decoration:none!important;font-weight:700;margin-left:10px;margin-right:10px;white-space:nowrap;border-radius:5px}@media only screen and (max-width:650px){.promo a.btn{font-size:.6875rem;padding:7px 10px}}.promo.container{padding-top:8px;padding-bottom:8px}@media only screen and (min-width:1050px){.promo.container{padding-top:0;padding-bottom:0}}.promo .actions{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.promo .actions__left{-ms-flex-preferred-size:100%;flex-basis:100%;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.promo .actions__right{-ms-flex-preferred-size:40px;flex-basis:40px;margin-top:0;margin-bottom:0;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.promo.hidden{display:none}.promo.show{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.promo.show .container__inner{-webkit-box-flex:1;-ms-flex:1;flex:1}.promo.fixed{position:fixed}.promo.show+header.header{margin-top:48px}.header{background:#fff;-webkit-box-shadow:0 1px 0 #dde2e5;box-shadow:0 1px 0 #dde2e5}.header .actions__left,.header__bottom__events{max-width:100%!important;margin:0}.header .header__events-all{margin:0;display:-webkit-box;display:-ms-flexbox;display:flex;position:relative}.header .header__events-all .header__event-slot{-webkit-box-flex:1;-ms-flex:1 100%;flex:1 100%;border-right:1px solid #dde2e5;margin-top:3px;margin-bottom:3px;padding-left:15px;text-align:left;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding-right:5px;min-width:300px}.header .header__events-all .header__event-slot:hover{text-decoration:none!important}.header .header__events-all .header__event-slot img{min-width:40px;height:40px}.header .header__events-all .header__event-slot div{margin-left:10px}.header .header__events-all .header__event-slot span{font-weight:700!important;font-size:.75rem;margin-bottom:0!important;margin-top:0;display:block;line-height:1.125rem;text-align:left}.header .header__events-all .header__event-slot p{font-weight:400;font-size:.625rem;line-height:130%!important;color:#495057!important;margin:0}@media only screen and (min-width:1050px){.header .header__events-all .header__event-slot p{font-size:.625rem}}.header .header__events-all .header__event-slot:first-child{padding-left:0}.header .header__events-all .header__event-slot:last-child{padding-right:0;border-right:0}@media only screen and (min-width:1050px){.header__bottom,.header__middle,.header__top{position:relative;white-space:nowrap}}.header__top{padding:10px 0}@media only screen and (min-width:800px){.header__top{padding:5px 0}}.header__bottom{padding:5px 0;z-index:29;max-width:100%}.header__bottom a{font-size:.8125rem}.header__bottom .trending{margin-left:0;margin-right:0}.header__bottom .actions{-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.header__bottom .actions__left{max-width:calc(100% + 8px)}@media only screen and (min-width:800px){.header__bottom .actions__left{max-width:calc(100% + 24px)}}.header__bottom .actions__right{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;display:none}@media only screen and (min-width:1050px){.header__bottom .actions__right{display:-webkit-box;display:-ms-flexbox;display:flex}}.header__middle{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap}@media only screen and (min-width:1050px){.header__middle{-ms-flex-wrap:nowrap;flex-wrap:nowrap}}.header__top .actions__left{-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-line-pack:center;align-content:center}@media only screen and (min-width:1050px){.header__top .actions__right{max-width:430px}}.no-style.header__nav li:nth-child(3){font-weight:700}.no-style.header__nav li:nth-child(3) a{color:#0e5ef1!important}.header__bottom__events::after{background:-webkit-gradient(linear,left top,right top,color-stop(0,rgba(255,255,255,0)),to(#fff));background:linear-gradient(90deg,rgba(255,255,255,0) 0,#fff 100%);content:'';position:absolute;height:60px;right:10px;width:25px}@media only screen and (min-width:1050px){.header__bottom__events::after{display:none}}.contribute-link{font-weight:400;font-size:.6875rem;color:#000!important;position:relative;padding-left:10px}.contribute-link:hover{color:#00791d!important;text-decoration:none!important}.contribute-link::before{content:'';width:1px;height:12px;position:absolute;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);background:rgba(0,0,0,.1);left:-1px}.my-0{margin-top:0!important;margin-bottom:0!important}.header__desc.my-0{margin-left:0}.header__bottom__events .actions__left{max-width:100%!important;overflow-x:scroll;-ms-overflow-style:none;scrollbar-width:none;display:block;scroll-behavior:smooth;min-width:100%}.header__bottom__events .actions__left::-webkit-scrollbar{display:none}.header__bottom__events .actions__left:-webkit-scrollbar-thumb{background:#fff}.logo{line-height:1rem}.header{position:relative;z-index:41;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.header .input:focus,.header input[type=password]:focus,.header input[type=text]:focus{border:1px solid #00791d}.header a:not(.button):not(.login__action):not(.active){text-decoration:none;color:#222}.header a:not(.button):not(.login__action):not(.active):hover{text-decoration:underline;color:#222}.header__items{display:none;-ms-flex-wrap:wrap;flex-wrap:wrap}@media only screen and (min-width:1050px){.header__items{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.header__items nav{position:relative;background:0 0;padding:0;left:0;top:0;line-height:inherit;display:block;-webkit-box-shadow:none;box-shadow:none;max-width:100%;max-height:80px}}.header__items>div{width:100%;margin-bottom:32px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-flow:column nowrap;flex-flow:column nowrap}@media only screen and (min-width:552px){.header__items>div:not(:nth-last-child(-n+2)){margin-bottom:32px}}@media only screen and (min-width:552px) and (max-width:1050px){.header__items>div{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;-ms-flex-preferred-size:calc(99.7% * 1/2 - (32px - 32px * 1/2));flex-basis:calc(99.7% * 1/2 - (32px - 32px * 1/2));max-width:calc(99.7% * 1/2 - (32px - 32px * 1/2));width:calc(99.7% * 1/2 - (32px - 32px * 1/2))}.header__items>div:nth-child(1n){margin-right:32px;margin-left:0}.header__items>div:last-child{margin-right:0}.header__items>div:nth-child(2n){margin-right:0;margin-left:auto}}@media only screen and (min-width:800px) and (max-width:1050px){.header__items>div{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;-ms-flex-preferred-size:calc(99.7% * 1/4 - (32px - 32px * 1/4));flex-basis:calc(99.7% * 1/4 - (32px - 32px * 1/4));max-width:calc(99.7% * 1/4 - (32px - 32px * 1/4));width:calc(99.7% * 1/4 - (32px - 32px * 1/4))}.header__items>div:nth-child(1n){margin-right:32px;margin-left:0}.header__items>div:last-child{margin-right:0}.header__items>div:nth-child(4n){margin-right:0;margin-left:auto}}@media only screen and (min-width:1050px){.header__items>div{margin-bottom:0!important;margin-right:0!important;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}}.header__items .language__switcher{display:none}.header__items .language__switcher .li-nav.active>a,.header__items .language__switcher>li.active>a{color:#fff!important}.header__items .language__switcher .li-nav.active>a:hover,.header__items .language__switcher>li.active>a:hover{color:#fff!important;background:#0e5ef1}.header__items .language__switcher .li-nav:hover>a,.header__items .language__switcher>li:hover>a{color:#fff}.header+main{display:block;min-height:210px;-webkit-transition:margin .15s ease;transition:margin .15s ease;margin-top:0!important}.header--hide .header+main{margin-top:50px}.header--hide .header__toggle{opacity:0;top:20px;visibility:hidden}.header--hide .header__logo{max-height:0}.header--hide .header__middle,.header--hide .header__top{max-height:0;overflow:hidden;padding-top:0;padding-bottom:0;border-color:transparent}.header--hide .header__bottom .vue-portal-target{top:3px;right:0;bottom:auto;left:auto;position:absolute}.header__middle,.header__top{-webkit-transition:all .15s ease;transition:all .15s ease}.header__middle{border-bottom:1px solid rgba(0,0,0,.1);z-index:33}.header__middle .vue-portal-target{width:100%}@media only screen and (min-width:1050px){.header__middle .vue-portal-target{display:none}}@media only screen and (min-width:1050px){.header__middle{line-height:5.75rem;text-align:left;padding:0;z-index:30}.header__middle .widget__heading{display:none}}.header__top>.actions__left{display:none}@media only screen and (min-width:1050px){.header__top>.actions__left{display:-webkit-box;display:-ms-flexbox;display:flex}}.header__top>.actions__right{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;margin-right:0;margin-top:0;margin-bottom:0;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.header__top>.actions__right .dropdown__holder{width:calc(100vw - 16px);max-height:80vh}@media only screen and (min-width:600px){.header__top>.actions__right .dropdown__holder{width:auto}}.header__top>.actions__right>*{margin:0}.header__top>.actions__right .search{display:none}@media only screen and (min-width:1050px){.header__top>.actions__right>*{display:-webkit-box;display:-ms-flexbox;display:flex;white-space:nowrap}.header__top>.actions__right .search{display:block}}.header__top .user__login{display:block}.header__top .user__login>.button,.header__top .user__login>button{border-top-right-radius:0;border-bottom-right-radius:0}@media only screen and (min-width:1050px){.header__top{position:relative;right:auto;width:100%}}.header__logo{max-width:165px;position:absolute;top:8px;overflow:hidden;-webkit-transition:all .1s ease;transition:all .1s ease;z-index:32;line-height:2.25rem;height:36px;width:100px;margin-left:50px;-ms-flex-preferred-size:190px;flex-basis:190px}@media only screen and (min-width:800px){.header__logo{top:4px}}@media only screen and (min-width:1050px){.header__logo{position:relative;top:0;overflow:visible;margin-right:20px;margin-left:0;line-height:3.125rem;height:50px}.header__logo>*{width:165px}}@media only screen and (min-width:1280px){.header__logo{margin-right:30px}}.header__desc,.header__more>button{text-transform:capitalize;color:#666;letter-spacing:0;font-size:0;font-weight:400;line-height:1.5rem;vertical-align:top;font-smoothing:antialiased;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI Variable","Segoe UI",system-ui,ui-sans-serif,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";-webkit-transition:font-size .15s ease-in-out;transition:font-size .15s ease-in-out}@media only screen and (min-width:1050px){.header__desc,.header__more>button{font-size:.6875rem}}.header__desc{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;position:relative;width:auto}.header__topics{white-space:nowrap;float:right;position:relative}.header__topics *{display:inline-block;vertical-align:top}.header__topics a{font-size:.8125rem}@media only screen and (min-width:1050px){.header__topics{float:none}}.header__more{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;vertical-align:top}.header__more:before{left:-12px}.header__more:after,.header__more:before{content:'';width:1px;height:12px;position:absolute;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);background:rgba(0,0,0,.1)}.header__more:after{right:-12px}.header__more:hover{cursor:pointer;color:rgba(0,0,0,.75)}.header__user{display:inline-block;vertical-align:top;white-space:nowrap;margin-left:8px}@media only screen and (min-width:1050px){.header__user{margin-left:0}}.header__user>div{display:inline-block;vertical-align:top}.header__user-nav a:not(.button){text-transform:uppercase;font-size:.75rem;font-weight:600}.header__user-nav a:not(.button):not(.active){opacity:.5}.header__user-nav a:not(.button):not(.active):hover{opacity:.75}.header__user-nav a:not(.button):hover{text-decoration:none}.header__user-nav a:not(.button).active{color:#222;cursor:default;text-decoration:none}.header__user-nav a:not(.button):before{margin-right:0}.header__user-nav a:not(.button):not(:last-child){margin-right:16px}@media only screen and (min-width:1050px){.header__user-nav a:not(.button):not(:last-child){margin-right:32px}}@media only screen and (min-width:1050px){.header__user-nav+.header__topics{margin-left:56px}}.header__search{display:none;vertical-align:top;margin-right:0}@media only screen and (min-width:1050px){.header__search{display:inline-block}}.header__search,.header__user{line-height:inherit}.header__nav{border-bottom:1px solid rgba(0,0,0,.1)}@media only screen and (min-width:800px){.header__nav{border-bottom:0}}.header__nav .button{margin-left:0}.header__nav .button__more{margin-right:20px}.header__nav .li-nav,.header__nav>li{-webkit-transition:all .15s ease;transition:all .15s ease}@media only screen and (min-width:1050px){.header__nav .li-nav,.header__nav>li{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;vertical-align:middle;position:static;border:none;min-height:65px}.header__nav .li-nav:hover.has--subnav .nav .li-nav,.header__nav .li-nav:hover.has--subnav .nav>li,.header__nav>li:hover.has--subnav .nav .li-nav,.header__nav>li:hover.has--subnav .nav>li{white-space:normal}.header__nav .li-nav:hover.has--subnav .nav__subnav,.header__nav>li:hover.has--subnav .nav__subnav{opacity:1;top:100%;visibility:visible;-webkit-transition-delay:.25s;transition-delay:.25s}.header__nav .li-nav:hover.has--subnav .nav__category,.header__nav>li:hover.has--subnav .nav__category{width:100%}.header__nav .li-nav:hover.has--subnav .nav__category:after,.header__nav .li-nav:hover.has--subnav .nav__category:before,.header__nav>li:hover.has--subnav .nav__category:after,.header__nav>li:hover.has--subnav .nav__category:before{-webkit-transition-delay:.25s;transition-delay:.25s;opacity:1}}@media only screen and (min-width:1080px){.header__nav .li-nav:not(:last-child),.header__nav>li:not(:last-child){margin-right:23px;margin-left:23px}}@media only screen and (min-width:1280px){.header__nav .li-nav:not(:last-child),.header__nav>li:not(:last-child){margin-right:23px;margin-left:23px}}@media only screen and (min-width:1338px){.header__nav .li-nav:not(:last-child),.header__nav>li:not(:last-child){margin-right:23px;margin-left:23px}}.header__nav .li-nav>a,.header__nav>li>a{font-size:.875rem;line-height:1.5rem;padding:12px 0;color:#000;display:inline-block;max-width:100%;position:relative;z-index:61;white-space:normal}@media only screen and (min-width:1050px){.header__nav .li-nav>a,.header__nav>li>a{padding:8px 0 0;font-weight:700}}.header__nav .li-nav>a:after,.header__nav .li-nav>a:before,.header__nav>li>a:after,.header__nav>li>a:before{content:'';position:absolute;bottom:-1px;left:50%;width:0;height:0;opacity:0;-webkit-transform:translateX(-50%);transform:translateX(-50%);border-style:solid;border-width:0 5px 5px 5px;-webkit-transition:opacity .15s ease-in-out;transition:opacity .15s ease-in-out;border-color:transparent transparent #fff transparent}.header__nav .li-nav>a:before,.header__nav>li>a:before{left:50%;bottom:0;border-width:0 6px 6px 6px;border-color:transparent transparent #f5f7f8 transparent}@media only screen and (min-width:1050px){.header__nav .li-nav>a,.header__nav>li>a{font-size:1rem}}@media only screen and (min-width:1800px){.header__nav .li-nav>a,.header__nav>li>a{font-size:1.125rem}}.header--open{overflow:hidden}@media only screen and (min-width:600px){.header--open{overflow:visible}}.header--open .content-items{max-height:215px;margin:12px 0 24px}.header--open .search{margin-top:16px;display:block}.header--open .header__toggle:before{z-index:10}.header--open .header__toggle>span:nth-child(1){top:50%;-webkit-transform:rotate(45deg);transform:rotate(45deg)}.header--open .header__toggle>span:nth-child(2){opacity:0}.header--open .header__toggle>span:nth-child(3){top:50%;-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}.header--open .header__items,.header--open .header__items .language__switcher{display:-webkit-box;display:-ms-flexbox;display:flex}.header--open .header__top{z-index:100;position:absolute;left:0;right:8px;background:#fff}@media only screen and (min-width:800px){.header--open .header__top{right:20px}}.header--open .header__top .search{display:none}.header--open .header__logo{z-index:101}.header--open .header__middle{padding-top:60px}.header--open .header__bottom{display:none}.header--open .header__container{max-height:90vh;overflow-x:hidden;overflow-y:auto}@media only screen and (min-width:1050px){.header--open .header__container{overflow:visible}}.header .subnav{position:absolute;-webkit-box-shadow:0 5px 25px 1px rgba(0,0,0,.15);box-shadow:0 5px 25px 1px rgba(0,0,0,.15);background:#fff;visibility:hidden;line-height:1.75rem;max-width:100%;width:100%;left:0;opacity:0;overflow:hidden;border:1px solid #f5f7f8;border-radius:2px;-webkit-transition:all .15s ease-in-out;transition:all .15s ease-in-out;top:105%;z-index:60;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}.header .subnav .subnav__categories{-webkit-box-flex:0;-ms-flex:0 1 280px;flex:0 1 280px;padding:24px 0;background:#f5f7f8;margin-right:0!important}.header .subnav .subnav__categories>li{display:block;font-size:.9375rem;padding:2px 48px 2px 24px}.header .subnav .subnav__categories>li a{display:block;font-weight:700}.header .subnav .subnav__categories>li:hover{background:#e1e1e1}.header .subnav .subnav__heading{margin-bottom:20px}.header .subnav .subnav__content{position:relative;-ms-flex-item-align:start;align-self:flex-start;padding:24px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap}@media only screen and (min-width:1050px){.header .subnav .subnav__content{padding-left:32px;padding-right:32px;margin:0 auto;-webkit-box-flex:1;-ms-flex:1 1 600px;flex:1 1 600px}}.header .subnav .subnav__content .heading__container{-ms-flex-preferred-size:100%;flex-basis:100%}.header .subnav .subnav__content:before{content:'';position:absolute;left:0;top:0;bottom:-100%;width:1px;background:rgba(0,0,0,.1)}.languagesEdition .active{font-weight:700}.header__more.dropdown:after{content:'';display:inline-block;vertical-align:middle;-ms-flex-item-align:center;-ms-grid-row-align:center;align-self:center;background-repeat:no-repeat;background-position:center;margin-bottom:2px;width:7px;height:7px;-webkit-transition:-webkit-transform .15s ease;transition:-webkit-transform .15s ease;transition:transform .15s ease;transition:transform .15s ease,-webkit-transform .15s ease;background-color:#fff!important;background-size:contain}.header__more.dropdown button{color:#000!important;margin-right:-20px;padding-right:20px;z-index:1000}.header__more.dropdown .dropdown__holder{width:165px}.header__more.dropdown .dropdown__content{padding:13px;padding-top:5px;padding-bottom:5px}.header__more.dropdown .languagesEdition li{border-bottom:1px solid #e6e6e6}.header__more.dropdown .languagesEdition li:last-child{border:0}.logo__data{display:none;color:#666;font-size:.6875rem}@media only screen and (min-width:1050px){.logo__data{display:block;line-height:.8125rem}}.container{padding-left:12px;padding-right:12px;margin:0 auto;min-width:320px;-webkit-transition:padding .15s ease-in-out;transition:padding .15s ease-in-out}@media only screen and (min-width:600px){.container{padding-left:16px;padding-right:16px}}@media only screen and (min-width:800px){.container{padding-left:20px;padding-right:20px}}@media only screen and (min-width:1250px){.container{padding-left:60px;padding-right:60px}}@media only screen and (min-width:1400px){.container{padding-left:20px;padding-right:20px}}.container.white{background:#fff}.container__inner{max-width:1290px;margin:0 auto;-webkit-transition:max-width .15s ease-out;transition:max-width .15s ease-out}.search{display:block;position:relative;z-index:33;width:100%;max-width:100%;margin:0}.search:before{position:absolute;top:50%;right:24px;-webkit-transform:translateY(-50%);transform:translateY(-50%);margin-right:0;z-index:34}.search__bar{display:block;border-radius:2px;position:relative;z-index:33}.search__bar #search{margin-bottom:0;max-width:100%;background:#fff}.search__go{top:50%;right:0;bottom:0;left:auto;position:absolute;-webkit-transform:translateY(-50%);transform:translateY(-50%);z-index:32;-webkit-appearance:none;-moz-appearance:none;appearance:none;width:36px;height:36px;line-height:2.25rem;-webkit-box-shadow:none;box-shadow:none;display:block;background:0 0;border:0;font-size:0}@media only screen and (min-width:600px){.search__go{z-index:35}}.header #search,.search__go:hover{cursor:pointer}.header #search{height:36px;position:relative;max-width:100%;background-color:#f5f7f8!important}@media only screen and (min-width:600px){.header #search{font-size:.8125rem;min-width:165px;max-width:100%;opacity:1}}.header #search:hover{cursor:auto}@media only screen and (min-width:1050px){.header #search{margin-left:auto;border-top-right-radius:0;border-bottom-right-radius:0;border-right:0}.header #search:focus{min-width:215px}}.header #search:focus{cursor:auto}.header #search .field__desc{display:none}.header #searchForm{width:100%;margin-top:8px}.header #searchForm:before{right:8px}@media only screen and (min-width:600px){.header #searchForm{margin-top:16px}}@media only screen and (min-width:1050px){.header #searchForm{margin-top:0}}</style> <script>(function(a,s,y,n,c,h,i,d,e){s.className+=' '+y;h.start=1*new Date; h.end=i=function(){s.className=s.className.replace(RegExp(' ?'+y),'')}; (a[n]=a[n]||[]).hide=h;setTimeout(function(){i();h.end=null},c);h.timeout=c; })(window,document.documentElement,'async-hide','dataLayer',4000, {'GTM-W9GJ5DL':true});</script> <script type="text/javascript"> var loggedIn = false; if (loggedIn) { var userCountryId = ''; } </script> <script> window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('config', 'G-VMVPD4D2JY'); //CookieControl tool recomendation // Call the default command before gtag.js or Tag Manager runs to // adjust how the tags operate when they run. Modify the defaults // per your business requirements and prior consent granted/denied, e.g.: gtag('consent', 'default', { 'ad_storage': 'denied', 'ad_user_data': 'denied', 'ad_personalization': 'denied', 'analytics_storage': 'denied' }); if((typeof loggedIn != "undefined") && loggedIn){ window.dataLayer.push({'logged_in': 'true'}); } else { window.dataLayer.push({'logged_in': 'false'}); } window.dataLayer.push({'show_queryz': ''}); </script> <!-- Google Tag Manager --> <script> var gtmProfile="GTM-W9GJ5DL"; (function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); })(window,document,'script','dataLayer', gtmProfile);</script> <!-- End Google Tag Manager --> <title> InfoQ: Software Development News, Trends &amp; Best Practices - InfoQ</title> <link rel="canonical" href="https://www.infoq.com/"/> <link rel="alternate" href="https://www.infoq.com/" hreflang="en"/> <link rel="alternate" href="https://www.infoq.com/jp/" hreflang="ja" /> <link rel="alternate" href="https://www.infoq.com/br/" hreflang="pt" /> <link rel="alternate" href="https://www.infoq.com/fr/" hreflang="fr" /> <link rel="alternate" href="https://www.infoq.com/" 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_20250228123444/styles/style.css"/> <link rel="stylesheet" type="text/css" media="print" href="https://cdn.infoq.com/statics_s1_20250228123444/styles/print.css"/> <link rel="preload" type="text/css" href="https://cdn.infoq.com/statics_s1_20250228123444/styles/style_en.css" as="style" onload="this.onload=null;this.rel='stylesheet'"> <link rel="preload" href="https://cdn.infoq.com/statics_s1_20250228123444/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_20250228123444/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_20250228123444/styles/style_en.css"/> <link rel="stylesheet" href="https://cdn.infoq.com/statics_s1_20250228123444/styles/icons.css"> <link rel="stylesheet" type="text/css" media="screen" href="https://cdn.infoq.com/statics_s1_20250228123444/styles/style_extra.css"/> </noscript> <link rel="stylesheet" type="text/css" href="https://cdn.infoq.com/statics_s1_20250228123444/styles/fonts/font.css"/> <link rel="shortcut icon" href="https://cdn.infoq.com/statics_s1_20250228123444/favicon.ico" type="image/x-icon" /> <link rel="apple-touch-icon" href="https://cdn.infoq.com/statics_s1_20250228123444/apple-touch-icon.png"/> <script type="text/javascript"> var device='desktop'; var InfoQConstants = {}; InfoQConstants.language = 'en'; InfoQConstants.countryCode = ''; InfoQConstants.pageUrl = (typeof window.location != 'undefined' && window.location && typeof window.location.href != 'undefined' && window.location.href) ? window.location.href : "URL_UNAVAILABLE"; InfoQConstants.cet='BwX4aBFpEnUocXMo'; InfoQConstants.userDetectedCountryCode = 'SG'; InfoQConstants.bpadb = 'i4ZlGrs9yWqYZFocHkFl'; </script> <script type="text/javascript" src="https://cdn.infoq.com/statics_s1_20250228123444/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\":\"126431439\",\"ref\":\"author-Aditya-Kulkarni\",\"url\":\"\/profile\/Aditya-Kulkarni\",\"followedByCurrentUser\":false,\"minibio\":\"Delivery Lead at Secure Privacy | InfoQ DevOps Editor\",\"name\":\"Aditya Kulkarni\",\"bio\":\"\",\"followers\":84,\"imgSrc\":\"https:\/\/cdn.infoq.com\/statics_s1_20250228123444\/images\/profiles\/fn3JL64Z5Nh5fhVJmz7meZlGhefMvtvs.jpg\"},{\"id\":\"126598266\",\"ref\":\"author-Pierre-Pureur\",\"url\":\"\/profile\/Pierre-Pureur\",\"followedByCurrentUser\":false,\"minibio\":\"Experienced Software Architect\",\"name\":\"Pierre Pureur\",\"bio\":\"\",\"followers\":206,\"imgSrc\":\"https:\/\/cdn.infoq.com\/statics_s1_20250228123444\/images\/profiles\/22c27753414b3827cb473ede92e13489.jpeg\"},{\"id\":\"45723890\",\"ref\":\"author-Rags-Srinivas\",\"url\":\"\/profile\/Rags-Srinivas\",\"followedByCurrentUser\":false,\"minibio\":\"\",\"name\":\"Rags Srinivas\",\"bio\":\"\",\"followers\":265,\"imgSrc\":\"https:\/\/cdn.infoq.com\/statics_s1_20250228123444\/images\/profiles\/t4nyfgw1THkp4wMZ9EZ59RGJx8Hf9Rk8.jpg\"},{\"id\":\"126667647\",\"ref\":\"author-Mahesh-Vaijainthymala-Krishnamoorthy\",\"url\":\"\/profile\/Mahesh-Vaijainthymala-Krishnamoorthy\",\"followedByCurrentUser\":false,\"minibio\":\"Sr. Consultant @Dell Technologies\",\"name\":\"Mahesh Vaijainthymala Krishnamoorthy\",\"bio\":\"\",\"followers\":0,\"imgSrc\":\"https:\/\/cdn.infoq.com\/statics_s1_20250228123444\/images\/profiles\/fffbed1580c33927bda54a71f4523f82.jpg\"},{\"id\":\"126593296\",\"ref\":\"author-Andrew-Harmel~Law\",\"url\":\"\/profile\/Andrew-Harmel~Law\",\"followedByCurrentUser\":false,\"minibio\":\"Technology Principal at Thoughtworks\",\"name\":\"Andrew Harmel-Law\",\"bio\":\"\",\"followers\":17,\"imgSrc\":\"https:\/\/cdn.infoq.com\/statics_s1_20250228123444\/images\/profiles\/7d5851e7f7f5218544ce254285c4729e.jpg\"},{\"id\":\"3885831\",\"ref\":\"author-Michael-Redlich\",\"url\":\"\/profile\/Michael-Redlich\",\"followedByCurrentUser\":false,\"minibio\":\"Java Champion | Java Queue Lead Editor | Director at GSJUG\",\"name\":\"Michael Redlich\",\"bio\":\"\",\"followers\":561,\"imgSrc\":\"https:\/\/cdn.infoq.com\/statics_s1_20250228123444\/images\/profiles\/TxhBF2gloUbm6EjmEsvlQPphHPLElD6g.jpg\"},{\"id\":\"18771786\",\"ref\":\"author-Edin-Kapi\u0107\",\"url\":\"\/profile\/Edin-Kapi\u0107\",\"followedByCurrentUser\":false,\"minibio\":\"Lead Software Engineer\",\"name\":\"Edin Kapi\u0107\",\"bio\":\"\",\"followers\":28,\"imgSrc\":\"https:\/\/cdn.infoq.com\/statics_s1_20250228123444\/images\/profiles\/KGUHnFD3YC5lMoRFSpc1yACJK5wk3OCg.jpg\"},{\"id\":\"126605607\",\"ref\":\"author-Ashish-Rajan\",\"url\":\"\/profile\/Ashish-Rajan\",\"followedByCurrentUser\":false,\"minibio\":\"\",\"name\":\"Ashish Rajan\",\"bio\":\"\",\"followers\":0,\"imgSrc\":\"\"},{\"id\":\"126649683\",\"ref\":\"author-Shawna-Martell\",\"url\":\"\/profile\/Shawna-Martell\",\"followedByCurrentUser\":false,\"minibio\":\"Senior Staff Engineer @Carta\",\"name\":\"Shawna Martell\",\"bio\":\"\",\"followers\":3,\"imgSrc\":\"https:\/\/cdn.infoq.com\/statics_s1_20250228123444\/images\/profiles\/bb98727d252dbed6e6d6851b2a89b70c.jpg\"},{\"id\":\"4005806\",\"ref\":\"author-Randy-Shoup\",\"url\":\"\/profile\/Randy-Shoup\",\"followedByCurrentUser\":false,\"minibio\":\"SVP Engineering at Thrive Market\",\"name\":\"Randy Shoup\",\"bio\":\"\",\"followers\":66,\"imgSrc\":\"https:\/\/cdn.infoq.com\/statics_s1_20250228123444\/images\/profiles\/iVlK5aakxzEs6nr69ZWFQZfGFvhhHPzN.jpeg\"},{\"id\":\"122371483\",\"ref\":\"author-Wim-Deblauwe\",\"url\":\"\/profile\/Wim-Deblauwe\",\"followedByCurrentUser\":false,\"minibio\":\"Java Software Engineer\",\"name\":\"Wim Deblauwe\",\"bio\":\"\",\"followers\":52,\"imgSrc\":\"https:\/\/cdn.infoq.com\/statics_s1_20250228123444\/images\/profiles\/f8d456605781b29d1143678d1c82e878.jpg\"},{\"id\":\"125035682\",\"ref\":\"author-Kurt-Bittner\",\"url\":\"\/profile\/Kurt-Bittner\",\"followedByCurrentUser\":false,\"minibio\":\"Independent Author\",\"name\":\"Kurt Bittner\",\"bio\":\"\",\"followers\":197,\"imgSrc\":\"https:\/\/cdn.infoq.com\/statics_s1_20250228123444\/images\/profiles\/3789fc0e548a79744225f15083ab938c.jpg\"},{\"id\":\"126467140\",\"ref\":\"author-Renato-Losio\",\"url\":\"\/profile\/Renato-Losio\",\"followedByCurrentUser\":false,\"minibio\":\"Cloud Expert | AWS Data Hero \",\"name\":\"Renato Losio\",\"bio\":\"\",\"followers\":646,\"imgSrc\":\"https:\/\/cdn.infoq.com\/statics_s1_20250228123444\/images\/profiles\/ptroF8HdI2vWXm0NDaKeS0JdiPxMOAra.jpg\"},{\"id\":\"126666114\",\"ref\":\"author-Avraham-Poupko\",\"url\":\"\/profile\/Avraham-Poupko\",\"followedByCurrentUser\":false,\"minibio\":\"Security Architect and Manager of Architects\",\"name\":\"Avraham Poupko\",\"bio\":\"\",\"followers\":1,\"imgSrc\":\"https:\/\/cdn.infoq.com\/statics_s1_20250228123444\/images\/profiles\/5ae3df3b63759e3321a9e8cc9790818e.jpg\"},{\"id\":\"126604934\",\"ref\":\"author-Courtney-Nash\",\"url\":\"\/profile\/Courtney-Nash\",\"followedByCurrentUser\":false,\"minibio\":\"Research Analyst\",\"name\":\"Courtney Nash\",\"bio\":\"\",\"followers\":2,\"imgSrc\":\"https:\/\/cdn.infoq.com\/statics_s1_20250228123444\/images\/profiles\/47e9046c57d13073866254b6a9f49b37.jpg\"},{\"id\":\"126666530\",\"ref\":\"author-Inna-Tokarev-Sela\",\"url\":\"\/profile\/Inna-Tokarev-Sela\",\"followedByCurrentUser\":false,\"minibio\":\"CEO & Founder @illumex\",\"name\":\"Inna Tokarev Sela\",\"bio\":\"\",\"followers\":0,\"imgSrc\":\"https:\/\/cdn.infoq.com\/statics_s1_20250228123444\/images\/profiles\/a307a198ff8fe85ae317d808c01e11ff.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\":2595,\"imgSrc\":\"https:\/\/cdn.infoq.com\/statics_s1_20250228123444\/images\/profiles\/tSe5dczMaSGtRUm18VkTR2tcF4W3SogA.jpg\"},{\"id\":\"63268344\",\"ref\":\"author-Chris-Swan\",\"url\":\"\/profile\/Chris-Swan\",\"followedByCurrentUser\":false,\"minibio\":\"Engineer, Atsign\",\"name\":\"Chris Swan\",\"bio\":\"\",\"followers\":1763,\"imgSrc\":\"https:\/\/cdn.infoq.com\/statics_s1_20250228123444\/images\/profiles\/8PE76nOujWAoCM8yqLn9Hfv2HqW3VlIP.jpg\"},{\"id\":\"343314\",\"ref\":\"author-Jonathan-Allen\",\"url\":\"\/profile\/Jonathan-Allen\",\"followedByCurrentUser\":false,\"minibio\":\"Software Architect\",\"name\":\"Jonathan Allen\",\"bio\":\"\",\"followers\":1733,\"imgSrc\":\"https:\/\/cdn.infoq.com\/statics_s1_20250228123444\/images\/profiles\/Wk_C09_mzwK23YkTkKMXResJv3LKUN5D.jpg\"},{\"id\":\"62671158\",\"ref\":\"author-Monica-Beckwith\",\"url\":\"\/profile\/Monica-Beckwith\",\"followedByCurrentUser\":false,\"minibio\":\"\",\"name\":\"Monica Beckwith\",\"bio\":\"\",\"followers\":1717,\"imgSrc\":\"https:\/\/cdn.infoq.com\/statics_s1_20250228123444\/images\/profiles\/QhDv7pXEUK1sdLsYArFmnLxecH4rYhAc.jpg\"},{\"id\":\"93850416\",\"ref\":\"author-Claudio-Masolo\",\"url\":\"\/profile\/Claudio-Masolo\",\"followedByCurrentUser\":false,\"minibio\":\"Cloud Engineer\",\"name\":\"Claudio Masolo\",\"bio\":\"\",\"followers\":43,\"imgSrc\":\"https:\/\/cdn.infoq.com\/statics_s1_20250228123444\/images\/profiles\/etZJL5qwf5xbcRUA3NKv4QZMRINLUnDB.jpeg\"},{\"id\":\"126664758\",\"ref\":\"author-Adrian-Gonzalez~Martin\",\"url\":\"\/profile\/Adrian-Gonzalez~Martin\",\"followedByCurrentUser\":false,\"minibio\":\"\",\"name\":\"Adrian Gonzalez-Martin\",\"bio\":\"\",\"followers\":0,\"imgSrc\":\"\"},{\"id\":\"126653689\",\"ref\":\"author-Dan-Fike\",\"url\":\"\/profile\/Dan-Fike\",\"followedByCurrentUser\":false,\"minibio\":\"Deputy to the CTO @Carta\",\"name\":\"Dan Fike\",\"bio\":\"\",\"followers\":2,\"imgSrc\":\"https:\/\/cdn.infoq.com\/statics_s1_20250228123444\/images\/profiles\/cd5f9988a4e497f74848ecc24a25c518.jpg\"},{\"id\":\"101761132\",\"ref\":\"author-Hien-Luu\",\"url\":\"\/profile\/Hien-Luu\",\"followedByCurrentUser\":false,\"minibio\":\"Sr. Engineering Manager @Zoox | Author of MLOps with Ray\",\"name\":\"Hien Luu\",\"bio\":\"\",\"followers\":5,\"imgSrc\":\"https:\/\/cdn.infoq.com\/statics_s1_20250228123444\/images\/profiles\/2otp8TdFU4hcs8smWNuiX5mb9N26NGEQ.jpeg\"},{\"id\":\"87551248\",\"ref\":\"author-Steef~Jan-Wiggers\",\"url\":\"\/profile\/Steef~Jan-Wiggers\",\"followedByCurrentUser\":false,\"minibio\":\"Cloud Queue Lead Editor\",\"name\":\"Steef-Jan Wiggers\",\"bio\":\"\",\"followers\":700,\"imgSrc\":\"https:\/\/cdn.infoq.com\/statics_s1_20250228123444\/images\/profiles\/BhZx03k3Hj0pZVXmTzGqItwZxtJ06oIb.jpeg\"},{\"id\":\"126667272\",\"ref\":\"author-Shruti-Bhat\",\"url\":\"\/profile\/Shruti-Bhat\",\"followedByCurrentUser\":false,\"minibio\":\"\",\"name\":\"Shruti Bhat\",\"bio\":\"\",\"followers\":0,\"imgSrc\":\"\"},{\"id\":\"80977916\",\"ref\":\"author-Thomas-Betts\",\"url\":\"\/profile\/Thomas-Betts\",\"followedByCurrentUser\":false,\"minibio\":\"Laureate Application Architect at Blackbaud\",\"name\":\"Thomas Betts\",\"bio\":\"\",\"followers\":976,\"imgSrc\":\"https:\/\/cdn.infoq.com\/statics_s1_20250228123444\/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\":629,\"imgSrc\":\"https:\/\/cdn.infoq.com\/statics_s1_20250228123444\/images\/profiles\/NovciOoQOAYWqYqRQBFo97SuMm0xbUiC.jpg\"},{\"id\":\"126464202\",\"ref\":\"author-Johan-Janssen\",\"url\":\"\/profile\/Johan-Janssen\",\"followedByCurrentUser\":false,\"minibio\":\"Architect at ASML\",\"name\":\"Johan Janssen\",\"bio\":\"\",\"followers\":401,\"imgSrc\":\"https:\/\/cdn.infoq.com\/statics_s1_20250228123444\/images\/profiles\/Fb4eZ0mtvMf6MhsmBIhsUVueV4xAs2FD.jpg\"},{\"id\":\"126461259\",\"ref\":\"author-InfoQ\",\"url\":\"\/profile\/InfoQ\",\"followedByCurrentUser\":false,\"minibio\":\"ACCELERATING THE SOFTWARE SIDE OF HUMAN PROGRESS\",\"name\":\"InfoQ\",\"bio\":\"\",\"followers\":286,\"imgSrc\":\"https:\/\/cdn.infoq.com\/statics_s1_20250228123444\/images\/profiles\/3a8e7391f8fe97e0727a8c950c042569.jpg\"},{\"id\":\"126666670\",\"ref\":\"author-Ganesh-Datta\",\"url\":\"\/profile\/Ganesh-Datta\",\"followedByCurrentUser\":false,\"minibio\":\"Cofounder & CTO @Cortex \",\"name\":\"Ganesh Datta\",\"bio\":\"\",\"followers\":1,\"imgSrc\":\"https:\/\/cdn.infoq.com\/statics_s1_20250228123444\/images\/profiles\/5cce11b3667c78b3c0b35e217ac74f98.jpg\"},{\"id\":\"4927376\",\"ref\":\"author-Karsten-Silz\",\"url\":\"\/profile\/Karsten-Silz\",\"followedByCurrentUser\":false,\"minibio\":\"Full-Stack Java Developer &amp; Contractor\",\"name\":\"Karsten Silz\",\"bio\":\"\",\"followers\":306,\"imgSrc\":\"https:\/\/cdn.infoq.com\/statics_s1_20250228123444\/images\/profiles\/p6zmOdOcqXiRj09iiZNeDZap7f0IglQW.jpg\"},{\"id\":\"126664448\",\"ref\":\"author-Olalekan-Elesin\",\"url\":\"\/profile\/Olalekan-Elesin\",\"followedByCurrentUser\":false,\"minibio\":\"Engineering Director @HRS Group & AWS Machine Learning Hero\",\"name\":\"Olalekan Elesin\",\"bio\":\"\",\"followers\":0,\"imgSrc\":\"https:\/\/cdn.infoq.com\/statics_s1_20250228123444\/images\/profiles\/9df29b292794510b6cab8170fe512963.jpg\"},{\"id\":\"114725059\",\"ref\":\"author-Holly-Cummins\",\"url\":\"\/profile\/Holly-Cummins\",\"followedByCurrentUser\":false,\"minibio\":\"Senior Principal Software Engineer, Red Hat\",\"name\":\"Holly Cummins\",\"bio\":\"\",\"followers\":459,\"imgSrc\":\"https:\/\/cdn.infoq.com\/statics_s1_20250228123444\/images\/profiles\/cRsuGlFgKyGmGfEHvafpMO63CxbrEm22.jpg\"}]'); var topicsInPage = JSON.parse('[{\"name\":\"Architecture & Design\",\"id\":\"6816\",\"followers\":9542,\"url\":\"\/architecture-design\",\"followedByCurrentUser\":false},{\"name\":\"Culture & Methods\",\"id\":\"6817\",\"followers\":3732,\"url\":\"\/culture-methods\",\"followedByCurrentUser\":false},{\"name\":\"AI, ML & Data Engineering\",\"id\":\"16690\",\"followers\":5162,\"url\":\"\/ai-ml-data-eng\",\"followedByCurrentUser\":false},{\"name\":\".NET Core\",\"id\":\"15683\",\"followers\":7351,\"url\":\"\/Net-Core\",\"followedByCurrentUser\":false},{\"name\":\"Java9\",\"id\":\"7097\",\"followers\":5022,\"url\":\"\/Java9\",\"followedByCurrentUser\":false},{\"name\":\"Machine Learning\",\"id\":\"5449\",\"followers\":13395,\"url\":\"\/MachineLearning\",\"followedByCurrentUser\":false},{\"name\":\"Microservices\",\"id\":\"15274\",\"followers\":20717,\"url\":\"\/microservices\",\"followedByCurrentUser\":false},{\"name\":\"DevOps\",\"id\":\"6043\",\"followers\":4748,\"url\":\"\/Devops\",\"followedByCurrentUser\":false},{\"name\":\"Reactive Programming\",\"id\":\"15453\",\"followers\":11592,\"url\":\"\/reactive-programming\",\"followedByCurrentUser\":false},{\"name\":\"Development\",\"id\":\"6815\",\"followers\":3809,\"url\":\"\/development\",\"followedByCurrentUser\":false}]'); var userContentLikesInPage = []; var userCommentsLikesInPage = []; var currentUserId = 2; </script> <meta name="ifq:pageType" content="HOMEPAGE"/> <script type="text/javascript"> InfoQConstants.pageType = 'HOMEPAGE'; </script> <meta name="keywords" content="Java, .NET, dotnet, Ruby, SOA, Service Oriented Architecture, Agile, enterprise, software development, development, architecture, programming"/> <meta name="description" content="Helping dev teams adopt new technologies and practices. Written by software engineers. Read by over 1.5 million developers worldwide."/> <meta property="og:site_name" content="InfoQ"/> <script type="application/ld+json"> { "@context": "https://schema.org", "@type": "WebSite", "name": "InfoQ", "alternateName": ["InfoQ", "infoq.com"], "url": "https://www.infoq.com/" } </script> <script type="text/javascript" src="https://cdn.infoq.com/statics_s1_20250228123444/scripts/relatedVcr.min.js"></script> <script type="application/javascript"> var communityIds = ""; var topicIds = ""; VCR.loadAllVcrs(communityIds, topicIds); </script> <link rel="image_src" href="https://cdn.infoq.com/statics_s1_20250228123444/styles/static/images/logo/logo-big.jpg" /> <meta property="og:image" content="https://cdn.infoq.com/statics_s1_20250228123444/styles/static/images/logo/logo-big.jpg"/> <script type="text/javascript" src="https://cdn.infoq.com/statics_s1_20250228123444/scripts/infoq.js"></script> <script type="text/javascript"> document.addEventListener('DOMContentLoaded', function() { if (!window || !window.infoq) return infoq.init() }) </script> </head> <body > <!-- Google Tag Manager (noscript) --> <noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-W9GJ5DL" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript> <!-- End Google Tag Manager (noscript) --> <div class="intbt"> <a href="/int/bt/" title="bt">BT</a> </div> <script type="text/javascript"> var allCountries = [{"id":3,"name":"Afghanistan"},{"id":244,"name":"Åland"},{"id":6,"name":"Albania"},{"id":61,"name":"Algeria"},{"id":13,"name":"American Samoa"},{"id":1,"name":"Andorra"},{"id":9,"name":"Angola"},{"id":5,"name":"Anguilla"},{"id":11,"name":"Antarctica"},{"id":4,"name":"Antigua and Barbuda"},{"id":12,"name":"Argentina"},{"id":7,"name":"Armenia"},{"id":16,"name":"Aruba"},{"id":15,"name":"Australia"},{"id":14,"name":"Austria"},{"id":17,"name":"Azerbaijan"},{"id":31,"name":"Bahamas"},{"id":24,"name":"Bahrain"},{"id":20,"name":"Bangladesh"},{"id":19,"name":"Barbados"},{"id":35,"name":"Belarus"},{"id":21,"name":"Belgium"},{"id":36,"name":"Belize"},{"id":26,"name":"Benin"},{"id":27,"name":"Bermuda"},{"id":32,"name":"Bhutan"},{"id":29,"name":"Bolivia"},{"id":254,"name":"Bonaire, Sint Eustatius, and Saba"},{"id":18,"name":"Bosnia and Herzegovina"},{"id":34,"name":"Botswana"},{"id":33,"name":"Bouvet Island"},{"id":30,"name":"Brazil"},{"id":104,"name":"British Indian Ocean Territory"},{"id":28,"name":"Brunei Darussalam"},{"id":23,"name":"Bulgaria"},{"id":22,"name":"Burkina Faso"},{"id":25,"name":"Burundi"},{"id":114,"name":"Cambodia"},{"id":46,"name":"Cameroon"},{"id":37,"name":"Canada"},{"id":52,"name":"Cape Verde"},{"id":121,"name":"Cayman Islands"},{"id":40,"name":"Central African Republic"},{"id":207,"name":"Chad"},{"id":45,"name":"Chile"},{"id":47,"name":"China"},{"id":53,"name":"Christmas Island"},{"id":38,"name":"Cocos (Keeling) Islands"},{"id":48,"name":"Colombia"},{"id":116,"name":"Comoros"},{"id":39,"name":"Congo (Democratic Republic)"},{"id":41,"name":"Congo (People\u0027s Republic)"},{"id":44,"name":"Cook Islands"},{"id":49,"name":"Costa Rica"},{"id":43,"name":"Cote D\u0027Ivoire"},{"id":97,"name":"Croatia"},{"id":51,"name":"Cuba"},{"id":253,"name":"Curaçao"},{"id":54,"name":"Cyprus"},{"id":55,"name":"Czech Republic"},{"id":58,"name":"Denmark"},{"id":57,"name":"Djibouti"},{"id":59,"name":"Dominica"},{"id":60,"name":"Dominican Republic"},{"id":213,"name":"East Timor"},{"id":62,"name":"Ecuador"},{"id":64,"name":"Egypt"},{"id":203,"name":"El Salvador"},{"id":87,"name":"Equatorial Guinea"},{"id":66,"name":"Eritrea"},{"id":63,"name":"Estonia"},{"id":68,"name":"Ethiopia"},{"id":72,"name":"Falkland Islands (Malvinas)"},{"id":74,"name":"Faroe Islands"},{"id":71,"name":"Fiji"},{"id":70,"name":"Finland"},{"id":75,"name":"France"},{"id":80,"name":"French Guiana"},{"id":170,"name":"French Polynesia"},{"id":208,"name":"French Southern Territories"},{"id":76,"name":"Gabon"},{"id":84,"name":"Gambia"},{"id":79,"name":"Georgia"},{"id":56,"name":"Germany"},{"id":81,"name":"Ghana"},{"id":82,"name":"Gibraltar"},{"id":88,"name":"Greece"},{"id":83,"name":"Greenland"},{"id":78,"name":"Grenada"},{"id":86,"name":"Guadeloupe"},{"id":91,"name":"Guam"},{"id":90,"name":"Guatemala"},{"id":249,"name":"Guernsey"},{"id":85,"name":"Guinea"},{"id":92,"name":"Guinea-Bissau"},{"id":93,"name":"Guyana"},{"id":98,"name":"Haiti"},{"id":95,"name":"Heard Island and McDonald Islands"},{"id":96,"name":"Honduras"},{"id":94,"name":"Hong Kong"},{"id":99,"name":"Hungary"},{"id":107,"name":"Iceland"},{"id":103,"name":"India"},{"id":100,"name":"Indonesia"},{"id":106,"name":"Iran"},{"id":105,"name":"Iraq"},{"id":101,"name":"Ireland"},{"id":245,"name":"Isle of Man"},{"id":102,"name":"Israel"},{"id":108,"name":"Italy"},{"id":109,"name":"Jamaica"},{"id":111,"name":"Japan"},{"id":250,"name":"Jersey"},{"id":110,"name":"Jordan"},{"id":122,"name":"Kazakhstan"},{"id":112,"name":"Kenya"},{"id":115,"name":"Kiribati"},{"id":243,"name":"Kosovo"},{"id":120,"name":"Kuwait"},{"id":113,"name":"Kyrgyzstan"},{"id":123,"name":"Laos"},{"id":132,"name":"Latvia"},{"id":124,"name":"Lebanon"},{"id":129,"name":"Lesotho"},{"id":128,"name":"Liberia"},{"id":133,"name":"Libya"},{"id":126,"name":"Liechtenstein"},{"id":130,"name":"Lithuania"},{"id":131,"name":"Luxembourg"},{"id":143,"name":"Macau"},{"id":139,"name":"Macedonia"},{"id":137,"name":"Madagascar"},{"id":151,"name":"Malawi"},{"id":153,"name":"Malaysia"},{"id":150,"name":"Maldives"},{"id":140,"name":"Mali"},{"id":148,"name":"Malta"},{"id":138,"name":"Marshall Islands"},{"id":145,"name":"Martinique"},{"id":146,"name":"Mauritania"},{"id":149,"name":"Mauritius"},{"id":238,"name":"Mayotte"},{"id":152,"name":"Mexico"},{"id":73,"name":"Micronesia"},{"id":136,"name":"Moldova"},{"id":135,"name":"Monaco"},{"id":142,"name":"Mongolia"},{"id":246,"name":"Montenegro"},{"id":147,"name":"Montserrat"},{"id":134,"name":"Morocco"},{"id":154,"name":"Mozambique"},{"id":141,"name":"Myanmar"},{"id":155,"name":"Namibia"},{"id":164,"name":"Nauru"},{"id":163,"name":"Nepal"},{"id":161,"name":"Netherlands"},{"id":8,"name":"Netherlands Antilles"},{"id":156,"name":"New Caledonia"},{"id":166,"name":"New Zealand"},{"id":160,"name":"Nicaragua"},{"id":157,"name":"Niger"},{"id":159,"name":"Nigeria"},{"id":165,"name":"Niue"},{"id":158,"name":"Norfolk Island"},{"id":118,"name":"North Korea"},{"id":144,"name":"Northern Mariana Islands"},{"id":162,"name":"Norway"},{"id":167,"name":"Oman"},{"id":173,"name":"Pakistan"},{"id":180,"name":"Palau"},{"id":178,"name":"Palestinian Territory"},{"id":168,"name":"Panama"},{"id":171,"name":"Papua New Guinea"},{"id":181,"name":"Paraguay"},{"id":169,"name":"Peru"},{"id":172,"name":"Philippines"},{"id":176,"name":"Pitcairn"},{"id":174,"name":"Poland"},{"id":179,"name":"Portugal"},{"id":177,"name":"Puerto Rico"},{"id":182,"name":"Qatar"},{"id":183,"name":"Reunion"},{"id":184,"name":"Romania"},{"id":185,"name":"Russian Federation"},{"id":186,"name":"Rwanda"},{"id":193,"name":"Saint Helena"},{"id":117,"name":"Saint Kitts and Nevis"},{"id":125,"name":"Saint Lucia"},{"id":251,"name":"Saint Martin"},{"id":175,"name":"Saint Pierre and Miquelon"},{"id":229,"name":"Saint Vincent and the Grenadines"},{"id":247,"name":"Saint-Barthélemy"},{"id":236,"name":"Samoa"},{"id":198,"name":"San Marino"},{"id":202,"name":"Sao Tome and Principe"},{"id":187,"name":"Saudi Arabia"},{"id":199,"name":"Senegal"},{"id":248,"name":"Serbia"},{"id":189,"name":"Seychelles"},{"id":197,"name":"Sierra Leone"},{"id":192,"name":"Singapore"},{"id":252,"name":"Sint Maarten"},{"id":196,"name":"Slovakia"},{"id":194,"name":"Slovenia"},{"id":188,"name":"Solomon Islands"},{"id":200,"name":"Somalia"},{"id":239,"name":"South Africa"},{"id":89,"name":"South Georgia and the South Sandwich Islands"},{"id":119,"name":"South Korea"},{"id":255,"name":"South Sudan"},{"id":67,"name":"Spain"},{"id":127,"name":"Sri Lanka"},{"id":190,"name":"Sudan"},{"id":201,"name":"Suriname"},{"id":195,"name":"Svalbard and Jan Mayen"},{"id":205,"name":"Swaziland"},{"id":191,"name":"Sweden"},{"id":42,"name":"Switzerland"},{"id":204,"name":"Syria"},{"id":220,"name":"Taiwan"},{"id":211,"name":"Tajikistan"},{"id":221,"name":"Tanzania"},{"id":210,"name":"Thailand"},{"id":209,"name":"Togo"},{"id":212,"name":"Tokelau"},{"id":216,"name":"Tonga"},{"id":218,"name":"Trinidad and Tobago"},{"id":215,"name":"Tunisia"},{"id":217,"name":"Turkey"},{"id":214,"name":"Turkmenistan"},{"id":206,"name":"Turks and Caicos Islands"},{"id":219,"name":"Tuvalu"},{"id":223,"name":"Uganda"},{"id":222,"name":"Ukraine"},{"id":2,"name":"United Arab Emirates"},{"id":77,"name":"United Kingdom"},{"id":224,"name":"United States Minor Outlying Islands"},{"id":226,"name":"Uruguay"},{"id":225,"name":"USA"},{"id":227,"name":"Uzbekistan"},{"id":234,"name":"Vanuatu"},{"id":228,"name":"Vatican City (Holy See)"},{"id":230,"name":"Venezuela"},{"id":233,"name":"Vietnam"},{"id":231,"name":"Virgin Islands (British)"},{"id":232,"name":"Virgin Islands (U.S.)"},{"id":235,"name":"Wallis and Futuna"},{"id":65,"name":"Western Sahara"},{"id":237,"name":"Yemen"},{"id":241,"name":"Zaire"},{"id":240,"name":"Zambia"},{"id":242,"name":"Zimbabwe"}]; var gdprCountriesIds = [196,194,191,184,179,174,161,148,132,131,130,108,101,99,97,88,77,75,70,67,63,58,56,55,54,37,23,21,14]; </script> <section data-nosnippet class="section container subscribe-box hidden"> <div class="container__inner"> <div class="actions"> <div class="actions__left"> <h2>InfoQ Software Architects' Newsletter</h2> <span><p>A monthly overview of things you need to know as an architect or aspiring architect.</p> <p><a href="https://www.infoq.com/software-architects-newsletter#placeholderPastIssues">View an example</a></p> </span> <div class="newsletter__subscribe"> <form class="form gdpr" name="dataCollectCampaignNewsletterForm" id="dataCollectCampaignNewsletterForm" action="#" onsubmit="dataCollectNewsletter.saveSubscription(); return false;"> <div class="field newsletter__mail input__text input__no-label input__medium email"> <label for="email-dataCollectnewsletter-infoq" class="label field__label">Enter your e-mail address</label> <input id="email-dataCollectnewsletter-infoq" name="footerNewsletterEmail" placeholder="Enter your e-mail address" class="input field__input" type="email"/> <input type="text" name="emailH" id="input_email_h_d" aria-required="false" style="display:none !important" tabindex="-1" autocomplete="off"/> <input type="hidden" id="fnt_d" name="fnt_d" value="BwX4aBFpEnUocXMo"/> <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>Live Webinar and Q&amp;A: Architecting Scalable, Secure Multi-Agent Systems (Apr 8, 2025)</span> <a class="btn" href="/url/pb/cb7a965f-cf00-403d-9b45-779d1f95dd3f/" target="_blank" rel="nofollow"> Save Your Seat </a> </p> </div> <div class="actions__right"> <button aria-label="Close" class="close button button__unstyled button__icon icon icon__close-white icon--only close-top-promo">Close </button> </div> </div> </div> </section> <header class="header"> <button aria-label="Toggle Navigation" tabindex="0" class="burger header__toggle button">Toggle Navigation <span></span><span></span><span></span></button> <div class="header__container container"> <div class="container__inner"> <div data-nosnippet class="actions header__top"> <div class="actions__left"> <p class="header__desc my-0"> Facilitating the Spread of Knowledge and Innovation in Professional Software Development </p> <div class="button__dropdown dropdown header__more my-0 dropdown__center"> <button aria-label="English edition" class="button button__unstyled button__small">English edition </button> <div class="dropdown__holder"> <!----> <div class="dropdown__content"> <ul class="no-style dropdown__nav languagesEdition"> <li class="active"><a href="#" onclick="return false;">English edition</a></li> <li><a href="https://www.infoq.cn">Chinese edition</a></li> <li><a href="/jp/">Japanese edition</a></li> <li><a href="/fr/">French edition</a></li> </ul> </div> <!----> </div> </div> <a class="my-0 contribute-link" role="button" href="/write-for-infoq/" title="Write for InfoQ"> Write for InfoQ </a> </div> <div class="actions__right"> <div> <form id="searchForm" name="search-form" action="/search.action" enctype="multipart/form-data" class="search icon__search icon icon__green"> <div class="field search__bar input__text input__no-label input__small"> <label for="search" class="label field__label">Search</label> <input name="queryString" type="text" id="search" value="" placeholder="Search" class="input field__input"> <input type="hidden" name="page" value="1"/> <input type="hidden" size="15" name="searchOrder"> </div> <input value="Search" type="submit" class="search__go"> </form> </div> <div class="button__dropdown dropdown user__login"> <button aria-label="Sign Up / Login" class="button button__small button__green button__arrow arrow__true button__icon icon icon__user icon--only">Sign Up / Login</button> <div class="dropdown__holder"> <div class="dropdown__content"> <div class="login__dropdown"> <div class="login__module"> <div class="login__username"> <form id="login-form" data-vv-scope="login" class="login__form form" action="/login.action"> <input type="hidden" id="loginWidgetOrigin" name="loginWidgetOrigin" value="mainLogin"/> <input type="hidden" name="fromP13N" id="isP13n" value="false"/> <input type="hidden" name="fromP13NId" id="p13n-id" value=""/> <input type="hidden" name="fromP13NType" id="p13n-type" value=""/> <div class="field form__row input__text input__small" data-vv-as="Email" data-vv-scope="login"> <label for="email" class="label field__label">Email</label> <input type="text" id="email" placeholder="" class="input field__input" name="username"> </div> <div class="field form__row input__password input__small" data-vv-as="Password" data-vv-scope="login"> <label for="password" class="label field__label">Password</label> <input type="password" id="password" placeholder="" class="input field__input" name="password"> <p data-message="resultMessage"></p> </div> <input type="submit" value="Login" class="form__row button button__medium button__green"> <div class="login__actions"> <button aria-label="Forgot password ?" class="forgot button button__unstyled">Forgot password ?</button> </div> </form> <form id="forgot-password-form" data-vv-scope="forgot" class="forgot__form form" action="/resetpasswordinit.action" onsubmit="UserActions_Login.showMessage($(this),JSi18n.login_sendingRequest);"> <div data-vv-as="Email" data-vv-scope="forgot" class="field form__row input__text input__small"> <label for="forgotten_email" class="label field__label">InfoQ Account Email</label> <input id="forgotten_email" name="email" placeholder="" class="input field__input" type="text" onkeyup="UserActions_ResetPass.checkInputStatus('forgotten_email','forgotPassMessage',JSi18n.login_invalid_email,'submit_resetPass');"> <p id="forgotPassMessage" data-message="resultMessage"></p> </div> <input type="submit" id="submit_resetPass" value="Send Recovery Email" class="button button__medium button__green" onclick="return UserActions_ResetPass.checkInputStatus('forgotten_email','forgotPassMessage',JSi18n.login_invalid_email,'submit_resetPass');"> <p class="login__actions"> <button aria-label="Back to login" class="back-to-login button button__unstyled">Back to login</button> </p> </form> <form id="email-revalidation-form" data-vv-scope="revalidation" class="revalidation__form form" action="/reactivate.action" onsubmit="UserActions_Login.showMessage($(this),JSi18n.login_sendingRequest);"> <div data-vv-as="Email" data-vv-scope="revalidation" class="field form__row input__text input__small"> <label for="revalidated_email" class="label field__label">Resend Activation</label> <input id="revalidated_email" name="email" placeholder="" class="input field__input" type="text" onkeyup="UserActions_ResetPass.checkInputStatus('revalidated_email','emailRevalidMessage',JSi18n.login_invalid_email,'submit_resetPass');"> <p id="emailRevalidMessage" data-message="resultMessage"></p> </div> <input type="submit" value="Resend" class="button button__medium button__green" onclick="return UserActions_ResetPass.checkInputStatus('revalidated_email','emailRevalidMessage',JSi18n.login_invalid_email,'submit_resetPass');"> <p class="login__actions"> <button id="show-login" aria-label="Back to login" class="back-to-login button button__unstyled">Back to login</button> </p> </form> </div> <div class="login__social"> <h4 class="heading">Login with:</h4> <div class="social__connect form__row login__socials"> <a href="/social/googleLogin.action?fl=login" onclick="return UserActions_Login.addLoginInfo(this);" class="button button__medium button__gray button__icon icon icon__google" title="Login with Google">Google</a> <a href="/social/liveLogin.action?fl=login" onclick="return UserActions_Login.addLoginInfo(this);" class="button button__medium button__icon icon icon__microsoft" title="Login with Microsoft">Microsoft</a> <a href="/twitter-info" class="button button__medium button__icon icon icon__twitter" title="Login with Twitter">Twitter</a> <a href="/social/facebookLogin.action?fl=login" onclick="return UserActions_Login.addLoginInfo(this);" class="button button__medium button__icon icon icon__fb" title="Login with Facebook">Facebook</a> </div> </div> <div class="login__signup"> <h4 class="heading">Don't have an InfoQ account?</h4> <a href="/reginit.action?" onclick="return UserActions_Login.addLoginInfo(this);" class="button button__medium button__green">Sign Up</a> </div> </div> </div> </div> </div> </div> </div> </div> <div class="header__middle"> <div class="logo header__logo"> <a href="/" class="logo__symbol active"> Logo - Back to homepage </a> </div> <div class="content-items"> <a href="/news/" class="icon icon__news">News</a> <a href="/articles/" class="icon icon__articles">Articles</a> <a href="/presentations/" class="icon icon__presentations">Presentations</a> <a href="/podcasts/" class="icon icon__podcasts">Podcasts</a> <a href="/minibooks/" class="icon icon__guides">Guides</a> </div> <div class="header__items columns"> <div> <h3 class="widget__heading">Topics</h3> <nav class="nav header__nav topics" data-trk-ref="header_personas"> <div class="has--subnav li-nav"> <a href="/development/" title="Development" class="nav__category">Development</a> <div class="nav__subnav subnav"> <ul class="subnav__categories no-style"> <li><a href="/java/" title="Java">Java</a></li> <li><a href="/kotlin/" title="Kotlin">Kotlin</a></li> <li><a href="/dotnet/" title=".Net">.Net</a></li> <li><a href="/c_sharp/" title="C#">C#</a></li> <li><a href="/swift/" title="Swift">Swift</a></li> <li><a href="/golang/" title="Go">Go</a></li> <li><a href="/rust/" title="Rust">Rust</a></li> <li><a href="/javascript/" title="JavaScript">JavaScript</a></li> </ul> <div class="subnav__content" data-id="6815"> <div class="heading__container actions"> <div class="actions__left"> <h3 class="heading section__heading">Featured in Development</h3> </div> </div> <ul data-size="large" data-horizontal="true" data-tax="" taxonomy="articles" class="cards no-style"> <li> <div class="card__content"> <div class="card__data"> <h4 class="card__title"> <a href="/presentations/zero-trust-devsecops">A Zero Trust Future for Applications: Practical Implementation and Pitfalls</a> </h4> <p class="card__excerpt">Ashish Rajan shares a practical guide to working on zero trust, exploring where it fails even before it starts and where engineers should see quick wins. Surprisingly, the answer is not really DevSecOps.</p> <div class="card__footer"></div> </div> <a href="/presentations/zero-trust-devsecops" class="card__header"> <img loading="lazy" alt="A Zero Trust Future for Applications: Practical Implementation and Pitfalls" src="https://imgopt.infoq.com/fit-in/100x100/filters:quality(80)/presentations/zero-trust-devsecops/en/smallimage/ashish-rajan-small-1738148760241.jpeg" 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="/articles/architectural-experimentation-insurance">If Architectural Experimentation Is So Great, Why Aren&rsquo;t You Doing It?</a> </h4> <p class="card__excerpt">Architectural experimentation sounds like a great idea, yet it does not seem to be used very frequently. In this article, we will explore some of the reasons why teams don’t use this powerful tool more often, and what they can do about leveraging that tool for successful outcomes.</p> <div class="card__footer"></div> </div> <a href="/articles/architectural-experimentation-insurance" class="card__header"> <img loading="lazy" alt="If Architectural Experimentation Is So Great, Why Aren&rsquo;t You Doing It?" src="https://imgopt.infoq.com/fit-in/100x100/filters:quality(80)/articles/architectural-experimentation-insurance/en/smallimage/architectural-experimentation-thumbnail-1740472356165.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/secure-ai-powered-early-detection-system">Secure AI-Powered Early Detection System for Medical Data Analysis &amp; Diagnosis</a> </h4> <p class="card__excerpt">In this article, author discusses the techniques for securing AI applications in healthcare with an use case of early detection system for medical data analysis &amp; diagnosis. The proposed layered architecture includes application components to support secure computation, ai modeling, governance and compliance, and monitoring and auditing.</p> <div class="card__footer"></div> </div> <a href="/articles/secure-ai-powered-early-detection-system" class="card__header"> <img loading="lazy" alt="Secure AI-Powered Early Detection System for Medical Data Analysis &amp; Diagnosis" src="https://imgopt.infoq.com/fit-in/100x100/filters:quality(80)/articles/secure-ai-powered-early-detection-system/en/smallimage/designing-architecture-ai-models-thumbnail-1740475990469.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="/podcasts/resilience-observability-automation">Resilience, Observability and Unintended Consequences of Automation</a> </h4> <p class="card__excerpt">In this podcast, Shane Hastie, the Lead Editor for Culture &amp; Methods, spoke to Courtney Nash about her research on the unintended consequences of automation in software systems, the importance of learning from incidents, and maintaining human expertise in complex systems.</p> <div class="card__footer"></div> </div> <a href="/podcasts/resilience-observability-automation" class="card__header"> <img loading="lazy" alt="Resilience, Observability and Unintended Consequences of Automation" src="https://imgopt.infoq.com/fit-in/100x100/filters:quality(80)/podcasts/resilience-observability-automation/en/smallimage/engineering-culture-podcast-thumbnail-1740403416752.jpg" 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/devsecops-ai">Efficient DevSecOps Workflows with a Little Help from AI</a> </h4> <p class="card__excerpt">Michael Friedrich tells a story about experienced pain points, wasted hours debugging and solving, and learning how a little help from AI makes DevSecOps workflows efficient again.</p> <div class="card__footer"></div> </div> <a href="/presentations/devsecops-ai" class="card__header"> <img loading="lazy" alt="Efficient DevSecOps Workflows with a Little Help from AI" src="https://imgopt.infoq.com/fit-in/100x100/filters:quality(80)/presentations/devsecops-ai/en/smallimage/MichaelFriedrich-small-1734515745316.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="/about-c4media" title="About C4Media"> About C4Media </a> </li> <li> <a rel="noreferrer noopener" href="https://c4media.com/diversity" title="Diversity" target="_blank">Diversity</a> </li> </ul> </div> <div> <h3 class="widget__heading">Choose your language</h3> <ul class="language__switcher no-style"> <li class="active"><a href="#" onclick="return false;" title="InfoQ English">En</a></li> <li><a href="https://www.infoq.cn">中文</a></li> <li><a href="/jp/">日本</a></li> <li><a href="/fr/">Fr</a></li> </ul> </div> </div> </div> <div data-nosnippet class="actions header__bottom header__bottom__events"> <div class="actions__left"> <div class="header__events-all"> <a href="https://qconlondon.com/?utm_source=infoq&utm_medium=referral&utm_campaign=homepageheader_qlondon25" rel="nofollow" target="_blank" class="header__event-slot"> <picture><source srcset="https://imgopt.infoq.com/eyJidWNrZXQiOiAiYXNzZXRzLmluZm9xLmNvbSIsImtleSI6ICJ3ZWIvaGVhZGVyL2NvbmZlcmVuY2VzLzIwMjUvbG9uZG9uLXRvcC11cGRhdGVkMi5qcGciLCJlZGl0cyI6IHsid2VicCI6IHsgInF1YWxpdHkiOjgwfX19" type="image/webp"><source srcset="https://imgopt.infoq.com/eyJidWNrZXQiOiAiYXNzZXRzLmluZm9xLmNvbSIsImtleSI6ICJ3ZWIvaGVhZGVyL2NvbmZlcmVuY2VzLzIwMjUvbG9uZG9uLXRvcC11cGRhdGVkMi5qcGciLCJlZGl0cyI6IHsianBlZyI6IHsgInF1YWxpdHkiOjgwfX19" type="image/webp"><img src="https://imgopt.infoq.com/eyJidWNrZXQiOiAiYXNzZXRzLmluZm9xLmNvbSIsImtleSI6ICJ3ZWIvaGVhZGVyL2NvbmZlcmVuY2VzLzIwMjUvbG9uZG9uLXRvcC11cGRhdGVkMi5qcGciLCJlZGl0cyI6IHsianBlZyI6IHsgInF1YWxpdHkiOjgwfX19" loading="lazy" width="40px" height="40px" alt="QCon London - image"></picture> <div> <span>QCon London</span> <p>Discover emerging trends, insights, and real-world best practices in software development &amp; tech leadership. Join now.</p> </div> </a> <a href="https://devsummit.infoq.com/conference/boston2025?utm_source=infoq&utm_medium=referral&utm_campaign=homepageheader_idsboston25" rel="nofollow" target="_blank" class="header__event-slot"> <picture><source srcset="https://imgopt.infoq.com/eyJidWNrZXQiOiAiYXNzZXRzLmluZm9xLmNvbSIsImtleSI6ICJ3ZWIvaGVhZGVyL2NvbmZlcmVuY2VzLzIwMjUvSW5mb1FEZXZTdW1taXQtdG9wLmpwZyIsImVkaXRzIjogeyJ3ZWJwIjogeyAicXVhbGl0eSI6ODB9fX0=" type="image/webp"><source srcset="https://imgopt.infoq.com/eyJidWNrZXQiOiAiYXNzZXRzLmluZm9xLmNvbSIsImtleSI6ICJ3ZWIvaGVhZGVyL2NvbmZlcmVuY2VzLzIwMjUvSW5mb1FEZXZTdW1taXQtdG9wLmpwZyIsImVkaXRzIjogeyJqcGVnIjogeyAicXVhbGl0eSI6ODB9fX0=" type="image/webp"><img src="https://imgopt.infoq.com/eyJidWNrZXQiOiAiYXNzZXRzLmluZm9xLmNvbSIsImtleSI6ICJ3ZWIvaGVhZGVyL2NvbmZlcmVuY2VzLzIwMjUvSW5mb1FEZXZTdW1taXQtdG9wLmpwZyIsImVkaXRzIjogeyJqcGVnIjogeyAicXVhbGl0eSI6ODB9fX0=" loading="lazy" width="40px" height="40px" alt="InfoQ Dev Summit Boston - image"></picture> <div> <span>InfoQ Dev Summit Boston</span> <p>Learn how senior software developers are solving the challenges you face. Register now with early bird tickets.</p> </div> </a> <a href="https://devsummit.infoq.com/conference/munich2025?utm_source=infoq&utm_medium=referral&utm_campaign=homepageheader_idsmunich25" rel="nofollow" target="_blank" class="header__event-slot"> <picture><source srcset="https://imgopt.infoq.com/eyJidWNrZXQiOiAiYXNzZXRzLmluZm9xLmNvbSIsImtleSI6ICJ3ZWIvaGVhZGVyL2NvbmZlcmVuY2VzLzIwMjUvSURTLU11bmljaC10b3AuanBnIiwiZWRpdHMiOiB7IndlYnAiOiB7ICJxdWFsaXR5Ijo4MH19fQ==" type="image/webp"><source srcset="https://imgopt.infoq.com/eyJidWNrZXQiOiAiYXNzZXRzLmluZm9xLmNvbSIsImtleSI6ICJ3ZWIvaGVhZGVyL2NvbmZlcmVuY2VzLzIwMjUvSURTLU11bmljaC10b3AuanBnIiwiZWRpdHMiOiB7ImpwZWciOiB7ICJxdWFsaXR5Ijo4MH19fQ==" type="image/webp"><img src="https://imgopt.infoq.com/eyJidWNrZXQiOiAiYXNzZXRzLmluZm9xLmNvbSIsImtleSI6ICJ3ZWIvaGVhZGVyL2NvbmZlcmVuY2VzLzIwMjUvSURTLU11bmljaC10b3AuanBnIiwiZWRpdHMiOiB7ImpwZWciOiB7ICJxdWFsaXR5Ijo4MH19fQ==" loading="lazy" width="40px" height="40px" alt="InfoQ Dev Summit Munich - image"></picture> <div> <span>InfoQ Dev Summit Munich</span> <p>Learn practical solutions to today's most pressing software challenges. Register now with early bird tickets.</p> </div> </a> <a href="https://qconsf.com/?utm_source=infoq&utm_medium=referral&utm_campaign=homepageheader_qsf25" rel="nofollow" target="_blank" class="header__event-slot"> <picture><source srcset="https://imgopt.infoq.com/eyJidWNrZXQiOiAiYXNzZXRzLmluZm9xLmNvbSIsImtleSI6ICJ3ZWIvaGVhZGVyL2NvbmZlcmVuY2VzLzIwMjUvU0YtdG9wLmpwZyIsImVkaXRzIjogeyJ3ZWJwIjogeyAicXVhbGl0eSI6ODB9fX0=" type="image/webp"><source srcset="https://imgopt.infoq.com/eyJidWNrZXQiOiAiYXNzZXRzLmluZm9xLmNvbSIsImtleSI6ICJ3ZWIvaGVhZGVyL2NvbmZlcmVuY2VzLzIwMjUvU0YtdG9wLmpwZyIsImVkaXRzIjogeyJqcGVnIjogeyAicXVhbGl0eSI6ODB9fX0=" type="image/webp"><img src="https://imgopt.infoq.com/eyJidWNrZXQiOiAiYXNzZXRzLmluZm9xLmNvbSIsImtleSI6ICJ3ZWIvaGVhZGVyL2NvbmZlcmVuY2VzLzIwMjUvU0YtdG9wLmpwZyIsImVkaXRzIjogeyJqcGVnIjogeyAicXVhbGl0eSI6ODB9fX0=" loading="lazy" width="40px" height="40px" alt="QCon San Francisco - image"></picture> <div> <span>QCon San Francisco</span> <p>Explore insights, real-world best practices and solutions in software development & leadership. Register now.</p> </div> </a> </div> </div> <!----> </div> </div> </div> </header> <!-- ####### CONTENT START ######### --> <main> <div class="homepage" data-trk-ref="hover_homepage_index"> <h1 class="display-none">InfoQ Homepage</h1> <section class="section container homepage__news"> <div class="container__inner columns"> <div id="newsGridSection" data-col="2/3"> <div class="items"> <div class="heading__container actions"> <div class="actions__left"> <h2 class="heading section__heading"> <a href="/news/">News</a> </h2> </div> </div> <div class="items__content"> <div class="items__cards"> <ul data-size="large" data-hoverables="true" data-tax="news" data-cols="2" class="cards no-style"> <li> <div class="card__content"> <div class="card__data"> <h4 class="card__title"> <a href="/news/2025/03/aws-cdk-garbage-collection/"> AWS Introduces CDK Garbage Collection </a> </h4> <div class="card__footer"> <div class="card__details"> <div class="card__authors authors"> <span> <a href="/profile/Renato-Losio/" data-id="author-Renato-Losio">Renato Losio</a> </span> </div> <span class="card__date date"> on <span> Mar 03 </span> </span> </div> </div> </div> </div> </li> <li> <div class="card__content"> <div class="card__data"> <h4 class="card__title"> <a href="/news/2025/03/flux-gitops-release/"> Flux v2.5 Release: Expanding GitOps Capabilities with CEL Integration and GitHub App Auth </a> </h4> <div class="card__footer"> <div class="card__details"> <div class="card__authors authors"> <span> <a href="/profile/Claudio-Masolo/" data-id="author-Claudio-Masolo">Claudio Masolo</a> </span> </div> <span class="card__date date"> on <span> Mar 03 </span> </span> </div> </div> </div> </div> </li> <li> <div class="card__content"> <div class="card__data"> <h4 class="card__title"> <a href="/news/2025/03/java-news-roundup-feb24-2025/"> Java News Roundup: Stable Values, Spring Modulith, Open Liberty, Quarkus, JReleaser, Gradle </a> </h4> <div class="card__footer"> <div class="card__details"> <div class="card__authors authors"> <span> <a href="/profile/Michael-Redlich/" data-id="author-Michael-Redlich">Michael Redlich</a> </span> </div> <span class="card__date date"> on <span> Mar 03 </span> </span> </div> </div> </div> </div> </li> <li> <div class="card__content"> <div class="card__data"> <h4 class="card__title"> <a href="/news/2025/03/meta-suports-data-logs/"> Meta Enhances Download Your Information Tool with Data Logs </a> </h4> <div class="card__footer"> <div class="card__details"> <div class="card__authors authors"> <span> <a href="/profile/Aditya-Kulkarni/" data-id="author-Aditya-Kulkarni">Aditya Kulkarni</a> </span> </div> <span class="card__date date"> on <span> Mar 03 </span> </span> </div> </div> </div> </div> </li> <li> <div class="card__content"> <div class="card__data"> <h4 class="card__title"> <a href="/news/2025/03/net-aspire-91-dashboard/"> .NET Aspire 9.1 Improves Dashboard Features </a> </h4> <div class="card__footer"> <div class="card__details"> <div class="card__authors authors"> <span> <a href="/profile/Edin-Kapi%C4%87/" data-id="author-Edin-Kapić">Edin Kapić</a> </span> </div> <span class="card__date date"> on <span> Mar 03 </span> </span> </div> </div> </div> </div> </li> <li> <div class="card__content"> <div class="card__data"> <h4 class="card__title"> <a href="/news/2025/03/ibm-granite-3-2/"> IBM Granite 3.2 Brings New Vision Language Model, Chain of Thought Reasoning, Improved TimeSeries </a> </h4> <div class="card__footer"> <div class="card__details"> <div class="card__authors authors"> <span> <a href="/profile/Sergio-De-Simone/" data-id="author-Sergio-De-Simone">Sergio De Simone</a> </span> </div> <span class="card__date date"> on <span> Mar 02 </span> </span> </div> </div> </div> </div> </li> <li> <div class="card__content"> <div class="card__data"> <h4 class="card__title"> <a href="/news/2025/03/cloudflare-incident-r2/"> How a Manual Remediation for a Phishing URL Took down Cloudflare R2 </a> </h4> <div class="card__footer"> <div class="card__details"> <div class="card__authors authors"> <span> <a href="/profile/Renato-Losio/" data-id="author-Renato-Losio">Renato Losio</a> </span> </div> <span class="card__date date"> on <span> Mar 01 </span> </span> </div> </div> </div> </div> </li> <li> <div class="card__content"> <div class="card__data"> <h4 class="card__title"> <a href="/news/2025/03/gitlab-vulnerability-tracking/"> GitLab Introduces Advanced Vulnerability Tracking to Tackle Code Volatility and Double Reporting </a> </h4> <div class="card__footer"> <div class="card__details"> <div class="card__authors authors"> <span> <a href="/profile/Aditya-Kulkarni/" data-id="author-Aditya-Kulkarni">Aditya Kulkarni</a> </span> </div> <span class="card__date date"> on <span> Mar 01 </span> </span> </div> </div> </div> </div> </li> </ul> <a href="/news/" class="button__more button button__has-transition button__arrow arrow__right"> MORE NEWS </a> </div> </div> </div> </div> <div data-col="1/3"> <div id="mostPopularSection" class="widget popular"> <div class="heading__container actions"> <div class="actions__left"> <h2 class="heading icon icon__popular">Trending</h2> </div> </div> <div class="tabs" id="trending"> <div class="tab" data-title="10 days" > <ol data-size="xs" data-cols="1" class="cards popular__cards"> <li class="news"> <div class="card__content"> <span class="card__icon">Icon</span> <div class="card__data"> <h5 class="card__title"> <!-- section: tendays pageviews: 23463 publication date: Feb 27, 2025--> <a href="/news/2025/02/microsoft-majorana-quantum-chip/"> Microsoft Unveils the First Topological Quantum Chip Majorana 1 </a> </h5> <div class="card__footer"></div> </div> </div> </li> <li class="news"> <div class="card__content"> <span class="card__icon">Icon</span> <div class="card__data"> <h5 class="card__title"> <!-- section: tendays pageviews: 15644 publication date: Feb 24, 2025--> <a href="/news/2025/02/docker-bake-ga/"> Farewell to Build Scripts as Docker Bake Goes GA </a> </h5> <div class="card__footer"></div> </div> </div> </li> <li class="news"> <div class="card__content"> <span class="card__icon">Icon</span> <div class="card__data"> <h5 class="card__title"> <!-- section: tendays pageviews: 5890 publication date: Feb 28, 2025--> <a href="/news/2025/02/kube-resource-orchestrator/"> Cloud Giants Collaborate on New Kubernetes Resource Management Tool </a> </h5> <div class="card__footer"></div> </div> </div> </li> <li class="podcasts"> <div class="card__content"> <span class="card__icon">Icon</span> <div class="card__data"> <h5 class="card__title"> <!-- section: tendays pageviews: 3568 publication date: Feb 24, 2025--> <a href="/podcasts/facilitating-software-architecture/"> Facilitating Software Architecture with Andrew Harmel-Law </a> </h5> <div class="card__footer"></div> </div> </div> </li> <li class="news"> <div class="card__content"> <span class="card__icon">Icon</span> <div class="card__data"> <h5 class="card__title"> <!-- section: tendays pageviews: 2607 publication date: Feb 24, 2025--> <a href="/news/2025/02/monzo-stand-in/"> How Monzo Bank Built a Cost-Effective, Unorthodox Backup System to Ensure Resilient Banking </a> </h5> <div class="card__footer"></div> </div> </div> </li> <li class="news"> <div class="card__content"> <span class="card__icon">Icon</span> <div class="card__data"> <h5 class="card__title"> <!-- section: tendays pageviews: 2590 publication date: Feb 22, 2025--> <a href="/news/2025/02/valkey-glide-az-affinity-routing/"> AWS Reduces Latency and Costs for Key/Value Datastores with AZ Affinity Routing and GLIDE Valkey </a> </h5> <div class="card__footer"></div> </div> </div> </li> <li class="news"> <div class="card__content"> <span class="card__icon">Icon</span> <div class="card__data"> <h5 class="card__title"> <!-- section: tendays pageviews: 2339 publication date: Feb 24, 2025--> <a href="/news/2025/02/java-news-roundup-feb17-2025/"> Java News Roundup: NetBeans 25, Payara Platform, Hibernate Reactive, Gradle </a> </h5> <div class="card__footer"></div> </div> </div> </li> <li class="news"> <div class="card__content"> <span class="card__icon">Icon</span> <div class="card__data"> <h5 class="card__title"> <!-- section: tendays pageviews: 2163 publication date: Feb 24, 2025--> <a href="/news/2025/02/spring-news-roundup-feb17-2025/"> Spring News Roundup: Milestone Releases of Boot, Security, Auth Server, Integration, AI and AMQP </a> </h5> <div class="card__footer"></div> </div> </div> </li> <li class="news"> <div class="card__content"> <span class="card__icon">Icon</span> <div class="card__data"> <h5 class="card__title"> <!-- section: tendays pageviews: 1993 publication date: Feb 23, 2025--> <a href="/news/2025/02/amazon-s3-ransomware/"> How to Defend Amazon S3 Buckets from Ransomware Exploiting SSE-C Encryption </a> </h5> <div class="card__footer"></div> </div> </div> </li> <li class="news"> <div class="card__content"> <span class="card__icon">Icon</span> <div class="card__data"> <h5 class="card__title"> <!-- section: tendays pageviews: 1778 publication date: Feb 26, 2025--> <a href="/news/2025/02/github-copilot-extensions/"> GitHub Copilot Extensions Integrate IDEs with External Services </a> </h5> <div class="card__footer"></div> </div> </div> </li> <li class="articles"> <div class="card__content"> <span class="card__icon">Icon</span> <div class="card__data"> <h5 class="card__title"> <!-- section: tendays pageviews: 1671 publication date: Feb 24, 2025--> <a href="/articles/prompt-engineering/"> Prompt Engineering: Challenges, Strengths, and Its Place in Software Development's Future </a> </h5> <div class="card__footer"></div> </div> </div> </li> <li class="podcasts"> <div class="card__content"> <span class="card__icon">Icon</span> <div class="card__data"> <h5 class="card__title"> <!-- section: tendays pageviews: 1099 publication date: Feb 28, 2025--> <a href="/podcasts/resilience-observability-automation/"> Resilience, Observability and Unintended Consequences of Automation </a> </h5> <div class="card__footer"></div> </div> </div> </li> </ol> </div> <div class="tab" data-title="40 days" > <ol data-size="xs" data-cols="1" class="cards popular__cards"> <li class="news"> <div class="card__content"> <span class="card__icon">Icon</span> <div class="card__data"> <h5 class="card__title"> <!-- section: fortydays pageviews: 40786 publication date: Feb 06, 2025--> <a href="/news/2025/02/amazon-eventbridge-cross-account/"> Amazon EventBridge Event Bus Cross-Account Event Delivery </a> </h5> <div class="card__footer"></div> </div> </div> </li> <li class="news"> <div class="card__content"> <span class="card__icon">Icon</span> <div class="card__data"> <h5 class="card__title"> <!-- section: fortydays pageviews: 23463 publication date: Feb 27, 2025--> <a href="/news/2025/02/microsoft-majorana-quantum-chip/"> Microsoft Unveils the First Topological Quantum Chip Majorana 1 </a> </h5> <div class="card__footer"></div> </div> </div> </li> <li class="news"> <div class="card__content"> <span class="card__icon">Icon</span> <div class="card__data"> <h5 class="card__title"> <!-- section: fortydays pageviews: 15852 publication date: Jan 31, 2025--> <a href="/news/2025/01/deepseek-ai-janus/"> DeepSeek Release Another Open-Source AI Model, Janus Pro </a> </h5> <div class="card__footer"></div> </div> </div> </li> <li class="news"> <div class="card__content"> <span class="card__icon">Icon</span> <div class="card__data"> <h5 class="card__title"> <!-- section: fortydays pageviews: 15644 publication date: Feb 24, 2025--> <a href="/news/2025/02/docker-bake-ga/"> Farewell to Build Scripts as Docker Bake Goes GA </a> </h5> <div class="card__footer"></div> </div> </div> </li> <li class="news"> <div class="card__content"> <span class="card__icon">Icon</span> <div class="card__data"> <h5 class="card__title"> <!-- section: fortydays pageviews: 12814 publication date: Feb 19, 2025--> <a href="/news/2025/02/meta-ach-tool/"> Meta Introduces LLM-Powered Tool for Software Testing </a> </h5> <div class="card__footer"></div> </div> </div> </li> <li class="news"> <div class="card__content"> <span class="card__icon">Icon</span> <div class="card__data"> <h5 class="card__title"> <!-- section: fortydays pageviews: 11127 publication date: Jan 23, 2025--> <a href="/news/2025/01/aws-bedrock-multi-agent-ai/"> Amazon Bedrock Introduces Multi-Agent Systems (MAS) with Open Source Framework Integration </a> </h5> <div class="card__footer"></div> </div> </div> </li> <li class="articles"> <div class="card__content"> <span class="card__icon">Icon</span> <div class="card__data"> <h5 class="card__title"> <!-- section: fortydays pageviews: 9958 publication date: Jan 29, 2025--> <a href="/articles/rethinking-medallion-architecture/"> The End of the Bronze Age: Rethinking the Medallion Architecture </a> </h5> <div class="card__footer"></div> </div> </div> </li> <li class="news"> <div class="card__content"> <span class="card__icon">Icon</span> <div class="card__data"> <h5 class="card__title"> <!-- section: fortydays pageviews: 9137 publication date: Feb 13, 2025--> <a href="/news/2025/02/java-24-so-far/"> JDK 24 and JDK 25: What We Know So Far </a> </h5> <div class="card__footer"></div> </div> </div> </li> <li class="news"> <div class="card__content"> <span class="card__icon">Icon</span> <div class="card__data"> <h5 class="card__title"> <!-- section: fortydays pageviews: 7674 publication date: Feb 19, 2025--> <a href="/news/2025/02/spanner-graph-is-now-ga/"> Google Releases Spanner Graph into General Availability </a> </h5> <div class="card__footer"></div> </div> </div> </li> <li class="news"> <div class="card__content"> <span class="card__icon">Icon</span> <div class="card__data"> <h5 class="card__title"> <!-- section: fortydays pageviews: 5890 publication date: Feb 28, 2025--> <a href="/news/2025/02/kube-resource-orchestrator/"> Cloud Giants Collaborate on New Kubernetes Resource Management Tool </a> </h5> <div class="card__footer"></div> </div> </div> </li> <li class="news"> <div class="card__content"> <span class="card__icon">Icon</span> <div class="card__data"> <h5 class="card__title"> <!-- section: fortydays pageviews: 5040 publication date: Jan 28, 2025--> <a href="/news/2025/01/meta-large-concept-model/"> Meta Open-Sources Large Concept Model, a Language Model That Predicts Entire Sentences </a> </h5> <div class="card__footer"></div> </div> </div> </li> <li class="podcasts"> <div class="card__content"> <span class="card__icon">Icon</span> <div class="card__data"> <h5 class="card__title"> <!-- section: fortydays pageviews: 4409 publication date: Feb 17, 2025--> <a href="/podcasts/software-fail-recover-matters/"> Your Software Will Fail; It is How You Recover That Matters: a Conversation with Randy Shoup </a> </h5> <div class="card__footer"></div> </div> </div> </li> </ol> </div> <div class="tab" data-title="6 months" > <ol data-size="xs" data-cols="1" class="cards popular__cards"> <li class="news"> <div class="card__content"> <span class="card__icon">Icon</span> <div class="card__data"> <h5 class="card__title"> <!-- section: sixmonths pageviews: 50361 publication date: Oct 30, 2024--> <a href="/news/2024/10/aws-lambda-code-editor/"> AWS Lambda Introduces a Visual Studio Code-Based Editor with Advanced Features and AI Integration </a> </h5> <div class="card__footer"></div> </div> </div> </li> <li class="news"> <div class="card__content"> <span class="card__icon">Icon</span> <div class="card__data"> <h5 class="card__title"> <!-- section: sixmonths pageviews: 40786 publication date: Feb 06, 2025--> <a href="/news/2025/02/amazon-eventbridge-cross-account/"> Amazon EventBridge Event Bus Cross-Account Event Delivery </a> </h5> <div class="card__footer"></div> </div> </div> </li> <li class="news"> <div class="card__content"> <span class="card__icon">Icon</span> <div class="card__data"> <h5 class="card__title"> <!-- section: sixmonths pageviews: 39389 publication date: Nov 01, 2024--> <a href="/news/2024/11/cloudflare-workers-durable-scale/"> Cloudflare Introduces Workflows for Building Scalable Resilient Multi-Step Applications </a> </h5> <div class="card__footer"></div> </div> </div> </li> <li class="news"> <div class="card__content"> <span class="card__icon">Icon</span> <div class="card__data"> <h5 class="card__title"> <!-- section: sixmonths pageviews: 38229 publication date: Sep 14, 2024--> <a href="/news/2024/09/amazon-storage-browser-s3/"> Amazon Introduces Storage Browser for S3 </a> </h5> <div class="card__footer"></div> </div> </div> </li> <li class="news"> <div class="card__content"> <span class="card__icon">Icon</span> <div class="card__data"> <h5 class="card__title"> <!-- section: sixmonths pageviews: 36509 publication date: Nov 15, 2024--> <a href="/news/2024/11/aws-s3-static-website-hosting/"> AWS Amplify and Amazon S3 Integration Simplifies Static Website Hosting </a> </h5> <div class="card__footer"></div> </div> </div> </li> <li class="news"> <div class="card__content"> <span class="card__icon">Icon</span> <div class="card__data"> <h5 class="card__title"> <!-- section: sixmonths pageviews: 29069 publication date: Oct 23, 2024--> <a href="/news/2024/10/azure-confidential-vms-nvidia/"> Microsoft Launches Azure Confidential VMs with NVIDIA Tensor Core GPUs for Enhanced Secure Workloads </a> </h5> <div class="card__footer"></div> </div> </div> </li> <li class="news"> <div class="card__content"> <span class="card__icon">Icon</span> <div class="card__data"> <h5 class="card__title"> <!-- section: sixmonths pageviews: 28978 publication date: Nov 20, 2024--> <a href="/news/2024/11/azure-service-bus-local-emulator/"> Microsoft Introduces Long-Awaited Local Emulator for Azure Service Bus </a> </h5> <div class="card__footer"></div> </div> </div> </li> <li class="articles"> <div class="card__content"> <span class="card__icon">Icon</span> <div class="card__data"> <h5 class="card__title"> <!-- section: sixmonths pageviews: 28281 publication date: Sep 06, 2024--> <a href="/articles/ai-ml-data-engineering-trends-2024/"> InfoQ AI, ML and Data Engineering Trends Report - September 2024 </a> </h5> <div class="card__footer"></div> </div> </div> </li> <li class="articles"> <div class="card__content"> <span class="card__icon">Icon</span> <div class="card__data"> <h5 class="card__title"> <!-- section: sixmonths pageviews: 24302 publication date: Oct 14, 2024--> <a href="/articles/cell-based-architecture-distributed-systems/"> How Cell-Based Architecture Enhances Modern Distributed Systems </a> </h5> <div class="card__footer"></div> </div> </div> </li> <li class="news"> <div class="card__content"> <span class="card__icon">Icon</span> <div class="card__data"> <h5 class="card__title"> <!-- section: sixmonths pageviews: 23521 publication date: Oct 18, 2024--> <a href="/news/2024/10/drasi-open-source-system/"> Microsoft Introduces Drasi: Open-Source System for Real-Time Event Processing and Automation </a> </h5> <div class="card__footer"></div> </div> </div> </li> <li class="news"> <div class="card__content"> <span class="card__icon">Icon</span> <div class="card__data"> <h5 class="card__title"> <!-- section: sixmonths pageviews: 23463 publication date: Feb 27, 2025--> <a href="/news/2025/02/microsoft-majorana-quantum-chip/"> Microsoft Unveils the First Topological Quantum Chip Majorana 1 </a> </h5> <div class="card__footer"></div> </div> </div> </li> <li class="podcasts"> <div class="card__content"> <span class="card__icon">Icon</span> <div class="card__data"> <h5 class="card__title"> <!-- section: sixmonths pageviews: 7323 publication date: Sep 16, 2024--> <a href="/podcasts/primer-ai-for-architects/"> A Primer on AI for Architects with Anthony Alford </a> </h5> <div class="card__footer"></div> </div> </div> </li> </ol> </div> </div> </div> </div> </div> </section> <section class="section container homepage__articles section__prsp white"> <div class="container__inner columns"> <div data-col="2/3"> <div class="items"> <div class="heading__container actions"> <div class="actions__left"> <h2 class="heading section__heading"> <a href="/articles/"> Articles </a> </h2> </div> </div> <div class="items__content"> <div class="items__cards"> <ul data-size="large" data-horizontal="true" data-hoverables="true" data-tax="articles" data-cols="2" class="cards no-style boxes"> <li> <div class="card__content"> <a href="/articles/secure-ai-powered-early-detection-system/" class="card__header"> <img loading="lazy" src="https://imgopt.infoq.com/fit-in/100x100/filters:quality(80)/articles/secure-ai-powered-early-detection-system/en/smallimage/designing-architecture-ai-models-thumbnail-1740475990469.jpg" alt="Secure AI-Powered Early Detection System for Medical Data Analysis &amp; Diagnosis" class="card__image"> </a> <div class="card__data"> <h4 class="card__title"> <a href="/articles/secure-ai-powered-early-detection-system/">Secure AI-Powered Early Detection System for Medical Data Analysis &amp; Diagnosis</a> </h4> <div class="card__footer"> <div class="card__details"> <div class="card__authors authors"> <span> <a href="/profile/Mahesh-Vaijainthymala-Krishnamoorthy/" data-id="author-Mahesh-Vaijainthymala-Krishnamoorthy">Mahesh Vaijainthymala Krishnamoorthy</a> </span> </div> <span class="card__date date"> on <span> Mar 03 </span> </span> </div> </div> </div> </div> </li> <li> <div class="card__content"> <a href="/articles/architectural-experimentation-insurance/" class="card__header"> <img loading="lazy" src="https://imgopt.infoq.com/fit-in/100x100/filters:quality(80)/articles/architectural-experimentation-insurance/en/smallimage/architectural-experimentation-thumbnail-1740472356165.jpg" alt="If Architectural Experimentation Is So Great, Why Aren’t You Doing It?" class="card__image"> </a> <div class="card__data"> <h4 class="card__title"> <a href="/articles/architectural-experimentation-insurance/">If Architectural Experimentation Is So Great, Why Aren’t You Doing It?</a> </h4> <div class="card__footer"> <div class="card__details"> <div class="card__authors authors"> <span> <a href="/profile/Pierre-Pureur/" data-id="author-Pierre-Pureur">Pierre Pureur</a> </span> <span> <a href="/profile/Kurt-Bittner/" data-id="author-Kurt-Bittner">Kurt Bittner</a> </span> </div> <span class="card__date date"> on <span> Feb 28 </span> </span> </div> </div> </div> </div> </li> <li> <div class="card__content"> <a href="/articles/prompt-engineering/" class="card__header"> <img loading="lazy" src="https://imgopt.infoq.com/fit-in/100x100/filters:quality(80)/articles/prompt-engineering/en/smallimage/prompt-engineering-thumbnail-1739797104596.jpg" alt="Prompt Engineering: Challenges, Strengths, and Its Place in Software Development's Future" class="card__image"> </a> <div class="card__data"> <h4 class="card__title"> <a href="/articles/prompt-engineering/">Prompt Engineering: Challenges, Strengths, and Its Place in Software Development's Future</a> </h4> <div class="card__footer"> <div class="card__details"> <div class="card__authors authors"> <span> <a href="/profile/Hien-Luu/" data-id="author-Hien-Luu">Hien Luu</a> </span> </div> <span class="card__date date"> on <span> Feb 24 </span> </span> </div> </div> </div> </div> </li> <li> <div class="card__content"> <a href="/articles/infoq-articles-contest-2025/" class="card__header"> <img loading="lazy" src="https://imgopt.infoq.com/fit-in/100x100/filters:quality(80)/articles/infoq-articles-contest-2025/en/smallimage/article-contest-2025-thumbnail-image-1739792870025.jpg" alt="2025 Article Contest: Win Your Conference Ticket" class="card__image"> </a> <div class="card__data"> <h4 class="card__title"> <a href="/articles/infoq-articles-contest-2025/">2025 Article Contest: Win Your Conference Ticket</a> </h4> <div class="card__footer"> <div class="card__details"> <div class="card__authors authors"> <span> <a href="/profile/InfoQ/" data-id="author-InfoQ">InfoQ</a> </span> </div> <span class="card__date date"> on <span> Feb 17 </span> </span> </div> </div> </div> </div> </li> </ul> <a href="/articles/" class="button__more button button__has-transition button__arrow arrow__right"> MORE ARTICLES </a> </div> </div> </div> </div> <div data-col="1/3"> <script type="text/javascript"> createOptionalVcrs({ uriMapping : "", languageUri : "", excludedVcrIds : "", nativeVcrAdsEnabled : "true", vcrsPosition : "1" }); function createOptionalVcrs(params) { if(params.nativeVcrAdsEnabled) { VCR.addIdstoExcludeList(params.excludedVcrIds); if(params <= 1) { window.finishedVcrOptional1 = false; }else if(params.vcrsPosition == 2) { window.finishedVcrOptional2 = false; } var intervalOptional = setInterval(function() { if(window.vcrsLoaded) { if((InfoQConstants.pageType == "HOMEPAGE" && (params.vcrsPosition <=1 || window.finishedRelatedVcr)) || (InfoQConstants.pageType != "HOMEPAGE" && (window.contentVcrFinished == true && (params.vcrsPosition == 2 || params.vcrsPosition <= 1)))) { clearInterval(intervalOptional); if(InfoQConstants.countryCode == "" || InfoQConstants.countryCode == "/br" || InfoQConstants.countryCode == "/fr") { var vcrs = VCR.getByTopicsAndCommunities(window.vcrList, topicIds, communityIds, 2, true, null); if(vcrs != null && vcrs.length == 2) { getOptionalElements(vcrs, params); } toggleAds(vcrs, params); } else { if(params.vcrsPosition <= 1) { window.finishedVcrOptional1 = true; } else { window.finishedVcrOptional2 = true; } } } } }, 200); } } </script> <div id="vcrOptional1" class="widget prsp box__border f_i4ZlGrs9yWqYZFocHkFl box nocontent " data-place="1" data-trk-view="true" data-trk-impr="true"> <h3 class="widget__heading">Related Sponsored Content</h3> <ul class="prsp__items no-style vcrs_optional_1"></ul> </div> </div> </div> </section> <section row="" class="section container e__gray white"> <div class="container__inner"> <div class="e__heading"> <h4>In case you missed it</h4> <a href="https://www.infoq.com/presentations/" class="t_home_qcon-section_see-all">SEE ALL</a> </div> <div> <div class="e__cards no-style flex_cards"> <div class="single_card"> <a href="https://www.infoq.com/presentations/long-running-processes/" class="thumb t_home_qcon-section_news-item" aria-label="Are You Done Yet? Mastering Long-Running Processes in Modern Architectures"> <picture><source srcset="https://imgopt.infoq.com/eyJidWNrZXQiOiAiYXNzZXRzLmluZm9xLmNvbSIsImtleSI6ICJ3ZWIvZXhwZXJpbWVudHMvaG9tZXBhZ2VfcWNvblJvdW5kdXAvbG9uZy1ydW5uaW5nLXByb2Nlc3Nlcy5qcGciLCJlZGl0cyI6IHsid2VicCI6IHsgInF1YWxpdHkiOjgwfX19" type="image/webp"><source srcset="https://imgopt.infoq.com/eyJidWNrZXQiOiAiYXNzZXRzLmluZm9xLmNvbSIsImtleSI6ICJ3ZWIvZXhwZXJpbWVudHMvaG9tZXBhZ2VfcWNvblJvdW5kdXAvbG9uZy1ydW5uaW5nLXByb2Nlc3Nlcy5qcGciLCJlZGl0cyI6IHsianBlZyI6IHsgInF1YWxpdHkiOjgwfX19" type="image/webp"><img src="https://imgopt.infoq.com/eyJidWNrZXQiOiAiYXNzZXRzLmluZm9xLmNvbSIsImtleSI6ICJ3ZWIvZXhwZXJpbWVudHMvaG9tZXBhZ2VfcWNvblJvdW5kdXAvbG9uZy1ydW5uaW5nLXByb2Nlc3Nlcy5qcGciLCJlZGl0cyI6IHsianBlZyI6IHsgInF1YWxpdHkiOjgwfX19" loading="lazy" width="246px" height="129px" alt="Are You Done Yet? Mastering Long-Running Processes in Modern Architectures - image"></picture> </a> <h4 class="title"><a href="https://www.infoq.com/presentations/long-running-processes/" class="t_home_qcon-section_news-item">Are You Done Yet? Mastering Long-Running Processes in Modern Architectures</a></h4> <footer> <div class="authors"><span>Bernd Ruecker</span></div> </footer> </div> <div class="single_card"> <a href="https://www.infoq.com/presentations/1brc/" class="thumb t_home_qcon-section_news-item" aria-label="1BRC–Nerd Sniping the Java Community"> <picture><source srcset="https://imgopt.infoq.com/eyJidWNrZXQiOiAiYXNzZXRzLmluZm9xLmNvbSIsImtleSI6ICJ3ZWIvZXhwZXJpbWVudHMvaG9tZXBhZ2VfcWNvblJvdW5kdXAvMWJyYy5qcGciLCJlZGl0cyI6IHsid2VicCI6IHsgInF1YWxpdHkiOjgwfX19" type="image/webp"><source srcset="https://imgopt.infoq.com/eyJidWNrZXQiOiAiYXNzZXRzLmluZm9xLmNvbSIsImtleSI6ICJ3ZWIvZXhwZXJpbWVudHMvaG9tZXBhZ2VfcWNvblJvdW5kdXAvMWJyYy5qcGciLCJlZGl0cyI6IHsianBlZyI6IHsgInF1YWxpdHkiOjgwfX19" type="image/webp"><img src="https://imgopt.infoq.com/eyJidWNrZXQiOiAiYXNzZXRzLmluZm9xLmNvbSIsImtleSI6ICJ3ZWIvZXhwZXJpbWVudHMvaG9tZXBhZ2VfcWNvblJvdW5kdXAvMWJyYy5qcGciLCJlZGl0cyI6IHsianBlZyI6IHsgInF1YWxpdHkiOjgwfX19" loading="lazy" width="246px" height="129px" alt="1BRC–Nerd Sniping the Java Community - image"></picture> </a> <h4 class="title"><a href="https://www.infoq.com/presentations/1brc/" class="t_home_qcon-section_news-item">1BRC–Nerd Sniping the Java Community</a></h4> <footer> <div class="authors"><span>Gunnar Morling</span></div> </footer> </div> <div class="single_card"> <a href="https://www.infoq.com/presentations/architect-lessons/" class="thumb t_home_qcon-section_news-item" aria-label="Thinking Like an Architect"> <picture><source srcset="https://imgopt.infoq.com/eyJidWNrZXQiOiAiYXNzZXRzLmluZm9xLmNvbSIsImtleSI6ICJ3ZWIvZXhwZXJpbWVudHMvaG9tZXBhZ2VfcWNvblJvdW5kdXAvYXJjaGl0ZWN0LWxlc3NvbnMuanBnIiwiZWRpdHMiOiB7IndlYnAiOiB7ICJxdWFsaXR5Ijo4MH19fQ==" type="image/webp"><source srcset="https://imgopt.infoq.com/eyJidWNrZXQiOiAiYXNzZXRzLmluZm9xLmNvbSIsImtleSI6ICJ3ZWIvZXhwZXJpbWVudHMvaG9tZXBhZ2VfcWNvblJvdW5kdXAvYXJjaGl0ZWN0LWxlc3NvbnMuanBnIiwiZWRpdHMiOiB7ImpwZWciOiB7ICJxdWFsaXR5Ijo4MH19fQ==" type="image/webp"><img src="https://imgopt.infoq.com/eyJidWNrZXQiOiAiYXNzZXRzLmluZm9xLmNvbSIsImtleSI6ICJ3ZWIvZXhwZXJpbWVudHMvaG9tZXBhZ2VfcWNvblJvdW5kdXAvYXJjaGl0ZWN0LWxlc3NvbnMuanBnIiwiZWRpdHMiOiB7ImpwZWciOiB7ICJxdWFsaXR5Ijo4MH19fQ==" loading="lazy" width="246px" height="129px" alt="Thinking Like an Architect - image"></picture> </a> <h4 class="title"><a href="https://www.infoq.com/presentations/architect-lessons/" class="t_home_qcon-section_news-item">Thinking Like an Architect</a></h4> <footer> <div class="authors"><span>Gregor Hohpe</span></div> </footer> </div> <div class="single_card"> <a href="https://www.infoq.com/presentations/threads-meta/" class="thumb t_home_qcon-section_news-item" aria-label="0 → 1, Shipping Threads in 5 Months"> <picture><source srcset="https://imgopt.infoq.com/eyJidWNrZXQiOiAiYXNzZXRzLmluZm9xLmNvbSIsImtleSI6ICJ3ZWIvZXhwZXJpbWVudHMvaG9tZXBhZ2VfcWNvblJvdW5kdXAvdGhyZWFkcy1tZXRhLmpwZyIsImVkaXRzIjogeyJ3ZWJwIjogeyAicXVhbGl0eSI6ODB9fX0=" type="image/webp"><source srcset="https://imgopt.infoq.com/eyJidWNrZXQiOiAiYXNzZXRzLmluZm9xLmNvbSIsImtleSI6ICJ3ZWIvZXhwZXJpbWVudHMvaG9tZXBhZ2VfcWNvblJvdW5kdXAvdGhyZWFkcy1tZXRhLmpwZyIsImVkaXRzIjogeyJqcGVnIjogeyAicXVhbGl0eSI6ODB9fX0=" type="image/webp"><img src="https://imgopt.infoq.com/eyJidWNrZXQiOiAiYXNzZXRzLmluZm9xLmNvbSIsImtleSI6ICJ3ZWIvZXhwZXJpbWVudHMvaG9tZXBhZ2VfcWNvblJvdW5kdXAvdGhyZWFkcy1tZXRhLmpwZyIsImVkaXRzIjogeyJqcGVnIjogeyAicXVhbGl0eSI6ODB9fX0=" loading="lazy" width="246px" height="129px" alt="0 → 1, Shipping Threads in 5 Months - image"></picture> </a> <h4 class="title"><a href="https://www.infoq.com/presentations/threads-meta/" class="t_home_qcon-section_news-item">0 → 1, Shipping Threads in 5 Months</a></h4> <footer> <div class="authors"><span>Zahan Malkani</span></div> </footer> </div> <div class="single_card"> <a href="https://www.infoq.com/presentations/platform-as-a-runtime/" class="thumb t_home_qcon-section_news-item" aria-label="When DevOps Runs Its Course - We Need Platform as a Runtime"> <picture><source srcset="https://imgopt.infoq.com/eyJidWNrZXQiOiAiYXNzZXRzLmluZm9xLmNvbSIsImtleSI6ICJ3ZWIvZXhwZXJpbWVudHMvaG9tZXBhZ2VfcWNvblJvdW5kdXAvcGxhdGZvcm0tYXMtYS1ydW50aW1lLmpwZyIsImVkaXRzIjogeyJ3ZWJwIjogeyAicXVhbGl0eSI6ODB9fX0=" type="image/webp"><source srcset="https://imgopt.infoq.com/eyJidWNrZXQiOiAiYXNzZXRzLmluZm9xLmNvbSIsImtleSI6ICJ3ZWIvZXhwZXJpbWVudHMvaG9tZXBhZ2VfcWNvblJvdW5kdXAvcGxhdGZvcm0tYXMtYS1ydW50aW1lLmpwZyIsImVkaXRzIjogeyJqcGVnIjogeyAicXVhbGl0eSI6ODB9fX0=" type="image/webp"><img src="https://imgopt.infoq.com/eyJidWNrZXQiOiAiYXNzZXRzLmluZm9xLmNvbSIsImtleSI6ICJ3ZWIvZXhwZXJpbWVudHMvaG9tZXBhZ2VfcWNvblJvdW5kdXAvcGxhdGZvcm0tYXMtYS1ydW50aW1lLmpwZyIsImVkaXRzIjogeyJqcGVnIjogeyAicXVhbGl0eSI6ODB9fX0=" loading="lazy" width="246px" height="129px" alt="When DevOps Runs Its Course - We Need Platform as a Runtime - image"></picture> </a> <h4 class="title"><a href="https://www.infoq.com/presentations/platform-as-a-runtime/" class="t_home_qcon-section_news-item">When DevOps Runs Its Course - We Need Platform as a Runtime</a></h4> <footer> <div class="authors"><span>Aviran Mordo</span></div> </footer> </div> </div> </div> </div> </section> <section class="section container e__black white"> <div class="container__inner columns"> <div> <div class="e__slider-info"> <h4 class="e__heading">InfoQ Trends Report</h4> </div> <div class="e__slide-container"> <div id="mustWatchSlider" class="e__cards no-style mustWatchSlider"> <div class="li_card" data-type="podcasts" hoverables data-col="1/5"> <a href="https://www.infoq.com/podcasts/2024-year-review/" class="thumb" aria-label="Key Trends from 2024: Cell-based Architecture, DORA & SPACE, LLM & SLM, Cloud Databases and Portals"> <picture><source srcset="https://imgopt.infoq.com/eyJidWNrZXQiOiAiYXNzZXRzLmluZm9xLmNvbSIsImtleSI6ICJ3ZWIvZXhwZXJpbWVudHMvaG9tZXBhZ2VfdHJlbmRfcmVwb3J0cy9lbmQtb2YteWVhci1wb2RjYXN0LW1haW4tcGFnZS1jYXJkLmpwZyIsImVkaXRzIjogeyJ3ZWJwIjogeyAicXVhbGl0eSI6ODB9fX0=" type="image/webp"><source srcset="https://imgopt.infoq.com/eyJidWNrZXQiOiAiYXNzZXRzLmluZm9xLmNvbSIsImtleSI6ICJ3ZWIvZXhwZXJpbWVudHMvaG9tZXBhZ2VfdHJlbmRfcmVwb3J0cy9lbmQtb2YteWVhci1wb2RjYXN0LW1haW4tcGFnZS1jYXJkLmpwZyIsImVkaXRzIjogeyJqcGVnIjogeyAicXVhbGl0eSI6ODB9fX0=" type="image/webp"><img src="https://imgopt.infoq.com/eyJidWNrZXQiOiAiYXNzZXRzLmluZm9xLmNvbSIsImtleSI6ICJ3ZWIvZXhwZXJpbWVudHMvaG9tZXBhZ2VfdHJlbmRfcmVwb3J0cy9lbmQtb2YteWVhci1wb2RjYXN0LW1haW4tcGFnZS1jYXJkLmpwZyIsImVkaXRzIjogeyJqcGVnIjogeyAicXVhbGl0eSI6ODB9fX0=" loading="lazy" width="241px" height="129px" alt="Key Trends from 2024: Cell-based Architecture, DORA & SPACE, LLM & SLM, Cloud Databases and Portals - image"></picture> </a> <!----> <!----> <h4 class="title"><a href="https://www.infoq.com/podcasts/2024-year-review/">Key Trends from 2024: Cell-based Architecture, DORA & SPACE, LLM & SLM, Cloud Databases and Portals</a></h4> <!----> <!----> <footer> <div class="authors"> <span><a data-id="author-Daniel-Bryant" href="https://www.infoq.com/profile/Daniel-Bryant/" >Daniel Bryant </a></span> <span><a data-id="author-Thomas-Betts" href="https://www.infoq.com/profile/Thomas-Betts/" >Thomas Betts </a></span> <span><a data-id="author-Shane-Hastie" href="https://www.infoq.com/profile/Shane-Hastie/" >Shane Hastie </a></span> <span><a data-id="author-Srini-Penchikala" href="https://www.infoq.com/profile/Srini-Penchikala/" >Srini Penchikala </a></span> <span><a data-id="author-Renato-Losio" href="https://www.infoq.com/profile/Renato-Losio/" >Renato Losio </a></span> </div> </footer> </div> <div class="li_card" data-type="articles" hoverables data-col="1/5"> <a href="https://www.infoq.com/articles/java-trends-report-2024/" class="thumb" aria-label="InfoQ Java Trends Report 2024"> <picture><source srcset="https://imgopt.infoq.com/eyJidWNrZXQiOiAiYXNzZXRzLmluZm9xLmNvbSIsImtleSI6ICJ3ZWIvZXhwZXJpbWVudHMvaG9tZXBhZ2VfdHJlbmRfcmVwb3J0cy9qYXZhLXRyZW5kcy1yZXBvcnQtMjAyNC5qcGciLCJlZGl0cyI6IHsid2VicCI6IHsgInF1YWxpdHkiOjgwfX19" type="image/webp"><source srcset="https://imgopt.infoq.com/eyJidWNrZXQiOiAiYXNzZXRzLmluZm9xLmNvbSIsImtleSI6ICJ3ZWIvZXhwZXJpbWVudHMvaG9tZXBhZ2VfdHJlbmRfcmVwb3J0cy9qYXZhLXRyZW5kcy1yZXBvcnQtMjAyNC5qcGciLCJlZGl0cyI6IHsianBlZyI6IHsgInF1YWxpdHkiOjgwfX19" type="image/webp"><img src="https://imgopt.infoq.com/eyJidWNrZXQiOiAiYXNzZXRzLmluZm9xLmNvbSIsImtleSI6ICJ3ZWIvZXhwZXJpbWVudHMvaG9tZXBhZ2VfdHJlbmRfcmVwb3J0cy9qYXZhLXRyZW5kcy1yZXBvcnQtMjAyNC5qcGciLCJlZGl0cyI6IHsianBlZyI6IHsgInF1YWxpdHkiOjgwfX19" loading="lazy" width="241px" height="129px" alt="InfoQ Java Trends Report 2024 - image"></picture> </a> <!----> <!----> <h4 class="title"><a href="https://www.infoq.com/articles/java-trends-report-2024/">InfoQ Java Trends Report 2024</a></h4> <!----> <!----> <footer> <div class="authors"> <span><a data-id="author-Michael-Redlich" href="https://www.infoq.com/profile/Michael-Redlich/" >Michael Redlich </a></span> <span><a data-id="author-Ben-Evans" href="https://www.infoq.com/profile/Ben-Evans/" >Ben Evans </a></span> <span><a data-id="author-Holly-Cummins" href="https://www.infoq.com/profile/Holly-Cummins/" >Holly Cummins </a></span> <span><a data-id="author-A-N-M-Bazlur-Rahman" href="https://www.infoq.com/profile/A-N-M-Bazlur-Rahman/">A N M Bazlur Rahman </a></span> <span><a data-id="author-Grace-Jansen" href="https://www.infoq.com/profile/Grace-Jansen/" >Grace Jansen </a></span> <span><a data-id="author-Emily-Jiang" href="https://www.infoq.com/profile/Emily-Jiang/" >Emily Jiang </a></span> <span><a data-id="author-Ivar-Grimstad" href="https://www.infoq.com/profile/Ivar-Grimstad/" >Ivar Grimstad </a></span> <span><a data-id="author-Andrea-Peruffo" href="https://www.infoq.com/profile/Andrea-Peruffo/" >Andrea Peruffo </a></span> <span><a data-id="author-Erik-Costlow" href="https://www.infoq.com/profile/Erik-Costlow/" >Erik Costlow </a></span> <span><a data-id="author-Johan-Janssen" href="https://www.infoq.com/profile/Johan-Janssen/" >Johan Janssen </a></span> <span><a data-id="author-Karsten-Silz" href="https://www.infoq.com/profile/Karsten-Silz/" >Karsten Silz </a></span> </div> </footer> </div> <div class="li_card" data-type="articles" hoverables data-col="1/5"> <a href="https://www.infoq.com/articles/ai-ml-data-engineering-trends-2024/" class="thumb" aria-label="AI, ML, and Data Engineering InfoQ Trends Report 2024"> <picture><source srcset="https://imgopt.infoq.com/eyJidWNrZXQiOiAiYXNzZXRzLmluZm9xLmNvbSIsImtleSI6ICJ3ZWIvZXhwZXJpbWVudHMvaG9tZXBhZ2VfdHJlbmRfcmVwb3J0cy9haS1tbC10aHVtYi0yMDI0LmpwZyIsImVkaXRzIjogeyJ3ZWJwIjogeyAicXVhbGl0eSI6ODB9fX0=" type="image/webp"><source srcset="https://imgopt.infoq.com/eyJidWNrZXQiOiAiYXNzZXRzLmluZm9xLmNvbSIsImtleSI6ICJ3ZWIvZXhwZXJpbWVudHMvaG9tZXBhZ2VfdHJlbmRfcmVwb3J0cy9haS1tbC10aHVtYi0yMDI0LmpwZyIsImVkaXRzIjogeyJqcGVnIjogeyAicXVhbGl0eSI6ODB9fX0=" type="image/webp"><img src="https://imgopt.infoq.com/eyJidWNrZXQiOiAiYXNzZXRzLmluZm9xLmNvbSIsImtleSI6ICJ3ZWIvZXhwZXJpbWVudHMvaG9tZXBhZ2VfdHJlbmRfcmVwb3J0cy9haS1tbC10aHVtYi0yMDI0LmpwZyIsImVkaXRzIjogeyJqcGVnIjogeyAicXVhbGl0eSI6ODB9fX0=" loading="lazy" width="241px" height="129px" alt="AI, ML, and Data Engineering InfoQ Trends Report 2024 - image"></picture> </a> <!----> <!----> <h4 class="title"><a href="https://www.infoq.com/articles/ai-ml-data-engineering-trends-2024/">AI, ML, and Data Engineering InfoQ Trends Report 2024</a></h4> <!----> <!----> <footer> <div class="authors"> <span><a href="https://www.infoq.com/profile/Mandy-Gu/" data-id="author-Mandy-Gu">Mandy Gu</a></span> <span><a href="https://www.infoq.com/profile/Namee-Oberst/" data-id="author-Namee-Oberst">Namee Oberst</a></span> <span><a href="https://www.infoq.com/profile/Srini-Penchikala/" data-id="author-Srini-Penchikala">Srini Penchikala</a></span> <span><a href="https://www.infoq.com/profile/Roland-Meertens/" data-id="author-Roland-Meertens">Roland Meertens</a></span> <span><a href="https://www.infoq.com/profile/Anthony-Alford/" data-id="author-Anthony-Alford">Anthony Alford</a></span> <span><a href="https://www.infoq.com/profile/Daniel-Dominguez/" data-id="author-Daniel-Dominguez">Daniel Dominguez</a></span> </div> </footer> </div> <div class="li_card" data-type="articles" hoverables data-col="1/5"> <a href="https://www.infoq.com/articles/architecture-trends-2024/" class="thumb" aria-label="AI, ML, and Data Engineering InfoQ Trends Report 2024"> <picture><source srcset="https://imgopt.infoq.com/eyJidWNrZXQiOiAiYXNzZXRzLmluZm9xLmNvbSIsImtleSI6ICJ3ZWIvZXhwZXJpbWVudHMvaG9tZXBhZ2VfdHJlbmRfcmVwb3J0cy9hcmNoaXRlY3R1cmUtMjAyNC5qcGciLCJlZGl0cyI6IHsid2VicCI6IHsgInF1YWxpdHkiOjgwfX19" type="image/webp"><source srcset="https://imgopt.infoq.com/eyJidWNrZXQiOiAiYXNzZXRzLmluZm9xLmNvbSIsImtleSI6ICJ3ZWIvZXhwZXJpbWVudHMvaG9tZXBhZ2VfdHJlbmRfcmVwb3J0cy9hcmNoaXRlY3R1cmUtMjAyNC5qcGciLCJlZGl0cyI6IHsianBlZyI6IHsgInF1YWxpdHkiOjgwfX19" type="image/webp"><img src="https://imgopt.infoq.com/eyJidWNrZXQiOiAiYXNzZXRzLmluZm9xLmNvbSIsImtleSI6ICJ3ZWIvZXhwZXJpbWVudHMvaG9tZXBhZ2VfdHJlbmRfcmVwb3J0cy9hcmNoaXRlY3R1cmUtMjAyNC5qcGciLCJlZGl0cyI6IHsianBlZyI6IHsgInF1YWxpdHkiOjgwfX19" loading="lazy" width="241px" height="129px" alt="InfoQ Software Architecture and Design Trends Report 2024 - image"></picture> </a> <!----> <!----> <h4 class="title"><a href="https://www.infoq.com/articles/architecture-trends-2024/">InfoQ Software Architecture and Design Trends Report 2024</a></h4> <!----> <!----> <footer> <div class="authors"> <span><a href="https://www.infoq.com/profile/Thomas-Betts/" data-id="author-Thomas-Betts">Thomas Betts</a></span> <span><a href="https://www.infoq.com/profile/Blanca-Garcia-Gil/" data-id="author-Blanca-Garcia-Gil">Blanca Garcia Gil</a></span> <span><a href="https://www.infoq.com/profile/Eran-Stiller/" data-id="author-Eran-Stiller">Eran Stiller</a></span> <span><a href="https://www.infoq.com/profile/Daniel-Bryant/" data-id="author-Daniel-Bryant">Daniel Bryant</a></span> <span><a href="https://www.infoq.com/profile/Rafal-Gancarz/" data-id="author-Rafal-Gancarz">Rafal Gancarz</a></span> </div> </footer> </div> <div class="li_card" data-type="articles" hoverables data-col="1/5"> <a href="https://www.infoq.com/articles/culture-trends-2024/" class="thumb" aria-label="InfoQ Culture & Methods Trends Report 2024"> <picture><source srcset="https://imgopt.infoq.com/eyJidWNrZXQiOiAiYXNzZXRzLmluZm9xLmNvbSIsImtleSI6ICJ3ZWIvZXhwZXJpbWVudHMvaG9tZXBhZ2VfdHJlbmRfcmVwb3J0cy9jdWx0dXJlLTIwMjQuanBnIiwiZWRpdHMiOiB7IndlYnAiOiB7ICJxdWFsaXR5Ijo4MH19fQ==" type="image/webp"><source srcset="https://imgopt.infoq.com/eyJidWNrZXQiOiAiYXNzZXRzLmluZm9xLmNvbSIsImtleSI6ICJ3ZWIvZXhwZXJpbWVudHMvaG9tZXBhZ2VfdHJlbmRfcmVwb3J0cy9jdWx0dXJlLTIwMjQuanBnIiwiZWRpdHMiOiB7ImpwZWciOiB7ICJxdWFsaXR5Ijo4MH19fQ==" type="image/webp"><img src="https://imgopt.infoq.com/eyJidWNrZXQiOiAiYXNzZXRzLmluZm9xLmNvbSIsImtleSI6ICJ3ZWIvZXhwZXJpbWVudHMvaG9tZXBhZ2VfdHJlbmRfcmVwb3J0cy9jdWx0dXJlLTIwMjQuanBnIiwiZWRpdHMiOiB7ImpwZWciOiB7ICJxdWFsaXR5Ijo4MH19fQ==" loading="lazy" width="241px" height="129px" alt="InfoQ Culture & Methods Trends Report 2024 - image"></picture> </a> <!----> <!----> <h4 class="title"><a href="https://www.infoq.com/articles/culture-trends-2024/">InfoQ Culture & Methods Trends Report 2024</a></h4> <!----> <!----> <footer> <div class="authors"> <span><a href="https://www.infoq.com/profile/Shane-Hastie/" data-id="author-Shane-Hastie">Shane Hastie</a></span> <span><a href="https://www.infoq.com/profile/Jutta-Eckstein/" data-id="author-Jutta-Eckstein">Jutta Eckstein</a></span> <span><a href="https://www.infoq.com/profile/Ben-Linders/" data-id="author-Ben-Linders">Ben Linders</a></span> <span><a href="https://www.infoq.com/profile/Susan-McIntosh/" data-id="author-Susan-McIntosh">Susan McIntosh</a></span> <span><a href="https://www.infoq.com/profile/Rafiq-Gemmail/" data-id="author-Rafiq-Gemmail">Rafiq Gemmail</a></span> <span><a href="https://www.infoq.com/profile/Craig-Smith/" data-id="author-Craig-Smith">Craig Smith</a></span> </div> </footer> </div> </div> <button class="nextMustWatch slider_nextMustWatch"> <svg width="13" height="20" viewBox="0 0 13 20" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M0.875 18.7857L12.125 9.85716L0.875 0.928589" stroke="white" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" /> </svg> </button> <button class="prevMustWatch slider_prevMustWatch"> <svg width="13" height="20" viewBox="0 0 13 20" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M0.875 18.7857L12.125 9.85716L0.875 0.928589" stroke="white" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" /> </svg> </button> </div> </div> <!----> <!----> <!----> <!----> <!----> <!----> <!----> <!----> </div> </section> <section class="section container section__split"> <div class="container__inner columns"> <div data-col="2/6"> <div class="items"> <div class="heading__container actions"> <div class="actions__left"> <h2 class="heading section__heading"> <a href="/presentations/"> Presentations </a> </h2> </div> </div> <div class="items__content"> <div class="items__cards"> <ul data-size="small" data-hoverables="true" data-tax="presentations" data-cols="2" class="cards no-style boxes"> <li data-transcript > <div class="card__content"> <div class="card__data"> <h5 class="card__title"> <a href="/presentations/ai-agents-infrastructure/" > Pioneering the Future: Advancing Infrastructure for AI Agents </a> </h5> <div class="card__footer"> <div class="card__details"> <div class="card__authors authors"> <span> <a href="/profile/Shruti-Bhat/" data-id="author-Shruti-Bhat">Shruti Bhat</a> </span> </div> <span class="card__date date"> on <span> Feb 28 </span> </span> </div> </div> </div> <a href="/presentations/ai-agents-infrastructure/" class="card__header" title=""> <img loading="lazy" src="https://imgopt.infoq.com/fit-in/187x135/filters:quality(80)/presentations/ai-agents-infrastructure/en/mediumimage/shurtibhat-medium-1740040892049.jpg" class="card__image" alt="" border="0" title="Pioneering the Future: Advancing Infrastructure for AI Agents" /> <div class="card__meta"> <div class="card__icon">Icon</div> <div class="card__length"> 40:42 </div> </div> </a> </div> </li> <li data-transcript > <div class="card__content"> <div class="card__data"> <h5 class="card__title"> <a href="/presentations/navigators/" > Navigators: Decentralizing Decisions and Empowering ICs at Carta </a> </h5> <div class="card__footer"> <div class="card__details"> <div class="card__authors authors"> <span> <a href="/profile/Shawna-Martell/" data-id="author-Shawna-Martell">Shawna Martell</a> </span> <span> <a href="/profile/Dan-Fike/" data-id="author-Dan-Fike">Dan Fike</a> </span> </div> <span class="card__date date"> on <span> Feb 27 </span> </span> </div> </div> </div> <a href="/presentations/navigators/" class="card__header" title=""> <img loading="lazy" src="https://imgopt.infoq.com/fit-in/187x135/filters:quality(80)/presentations/navigators/en/mediumimage/ShawnaMartellDanFike-medium-1738152290501.jpg" class="card__image" alt="" border="0" title="Navigators: Decentralizing Decisions and Empowering ICs at Carta" /> <div class="card__meta"> <div class="card__icon">Icon</div> <div class="card__length"> 50:51 </div> </div> </a> </div> </li> <li data-transcript > <div class="card__content"> <div class="card__data"> <h5 class="card__title"> <a href="/presentations/aws-ai-generative-tools/" > Elevate Developer Experience with Generative AI Capabilities on AWS </a> </h5> <div class="card__footer"> <div class="card__details"> <div class="card__authors authors"> <span> <a href="/profile/Olalekan-Elesin/" data-id="author-Olalekan-Elesin">Olalekan Elesin</a> </span> </div> <span class="card__date date"> on <span> Feb 26 </span> </span> </div> </div> </div> <a href="/presentations/aws-ai-generative-tools/" class="card__header" title=""> <img loading="lazy" src="https://imgopt.infoq.com/fit-in/187x135/filters:quality(80)/presentations/aws-ai-generative-tools/en/mediumimage/Olalekan-Elesin-medium-1738072840629.jpg" class="card__image" alt="" border="0" title="Elevate Developer Experience with Generative AI Capabilities on AWS" /> <div class="card__meta"> <div class="card__icon">Icon</div> <div class="card__length"> 40:06 </div> </div> </a> </div> </li> <li data-transcript > <div class="card__content"> <div class="card__data"> <h5 class="card__title"> <a href="/presentations/zero-trust-devsecops/" > A Zero Trust Future for Applications: Practical Implementation and Pitfalls </a> </h5> <div class="card__footer"> <div class="card__details"> <div class="card__authors authors"> <span> <a href="/profile/Ashish-Rajan/" data-id="author-Ashish-Rajan">Ashish Rajan</a> </span> </div> <span class="card__date date"> on <span> Feb 25 </span> </span> </div> </div> </div> <a href="/presentations/zero-trust-devsecops/" class="card__header" title=""> <img loading="lazy" src="https://imgopt.infoq.com/fit-in/187x135/filters:quality(80)/presentations/zero-trust-devsecops/en/mediumimage/ashish-rajan-medium-1738148760241.jpeg" class="card__image" alt="" border="0" title="A Zero Trust Future for Applications: Practical Implementation and Pitfalls" /> <div class="card__meta"> <div class="card__icon">Icon</div> <div class="card__length"> 46:00 </div> </div> </a> </div> </li> <li data-transcript > <div class="card__content"> <div class="card__data"> <h5 class="card__title"> <a href="/presentations/prompt-engineering/" > Prompt Engineering: Is it a New Programming Language? </a> </h5> <div class="card__footer"> <div class="card__details"> <div class="card__authors authors"> <span> <a href="/profile/Hien-Luu/" data-id="author-Hien-Luu">Hien Luu</a> </span> </div> <span class="card__date date"> on <span> Feb 21 </span> </span> </div> </div> </div> <a href="/presentations/prompt-engineering/" class="card__header" title=""> <img loading="lazy" src="https://imgopt.infoq.com/fit-in/187x135/filters:quality(80)/presentations/prompt-engineering/en/mediumimage/hien-luu-medium-1739533228101.jpeg" class="card__image" alt="" border="0" title="Prompt Engineering: Is it a New Programming Language?" /> <div class="card__meta"> <div class="card__icon">Icon</div> <div class="card__length"> 43:43 </div> </div> </a> </div> </li> <li data-transcript > <div class="card__content"> <div class="card__data"> <h5 class="card__title"> <a href="/presentations/mlsecops/" > Flawed ML Security: Mitigating Security Vulnerabilities in Data &amp; Machine Learning Infrastructure with MLSecOps </a> </h5> <div class="card__footer"> <div class="card__details"> <div class="card__authors authors"> <span> <a href="/profile/Adrian-Gonzalez%7EMartin/" data-id="author-Adrian-Gonzalez~Martin">Adrian Gonzalez-Martin</a> </span> </div> <span class="card__date date"> on <span> Feb 20 </span> </span> </div> </div> </div> <a href="/presentations/mlsecops/" class="card__header" title=""> <img loading="lazy" src="https://imgopt.infoq.com/fit-in/187x135/filters:quality(80)/presentations/mlsecops/en/mediumimage/adrian-gonzalez-medium-1737539353155.jpeg" class="card__image" alt="" border="0" title="Flawed ML Security: Mitigating Security Vulnerabilities in Data &amp; Machine Learning Infrastructure with MLSecOps" /> <div class="card__meta"> <div class="card__icon">Icon</div> <div class="card__length"> 40:01 </div> </div> </a> </div> </li> </ul> <a href="/presentations/" class="button__more button button__has-transition button__arrow arrow__right"> MORE PRESENTATIONS </a> </div> </div> </div> </div> <div data-col="2/6"> <div class="items"> <div class="heading__container actions"> <div class="actions__left"> <h2 class="heading section__heading"> <a href="/podcasts/"> Podcasts </a> </h2> </div> </div> <div class="items__content"> <div class="items__cards"> <ul data-size="small" data-hoverables="true" data-tax="podcasts" data-cols="2" class="cards no-style boxes"> <li> <div class="card__content"> <div class="card__data"> <h5 class="card__title"> <a href="/podcasts/resilience-observability-automation/" title=""> Resilience, Observability and Unintended Consequences of Automation </a> </h5> <div class="card__footer"> <div class="card__details"> <div class="card__authors authors"> <span> <a href="/profile/Courtney-Nash/" data-id="author-Courtney-Nash">Courtney Nash</a> </span> </div> <span class="card__date date"> on <span> Feb 28 </span> </span> </div> </div> </div> <a href="/podcasts/resilience-observability-automation/" class="card__header"> <img loading="lazy" src="https://imgopt.infoq.com/fit-in/187x135/filters:quality(80)/podcasts/resilience-observability-automation/en/mediumimage/courtney-nash-interviewee-1740403416752.jpeg" class="card__image" alt="Resilience, Observability and Unintended Consequences of Automation"/> <div class="card__meta"> <div class="card__icon">Icon</div> <div class="card__length">27:12</div> </div> </a> </div> </li> <li> <div class="card__content"> <div class="card__data"> <h5 class="card__title"> <a href="/podcasts/facilitating-software-architecture/" title=""> Facilitating Software Architecture with Andrew Harmel-Law </a> </h5> <div class="card__footer"> <div class="card__details"> <div class="card__authors authors"> <span> <a href="/profile/Andrew-Harmel%7ELaw/" data-id="author-Andrew-Harmel~Law">Andrew Harmel-Law</a> </span> </div> <span class="card__date date"> on <span> Feb 24 </span> </span> </div> </div> </div> <a href="/podcasts/facilitating-software-architecture/" class="card__header"> <img loading="lazy" src="https://imgopt.infoq.com/fit-in/187x135/filters:quality(80)/podcasts/facilitating-software-architecture/en/mediumimage/andrew-harmel-law-interviewee-photo-1739799961009.jpg" class="card__image" alt="Facilitating Software Architecture with Andrew Harmel-Law"/> <div class="card__meta"> <div class="card__icon">Icon</div> <div class="card__length">37:02</div> </div> </a> </div> </li> <li> <div class="card__content"> <div class="card__data"> <h5 class="card__title"> <a href="/podcasts/platform-engineering-culture-technical-leadership/" title=""> Engineering Excellence as a Journey: Platform Engineering, Culture, and Technical Leadership </a> </h5> <div class="card__footer"> <div class="card__details"> <div class="card__authors authors"> <span> <a href="/profile/Ganesh-Datta/" data-id="author-Ganesh-Datta">Ganesh Datta</a> </span> </div> <span class="card__date date"> on <span> Feb 21 </span> </span> </div> </div> </div> <a href="/podcasts/platform-engineering-culture-technical-leadership/" class="card__header"> <img loading="lazy" src="https://imgopt.infoq.com/fit-in/187x135/filters:quality(80)/podcasts/platform-engineering-culture-technical-leadership/en/mediumimage/ganesh-datta-interviewee-1738920966902.jpeg" class="card__image" alt="Engineering Excellence as a Journey: Platform Engineering, Culture, and Technical Leadership"/> <div class="card__meta"> <div class="card__icon">Icon</div> <div class="card__length">28:37</div> </div> </a> </div> </li> <li> <div class="card__content"> <div class="card__data"> <h5 class="card__title"> <a href="/podcasts/software-fail-recover-matters/" title=""> Your Software Will Fail; It is How You Recover That Matters: a Conversation with Randy Shoup </a> </h5> <div class="card__footer"> <div class="card__details"> <div class="card__authors authors"> <span> <a href="/profile/Randy-Shoup/" data-id="author-Randy-Shoup">Randy Shoup</a> </span> </div> <span class="card__date date"> on <span> Feb 17 </span> </span> </div> </div> </div> <a href="/podcasts/software-fail-recover-matters/" class="card__header"> <img loading="lazy" src="https://imgopt.infoq.com/fit-in/187x135/filters:quality(80)/podcasts/software-fail-recover-matters/en/mediumimage/randy-shoup-interviewee-photo-1739522770900.jpg" class="card__image" alt="Your Software Will Fail; It is How You Recover That Matters: a Conversation with Randy Shoup"/> <div class="card__meta"> <div class="card__icon">Icon</div> <div class="card__length">01:00:20</div> </div> </a> </div> </li> <li> <div class="card__content"> <div class="card__data"> <h5 class="card__title"> <a href="/podcasts/building-responsible-ai-culture/" title=""> Building Responsible AI Culture: Governance, Diversity, and the Future of Development </a> </h5> <div class="card__footer"> <div class="card__details"> <div class="card__authors authors"> <span> <a href="/profile/Inna-Tokarev-Sela/" data-id="author-Inna-Tokarev-Sela">Inna Tokarev Sela</a> </span> </div> <span class="card__date date"> on <span> Feb 14 </span> </span> </div> </div> </div> <a href="/podcasts/building-responsible-ai-culture/" class="card__header"> <img loading="lazy" src="https://imgopt.infoq.com/fit-in/187x135/filters:quality(80)/podcasts/building-responsible-ai-culture/en/mediumimage/Inna-Tokarev-Sela-interviewee-photo-1738752448222.jpeg" class="card__image" alt="Building Responsible AI Culture: Governance, Diversity, and the Future of Development"/> <div class="card__meta"> <div class="card__icon">Icon</div> <div class="card__length">20:23</div> </div> </a> </div> </li> <li> <div class="card__content"> <div class="card__data"> <h5 class="card__title"> <a href="/podcasts/dissecting-intelligence-ai/" title=""> Dissecting the Intelligence of AI with Avraham Poupko </a> </h5> <div class="card__footer"> <div class="card__details"> <div class="card__authors authors"> <span> <a href="/profile/Avraham-Poupko/" data-id="author-Avraham-Poupko">Avraham Poupko</a> </span> </div> <span class="card__date date"> on <span> Feb 10 </span> </span> </div> </div> </div> <a href="/podcasts/dissecting-intelligence-ai/" class="card__header"> <img loading="lazy" src="https://imgopt.infoq.com/fit-in/187x135/filters:quality(80)/podcasts/dissecting-intelligence-ai/en/mediumimage/Avraham-Poupko-interviewee-photo-1738057698620.jpeg" class="card__image" alt="Dissecting the Intelligence of AI with Avraham Poupko"/> <div class="card__meta"> <div class="card__icon">Icon</div> <div class="card__length">34:16</div> </div> </a> </div> </li> </ul> <a href="/podcasts/" class="button__more button button__has-transition button__arrow arrow__right"> MORE PODCASTS </a> </div> </div> </div> </div> <div id="minibooks-widget" data-col="2/6"> <div class="items"> <div class="heading__container actions"> <div class="actions__left"> <h2 class="heading section__heading"> <a href="/minibooks/"> Guides </a> </h2> </div> </div> <div class="items__content"> <div class="items__cards"> <ul data-size="small" data-hoverables="true" data-tax="guides" data-cols="2" class="cards no-style boxes"> <li> <div class="card__content"> <div class="card__data"> <h5 class="card__title"><a href="/minibooks/2024-infoq-trends-reports-emag/" > The InfoQ Trends Reports 2024 eMag</a> </h5> <div class="card__footer"> <div class="card__details"> <div class="card__authors authors"> <span> <a href="/profile/InfoQ/" data-id="author-InfoQ">InfoQ</a> </span> </div> </div> </div> </div> <a href="/minibooks/2024-infoq-trends-reports-emag/" class="card__header"> <img loading="lazy" src="https://imgopt.infoq.com/fit-in/256x364/filters:quality(80)/minibooks/2024-infoq-trends-reports-emag/en/cover/trends-reports-emag-jan-2025-cover-1736416035322.jpg" alt="The InfoQ Trends Reports 2024 eMag" class="card__image" /> </a> </div> </li> <li> <div class="card__content"> <div class="card__data"> <h5 class="card__title"><a href="/minibooks/devex-platform-engineering/" > Improving Developer Experience with Platform Engineering</a> </h5> <div class="card__footer"> <div class="card__details"> <div class="card__authors authors"> <span> <a href="/profile/InfoQ/" data-id="author-InfoQ">InfoQ</a> </span> </div> </div> </div> </div> <a href="/minibooks/devex-platform-engineering/" class="card__header"> <img loading="lazy" src="https://imgopt.infoq.com/fit-in/256x364/filters:quality(80)/minibooks/devex-platform-engineering/en/cover/platform-engineering-cover-large-1727447516610.jpg" alt="Improving Developer Experience with Platform Engineering" class="card__image" /> </a> </div> </li> <li> <div class="card__content"> <div class="card__data"> <h5 class="card__title"><a href="/minibooks/architecture-different-lenses/" > Architecture Through Different Lenses</a> </h5> <div class="card__footer"> <div class="card__details"> <div class="card__authors authors"> <span> <a href="/profile/InfoQ/" data-id="author-InfoQ">InfoQ</a> </span> </div> </div> </div> </div> <a href="/minibooks/architecture-different-lenses/" class="card__header"> <img loading="lazy" src="https://imgopt.infoq.com/fit-in/256x364/filters:quality(80)/minibooks/architecture-different-lenses/en/cover/architecture-through-different-lenses-medium-cover-1722843332878.jpg" alt="Architecture Through Different Lenses" class="card__image" /> </a> </div> </li> <li> <div class="card__content"> <div class="card__data"> <h5 class="card__title"><a href="/minibooks/cell-based-architecture-2024/" > Cell-Based Architectures: How to Build Scalable and Resilient Systems</a> </h5> <div class="card__footer"> <div class="card__details"> <div class="card__authors authors"> <span> <a href="/profile/InfoQ/" data-id="author-InfoQ">InfoQ</a> </span> </div> </div> </div> </div> <a href="/minibooks/cell-based-architecture-2024/" class="card__header"> <img loading="lazy" src="https://imgopt.infoq.com/fit-in/256x364/filters:quality(80)/minibooks/cell-based-architecture-2024/en/cover/updated-medium-image-cover-cell-based-architecture-2024-1722594924416.jpg" alt="Cell-Based Architectures: How to Build Scalable and Resilient Systems" class="card__image" /> </a> </div> </li> <li> <div class="card__content"> <div class="card__data"> <h5 class="card__title"><a href="/minibooks/practical-generative-ai-2024/" > Practical Applications of Generative AI</a> </h5> <div class="card__footer"> <div class="card__details"> <div class="card__authors authors"> <span> <a href="/profile/InfoQ/" data-id="author-InfoQ">InfoQ</a> </span> </div> </div> </div> </div> <a href="/minibooks/practical-generative-ai-2024/" class="card__header"> <img loading="lazy" src="https://imgopt.infoq.com/fit-in/256x364/filters:quality(80)/minibooks/practical-generative-ai-2024/en/cover/emag-Practical-Applications-of-Generative-AI-medium-logo-1718032755315.jpg" alt="Practical Applications of Generative AI" class="card__image" /> </a> </div> </li> <li> <div class="card__content"> <div class="card__data"> <h5 class="card__title"><a href="/minibooks/architectures-2024/" > Architectures You’ve Always Wondered About 2024 eMag</a> </h5> <div class="card__footer"> <div class="card__details"> <div class="card__authors authors"> <span> <a href="/profile/InfoQ/" data-id="author-InfoQ">InfoQ</a> </span> </div> </div> </div> </div> <a href="/minibooks/architectures-2024/" class="card__header"> <img loading="lazy" src="https://imgopt.infoq.com/fit-in/256x364/filters:quality(80)/minibooks/architectures-2024/en/cover/aywa-2024-medium-logo-1712231844267.jpg" alt="Architectures You’ve Always Wondered About 2024 eMag" class="card__image" /> </a> </div> </li> <li> <div class="card__content"> <div class="card__data"> <h5 class="card__title"><a href="/minibooks/spring-boot-api-backend-version2/" > Practical Guide to Building an API Back End with Spring Boot - Version 2</a> </h5> <div class="card__footer"> <div class="card__details"> <div class="card__authors authors"> <span> <a href="/profile/Wim-Deblauwe/" data-id="author-Wim-Deblauwe">Wim Deblauwe</a> </span> </div> </div> </div> </div> <a href="/minibooks/spring-boot-api-backend-version2/" class="card__header"> <img loading="lazy" src="https://imgopt.infoq.com/fit-in/256x364/filters:quality(80)/minibooks/spring-boot-api-backend-version2/en/cover/cyan-front-cover-medium-1709052422392.jpg" alt="Practical Guide to Building an API Back End with Spring Boot - Version 2" class="card__image" /> </a> </div> </li> <li> <div class="card__content"> <div class="card__data"> <h5 class="card__title"><a href="/minibooks/2023-infoq-trends-reports-emag/" > The InfoQ Trends Reports 2023 eMag</a> </h5> <div class="card__footer"> <div class="card__details"> <div class="card__authors authors"> <span> <a href="/profile/InfoQ/" data-id="author-InfoQ">InfoQ</a> </span> </div> </div> </div> </div> <a href="/minibooks/2023-infoq-trends-reports-emag/" class="card__header"> <img loading="lazy" src="https://imgopt.infoq.com/fit-in/256x364/filters:quality(80)/minibooks/2023-infoq-trends-reports-emag/en/cover/cover-1703183112474.jpg" alt="The InfoQ Trends Reports 2023 eMag" class="card__image" /> </a> </div> </li> </ul> <a href="/minibooks/" class="button__more button button__has-transition button__arrow arrow__right">MORE GUIDES</a> </div> </div> </div> </div> </div> </section> <script type="text/javascript"> var abcValue; var standaloneVcr; var standaloneVcrPopup = []; var uriMapping = ""; var intervalRelatedVcr = setInterval(function() { if(window.vcrsLoaded && window.finishedVcrOptional1) { clearInterval(intervalRelatedVcr); if(window.vcrList.length > 0) { if(InfoQConstants.countryCode == "" || InfoQConstants.countryCode == "/br" || InfoQConstants.countryCode == "/fr") { var vcrsWithCover = VCR.getByTopicsAndCommunities(window.vcrList, topicIds, communityIds, 3, true, null); if (vcrsWithCover.length == 0) { abcValue = 1; } else if (vcrsWithCover.length < 3) { abcValue = 2; standaloneVcr = vcrsWithCover[0]; VCR.addToExcludedList(standaloneVcr); } else { abcValue = 3; standaloneVcr = vcrsWithCover[0]; standaloneVcrPopup[0] = vcrsWithCover[1]; standaloneVcrPopup[1] = vcrsWithCover[2]; VCR.addToExcludedList(vcrsWithCover); } } else { abcValue = 1; } var $firstBox = $('.f_book_1'); var $popperBox = $('.f_rvc_poppers'); var $widget = $('.f_rvcWidget'); var vcrsWithNoCover = VCR.getRandomVcrs(4, window.vcrList); VCR.addToExcludedList(vcrsWithNoCover); getCommonElements(vcrsWithNoCover, uriMapping, "BOTTOM"); if(InfoQConstants.language == 'en' || InfoQConstants.language == 'pt' || InfoQConstants.language == 'fr') { if(abcValue == 2 || abcValue == 3) { getABC2Elements(standaloneVcr, uriMapping, $firstBox); } if(abcValue == 3){ getABC3Elements(standaloneVcrPopup, uriMapping, $popperBox); } } $widget.addClass("f_rvcbox"); if(vcrsWithNoCover.length!==0) { $widget.css("display", "block"); $widget.closest('.f_rvcSection').css("display", "block"); } } window.finishedRelatedVcr = true; } }, 200); </script> <section class="section container white nocontent f_rvcSection"> <div class="container__inner columns"> <div data-col="2/3"> <div class="rvc__container f_rvcWidget" data-trk-view="true" data-trk-impr="true" data-place="BOTTOM"> <div class="popper"> <div x-arrow="" class="popper__arrow"></div> <ul class="rvc__books f_rvc_poppers no-style"></ul> </div> <div class="rvc box__border"> <h4 class="rvc__heading heading">Related Sponsored Content</h4> <div class="columns"> <div data-col="1/2"> <ul class="no-style"> <li href="book-1" class="book f_book_1"> </li> </ul> </div> <div data-col="1/2"> <ul class="rvc__list no-style"> <div class="f_rvcList"></div> </ul> </div> </div> </div> </div> </div> <div data-col="1/3"> <script type="text/javascript"> createOptionalVcrs({ uriMapping : "", languageUri : "", excludedVcrIds : "", nativeVcrAdsEnabled : "true", vcrsPosition : "2" }); function createOptionalVcrs(params) { if(params.nativeVcrAdsEnabled) { VCR.addIdstoExcludeList(params.excludedVcrIds); if(params <= 1) { window.finishedVcrOptional1 = false; }else if(params.vcrsPosition == 2) { window.finishedVcrOptional2 = false; } var intervalOptional = setInterval(function() { if(window.vcrsLoaded) { if((InfoQConstants.pageType == "HOMEPAGE" && (params.vcrsPosition <=1 || window.finishedRelatedVcr)) || (InfoQConstants.pageType != "HOMEPAGE" && (window.contentVcrFinished == true && (params.vcrsPosition == 2 || params.vcrsPosition <= 1)))) { clearInterval(intervalOptional); if(InfoQConstants.countryCode == "" || InfoQConstants.countryCode == "/br" || InfoQConstants.countryCode == "/fr") { var vcrs = VCR.getByTopicsAndCommunities(window.vcrList, topicIds, communityIds, 2, true, null); if(vcrs != null && vcrs.length == 2) { getOptionalElements(vcrs, params); } toggleAds(vcrs, params); } else { if(params.vcrsPosition <= 1) { window.finishedVcrOptional1 = true; } else { window.finishedVcrOptional2 = true; } } } } }, 200); } } </script> <div id="vcrOptional2" class="widget prsp box__border f_i4ZlGrs9yWqYZFocHkFl box nocontent " data-place="2" data-trk-view="true" data-trk-impr="true"> <h3 class="widget__heading">Sponsored Content</h3> <ul class="prsp__items no-style vcrs_optional_2"></ul> </div> </div> </div> </section> <div class="clear"></div> </div> </main> <footer class="footer footer__alternate"> <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="/presentations/zero-trust-devsecops/" title="A Zero Trust Future for Applications: Practical Implementation and Pitfalls">A Zero Trust Future for Applications: Practical Implementation and Pitfalls</a></h5> </li> <li> <h5><a class="t_all_footer_more-boxes-item" href="/news/2025/02/go-1-24-generic-aliases/" title="Go 1.24 Brings Generic Type Aliases, Weak Pointers, Improved Finalizers, and More">Go 1.24 Brings Generic Type Aliases, Weak Pointers, Improved Finalizers, and More</a></h5> </li> <li> <h5><a class="t_all_footer_more-boxes-item" href="/news/2025/02/apple-cpu-side-channel-slap-flop/" title="Recent Generations of Apple CPUs Affected by New Side-Channel Vulnerabilities">Recent Generations of Apple CPUs Affected by New Side-Channel Vulnerabilities</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="/articles/architectural-experimentation-insurance/" title="If Architectural Experimentation Is So Great, Why Aren&amp;rsquo;t You Doing It?">If Architectural Experimentation Is So Great, Why Aren&rsquo;t You Doing It?</a></h5> </li> <li> <h5><a class="t_all_footer_more-boxes-item" href="/news/2025/02/monzo-stand-in/" title="How Monzo Bank Built a Cost-Effective, Unorthodox Backup System to Ensure Resilient Banking">How Monzo Bank Built a Cost-Effective, Unorthodox Backup System to Ensure Resilient Banking</a></h5> </li> <li> <h5><a class="t_all_footer_more-boxes-item" href="/podcasts/facilitating-software-architecture/" title="Facilitating Software Architecture with Andrew Harmel-Law">Facilitating Software Architecture with Andrew Harmel-Law</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="/podcasts/resilience-observability-automation/" title="Resilience, Observability and Unintended Consequences of Automation">Resilience, Observability and Unintended Consequences of Automation</a></h5> </li> <li> <h5><a class="t_all_footer_more-boxes-item" href="/news/2025/02/security-software-development/" title="Ensuring Security without Harming Software Development Productivity">Ensuring Security without Harming Software Development Productivity</a></h5> </li> <li> <h5><a class="t_all_footer_more-boxes-item" href="/presentations/navigators/" title="Navigators: Decentralizing Decisions and Empowering ICs at Carta">Navigators: Decentralizing Decisions and Empowering ICs at Carta</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="/articles/secure-ai-powered-early-detection-system/" title="Secure AI-Powered Early Detection System for Medical Data Analysis &amp;amp; Diagnosis">Secure AI-Powered Early Detection System for Medical Data Analysis &amp; Diagnosis</a></h5> </li> <li> <h5><a class="t_all_footer_more-boxes-item" href="/news/2025/03/ibm-granite-3-2/" title="IBM Granite 3.2 Brings New Vision Language Model, Chain of Thought Reasoning, Improved TimeSeries">IBM Granite 3.2 Brings New Vision Language Model, Chain of Thought Reasoning, Improved TimeSeries</a></h5> </li> <li> <h5><a class="t_all_footer_more-boxes-item" href="/news/2025/02/microsoft-bioemu-1/" title="Microsoft Releases BioEmu-1: a Deep Learning Model for Protein Structure Prediction">Microsoft Releases BioEmu-1: a Deep Learning Model for Protein Structure Prediction</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/2025/03/aws-cdk-garbage-collection/" title="AWS Introduces CDK Garbage Collection">AWS Introduces CDK Garbage Collection</a></h5> </li> <li> <h5><a class="t_all_footer_more-boxes-item" href="/news/2025/03/flux-gitops-release/" title="Flux v2.5 Release: Expanding GitOps Capabilities with CEL Integration and GitHub App Auth">Flux v2.5 Release: Expanding GitOps Capabilities with CEL Integration and GitHub App Auth</a></h5> </li> <li> <h5><a class="t_all_footer_more-boxes-item" href="/news/2025/03/meta-suports-data-logs/" title="Meta Enhances Download Your Information Tool with Data Logs">Meta Enhances Download Your Information Tool with Data Logs</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" data-bg="fullwidth-architects"> <div class="columns"> <div data-col="4/6"> <h2 class="h1"> <strong>The Software Architects&apos;</strong> Newsletter </h2> <p class="intro"> A monthly overview of things you need to know as an architect or aspiring architects.<br> <a href="/software-architects-newsletter#placeholderPastIssues">View an example</a> </p> <ul class="newsletter__features"> <li>Stay informed on emerging trends, peer-validated early adoption of technologies, and architectural best practices</li> <li>Get a curated summary of what you need to know by domain experts</li> <li>You'll receive only one email per month (every last Friday of the month)</li> </ul> <div class="newsletter__subscribe"> <form class="form gdpr" id="footerArchitectNewsletterForm" action="#" onsubmit="footerArchitectNewsletter.saveSubscription(); return false;"> <div class="field newsletter__mail input__text input__no-label input__medium email"> <label for="architect-newsletter-subscribe" class="label field__label">Enter your e-mail address</label> <input id="architect-newsletter-subscribe" name="footerArchitectNewsletterEmail" placeholder="Enter your e-mail address" class="input field__input" type="email" aria-required="true"> <input type="text" aria-hidden="true" name="emailH" id="input_architect_email_h" aria-required="false" style="display:none !important" tabindex="-1" autocomplete="off"> <input type="hidden" aria-hidden="true" id="architectFnt" name="fnt" value="BwX4aBFpEnUocXMo"/> <input type="hidden" aria-hidden="true" id="footerArchitectNewsletterType" name="footerNewsletterType" value="architect"/> <input type="hidden" aria-hidden="true" id="cmpi_a" name="cmpi" value="4"/> </div> <div class="hidden"> <span class="input__select field country"> <label for="input-architect-newsletter-country" class="label field__label">Select your country</label> <select id="input-architect-newsletter-country" class="select field__input" aria-required="true"> <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-architects-footer-nl" aria-hidden="true"> <label for="gdpr-consent-architects-footer-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 footerArchitectNewsletter.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="footerArchitectNewsletterMessage"></span> </div> </div> <div data-col="2/6"> <div class="newsletter__frame"> <div class="newsletter__preview"> <iframe title="newsletter-preview" allowfullscreen="" frameborder="0" src="https://assets.infoq.com/newsletter/architect/en/newsletter_sample/homepage_display_architects-newsletter.html" style="position:absolute;top:0;left:0;width:100%;height:100%;"></iframe> </div> </div> </div> </div> <script type="text/javascript"> var footerArchitectNewsletter = new Newsletter('Enter your e-mail address', 'architect-newsletter-subscribe','footerArchitectNewsletterType', 'footerArchitectNewsletterMessage', 'architectFnt', 'input_architect_email_h', 'input-architect-newsletter-country', 'cmpi_a','footer_homepage'); </script> </div> </div> </section> <section data-nosnippet class="section container footer__subfooter align__left"> <div class="container__inner columns"> <div data-col="1/4" class="columns footer__links-wrap"> <div class="footer__links"> <a href="/" class="nuxt-link-exact-active active" title="Home">Home</a> <a href="/reginit.action" class="emphasis" title="Create account">Create account</a> <button aria-label="Login" class="login" data-ref="mainLogin">Login</button> <a rel="noreferrer noopener" href="http://qconferences.com/" target="_blank" title="QCon Conferences">QCon Conferences</a> <a rel="noreferrer noopener" href="https://events.infoq.com/" target="_blank">Events</a> <a href="/write-for-infoq/" title="Write for InfoQ">Write for InfoQ</a> <a href="/infoq-editors/" title="InfoQ Editors">InfoQ Editors</a> <a href="/about-infoq/" title="About InfoQ">About InfoQ</a> <a href="/about-c4media/" title="About C4Media">About C4Media</a> <a rel="noreferrer noopener" href="https://get.infoq.com/infoq-mediakit/" title="Media Kit" target="_blank"> Media Kit </a> <a href="https://devmarketing.c4media.com/?utm_source=infoq" title="InfoQ Developer Marketing Blog" target="_blank">InfoQ Developer Marketing Blog</a> <a rel="noreferrer noopener" href="https://c4media.com/diversity" title="Diversity" target="_blank">Diversity</a> </div> </div> <div data-col="1/4" class="events__list"> <h4 class="heading footer__heading">Events</h4> <ul class="qcons__list no-style"> <li><span class="icon event__type conference"></span> <div class="qcon__detail"> <h5 class="heading"> <a rel="noreferrer noopener" href="https://qconlondon.com/?utm_source=infoq&utm_medium=referral&utm_campaign=footer_qlondon25" target="_blank">QCon London</a> </h5> <span class="meta date">APRIL 7-10, 2025</span> </div> </li> <li><span class="icon event__type conference"></span> <div class="qcon__detail"> <h5 class="heading"> <a rel="noreferrer noopener" href="https://devsummit.infoq.com/conference/boston2025?utm_source=infoq&utm_medium=referral&utm_campaign=footer_idsboston25" target="_blank">InfoQ Dev Summit Boston</a> </h5> <span class="meta date">June 9-10, 2025</span> </div> </li> <li><span class="icon event__type conference"></span> <div class="qcon__detail"> <h5 class="heading"> <a rel="noreferrer noopener" href="https://devsummit.infoq.com/conference/munich2025?utm_source=infoq&utm_medium=referral&utm_campaign=footer_idsmunich25" target="_blank">InfoQ Dev Summit Munich</a> </h5> <span class="meta date">October 15-16, 2025</span> </div> </li> <li><span class="icon event__type conference"></span> <div class="qcon__detail"> <h5 class="heading"> <a rel="noreferrer noopener" href="https://qconsf.com/?utm_source=infoq&utm_medium=referral&utm_campaign=footer_qsf25" target="_blank">QCon San Francisco</a> </h5> <span class="meta date">November 17-21, 2025 / In-person</span> </div> </li> <li><span class="icon event__type conference"></span> <div class="qcon__detail"> <h5 class="heading"> <a rel="noreferrer noopener" href="#" target="_self" onclick="return false;">InfoQ Dev Summit New York</a> </h5> <span class="meta date">December, 2025 / In-person</span> </div> </li> </ul> </div> <div data-col="1/4" class="footer__social-wrap"> <h4 class="heading text-left footer__heading">Follow us on </h4> <div class="social__links columns social__links__row"> <a href="https://www.youtube.com/infoq"><span class="icon icon__large icon__social icon__youtube"></span><div><span class="social__count">Youtube</span><span class="social__followers">223K Followers</span></div></a> <a href="http://www.linkedin.com/company/infoq"><span class="icon icon__large icon__social icon__linkedin"></span><div><span class="social__count">Linkedin</span><span class="social__followers">21K Followers</span></div></a> <a href="#" id="footerNewsletterRssLink"><span class="icon icon__large icon__social icon__rss"></span><div><span class="social__count">RSS</span><span class="social__followers">19K Readers</span></div></a> <a rel="noreferrer noopener" href="http://twitter.com/infoq" target="_blank"><span class="icon icon__large icon__social icon__twitter"></span><div><span class="social__count">X</span><span class="social__followers">53.4k Followers</span></div></a> <a rel="noreferrer noopener" href="https://www.facebook.com/InfoQ-75911537320" target="_blank"><span class="icon icon__large icon__social icon__fb"></span><div><span class="social__count">Facebook</span><span class="social__followers">21K Likes</span></div></a> <a rel="noreferrer noopener" href="https://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> <a rel="noreferrer noopener" href="https://www.amazon.com/dp/B07KMWGNNL" target="_blank"><span class="icon icon__large icon__social icon__alexa"></span><div><span class="social__count">Alexa</span><span class="social__followers">New</span></div></a> </div> </div> <div data-col="1/4" class="footer__stayin-wrap"> <h4 class="heading text-left footer__heading">Stay in the know</h4> <div class="stayIn_panel_container"> <a href="/podcasts/" class="stayIn_panel" target="_blank" rel="noreferrer noopener"><span>The InfoQ Podcast</span><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-2025 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=BwX4aBFpEnUocXMo&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 = ""; Bookmarks.apiUrl = '/widgets/bookmark.action'; Bookmarks.isContentBookmarked = ""; </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_20250228123444/scripts/lib/browser-update-org/update.js"); document.body.appendChild(e); }); </script> <script> !function(f,b,e,v,n,t,s) {if(f.fbq)return;n=f.fbq=function(){n.callMethod? n.callMethod.apply(n,arguments):n.queue.push(arguments)}; if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0'; n.queue=[];t=b.createElement(e);t.async=!0; t.src=v;s=b.getElementsByTagName(e)[0]; s.parentNode.insertBefore(t,s)}(window,document,'script', 'https://connect.facebook.net/en_US/fbevents.js'); fbq('init', '842388869148196'); fbq('track', 'PageView'); </script> <noscript> <img height="1" width="1" src="https://www.facebook.com/tr?id=842388869148196&ev=PageView&noscript=1"/> </noscript> <script type='text/javascript'> try { mixpanel.track('page viewed', { 'page name' : document.title, 'url' : window.location.pathname }); } catch(err) { } </script> <!-- Latest Version --> <script src="https://cc.cdn.civiccomputing.com/9/cookieControl-9.x.min.js" type="text/javascript"></script> <script> const config = { apiKey: '8910ea974a96ffb6f927952b4ae9b9b0cc3e5973', product: 'PRO_MULTISITE', // general settings consentCookieExpiry: 90, encodeCookie: true, sameSiteCookie: true, // if false, cookie set as SameSite=None;secure; sameSiteValue: ';secure', // either 'Strict', 'Lax', or 'None' subDomains: true, initialState: 'notify', // 'notify','top','box' require pro licence notifyOnce: false, setInnerHTML: true, //layout settings layout: 'slideout', position: 'left', theme: 'light', acceptButton: true, rejectButton: true, closeOnGlobalChange: true, closeStyle: 'icon', toggleType: 'slider', notifyDismissButton: true, settingsStyle: 'link', excludedCountries: ['US'], /*accessibility: { disableSiteScrolling: true, },*/ statement: { description: 'For more detailed information about the cookies we use, see our', name: 'Cookie Policy', url: 'https://www.infoq.com/cookie-policy', updated: '01/01/2024', }, // cookies starting from 'cookie_expire' are from live.infoq.com but since we use the same tool on the same domain we need to specify those too so // that infoq.com cookieControl does not delete live.infoq.com cookies(also infoq.com cookies have been specified in live.infoq.com cookieControl configs) necessaryCookies: ['RegUserCookie', 'UserCookie', 'IdpCookie', 'ConversionTrackingV2_','PSAdialog','*P13NWN*','topbarSurvey','__bkm','JSESSIONID','mp_','_mixpanel','CloudFront-Key-Pair-Id','CloudFront-Policy','CloudFront-Signature','cookie_expire','discount_promo_closed','discount_promo_code','discount_promo_submitted','exit_survey_popup','referrer_popup','voting_popup_*','AWSALB','AWSALBCORS','aws-waf-token'], optionalCookies: [ { name: 'analytics', label: 'Analytics', description: 'Analytical cookies help us to improve our website by collecting and reporting information on its usage.', cookies: ['_ga', '_ga*', '_gid', '_gat', '__utma', '__utmt', '__utmb', '__utmc', '__utmz', '__utmv'], onAccept: function(){ gtag('consent', 'update', {'analytics_storage': 'granted'}); }, onRevoke: function(){ gtag('consent', 'update', {'analytics_storage': 'denied'}); } }, { name: 'marketing', label: 'Advertising', description: 'We use advertising cookies to display advertisements to you for our products.', onAccept: function(){ gtag('consent', 'update', {'ad_storage': 'granted', 'ad_personalization': 'granted', 'ad_user_data': 'granted'}); }, onRevoke: function(){ gtag('consent', 'update', {'ad_storage': 'denied', 'ad_personalization': 'denied', 'ad_user_data': 'denied'}); } } ], text : { // main preference panels title: '<h3>Our use of cookies</h3>', intro: 'We use necessary cookies to make our site work. Functional cookies help enhance the performance and functionality of the site. '+ 'We\'d also like to set analytics cookies to help us improve your experience by measuring how you use the site. '+ 'These will be set only if you accept. ', acceptSettings: 'I Accept', rejectSettings: 'I Do Not Accept', necessaryTitle : '<h3>Necessary Cookies</h3>', necessaryDescription : 'Necessary cookies enable core functionality ' + 'such as page navigation and access to secure areas. '+ 'The website cannot function properly without '+ 'these cookies, and can only be disabled by changing '+ 'your browser preferences.', closeLabel: 'Close Cookie Control', cornerButton: 'Set cookie preferences', // main preference panel controls on: 'On', off : 'Off', thirdPartyTitle : 'Some cookies require your attention', thirdPartyDescription : 'Consent for the following cookies could not be '+ 'automatically revoked. Please follow the link(s) '+ 'below to opt out manually.', // notification panels (only accessible for pro licences) notifyTitle : 'Your choice regarding cookies on this site', notifyDescription : 'We use cookies to optimise site functionality and '+ 'give you the best possible experience.', accept : 'I Accept', reject: 'I Do Not Accept', settings : 'Settings', }, branding : { removeAbout: true, }, }; // do not load this for local envs only. for testing on local envs remove/modify this condition if(InfoQConstants.pageUrl.indexOf('local')===-1){ CookieControl.load( config ); } </script> </body> </html> <!-- s1 -->

Pages: 1 2 3 4 5 6 7 8 9 10