PageSourceSearch

https://www.infoq.com/news/2026/09/airbnb-server-driven-login/

html infoq.com collected 2026-10-01 06:59:16 UTC 204,776 bytes, 3,024 lines download raw bytes

1<!DOCTYPE html>
2
3
4
5
6
7
8
9
10
11
12<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
13    <head>
14        <!-- Google Optimize Anti-flicker snippet (recommended)  -->
15        <style>.async-hide { opacity: 0 !important} </style>
16        <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>
16li,.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;
16left: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>
17        
17<script>(function(a,s,y,n,c,h,i,d,e){s.className+=' '+y;h.start=1*new Date;
18            h.end=i=function(){s.className=s.className.replace(RegExp(' ?'+y),'')};
19            (a[n]=a[n]||[]).hide=h;setTimeout(function(){i();h.end=null},c);h.timeout=c;
20        })(window,document.documentElement,'async-hide','dataLayer',4000,
21                {'GTM-W9GJ5DL':true});</script>
21
22
23        
23<script type="text/javascript">
24            
25            var loggedIn = false;
26            if (loggedIn) {
27                var userCountryId = '';
28            }
29        </script>
29
30        
31
32
33
34
35
36
37<script>
38  window.dataLayer = window.dataLayer || [];
39  function gtag(){dataLayer.push(arguments);}
40
41  //CookieControl tool recomendation
42  // Call the default command before gtag.js or Tag Manager runs to
43  // adjust how the tags operate when they run. Modify the defaults
44  // per your business requirements and prior consent granted/denied, e.g.:
45  gtag('consent', 'default', {
46      'ad_storage': 'denied',
47      'ad_user_data': 'denied',
48      'ad_personalization': 'denied',
49      'analytics_storage': 'denied',
50      wait_for_update: 500
51  });
52  gtag('set', 'ads_data_redaction', true);
53  gtag('set', 'url_passthrough', true);
54
55  if((typeof loggedIn != "undefined") && loggedIn){
56      window.dataLayer.push({'logged_in': 'true'});
57  } else {
58      window.dataLayer.push({'logged_in': 'false'});
59  }
60
61  window.dataLayer.push({'show_queryz': ''});
62
63  gtag('config', 'G-VMVPD4D2JY');
64</script>
64
65
66<!-- Google Tag Manager -->
67<script>
68var gtmProfile="GTM-W9GJ5DL";
69(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
70new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
71j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
72'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
73})(window,document,'script','dataLayer', gtmProfile);</script>
73
74<!-- End Google Tag Manager -->
75
76        <title>Airbnb Cuts Authentication Code by 60% with Server Driven Architecture - InfoQ</title>
77        <link rel="canonical" href="https://www.infoq.com/news/2026/09/airbnb-server-driven-login/"/>
78        <link rel="alternate" href="https://www.infoq.com/news/2026/09/airbnb-server-driven-login/" hreflang="en"/>
79        
80
81
82
83
84
85
86
87    
88        
89        
90        
91            
92            <link rel="alternate" href="https://www.infoq.com/news/2026/09/airbnb-server-driven-login/" hreflang="x-default" />
93        
94    
95    
96
97
98
99
100
101
102
103        
104        
105
106
107
108
109
110<meta http-equiv="pragma" content="no-cache" />
111<meta http-equiv="cache-control" content="private,no-cache,no-store,must-revalidate" />
112<meta http-equiv="expires" content="0" />
113<meta http-equiv="content-type" content="text/html; charset=utf-8" />
114<meta name="copyright" content="&copy; 2006 C4Media" />
115
116<meta name="google-site-verification" content="0qInQx_1WYOeIIbxnh7DnXlw1XOxNgAYakO2k4GhNnY" />
117<meta name="msapplication-TileColor" content="#ffffff"/>
118<meta name="msapplication-TileImage" content="/styles/static/images/logo/logo.jpg"/>
119<meta property="wb:webmaster" content="3eac1729a8bbe046" />
120<meta content="width=device-width,initial-scale=1" name="viewport">
121<meta http-equiv="X-UA-Compatible" content="IE=10, IE=edge">
122
123        
124        <link rel="stylesheet" type="text/css" media="screen" href="https://cdn.infoq.com/statics_s1_20260930115701/styles/style.css"/>
125        <link rel="stylesheet" type="text/css" media="print" href="https://cdn.infoq.com/statics_s1_20260930115701/styles/print.css"/>
126        <link rel="preload" type="text/css" href="https://cdn.infoq.com/statics_s1_20260930115701/styles/style_en.css" as="style" onload="this.onload=null;this.rel='stylesheet'">
127        <link rel="preload" href="https://cdn.infoq.com/statics_s1_20260930115701/styles/icons.css" as="style" onload="this.onload=null;this.rel='stylesheet'">
128        <link rel="preload" type="text/css" media="screen" href="https://cdn.infoq.com/statics_s1_20260930115701/styles/style_extra.css" as="style" onload="this.onload=null;this.rel='stylesheet'">
129        <noscript>
130            <link rel="stylesheet" type="text/css" href="https://cdn.infoq.com/statics_s1_20260930115701/styles/style_en.css"/>
131            <link rel="stylesheet" href="https://cdn.infoq.com/statics_s1_20260930115701/styles/icons.css">
132            <link rel="stylesheet" type="text/css" media="screen" href="https://cdn.infoq.com/statics_s1_20260930115701/styles/style_extra.css"/>
133        </noscript>
134
135        <link rel="stylesheet" type="text/css" href="https://cdn.infoq.com/statics_s1_20260930115701/styles/fonts/font.css"/>
136
137        <link rel="shortcut icon" href="https://cdn.infoq.com/statics_s1_20260930115701/favicon.ico" type="image/x-icon" />
138        <link rel="apple-touch-icon" href="https://cdn.infoq.com/statics_s1_20260930115701/apple-touch-icon.png"/>
139
140        
140<script type="text/javascript">
141        	var device='desktop';
142            var InfoQConstants = {};
143            InfoQConstants.language = 'en';
144            InfoQConstants.countryCode = '';
145            
146            InfoQConstants.pageUrl = (typeof window.location != 'undefined' && window.location && typeof window.location.href != 'undefined' && window.location.href) ? window.location.href : "URL_UNAVAILABLE";
147            InfoQConstants.cet='EHpIzrADJYuZGDbo';
148            InfoQConstants.userDetectedCountryCode = '';
149            InfoQConstants.bpadb = 'hzCRIMKLcabgact4XhmI';
150        </script>
150
151
152        
152<script type="text/javascript" src="https://cdn.infoq.com/statics_s1_20260930115701/scripts/combinedJs.min.js"></script>
152
153        
153<script type="text/javascript">
154            
155                var JSi18n = JSi18n || {}; // define only if not already defined
156                JSi18n.error='Error';
157                JSi18n.login_unverifiedAccount='Unverified account';
158                JSi18n.contentSummary_showPresentations_1='';
159                JSi18n.contentSummary_showPresentations_2='';
160                JSi18n.contentSummary_showPresentations_3='';
161                JSi18n.contentSummary_showInterviews_1='';
162                JSi18n.contentSummary_showInterviews_2='';
163                JSi18n.contentSummary_showInterviews_3='';
164                JSi18n.contentSummary_showMinibooks_1='';
165                JSi18n.contentSummary_showMinibooks_2='';
166                JSi18n.login_sendingRequest='Sending request ...';
167                JSi18n.bookmark_saved='<q>&nbsp;&nbsp;&nbsp;Saved&nbsp;&nbsp;&nbsp;&nbsp;</q>';
168                JSi18n.bookmark_error='<q style=color:black;>&nbsp;&nbsp;&nbsp;Error&nbsp;&nbsp;&nbsp;&nbsp;</q>';
169                JSi18n.categoryManagement_showpopup_viewAllLink_viewAllPrefix='View All';
170                JSi18n.categoryManagement_showpopup_viewAllLink_viewAllSuffix='';
171                JSi18n.categoryManagement_showpopup_includeExcludeLink_Exclude='Exclude';
172                JSi18n.categoryManagement_showpopup_includeExcludeLink_Include='Include';
173                JSi18n.login_invalid_email='Please specify a valid email';
174                JSi18n.login_email_not_found = 'No user found with that email';
175                JSi18n.content_datetime_format='MMM dd, yyyy';
176
177                // used by frontend
178                JSi18n.FE = {
179                    labels: {
180                        follow: "Follow",
181                        followTopic: "Follow Topic",
182                        unfollow: "Unfollow",
183                        unfollowTopic: "Unfollow Topic",
184                        following: "Following",
185                        followers: "Followers",
186                        like: "Like",
187                        liked: "Liked",
188                        authors: "Peers",
189                        users : "Users",
190                        topics: "Topics",
191                        hide: "Hide Item",
192                        hidden: "%s was hidden on your profile page.",
193                        undo: "Undo",
194                        showLess: "Show less",
195                        showMore: "Show more",
196                        moreAuthors: "And %s more",
197                        bookmarked: "Content Bookmarked",
198                        unbookmarked: "Content Unbookmarked",
199                        characterLimit: "Characters Remaining"
200                    }
201                }
202            
203
204
205            
206            
207                var usersInPage = JSON.parse('[{\"id\":\"62671158\",\"ref\":\"author-Monica-Beckwith\",\"url\":\"\/profile\/Monica-Beckwith\",\"followedByCurrentUser\":false,\"minibio\":\"\",\"name\":\"Monica Beckwith\",\"bio\":\"Java Champion, Monica Beckwith is a Java performance engineer. She currently works on improving OpenJDK&#39;s HotSpot VM at Microsoft. Her past experiences include working with Arm, Oracle\/Sun and AMD; optimizing the JVM for server class systems. Monica was voted a JavaOne Rock Star speaker and was the performance lead for Garbage First Garbage Collector (G1 GC). You can follow Monica on twitter &#64;mon_beck\",\"followers\":1839,\"imgSrc\":\"https:\/\/cdn.infoq.com\/statics_s1_20260930115701\/images\/profiles\/QhDv7pXEUK1sdLsYArFmnLxecH4rYhAc.jpg\"},{\"id\":\"45723890\",\"ref\":\"author-Rags-Srinivas\",\"url\":\"\/profile\/Rags-Srinivas\",\"followedByCurrentUser\":false,\"minibio\":\"\",\"name\":\"Rags Srinivas\",\"bio\":\"Raghavan &#34;Rags&#34; Srinivas (&#64;ragss) works as an Architect\/Developer Evangelist goaled with helping developers build highly scalable and available systems. As an OpenStack advocate and solutions architect at Rackspace he was constantly challenged from low level infrastructure to high level application issues. His general focus area is in distributed systems, with a specialization in Cloud Computing and Big Data. He worked on Hadoop, HBase and NoSQL during its early stages. He has spoken on a variety of technical topics at conferences around the world, written for developer portals, conducted and organized Hands-on Labs and taught graduate and online classes in the evening. Rags brings with him over 25 years of hands-on software development and over 15 years of architecture and technology evangelism experience. He has evangelized and influenced the architecture of a number of emerging technology areas. He is also a repeat JavaOne rock star speaker award winner. Rags holds a Masters degree in Computer Science from the Center of Advanced Computer Studies at the University of Louisiana at Lafayette. He likes to hike, run and generally be outdoors but most of all loves to eat.\",\"followers\":360,\"imgSrc\":\"https:\/\/cdn.infoq.com\/statics_s1_20260930115701\/images\/profiles\/t4nyfgw1THkp4wMZ9EZ59RGJx8Hf9Rk8.jpg\"},{\"id\":\"126665386\",\"ref\":\"author-Leela-Kumili\",\"url\":\"\/profile\/Leela-Kumili\",\"followedByCurrentUser\":false,\"minibio\":\"Lead Engineer\",\"name\":\"Leela Kumili\",\"bio\":\"Leela is a Lead Software Engineer at Starbucks with deep expertise in building scalable, cloud-native systems and distributed platforms. She drives architecture, delivery, and operational excellence across the Rewards Platform, leading efforts to modernize systems, improve scalability, and enhance reliability.\\r\\n\\r\\nIn addition to her technical leadership, Leela serves as an AI Champion for the organization, identifying opportunities to improve developer productivity and workflows using LLM-based tools and establishing best practices for AI adoption. She is passionate about building production-ready systems, enhancing developer experience, and mentoring engineers to grow in both technical and strategic impact. Her interests include platform engineering, distributed systems, developer productivity, and bridging technical solutions with business and product goals.\",\"followers\":84,\"imgSrc\":\"https:\/\/cdn.infoq.com\/statics_s1_20260930115701\/images\/profiles\/oZlePVmvHTLAVzoapw4QLpkecE5BfJW9.jpeg\"},{\"id\":\"87551248\",\"ref\":\"author-Steef~Jan-Wiggers\",\"url\":\"\/profile\/Steef~Jan-Wiggers\",\"followedByCurrentUser\":false,\"minibio\":\"Cloud Queue Lead Editor | Domain Architect | Cloud Expert\",\"name\":\"Steef-Jan Wiggers\",\"bio\":\"Steef-Jan Wiggers is one of InfoQ&#39;s senior cloud editors and works as a Domain Architect at VGZ in the Netherlands. His current technical expertise focuses on implementing integration platforms, Azure DevOps, AI, and Azure Platform Solution Architectures. Steef-Jan is a regular speaker at conferences and user groups and writes for InfoQ. Furthermore, Microsoft has recognized him as a Microsoft Azure MVP for the past sixteen years.\",\"followers\":906,\"imgSrc\":\"https:\/\/cdn.infoq.com\/statics_s1_20260930115701\/images\/profiles\/BhZx03k3Hj0pZVXmTzGqItwZxtJ06o
207Ib.jpg\"},{\"id\":\"80977916\",\"ref\":\"author-Thomas-Betts\",\"url\":\"\/profile\/Thomas-Betts\",\"followedByCurrentUser\":false,\"minibio\":\"Senior Laureate Application Architect at Blackbaud\",\"name\":\"Thomas Betts\",\"bio\":\"Thomas Betts is the former Lead Editor for Architecture and Design at InfoQ, a co-host of the InfoQ Podcast, and a Senior Laureate Software Architect at Blackbaud, working on Agents for Good.\\r\\n\\r\\nFor over two decades, his focus has always been on providing software solutions that delight his customers. He has worked in a variety of industries, including social good, retail, finance, health care, defense and travel.\\r\\n\\r\\nThomas lives in Denver with his wife and son, and they love hiking and otherwise exploring beautiful Colorado.\",\"followers\":1180,\"imgSrc\":\"https:\/\/cdn.infoq.com\/statics_s1_20260930115701\/images\/profiles\/pSqI6HrU3k9rmmVjwS34OHG0bOMYiE6a.jpg\"},{\"id\":\"72028228\",\"ref\":\"author-Sergio-De-Simone\",\"url\":\"\/profile\/Sergio-De-Simone\",\"followedByCurrentUser\":false,\"minibio\":\"\",\"name\":\"Sergio De Simone\",\"bio\":\"<b>Sergio De Simone<\/b> is a software engineer. Sergio has been working as a software engineer for over twenty five years across a range of different projects and companies, including such different work environments as Siemens, HP, and small startups. For the last 10&#43; years, his focus has been on development for mobile platforms and related technologies. He is currently working for BigML, Inc., where he leads iOS and macOS development.\",\"followers\":783,\"imgSrc\":\"https:\/\/cdn.infoq.com\/statics_s1_20260930115701\/images\/profiles\/NovciOoQOAYWqYqRQBFo97SuMm0xbUiC.jpg\"},{\"id\":\"126467140\",\"ref\":\"author-Renato-Losio\",\"url\":\"\/profile\/Renato-Losio\",\"followedByCurrentUser\":false,\"minibio\":\"Cloud Expert | AWS Data Hero  \",\"name\":\"Renato Losio\",\"bio\":\"Renato has extensive experience as a cloud architect, advisor, and cloud services specialist. Currently, he lives in Berlin and works remotely as a principal cloud architect. His primary areas of interest include cloud services and relational databases. He is an editor at InfoQ and a recognized AWS Data Hero. You can connect with him on LinkedIn.\",\"followers\":925,\"imgSrc\":\"https:\/\/cdn.infoq.com\/statics_s1_20260930115701\/images\/profiles\/ptroF8HdI2vWXm0NDaKeS0JdiPxMOAra.jpg\"},{\"id\":\"126464202\",\"ref\":\"author-Johan-Janssen\",\"url\":\"\/profile\/Johan-Janssen\",\"followedByCurrentUser\":false,\"minibio\":\"Architect at ASML\",\"name\":\"Johan Janssen\",\"bio\":\"Architect at ASML, loves to share knowledge mainly around Java. Spoke at conferences such as Devoxx, Oracle Code One, Devnexus, and many more. Assisted conferences by participating in program committees and invented and organized JVMCON. Received the JavaOne Rock Star and Oracle Code One Star awards. Wrote various articles both for digital and printed media. Maintainer of various Java JDK\/JRE packages for Chocolatey with around 100 thousand downloads a month.\",\"followers\":546,\"imgSrc\":\"https:\/\/cdn.infoq.com\/statics_s1_20260930115701\/images\/profiles\/Fb4eZ0mtvMf6MhsmBIhsUVueV4xAs2FD.jpg\"},{\"id\":\"39485652\",\"ref\":\"author-Daniel-Bryant\",\"url\":\"\/profile\/Daniel-Bryant\",\"followedByCurrentUser\":false,\"minibio\":\"InfoQ News Manager | Building Platforms at Syntasso\",\"name\":\"Daniel Bryant\",\"bio\":\"Daniel Bryant is the news manager at InfoQ and the emeritus chair of QCon London. He is also a platform engineer and head of product marketing at Syntasso. Daniel&#39;s technical expertise focuses on \u2018DevOps\u2019 tooling, cloud\/container platforms, and microservice implementations. He is a long-time coder and Java Champion who has contributed to several open source projects. Daniel also writes for InfoQ, O\u2019Reilly, and The New Stack and regularly presents at international conferences such as KubeCon, QCon, and JavaOne. In his copious amounts of free time, he enjoys running, reading, and travelling.\",\"followers\":2757,\"imgSrc\":\"https:\/\/cdn.infoq.com\/statics_s1_20260930115701\/images\/profiles\/tSe5dczMaSGtRUm18VkTR2tcF4W3SogA.jpg\"},{\"id\":\"63268344\",\"ref\":\"author-Chris-Swan\",\"url\":\"\/profile\/Chris-Swan\",\"followedByCurrentUser\":false,\"minibio\":\"Engineer, Atsign\",\"name\":\"Chris Swan\",\"bio\":\"Chris Swan is an Engineer at <a href=\\\"https:\/\/atsign.com\\\" rel=\\\"nofollow\\\">Atsign<\/a>, building the atPlatform, a technology that is putting people in control of their data and removing the frictions and surveillance associated with today\u2019s Internet. He was previously a Fellow at DXC Technology where he held various CTO roles. Before that he held CTO and Director of R&amp;D roles at Cohesive Networks, UBS, Capital SCF and Credit Suisse, where he worked on app servers, compute grids, security, mobile, cloud, networking and containers. Chris co-hosts the <a href=\\\"https:\/\/techdebtburn
207down.com\/\\\" rel=\\\"nofollow\\\">Tech Debt Burndown Podcast<\/a> and is a Dart Google Developer Expert (<a href=\\\"https:\/\/developers.google.com\/community\/experts\\\" rel=\\\"nofollow\\\">GDE<\/a>).\",\"followers\":1878,\"imgSrc\":\"https:\/\/cdn.infoq.com\/statics_s1_20260930115701\/images\/profiles\/8PE76nOujWAoCM8yqLn9Hfv2HqW3VlIP.jpg\"},{\"id\":\"4927376\",\"ref\":\"author-Karsten-Silz\",\"url\":\"\/profile\/Karsten-Silz\",\"followedByCurrentUser\":false,\"minibio\":\"Full-Stack Java Developer\",\"name\":\"Karsten Silz\",\"bio\":\"Karsten Silz has worked as a full-stack Java developer for 26 years in Europe and the US. In 2004, he co-founded a software product start-up in the US. Karsten led product development for 13 years and left after the company was sold successfully. Since 2003, he has also worked as a contractor. He co-founded the SaaS start-up &#34;Your Home in Good Hands&#34; as CTO in the UK in 2020.\",\"followers\":402,\"imgSrc\":\"https:\/\/cdn.infoq.com\/statics_s1_20260930115701\/images\/profiles\/p6zmOdOcqXiRj09iiZNeDZap7f0IglQW.jpg\"},{\"id\":\"343314\",\"ref\":\"author-Jonathan-Allen\",\"url\":\"\/profile\/Jonathan-Allen\",\"followedByCurrentUser\":false,\"minibio\":\"Software Architect\",\"name\":\"Jonathan Allen\",\"bio\":\"Jonathan Allen got his start working on MIS projects for a health clinic in the late 90&#39;s, bringing them up from Access and Excel to an enterprise solution by degrees. After spending five years writing automated trading systems for the financial sector, he became a consultant on a variety of projects including the UI for a robotic warehouse, the middle tier for cancer research software, and the big data needs of a major real estate insurance company. In his free time he enjoys studying and writing about martial arts from the 16th century.\\r\\n\",\"followers\":1837,\"imgSrc\":\"https:\/\/cdn.infoq.com\/statics_s1_20260930115701\/images\/profiles\/Wk_C09_mzwK23YkTkKMXResJv3LKUN5D.jpg\"},{\"id\":\"114725059\",\"ref\":\"author-Holly-Cummins\",\"url\":\"\/profile\/Holly-Cummins\",\"followedByCurrentUser\":false,\"minibio\":\"Senior Technical Staff Member, IBM\",\"name\":\"Holly Cummins\",\"bio\":\"Holly Cummins is a Senior Principal Software Engineer on the Red Hat Quarkus team. Before joining Red Hat, Holly was a long time IBMer. In her time at IBM, Holly has been a full-stack javascript developer, a WebSphere Liberty build architect, a client-facing consultant, a JVM performance engineer, and an innovation leader. During her time in the IBM Garage, Holly led projects for enormous banks, tiny startups, and everything in between. Holly has used the power of cloud to understand climate risks, count fish, help a blind athlete run ultra-marathons in the desert solo, and invent stories (although not at all the same time). Holly is also a Java Champion, author, and regular keynote speaker. You can follow her on bluesky at &#64;&#64;hollycummins.com or at hollycummins.com.\\r\\n\\r\\n\\r\\nBefore joining IBM, Holly completed a PhD in Quantum Computation.\\r\\n\",\"followers\":624,\"imgSrc\":\"https:\/\/cdn.infoq.com\/statics_s1_20260930115701\/images\/profiles\/cRsuGlFgKyGmGfEHvafpMO63CxbrEm22.jpg\"}]');
208            
209
210            
211            
212                var topicsInPage = JSON.parse('[{\"name\":\".NET Core\",\"id\":\"15683\",\"url\":\"\/Net-Core\",\"followers\":8050,\"followedByCurrentUser\":false},{\"name\":\"Web Applications\",\"id\":\"6280\",\"url\":\"\/Web_Applications\",\"followers\":19,\"followedByCurrentUser\":false},{\"name\":\"Machine Learning\",\"id\":\"5449\",\"url\":\"\/MachineLearning\",\"followers\":14790,\"followedByCurrentUser\":false},{\"name\":\"Software Engineering\",\"id\":\"7051\",\"url\":\"\/sweng\",\"followers\":2,\"followedByCurrentUser\":false},{\"name\":\"User Experience\",\"id\":\"1358\",\"url\":\"\/ux\",\"followers\":133,\"followedByCurrentUser\":false},{\"name\":\"Mobile Apps\",\"id\":\"15696\",\"url\":\"\/Mobile-Apps\",\"followers\":35,\"followedByCurrentUser\":false},{\"name\":\"Rule Engines\",\"id\":\"728\",\"url\":\"\/rule_engines\",\"followers\":0,\"followedByCurrentUser\":false},{\"name\":\"DevOps\",\"id\":\"6043\",\"url\":\"\/Devops\",\"followers\":5145,\"followedByCurrentUser\":false}
212,{\"name\":\"Reactive Programming\",\"id\":\"15453\",\"url\":\"\/reactive-programming\",\"followers\":12461,\"followedByCurrentUser\":false},{\"name\":\"Development\",\"id\":\"6815\",\"url\":\"\/development\",\"followers\":4166,\"followedByCurrentUser\":false},{\"name\":\"Architecture & Design\",\"id\":\"6816\",\"url\":\"\/architecture-design\",\"followers\":10403,\"followedByCurrentUser\":false},{\"name\":\"Culture & Methods\",\"id\":\"6817\",\"url\":\"\/culture-methods\",\"followers\":3999,\"followedByCurrentUser\":false},{\"name\":\"Scalability\",\"id\":\"3686\",\"url\":\"\/scalability\",\"followers\":105,\"followedByCurrentUser\":false},{\"name\":\"Microservices\",\"id\":\"15274\",\"url\":\"\/microservices\",\"followers\":22389,\"followedByCurrentUser\":false},{\"name\":\"policy\",\"id\":\"43\",\"url\":\"\/policy\",\"followers\":1,\"followedByCurrentUser\":false},{\"name\":\"Architecture\",\"id\":\"1389\",\"url\":\"\/architecture\",\"followers\":3369,\"followedByCurrentUser\":false},{\"name\":\"Evolutionary Architecture\",\"id\":\"18414\",\"url\":\"\/evolutionary-architecture\",\"followers\":3,\"followedByCurrentUser\":false},{\"name\":\"Experiment Driven Development\",\"id\":\"5998\",\"url\":\"\/Experiment_Driven_Development\",\"followers\":2,\"followedByCurrentUser\":false},{\"name\":\"GUI\",\"id\":\"1009\",\"url\":\"\/GUI\",\"followers\":0,\"followedByCurrentUser\":false},{\"name\":\"Identity Management\",\"id\":\"3889\",\"url\":\"\/identity_mgmt\",\"followers\":31,\"followedByCurrentUser\":false},{\"name\":\"AI, ML & Data Engineering\",\"id\":\"16690\",\"url\":\"\/ai-ml-data-eng\",\"followers\":6110,\"followedByCurrentUser\":false},{\"name\":\"Mobile Development\",\"id\":\"6516\",\"url\":\"\/Mobile-Development\",\"followers\":60,\"followedByCurrentUser\":false},{\"name\":\"Distributed Systems\",\"id\":\"6137\",\"url\":\"\/Distributed_Systems\",\"followers\":341,\"followedByCurrentUser\":false},{\"name\":\"Java9\",\"id\":\"7097\",\"url\":\"\/Java9\",\"followers\":5562,\"followedByCurrentUser\":false},{\"name\":\"Web\",\"id\":\"7420\",\"url\":\"\/Web_1\",\"followers\":16,\"followedByCurrentUser\":false},{\"name\":\"Authentication\",\"id\":\"5951\",\"url\":\"\/Authentication\",\"followers\":17,\"followedByCurrentUser\":false}]');
213            
214
215            var userContentLikesInPage = [];
216            var userCommentsLikesInPage = [];
217
218
219            var currentUserId = 248328204;
220        </script>
220
221        
222
223        
224        
225        
226            
227
228
229
230
231
232
233<!-- Latest Version -->
234<script src="https://cc.cdn.civiccomputing.com/9/cookieControl-9.x.min.js" type="text/javascript"></script>
vendor: 2 bytes, line 234
234
235<script>
236    const config = {
237        apiKey: '8910ea974a96ffb6f927952b4ae9b9b0cc3e5973',
238        product: 'PRO_MULTISITE',
239
240        // general settings
241        consentCookieExpiry: 90,
242        encodeCookie: true,
243        sameSiteCookie: true, // if false, cookie set as SameSite=None;secure;
244        sameSiteValue: ';secure', // either 'Strict', 'Lax', or 'None'
245        subDomains: true,
246        initialState: 'notify',   // 'notify','top','box' require pro licence
247        notifyOnce: false,
248        setInnerHTML: true,
249
250        //layout settings
251        layout: 'slideout',
252        position: 'left',
253        theme: 'light',
254        acceptButton: true,
255        rejectButton: true,
256        closeOnGlobalChange: true,
257        closeStyle: 'icon',
258        toggleType: 'slider',
259        notifyDismissButton: true,
260        settingsStyle: 'link',
261        excludedCountries: ['US'],
262
263        /*accessibility: {
264            disableSiteScrolling: true,
265        },*/
266
267        statement: {
268            description: 'For more detailed information about the cookies we use, see our',
269            name: 'Cookie Policy',
270            url: 'https://www.infoq.com/cookie-policy',
271            updated: '01/01/2024',
272        },
273
274        // 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
275        // that infoq.com cookieControl does not delete live.infoq.com cookies(also infoq.com cookies have been specified in live.infoq.com cookieControl configs)
276        necessaryCookies: ['RegUserCookie', 'UserCookie', 'IdpCookie', 'ConversionTrackingV2_','PSAdialog','*P13NWN*','topbarSurvey','__bkm','JSESSIONID','mp_','_mixpanel','CloudFront-Key-Pair-Id','CloudFront-Policy','CloudFront-Signature','cookie_expire','discount_promo_closed','discount_promo_code','discount_promo_submitted','exit_survey_popup','referrer_popup','voting_popup_*','AWSALB','AWSALBCORS','aws-waf-token','iq_sub_preview'],
277
278        optionalCookies: [
279            {
280                name: 'analytics',
281                label: 'Analytics',
282                description: 'Analytical cookies help us to improve our website by collecting and reporting information on its usage.',
283                cookies: ['_ga', '_ga*', '_gid', '_gat', '__utma', '__utmt', '__utmb', '__utmc', '__utmz', '__utmv'],
284                onAccept: function(){
285                    gtag('consent', 'update', {'analytics_storage': 'granted'});
286                },
287                onRevoke: function(){
288                    gtag('consent', 'update', {'analytics_storage': 'denied'});
289                }
290            },
291            {
292                name: 'marketing',
293                label: 'Advertising',
294                description: 'We use advertising cookies to display advertisements to you for our products.',
295                onAccept: function(){
296                    gtag('consent', 'update', {'ad_storage': 'granted', 'ad_personalization': 'granted', 'ad_user_data': 'granted'});
297                },
298                onRevoke: function(){
299                    gtag('consent', 'update', {'ad_storage': 'denied', 'ad_personalization': 'denied', 'ad_user_data': 'denied'});
300                }
301            }
302        ],
303
304        text : {
305            // main preference panels
306            title: '<h3>Our use of cookies</h3>',
307            intro: 'We use necessary cookies to make our site work. Functional cookies help enhance the performance and functionality of the site. '+
308                'We\'d also like to set analytics cookies to help us improve your experience by measuring how you use the site. '+
309                'These will be set only if you accept. ',
310            acceptSettings: 'I Accept',
311            rejectSettings: 'I Do Not Accept',
312            necessaryTitle : '<h3>Necessary Cookies</h3>',
313            necessaryDescription :  'Necessary cookies enable core functionality ' +
314                'such as page navigation and access to secure areas. '+
315                'The website cannot function properly without '+
316                'these cookies, and can only be disabled by changing '+
317                'your browser preferences.',
318            closeLabel: 'Close Cookie Control',
319            cornerButton: 'Set cookie preferences',
320            // main preference panel controls
321            on: 'On',
322            off : 'Off',
323            thirdPartyTitle : 'Some cookies require your attention',
324            thirdPartyDescription : 'Consent for the following cookies could not be '+
325                'automatically revoked. Please follow the link(s) '+
326                'below to opt out manually.',
327            // notification panels (only accessible for pro licences)
328            notifyTitle : 'Your choice regarding cookies on this site',
329            notifyDescription : 'We use cookies to optimise site functionality and '+
330                'give you the best possible experience.',
331            accept : 'I Accept',
332            reject: 'I Do Not Accept',
333            settings : 'Settings',
334        },
335        branding : {
336            removeAbout: true,
337        },
338    };
339    // do not load this for local envs only. for testing on local envs remove/modify this condition
340    if(InfoQConstants.pageUrl.indexOf('local')===-1){
341        CookieControl.load( config );
342    }
343</script>
343
344        
345
346        
347	
348
349
350
351
352
353
354    
355    
356    
357    
358        
359    
360    
361
362
363
364<script type="application/ld+json">
365{
366  "@context": "http://schema.org",
367  "@type": "NewsArticle",
368  "mainEntityOfPage": {
369    "@type": "WebPage",
370    "@id": "https://www.infoq.com/news/2026/09/airbnb-server-driven-login/"
371    },
372  "headline": "Airbnb Cuts Authentication Code by 60% with Server Driven Architecture",
373  "image": ["https://res.infoq.com/news/2026/09/airbnb-server-driven-login/en/headerimage/generatedHeaderImage-1787593560494.jpg"
374   ],
375  "datePublished": "2026-09-04T14:30:00+0000",
376  "dateModified": "2026-09-04T14:30:00+0000",
377  "author": [
378    {
379    "@type": "Person",
380    "name": "Leela Kumili",
381    "url": "https://www.infoq.com/profile/Leela-Kumili/"
382    }
383  ],
384   "publisher": {
385    "@type": "Organization",
386    "name": "InfoQ",
387    "logo": {
388      "@type": "ImageObject",
389      "url": "https://assets.infoq.com/resources/en/infoQ-logo-big.jpg"
390    }
391  },
392
393  "description": "Airbnb redesigned its authentication architecture around server driven flows and policy based challenge selection. The new Flexible Authentication system reduced authentication related code by 60%, cu"
394}
395</script>
395
396
397	<meta name="ifq:pageType" content="NEWS_PAGE"/>
398	
398<script type="text/javascript">
399		InfoQConstants.pageType = 'NEWS_PAGE';
400	</script>
400
401	
402		
403		<link rel="stylesheet" href="https://cdn.infoq.com/statics_s1_20260930115701/styles/prism.css"/>
404		<meta name="keywords" content="airbnb server driven login,Development,Architecture &amp; Design,Rule Engines,Identity Management,Evolutionary Architecture,GUI,Experiment Driven Development,Web,Mobile Development,Distributed Systems,Web Applications,policy,Scalability,Software Engineering,User Experience,Authentication,Mobile Apps,Architecture,"/>
405		<meta name="description" content="Airbnb redesigned its authentication architecture around server driven flows and policy based challenge selection. The new Flexible Authentication system reduced authentication related code by 60%, cu"/>
406		<meta name="tprox" content="1788532200000" />
407		
408    	
409
410
411
412
413
414
415
416<meta property="og:type" content="website" />
417
418
419    
420
421
422
423
424
425
426
427    
428        <meta property="og:image" content="https://res.infoq.com/news/2026/09/airbnb-server-driven-login/en/headerimage/generatedHeaderImage-1787593560494.jpg"/>
429    
430    
431    
432    
433    
434    
435
436
437    
438        <meta property="twitter:image" content="https://res.infoq.com/news/2026/09/airbnb-server-driven-login/en/card_header_image/generatedCard-1787593560494.jpg"/>
439    
440    
441    
442    
443    
444    
445
446
447<meta property="og:title" content="Airbnb Cuts Authentication Code by 60% with Server Driven Architecture "/>
448<meta property="og:description" content="Airbnb redesigned its authentication architecture around server driven flows and policy based challenge selection. The new Flexible Authentication system reduced authentication related code by 60%, cut the web client bundle by 100 KB, improved successful authentication by 2.6%, reduced duplicate account creation by 27%, and lowered OTP costs by 11%." />
449<meta property="og:site_name" content="InfoQ"/>
450<meta property="og:url" content="https://www.infoq.com/news/2026/09/airbnb-server-driven-login/"/>
451
452<meta name="twitter:card" content="summary_large_image" />
453<meta name="twitter:title" content="Airbnb Cuts Authentication Code by 60% with Server Driven Architecture "/>
454<meta name="twitter:description" content="Airbnb redesigned its authentication architecture around server driven flows and policy based challenge selection. The new Flexible Authentication system reduced authentication related code by 60%, cut the web client bundle by 100 KB, improved successful authentication by 2.6%, reduced duplicate account creation by 27%, and lowered OTP costs by 11%." />
455
456		
457			<link rel="image_src" href="https://res.infoq.com/news/2026/09/airbnb-server-driven-login/en/headerimage/generatedHeaderImage-1787593560494.jpg"/>
458		
459		
460		
461	
462	
462<script type="text/javascript" src="https://cdn.infoq.com/statics_s1_20260930115701/scripts/relatedVcr.min.js"></script>
462
463	
463<script type="application/javascript">
464		var communityIds = "2497,2498";
465		var topicIds = "724,1103,6923,757,1861,2938,2283,1964,2090,40,996,2616,869,1818,4345,876";
466		VCR.loadAllVcrs(communityIds, topicIds);
467	</script>
467
468
469        
470        
471        
472        
472<script type="text/javascript" src="https://cdn.infoq.com/statics_s1_20260930115701/scripts/infoq.js"></script>
472
473
474        
474<script type="text/javascript">
475           document.addEventListener('DOMContentLoaded', function() {
476               if (!window || !window.infoq) return
477               infoq.init()
478           })
479       </script>
479
480
481       
481<script defer data-domain="infoq.com" src="https://plausible.io/js/script.file-downloads.hash.outbound-links.pageview-props.tagged-events.js"></script>
481
482       
482<script>window.plausible = window.plausible || function() { (window.plausible.q = window.plausible.q || []).push(arguments) }</script>
482
483
484    </head>
485
486    <body >
487        
488
489
490
491
492
493
494<!-- Google Tag Manager (noscript) -->
vendor: 68 bytes, lines 494-495
494
495<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=
495GTM-W9GJ5DL
vendor: 83 bytes, lines 495-496
495"
496height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
497<!-- End Google Tag Manager (noscript) -->
498        
499            <div class="intbt">
500                <a href="/int/bt/" title="bt">BT</a>
501            </div>
502        
503
504        
505
506
507
508
509
510
511<script type="text/javascript">
512    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"}
512,{"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"}];
513    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];
514</script>
514
515
516        
517
518
519
520
521
522
523
524    <section data-nosnippet class="section container subscribe-box hidden">
525        <div class="container__inner">
526            <div class="actions">
527                <div class="actions__left">
528                    <h2>InfoQ Software Architects' Newsletter</h2>
529                    <span><p>A monthly overview of things you need to know as an architect or aspiring architect.</p>
530
531<p><a href="https://www.infoq.com/software-architects-newsletter#placeholderPastIssues">View an example</a></p>
532</span>
533                    <div class="newsletter__subscribe">
534                        <form class="form gdpr" name="dataCollectCampaignNewsletterForm" id="dataCollectCampaignNewsletterForm" action="#" onsubmit="dataCollectNewsletter.saveSubscription(); return false;">
535                            <div class="field newsletter__mail input__text input__no-label input__medium email">
536                                <label for="email-dataCollectnewsletter-infoq" class="label field__label">Enter your e-mail address</label>
537                                <input id="email-dataCollectnewsletter-infoq" name="footerNewsletterEmail" placeholder="Enter your e-mail address" class="input field__input" type="email"/>
538                                <input type="text" name="emailH" id="input_email_h_d" aria-required="false" style="display:none !important" tabindex="-1" autocomplete="off"/>
539                                <input type="hidden" id="fnt_d" name="fnt_d" value="EHpIzrADJYuZGDbo"/>
540                                <input type="hidden" id="dataCollectNewsletterType" name="dataCollectNewsletterType" value="regular"/>
541                                <input type="hidden" id="cmpi_d" name="cmpi_d" value="4"/>
542                            </div>
543                            <div class="hidden">
544                    <span class="input__select field country">
545                        <label for="input-dataCollect-newsletter-country" class="label field__label">Select your country</label>
546                        <select id="input-dataCollect-newsletter-country" class="select field__input">
547                            <option value="" class="select__option">Select a country</option>
548                        </select>
549                        <p class="input__message field__desc"></p>
550                    </span>
551                                <span class="input__checkbox field hidden">
552                        <input type="checkbox" id="gdpr-consent-campaign">
553                        <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>
554                    </span>
555                            </div>
556                            <input type="submit" role="button" value="Subscribe" class="button button__medium button__red" onclick="return dataCollectNewsletter.validateEmail('Invalid email address');"/>
557                        </form>
558                        <p class="meta">
559                            <a href="/privacy-notice/" target="_blank">We protect your privacy.</a>
560                        </p>
561                        
562                        <span class="success" style="display:none;" id="dataCollectNewsletterMessage"></span>
563                    </div>
564
565                </div>
566                <div class="actions__right">
567                    <button aria-label="Close" class="close closeBox button button__unstyled button__icon icon icon__close-black icon--only">Close</button>
568                </div>
569            </div>
570        </div>
571    </section>
572    
572<script type="text/javascript">
573        var dataCollectNewsletter = new Newsletter('Enter your e-mail address',
574                'email-dataCollectnewsletter-infoq', 'dataCollectNewsletterType','dataCollectNewsletterMessage', 'fnt_d', 'input_email_h_d', 'input-dataCollect-newsletter-country', 'cmpi_d','popup_all_pages');
575    </script>
575
576
577
578        
579
580
581
582
583
584
585
586 
587
588
589        
590        <div class="infoq" id="infoq">
591            
592                <!--	#######		SITE START	#########	 -->
593                
594
595
596
597
598
599
600
601
602
603
604
605
606
607    
608
609
610
611
612
613
614
615
616
617<header class="header">
618    <button aria-label="Toggle Navigation" tabindex="0" class="burger header__toggle button">Toggle Navigation <span></span><span></span><span></span></button>
619    <div class="header__container container">
620        <div class="container__inner">
621            <div data-nosnippet class="actions header__top">
622                <div class="actions__left">
623                    <p class="header__desc my-0">
624                        Facilitating the Spread of Knowledge and Innovation in Professional Software Development
625                    </p>
626                    <div class="button__dropdown dropdown header__more my-0 dropdown__center">
627                        
628
629
630
631
632
633
634
635<button aria-label="English edition" class="button button__unstyled button__small">English edition </button>
636<div class="dropdown__holder">
637	<!---->
638	<div class="dropdown__content">
639		<ul class="no-style dropdown__nav languagesEdition">
640			<li class="active"><a href="#" onclick="return false;">English edition</a></li>
641			<li><a href="https://www.infoq.cn">Chinese edition</a></li>
642			<li><a href="/jp/">Japanese edition</a></li>
643			<li><a href="/fr/">French edition</a></li>
644		</ul>
645	</div>
646	<!---->
647</div>
648                    </div>
649                    <a class="my-0 contribute-link" role="button" href="/write-for-infoq/" title="Write for InfoQ">
650                        Write for InfoQ
651                    </a>
652                </div>
653                <div class="actions__right">
654                    <div>
655                        <form id="searchForm" name="search-form" action="/search.action" enctype="multipart/form-data" class="search icon__search icon icon__green">
656                            <div class="field search__bar input__text input__no-label input__small">
657                                <label for="search" class="label field__label">Search</label>
658                                <input name="queryString" type="text" id="search" value="" placeholder="Search" class="input field__input">
659                                <input type="hidden" name="page" value="1"/>
660                                <input type="hidden" size="15" name="searchOrder">
661                            </div>
662                            <input value="Search" type="submit" class="search__go">
663                        </form>
664                    </div>
665                    
666
667
668
669
670
671
672
673
674	<div class="action_button__group">
675		<a href="/reginit.action?" onclick="return UserActions_Login.addLoginInfo(this);" class="button button__green button__small">Register</a>
676		<a href="/social/keycloakLogin.action?fl=login"  onclick="return UserActions_Login.addLoginInfo(this);" class="button button__small button__outline">Sign in</a>
677	</div>
678	
679	<div class="modal_auth_required">
680		<div class="modal_auth_required__actions">
681			<h2 class="h2">Unlock the full InfoQ experience</h2>
682			<p>Unlock the full InfoQ experience by logging in! Stay updated with your favorite authors and topics, engage with content, and download exclusive resources.</p>
683			<a href="/social/keycloakLogin.action?fl=login"  onclick="return UserActions_Login.addLoginInfo(this);" class="button button__has-transition">Log In</a>
684			<div class="separator"><span>or</span></div>
685			<h3 class="h3">Don't have an InfoQ account?</h3>
686			<a href="/reginit.action?" onclick="return UserActions_Login.addLoginInfo(this);" class="button__outline button__has-transition">Register</a>
687		</div>
688		<div class="modal_auth_required__content">
689			<ul class="newsletter__features">
690				<li><strong>Stay updated on topics and peers that matter to you</strong>Receive instant alerts on the latest insights and trends.</li>
691				<li><strong>Quickly access free resources for continuous learning</strong>Minibooks, videos with transcripts, and training materials.</li>
692				<li><strong>Save articles and read at anytime</strong>Bookmark articles to read whenever youre ready.</li>
693			</ul>
694		</div>
695		<form id="login-form" data-vv-scope="login" class="login__form form" action="#" data-gtm-form-interact-id="0">
696            <input type="hidden" id="loginWidgetOrigin" name="loginWidgetOrigin" value="mainLogin">
697			<input type="hidden" name="fromP13N" id="isP13n" value="">
698			<input type="hidden" name="fromP13NId" id="p13n-id" value="">
699			<input type="hidden" name="fromP13NType" id="p13n-type" value="">
700		</form>
701	</div>
702
703
704                    
705                </div>
706            </div>
707            <div class="header__middle">
708                <div class="logo header__logo">
709                    <a href="/"  class="logo__symbol active">
710                        Logo - Back to homepage
711                    </a>
712                </div>
713                
714                <div class="content-items">
715                    <a href="/news/" class="icon icon__news">News</a>
716                    <a href="/articles/" class="icon icon__articles">Articles</a>
717                    <a href="/presentations/" class="icon icon__presentations">Presentations</a>
718                    <a href="/podcasts/" class="icon icon__podcasts">Podcasts</a>
719                    <a href="/minibooks/" class="icon icon__guides">Guides</a>
720                </div>
721                <div class="header__items columns">
722
723                    
724                        
725                        
726                        
727                        
728                        
729                        
730                    
731
732
733
734
735
736
737
738<div>
739    <h3 class="widget__heading">Topics</h3>
740    <nav class="nav header__nav topics" data-trk-ref="header_personas">
741        <div class="has--subnav li-nav">
742            <a href="/development/" title="Development" class="nav__category">Development</a>
743            <div class="nav__subnav subnav">
744                <ul class="subnav__categories no-style">
745                    <li><a href="/java/" title="Java">Java</a></li>
746                    <li><a href="/kotlin/" title="Kotlin">Kotlin</a></li>
747                    <li><a href="/dotnet/" title=".Net">.Net</a></li>
748                    <li><a href="/c_sharp/" title="C#">C#</a></li>
749                    <li><a href="/swift/" title="Swift">Swift</a></li>
750                    <li><a href="/golang/" title="Go">Go</a></li>
751                    <li><a href="/rust/" title="Rust">Rust</a></li>
752                    <li><a href="/javascript/" title="JavaScript">JavaScript</a></li>
753                </ul>
754                <div class="subnav__content" data-id="6815">
755                    
756
757
758
759
760
761
762
763
764
765<div class="heading__container actions">
766    <div class="actions__left">
767        <h3 class="heading section__heading">Featured in  Development</h3>
768    </div>
769</div>
770<ul data-size="large" data-horizontal="true" data-tax="" taxonomy="articles" class="cards no-style">
771    <li>
772        <div class="card__content">
773            <div class="card__data">
774                
775
776
777
778
779
780
781
782
783
784                <h4 class="card__title">
785                    <a href="/presentations/rust-refactoring">Accelerating Performance by Incrementally Integrating Rust into Existing Codebase</a>
786                </h4>
787                <p class="card__excerpt">Lily Mara explains how to avoid high-risk software rewrites through incremental FFI refactoring. She shares how engineering teams can replace Python bottlenecks with Rust via PyO3, demonstrating how to achieve dramatic function-level speedups, seamless integration testing, and meaningful infrastru
787cture cost savings without microservice overhead.</p>
788                <div class="card__footer"></div>
789            </div>
790            
791                <a href="/presentations/rust-refactoring" class="card__header">
792                    <img loading="lazy" alt="Accelerating Performance by Incrementally Integrating Rust into Existing Codebase" src="https://imgopt.infoq.com/fit-in/100x100/filters:quality(80)/presentations/rust-refactoring/en/smallimage/lily-mara-thumbnail-1788338447565.jpeg" class="card__image"/>
793                </a>
794            
795        </div>
796    </li>
797</ul>
798
799    
800
801
802<a href="/development/" class="button__more button button__large button__arrow arrow__right">All in  development</a>
803
804                </div>
805            </div>
806        </div>
807        <div class="has--subnav li-nav">
808            <a href="/architecture-design/" title="Architecture &amp; Design" class="nav__category">Architecture &amp; Design</a>
809            <div class="nav__subnav subnav">
810                <ul class="subnav__categories no-style">
811                    <li><a href="/architecture/" title="Architecture">Architecture</a></li>
812                    
813                    <li><a href="/enterprise-architecture/" title="Enterprise Architecture">Enterprise Architecture</a></li>
814                    <li><a href="/performance-scalability/" title="Scalability/Performance">Scalability/Performance</a></li>
815                    <li><a href="/design/" title="Design">Design</a></li>
816                    <li><a href="/Case_Study/" title="Case Studies">Case Studies</a></li>
817                    <li><a href="/microservices/" title="Microservices">Microservices</a></li>
818                    <li><a href="/servicemesh/" title="Service Mesh">Service Mesh</a></li>
819                    <li><a href="/DesignPattern/" title="Patterns">Patterns</a></li>
820                    <li><a href="/Security/" title="Security">Security</a></li>
821                </ul>
822                <div class="subnav__content" data-id="6816">
823                    
824
825
826
827
828
829
830
831
832
833<div class="heading__container actions">
834    <div class="actions__left">
835        <h3 class="heading section__heading">Featured in  Architecture &amp; Design</h3>
836    </div>
837</div>
838<ul data-size="large" data-horizontal="true" data-tax="" taxonomy="articles" class="cards no-style">
839    <li>
840        <div class="card__content">
841            <div class="card__data">
842                
843
844
845
846
847
848
849
850
851
852                <h4 class="card__title">
853                    <a href="/articles/ai-agents-improve-software-architecture">Five Ways To Use AI Coding Agents to Improve Your Software Architecture</a>
854                </h4>
855                <p class="card__excerpt">Modern architectures often use legacy services for specific tasks, but these services may lack accurate documentation and using them can be risky if you don't understand them well. AI coding agents can help close that knowledge gap.</p>
856                <div class="card__footer"></div>
857            </div>
858            
859                <a href="/articles/ai-agents-improve-software-architecture" class="card__header">
860                    <img loading="lazy" alt="Five Ways To Use AI Coding Agents to Improve Your Software Architecture" src="https://imgopt.infoq.com/fit-in/100x100/filters:quality(80)/articles/ai-agents-improve-software-architecture/en/smallimage/ai-agents-improve-software-architecture-thumbnail-1790153650841.jpg" class="card__image"/>
861                </a>
862            
863        </div>
864    </li>
865</ul>
866
867    
868
869
870<a href="/architecture-design/" class="button__more button button__large button__arrow arrow__right">All in  architecture-design</a>
871
872                </div>
873            </div>
874        </div>
875        <div class="has--subnav li-nav">
876            <a href="/ai-ml-data-eng/" title="AI Infrastructure" class="nav__category">AI Infrastructure</a>
877            <div class="nav__subnav subnav">
878                <ul class="subnav__categories no-style">
879                    <li><a href="/bigdata/" title="Big Data">Big Data</a></li>
880                    <li><a href="/machinelearning/" title="Machine Learning">Machine Learning</a></li>
881                    <li><a href="/nosql/" title="NoSQL">NoSQL</a></li>
882                    <li><a href="/database/" title="Database">Database</a></li>
883                    <li><a href="/data-analytics/" title="Data Analytics">Data Analytics</a></li>
884                    <li><a href="/streaming/" title="Streaming">Streaming</a></li>
885                </ul>
886                <div class="subnav__content" data-id="16690">
887                    
888
889
890
891
892
893
894
895
896
897<div class="heading__container actions">
898    <div class="actions__left">
899        <h3 class="heading section__heading">Featured in  AI, ML &amp; Data Engineering</h3>
900    </div>
901</div>
902<ul data-size="large" data-horizontal="true" data-tax="" taxonomy="articles" class="cards no-style">
903    <li>
904        <div class="card__content">
905            <div class="card__data">
906                
907
908
909
910
911
912
913
914
915
916                <h4 class="card__title">
917                    <a href="/presentations/building-internal-ai-agents">From Consumers to Builders: Turning 200 of our Team into Agent Creators in 2 Weeks</a>
918                </h4>
919                <p class="card__excerpt">Ben Maraney shares how Forter demystified AI agent creation for technical and n
919on-technical staff. He discusses leveraging custom MCP servers, combining no-code and code-based platforms, sidestepping complex RAG setups, and aligning security and legal teams to accelerate internal agent adoption across R&amp;D.</p>
920                <div class="card__footer"></div>
921            </div>
922            
923                <a href="/presentations/building-internal-ai-agents" class="card__header">
924                    <img loading="lazy" alt="From Consumers to Builders: Turning 200 of our Team into Agent Creators in 2 Weeks" src="https://imgopt.infoq.com/fit-in/100x100/filters:quality(80)/presentations/building-internal-ai-agents/en/smallimage/thumbnail-1790246283432.jpeg" class="card__image"/>
925                </a>
926            
927        </div>
928    </li>
929</ul>
930
931    
932
933
934<a href="/ai-ml-data-eng/" class="button__more button button__large button__arrow arrow__right">All in  ai-ml-data-eng</a>
935
936                </div>
937            </div>
938        </div>
939        <div class="has--subnav li-nav">
940            <a href="/culture-methods/" title="Culture &amp; Methods" class="nav__category">Culture &amp; Methods</a>
941            <div class="nav__subnav subnav">
942                <ul class="subnav__categories no-style">
943                    <li><a href="/agile/" title="Agile">Agile</a></li>
944                    <li><a href="/diversity/" title="Diversity">Diversity</a></li>
945                    <li><a href="/leadership/" title="Leadership">Leadership</a></li>
946                    <li><a href="/lean/" title="Lean/Kanban">Lean/Kanban</a></li>
947                    <li><a href="/personal-growth/" title="Personal Growth">Personal Growth</a></li>
948                    <li><a href="/scrum/" title="Scrum">Scrum</a></li>
949                    <li><a href="/sociocracy/" title="Sociocracy">Sociocracy</a></li>
950                    <li><a href="/software_craftsmanship/" title="Software Craftmanship">Software Craftmanship</a></li>
951                    <li><a href="/team-collaboration/" title="Team Collaboration">Team Collaboration</a></li>
952                    <li><a href="/testing/" title="Testing">Testing</a></li>
953                    <li><a href="/ux/" title="UX">UX</a></li>
954                </ul>
955                <div class="subnav__content" data-id="6817">
956                    
957
958
959
960
961
962
963
964
965
966<div class="heading__container actions">
967    <div class="actions__left">
968        <h3 class="heading section__heading">Featured in  Culture &amp; Methods</h3>
969    </div>
970</div>
971<ul data-size="large" data-horizontal="true" data-tax="" taxonomy="articles" class="cards no-style">
972    <li>
973        <div class="card__content">
974            <div class="card__data">
975                
976
977
978
979
980
981
982
983
984
985                <h4 class="card__title">
986                    <a href="/presentations/staff-founder-lessons">From Staff Platform Engineer to a16z Founder: What I Wish I'd Known</a>
987                </h4>
988                <p class="card__excerpt">Gonzalo Maldonado explains how technical leaders can translate engineering skills into startup success using their &quot;VC Abstraction Layer Knowledge&quot; (VALK). They share hard-won lessons on finding product-market fit, structuring pitches like technical docs, avoiding co-founder drama, and evaluating internal platforms as commercial ventures in a post-ZIRP environment.</p>
989                <div class="card__footer"></div>
990            </div>
991            
992                <a href="/presentations/staff-founder-lessons" class="card__header">
993                    <img loading="lazy" alt="From Staff Platform Engineer to a16z Founder: What I Wish I'd Known" src="https://imgopt.infoq.com/fit-in/100x100/filters:quality(80)/presentations/staff-founder-lessons/en/smallimage/GonzaloGloMaldonado-thumbnail-1790247060435.jpg" class="card__image"/>
994                </a>
995            
996        </div>
997    </li>
998</ul>
999
1000    
1001
1002
1003<a href="/culture-methods/" class="button__more button button__large button__arrow arrow__right">All in  culture-methods</a>
1004
1005                </div>
1006            </div>
1007        </div>
1008        <div class="has--subnav li-nav">
1009            <a href="/devops/" class="nav__category">DevOps</a>
1010            <div class="nav__subnav subnav">
1011                <ul class="subnav__categories no-style">
1012                    <li>
1012<a href="/infrastructure/" title="Infrastructure">Infrastructure</a></li>
1013                    <li><a href="/continuous_delivery/" title="Continuous Delivery">Continuous Delivery</a></li>
1014                    <li><a href="/automation/" title="Automation">Automation</a></li>
1015                    <li><a href="/containers/" title="Containers">Containers</a></li>
1016                    <li><a href="/cloud-computing/" title="Cloud">Cloud</a></li>
1017                    <li><a href="/observability/" title="Observability">Observability</a></li>
1018
1019                </ul>
1020                <div class="subnav__content" data-id="6043">
1021                    
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031<div class="heading__container actions">
1032    <div class="actions__left">
1033        <h3 class="heading section__heading">Featured in  DevOps</h3>
1034    </div>
1035</div>
1036<ul data-size="large" data-horizontal="true" data-tax="" taxonomy="articles" class="cards no-style">
1037    <li>
1038        <div class="card__content">
1039            <div class="card__data">
1040                
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050                <h4 class="card__title">
1051                    <a href="/presentations/context-as-code-devops-agents">Context Is the New Code</a>
1052                </h4>
1053                <p class="card__excerpt">
1053Patrick Debois discusses how to manage, evaluate, distribute, and observe context using proven software engineering practices. He shares how treating context like code - complete with testing, CI/CD, package managers, and security scanning - enables engineering leaders to reliably scale AI coding agents, maintain control over non-deterministic outputs, and build long-term organizational knowledge.</p>
1054                <div class="card__footer"></div>
1055            </div>
1056            
1057                <a href="/presentations/context-as-code-devops-agents" class="card__header">
1058                    <img loading="lazy" alt="Context Is the New Code" src="https://imgopt.infoq.com/fit-in/100x100/filters:quality(80)/presentations/context-as-code-devops-agents/en/smallimage/patrick-thumbnail-1789632704652.jpeg" class="card__image"/>
1059                </a>
1060            
1061        </div>
1062    </li>
1063</ul>
1064
1065    
1066
1067
1068<a href="/devops/" class="button__more button button__large button__arrow arrow__right">All in  devops</a>
1069
1070                </div>
1071            </div>
1072        </div>
1073        <div class="li-nav">
1074            
1075            <a rel="noreferrer noopener" href="https://events.infoq.com/" class="nav__category" title="Events" target="_blank">Events</a>
1076        </div>
1077        
1078        
1079    </nav>
1080</div>
1081
1082<div>
1083    <h3 class="widget__heading">Helpful links</h3>
1084    <ul class="no-style header__nav">
1085       <li>
1086            <a href="/about-infoq" title="About InfoQ">
1087                About InfoQ
1088            </a>
1089        </li>
1090        <li>
1091            <a href="/infoq-editors" title="InfoQ Editors">
1092                InfoQ Editors
1093            </a>
1094        </li>
1095        <li>
1096            <a href="/write-for-infoq" title="Write for InfoQ">
1097                Write for InfoQ
1098            </a>
1099        </li>
1100        <li>
1101            <a href="https://c4media.com/" target="_blank" title="About C4Media">
1102                About C4Media
1103            </a>
1104        </li>
1105        <li>
1106            <a rel="noreferrer noopener" href="https://c4media.com/diversity" title="Diversity" target="_blank">Diversity</a>
1107        </li>
1108    </ul>
1109</div>
1110
1111                    
1112                    <div>
1113                        <h3 class="widget__heading">Choose your language</h3>
1114                        
1115
1116
1117
1118
1119
1120
1121
1122<ul class="language__switcher no-style">
1123	<li class="active"><a href="#" onclick="return false;" title="InfoQ English">En</a></li>
1124	<li><a href="https://www.infoq.cn">中文</a></li>
1125	<li><a href="/jp/">日本</a></li>
1126	<li><a href="/fr/">Fr</a></li>
1127</ul>
1128                    </div>
1129                </div>
1130                    
1131            </div>
1132            <div data-nosnippet class="actions header__bottom header__bottom__events">
1133                <div class="actions__left">
1134                    <div class="events-list" role="list" aria-label="Upcoming events">
1135                        <div class="event-item" role="listitem" data-event-type="certification" data-sort-date="2026-10-09">
1136                            <a class="event-card" href="https://certification.qconferences.com/architecture?utm_source=infoq&amp;utm_medium=referral&amp;utm_campaign=homepageheader_onlinecohortarchitecture26" target="_blank" rel="noopener noreferrer" aria-label="Online InfoQ Architect Certification, Oct 9, 2026">
1137                                <div class="event-date">
1138                                    <div class="event-date-box" aria-hidden="true"><span>Oct</span><span>
11389,</span><span>2026</span></div>
1139                                </div>
1140                                <div class="event-content">
1141                                    <p class="event-title">Architect Certification</p>
1142                                    <p class="event-description">Distributed systems, decentralized decisions, platform engineering, and AI architecture. <br/><strong>Online. Register Now.</strong></p>
1143                                </div>
1144                            </a>
1145                        </div>
1146                        <div class="event-item" role="listitem" data-event-type="certification" data-sort-date="2026-10-14">
1147                            <a class="event-card" href="https://certification.qconferences.com/ai-security-privacy?utm_source=infoq&amp;utm_medium=referral&amp;utm_campaign=homepageheader_onlinecohortaisecurity26" target="_blank" rel="noopener noreferrer" aria-label="Online InfoQ AI Security &amp; Privacy Engineering Certification, Oct 14, 2026">
1148                                <div class="event-date">
1149                                    <div class="event-date-box" aria-hidden="true"><span>Oct</span><span>14,</span><span>2026</span></div>
1150                                </div>
1151                                <div class="event-content">
1152                                    <p class="event-title">AI Security &amp; Privacy Engineering Certification</p>
1153                                    <p class="event-description">Secure and govern production AI systems, from sensitive data to guardrails, evals, and audits.<br><strong>Online. Register now.</strong></p>
1154                                </div>
1155                            </a>
1156                        </div>
1157                        <div class="event-item" role="listitem" data-event-type="certification" data-sort-date="2026-10-19">
1158                            <a class="event-card" href="https://certification.qconferences.com/ai-assisted-engineering?utm_source=infoq&utm_medium=referral&utm_campaign=homepageheader_onlinecohortaiassistedengineering26" target="_blank" rel="noopener noreferrer" aria-label="AI-Assisted Engineering Certification, Sep 18, 2026">
1159                                <div class="event-date">
1160                                    <div class="event-date-box" aria-hidden="true"><span>Oct</span><span>19,</span><span>2026</span></div>
1161                                </div>
1162                                <div class="event-content">
1163                                    <p class="event-title">AI-Assisted Engineering Certification</p>
1164                                    <p class="event-description">Your coding agent moves fast. Who checks whether it's making the codebase better? <br/><strong>Online. Register Now.</strong></p>
1165                                </div>
1166                            </a>
1167                        </div>
1168                        <div class="event-item" role="listitem" data-event-type="certification" data-sort-date="2026-11-17">
1169                            <a class="event-card" href="https://certification.qconferences.com/high-performing-teams?utm_source=infoq&utm_medium=referral&utm_campaign=homepageheader_onlinecohortteams26" target="_blank" rel="noopener noreferrer" aria-label="High-Performing Teams Certification, November 17, 2026">
1170                                <div class="event-date">
1171                                    <div class="event-date-box" aria-hidden="true"><span>Nov</span><span>17,</span><span>2026</span></div>
1172                                </div>
1173                                <div class="event-content">
1174                                    <p class="event-title">High-Performing Teams Certification</p>
1175                                    <p class="event-description">Compare team design, delivery flow, AI roles, and metrics with experienced practitioners. <br/><strong>Online. Register Now.</strong></p>
1176                                </div>
1177                            </a>
1178                        </div>
1179
1180                        <div class="event-item" role="listitem" data-event-type="qcon" data-sort-date="2026-11-16">
1181                            <a class="event-card" href="https://qconsf.com/?utm_source=infoq&amp;utm_medium=referral&amp;utm_campaign=homepageheader_qsf26" target="_blank" rel="noopener noreferrer" aria-label="QCon San Francisco, Nov 16-20, 2026">
1182                                <div class="event-date">
1183                                    <div class="event-date-box" aria-hidden="true"><span>Nov</span><span>16-20,</span><span>2026</span></div>
1184                                </div>
1185                                <div class="event-content">
1186                                    <p class="event-title">QCon San Francisco</p>
1187                                    <p class="event-description">What's working across AI, architecture, and leadership, from the teams doing it. <br/><strong>Register. Early bird ends Oct 13.</strong></p>
1188                                </div>
1189                            </a>
1190                        </div>
1191                        <div class="event-item" role="listitem" data-event-type="qcon" data-sort-date="2026-12-15">
1192                            <a class="event-card" href="https://newyork.qcon.ai/?utm_source=infoq&utm_medium=referral&utm_campaign=homepageheader_qainy26" target="_blank" rel="noopener noreferrer" aria-label="QCon AI New York, December 15-16, 2026">
1193                                <div class="event-date">
1194                                    <div class="event-date-box" aria-hidden="true"><span>Dec</span><span>15-16,</span><span>2026</span></div>
1195                                </div>
1196                                <div class="event-content">
1197                                    <p class="event-title">QCon AI New York</p>
1198                                    <p class="event-description">Production AI across agents, context, evals, security, and infrastru
1198cture, from the senior engineers building it.<br/><strong>Register. Early bird ends Oct 13.</strong></p>
1199                                </div>
1200                            </a>
1201                        </div>
1202                        <div class="event-item" role="listitem" data-event-type="qcon" data-sort-date="2027-04-13">
1203                            <a class="event-card" href="https://qconlondon.com/?utm_source=infoq&amp;utm_medium=referral&amp;utm_campaign=homepageheader_qconlondon27" target="_blank" rel="noopener noreferrer" aria-label="QCon London, April 13-16, 2027">
1204                                <div class="event-date">
1205                                    <div class="event-date-box" aria-hidden="true"><span>Apr</span><span>13-16,</span><span>2027</span></div>
1206                                </div>
1207                                <div class="event-content">
1208                                    <p class="event-title">QCon London</p>
1209                                    <p class="event-description">What early-adopter teams have proven in production, across 15 engineering tracks. <br/><strong>Register. Early bird ends Oct 13.</strong></p>
1210                                </div>
1211                            </a>
1212                        </div>
1213                        <div class="event-item" role="listitem" data-event-type="qcon" data-sort-date="2027-07-08">
1214                            <a class="event-card" href="https://boston.qcon.ai/?utm_source=infoq&utm_medium=referral&utm_campaign=homepageheader_qaiboston27" target="_blank" rel="noopener noreferrer" aria-label="QCon AI Boston, July 8-9, 2027">
1215                                <div class="event-date">
1216                                    <div class="event-date-box" aria-hidden="true"><span>Jul</span><span>8-9,</span><span>2027</span></div>
1217                                </div>
1218                                <div class="event-content">
1219                                    <p class="event-title">QCon AI Boston</p>
1220                                    <p class="event-description">Learn from the decisions and trade-offs behind AI systems already running in production.<br/><strong>Registration open.</strong></p>
1221                                </div>
1222                            </a>
1223                        </div>
1224                    </div>
1225                </div>
1226                <!---->
1227            </div>
1228        </div>
1229    </div>
1230</header>
1231
1232            
1233
1234                <!--	#######		CONTENT START	#########	 -->
1235                <main>
1236                    
1237	<article data-type="news" class="article">
1238		<section class="section container white">
1239			<div class="container__inner">
1240				
1241
1242
1243
1244
1245
1246
1247<p class="crumbs">
1248	<span data-nosnippet><a href="/" title="InfoQ Homepage">InfoQ Homepage</a></span>
1249	
1250		
1251			
1252			
1253                <span data-nosnippet><a href="/news" title="News">News</a></span>
1254            
1255		
1256		<span data-nosnippet class="active">Airbnb Cuts Authentication Code by 60% with Server Driven Architecture</span>
1257	
1258	
1259    
1260        
1261    
1262</p>
1263
1264				<div class="actions">
1265					<div class="actions__left">
1266						
1267
1268
1269
1270
1271
1272
1273
1274    <div class="article__category architecture-design">
1275        
1276        <a
1277	
1278	href="/architecture-design/"
1279
1280 class="article__tag box--info" title="Architecture &amp; Design">
1281
1282            Architecture &amp; Design
1283        </a>
1284
1285    </div>
1286
1287					</div>
1288					<div class="actions__right">
1289						
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300					</div>
1301				</div>
1302				<div class="actions heading__container article__heading">
1303					<div class="actions__left">
1304						<h1 class="heading">
1305							Airbnb Cuts Authentication Code by 60% with Server Driven Architecture
1306						</h1>
1307					</div>
1308				</div>
1309				
1310				
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320		
1321		
1322
1323<script type="text/javascript">
1324	$("#translated_"+InfoQConstants.userDetectedCountryCode.toLowerCase()).show();
1325</script>
1325
1326				
1327				<div class="columns article__explore">
1328					<div class="column article__main" data-col="4/6">
1329						<div class="column article__metadata metadata">
1330							<p class="article__readTime date">Sep 04, 2026<span class="dot"></span>
1331								
1332								
1333								
1334									
1335									2
1336									min read
1337								
1338							</p>
1339							<div class="widget article__authors">
1340								<div>
1341									<p class="meta">by</p>
1342									
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356<ul class="no-style authors">
1357    
1358        
1359            
1360        
1361        <li data-id="author-Leela-Kumili">
1362            <p class="meta author__bio">
1363                
1364                <a href="/profile/Leela-Kumili/" class="avatar author__avatar" aria-label="Leela Kumili"></a>
1365                <span class="author__name">
1366                    <a href="/profile/Leela-Kumili/" class="author__link">Leela Kumili</a>
1367                </span>
1368            </p>
1369            
1370        </li>
1371    
1372</ul>
1373								</div>
1374								
1375							</div>
1376							
1377								
1378
1379
1380
1381
1382
1383
1384<div data-nosnippet class="cta_write_infoq">
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399   <h4 class="heading text-left footer__heading">Follow us on </h4>
1400   <div class="social__links columns social__links__row">
1401      <a style="color:#222 !important;" rel="noreferrer noopener" href="https://bit.ly/4bg6QM8" target="_blank"><span class="icon icon__large icon__social icon__youtube"></span><div><span class="social__count" style="font-weight:700 !important">Youtube</span><span class="social__followers">232K Followers</span></div></a>
1402      <a style="color:#222 !important;" rel="noreferrer noopener" href="https://bit.ly/44IzAtf" target="_blank"><span class="icon icon__large icon__social icon__linkedin"></span><div><span class="social__count" style="font-weight:700 !important">Linkedin</span><span class="social__followers">26K Followers</span></div></a>
1403      <a style="color:#222 !important;" rel="noreferrer noopener" href="https://bit.ly/4eYXrtM" target="_blank"><span class="icon icon__large icon__social icon__instagram"></span><div><span class="social__count" style="font-weight:700 !important">Instagram</span><span class="social__followers">New</span></div></a>
1404      <a style="color:#222 !important;" rel="noreferrer noopener" href="https://bit.ly/3RaJalC" target="_blank"><span class="icon icon__large icon__social icon__rss"></span><div><span class="social__count" style="font-weight:700 !important">RSS</span><span class="social__followers">19K Readers</span></div></a>
1405      <a style="color:#222 !important;" rel="noreferrer noopener" href="https://bit.ly/4pfxivv" target="_blank"><span class="icon icon__large icon__social icon__twitter"></span><div><span class="social__count" style="font-weight:700 !important">X</span><span class="social__followers">57.1k Followers</span></div></a>
1406      <a style="color:#222 !important;" rel="noreferrer noopener" href="https://bit.ly/3QrGMH2" target="_blank"><span class="icon icon__large icon__social icon__fb"></span><div><span class="social__count" style="font-weight:700 !important">Facebook</span><span class="social__followers">21K Likes</span></div></a>
1407      <a style="color:#222 !important;" rel="noreferrer noopener" href="https://bit.ly/4eS8FjG" target="_blank"><span class="icon icon__large icon__social icon__bluesky"></span><div><span class="social__count" style="font-weight:700 !important">Bluesky</span><span class="social__followers">New</span></div></a>
1408   </div>
1409      
1410</div>
1411							
1412							<div class="widgets"></div>
1413						</div>
1414						<div class="article__content">
1415                                
1416                                
1417
1418
1419
1420
1421
1422
1423    <div class="actions__left actions__sidebar article__actions">
1424        
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434<script type="application/javascript">
1435var playing = false;
1436function ttsPlaying(content_url) {
1437    if (loggedIn && !playing) {
1438        gtag('event', 'GA4_EVENT', {
1439             'category': 'tts',
1440             'action': 'play',
1441             'label': content_url
1442        });
1443        playing = true;
1444    }
1445}
1446</script>
1446
1447    
1448       <div id="audio-overlay" role="button" tabindex="0" aria-label="Click to open audio player" class="audio-overlay-main">
1449          <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" fill="none">
1450             <path d="M3.33337 2L12.6667 8L3.33337 14V2Z" fill="currentColor" stroke="currentColor"
1451                stroke-linecap="round" stroke-linejoin="round"></path>
1452          </svg>
1453          <span class="audio-overlay-main-text">Listen to this article -&nbsp; <span id="total-length">0:00</span></span>
1454       </div>
1455    
1456    
1457       <div id="audio-player-container" role="region" aria-label="Audio player" class="hidden audio-player-container-main">
1458          <div id="status-announcer" aria-live="polite" class="sr-only">Audio ready to play</div>
1459          <div>
1460              <audio id="audio-player" preload="metadata" aria-hidden="true" class="hidden" onplaying="ttsPlaying('/news/2026/09/airbnb-server-driven-login');">
1461                <source src="" type="audio/mpeg">
1462                Your browser does not support the audio element.
1463             </audio>
1464             <div class="play-container">
1465                <button id="play-button" aria-label="Play audio" aria-pressed="false"
1466                   class="play-button-main">
1467                   <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" fill="none">
1468                      <path d="M3.33337 2L12.6667 8L3.33337 14V2Z" fill="currentColor" stroke="currentColor"
1469                         stroke-linecap="round" stroke-linejoin="round"></path>
1470                   </svg>
1471                </button>
1472                <div class="audio-container">
1473                   <div class="audio-controls">
1474                      <span id="current-time" role="timer" class="audio-timer">0:00</span>
1475                      <div id="progress-container" role="slider" aria-label="Audio progress" aria-valuemin="0"
1476                         aria-valuemax="100" aria-valuenow="NaN" tabindex="0" class="audio-progress-container"
1477                         aria-valuetext="0:00 of NaN:NaN">
1478                         <div class="custom-progress-container">
1479                            <div id="progress-bar" class="custom-progress-bar"></div>
1480                            <div id="progress-handle" class="opacity-0 custom-progress-handle"></div>
1481                         </div>
1482                         <div class="audio-progress-wrapper">
1483                            <div id="progress-bar" class="audio-progress-bar"></div>
1484                            <div id="progress-handle" class="opacity-0 audio-progress-handle"></div>
1485                         </div>
1486                      </div>
1487                      <span id="duration" role="timer" class="audio-timer">0:00</span>
1488                      <div class="flex gap-2 items-center">
1489                         <button id="volume-button" aria-label="Toggle mute"
1490                            type="button" class="custom-volume-button">
1491                            <svg xmlns="http://www.w3.org/2000/svg"
1492                               width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor"
1493                               stroke-width="2" stroke-linecap="round" stroke-linejoin="round"
1494                               class="text-muted-foreground-custom">
1495                               <polygon points="11 5 6 9 2 9 2 15 6 15 11 19 11 5"></polygon>
1496                               <path d="M15.54 8.46a5 5 0 0 1 0 7.07"></path>
1497                               <path d="M19.07 4.93a10 10 0 0 1 0 14.14"></path>
1498                            </svg>
1499                         </button>
1500                         <div id="volume-slider" role="slider" aria-label="Volume" aria-valuemin="0"
1501                            aria-valuemax="100" aria-valuenow="100" tabindex="0" class="custom-slider">
1502                            <div class="audio-progress-wrapper">
1503                               <div id="volume-bar" class="custom-volume-bar"></div>
1504                               <div id="volume-handle" class="custom-volume-handle"></div>
1505                            </div>
1506                         </div>
1507                      </div>
1508                      <div class="custom-relative-wrapper">
1509                         <button id="speed-button" type="button"
1510                            aria-label="Playback speed settings" class="custom-speed-button">
1511                            <svg
1512                               xmlns="http://www.w3.org/2000/svg" width="15" height="15" viewBox="0 0 24 24"
1513                               fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"
1514                               stroke-linejoin="round" class="custom-speed-button-icon">
1515                               <path
1516                                  d="M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z">
1517                               </path>
1518                               <circle cx="12" cy="12" r="3"></circle>
1519                            </svg>
1520                         </button>
1521                         <div id="speed-menu" role="menu" aria-orientation="vertical" aria-labelledby="speed-button"
1522                            class="hidden custom-speed-menu"><button role="menuitem" tabindex="0" data-speed="1"
1523                            data-active="true" class="custom-speed-menu-item">Normal</button><button
1524                            role="menuitem" tabindex="0" data-speed="1.25"
1525                            class="custom-speed-menu-item">1.25x</button><button role="menuitem" tabindex="0"
1526                            data-speed="1.5" class="custom-speed-menu-item">1.5x</button></div>
1527                      </div>
1528                   </div>
1529                </div>
1530             </div>
1531          </div>
1532       </div>
1533    
1534
1535        <button id="toggleLikeContent" class="icon button button__icon like button__gray icon__like" aria-label="Like">Like</button>
1536        
1537
1538
1539
1540
1541
1542
1543   
1544   <div class="bookmarkReading">
1545        <button id="bookmarkBtn" data-ref="bookmarkPage" aria-label="Read later" class="login button__gray button button__icon icon icon__bookmark icon--only"> </button>
1546      <!-- new dropdown rading list -->
1547      <div class="my-0 button__dropdown dropdown reading_list dropdown__center" id="showBookmarks">
1548         <button aria-label="Reading list" class="button button__unstyled button__small"></button>
1549         <div class="dropdown__holder">
1550            <div class="dropdown__content">
1551               <ul class="no-style dropdown__nav">
1552                  <li class="active"><a href="/showbookmarks.action">Reading list</a></li>
1553               </ul>
1554            </div>
1555         </div>
1556      </div>
1557      
1558      <div id="toastContainer" class="toast-none toast-hide">
1559          <div class="toast"><span></span></div>
1560      </div>
1561   </div>
1562   
1563
1564<script type="text/javascript">
1565        
1566        if(loggedIn){
1567                $('#showBookmarks').css('display', 'flex');
1568        }
1569        
1570        function performBookmark() {
1571                Bookmarks.toggleBookmark('news', '2026/09/airbnb-server-driven-login');
1572        }
1573        
1574        infoq.event.on('bookmarkRequested', function(e) {
1575                Bookmarks.toggleBookmark('news', '2026/09/airbnb-server-driven-login');
1576        });
1577        
1578        infoq.event.on("loaded", function(){
1579                if(loggedIn){
1580                        var href = window.location.href;
1581                        if(href.indexOf("#bookmarkPage") != -1){
1582                                $('#bookmarkBtn').click();
1583                        }
1584                }
1585        });
1586        
1587        $(document).ready(function() {
1588                if(Bookmarks.isContentBookmarked == 'true'){
1589                        $('#bookmarkBtn').addClass('button__green');
1590                        $('#bookmarkBtn').removeClass('button__gray');
1591                }else{
1592                        $('#bookmarkBtn').removeClass('button__green');
1593                        $('#bookmarkBtn').addClass('button__gray');
1594                }
1595        });
1596</script>
1596
1597
1598    </div>
1599                                
1600
1601                                <div class="article__data">
1602                                    <p>Airbnb has redesigned its authentication architecture to make login flows easier to change across Web, iOS, and Android. The new system moves authentication decisions from clients to a server-side policy engine that selects the most appropriate authentication challenge based on the user and session context. According to Airbnb, the redesign reduced authentication-related code by 60%, reduced the web client bundle by 100 KB, increased successful authentication by 2.6%, and reduced duplicate account creation by 27%.</p>
1603
1604<p>&nbsp;</p>
1605
1606<p id="gdcalert1"><img alt="" class="zoom-image" data-src="news/2026/09/airbnb-server-driven-login/en/resources/1identifythenchallenge-1787593686126.jpeg" height="400"  src="https://imgopt.infoq.com/fit-in/3000x4000/filters:quality(85)/filters:no_upscale()/news/2026/09/airbnb-server-driven-login/en/resources/1identifythenchallenge-1787593686126.jpeg" rel="share"></p>
1607
1608<p><em>Airbnb&rsquo;s Identify-then-Challenge Architecture (Source: <a href="https://medium.com/airbnb-engineering/flexible-authentication-reimagining-authentication-for-millions-of-users-at-airbnb-3a8a4c917137">Airbnb Blog Post</a>)</em></p>
1609
1610<p>The architecture separates authentication into two stages. First, users identify the account they want to access using an email address, phone number, or social login. The server then evaluates account and session information and uses a configurable policy engine to select the challenge most likely to succeed. Other supported methods are returned as fallback options. For example, the system can prefer WhatsApp OTP for a user in Brazil or a regional identity provider for a user in South Korea.</p>
1611
1612<p><a href="https://www.linkedin.com/in/jmsantos94/">Jose Santos</a>, an engineer at Airbnb, <a href="https://www.linkedin.com/posts/jmsantos94_flexible-authentication-reimagining-authentication-activity-7493382955181211649-_xCe?utm_source=share&amp;utm_medium=member_desktop&amp;rcm=ACoAAArnikgBqzTxA9Y838-O55QUcB2McACIq94">explained</a> the user problem behind the redesign:</p>
1613
1614<blockquote>
1615<p>People don&rsquo;t always remember how they created an account months or years ago. They may have changed devices, lost access to a phone number, or be using a different login method in another region. Authentication needs to adapt.</p>
1616</blockquote>
1617
1618<p>A key architectural change is that clients no longer determine which authentication challenge to present. The server makes that decision, while the client renders the screen the server returns. This allows Airbnb to change authentication strategies by region or experiment without shipping new client code.</p>
1619
1620<p>Airbnb introduced a server-driven Challenge Picker to help users recover from authentication failures without restarting the flow. Each challenge includes a Try another way option, while the server returns ranked alternatives based on previously successful methods, registered authentication methods, and platform availability.</p>
1621
1622<p><img alt="" class="zoom-image" data-src="news/2026/09/airbnb-server-driven-login/en/resources/1Screenshot 2026-08-24 at 10.50.20 AM-1787593878178.png" height="400"  src="https://imgopt.infoq.com/fit-in/3000x4000/filters:quality(85)/filters:no_upscale()/news/2026/09/airbnb-server-driven-login/en/resources/1Screenshot 2026-08-24 at 10.50.20 AM-1787593878178.png" rel="share"></p>
1623
1624<p><em>Server-Driven Authentication Flow&nbsp;(Source: <a href="https://medium.com/airbnb-engineering/flexible-authentication-reimagining-authentication-for-millions-of-users-at-airbnb-3a8a4c917137">Airbnb Blog Post</a>)</em></p>
1625
1626<p>The company extended the server-driven model across signup and login. Identifier entry, authentication challenges, account selection, and error handling are represented as server-defined screens. Web, iOS, and Android clients render these screens and return user actions to the server. Server-side schemas also generate client type definitions and help detect mismatches during development.</p>
1627
1628<p>Moving authentication flow logic to the server changed Airbnb&rsquo;s experimentation cycle. The company ran more than 20 experiments during the first three months after launch, with experiments that did not require client changes moving from idea to measured result in days rather than weeks.</p>
1629
1630<p>The redesign also covered regional authentication methods, returning user flows, loading states, and error handling. <a href="https://lnkd.in/p/gQ8gG8Tc">According</a> to Airbnb lead experience designer <a href="https://www.linkedin.com/in/chloefan/">Chloe Fan</a>, an initial minimalist version reduced engagement because it was too easy to dismiss, prompting further experimentation and refinement.</p>
1631
1632<p>Airbnb reports a 2.6% increase in successful authentication, a 27% reduction in duplicate account creation, and an approximately 11% reduction in OTP costs. The architecture allows Airbnb to continue changing authentication methods and flow logic without embedding those decisions in individual clients.</p>
1633
1634                                    
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644  
1645    <div class="author-section-full"> <!-- main wrapper for authors section -->
1646        <h2>About the Author</h2> <!-- section title -->
1647
1648        
1649            
1650                
1651            
1652            <div class="author" data-id="author-Leela-Kumili"> <!-- main wrapper for each author -->
1653                <a href="/profile/Leela-Kumili/" class="avatar author__avatar" aria-label="Leela Kumili"> </a>
1654                <div class="content-author">
1655                    <h4><strong>Leela Kumili</strong></h4>
1656                    <div class="show-author-bio">
1657                        <p>
1658                            <!-- author bio will be inserted by frontend -->
1659                        </p>
1660                        <span>
1661                            <div class="icon button-icon icon__plus-circle"></div><span class="show-more">Show more</span><span class="show-less">Show less</span>
1662                        </span>
1663                    </div>
1664                </div>
1665            </div>
1666        
1667    </div>
1668
1669                                </div>
1670
1671                                
1672                                
1673                                    
1674                                        
1675                                        
1676                                        
1677                                        
1678                                            
1679                                            
1680                                        
1681                                        
1682                                            
1683                                        
1684                                    
1685                                
1686                                
1687
1688                                
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698<input type="hidden" name="" value="Thank you for your review!" id="cr_messages_submitSuccess"/>
1699
1700<input type="hidden" name="" value="Rating is required" id="cr_messages_ratingRequired"/>
1701
1702<input type="hidden" name="" value="Airbnb Cuts Authentication Code by 60% with Server Driven Architecture" id="cr_item_title"/>
1703
1704<input type="hidden" name="" value="Leela Kumili" id="cr_item_author"/>
1705
1706<input type="hidden" name="" value="http://www.infoq.com/news/2026/09/airbnb-server-driven-login/" id="cr_item_url"/>
1707
1708<input type="hidden" name="" value="news" id="cr_item_ctype"/>
1709
1710<input type="hidden" name="" value="en" id="cr_item_lang"/>
1711
1712<input type="hidden" name="" value="1788532200000" id="cr_item_published_time"/>
1713
1714<input type="hidden" name="" value="2498" id="cr_item_primary_topic"/>
1715
1716<script type="text/javascript">
1717    ContentRating.readMessages();
1718    ContentRating.readContentItem();
1719</script>
1719
1720<form class="box__border box form rate contentRatingWidget">
1721    <h3 class="heading">Rate this Article</h3>
1722    <div class="criterias">
1723        <div class="crit" id="relevance_fieldset">
1724            <div class="crit__name">Adoption</div>
1725            <span class="stars">
1726                <input type="radio" id="relevance-star5" name="rating-relevance" value="5" /><label class="star" for="relevance-star5" title="Innovator"></label>
1727                <input type="radio" id="relevance-star4" name="rating-relevance" value="4" /><label class="star" for="relevance-star4" title="Early adopter"></label>
1728                <input type="radio" id="relevance-star3" name="rating-relevance" value="3" /><label class="star" for="relevance-star3" title="Early majority"></label>
1729                <input type="radio" id="relevance-star2" name="rating-relevance" value="2" /><label class="star" for="relevance-star2" title="Late majority"></label>
1730                <input type="radio" id="relevance-star1" name="rating-relevance" value="1" /><label class="star" for="relevance-star1" title="Laggards"></label>
1731            </span>
1732            <span class="stars__total"></span>
1733        </div>
1734        <div class="crit" id="style_fieldset">
1735            <div class="crit__name">Style</div>
1736            <span class="stars">
1737                <input type="radio" id="style-star5" name="rating-style" value="5" /><label class="star" for="style-star5" title="Exceptional"></label>
1738                <input type="radio" id="style-star4" name="rating-style" value="4" /><label class="star" for="style-star4" title="Good"></label>
1739                <input type="radio" id="style-star3" name="rating-style" value="3" /><label class="star" for="style-star3" title="Average"></label>
1740                <input type="radio" id="style-star2" name="rating-style" value="2" /><label class="star" for="style-star2" title="Acceptable"></label>
1741                <input type="radio" id="style-star1" name="rating-style" value="1" /><label class="star" for="style-star1" title="Poor"></label>
1742            </span>
1743            <span class="stars__total"></span>
1744        </div>
1745    </div>
1746</form>
1747
1748<div class="reviews tabs contentRatingWidget">
1749    <div id="editorReview" class="tab" data-title="Editor Review">
1750        <form class="box__border form contentRatingWidget" onsubmit="return false;">
1751            <span class="field input__textarea" aria-required="false">
1752                <textarea id="editor_input" placeholder="Click to leave your review..." name="textarea" value="" class="field__input"></textarea>
1753                <p class="input__message field__desc serverCallFeedback"></p>
1754            </span>
1755            <input class="button button__large submit_rating" type="submit" value="Submit"/>
1756        </form>
1757    </div>
1758
1759    <div id="chiefEditorReview" class="tab" data-title="Chief Editor Action">
1760        <form class="box__border form contentRatingWidget" onsubmit="return false;">
1761            <span class="field input__textarea">
1762                <textarea id="chiefEditor_input" placeholder="Chief Editor action..." value="" class="field__input"></textarea>
1763                <p class="input__message field__desc serverCallFeedback"></p>
1764            </span>
1765
1766            <div class="actions">
1767                <div class="actions__left">
1768                    <input class="button button__large submit_rating" type="submit" value="Submit"/>
1769                </div>
1770                <div class="actions__right">
1771                    <span class="field input__checkbox input--small">
1772                        <input type="checkbox" id="auth-checkbox" />
1773                        <label class="label" for="auth-checkbox"><span></span> Author Contacted</label>
1774                    </span>
1775                </div>
1776            </div>
1777        </form>
1778    </div>
1779</div>
1780
1781<script type="text/javascript">
1782    if (!InfoQConstants.editorUser || InfoQConstants.editorUser == 'false') {
1783       $('.contentRatingWidget').remove();
1784    } else {
1785        
1786        if (InfoQConstants.chiefEditor !== 'undefined' && InfoQConstants.chiefEditor == 'false') {
1787            $('#chiefEditorReview').remove();
1788        }
1789    }
1790</script>
1790
1791
1792                                
1793                                
1794
1795
1796
1797
1798
1799
1800<div class="widget article__fromTopic topics">
1801    
1802        <div class="widget__head related__for-topic" data-id="3686" data-trk-ref="content_primary_topic">
1803            <h4 class="heading related__heading">
1804                
1805                
1806                    
1807                This content is in the <a href='/scalability/'>Scalability</a> topic
1808            </h4>
1809        </div>
1810    
1811    <h5 class="heading related__inline">Related Topics:</h5>
1812    <ul class="no-style topics related__topics topics__small" data-trk-ref="content_related_topic">
1813         
1814            
1815                
1816                    
1817                
1818                
1819                <li data-id="6815">
1820                    <a href="/development/" class="button related__topic button__small button__black">Development</a>
1821                </li>
1822            
1823                
1824                    
1825                
1826                
1827                <li data-id="6816">
1828                    <a href="/architecture-design/" class="button related__topic button__small button__black">Architecture &amp; Design</a>
1829                </li>
1830            
1831        
1832        
1833            
1834                
1835                    
1836                
1837                
1838                <li data-id="728">
1839                    <a href="/rule_engines/" class="button related__topic button__small button__black">Rule Engines</a>
1840                </li>
1841            
1842                
1843                    
1844                
1845                
1846                <li data-id="3889">
1847                    <a href="/identity_mgmt/" class="button related__topic button__small button__black">Identity Management</a>
1848                </li>
1849            
1850                
1851                    
1852                
1853                
1854                <li data-id="18414">
1855                    <a href="/evolutionary-architecture/" class="button related__topic button__small button__black">Evolutionary Architecture</a>
1856                </li>
1857            
1858                
1859                    
1860                
1861                
1862                <li data-id="1009">
1863                    <a href="/GUI/" class="button related__topic button__small button__black">GUI</a>
1864                </li>
1865            
1866                
1867                    
1868                
1869                
1870                <li data-id="5998">
1871                    <a href="/Experiment_Driven_Development/" class="button related__topic button__small button__black">Experiment Driven Development</a>
1872                </li>
1873            
1874                
1875                    
1876                
1877                
1878                <li data-id="7420">
1879                    <a href="/Web_1/" class="button related__topic button__small button__black">Web</a>
1880                </li>
1881            
1882                
1883                    
1884                
1885                
1886                <li data-id="6516">
1887                    <a href="/Mobile-Development/" class="button related__topic button__small button__black">Mobile Development</a>
1888                </li>
1889            
1890                
1891                    
1892                
1893                
1894                <li data-id="6137">
1895                    <a href="/Distributed_Systems/" class="button related__topic button__small button__black">Distributed Systems</a>
1896                </li>
1897            
1898                
1899                    
1900                
1901                
1902                <li data-id="6280">
1903                    <a href="/Web_Applications/" class="button related__topic button__small button__black">Web Applications</a>
1904                </li>
1905            
1906                
1907                    
1908                
1909                
1910                <li data-id="43">
1911                    <a href="/policy/" class="button related__topic button__small button__black">policy</a>
1912                </li>
1913            
1914                
1915                    
1916                
1917                
1918                <li data-id="3686">
1919                    <a href="/scalability/" class="button related__topic button__small button__black">Scalability</a>
1920                </li>
1921            
1922                
1923                    
1924                
1925                
1926                <li data-id="7051">
1927                    <a href="/sweng/" class="button related__topic button__small button__black">Software Engineering</a>
1928                </li>
1929            
1930                
1931                    
1932                
1933                
1934                <li data-id="1358">
1935                    <a href="/ux/" class="button related__topic button__small button__black">User Experience</a>
1936                </li>
1937            
1938                
1939                    
1940                
1941                
1942                <li data-id="5951">
1943                    <a href="/Authentication/" class="button related__topic button__small button__black">Authentication</a>
1944                </li>
1945            
1946                
1947                    
1948                
1949                
1950                <li data-id="15696">
1951                    <a href="/Mobile-Apps/" class="button related__topic button__small button__black">Mobile Apps</a>
1952                </li>
1953            
1954                
1955                    
1956                
1957                
1958                <li data-id="1389">
1959                    <a href="/architecture/" class="button related__topic button__small button__black">Architecture</a>
1960                </li>
1961            
1962        
1963    </ul>
1964</div>
1965
1966						</div>
1967						<div id="zoom-container"></div>
1968						
1969						
1970						
1971						
1972
1973
1974
1975
1976
1977
1978
1979<script type="text/javascript">
1980    var uriMapping = "news";
1981    var showVcr = "true";
1982    var fillWithVcr = "false";
1983    var sponsorshipsJson = "{&quot;links&quot;:null}";
1984    var sponsoredLinks = $.parseJSON($("<div/>").html(sponsorshipsJson).text()).links;
1985    var numberOfSponsoredVcrIds = sponsoredLinks != null ? sponsoredLinks.length : 0;
1986
1987    var maxItems = 5 - numberOfSponsoredVcrIds;
1988    var displayWidget = false;
1989    var intervalVcrSponsorEditorial = setInterval(function() {
1990        if (window.vcrsLoaded) {
1991            clearInterval(intervalVcrSponsorEditorial);
1992            if(showVcr || fillWithVcr) {
1993                if(fillWithVcr) {
1994                    for(var index in window.vcrList) {
1995                        if(VCR.isVcrSponsored(sponsoredLinks, window.vcrList[index])) {
1996                            VCR.addToExcludedList(window.vcrList[index]);
1997                        }
1998                    }
1999                }
2000                var vcrs = VCR.getByTopicsAndCommunities(window.vcrList, topicIds, communityIds, maxItems, false, null);
2001                if (vcrs != null && vcrs.length > 0 || (sponsoredLinks != null && sponsoredLinks.length > 0)) {
2002                    VCR.addToExcludedList(vcrs);
2003                    getCommonElements(vcrs, uriMapping, "BOTTOM");
2004                    $('.related__group').find(".rvc__list").css("display", "block");
2005                    displayWidget = true;
2006                } else {
2007                    $('.related__group').find(".rvc__list").parent("li").remove();
2008                }
2009            }
2010            window.contentVcrFinished = true;
2011            // search for infoq.event.on("contentVcrFinished",... to see how/where it is used
2012            infoq.event.trigger("contentVcrFinished");
2013        }
2014    }, 200);
2015</script>
2015
2016<input type="hidden" name="" value="2498" id="cont_item_primary_topic"/>
2017
2018
2019
2020
2021<script type="text/javascript">
2022    $(document).ready(function() {
2023        $.ajax({
2024            url: "/api/recommendationlinks.action",
2025            contentType: "application/x-www-form-urlencoded; charset=utf-8",
2026            type: 'POST',
2027            data: {
2028                "primaryTopicAlias": "architecture-design",
2029                "topicIds": "724,1103,6923,757,1861,2938,2283,1964,2090,40,996,2616,869,1818,4345,876",
2030                "title": "Airbnb Cuts Authentication Code by 60% with Server Driven Architecture",
2031                "contentPath": "/news/2026/09/airbnb-server-driven-login",
2032                "language": "en"
2033            },
2034            success: displayRelatedEditorial,
2035            async: false
2036        });
2037    });
2038
2039    function displayRelatedEditorial(data) {
2040        $('.related__editorial h4').text("Related Editorial");
2041        if (data && data.length > 0) {
2042            if(data[0].fromEs) {
2043                //change title and tracking params
2044                var box_title="Architecture &amp; Design";
2045                //replace html entity since it conflicts with style
2046                box_title=box_title.replace("&amp;","&");
2047                $('.related__editorial h4').text("Popular in " + box_title);
2048            }
2049            for (var i = 0; i < data.length; i++) {
2050                if (i === 5) {
2051                    break;
2052                }
2053                if (data[i].url.indexOf("/news/2026/09/airbnb-server-driven-login") !== -1) {
2054                    console.log("Removing the current item from list...");
2055                    continue;
2056                }
2057                var theLinkURL = data[i].url;
2058                if(!theLinkURL.endsWith("/")) {
2059                    theLinkURL = theLinkURL + "/";
2060                }
2061                var link = $('<li><h5 class="rvc__title"><a title="" href="' + theLinkURL + '">' + data[i].title + '</a></h5></li>');
2062                $('.related__editorial ul').append(link);
2063            }
2064            $('.related__editorial').show();
2065            displayWidget = true;
2066        }else{
2067            $('.related__editorial').parent("li").remove();
2068        }
2069        
2070        if(displayWidget==true){
2071            $('.related__group').attr("data-cols", $('.related__group').find(">li").length);
2072            $('.related__group').css("display", "flex");
2073        }
2074    }
2075</script>
2075
2076
2077<ul class="no-style related__group nocontent cards">
2078    <li>
2079        <div class="related__editorial">
2080            <h4 class="heading">Related Editorial</h4>
2081            <ul></ul>
2082        </div>
2083    </li>
2084    <li>
2085        <ul class="no-style rvc__list f_rvcbox" data-place="BOTTOM" data-trk-view="true" data-trk-impr="true"
2086            
2087            
2088                style="display: none"
2089            
2090        >
2091            <h4 class="heading">Related Sponsors</h4>
2092            
2093            <div class="f_rvcList"></div>
2094            
2095                
2096            
2097        </ul>
2098    </li>
2099    
2100    
2101    
2102        
2103        <li class="bg-gray is-movable">
2104            <div class="related__prsp">
2105                <h4 class="heading">Popular across InfoQ</h4>
2106                <ul>
2107                    
2108                    <li>
2109                        <h5 class="rvc__title">
2110                            
2111                            <a href="/news/2026/09/cloudflare-emdash-migration/" class="rvc__link">
2112                                Cloudflare Details its Migration  to "WordPress Successor" EmDash
2113                            </a>
2114                        </h5>
2115                    </li>
2116                    
2117                    <li>
2118                        <h5 class="rvc__title">
2119                            
2120                            <a href="/news/2026/09/vercel-scriptc-node/" class="rvc__link">
2121                                Vercel Labs Ships scriptc, a TypeScript-to-Native Compiler That Leaves the JavaScript Engine behind
2122                            </a>
2123                        </h5>
2124                    </li>
2125                    
2126                    <li>
2127                        <h5 class="rvc__title">
2128                            
2129                            <a href="/news/2026/09/c-rust-rewrite/" class="rvc__link">
2130                                Google Rewrites Critical C Dependencies to Rust Using AI and Differential Fuzzing
2131                            </a>
2132                        </h5>
2133                    </li>
2134                    
2135                    <li>
2136                        <h5 class="rvc__title">
2137                            
2138                            <a href="/news/2026/09/canvas-ui-webgl/" class="rvc__link">
2139                                Canvas UI Ships 35 HTML-in-Canvas Components That Run WebGL and WebGPU Effects over Live DOM
2140                            </a>
2141                        </h5>
2142                    </li>
2143                    
2144                    <li>
2145                        <h5 class="rvc__title">
2146                            
2147                            <a href="/podcasts/enterprise-adoption-open-source-sovereignty/" class="rvc__link">
2148                                The Future of AI: from Enterprise Adoption to Open Source Sovereignty
2149                            </a>
2150                        </h5>
2151                    </li>
2152                    
2153                    <li>
2154                        <h5 class="rvc__title">
2155                            
2156                            <a href="/news/2026/09/aws-stateless-mcp/" class="rvc__link">
2157                                Stateless MCP Removes Session Affinity Requirements for AWS Server Deployments
2158                            </a>
2159                        </h5>
2160                    </li>
2161                    
2162                </ul>
2163            </div>
2164        </li>
2165        
2166    
2167</ul>
2168
2169
2170						
2171							
2172							
2173							
2174							
2175
2176
2177
2178
2179
2180
2181
2182
2183
2184
2185
2186
2187
2188
2189
2190
2191
2192
2193
2194							
2195						
2196					</div>
2197					<div class="column article__more f_article_rightbar" data-col="2/6">
2198						
2199							
2200
2201
2202
2203
2204
2205<script type="text/javascript">
2206    window.finishedRightbarVcr = false;
2207
2208    var _gaq = _gaq || [];
2209	var recomJson ="[{&quot;imageStoragePath&quot;:&quot;https://imgopt.infoq.com/fit-in/50x50/filters:quality(80)/presentations/decision-models-agentic-ai/en/smallimage/alex-porcelli-thumbnail-1789021621084.jpeg&quot;,&quot;topicsIds&quot;:null,&quot;date&quot;:1789383600000,&quot;contentType&quot;:&quot;presentations&quot;,&quot;url&quot;:&quot;/presentations/decision-models-agentic-ai&quot;,&quot;title&quot;:&quot;Decision Models in Agentic Architectures: from Production to Agent Skills&quot;,&quot;authorsList&quot;:[&quot;Alex Porcelli&quot;],&quot;itemPath&quot;:&quot;/presentations/decision-models-agentic-ai&quot;,&quot;score&quot;:75201},{&quot;imageStoragePath&quot;:&quot;https://imgopt.infoq.com/fit-in/50x50/filters:quality(80)/articles/multi-region-latency-cost-tradeoffs/en/smallimage/multi-region-latency-cost-tradeoffs-thumbnail-1783416229477.jpg&quot;,&quot;topicsIds&quot;:null,&quot;date&quot;:1783674000000,&quot;contentType&quot;:&quot;articles&quot;,&quot;url&quot;:&quot;/articles/multi-region-latency-cost-tradeoffs&quot;,&quot;title&quot;:&quot;Trade-Offs in Multi-Region Architectures: Latency vs. Cost&quot;,&quot;authorsList&quot;:[&quot;Uttara Asthana&quot;],&quot;itemPath&quot;:&quot;/articles/multi-region-latency-cost-tradeoffs&quot;,&quot;score&quot;:55401},{&quot;imageStoragePath&quot;:null,&quot;topicsIds&quot;:null,&quot;date&quot;:1790035020000,&quot;contentType&quot;:&quot;news&quot;,&quot;url&quot;:&quot;/news/2026/09/native-deferred-html-streaming&quot;,&quot;title&quot;:&quot;Out-of-Order HTML Streaming Moves from JS Frameworks into the Browser&quot;,&quot;authorsList&quot;:[&quot;Bruno Couriol&quot;],&quot;itemPath&quot;:&quot;/news/2026/09/native-deferred-html-streaming&quot;,&quot;score&quot;:181},{&quot;imageStoragePath&quot;:&quot;https://imgopt.infoq.com/fit-in/50x50/filters:quality(80)/articles/gcp-wif-scale/en/smallimage/gcp-wif-scale-thumbnail-1787838950646.jpg&quot;,&quot;topicsIds&quot;:null,&quot;date&quot;:1788174000000,&quot;contentType&quot;:&quot;articles&quot;,&quot;url&quot;:&quot;/articles/gcp-wif-scale&quot;,&quot;title&quot;:&quot;Eliminating Long-Lived Credentials in GCP with Workload Identity Federation&quot;,&quot;authorsList&quot;:[&quot;Shijin Nair&quot;],&quot;itemPath&quot;:&quot;/articles/gcp-wif-scale&quot;,&quot;score&quot;:142},{&quot;imageStoragePath&quot;:&quot;https://imgopt.infoq.com/fit-in/50x50/filters:quality(80)/articles/aws-multi-region-signing/en/smallimage/aws-multi-region-signing-thumbnail-1783602485181.jpg&quot;,&quot;topicsIds&quot;:null,&quot;date&quot;:1783940400000,&quot;contentType&quot;:&quot;articles&quot;,&quot;url&quot;:&quot;/articles/aws-multi-region-signing&quot;,&quot;title&quot;:&quot;Removing a Hidden Round Trip from a Multi-Region AWS API&quot;,&quot;authorsList&quot;:[&quot;Suresh Gururajan&quot;],&quot;itemPath&quot;:&quot;/articles/aws-multi-region-signing&quot;,&quot;score&quot;:112},{&quot;imageStoragePath&quot;:&quot;https://imgopt.infoq.com/fit-in/50x50/filters:quality(80)/articles/metrics-driven-approach-ios-performance/en/smallimage/metrics-driven-approach-ios-performance-thumbnail-1777624958302.jpg&quot;,&quot;topicsIds&quot;:null,&quot;date&quot;:1778058000000,&quot;contentType&quot;:&quot;articles&quot;,&quot;url&quot;:&quot;/articles/metrics-driven-approach-ios-performance&quot;,&quot;title&quot;:&quot;Beyond the Benchmark: a Metrics-Driven Approach to Sustained iOS Performance on Real Devices&quot;,&quot;authorsList&quot;:[&quot;Vasuki Uday Kiran Vudathala&quot;],&quot;itemPath&quot;:&quot;/articles/metrics-driven-approach-ios-performance&quot;,&quot;score&quot;:100},{&quot;imageStoragePath&quot;:null,&quot;topicsIds&quot;:null,&quot;date&quot;:1790603700000,&quot;contentType&quot;:&quot;news&quot;,&quot;url&quot;:&quot;/news/2026/09/meta-zgateway-zippydb-proxy&quot;,&quot;title&quot;:&quot;Meta’s ZGateway Cuts ZippyDB Connections 19x While Handling 1B+ Operations per Second&quot;,&quot;authorsList&quot;:[&quot;Leela Kumili&quot;],&quot;itemPath&quot;:&quot;/news/2026/09/meta-zgateway-zippydb-proxy&quot;,&quot;score&quot;:39},{&quot;imageStoragePath&quot;:null,&quot;topicsIds&quot;:null,&quot;date&quot;:1790169720000,&quot;contentType&quot;:&quot;news&quot;,&quot;url&quot;:&quot;/news/2026/09/cloudflare-dns-cache&quot;,&quot;title&quot;:&quot;
2209Cloudflare Cuts 100 TB of Memory from 1.1.1.1 DNS Cache&quot;,&quot;authorsList&quot;:[&quot;Leela Kumili&quot;],&quot;itemPath&quot;:&quot;/news/2026/09/cloudflare-dns-cache&quot;,&quot;score&quot;:37},{&quot;imageStoragePath&quot;:null,&quot;topicsIds&quot;:null,&quot;date&quot;:1790001420000,&quot;contentType&quot;:&quot;news&quot;,&quot;url&quot;:&quot;/news/2026/09/uber-m3db-subcluster-sharding&quot;,&quot;title&quot;:&quot;Uber Redesigns M3DB Sharding with Subclusters to Limit Failure Impact&quot;,&quot;authorsList&quot;:[&quot;Leela Kumili&quot;],&quot;itemPath&quot;:&quot;/news/2026/09/uber-m3db-subcluster-sharding&quot;,&quot;score&quot;:36},{&quot;imageStoragePath&quot;:null,&quot;topicsIds&quot;:null,&quot;date&quot;:1789136220000,&quot;contentType&quot;:&quot;news&quot;,&quot;url&quot;:&quot;/news/2026/09/netflix-conductor-4-workflow&quot;,&quot;title&quot;:&quot;Netflix Reworks Conductor for 420 Million Monthly Workflow Executions and 10X Larger Workflows&quot;,&quot;authorsList&quot;:[&quot;Leela Kumili&quot;],&quot;itemPath&quot;:&quot;/news/2026/09/netflix-conductor-4-workflow&quot;,&quot;score&quot;:32},{&quot;imageStoragePath&quot;:null,&quot;topicsIds&quot;:null,&quot;date&quot;:1788789960000,&quot;contentType&quot;:&quot;news&quot;,&quot;url&quot;:&quot;/news/2026/09/netflix-flink-autoscaler&quot;,&quot;title&quot;:&quot;Netflix Moves toward Open Source Flink Autoscaler for 30,000+ Streaming Jobs&quot;,&quot;authorsList&quot;:[&quot;Leela Kumili&quot;],&quot;itemPath&quot;:&quot;/news/2026/09/netflix-flink-autoscaler&quot;,&quot;score&quot;:31},{&quot;imageStoragePath&quot;:null,&quot;topicsIds&quot;:null,&quot;date&quot;:1790776020000,&quot;contentType&quot;:&quot;news&quot;,&quot;url&quot;:&quot;/news/2026/09/cursor-continuity-git-storage&quot;,&quot;title&quot;:&quot;Cursor Uses S3 WAL to Scale Git Storage to More than 300 Pushes per Second&quot;,&quot;authorsList&quot;:[&quot;Leela Kumili&quot;],&quot;itemPath&quot;:&quot;/news/2026/09/cursor-continuity-git-storage&quot;,&quot;score&quot;:20},{&quot;imageStoragePath&quot;:null,&quot;topicsIds&quot;:null,&quot;date&quot;:1790341080000,&quot;contentType&quot;:&quot;news&quot;,&quot;url&quot;:&quot;/news/2026/09/aws-stateless-mcp&quot;,&quot;title&quot;:&quot;Stateless MCP Removes Session Affinity Requirements for AWS Server Deployments&quot;,&quot;authorsList&quot;:[&quot;Leela Kumili&quot;],&quot;itemPath&quot;:&quot;/news/2026/09/aws-stateless-mcp&quot;,&quot;score&quot;:18},{&quot;imageStoragePath&quot;:null,&quot;topicsIds&quot;:null,&quot;date&quot;:1789569720000,&quot;contentType&quot;:&quot;news&quot;,&quot;url&quot;:&quot;/news/2026/09/dropbox-riviera-ai-platform&quot;,&quot;title&quot;:&quot;Dropbox Evolves Riviera Content Processing Platform to Support AI Workloads&quot;,&quot;authorsList&quot;:[&quot;Leela Kumili&quot;],&quot;itemPath&quot;:&quot;/news/2026/09/dropbox-riviera-ai-platform&quot;,&quot;score&quot;:18},{&quot;imageStoragePath&quot;:&quot;https://imgopt.infoq.com/fit-in/50x50/filters:quality(80)/presentations/ai-agent-harness/en/smallimage/vino-thumbnail-1789631870270.jpeg&quot;,&quot;topicsIds&quot;:null,&quot;date&quot;:1789988400000,&quot;contentType&quot;:&quot;presentations&quot;,&quot;url&quot;:&quot;/presentations/ai-agent-harness&quot;,&quot;title&quot;:&quot;The Agent Harness: Control Planes, Invariants, and Approval Boundaries for Production AI Agents&quot;,&quot;authorsList&quot;:[&quot;Vinoth Govindarajan&quot;],&quot;itemPath&quot;:&quot;/presentations/ai-agent-harness&quot;,&quot;score&quot;:17},{&quot;imageStoragePath&quot;:&quot;https://imgopt.infoq.com/fit-in/50x50/filters:quality(80)/minibooks/architect-sociotechnical-craft/en/smallimage/thumb-1787566215701.jpg&quot;,&quot;topicsIds&quot;:null,&quot;date&quot;:1787311800000,&quot;contentType&quot;:&quot;minibooks&quot;,&quot;url&quot;:&quot;/minibooks/architect-sociotechnical-craft&quot;,&quot;title&quot;:&quot;Architecture as a Socio-Technical Craft&quot;,&quot;authorsList&quot;:[&quot;InfoQ&quot;],&quot;itemPath&quot;:&quot;/minibooks/architect-sociotechnical-craft&quot;,&quot;score&quot;:17},{&quot;imageStoragePath&quot;:null,&quot;topicsIds&quot;:null,&quot;date&quot;:1789393680000,&quot;contentType&quot;:&quot;news&quot;,&quot;url&quot;:&quot;/news/2026/09/agoda-price-cache-dragonflydb&quot;,&quot;title&quot;:&quot;Agoda Replaces 72-Shard SQL Server Price Cache with DragonflyDB&quot;,&quot;authorsList&quot;:[&quot;Leela Kumili&quot;],&quot;itemPath&quot;:&quot;/news/2026/09/agoda-price-cache-dragonflydb&quot;,&quot;score&quot;:16},{&quot;imageStoragePath&quot;:&quot;https://imgopt.infoq.com/fit-in/50x50/filters:quality(80)/articles/ai-agents-improve-software-architecture/en/smallimage/ai-agents-improve-software-architecture-thumbnail-1
2209790153650841.jpg&quot;,&quot;topicsIds&quot;:null,&quot;date&quot;:1790593200000,&quot;contentType&quot;:&quot;articles&quot;,&quot;url&quot;:&quot;/articles/ai-agents-improve-software-architecture&quot;,&quot;title&quot;:&quot;Five Ways To Use AI Coding Agents to Improve Your Software Architecture&quot;,&quot;authorsList&quot;:[&quot;Pierre Pureur&quot;,&quot;Kurt Bittner&quot;,&quot;Todd Miller&quot;],&quot;itemPath&quot;:&quot;/articles/ai-agents-improve-software-architecture&quot;,&quot;score&quot;:15},{&quot;imageStoragePath&quot;:&quot;https://imgopt.infoq.com/fit-in/50x50/filters:quality(80)/presentations/netflix-commerce-architecture-evolution/en/smallimage/kasia-trapszo-thumbnail-1787217920531.jpg&quot;,&quot;topicsIds&quot;:null,&quot;date&quot;:1787914800000,&quot;contentType&quot;:&quot;presentations&quot;,&quot;url&quot;:&quot;/presentations/netflix-commerce-architecture-evolution&quot;,&quot;title&quot;:&quot;From DVDs to Global Streaming: How Netflix’s Commerce Architecture Actually Evolved&quot;,&quot;authorsList&quot;:[&quot;Kasia Trapszo&quot;],&quot;itemPath&quot;:&quot;/presentations/netflix-commerce-architecture-evolution&quot;,&quot;score&quot;:14},{&quot;imageStoragePath&quot;:&quot;https://imgopt.infoq.com/fit-in/50x50/filters:quality(80)/presentations/cd-reliability-innovation/en/smallimage/ian-nowland-thumbn
2209ail-1787217621961.jpg&quot;,&quot;topicsIds&quot;:null,&quot;date&quot;:1787664840000,&quot;contentType&quot;:&quot;presentations&quot;,&quot;url&quot;:&quot;/presentations/cd-reliability-innovation&quot;,&quot;title&quot;:&quot;Continuous Delivery for Foundational Platforms&quot;,&quot;authorsList&quot;:[&quot;Ian Nowland&quot;],&quot;itemPath&quot;:&quot;/presentations/cd-reliability-innovation&quot;,&quot;score&quot;:13},{&quot;imageStoragePath&quot;:&quot;https://imgopt.infoq.com/fit-in/50x50/filters:quality(80)/presentations/progressive-collapse-system-resilience/en/smallimage/sam-newman-thumbnail-1785845419904.jpg&quot;,&quot;topicsIds&quot;:null,&quot;date&quot;:1787137200000,&quot;contentType&quot;:&quot;presentations&quot;,&quot;url&quot;:&quot;/presentations/progressive-collapse-system-resilience&quot;,&quot;title&quot;:&quot;Understanding Progressive Collapse: How To Avoid A Cascading Failure&quot;,&quot;authorsList&quot;:[&quot;Sam Newman&quot;],&quot;itemPath&quot;:&quot;/presentations/progressive-collapse-system-resilience&quot;,&quot;score&quot;:13},{&quot;imageStoragePath&quot;:&quot;https://imgopt.infoq.com/fit-in/50x50/filters:quality(80)/articles/agentic-fitness-functions-evolutionary-architecture/en/smallimage/thumbnail-1786428822427.jpg&quot;,&quot;topicsIds&quot;:null,&quot;date&quot;:1786964400000,&quot;contentType&quot;:&quot;articles&quot;,&quot;url&quot;:&quot;/articles/agentic-fitness-functions-evolutionary-architecture&quot;,&quot;title&quot;:&quot;Agentic Fitness Functions: Extending Evolutionary Architecture Beyond Deterministic Rules&quot;,&quot;authorsList&quot;:[&quot;Hemant Kumar Mahato&quot;,&quot;Łukasz Sieczkowski&quot;,&quot;Vijayasenthilkumar Kuppusamy&quot;],&quot;itemPath&quot;:&quot;/articles/agentic-fitness-functions-evolutionary-architecture&quot;,&quot;score&quot;:13},{&quot;imageStoragePath&quot;:&quot;https://imgopt.infoq.com/fit-in/50x50/filters:quality(80)/articles/system-comprehension-evolutionary-architecture/en/smallimage/thumbnail-1786087830832.jpg&quot;,&quot;topicsIds&quot;:null,&quot;date&quot;:1786359600000,&quot;contentType&quot;:&quot;articles&quot;,&quot;url&quot;:&quot;/articles/system-comprehension-evolutionary-architecture&quot;,&quot;title&quot;:&quot;Comprehension as an Architectural Characteristic: A System That Is Not Understood Cannot Evolve Safely&quot;,&quot;authorsList&quot;:[&quot;Jacobus Meintjes&quot;,&quot;Narayana Rengaswamy&quot;,&quot;Paul Katsande&quot;,&quot;Sureshbabu Bikki&quot;],&quot;itemPath&quot;:&quot;/articles/system-comprehension-evolutionary-architecture&quot;,&quot;score&quot;:12},{&quot;imageStoragePath&quot;:&quot;https://imgopt.infoq.com/fit-in/50x50/filters:quality(80)/articles/evolutionary-architecture-change-locality/en/smallimage/evolutionary-architecture-change-locality-thumbnail-1785239081753.jpg&quot;,&quot;topicsIds&quot;:null,&quot;date&quot;:1785754800000,&quot;contentType&quot;:&quot;articles&quot;,&quot;url&quot;:&quot;/articles/evolutionary-architecture-change-locality&quot;,&quot;title&quot;:&quot;Enabling Evolutionary Architecture through the Preservation of Change Locality&quot;,&quot;authorsList&quot;:[&quot;Michael Fischer&quot;,&quot;Nicholas Lawrence&quot;,&quot;Monica Karekar&quot;],&quot;itemPath&quot;:&quot;/articles/evolutionary-architecture-change-locality&quot;,&quot;score&quot;:12},{&quot;imageStoragePath&quot;:&quot;https://imgopt.infoq.com/fit-in/50x50/filters:quality(80)/presentations/disaggregation-industrial-systems/en/smallimage/murat-demirbas-thumbnail-1784809202010.jpg&quot;,&quot;topicsIds&quot;:null,&quot;date&quot;:1785419400000,&quot;contentType&quot;:&quot;presentations&quot;,&quot;url&quot;:&quot;/presentations/disaggregation-industrial-systems&quot;,&quot;title&quot;:&quot;Parting the Clouds: the Rise of Disaggregated Systems&quot;,&quot;authorsList&quot;:[&quot;Murat Demirbas&quot;],&quot;itemPath&quot;:&quot;/presentations/disaggregation-industrial-systems&quot;,&quot;score&quot;:12},{&quot;imageStoragePath&quot;:&quot;https://imgopt.infoq.com/fit-in/50x50/filters:quality(80)/articles/evolutionary-architecture-pattern/en/smallimage/evolutionary-architecture-pattern-thumbn
2209ail-1784798616611.jpg&quot;,&quot;topicsIds&quot;:null,&quot;date&quot;:1785150000000,&quot;contentType&quot;:&quot;articles&quot;,&quot;url&quot;:&quot;/articles/evolutionary-architecture-pattern&quot;,&quot;title&quot;:&quot;An Evolutionary Architecture Pattern for Managing AI’s Pace of Change&quot;,&quot;authorsList&quot;:[&quot;Joe Price&quot;,&quot;Branimir Đurek&quot;,&quot;Pavlos Migkiros&quot;,&quot;Trevor Dearham&quot;],&quot;itemPath&quot;:&quot;/articles/evolutionary-architecture-pattern&quot;,&quot;score&quot;:12},{&quot;imageStoragePath&quot;:&quot;https://imgopt.infoq.com/fit-in/50x50/filters:quality(80)/articles/ai-speed-context-store-architecture/en/smallimage/ai-speed-context-store-architecture-thumbnail-1783673492911.jpg&quot;,&quot;topicsIds&quot;:null,&quot;date&quot;:1784019600000,&quot;contentType&quot;:&quot;articles&quot;,&quot;url&quot;:&quot;/articles/ai-speed-context-store-architecture&quot;,&quot;title&quot;:&quot;Comprehension at AI Speed: Building a Context Store for Evolutionary Architecture&quot;,&quot;authorsList&quot;:[&quot;Stella Berhe&quot;,&quot;Stephan Bragner&quot;,&quot;Vikram Maran&quot;,&quot;Anand Jayaraman&quot;],&quot;itemPath&quot;:&quot;/articles/ai-speed-context-store-architecture&quot;,&quot;score&quot;:11},{&quot;imageStoragePath&quot;:&quot;https://imgopt.infoq.com/fit-in/50x50/filters:quality(80)/articles/adaptive-hedged-requests-p99-latency/en/smallimage/thumbnail-1779785816730.jpg&quot;,&quot;topicsIds&quot;:null,&quot;date&quot;:1779958800000,&quot;contentType&quot;:&quot;articles&quot;,&quot;url&quot;:&quot;/articles/adaptive-hedged-requests-p99-latency&quot;,&quot;title&quot;:&quot;Stragglers, Not Failures: How Adaptive Hedged Requests Reduce p99 Latency by 74 Percent&quot;,&quot;authorsList&quot;:[&quot;Prathamesh Bhope&quot;],&quot;itemPath&quot;:&quot;/articles/adaptive-hedged-requests-p99-latency&quot;,&quot;score&quot;:11},{&quot;imageStoragePath&quot;:&quot;https://imgopt.infoq.com/fit-in/50x50/filters:quality(80)/presentations/ai-infrastructure-scaling-architecture/en/smallimage/infoq-live-thumbnail-1782888285223.jpg&quot;,&quot;topicsIds&quot;:null,&quot;date&quot;:1782903600000,&quot;contentType&quot;:&quot;presentations&quot;,&quot;url&quot;:&quot;/presentations/ai-infrastructure-scaling-architecture&quot;,&quot;title&quot;:&quot;The Infrastructure Challenge behind Production AI&quot;,&quot;authorsList&quot;:[&quot;Simerus Mahesh&quot;,&quot;Alex Infanzon&quot;,&quot;Meryem Arik&quot;,&quot;Luca Bianchi&quot;,&quot;Renato Losio&quot;],&quot;itemPath&quot;:&quot;/presentations/ai-infrastructure-scaling-architecture&quot;,&quot;score&quot;:10},{&quot;imageStoragePath&quot;:&quot;https://imgopt.infoq.com/fit-in/50x50/filters:quality(80)/articles/continuous-authorization-cloud/en/smallimage/continuous-authorization-cloud-thumbnail-1781599988842.jpg&quot;,&quot;topicsIds&quot;:null,&quot;date&quot;:1781859600000,&quot;contentType&quot;:&quot;articles&quot;,&quot;url&quot;:&quot;/articles/continuous-authorization-cloud&quot;,&quot;title&quot;:&quot;Designing Continuous Authorization for Sensitive Cloud Systems&quot;,&quot;authorsList&quot;:[&quot;Venkata Nedunoori&quot;],&quot;itemPath&quot;:&quot;/articles/continuous-authorization-cloud&quot;,&quot;score&quot;:10},{&quot;imageStoragePath&quot;:&quot;https://imgopt.infoq.com/fit-in/50x50/filters:quality(80)/articles/architectural-change-cases/en/smallimage/architectural-change-cases-thumbnail-1780316814045.jpg&quot;,&quot;topicsIds&quot;:null,&quot;date&quot;:1780563600000,&quot;contentType&quot;:&quot;articles&quot;,&quot;url&quot;:&quot;/articles/architectural-change-cases&quot;,&quot;title&quot;:&quot;Architectural Change Cases: a Practical Tool for Evolutionary Architectures&quot;,&quot;authorsList&quot;:[&quot;Pierre Pureur&quot;,&quot;Kurt Bittner&quot;],&quot;itemPath&quot;:&quot;/articles/architectural-change-cases&quot;,&quot;score&quot;:10},{&quot;imageStoragePath&quot;:&quot;https://imgopt.infoq.com/fit-in/50x50/filters:quality(80)/presentations/realtime-gpu-workloads/en/smallimage/thumbnail-1779194310932.jpg&quot;,&quot;topicsIds&quot;:null,&quot;date&quot;:1779786480000,&quot;contentType&quot;:&quot;presentations&quot;,&quot;url&quot;:&quot;/presentations/realtime-gpu-workloads&quot;,&quot;title&quot;:&quot;Realtime and Batch Processing of GPU Workloads&quot;,&quot;authorsList&quot;:[&quot;Joseph Stein&quot;],&quot;itemPath&quot;:&quot;/presentations/realtime-gpu-workloads&quot;,&quot;score&quot;:10},{&quot;imageStoragePath&quot;:&quot;https://imgopt.infoq.com/fit-in/50x50/filters:quality(80)/presentations/ai-gateway-scalability/en/smallimage/thumbn
2209ail-1778663382364.jpg&quot;,&quot;topicsIds&quot;:null,&quot;date&quot;:1779280800000,&quot;contentType&quot;:&quot;presentations&quot;,&quot;url&quot;:&quot;/presentations/ai-gateway-scalability&quot;,&quot;title&quot;:&quot;The AI Gateway: Scaling Centralized Inference across Decentralized Teams&quot;,&quot;authorsList&quot;:[&quot;Meryem Arik&quot;],&quot;itemPath&quot;:&quot;/presentations/ai-gateway-scalability&quot;,&quot;score&quot;:10},{&quot;imageStoragePath&quot;:&quot;https://imgopt.infoq.com/fit-in/50x50/filters:quality(80)/presentations/ai-large-scale-engineering-systems/en/smallimage/thumbnail-1778069080461.jpeg&quot;,&quot;topicsIds&quot;:null,&quot;date&quot;:1778850000000,&quot;contentType&quot;:&quot;presentations&quot;,&quot;url&quot;:&quot;/presentations/ai-large-scale-engineering-systems&quot;,&quot;title&quot;:&quot;Using AI as a Thinking Partner for Large-Scale Engineering Systems&quot;,&quot;authorsList&quot;:[&quot;Julie Qiu&quot;],&quot;itemPath&quot;:&quot;/presentations/ai-large-scale-engineering-systems&quot;,&quot;score&quot;:10},{&quot;imageStoragePath&quot;:&quot;https://imgopt.infoq.com/fit-in/50x50/filters:quality(80)/minibooks/architecting-autonomy/en/smallimage/emag-124-Architecting-Autonomy-thumb-image-1778565056506.jpg&quot;,&quot;topicsIds&quot;:null,&quot;date&quot;:1778842800000,&quot;contentType&quot;:&quot;minibooks&quot;,&quot;url&quot;:&quot;/minibooks/architecting-autonomy&quot;,&quot;title&quot;:&quot;Architecting Autonomy: Decentralising Architecture Inside an Organization&quot;,&quot;authorsList&quot;:[&quot;InfoQ&quot;],&quot;itemPath&quot;:&quot;/minibooks/architecting-autonomy&quot;,&quot;score&quot;:10},{&quot;imageStoragePath&quot;:&quot;https://imgopt.infoq.com/fit-in/50x50/filters:quality(80)/articles/platform-reliability-cycle/en/smallimage/platform-reliability-cycle-thumbnail-1777467114542.jpg&quot;,&quot;topicsIds&quot;:null,&quot;date&quot;:1777971600000,&quot;contentType&quot;:&quot;articles&quot;,&quot;url&quot;:&quot;/articles/platform-reliability-cycle&quot;,&quot;title&quot;:&quot;Three Pillars of Platform Engineering: a Virtuous Cycle&quot;,&quot;authorsList&quot;:[&quot;Pratik Agarwal&quot;],&quot;itemPath&quot;:&quot;/articles/platform-reliability-cycle&quot;,&quot;score&quot;:10},{&quot;imageStoragePath&quot;:&quot;https://imgopt.infoq.com/fit-in/50x50/filters:quality(80)/presentations/human-scalability/en/smallimage/CharlottedeJongSchouwenburg-thumbnail-1776859417660.jpeg&quot;,&quot;topicsIds&quot;:null,&quot;date&quot;:1777898400000,&quot;contentType&quot;:&quot;presentations&quot;,&quot;url&quot;:&quot;/presentations/human-scalability&quot;,&quot;title&quot;:&quot;The Human Scalability Problem: Why Your Teams Don’t Scale Like Your Code&quot;,&quot;authorsList&quot;:[&quot;Charlotte de Jong Schouwenburg&quot;],&quot;itemPath&quot;:&quot;/presentations/human-scalability&quot;,&quot;score&quot;:10},{&quot;imageStoragePath&quot;:&quot;https://imgopt.infoq.com/fit-in/50x50/filters:quality(80)/presentations/latency-techniques/en/smallimage/amir-langer-thumbnail-1774444318217.jpg&quot;,&quot;topicsIds&quot;:null,&quot;date&quot;:1775831280000,&quot;contentType&quot;:&quot;presentations&quot;,&quot;url&quot;:&quot;/presentations/latency-techniques&quot;,&quot;title&quot;:&quot;Latency: the Race to Zero...Are We There Yet?&quot;,&quot;authorsList&quot;:[&quot;Amir Langer&quot;],&quot;itemPath&quot;:&quot;/presentations/latency-techniques&quot;,&quot;score&quot;:10},{&quot;imageStoragePath&quot;:null,&quot;topicsIds&quot;:null,&quot;date&quot;:1790836260000,&quot;contentType&quot;:&quot;news&quot;,&quot;url&quot;:&quot;/news/2026/10/container-apps-express-sandboxes&quot;,&quot;title&quot;:&quot;Container Apps Express Reaches GA on a Newly Generally Available Sandbox Layer&quot;,&quot;authorsList&quot;:[&quot;Steef-Jan Wiggers&quot;],&quot;itemPath&quot;:&quot;/news/2026/10/container-apps-express-sandboxes&quot;,&quot;score&quot;:2},{&quot;imageStoragePath&quot;:null,&quot;topicsIds&quot;:null,&quot;date&quot;:1790663580000,&quot;contentType&quot;:&quot;news&quot;,&quot;url&quot;:&quot;/news/2026/09/cloudflare-python-workers-ga&quot;,&quot;title&quot;:&quot;Python Workers Reach GA on Cloudflare, with Questions About Cold Starts and Upstream Maintenance&quot;,&quot;authorsList&quot;:[&quot;Steef-Jan Wiggers&quot;],&quot;itemPath&quot;:&quot;/news/2026/09/cloudflare-python-workers-ga&quot;,&quot;score&quot;:1}]";
2210	var whitepaperVcrsJson = null;
2211	var topicSponsorshipJson = "";
2212	var vcrOptionalListJson = null;
2213	/* do not delete these two, as they are used further in the code */
2214	var contentDatetimeFormat='MMM dd, yyyy';
2215	var contentUriMapping="news";
2216	JSi18n.relatedRightbar_relatedContent='Related Content';
2217	JSi18n.relatedRightbar_sponsoredContent='Related Sponsors';
2218	JSi18n.relatedRightbar_sponsoredBy='Sponsored by';
2219
2220	var topicIds = "724,1103,6923,757,1861,2938,2283,1964,2090,40,996,2616,869,1818,4345,876";
2221	var communityIds = "2497,2498";
2222	var company = "";
2223
2224
2225    // this event is fired by frontend once all the necessary things have been done(mobile display, moving vcr boxes around when needed...)
2226    var canStartTrackingCustomRightbar = false;
2227    infoq.event.on('loaded', function(e) {
2228        canStartTrackingCustomRightbar = true;
2229    });
2230
2231    var intervalRightbar = setInterval(function() {
2232        if (window.vcrsLoaded) {
2233            clearInterval(intervalRightbar);
2234            if(company != null && company != "") {
2235                whitepaperVcrsJson = VCR.filterByCompany(company, window.vcrList);
2236            } else {
2237                whitepaperVcrsJson = VCR.getByTopicsAndCommunities(window.vcrList, topicIds, communityIds, 5, false, null);
2238            }
2239            vcrOptionalListJson = VCR.getByTopicsAndCommunities(window.vcrList, topicIds, communityIds, 10, true, null);
2240
2241            VCR.displayCustomRightbar(recomJson, whitepaperVcrsJson, topicSponsorshipJson);
2242            VCR.displayCustomRightbarOptionalVcrWidget(vcrOptionalListJson);
2243
2244            window.finishedRightbarVcr = true;
2245        }
2246    }, 200);
2247
2248    // these two events can happen one before another async(no precedence any can be first or second). Make sure tracking starts when both happened
2249    var intervalTrackingRightbar = setInterval(function() {
2250        if(canStartTrackingCustomRightbar && window.finishedRightbarVcr){
2251            clearInterval(intervalTrackingRightbar);
2252            VCR.doTrackingCustomRightbar();
2253        }
2254    }, 200);
2255
2256
2257</script>
2257
2258<noscript>
2259<div class="widget related__content article__widget">
2260    <h3 class="widget__heading">Related Content</h3>
2261    <ul class="no-style cards" data-horizontal="true" data-size="xs" data-tax="">
2262        
2263        
2264    </ul>
2265</div>
2266</noscript>
2267						
2268						
2269						
2270
2271
2272
2273
2274
2275
2276<div class="newsletter widget" data-bg="infoq">
2277	<h3 class="heading"><strong>The InfoQ</strong> Newsletter</h3>
2278	<p class="intro">
2279        A round-up of last week&#x2019;s content on InfoQ sent out every Tuesday. Join a community of over 250,000 senior developers.
2280        
2281			<a target="_blank" href="https://assets.infoq.com/newsletter/regular/en/newsletter_sample/newsletter_sample.html">View an example</a>
2282        
2283        
2284    </p>
2285	<div class="newsletter__subscribe">
2286		<form class="form gdpr" id="floatingNewsletterForm" action="#" onsubmit="floatingNewsletterForm.saveSubscription(); return false;">
2287			<div class="field input__text input__no-label input__medium newsletter__mail email">
2288				<label class="field__label label" for="email-newsletter-infoq-guide">Enter your e-mail address</label>
2289				<input class="field__input input" id="email-newsletter-infoq-guide" placeholder="Enter your e-mail address" type="email">
2290				<input type="text" name="emailH" id="input_floating_email_h" aria-required="false" style="display:none !important" tabindex="-1" autocomplete="off">
2291				<input type="hidden" id="floating_fnt" name="fnt" value="EHpIzrADJYuZGDbo"/>
2292				<input type="hidden" id="floatingNewsletterType" name="footerNewsletterType" value="regular"/>
2293				<input type="hidden" id="cmpi_f" name="cmpi" value="1"/>
2294			</div>
2295			<div class="hidden">
2296				<span class="input__select field country">
2297					<label for="input-floating-newsletter-country" class="label field__label">Select your country</label>
2298					<select id="input-floating-newsletter-country" class="select field__input">
2299						<option value="" class="select__option">Select a country</option>
2300					</select>
2301					<p class="input__message field__desc"></p>
2302				</span>
2303				<span class="input__checkbox field hidden">
2304					<input type="checkbox" id="gdpr-consent-simple-floating-nl">
2305					<label for="gdpr-consent-simple-floating-nl" class="label"><span>I consent to InfoQ.com handling my data as explained in this <a href="https://www.infoq.com/privacy-notice">Privacy Notice</a>.</span></label>
2306				</span>
2307			</div>
2308			<input class="button button__medium button__yellow" type="submit" role="button" value="Subscribe" onclick="return floatingNewsletterForm.validateEmail('Invalid email address');">
2309		</form>
2310		<p class="meta">
2311			<a href="/privacy-notice/" target="_blank">We protect your privacy.</a>
2312		</p>
2313		
2314		<span class="success" style="display:none;" id="floatingNewsletterEmailMessage"></span>
2315	</div>
2316</div>
2317<script type="text/javascript">
2318	var floatingNewsletterForm = new Newsletter('Enter your e-mail address',
2319			'email-newsletter-infoq-guide', 'floatingNewsletterType','floatingNewsletterEmailMessage', 'floating_fnt', 'input_floating_email_h', 'input-floating-newsletter-country','cmpi_f','floating_box');
2320</script>
2320
2321
2322					</div>
2323				</div>
2324			</div>
2325		</section>
2326	</article>
2327
2328<script type="text/javascript">
2329	// global vars that can be used for this page, us ethis section to add more.
2330	var contentTitle = "Airbnb Cuts Authentication Code by 60% with Server Driven Architecture",
2331		contentPath = "/news/2026/09/airbnb-server-driven-login",
2332		contentUUID = "c3412ae7-ff99-4fcd-8ad0-a6adcedabb04",
2333		authorUserCSVIds = "126665386";
2334</script>
vendor: 1 bytes, line 2334
2334
2335<script src="https://cdn.infoq.com/statics_s1_20260930115701/scripts/prism-build.js"></script>
vendor: 1 bytes, line 2335
2335
2336<script src="https://cdn.infoq.com/statics_s1_20260930115701/scripts/lib/MathJax/MathJax.js?config=TeX-AMS_HTML"></script>
2336
2337
2338                </main>
2339
2340            
2341                
2342
2343
2344
2345
2346
2347
2348
2349<footer class="footer ">
2350	
2351		
2352		<section data-nosnippet class="section container">
2353			<div class="container__inner">
2354				
2355					
2356					
2357					
2358					
2359					
2360					
2361				
2362
2363
2364<ul data-cols="5" class="no-style columns boxes topic__boxes">
2365    
2366        <li class="development">
2367            <div class="box__header">
2368                
2369                <a class="t_all_footer_more-boxes-header" href="/development/">Development</a>
2370            </div>
2371            <div class="box__content">
2372                <ul class="no-style box__list small">
2373                    
2374                        <li>
2375                            
2376                            <h5><a class="t_all_footer_more-boxes-item" href="/news/2026/09/agentic-refactoring-case-study/" title="Agents Refactor 300K Lines in Three Weeks, and Practitioners Ask What It Proves">Agents Refactor 300K Lines in Three Weeks, and Practitioners Ask What It Proves</a></h5>
2377                        </li>
2378                    
2379                        <li>
2380                            
2381                            <h5><a class="t_all_footer_more-boxes-item" href="/news/2026/09/cloudflare-http-vary/" title="Cloudflare Adds Configurable HTTP Vary Header Support to Prevent Cache Thrashing">Cloudflare Adds Configurable HTTP Vary Header Support to Prevent Cache Thrashing</a></h5>
2382                        </li>
2383                    
2384                        <li>
2385                            
2386                            <h5><a class="t_all_footer_more-boxes-item" href="/news/2026/09/radicle-network-vulnerabilities/" title="Radicle Discloses Critical Flaws Exposing Private Repositories in Plain Text">Radicle Discloses Critical Flaws Exposing Private Repositories in Plain Text</a></h5>
2387                        </li>
2388                    
2389                </ul>
2390            </div>
2391        </li>
2392    
2393        <li class="architecture-design">
2394            <div class="box__header">
2395                
2396                <a class="t_all_footer_more-boxes-header" href="/architecture-design/">Architecture &amp; Design</a>
2397            </div>
2398            <div class="box__content">
2399                <ul class="no-style box__list small">
2400                    
2401                        <li>
2402                            
2403                            <h5><a class="t_all_footer_more-boxes-item" href="/news/2026/09/cursor-continuity-git-storage/" title="Cursor Uses S3 WAL to Scale Git Storage to More than 300 Pushes per Second">Cursor Uses S3 WAL to Scale Git Storage to More than 300 Pushes per Second</a></h5>
2404                        </li>
2405                    
2406                        <li>
2407                            
2408                            <h5><a class="t_all_footer_more-boxes-item" href="/news/2026/09/meta-zgateway-zippydb-proxy/" title="Meta&amp;rsquo;s ZGateway Cuts ZippyDB Connections 19x While Handling 1B+ Operations per Second">Meta&rsquo;s ZGateway Cuts ZippyDB Connections 19x While Handling 1B+ Operations per Second</a></h5>
2409                        </li>
2410                    
2411                        <li>
2412                            
2413                            <h5><a class="t_all_footer_more-boxes-item" href="/articles/ai-agents-improve-software-architecture/" title="Five Ways To Use AI Coding Agents to Improve Your Software Architecture">Five Ways To Use AI Coding Agents to Improve Your Software Architecture</a></h5>
2414                        </li>
2415                    
2416                </ul>
2417            </div>
2418        </li>
2419    
2420        <li class="culture-methods">
2421            <div class="box__header">
2422                
2423                <a class="t_all_footer_more-boxes-header" href="/culture-methods/">Culture &amp; Methods</a>
2424            </div>
2425            <div class="box__content">
2426                <ul class="no-style box__list small">
2427                    
2428                        <li>
2429                            
2430                            <h5><a class="t_all_footer_more-boxes-item" href="/presentations/staff-founder-lessons/" title="From Staff Platform Engineer to a16z Founder: What I Wish I&#039;d Known">From Staff Platform Engineer to a16z Founder: What I Wish I'd Known</a></h5>
2431                        </li>
2432                    
2433                        <li>
2434                            
2435                            <h5><a class="t_all_footer_more-boxes-item" href="/news/2026/09/high-performing-teams-program/" title="InfoQ Launc
2435hes High-Performing Teams Certification Program">InfoQ Launches High-Performing Teams Certification Program</a></h5>
2436                        </li>
2437                    
2438                        <li>
2439                            
2440                            <h5><a class="t_all_footer_more-boxes-item" href="/news/2026/09/collaborative-platform-culture/" title="Building a Collaborative Platform Culture in a Bank">Building a Collaborative Platform Culture in a Bank</a></h5>
2441                        </li>
2442                    
2443                </ul>
2444            </div>
2445        </li>
2446    
2447        <li class="ai-ml-data-eng">
2448            <div class="box__header">
2449                
2450                <a class="t_all_footer_more-boxes-header" href="/ai-ml-data-eng/">AI, ML &amp; Data Engineering</a>
2451            </div>
2452            <div class="box__content">
2453                <ul class="no-style box__list small">
2454                    
2455                        <li>
2456                            
2457                            <h5><a class="t_all_footer_more-boxes-item" href="/news/2026/09/onlinecohorts-ai-certifications/" title="InfoQ Online Cohorts Address AI Security and Coding Agent Verification">InfoQ Online Cohorts Address AI Security and Coding Agent Verification</a></h5>
2458                        </li>
2459                    
2460                        <li>
2461                            
2462                            <h5><a class="t_all_footer_more-boxes-item" href="/presentations/building-internal-ai-agents/" title="From Consumers to Builders: Turning 200 of our Team into Agent Creators in 2 Weeks">From Consumers to Builders: Turning 200 of our Team into Agent Creators in 2 Weeks</a></h5>
2463                        </li>
2464                    
2465                        <li>
2466                            
2467                            <h5><a class="t_all_footer_more-boxes-item" href="/presentations/adaptive-recommendation-systems-architecture/" title="Adaptive Recommenders in the Real World: Inference, Evals, and System Design">Adaptive Recommenders in the Real World: Inference, Evals, and System Design</a></h5>
2468                        </li>
2469                    
2470                </ul>
2471            </div>
2472        </li>
2473    
2474        <li class="devops">
2475            <div class="box__header">
2476                
2477                <a class="t_all_footer_more-boxes-header" href="/devops/">DevOps</a>
2478            </div>
2479            <div class="box__content">
2480                <ul class="no-style box__list small">
2481                    
2482                        <li>
2483                            
2484                            <h5><a class="t_all_footer_more-boxes-item" href="/presentations/context-as-code-devops-agents/" title="Context Is the New Code">Context Is the New Code</a></h5>
2485                        </li>
2486                    
2487                        <li>
2488                            
2489                            <h5><a class="t_all_footer_more-boxes-item" href="/news/2026/09/kubernetes-gpu-metrics/" title="Kubernetes Teams Get a Safer Way to See Their Own GPU Metrics">Kubernetes Teams Get a Safer Way to See Their Own GPU Metrics</a></h5>
2490                        </li>
2491                    
2492                        <li>
2493                            
2494                            <h5><a class="t_all_footer_more-boxes-item" href="/news/2026/09/atlassian-opentelemetry/" title="Atlassian Rebuilds Metrics Pipeline Around OpenTelemetry at Massive Scale">Atlassian Rebuilds Metrics Pipeline Around OpenTelemetry at Massive Scale</a></h5>
2495                        </li>
2496                    
2497                </ul>
2498            </div>
2499        </li>
2500    
2501</ul>
2502
2503
2504
2505			</div>
2506		</section>
2507		<section data-nosnippet class="container section section__newsletter">
2508			<div class="columns container__inner">
2509				 
2510
2511
2512
2513
2514
2515
2516
2517
2518
2519    
2520
2521
2522
2523
2524
2525
2526
2527<div class="newsletter" data-col="1/2"
2528
2529	
2530		
2531			id="infoq-nl"
2532		
2533
2534	
2535	
2536>
2537	<h2 class="heading">
2538		<strong>The InfoQ</strong> Newsletter
2539	</h2>
2540	<p class="intro">A round-up of last week&#x2019;s content on InfoQ sent out every Tuesday. Join a community of over 250,000 senior developers.
2541		
2542			<a target="_blank" href="https://assets.infoq.com/newsletter/regular/en/newsletter_sample/newsletter_sample.html">View an example</a>
2543		
2544		
2545	</p>
2546	<ul class="newsletter__features">
2547		<li>Get a quick overview of content published on a variety of innovator and early adopter technologies</li>
2548		<li>Learn what you don&#x2019;t know that you don&#x2019;t know</li>
2549		<li>Stay up to date with the latest information from the topics you are interested in</li>
2550	</ul>
2551	<div class="newsletter__subscribe">
2552		<form class="form gdpr" name="footerNewsletterForm" id="footerNewsletterForm" action="#" onsubmit="footerNewsletter.saveSubscription(); return false;">
2553			<div class="field newsletter__mail input__text input__no-label input__medium email">
2554				<label for="email-newsletter-infoq" class="label field__label">Enter your e-mail address</label>
2555				<input id="email-newsletter-infoq" name="footerNewsletterEmail" placeholder="Enter your e-mail address" class="input field__input" type="email"/>
2556				<input type="text" name="emailH" id="input_email_h" aria-required="false" style="display:none !important" tabindex="-1" autocomplete="off"/>
2557				<input type="hidden" id="fnt" name="fnt" value="EHpIzrADJYuZGDbo"/>
2558				<input type="hidden" id="footerNewsletterType" name="footerNewsletterType" value="regular"/>
2559				<input type="hidden" id="cmpi" name="cmpi" value="1"/>
2560			</div>
2561			<div class="hidden">
2562				<span class="input__select field country">
2563					<label for="input-simple-newsletter-country" class="label field__label">Select your country</label>
2564					<select id="input-simple-newsletter-country" class="select field__input">
2565						<option value="" class="select__option">Select a country</option>
2566					</select>
2567					<p class="input__message field__desc"></p>
2568				</span>
2569				<span class="input__checkbox field hidden">
2570					<input type="checkbox" id="gdpr-consent-simple-nl">
2571					<label for="gdpr-consent-simple-nl" class="label"><span>I consent to InfoQ.com handling my data as explained in this <a href="https://www.infoq.com/privacy-notice">Privacy Notice</a>.</span></label>
2572				</span>
2573			</div>
2574			<input type="submit" role="button" value="Subscribe" class="button button__medium button__red" onclick="return footerNewsletter.validateEmail('Invalid email address');"/>
2575		</form>
2576		<p class="meta">
2577			<a href="/privacy-notice/" target="_blank">We protect your privacy.</a>
2578		</p>
2579		
2580		<span class="success" style="display:none;" id="footerNewsletterMessage"></span>
2581	</div>
2582	
2582<script type="text/javascript">
2583		var footerNewsletter = new Newsletter('Enter your e-mail address',
2584				'email-newsletter-infoq', 'footerNewsletterType','footerNewsletterMessage', 'fnt', 'input_email_h', 'input-simple-newsletter-country', 'cmpi','footer_except_homepage');
2585	</script>
2585
2586</div>
2587
2588
2589    
2590        
2591        
2592    
2593
2594
2595
2596
2597
2598
2599
2600
2601
2602
2603
2604
2605
2606    
2607    
2608    
2609    
2610    
2611    <div data-col="1/2" data-bg="certification" class="event__container" style="padding-right: 20px;">
2612        <a href="https://certification.qconferences.com/?utm_source=infoq&amp;utm_medium=referral&amp;utm_campaign=largefooterad_onlinecohorts26" target="_blank" class="qconplus__events-slider" style="">
2613            <div>
2614                <div class="logo-certification"></div>
2615            </div>
2616            <p class="intro" style="margin-bottom: 0;color: white !important;">
2617                <b>InfoQ Online Certification Programs</b>
2618                <br>For Senior Engineers, Architects, and Technical Leaders
2619            </p>
2620            <ul style="margin-bottom: 0;">
2621                <li style="color: white !important;"><b>Architect</b> with Luca Mezzalira | October 9</li>
2622                <li style="color: white !important;"><b>AI Security & Privacy Engineering</b> with Katharine Jarmul | October 14</li>
2623                <li style="color: white !important;"><b>AI-Assisted Engineering</b> with Zichuan Xiong & Premanand Chandrasekaran | October 19</li>
2624                <li style="color: white !important;"><b>High-Performing Teams</b> with Olimpiu Pop | November 17</li>
2625            </ul>
2626            <br>
2627            <p class="intro" style="margin-bottom: 0;color: white !important;">As your role becomes more senior, the work changes. You're no longer just implementing decisions; you're shaping the systems, trade-offs, and technical direction other teams depend on.<br>These 5-week online programs give you a structured way to work through real decisions from your current role with senior peers from other companies.</p>
2628            <strong class="button button__green cta__button">RESERVE YOUR PLACE</strong>
2629            <small style="color: white;"><br>Live online. 4 hours a week, for 5 weeks.</small>
2630        </a>
2631    </div>
2632
2633
2634
2635
2636
2637
2638			</div>
2639		</section>
2640	
2641	<section data-nosnippet class="section container footer__subfooter align__left">
2642		<div class="container__inner columns">
2643			 <div data-col="1/4" class="columns footer__links-wrap">
2644				  <div class="footer__links">
2645						
2646
2647
2648
2649
2650
2651
2652
2653
2654<a href="/" class="nuxt-link-exact-active active" title="Home">Home</a>
2655
2656
2657    <a href="/reginit.action" class="emphasis" title="Create account">Create account</a>
2658    <button aria-label="Log In" class="login" data-ref="mainLogin">Log In</button>
2659
2660
2661<a rel="noreferrer noopener" href="http://qconferences.com/" target="_blank" title="QCon Conferences">QCon Conferences</a>
2662<a rel="noreferrer noopener" href="https://events.infoq.com/" target="_blank">Events</a>
2663
2664    <a href="/write-for-infoq/" title="Write for InfoQ">Write for InfoQ</a>
2665    <a href="/infoq-editors/" title="InfoQ Editors">InfoQ Editors</a>
2666    <a href="/about-infoq/" title="About InfoQ">About InfoQ</a>
2667    <a href="https://c4media.com/" target="_blank" title="About C4Media">About C4Media</a>
2668    
2669        <a rel="noreferrer noopener" href="https://get.infoq.com/infoq-mediakit/" title="Media Kit" target="_blank">
2670            Media Kit
2671        </a>
2672        <a href="https://devmarketing.c4media.com/?utm_source=infoq" title="InfoQ Developer Marketing Blog" target="_blank">InfoQ Developer Marketing Blog</a>
2673    
2674    <a rel="noreferrer noopener" href="https://c4media.com/diversity" title="Diversity" target="_blank">Diversity</a>
2675
2676				  </div>
2677
2678			</div>
2679			<div data-col="1/4" class="events__list">
2680				<h4 class="heading footer__heading">Events</h4>
2681                                <ul class="qcons__list no-style">
2682                                    
2683
2684                                    
2685                                    
2686                                    
2687                                    
2688                                    
2689                                    
2690                                    
2691                                    <li><span class="icon event__type conference"></span>
2692                                                    <div class="qcon__detail">
2693                                                                    <h5 class="heading">
2694                                                                                    <a rel="noreferrer noopener" href="https://certification.qconferences.com/architecture?utm_source=infoq&utm_medium=referral&utm_campaign=footer_onlinecohortarchitecture26" target="_blank">Online InfoQ Architect Certification</a>
2695                                                                    </h5>
2696                                                                    <sp
2696an class="meta date">October 9, 2026</span>
2697                                                    </div>
2698                                    </li>
2699                                    <li><span class="icon event__type conference"></span>
2700                                            <div class="qcon__detail">
2701                                                    <h5 class="heading">
2702                                                            <a rel="noreferrer noopener" href="https://certification.qconferences.com/ai-security-privacy?utm_source=infoq&utm_medium=referral&utm_campaign=footer_onlinecohortaisecurity26" target="_blank">Online InfoQ AI Security & Privacy Engineering Program</a>
2703                                                    </h5>
2704                                                    <span class="meta date">October 14, 2026</span>
2705                                            </div>
2706                                    </li>
2707                                    <li><span class="icon event__type conference"></span>
2708                                            <div class="qcon__detail">
2709                                                    <h5 class="heading">
2710                                                            <a rel="noreferrer noopener" href="https://certification.qconferences.com/ai-assisted-engineering?utm_source=infoq&utm_medium=referral&utm_campaign=footer_onlinecohortaiassistedengineering26" target="_blank">Online InfoQ AI-Assisted Engineering Certification</a>
2711                                                    </h5>
2712                                                    <span class="meta date">October 19, 2026</span>
2713                                            </div>
2714                                    </li>
2715                                    <li><span class="icon event__type conference"></span>
2716                                        <div class="qcon__detail">
2717                                            <h5 class="heading">
2718                                                <a rel="noreferrer noopener" href="https://certification.qconferences.com/high-performing-teams?utm_source=infoq&utm_medium=referral&utm_campaign=footer_onlinecohortteams26" target="_blank">Online InfoQ High-Performing Teams Certification</a>
2719                                            </h5>
2720                                            <span class="meta date">November 17, 2026</span>
2721                                        </div>
2722                                    </li>
2723                                    <li><span class="icon event__type conference"></span>
2724                                        <div class="qcon__detail">
2725                                            <h5 class="heading">
2726                                                <a rel="noreferrer noopener" href="https://qconsf.com/?utm_source=infoq&utm_medium=referral&utm_campaign=footer_qsf26" target="_blank">QCon San Francisco</a>
2727                                            </h5>
2728                                            <span class="meta date">November 16-20, 2026</span>
2729                                        </div>
2730                                    </li>
2731                                    <li><span class="icon event__type conference"></span>
2732                                            <div class="qcon__detail">
2733                                                    <h5 class="heading">
2734                                                            <a rel="noreferrer noopener" href="https://newyork.qcon.ai/?utm_source=infoq&utm_medium=referral&utm_campaign=footer_qainy26" target="_blank">QCon AI New York</a>
2735                                                    </h5>
2736                                                    <span class="meta date">December 15-16, 2026</span>
2737                                            </div>
2738                                    </li>
2739                                    <li><span class="icon event__type conference"></span>
2740                                        <div class="qcon__detail">
2741                                            <h5 class="heading">
2742                                                <a rel="noreferrer noopener" href="https://qconlondon.com/?utm_source=infoq&utm_medium=referral&utm_campaign=footer_qlondon27" target="_blank">QCon London 2027</a>
2743                                            </h5>
2744                                            <span class="meta date">April 13-16, 2027</span>
2745                                        </div>
2746                                    </li>
2747                                    <li><span class="icon event__type conference"></span>
2748                                        <div class="qcon__detail">
2749                                            <h5 class="heading">
2750                                                <a rel="noreferrer noopener" href="https://boston.qcon.ai/?utm_source=infoq&utm_medium=referral&utm_campaign=footer_qaiboston27" target="_blank">QCon AI Boston</a>
2751                                            </h5>
2752                                            <span class="meta date">July 8-9, 2027</span>
2753                                        </div>
2754                                    </li>
2755
2756                                </ul>
2757			</div>
2758			<div data-col="1/4" class="footer__social-wrap">
2759				<h4 class="heading text-left footer__heading">Follow us on </h4>
2760				<div class="social__links columns social__links__row">
2761                            
2762                                
2763                                        <a href="https://www.youtube.com/infoq"><span class="icon icon__large icon__social icon__youtube"></span><div><span class="social__count">Youtube</span><span class="social__followers">232K Followers</span></div></a>
2764                                        <a href="http://www.linkedin.com/company/infoq"><span class="icon icon__large icon__social icon__linkedin"></span><div><span class="social__count">Linkedin</span><span class="social__followers">26K Followers</span></div></a>
2765										<a rel="noreferrer noopener" href="https://www.instagram.com/infoqdotcom/" target="_blank"><span class="icon icon__large icon__social icon__instagram"></span><div><span class="social__count">Instagram</span><span class="social__followers">New</span></div></a>
2766                                        <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>
2767                                        <a rel="noreferrer noopener" href="http://twitter.com/infoq" target="_blank"><span class="icon icon__large icon__social icon__twitter"></span><div><span class="social__count">X</span><span class="social__followers">57.1k Followers</span></div></a>
2768                                        <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>
2769                                        <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>
2770
2771
2772
2773
2774
2775
2776
2777
2778
2779
2780
2781
2782
2783
2784
2785                                
2786                                
2787                                
2788                                
2789				</div>
2790			</div>
2791            <div data-col="1/4" class="footer__stayin-wrap">
2792                <h4 class="heading text-left footer__heading">Stay in the know</h4>
2793                <div class="stayIn_panel_container">
2794                    <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>
2795                    <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>
2796                    <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>
2797                </div>
2798            </div>
2799			
2800		</div>
2801	</section>
2802	<section data-nosnippet class="container footer__bottom section white align__left">
2803		<div class="container__inner columns">
2804			<div data-col="2/3" class="column">
2805				<div class="footer__contact contact columns">
2806					
2807					
2808						<span data-col="1/6">
2809							General Feedback
2810							<a href="mailto:[email protected]">[email protected]</a>
2811						</span>
2812						<span data-col="1/6">
2813							Advertising
2814							<a href="mailto:[email protected]">[email protected]</a>
2815						</span>
2816						<span data-col="1/6">
2817							Editorial
2818							<a href="mailto:[email protected]">[email protected]</a>
2819						</span>
2820						<span data-col="1/6">
2821							Marketing
2822							<a href="mailto:[email protected]">[email protected]</a>
2823						</span>
2824					
2825				</div>
2826			</div>
2827			<div class="column" data-col="1/3">
2828				<p class="footer__more">
2829					InfoQ.com and all content copyright &#169; 2006-2026 C4Media Inc.<br/>
2830					
2831						<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>
2832					
2833					
2834				</p>
2835			</div>
2836		</div>
2837	</section>
2838</footer>
2839                <!--	#######		SITE END	#########	 -->
2840            
2841        </div>
2842
2843
2844        
2845            <div class="intbt">
2846                <a href="/int/bt/" title="bt">BT</a>
2847            </div>
2848        
2849
2850        
2851
2852
2853
2854
2855
2856<script type="text/javascript">
2857  $.when(humanDetectionAsync()).then(
2858      function(status) {
2859          $.getScript("/scripts/__hd.ifq?hdt=EHpIzrADJYuZGDbo&ha=" + status);
2860      }
2861  );
2862</script>
vendor: 2 bytes, line 2862
2862
2863<script type="text/javascript">
2864
2865    var pageFullyLoaded = false;
2866    // this event is fired by frontend once all the necessary things have been done(mobile display, moving vcr boxes around when needed...)
2867    infoq.event.on('loaded', function(e) {
2868        pageFullyLoaded = true;
2869    });
2870
2871    infoq.event.on('pageWidthChanged', function(e) {
2872        // re-execute tracking vcr impressions when this event happens (it only happens when elements are added/removed from page)
2873        // doTrackVcrImpressions takes into account the data-trk-impr="true" if =false the element was already tracked.
2874        // this is needed when switching from mobile to desktop or when layout on mobile changes and desktop version is displayed. New elements become visible.
2875        Tracker.safeExec(Tracker.doTrackVcrImpressions);
2876
2877        // these 2 need to be called also because we might be on a content page. In case we are not nothing happens
2878        VCR.doTrackingCustomRightbar();
2879        VCR.doTrackingCustomRightbarForPresentations()
2880    });
2881
2882    //check to see if error page
2883    if(window.device !== undefined) {
2884        var intervalImpressions = setInterval(function() {
2885            var shouldTrack = false;
2886
2887            // no vcr widgets on index pages
2888            if(window.isIndexPage) {
2889                if(window.sponsoredPodcastDone === undefined || window.sponsoredPodcastDone) {
2890                    shouldTrack = true;
2891                }
2892            } else
2893            //on homepage, bottom widget + 2 native widgets
2894            if(InfoQConstants.pageType == "HOMEPAGE" && window.finishedVcrOptional1 && window.finishedRelatedVcr && (window.finishedVcrOptional2 === undefined || window.finishedVcrOptional2)) {
2895                shouldTrack = true;
2896            } else
2897            // rightbar widgets + native widgets + content vcr widgets
2898            if((InfoQConstants.pageType == "NEWS_PAGE" || InfoQConstants.pageType == "ARTICLE_PAGE")
2899                    && ((window.finishedRightbarVcr || window.finishedRightbarVcr === undefined) && window.contentVcrFinished)) {
2900                shouldTrack = true;
2901            } else if ((InfoQConstants.pageType == "PRESENTATION_PAGE")
2902                    && (window.contentVcrFinished || window.contentVcrFinished  === undefined)
2903                    && (window.finishedRightbarVcr || window.finishedRightbarVcr  === undefined)
2904            ) {
2905                shouldTrack = true;
2906            } else
2907            // native widgets + content widgets
2908            if(window.contentVcrFinished && (window.finishedVcrOptional1 || window.finishedVcrOptional1 === undefined)
2909                    && (window.finishedVcrOptional2 || window.finishedVcrOptional2 === undefined)) {
2910                shouldTrack = true;
2911            }
2912
2913            // we start tracking only after the page is fully loaded, frontend signals that they finished everything related to page display.
2914            if(shouldTrack && pageFullyLoaded) {
2915                clearInterval(intervalImpressions);
2916                Tracker.safeExec(Tracker.doTrackVcrImpressions);
2917
2918                // start tracking viewable impressions also only after everything is ready
2919                function callbackRouter(entries, observer) {
2920                    var targets = new Array();
2921                    entries.forEach(function (entry) {
2922                        var target = entry.target;
2923                        if (target.dataset.trkView === 'false') return;
2924                        if (entry.intersectionRatio > 0) {
2925                            target.dataset.trkView = false;
2926                            targets.push(target);
2927                        }
2928                    });
2929                    Tracker.doTrackViewableImpressions(targets);
2930                }
2931                var elementsForTrackingViewableImpressions = document.querySelectorAll('[data-trk-view="true"]')
2932                var observer = new IntersectionObserver(callbackRouter, { threshold: 0.3 });
2933                elementsForTrackingViewableImpressions.forEach(observer.observe.bind(observer));
2934            }
2935
2936        }, 500);
2937    }
2938    $(document).ready(function () {
2939        // desktop notifications widget
2940        Tracker.encodeNotificationLinks($(".f_notificationWidget"));
2941        // mobile notifications widget
2942        Tracker.encodeNotificationLinks($(".h_notifications"));
2943        // desktop notifications page
2944        Tracker.encodeNotificationLinks($(".notification-page"));
2945        // mobile notifications page
2946        Tracker.encodeNotificationLinks($(".notifications_page"));
2947    });
2948</script>
2948
2949        
2950
2951
2952
2953
2954
2955
2956<script type="text/javascript">
2957    if(window.location.hash){
2958        var hash = window.location.hash.substring(1);
2959        if(hash == 'subscribe'){
2960            $('html,body').animate({scrollTop: $('.ftxt3 > .newsletter').offset().top}, 'slow');
2961        }
2962    }
2963</script>
vendor: 1 bytes, line 2963
2963
2964<script type="text/javascript">
2965	var newsletterSubscriptionURL ='/newsletter/subscribe.action';
2966	DynamicLinks.updateRssLinks('3405691582');
2967
2968	ContentSummary.setSelectedTab('en');
2969	//when user enters the main content area show default topics in the topics bar
2970	$("#content-wrapper").mouseenter(function() {	
2971	        showDefaultTopics();
2972	});
2973	
2974	
2975	Bookmarks.contentTitle = "Airbnb Cuts Authentication Code by 60% with Server Driven Architecture";
2976	Bookmarks.apiUrl = '/widgets/bookmark.action';
2977    Bookmarks.isContentBookmarked = "false";
2978</script>
vendor: 1 bytes, line 2978
2978
2979<script type="text/javascript"> 
2980var $buoop = {vs:{i:6,f:1,o:10.1,s:1}} 
2981$buoop.ol = window.onload; 
2982$(document).ready(function() {
2983	 try {if ($buoop.ol) $buoop.ol();}catch (e) {} 
2984	 var e = document.createElement("script"); 
2985	 e.setAttribute("type", "text/javascript"); 
2986	 e.setAttribute("src", "https://cdn.infoq.com/statics_s1_20260930115701/scripts/lib/browser-update-org/update.js");
2987	 document.body.appendChild(e); 
2988});
2989</script>
2989
2990        
2991
2992        
2993            
2994            
2994<script>
vendor: 574 bytes, lines 2994-3003
2994
2995                !function(f,b,e,v,n,t,s)
2996                {if(f.fbq)return;n=f.fbq=function(){n.callMethod?
2997                        n.callMethod.apply(n,arguments):n.queue.push(arguments)};
2998                    if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0';
2999                    n.queue=[];t=b.createElement(e);t.async=!0;
3000                    t.src=v;s=b.getElementsByTagName(e)[0];
3001                    s.parentNode.insertBefore(t,s)}(window,document,'script',
3002                        'https://connect.facebook.net/en_US/fbevents.js');
3003                fbq('init', '
3003842388869148196
vendor: 58 bytes, lines 3003-3005
3003');
3004                fbq('track', 'PageView');
3005            
3005</script>
3005
3006            <noscript>
3007                <img height="1" width="1" src="https://www.facebook.com/tr?id=842388869148196&ev=PageView&noscript=1"/>
3008            </noscript>
3009            
3010        
3011
3012            
3012<script type='text/javascript'>
3013                try {
3014                    mixpanel.track('page viewed', {
3015                        'page name' : document.title,
3016                        'url' : window.location.pathname
3017                    });
3018                }
3019                catch(err) {
3020                }
3021            </script>
3021
3022    </body>
3023</html>
3024<!-- s1 -->

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.