CINXE.COM

<!doctype html><html lang="en"><head><title data-rh="true">Choose Boring Releases. Academic research increasingly relies… | by Dane Hillard | ITHAKA Tech | Medium</title><meta data-rh="true" charset="utf-8"/><meta data-rh="true" name="viewport" content="width=device-width,minimum-scale=1,initial-scale=1,maximum-scale=1"/><meta data-rh="true" name="theme-color" content="#000000"/><meta data-rh="true" name="twitter:app:name:iphone" content="Medium"/><meta data-rh="true" name="twitter:app:id:iphone" content="828256236"/><meta data-rh="true" property="al:ios:app_name" content="Medium"/><meta data-rh="true" property="al:ios:app_store_id" content="828256236"/><meta data-rh="true" property="al:android:package" content="com.medium.reader"/><meta data-rh="true" property="fb:app_id" content="542599432471018"/><meta data-rh="true" property="og:site_name" content="Medium"/><meta data-rh="true" property="og:type" content="article"/><meta data-rh="true" property="article:published_time" content="2024-10-18T17:42:59.974Z"/><meta data-rh="true" name="title" content="Choose Boring Releases. Academic research increasingly relies… | by Dane Hillard | ITHAKA Tech | Medium"/><meta data-rh="true" property="og:title" content="Choose Boring Releases"/><meta data-rh="true" property="al:android:url" content="medium://p/d6c2ecb3f887"/><meta data-rh="true" property="al:ios:url" content="medium://p/d6c2ecb3f887"/><meta data-rh="true" property="al:android:app_name" content="Medium"/><meta data-rh="true" name="description" content="Our goal was to coast through the finish line instead of scrambling. Key tactics like product-minded engineering made that possible."/><meta data-rh="true" property="og:description" content="Academic research increasingly relies on diverse content types, including gray literature and primary source materials, alongside…"/><meta data-rh="true" property="og:url" content="https://medium.com/ithaka-tech/choose-boring-releases-d6c2ecb3f887"/><meta data-rh="true" property="al:web:url" content="https://medium.com/ithaka-tech/choose-boring-releases-d6c2ecb3f887"/><meta data-rh="true" property="og:image" content="https://miro.medium.com/v2/resize:fit:1200/1*lu8id_9u4R0GaRFM_MlIOA.jpeg"/><meta data-rh="true" property="article:author" content="https://medium.com/@danehillard"/><meta data-rh="true" name="author" content="Dane Hillard"/><meta data-rh="true" name="robots" content="index,noarchive,follow,max-image-preview:large"/><meta data-rh="true" name="referrer" content="unsafe-url"/><meta data-rh="true" property="twitter:title" content="Choose Boring Releases"/><meta data-rh="true" name="twitter:site" content="@ITHAKA_org"/><meta data-rh="true" name="twitter:app:url:iphone" content="medium://p/d6c2ecb3f887"/><meta data-rh="true" property="twitter:description" content="Academic research increasingly relies on diverse content types, including gray literature and primary source materials, alongside…"/><meta data-rh="true" name="twitter:image:src" content="https://miro.medium.com/v2/resize:fit:1200/1*lu8id_9u4R0GaRFM_MlIOA.jpeg"/><meta data-rh="true" name="twitter:card" content="summary_large_image"/><meta data-rh="true" name="twitter:creator" content="@easyaspython"/><meta data-rh="true" name="twitter:label1" content="Reading time"/><meta data-rh="true" name="twitter:data1" content="8 min read"/><link data-rh="true" rel="icon" href="https://miro.medium.com/v2/5d8de952517e8160e40ef9841c781cdc14a5db313057fa3c3de41c6f5b494b19"/><link data-rh="true" rel="search" type="application/opensearchdescription+xml" title="Medium" href="/osd.xml"/><link data-rh="true" rel="apple-touch-icon" sizes="152x152" href="https://miro.medium.com/v2/resize:fill:304:304/10fd5c419ac61637245384e7099e131627900034828f4f386bdaa47a74eae156"/><link data-rh="true" rel="apple-touch-icon" sizes="120x120" href="https://miro.medium.com/v2/resize:fill:240:240/10fd5c419ac61637245384e7099e131627900034828f4f386bdaa47a74eae156"/><link data-rh="true" rel="apple-touch-icon" sizes="76x76" href="https://miro.medium.com/v2/resize:fill:152:152/10fd5c419ac61637245384e7099e131627900034828f4f386bdaa47a74eae156"/><link data-rh="true" rel="apple-touch-icon" sizes="60x60" href="https://miro.medium.com/v2/resize:fill:120:120/10fd5c419ac61637245384e7099e131627900034828f4f386bdaa47a74eae156"/><link data-rh="true" rel="mask-icon" href="https://miro.medium.com/v2/resize:fill:1000:1000/7*GAOKVe--MXbEJmV9230oOQ.png" color="#171717"/><link data-rh="true" rel="preconnect" href="https://glyph.medium.com" crossOrigin=""/><link data-rh="true" id="glyph_preload_link" rel="preload" as="style" type="text/css" href="https://glyph.medium.com/css/unbound.css"/><link data-rh="true" id="glyph_link" rel="stylesheet" type="text/css" href="https://glyph.medium.com/css/unbound.css"/><link data-rh="true" rel="author" href="https://medium.com/@danehillard"/><link data-rh="true" rel="canonical" href="https://medium.com/ithaka-tech/choose-boring-releases-d6c2ecb3f887"/><link data-rh="true" rel="alternate" href="android-app://com.medium.reader/https/medium.com/p/d6c2ecb3f887"/><script data-rh="true" type="application/ld+json">{"@context":"http:\u002F\u002Fschema.org","@type":"NewsArticle","image":["https:\u002F\u002Fmiro.medium.com\u002Fv2\u002Fresize:fit:1200\u002F1*lu8id_9u4R0GaRFM_MlIOA.jpeg"],"url":"https:\u002F\u002Fmedium.com\u002Fithaka-tech\u002Fchoose-boring-releases-d6c2ecb3f887","dateCreated":"2024-09-26T16:52:04.790Z","datePublished":"2024-09-26T16:52:04.790Z","dateModified":"2024-11-16T04:06:40.154Z","headline":"Choose Boring Releases - ITHAKA Tech - Medium","name":"Choose Boring Releases - ITHAKA Tech - Medium","description":"Our goal was to coast through the finish line instead of scrambling. Key tactics like product-minded engineering made that possible.","identifier":"d6c2ecb3f887","author":{"@type":"Person","name":"Dane Hillard","url":"https:\u002F\u002Fmedium.com\u002F@danehillard"},"creator":["Dane Hillard"],"publisher":{"@type":"Organization","name":"ITHAKA Tech","url":"https:\u002F\u002Fmedium.com\u002Fithaka-tech","logo":{"@type":"ImageObject","width":500,"height":60,"url":"https:\u002F\u002Fmiro.medium.com\u002Fv2\u002Fresize:fit:1000\u002F1*oRNIg_5aAvcFZeZG8okFTw.png"}},"mainEntityOfPage":"https:\u002F\u002Fmedium.com\u002Fithaka-tech\u002Fchoose-boring-releases-d6c2ecb3f887"}</script><style type="text/css" data-fela-rehydration="559" data-fela-type="STATIC">html{box-sizing:border-box;-webkit-text-size-adjust:100%}*, *:before, *:after{box-sizing:inherit}body{margin:0;padding:0;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;color:rgba(0,0,0,0.8);position:relative;min-height:100vh}h1, h2, h3, h4, h5, h6, dl, dd, ol, ul, menu, figure, blockquote, p, pre, form{margin:0}menu, ol, ul{padding:0;list-style:none;list-style-image:none}main{display:block}a{color:inherit;text-decoration:none}a, button, input{-webkit-tap-highlight-color:transparent}img, svg{vertical-align:middle}button{background:transparent;overflow:visible}button, input, optgroup, select, textarea{margin:0}:root{--reach-tabs:1;--reach-menu-button:1}#speechify-root{font-family:Sohne, sans-serif}div[data-popper-reference-hidden="true"]{visibility:hidden;pointer-events:none}.grecaptcha-badge{visibility:hidden} /*XCode style (c) Angel Garcia <angelgarcia.mail@gmail.com>*/.hljs {background: #fff;color: black; }/* Gray DOCTYPE selectors like WebKit */ .xml .hljs-meta {color: #c0c0c0; }.hljs-comment, .hljs-quote {color: #007400; }.hljs-tag, .hljs-attribute, .hljs-keyword, .hljs-selector-tag, .hljs-literal, .hljs-name {color: #aa0d91; }.hljs-variable, .hljs-template-variable {color: #3F6E74; }.hljs-code, .hljs-string, .hljs-meta .hljs-string {color: #c41a16; }.hljs-regexp, .hljs-link {color: #0E0EFF; }.hljs-title, .hljs-symbol, .hljs-bullet, .hljs-number {color: #1c00cf; }.hljs-section, .hljs-meta {color: #643820; }.hljs-title.class_, .hljs-class .hljs-title, .hljs-type, .hljs-built_in, .hljs-params {color: #5c2699; }.hljs-attr {color: #836C28; }.hljs-subst {color: #000; }.hljs-formula {background-color: #eee;font-style: italic; }.hljs-addition {background-color: #baeeba; }.hljs-deletion {background-color: #ffc8bd; }.hljs-selector-id, .hljs-selector-class {color: #9b703f; }.hljs-doctag, .hljs-strong {font-weight: bold; }.hljs-emphasis {font-style: italic; } </style><style type="text/css" data-fela-rehydration="559" data-fela-type="KEYFRAME">@-webkit-keyframes k1{0%{opacity:0.8}50%{opacity:0.5}100%{opacity:0.8}}@-moz-keyframes k1{0%{opacity:0.8}50%{opacity:0.5}100%{opacity:0.8}}@keyframes k1{0%{opacity:0.8}50%{opacity:0.5}100%{opacity:0.8}}</style><style type="text/css" data-fela-rehydration="559" data-fela-type="RULE">.a{font-family:medium-content-sans-serif-font, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Open Sans", "Helvetica Neue", sans-serif}.b{font-weight:400}.c{background-color:rgba(255, 255, 255, 1)}.l{display:block}.m{position:sticky}.n{top:0}.o{z-index:500}.p{padding:0 24px}.q{align-items:center}.r{border-bottom:solid 1px #F2F2F2}.y{height:41px}.z{line-height:20px}.ab{display:flex}.ac{height:57px}.ae{flex:1 0 auto}.af{color:inherit}.ag{fill:inherit}.ah{font-size:inherit}.ai{border:inherit}.aj{font-family:inherit}.ak{letter-spacing:inherit}.al{font-weight:inherit}.am{padding:0}.an{margin:0}.ao{cursor:pointer}.ap:disabled{cursor:not-allowed}.aq:disabled{color:#6B6B6B}.ar:disabled{fill:#6B6B6B}.au{width:auto}.av path{fill:#242424}.aw{height:25px}.ax{margin-left:16px}.ay{border:none}.az{border-radius:20px}.ba{width:240px}.bb{background:#F9F9F9}.bc path{fill:#6B6B6B}.be{outline:none}.bf{font-family:sohne, "Helvetica Neue", Helvetica, Arial, sans-serif}.bg{font-size:14px}.bh{width:100%}.bi{padding:10px 20px 10px 0}.bj{background-color:transparent}.bk{color:#242424}.bl::placeholder{color:#6B6B6B}.bm{display:inline-block}.bn{margin-left:12px}.bo{margin-right:12px}.bp{border-radius:4px}.bq{margin-left:24px}.br{height:24px}.bx{background-color:#F9F9F9}.by{border-radius:50%}.bz{height:32px}.ca{width:32px}.cb{justify-content:center}.ch{max-width:680px}.ci{min-width:0}.cj{animation:k1 1.2s ease-in-out infinite}.ck{height:100vh}.cl{margin-bottom:16px}.cm{margin-top:48px}.cn{align-items:flex-start}.co{flex-direction:column}.cp{justify-content:space-between}.cq{margin-bottom:24px}.cw{width:80%}.cx{background-color:#F2F2F2}.dd{height:44px}.de{width:44px}.df{margin:auto 0}.dg{margin-bottom:4px}.dh{height:16px}.di{width:120px}.dj{width:80px}.dp{margin-bottom:8px}.dq{width:96%}.dr{width:98%}.ds{width:81%}.dt{margin-left:8px}.du{color:#6B6B6B}.dv{font-size:13px}.dw{height:100%}.ep{color:#FFFFFF}.eq{fill:#FFFFFF}.er{background:rgba(132, 133, 133, 1)}.es{border-color:rgba(132, 133, 133, 1)}.ew:disabled{cursor:inherit !important}.ex:disabled{opacity:0.3}.ey:disabled:hover{background:rgba(132, 133, 133, 1)}.ez:disabled:hover{border-color:rgba(132, 133, 133, 1)}.fa{border-radius:99em}.fb{border-width:1px}.fc{border-style:solid}.fd{box-sizing:border-box}.fe{text-decoration:none}.ff{text-align:center}.fi{margin-right:32px}.fj{position:relative}.fk{fill:#6B6B6B}.fn{background:transparent}.fo svg{margin-left:4px}.fp svg{fill:#6B6B6B}.fr{box-shadow:inset 0 0 0 1px rgba(0, 0, 0, 0.05)}.fs{position:absolute}.fz{margin:0 24px}.gd{background:rgba(255, 255, 255, 1)}.ge{border:1px solid #F2F2F2}.gf{box-shadow:0 1px 4px #F2F2F2}.gg{max-height:100vh}.gh{overflow-y:auto}.gi{left:0}.gj{top:calc(100vh + 100px)}.gk{bottom:calc(100vh + 100px)}.gl{width:10px}.gm{pointer-events:none}.gn{word-break:break-word}.go{word-wrap:break-word}.gp:after{display:block}.gq:after{content:""}.gr:after{clear:both}.gs{line-height:1.23}.gt{letter-spacing:0}.gu{font-style:normal}.gv{font-weight:700}.ia{align-items:baseline}.ib{width:48px}.ic{height:48px}.id{border:2px solid rgba(255, 255, 255, 1)}.ie{z-index:0}.if{box-shadow:none}.ig{border:1px solid rgba(0, 0, 0, 0.05)}.ih{margin-left:-12px}.ii{width:28px}.ij{height:28px}.ik{z-index:1}.il{width:24px}.im{margin-bottom:2px}.in{flex-wrap:nowrap}.io{font-size:16px}.ip{line-height:24px}.ir{margin:0 8px}.is{display:inline}.it{color:rgba(132, 133, 133, 1)}.iu{fill:rgba(132, 133, 133, 1)}.ix{flex:0 0 auto}.ja{flex-wrap:wrap}.jd{white-space:pre-wrap}.je{margin-right:4px}.jf{overflow:hidden}.jg{max-height:20px}.jh{text-overflow:ellipsis}.ji{display:-webkit-box}.jj{-webkit-line-clamp:1}.jk{-webkit-box-orient:vertical}.jl{word-break:break-all}.jn{padding-left:8px}.jo{padding-right:8px}.kp> *{flex-shrink:0}.kq{overflow-x:scroll}.kr::-webkit-scrollbar{display:none}.ks{scrollbar-width:none}.kt{-ms-overflow-style:none}.ku{width:74px}.kv{flex-direction:row}.kw{z-index:2}.kz{-webkit-user-select:none}.la{border:0}.lb{fill:rgba(117, 117, 117, 1)}.le{outline:0}.lf{user-select:none}.lg> svg{pointer-events:none}.lp{cursor:progress}.lq{opacity:1}.lr{padding:4px 0}.lu{margin-top:0px}.lv{width:16px}.lx{display:inline-flex}.md{max-width:100%}.me{padding:8px 2px}.mf svg{color:#6B6B6B}.mw{line-height:1.58}.mx{letter-spacing:-0.004em}.my{font-family:source-serif-pro, Georgia, Cambria, "Times New Roman", Times, serif}.nt{margin-bottom:-0.46em}.nu{text-decoration:underline}.nv{margin-left:auto}.nw{margin-right:auto}.nx{max-width:1940px}.od{clear:both}.of{cursor:zoom-in}.og{z-index:auto}.oi{height:auto}.oj{margin-top:10px}.ok{max-width:728px}.on{font-style:inherit}.oo{line-height:1.12}.op{letter-spacing:-0.022em}.oq{font-weight:600}.pl{margin-bottom:-0.28em}.pr{list-style-type:disc}.ps{margin-left:30px}.pt{padding-left:0px}.pz{margin-top:32px}.qa{margin-bottom:14px}.qb{padding-top:24px}.qc{padding-bottom:10px}.qd{background-color:#000000}.qe{height:3px}.qf{width:3px}.qg{margin-right:20px}.qm{line-height:1.18}.ra{margin-bottom:-0.31em}.rb{font-style:italic}.rc{margin-bottom:26px}.rd{margin-top:6px}.re{margin-top:8px}.rf{margin-right:8px}.rg{padding:8px 16px}.rh{border-radius:100px}.ri{transition:background 300ms ease}.rk{white-space:nowrap}.rl{border-top:none}.rm{height:52px}.rn{max-height:52px}.ro{box-sizing:content-box}.rp{position:static}.rr{max-width:155px}.sc{height:0px}.sd{margin-bottom:40px}.se{margin-bottom:48px}.ss{border-radius:2px}.su{height:64px}.sv{width:64px}.sw{align-self:flex-end}.sx{flex:1 1 auto}.td{padding-right:4px}.te{font-weight:500}.tl{margin-top:16px}.tm{color:rgba(255, 255, 255, 1)}.tn{fill:rgba(255, 255, 255, 1)}.to{background:rgba(25, 25, 25, 1)}.tp{border-color:rgba(25, 25, 25, 1)}.ts:disabled{opacity:0.1}.tt:disabled:hover{background:rgba(25, 25, 25, 1)}.tu:disabled:hover{border-color:rgba(25, 25, 25, 1)}.tv{margin-bottom:54px}.ub{gap:18px}.uc{fill:rgba(61, 61, 61, 1)}.uj{border-bottom:solid 1px #E5E5E5}.uk{margin-top:72px}.ul{padding:24px 0}.um{margin-bottom:0px}.un{margin-right:16px}.as:hover:not(:disabled){color:rgba(25, 25, 25, 1)}.at:hover:not(:disabled){fill:rgba(25, 25, 25, 1)}.et:hover{background:rgba(113, 114, 114, 1)}.eu:hover{border-color:rgba(113, 114, 114, 1)}.ev:hover{cursor:pointer}.fl:hover{color:#242424}.fm:hover{fill:#242424}.fq:hover svg{fill:#242424}.ft:hover{background-color:rgba(0, 0, 0, 0.1)}.iq:hover{text-decoration:underline}.iv:hover:not(:disabled){color:rgba(113, 114, 114, 1)}.iw:hover:not(:disabled){fill:rgba(113, 114, 114, 1)}.ld:hover{fill:rgba(8, 8, 8, 1)}.ls:hover{fill:#000000}.lt:hover p{color:#000000}.lw:hover{color:#000000}.mg:hover svg{color:#000000}.rj:hover{background-color:#F2F2F2}.st:hover{background-color:none}.tq:hover{background:#000000}.tr:hover{border-color:#242424}.ud:hover{fill:rgba(25, 25, 25, 1)}.bd:focus-within path{fill:#242424}.lc:focus{fill:rgba(8, 8, 8, 1)}.mh:focus svg{color:#000000}.oh:focus{transform:scale(1.01)}.lh:active{border-style:none}</style><style type="text/css" data-fela-rehydration="559" data-fela-type="RULE" media="all and (min-width: 1080px)">.d{display:none}.bw{width:64px}.cg{margin:0 64px}.cv{height:48px}.dc{margin-bottom:52px}.do{margin-bottom:48px}.ef{font-size:14px}.eg{line-height:20px}.em{font-size:13px}.eo{padding:5px 12px}.fh{display:flex}.fy{margin-bottom:68px}.gc{max-width:680px}.hq{font-size:42px}.hr{margin-top:1.19em}.hs{margin-bottom:32px}.ht{line-height:52px}.hu{letter-spacing:-0.011em}.hz{align-items:center}.kb{border-top:solid 1px #F2F2F2}.kc{border-bottom:solid 1px #F2F2F2}.kd{margin:32px 0 0}.ke{padding:3px 8px}.kn> *{margin-right:24px}.ko> :last-child{margin-right:0}.lo{margin-top:0px}.mc{margin:0}.np{font-size:20px}.nq{margin-top:2.14em}.nr{line-height:32px}.ns{letter-spacing:-0.003em}.oc{margin-top:56px}.ph{font-size:24px}.pi{margin-top:1.95em}.pj{line-height:30px}.pk{letter-spacing:-0.016em}.pq{margin-top:0.94em}.py{margin-top:1.14em}.ql{margin-top:1.25em}.qx{margin-top:1.72em}.qy{line-height:24px}.qz{letter-spacing:0}.rw{display:inline-block}.sb{margin-bottom:104px}.sf{flex-direction:row}.si{margin-bottom:0}.sj{margin-right:20px}.sy{max-width:500px}.ua{margin-bottom:72px}.ui{padding-top:72px}</style><style type="text/css" data-fela-rehydration="559" data-fela-type="RULE" media="all and (max-width: 1079.98px)">.e{display:none}.ln{margin-top:0px}.ol{margin-left:auto}.om{text-align:center}.rv{display:inline-block}</style><style type="text/css" data-fela-rehydration="559" data-fela-type="RULE" media="all and (max-width: 903.98px)">.f{display:none}.lm{margin-top:0px}.ru{display:inline-block}</style><style type="text/css" data-fela-rehydration="559" data-fela-type="RULE" media="all and (max-width: 727.98px)">.g{display:none}.lk{margin-top:0px}.ll{margin-right:0px}.rt{display:inline-block}</style><style type="text/css" data-fela-rehydration="559" data-fela-type="RULE" media="all and (max-width: 551.98px)">.h{display:none}.s{display:flex}.t{justify-content:space-between}.bs{width:24px}.cc{margin:0 24px}.cr{height:40px}.cy{margin-bottom:44px}.dk{margin-bottom:32px}.dx{font-size:13px}.dy{line-height:20px}.eh{padding:0px 8px 1px}.fu{margin-bottom:4px}.gw{font-size:32px}.gx{margin-top:1.01em}.gy{margin-bottom:24px}.gz{line-height:38px}.ha{letter-spacing:-0.014em}.hv{align-items:flex-start}.iy{flex-direction:column}.jb{margin-bottom:2px}.jp{margin:24px -24px 0}.jq{padding:0}.kf> *{margin-right:8px}.kg> :last-child{margin-right:24px}.kx{margin-left:0px}.li{margin-top:0px}.lj{margin-right:0px}.ly{margin:0}.mi{border:1px solid #F2F2F2}.mj{border-radius:99em}.mk{padding:0px 16px 0px 12px}.ml{height:38px}.mm{align-items:center}.mo svg{margin-right:8px}.mz{font-size:18px}.na{margin-top:1.56em}.nb{line-height:28px}.nc{letter-spacing:-0.003em}.ny{margin-top:40px}.or{font-size:20px}.os{margin-top:1.2em}.ot{line-height:24px}.ou{letter-spacing:0}.pm{margin-top:0.67em}.pu{margin-top:1.34em}.qh{margin-top:0.93em}.qn{font-size:16px}.qo{margin-top:1.23em}.rs{display:inline-block}.rx{margin-bottom:96px}.sq{margin-bottom:20px}.sr{margin-right:0}.tc{max-width:100%}.tf{font-size:24px}.tg{line-height:30px}.th{letter-spacing:-0.016em}.tw{margin-bottom:64px}.ue{padding-top:48px}.mn:hover{border-color:#E5E5E5}</style><style type="text/css" data-fela-rehydration="559" data-fela-type="RULE" media="all and (min-width: 904px) and (max-width: 1079.98px)">.i{display:none}.bv{width:64px}.cf{margin:0 64px}.cu{height:48px}.db{margin-bottom:52px}.dn{margin-bottom:48px}.ed{font-size:14px}.ee{line-height:20px}.ek{font-size:13px}.el{padding:5px 12px}.fg{display:flex}.fx{margin-bottom:68px}.gb{max-width:680px}.hl{font-size:42px}.hm{margin-top:1.19em}.hn{margin-bottom:32px}.ho{line-height:52px}.hp{letter-spacing:-0.011em}.hy{align-items:center}.jx{border-top:solid 1px #F2F2F2}.jy{border-bottom:solid 1px #F2F2F2}.jz{margin:32px 0 0}.ka{padding:3px 8px}.kl> *{margin-right:24px}.km> :last-child{margin-right:0}.mb{margin:0}.nl{font-size:20px}.nm{margin-top:2.14em}.nn{line-height:32px}.no{letter-spacing:-0.003em}.ob{margin-top:56px}.pd{font-size:24px}.pe{margin-top:1.95em}.pf{line-height:30px}.pg{letter-spacing:-0.016em}.pp{margin-top:0.94em}.px{margin-top:1.14em}.qk{margin-top:1.25em}.qu{margin-top:1.72em}.qv{line-height:24px}.qw{letter-spacing:0}.sa{margin-bottom:104px}.sg{flex-direction:row}.sk{margin-bottom:0}.sl{margin-right:20px}.sz{max-width:500px}.tz{margin-bottom:72px}.uh{padding-top:72px}</style><style type="text/css" data-fela-rehydration="559" data-fela-type="RULE" media="all and (min-width: 728px) and (max-width: 903.98px)">.j{display:none}.w{display:flex}.x{justify-content:space-between}.bu{width:64px}.ce{margin:0 48px}.ct{height:48px}.da{margin-bottom:52px}.dm{margin-bottom:48px}.eb{font-size:13px}.ec{line-height:20px}.ej{padding:0px 8px 1px}.fw{margin-bottom:68px}.ga{max-width:680px}.hg{font-size:42px}.hh{margin-top:1.19em}.hi{margin-bottom:32px}.hj{line-height:52px}.hk{letter-spacing:-0.011em}.hx{align-items:center}.jt{border-top:solid 1px #F2F2F2}.ju{border-bottom:solid 1px #F2F2F2}.jv{margin:32px 0 0}.jw{padding:3px 8px}.kj> *{margin-right:24px}.kk> :last-child{margin-right:0}.ma{margin:0}.nh{font-size:20px}.ni{margin-top:2.14em}.nj{line-height:32px}.nk{letter-spacing:-0.003em}.oa{margin-top:56px}.oz{font-size:24px}.pa{margin-top:1.95em}.pb{line-height:30px}.pc{letter-spacing:-0.016em}.po{margin-top:0.94em}.pw{margin-top:1.14em}.qj{margin-top:1.25em}.qr{margin-top:1.72em}.qs{line-height:24px}.qt{letter-spacing:0}.rz{margin-bottom:104px}.sh{flex-direction:row}.sm{margin-bottom:0}.sn{margin-right:20px}.ta{max-width:500px}.ty{margin-bottom:72px}.ug{padding-top:72px}</style><style type="text/css" data-fela-rehydration="559" data-fela-type="RULE" media="all and (min-width: 552px) and (max-width: 727.98px)">.k{display:none}.u{display:flex}.v{justify-content:space-between}.bt{width:24px}.cd{margin:0 24px}.cs{height:40px}.cz{margin-bottom:44px}.dl{margin-bottom:32px}.dz{font-size:13px}.ea{line-height:20px}.ei{padding:0px 8px 1px}.fv{margin-bottom:4px}.hb{font-size:32px}.hc{margin-top:1.01em}.hd{margin-bottom:24px}.he{line-height:38px}.hf{letter-spacing:-0.014em}.hw{align-items:flex-start}.iz{flex-direction:column}.jc{margin-bottom:2px}.jr{margin:24px 0 0}.js{padding:0}.kh> *{margin-right:8px}.ki> :last-child{margin-right:8px}.ky{margin-left:0px}.lz{margin:0}.mp{border:1px solid #F2F2F2}.mq{border-radius:99em}.mr{padding:0px 16px 0px 12px}.ms{height:38px}.mt{align-items:center}.mv svg{margin-right:8px}.nd{font-size:18px}.ne{margin-top:1.56em}.nf{line-height:28px}.ng{letter-spacing:-0.003em}.nz{margin-top:40px}.ov{font-size:20px}.ow{margin-top:1.2em}.ox{line-height:24px}.oy{letter-spacing:0}.pn{margin-top:0.67em}.pv{margin-top:1.34em}.qi{margin-top:0.93em}.qp{font-size:16px}.qq{margin-top:1.23em}.ry{margin-bottom:96px}.so{margin-bottom:20px}.sp{margin-right:0}.tb{max-width:100%}.ti{font-size:24px}.tj{line-height:30px}.tk{letter-spacing:-0.016em}.tx{margin-bottom:64px}.uf{padding-top:48px}.mu:hover{border-color:#E5E5E5}</style><style type="text/css" data-fela-rehydration="559" data-fela-type="RULE" media="print">.rq{display:none}</style><style type="text/css" data-fela-rehydration="559" data-fela-type="RULE" media="(orientation: landscape) and (max-width: 903.98px)">.jm{max-height:none}</style><style type="text/css" data-fela-rehydration="559" data-fela-type="RULE" media="(prefers-reduced-motion: no-preference)">.oe{transition:transform 300ms cubic-bezier(0.2, 0, 0.2, 1)}</style></head><body><div id="root"><div class="a b c"><div class="d e f g h i j k"></div><script>document.domain = document.domain;</script><div class="l c"><div class="l m n o c"><div class="p q r s t u v w x i d y z"><a class="du ag dv bf ak b am an ao ap aq ar as at s u w i d q dw z" href="https://rsci.app.link/?%24canonical_url=https%3A%2F%2Fmedium.com%2Fp%2Fd6c2ecb3f887&amp;%7Efeature=LoOpenInAppButton&amp;%7Echannel=ShowPostUnderCollection&amp;source=---top_nav_layout_nav----------------------------------" rel="noopener follow">Open in app<svg xmlns="http://www.w3.org/2000/svg" width="10" height="10" fill="none" viewBox="0 0 10 10" class="dt"><path fill="currentColor" d="M.985 8.485a.375.375 0 1 0 .53.53zM8.75 1.25h.375A.375.375 0 0 0 8.75.875zM8.375 6.5a.375.375 0 1 0 .75 0zM3.5.875a.375.375 0 1 0 0 .75zm-1.985 8.14 7.5-7.5-.53-.53-7.5 7.5zm6.86-7.765V6.5h.75V1.25zM3.5 1.625h5.25v-.75H3.5z"></path></svg></a><div class="ab q"><p class="bf b dx dy dz ea eb ec ed ee ef eg du"><span><button class="bf b dx dy eh dz ea ei eb ec ej ek ee el em eg eo ep eq er es et eu ev ew ex ey ez fa fb fc fd bm fe ff" data-testid="headerSignUpButton">Sign up</button></span></p><div class="ax l"><p class="bf b dx dy dz ea eb ec ed ee ef eg du"><span><a class="af ag ah ai aj ak al am an ao ap aq ar as at" data-testid="headerSignInButton" rel="noopener follow" href="/m/signin?operation=login&amp;redirect=https%3A%2F%2Fmedium.com%2Fithaka-tech%2Fchoose-boring-releases-d6c2ecb3f887&amp;source=post_page---top_nav_layout_nav-----------------------global_nav-----------">Sign in</a></span></p></div></div></div><div class="p q r ab ac"><div class="ab q ae"><a class="af ag ah ai aj ak al am an ao ap aq ar as at ab" aria-label="Homepage" data-testid="headerMediumLogo" rel="noopener follow" href="/?source=---top_nav_layout_nav----------------------------------"><svg xmlns="http://www.w3.org/2000/svg" width="719" height="160" fill="none" viewBox="0 0 719 160" class="au av aw"><path fill="#242424" d="m174.104 9.734.215-.047V8.02H130.39L89.6 103.89 48.81 8.021H1.472v1.666l.212.047c8.018 1.81 12.09 4.509 12.09 14.242V137.93c0 9.734-4.087 12.433-12.106 14.243l-.212.047v1.671h32.118v-1.665l-.213-.048c-8.018-1.809-12.089-4.509-12.089-14.242V30.586l52.399 123.305h2.972l53.925-126.743V140.75c-.687 7.688-4.721 10.062-11.982 11.701l-.215.05v1.652h55.948v-1.652l-.215-.05c-7.269-1.639-11.4-4.013-12.087-11.701l-.037-116.774h.037c0-9.733 4.071-12.432 12.087-14.242m25.555 75.488c.915-20.474 8.268-35.252 20.606-35.507 3.806.063 6.998 1.312 9.479 3.714 5.272 5.118 7.751 15.812 7.368 31.793zm-.553 5.77h65.573v-.275c-.186-15.656-4.721-27.834-13.466-36.196-7.559-7.227-18.751-11.203-30.507-11.203h-.263c-6.101 0-13.584 1.48-18.909 4.16-6.061 2.807-11.407 7.003-15.855 12.511-7.161 8.874-11.499 20.866-12.554 34.343q-.05.606-.092 1.212a50 50 0 0 0-.065 1.151 85.807 85.807 0 0 0-.094 5.689c.71 30.524 17.198 54.917 46.483 54.917 25.705 0 40.675-18.791 44.407-44.013l-1.886-.664c-6.557 13.556-18.334 21.771-31.738 20.769-18.297-1.369-32.314-19.922-31.042-42.395m139.722 41.359c-2.151 5.101-6.639 7.908-12.653 7.908s-11.513-4.129-15.418-11.63c-4.197-8.053-6.405-19.436-6.405-32.92 0-28.067 8.729-46.22 22.24-46.22 5.657 0 10.111 2.807 12.236 7.704zm43.499 20.008c-8.019-1.897-12.089-4.722-12.089-14.951V1.309l-48.716 14.353v1.757l.299-.024c6.72-.543 11.278.386 13.925 2.83 2.072 1.915 3.082 4.853 3.082 8.987v18.66c-4.803-3.067-10.516-4.56-17.448-4.56-14.059 0-26.909 5.92-36.176 16.672-9.66 11.205-14.767 26.518-14.767 44.278-.003 31.72 15.612 53.039 38.851 53.039 13.595 0 24.533-7.449 29.54-20.013v16.865h43.711v-1.746zM424.1 19.819c0-9.904-7.468-17.374-17.375-17.374-9.859 0-17.573 7.632-17.573 17.374s7.721 17.374 17.573 17.374c9.907 0 17.375-7.47 17.375-17.374m11.499 132.546c-8.019-1.897-12.089-4.722-12.089-14.951h-.035V43.635l-43.714 12.551v1.705l.263.024c9.458.842 12.047 4.1 12.047 15.152v81.086h43.751v-1.746zm112.013 0c-8.018-1.897-12.089-4.722-12.089-14.951V43.635l-41.621 12.137v1.71l.246.026c7.733.813 9.967 4.257 9.967 15.36v59.279c-2.578 5.102-7.415 8.131-13.274 8.336-9.503 0-14.736-6.419-14.736-18.073V43.638l-43.714 12.55v1.703l.262.024c9.459.84 12.05 4.097 12.05 15.152v50.17a56.3 56.3 0 0 0 .91 10.444l.787 3.423c3.701 13.262 13.398 20.197 28.59 20.197 12.868 0 24.147-7.966 29.115-20.43v17.311h43.714v-1.747zm169.818 1.788v-1.749l-.213-.05c-8.7-2.006-12.089-5.789-12.089-13.49v-63.79c0-19.89-11.171-31.761-29.883-31.761-13.64 0-25.141 7.882-29.569 20.16-3.517-13.01-13.639-20.16-28.606-20.16-13.146 0-23.449 6.938-27.869 18.657V43.643L545.487 55.68v1.715l.263.024c9.345.829 12.047 4.181 12.047 14.95v81.784h40.787v-1.746l-.215-.053c-6.941-1.631-9.181-4.606-9.181-12.239V66.998c1.836-4.289 5.537-9.37 12.853-9.37 9.086 0 13.692 6.296 13.692 18.697v77.828h40.797v-1.746l-.215-.053c-6.94-1.631-9.18-4.606-9.18-12.239V75.066a42 42 0 0 0-.578-7.26c1.947-4.661 5.86-10.177 13.475-10.177 9.214 0 13.691 6.114 13.691 18.696v77.828z"></path></svg></a><div class="ax h"><div class="ab ay az ba bb q bc bd"><div class="bm" aria-hidden="false" aria-describedby="searchResults" aria-labelledby="searchResults"></div><div class="bn bo ab"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="none" viewBox="0 0 24 24"><path fill="currentColor" fill-rule="evenodd" d="M4.092 11.06a6.95 6.95 0 1 1 13.9 0 6.95 6.95 0 0 1-13.9 0m6.95-8.05a8.05 8.05 0 1 0 5.13 14.26l3.75 3.75a.56.56 0 1 0 .79-.79l-3.73-3.73A8.05 8.05 0 0 0 11.042 3z" clip-rule="evenodd"></path></svg></div><input role="combobox" aria-controls="searchResults" aria-expanded="false" aria-label="search" data-testid="headerSearchInput" tabindex="0" class="ay be bf bg z bh bi bj bk bl" placeholder="Search" value=""/></div></div></div><div class="h k w fg fh"><div class="fi ab"><span><a class="af ag ah ai aj ak al am an ao ap aq ar as at" data-testid="headerWriteButton" rel="noopener follow" href="/m/signin?operation=register&amp;redirect=https%3A%2F%2Fmedium.com%2Fnew-story&amp;source=---top_nav_layout_nav-----------------------new_post_topnav-----------"><div class="bf b bg z du fj fk ab q fl fm"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="none" viewBox="0 0 24 24" aria-label="Write"><path fill="currentColor" d="M14 4a.5.5 0 0 0 0-1zm7 6a.5.5 0 0 0-1 0zm-7-7H4v1h10zM3 4v16h1V4zm1 17h16v-1H4zm17-1V10h-1v10zm-1 1a1 1 0 0 0 1-1h-1zM3 20a1 1 0 0 0 1 1v-1zM4 3a1 1 0 0 0-1 1h1z"></path><path stroke="currentColor" d="m17.5 4.5-8.458 8.458a.25.25 0 0 0-.06.098l-.824 2.47a.25.25 0 0 0 .316.316l2.47-.823a.25.25 0 0 0 .098-.06L19.5 6.5m-2-2 2.323-2.323a.25.25 0 0 1 .354 0l1.646 1.646a.25.25 0 0 1 0 .354L19.5 6.5m-2-2 2 2"></path></svg><div class="dt l">Write</div></div></a></span></div></div><div class="k j i d"><div class="fi ab"><a class="af ag ah ai aj ak al am an ao ap aq ar as at" data-testid="headerSearchButton" rel="noopener follow" href="/search?source=---top_nav_layout_nav----------------------------------"><div class="bf b bg z du fj fk ab q fl fm"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="none" viewBox="0 0 24 24" aria-label="Search"><path fill="currentColor" fill-rule="evenodd" d="M4.092 11.06a6.95 6.95 0 1 1 13.9 0 6.95 6.95 0 0 1-13.9 0m6.95-8.05a8.05 8.05 0 1 0 5.13 14.26l3.75 3.75a.56.56 0 1 0 .79-.79l-3.73-3.73A8.05 8.05 0 0 0 11.042 3z" clip-rule="evenodd"></path></svg></div></a></div></div><div class="fi h k j"><div class="ab q"><p class="bf b dx dy dz ea eb ec ed ee ef eg du"><span><button class="bf b dx dy eh dz ea ei eb ec ej ek ee el em eg eo ep eq er es et eu ev ew ex ey ez fa fb fc fd bm fe ff" data-testid="headerSignUpButton">Sign up</button></span></p><div class="ax l"><p class="bf b dx dy dz ea eb ec ed ee ef eg du"><span><a class="af ag ah ai aj ak al am an ao ap aq ar as at" data-testid="headerSignInButton" rel="noopener follow" href="/m/signin?operation=login&amp;redirect=https%3A%2F%2Fmedium.com%2Fithaka-tech%2Fchoose-boring-releases-d6c2ecb3f887&amp;source=post_page---top_nav_layout_nav-----------------------global_nav-----------">Sign in</a></span></p></div></div></div><div class="l" aria-hidden="false"><button class="ay fn am ab q ao fo fp fq" aria-label="user options menu" data-testid="headerUserIcon"><div class="l fj"><img alt="" class="l fd by bz ca cx" src="https://miro.medium.com/v2/resize:fill:64:64/1*dmbNkD5D-u45r44go_cf0g.png" width="32" height="32" loading="lazy" role="presentation"/><div class="fr by l bz ca fs n ay ft"></div></div></button></div></div></div><div class="l"><div class="fu fv fw fx fy l"><div class="ab cb"><div class="ci bh fz ga gb gc"></div></div><article><div class="l"><div class="l"><span class="l"></span><section><div><div class="fs gi gj gk gl gm"></div><div class="gn go gp gq gr"><div class="ab cb"><div class="ci bh fz ga gb gc"><div><h1 id="9d4c" class="pw-post-title gs gt gu bf gv gw gx gy gz ha hb hc hd he hf hg hh hi hj hk hl hm hn ho hp hq hr hs ht hu bk" data-testid="storyTitle">Choose Boring Releases</h1><div><div class="speechify-ignore ab cp"><div class="speechify-ignore bh l"><div class="hv hw hx hy hz ab"><div><div class="ab ia"><div><div class="bm" aria-hidden="false"><a rel="noopener follow" href="/@danehillard?source=post_page---byline--d6c2ecb3f887--------------------------------"><div class="l ib ic by id ie"><div class="l fj"><img alt="Dane Hillard" class="l fd by dd de cx" src="https://miro.medium.com/v2/resize:fill:88:88/1*z4bkwyZ2vBXYDunTWm08YA.jpeg" width="44" height="44" loading="lazy" data-testid="authorPhoto"/><div class="if by l dd de fs n ig ft"></div></div></div></a></div></div><div class="ih ab fj"><div><div class="bm" aria-hidden="false"><a href="https://medium.com/ithaka-tech?source=post_page---byline--d6c2ecb3f887--------------------------------" rel="noopener follow"><div class="l ii ij by id ik"><div class="l fj"><img alt="ITHAKA Tech" class="l fd by br il cx" src="https://miro.medium.com/v2/resize:fill:48:48/1*JUL5st-N0tn2jw8as1MBcw.png" width="24" height="24" loading="lazy" data-testid="publicationPhoto"/><div class="if by l br il fs n ig ft"></div></div></div></a></div></div></div></div></div><div class="bn bh l"><div class="ab"><div style="flex:1"><span class="bf b bg z bk"><div class="im ab q"><div class="ab q in"><div class="ab q"><div><div class="bm" aria-hidden="false"><p class="bf b io ip bk"><a class="af ag ah ai aj ak al am an ao ap aq ar iq" data-testid="authorName" rel="noopener follow" href="/@danehillard?source=post_page---byline--d6c2ecb3f887--------------------------------">Dane Hillard</a></p></div></div></div><span class="ir is" aria-hidden="true"><span class="bf b bg z du">·</span></span><p class="bf b io ip du"><span><a class="it iu ah ai aj ak al am an ao ap aq ar ex iv iw" rel="noopener follow" href="/m/signin?actionUrl=https%3A%2F%2Fmedium.com%2F_%2Fsubscribe%2Fuser%2F98e683e1a582&amp;operation=register&amp;redirect=https%3A%2F%2Fmedium.com%2Fithaka-tech%2Fchoose-boring-releases-d6c2ecb3f887&amp;user=Dane+Hillard&amp;userId=98e683e1a582&amp;source=post_page-98e683e1a582--byline--d6c2ecb3f887---------------------post_header-----------">Follow</a></span></p></div></div></span></div></div><div class="l ix"><span class="bf b bg z du"><div class="ab cn iy iz ja"><div class="jb jc ab"><div class="bf b bg z du ab jd"><span class="je l ix">Published in</span><div><div class="l" aria-hidden="false"><a class="af ag ah ai aj ak al am an ao ap aq ar iq ab q" data-testid="publicationName" href="https://medium.com/ithaka-tech?source=post_page---byline--d6c2ecb3f887--------------------------------" rel="noopener follow"><p class="bf b bg z jf jg jh ji jj jk jl jm bk">ITHAKA Tech</p></a></div></div></div><div class="h k"><span class="ir is" aria-hidden="true"><span class="bf b bg z du">·</span></span></div></div><span class="bf b bg z du"><div class="ab ae"><span data-testid="storyReadTime">8 min read</span><div class="jn jo l" aria-hidden="true"><span class="l" aria-hidden="true"><span class="bf b bg z du">·</span></span></div><span data-testid="storyPublishDate">Sep 26, 2024</span></div></span></div></span></div></div></div><div class="ab cp jp jq jr js jt ju jv jw jx jy jz ka kb kc kd ke"><div class="h k w fg fh q"><div class="ku l"><div class="ab q kv kw"><div class="pw-multi-vote-icon fj je kx ky kz"><span><a class="af ag ah ai aj ak al am an ao ap aq ar as at" data-testid="headerClapButton" rel="noopener follow" href="/m/signin?actionUrl=https%3A%2F%2Fmedium.com%2F_%2Fvote%2Fithaka-tech%2Fd6c2ecb3f887&amp;operation=register&amp;redirect=https%3A%2F%2Fmedium.com%2Fithaka-tech%2Fchoose-boring-releases-d6c2ecb3f887&amp;user=Dane+Hillard&amp;userId=98e683e1a582&amp;source=---header_actions--d6c2ecb3f887---------------------clap_footer-----------"><div><div class="bm" aria-hidden="false"><div class="la ao lb lc ld le am lf lg lh kz"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" aria-label="clap"><path fill-rule="evenodd" d="M11.37.828 12 3.282l.63-2.454zM13.916 3.953l1.523-2.112-1.184-.39zM8.589 1.84l1.522 2.112-.337-2.501zM18.523 18.92c-.86.86-1.75 1.246-2.62 1.33a6 6 0 0 0 .407-.372c2.388-2.389 2.86-4.951 1.399-7.623l-.912-1.603-.79-1.672c-.26-.56-.194-.98.203-1.288a.7.7 0 0 1 .546-.132c.283.046.546.231.728.5l2.363 4.157c.976 1.624 1.141 4.237-1.324 6.702m-10.999-.438L3.37 14.328a.828.828 0 0 1 .585-1.408.83.83 0 0 1 .585.242l2.158 2.157a.365.365 0 0 0 .516-.516l-2.157-2.158-1.449-1.449a.826.826 0 0 1 1.167-1.17l3.438 3.44a.363.363 0 0 0 .516 0 .364.364 0 0 0 0-.516L5.293 9.513l-.97-.97a.826.826 0 0 1 0-1.166.84.84 0 0 1 1.167 0l.97.968 3.437 3.436a.36.36 0 0 0 .517 0 .366.366 0 0 0 0-.516L6.977 7.83a.82.82 0 0 1-.241-.584.82.82 0 0 1 .824-.826c.219 0 .43.087.584.242l5.787 5.787a.366.366 0 0 0 .587-.415l-1.117-2.363c-.26-.56-.194-.98.204-1.289a.7.7 0 0 1 .546-.132c.283.046.545.232.727.501l2.193 3.86c1.302 2.38.883 4.59-1.277 6.75-1.156 1.156-2.602 1.627-4.19 1.367-1.418-.236-2.866-1.033-4.079-2.246M10.75 5.971l2.12 2.12c-.41.502-.465 1.17-.128 1.89l.22.465-3.523-3.523a.8.8 0 0 1-.097-.368c0-.22.086-.428.241-.584a.847.847 0 0 1 1.167 0m7.355 1.705c-.31-.461-.746-.758-1.23-.837a1.44 1.44 0 0 0-1.11.275c-.312.24-.505.543-.59.881a1.74 1.74 0 0 0-.906-.465 1.47 1.47 0 0 0-.82.106l-2.182-2.182a1.56 1.56 0 0 0-2.2 0 1.54 1.54 0 0 0-.396.701 1.56 1.56 0 0 0-2.21-.01 1.55 1.55 0 0 0-.416.753c-.624-.624-1.649-.624-2.237-.037a1.557 1.557 0 0 0 0 2.2c-.239.1-.501.238-.715.453a1.56 1.56 0 0 0 0 2.2l.516.515a1.556 1.556 0 0 0-.753 2.615L7.01 19c1.32 1.319 2.909 2.189 4.475 2.449q.482.08.971.08c.85 0 1.653-.198 2.393-.579.231.033.46.054.686.054 1.266 0 2.457-.52 3.505-1.567 2.763-2.763 2.552-5.734 1.439-7.586z" clip-rule="evenodd"></path></svg></div></div></div></a></span></div><div class="pw-multi-vote-count l li lj lk ll lm ln lo"><p class="bf b dv z du"><span class="lp">--</span></p></div></div></div><div><div class="bm" aria-hidden="false"><button class="ao la lq lr ab q fk ls lt" aria-label="responses"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" class="lu"><path d="M18.006 16.803c1.533-1.456 2.234-3.325 2.234-5.321C20.24 7.357 16.709 4 12.191 4S4 7.357 4 11.482c0 4.126 3.674 7.482 8.191 7.482.817 0 1.622-.111 2.393-.327.231.2.48.391.744.559 1.06.693 2.203 1.044 3.399 1.044.224-.008.4-.112.486-.287a.49.49 0 0 0-.042-.518c-.495-.67-.845-1.364-1.04-2.057a4 4 0 0 1-.125-.598zm-3.122 1.055-.067-.223-.315.096a8 8 0 0 1-2.311.338c-4.023 0-7.292-2.955-7.292-6.587 0-3.633 3.269-6.588 7.292-6.588 4.014 0 7.112 2.958 7.112 6.593 0 1.794-.608 3.469-2.027 4.72l-.195.168v.255c0 .056 0 .151.016.295.025.231.081.478.154.733.154.558.398 1.117.722 1.659a5.3 5.3 0 0 1-2.165-.845c-.276-.176-.714-.383-.941-.59z"></path></svg></button></div></div></div><div class="ab q kf kg kh ki kj kk kl km kn ko kp kq kr ks kt"><div class="lv k j i d"></div><div class="h k"><div><div class="bm" aria-hidden="false"><span><a class="af ag ah ai aj ak al am an ao ap aq ar as at" data-testid="headerBookmarkButton" rel="noopener follow" href="/m/signin?actionUrl=https%3A%2F%2Fmedium.com%2F_%2Fbookmark%2Fp%2Fd6c2ecb3f887&amp;operation=register&amp;redirect=https%3A%2F%2Fmedium.com%2Fithaka-tech%2Fchoose-boring-releases-d6c2ecb3f887&amp;source=---header_actions--d6c2ecb3f887---------------------bookmark_footer-----------"><svg xmlns="http://www.w3.org/2000/svg" width="25" height="25" fill="none" viewBox="0 0 25 25" class="du lw" aria-label="Add to list bookmark button"><path fill="currentColor" d="M18 2.5a.5.5 0 0 1 1 0V5h2.5a.5.5 0 0 1 0 1H19v2.5a.5.5 0 1 1-1 0V6h-2.5a.5.5 0 0 1 0-1H18zM7 7a1 1 0 0 1 1-1h3.5a.5.5 0 0 0 0-1H8a2 2 0 0 0-2 2v14a.5.5 0 0 0 .805.396L12.5 17l5.695 4.396A.5.5 0 0 0 19 21v-8.5a.5.5 0 0 0-1 0v7.485l-5.195-4.012a.5.5 0 0 0-.61 0L7 19.985z"></path></svg></a></span></div></div></div><div class="fd lx cn"><div class="l ae"><div class="ab cb"><div class="ly lz ma mb mc md ci bh"><div class="ab"><div class="bm bh" aria-hidden="false"><div><div class="bm" aria-hidden="false"><button aria-label="Listen" data-testid="audioPlayButton" class="af fk ah ai aj ak al me an ao ap ex mf mg lt mh mi mj mk ml s mm mn mo mp mq mr ms u mt mu mv"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="none" viewBox="0 0 24 24"><path fill="currentColor" fill-rule="evenodd" d="M3 12a9 9 0 1 1 18 0 9 9 0 0 1-18 0m9-10C6.477 2 2 6.477 2 12s4.477 10 10 10 10-4.477 10-10S17.523 2 12 2m3.376 10.416-4.599 3.066a.5.5 0 0 1-.777-.416V8.934a.5.5 0 0 1 .777-.416l4.599 3.066a.5.5 0 0 1 0 .832" clip-rule="evenodd"></path></svg><div class="j i d"><p class="bf b bg z du">Listen</p></div></button></div></div></div></div></div></div></div></div><div class="bm" aria-hidden="false" aria-describedby="postFooterSocialMenu" aria-labelledby="postFooterSocialMenu"><div><div class="bm" aria-hidden="false"><button aria-controls="postFooterSocialMenu" aria-expanded="false" aria-label="Share Post" data-testid="headerSocialShareButton" class="af fk ah ai aj ak al me an ao ap ex mf mg lt mh mi mj mk ml s mm mn mo mp mq mr ms u mt mu mv"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="none" viewBox="0 0 24 24"><path fill="currentColor" fill-rule="evenodd" d="M15.218 4.931a.4.4 0 0 1-.118.132l.012.006a.45.45 0 0 1-.292.074.5.5 0 0 1-.3-.13l-2.02-2.02v7.07c0 .28-.23.5-.5.5s-.5-.22-.5-.5v-7.04l-2 2a.45.45 0 0 1-.57.04h-.02a.4.4 0 0 1-.16-.3.4.4 0 0 1 .1-.32l2.8-2.8a.5.5 0 0 1 .7 0l2.8 2.79a.42.42 0 0 1 .068.498m-.106.138.008.004v-.01zM16 7.063h1.5a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2h-11c-1.1 0-2-.9-2-2v-10a2 2 0 0 1 2-2H8a.5.5 0 0 1 .35.15.5.5 0 0 1 .15.35.5.5 0 0 1-.15.35.5.5 0 0 1-.35.15H6.4c-.5 0-.9.4-.9.9v10.2a.9.9 0 0 0 .9.9h11.2c.5 0 .9-.4.9-.9v-10.2c0-.5-.4-.9-.9-.9H16a.5.5 0 0 1 0-1" clip-rule="evenodd"></path></svg><div class="j i d"><p class="bf b bg z du">Share</p></div></button></div></div></div></div></div></div></div></div></div><p id="290e" class="pw-post-body-paragraph mw mx gu my b mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ns nt gn bk">Academic research increasingly relies on diverse content types, including gray literature and primary source materials, alongside traditional peer-reviewed works. ITHAKA supports this evolving research landscape through initiatives that foster cross-content connections on <a class="af nu" href="https://www.jstor.org/" rel="noopener ugc nofollow" target="_blank">JSTOR</a>, our digital library that supports research, teaching, and learning. These include <a class="af nu" href="https://www.about.jstor.org/whats-in-jstor/infrastructure/" rel="noopener ugc nofollow" target="_blank">infrastructure services</a> that enable institutions to make their digital archives and special collections discoverable on the platform, and a years-long effort to integrate Artstor — a vast collection of images and multimedia for educational use — onto the JSTOR platform.</p><figure class="ny nz oa ob oc od nv nw paragraph-image"><div role="button" tabindex="0" class="oe of fj og bh oh"><div class="nv nw nx"><picture><source srcSet="https://miro.medium.com/v2/resize:fit:640/format:webp/1*lu8id_9u4R0GaRFM_MlIOA.jpeg 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/1*lu8id_9u4R0GaRFM_MlIOA.jpeg 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/1*lu8id_9u4R0GaRFM_MlIOA.jpeg 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/1*lu8id_9u4R0GaRFM_MlIOA.jpeg 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/1*lu8id_9u4R0GaRFM_MlIOA.jpeg 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/1*lu8id_9u4R0GaRFM_MlIOA.jpeg 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/1*lu8id_9u4R0GaRFM_MlIOA.jpeg 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" type="image/webp"/><source data-testid="og" srcSet="https://miro.medium.com/v2/resize:fit:640/1*lu8id_9u4R0GaRFM_MlIOA.jpeg 640w, https://miro.medium.com/v2/resize:fit:720/1*lu8id_9u4R0GaRFM_MlIOA.jpeg 720w, https://miro.medium.com/v2/resize:fit:750/1*lu8id_9u4R0GaRFM_MlIOA.jpeg 750w, https://miro.medium.com/v2/resize:fit:786/1*lu8id_9u4R0GaRFM_MlIOA.jpeg 786w, https://miro.medium.com/v2/resize:fit:828/1*lu8id_9u4R0GaRFM_MlIOA.jpeg 828w, https://miro.medium.com/v2/resize:fit:1100/1*lu8id_9u4R0GaRFM_MlIOA.jpeg 1100w, https://miro.medium.com/v2/resize:fit:1400/1*lu8id_9u4R0GaRFM_MlIOA.jpeg 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px"/><img alt="" class="bh md oi c" width="700" height="535" loading="eager" role="presentation"/></picture></div></div><figcaption class="oj ff ok nv nw ol om bf b bg z du"><em class="on">Albrecht Dürer (German, Nuremberg 1471–1528 Nuremberg). “Alberti Dvreri Pictoris et Architecti Praestantissimi De Vrbibvs…” 1535. Illustrated book, 78 pp.; H: 13 3/4 in. (35 cm). The Metropolitan Museum of Art. </em><a class="af nu" href="https://jstor.org/stable/community.34718827" rel="noopener ugc nofollow" target="_blank"><em class="on">https://jstor.org/stable/community.34718827</em></a><em class="on">. Just one of the millions of items now available on JSTOR.</em></figcaption></figure><p id="9ca3" class="pw-post-body-paragraph mw mx gu my b mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ns nt gn bk">On August 1, 2024, the <a class="af nu" href="https://www.about.jstor.org/news/jstor-announces-artstor-on-jstor/" rel="noopener ugc nofollow" target="_blank">Artstor migration to the JSTOR platform</a> culminated in the need to smoothly guide users from the Artstor Image Workspace (AIW) at library.artstor.org to appropriate counterparts on www.jstor.org. The amount of work this required was daunting; the AIW platform was as large and complex as JSTOR, and covered many different product areas with ownership spread across several different teams. To achieve this transition without drawing focus away from other objectives, we had to adopt a strategic approach.</p><h1 id="3fc0" class="oo op gu bf oq or os ot ou ov ow ox oy oz pa pb pc pd pe pf pg ph pi pj pk pl bk">The challenge</h1><p id="76e5" class="pw-post-body-paragraph mw mx gu my b mz pm nb nc nd pn nf ng nh po nj nk nl pp nn no np pq nr ns nt gn bk">Our two main constituents for this transition were our users — primarily art history researchers and faculty — and search engine web crawlers. Like JSTOR users, many Artstor users start their searches outside of our platforms and need to be able to find things no matter what platform changes we make.</p><p id="418c" class="pw-post-body-paragraph mw mx gu my b mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ns nt gn bk">The first piece of the challenge was technical: Client-side routing was used extensively on the AIW platform. That routing wasn’t built with web crawlers in mind, so many modern web crawlers couldn’t handle it very well. Plus, these client-side routes were generally invisible to our servers because they used hash-based routing rather than the history API. Some pages did support server-side rendering so web crawlers could index them, which gave us an additional scenario to support.</p><p id="2ce0" class="pw-post-body-paragraph mw mx gu my b mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ns nt gn bk">The second challenge was human: Domain knowledge about the details of all this routing and the user value of various pages was spread throughout the organization, and the people with the domain knowledge didn’t always have the technical knowledge to deal with the redirects.</p><p id="bdf1" class="pw-post-body-paragraph mw mx gu my b mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ns nt gn bk">Finally, there was the sheer scope of the work to be done. AIW itself was a huge platform, but on top of that we also had to redirect supporting areas like the marketing and support sites. Very early on, we had to set some parameters to rein in the scope:</p><ul class=""><li id="5cda" class="mw mx gu my b mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ns nt pr ps pt bk">We wouldn’t guarantee or aim for 100% of traffic to be redirected. Some pages and requests simply couldn’t be redirected anywhere reasonable, and redirecting to generic informational pages can lead to search engine ranking penalties. More importantly for our user focus, it would be disorienting to click a bookmark or a search engine result and get redirected to something irrelevant.</li><li id="87eb" class="mw mx gu my b mz pu nb nc nd pv nf ng nh pw nj nk nl px nn no np py nr ns nt pr ps pt bk">We would create a central, extensible service designed for loose coupling of the URL patterns to match and the behavior when such a match occurred. This would reduce unnecessary coupling and dependencies between teams as well as the context those teams had to hold onto during the migration project.</li><li id="deb2" class="mw mx gu my b mz pu nb nc nd pv nf ng nh pw nj nk nl px nn no np py nr ns nt pr ps pt bk">We would enable teams to implement redirects for the broadest-used page types (such as individual items), but would equally enable implementing redirects for the long tail of irregular page types. This would create a familiar implementation pattern for teams that they wouldn’t have to abandon for more exotic use cases.</li><li id="8607" class="mw mx gu my b mz pu nb nc nd pv nf ng nh pw nj nk nl px nn no np py nr ns nt pr ps pt bk">We would enable visibility into the behavior of the system as early as possible, so that we could observe the trend over time. This fostered an experimentation mindset: We could develop hypotheses about how the traffic would be handled, implement a change, and quickly confirm or disconfirm the desired effect after deploying the new change. This also gave us opportunities to leverage parts of our deployment platform we hadn’t exercised much previously, adding some greenfield work to an otherwise brownfield kind of activity.</li></ul><p id="82ef" class="pw-post-body-paragraph mw mx gu my b mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ns nt gn bk">So instead of perfection, we defined our scope as removing as much risk as possible and building in as much confidence as we could ahead of our launch date. Our goal was to coast through the finish line instead of scrambling.</p></div></div></div><div class="ab cb pz qa qb qc" role="separator"><span class="qd by bm qe qf qg"></span><span class="qd by bm qe qf qg"></span><span class="qd by bm qe qf"></span></div><div class="gn go gp gq gr"><div class="ab cb"><div class="ci bh fz ga gb gc"><h1 id="6bd7" class="oo op gu bf oq or qh ot ou ov qi ox oy oz qj pb pc pd qk pf pg ph ql pj pk pl bk">The approach</h1><p id="d65c" class="pw-post-body-paragraph mw mx gu my b mz pm nb nc nd pn nf ng nh po nj nk nl pp nn no np pq nr ns nt gn bk">So how did we do that? A few key tactics showed up for us and made things possible throughout this project.</p><h2 id="e67f" class="qm op gu bf oq qn qo dy ou qp qq ea oy nh qr qs qt nl qu qv qw np qx qy qz ra bk">Practice product-minded engineering</h2><p id="1b13" class="pw-post-body-paragraph mw mx gu my b mz pm nb nc nd pn nf ng nh po nj nk nl pp nn no np pq nr ns nt gn bk">We approached the project using product-minded engineering principles, which leverage user-focused agile techniques and strong cross-disciplinary and interdisciplinary skills to identify problems worth solving. By considering both user needs and architectural needs together, we came away with a more globally maximum solution without oversimplifying or overengineering.</p><h2 id="347c" class="qm op gu bf oq qn qo dy ou qp qq ea oy nh qr qs qt nl qu qv qw np qx qy qz ra bk">Use traffic shadowing</h2><p id="5c5c" class="pw-post-body-paragraph mw mx gu my b mz pm nb nc nd pn nf ng nh po nj nk nl pp nn no np pq nr ns nt gn bk">Traffic shadowing allows inbound requests to be sent to two or more destinations, each able to take some action. Although one system is still responsible for sending a response back to the user, other systems can also make observations about or take action on requests. Our Capstan platform made this easy to try, and it worked very well. We continued serving AIW pages to users while also sending requests to our new redirect service, so we could see how it would behave and perform.</p><h2 id="2942" class="qm op gu bf oq qn qo dy ou qp qq ea oy nh qr qs qt nl qu qv qw np qx qy qz ra bk">Measure early and often</h2><p id="18b1" class="pw-post-body-paragraph mw mx gu my b mz pm nb nc nd pn nf ng nh po nj nk nl pp nn no np pq nr ns nt gn bk">We built metrics into the redirect service so that as we started implementing and deploying redirect behaviors we could assess the total traffic volume and understand what portion of that traffic was being handled by a known redirect. That was a huge confidence builder, as we could actually demonstrate not only that the service <em class="rb">should</em> redirect the implemented URLs once turned on, but that <em class="rb">it was in fact doing so</em> — with the shadow traffic.</p><h2 id="f4d0" class="qm op gu bf oq qn qo dy ou qp qq ea oy nh qr qs qt nl qu qv qw np qx qy qz ra bk">Use feature flags</h2><p id="d3ee" class="pw-post-body-paragraph mw mx gu my b mz pm nb nc nd pn nf ng nh po nj nk nl pp nn no np pq nr ns nt gn bk">Where we couldn’t implement traffic shadowing for some supporting pages, we used <a class="af nu" rel="noopener" href="/ithaka-tech/deploying-features-under-cover-of-darkness-f112ce444bba">feature flagging</a>. With feature flags, we can ship two different behaviors and then allow staff and automated tests to toggle those behaviors on or off before exposing that new behavior to users. Even under normal circumstances we have many teams developing across many areas of the platform, and a feature flagging strategy brings <a class="af nu" rel="noopener" href="/ithaka-tech/find-bugs-before-your-users-do-closing-the-software-development-risk-exposure-gap-cace5dbd19d2">speed and safety</a> by ensuring we don’t have to perform a “big bang” release at the very end of a project.</p><h2 id="1c55" class="qm op gu bf oq qn qo dy ou qp qq ea oy nh qr qs qt nl qu qv qw np qx qy qz ra bk">Think in transition architectures</h2><p id="3c07" class="pw-post-body-paragraph mw mx gu my b mz pm nb nc nd pn nf ng nh po nj nk nl pp nn no np pq nr ns nt gn bk">In effect, all of the redirect architecture we built to support this migration was a transition architecture. But we also built some smaller transition systems to move the control of traffic from external vendors into our own platform, making it easier to flip a switch on release day instead of having to handle several moving parts in a row.</p><p id="68d7" class="pw-post-body-paragraph mw mx gu my b mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ns nt gn bk">Easing the transition architecture burden made a big difference on several of our support sites. For example, the DNS records for these sites were initially pointed directly at third-party vendors; before we could control the traffic, the traffic would have to come to us. If we waited until release day for that to happen, the DNS change could take longer than expected to propagate, or it could result in unforeseen consequences, or the logic we implemented for it could be wrong. Instead, we designed these constraints away. We worked to bring the DNS under our control earlier, and although it initially continued to point to the third-party vendors, we could now make immediate changes to its behavior.</p><h2 id="6b39" class="qm op gu bf oq qn qo dy ou qp qq ea oy nh qr qs qt nl qu qv qw np qx qy qz ra bk">Create a loosely coupled design</h2><p id="2664" class="pw-post-body-paragraph mw mx gu my b mz pm nb nc nd pn nf ng nh po nj nk nl pp nn no np pq nr ns nt gn bk">Because we had to collect and implement so much widely scattered domain knowledge into these redirects, we had to build a system that made it easy to contribute and hard to cross wires or step on other people’s toes. The system we created allowed teams to come in with nothing more than a URL pattern to match on AIW and a destination URL to send the traffic to. If necessary, they could also contact downstream services for data to help them decide where to redirect that traffic.</p><p id="ee30" class="pw-post-body-paragraph mw mx gu my b mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ns nt gn bk">Basically, we decided to meet teams where they are, with their domain knowledge, so they didn’t have to think too much about the technical aspects of how redirection works. This also allowed the team working on the redirect service to do that work without having to worry too much about the domain knowledge. This separated responsibility in a nice way and ensured better outcomes for us and our users.</p><h2 id="7298" class="qm op gu bf oq qn qo dy ou qp qq ea oy nh qr qs qt nl qu qv qw np qx qy qz ra bk">Have regular, valuable trade-off discussions</h2><p id="c3b2" class="pw-post-body-paragraph mw mx gu my b mz pm nb nc nd pn nf ng nh po nj nk nl pp nn no np pq nr ns nt gn bk">Finally, we engaged throughout this whole project in high-quality trade-off discussions. We talked about the level of effort a particular change required compared to the expected user impact. We talked about specific pages and how to handle them. And because we had such a rich cross-section of technical and domain knowledge in those discussions, we made better decisions about how to simplify things or adjust to reduce our overall risk and costs.</p><p id="e720" class="pw-post-body-paragraph mw mx gu my b mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ns nt gn bk">This is really a reprise of product-minded engineering, but this highlights one of its most impactful outcomes — giving us context about what’s possible, what gives us the best ROI, and how we might deliver better outcomes for us and users.</p></div></div></div><div class="ab cb pz qa qb qc" role="separator"><span class="qd by bm qe qf qg"></span><span class="qd by bm qe qf qg"></span><span class="qd by bm qe qf"></span></div><div class="gn go gp gq gr"><div class="ab cb"><div class="ci bh fz ga gb gc"><h1 id="6024" class="oo op gu bf oq or qh ot ou ov qi ox oy oz qj pb pc pd qk pf pg ph ql pj pk pl bk">The result</h1><p id="d41e" class="pw-post-body-paragraph mw mx gu my b mz pm nb nc nd pn nf ng nh po nj nk nl pp nn no np pq nr ns nt gn bk">We worked hard leading up to our launch date, August 1. But release day itself was one of the most boring of all time. We did about 30 minutes of real work to flip on some of those feature flags and deploy a couple of applications, all of which we were highly confident in because of our previous metrics and testing. In that short time we started redirecting over 95% of all AIW traffic to known locations on JSTOR and its supporting sites. The remaining requests were for things we had intentionally decided not to handle.</p><p id="6b99" class="pw-post-body-paragraph mw mx gu my b mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ns nt gn bk">We only shipped one bug that we know of, which we spotted quickly. Because of our system design we were able to revert immediately to the old system while we worked on a short-term fix, and within a couple of weeks put a long-term fix in place so we could sunset the old system.</p><p id="d5ef" class="pw-post-body-paragraph mw mx gu my b mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ns nt gn bk">Meanwhile, we’re listening for user experience feedback in case anyone is confused or notices broken redirects, and we’re watching how our search engine crawling and ranking responds. As Google and Bing and others recrawl our content, they’ll start sending people directly to JSTOR. <a class="af nu" href="https://groups.niso.org/higherlogic/ws/public/download/26321" rel="noopener ugc nofollow" target="_blank">NISO recommends</a> leaving these redirects in place for at least a year, so we’ve committed to that. Next year we’ll evaluate whether this architecture has run its course and act accordingly.</p><h1 id="bd50" class="oo op gu bf oq or os ot ou ov ow ox oy oz pa pb pc pd pe pf pg ph pi pj pk pl bk">The takeaways</h1><p id="d463" class="pw-post-body-paragraph mw mx gu my b mz pm nb nc nd pn nf ng nh po nj nk nl pp nn no np pq nr ns nt gn bk">While the technical tools and architecture we used were obviously important, adopting a loosely coupled, extensible design was key to our success. By bringing solutions to teams that allowed them to focus on their domain knowledge we played to everyone’s strengths. It also ensured teams weren’t colliding with each other too often. This approach helped us focus and synthesize everyone’s strengths. It may not be possible in all cases, but for this project it was one of our best and most productive decisions.</p><p id="ed0a" class="pw-post-body-paragraph mw mx gu my b mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ns nt gn bk">By thinking in transition architectures and building key visibility into the system at the outset, we were able to create significant confidence in our progress and readiness for release day, making the finale just a blip on the radar. This raised an unexpected consequence — it would have been easy to say, “Look, we did the thing,” and part ways on release day, because it was so uneventful. Choose boring releases, but be sure to keep the afterparty exciting.</p></div></div></div><div class="ab cb pz qa qb qc" role="separator"><span class="qd by bm qe qf qg"></span><span class="qd by bm qe qf qg"></span><span class="qd by bm qe qf"></span></div><div class="gn go gp gq gr"><div class="ab cb"><div class="ci bh fz ga gb gc"><p id="a266" class="pw-post-body-paragraph mw mx gu my b mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ns nt gn bk">Interested in learning more about working at ITHAKA? Contact recruiting to learn more about <a class="af nu" href="https://www.ithaka.org/careers/?gh_src=1ba9e9eb5us" rel="noopener ugc nofollow" target="_blank">ITHAKA tech jobs</a>.</p></div></div></div></div></section></div></div></article></div><div class="ab cb"><div class="ci bh fz ga gb gc"><div class="rc rd ab ja"><div class="re ab"><a class="rf ay am ao" rel="noopener follow" href="/tag/release-management?source=post_page-----d6c2ecb3f887--------------------------------"><div class="rg fj cx rh ge ri rj bf b bg z bk rk">Release Management</div></a></div><div class="re ab"><a class="rf ay am ao" rel="noopener follow" href="/tag/integration-testing?source=post_page-----d6c2ecb3f887--------------------------------"><div class="rg fj cx rh ge ri rj bf b bg z bk rk">Integration Testing</div></a></div><div class="re ab"><a class="rf ay am ao" rel="noopener follow" href="/tag/migration?source=post_page-----d6c2ecb3f887--------------------------------"><div class="rg fj cx rh ge ri rj bf b bg z bk rk">Migration</div></a></div><div class="re ab"><a class="rf ay am ao" rel="noopener follow" href="/tag/agile-development?source=post_page-----d6c2ecb3f887--------------------------------"><div class="rg fj cx rh ge ri rj bf b bg z bk rk">Agile Development</div></a></div></div></div></div><div class="l"></div><footer class="rl qa rm rn ro ab q rp ik c"><div class="l ae"><div class="ab cb"><div class="ci bh fz ga gb gc"><div class="ab cp rq"><div class="ab q kv"><div class="rr l"><span class="l rs rt ru e d"><div class="ab q kv kw"><div class="pw-multi-vote-icon fj je kx ky kz"><span><a class="af ag ah ai aj ak al am an ao ap aq ar as at" data-testid="footerClapButton" rel="noopener follow" href="/m/signin?actionUrl=https%3A%2F%2Fmedium.com%2F_%2Fvote%2Fithaka-tech%2Fd6c2ecb3f887&amp;operation=register&amp;redirect=https%3A%2F%2Fmedium.com%2Fithaka-tech%2Fchoose-boring-releases-d6c2ecb3f887&amp;user=Dane+Hillard&amp;userId=98e683e1a582&amp;source=---footer_actions--d6c2ecb3f887---------------------clap_footer-----------"><div><div class="bm" aria-hidden="false"><div class="la ao lb lc ld le am lf lg lh kz"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" aria-label="clap"><path fill-rule="evenodd" d="M11.37.828 12 3.282l.63-2.454zM13.916 3.953l1.523-2.112-1.184-.39zM8.589 1.84l1.522 2.112-.337-2.501zM18.523 18.92c-.86.86-1.75 1.246-2.62 1.33a6 6 0 0 0 .407-.372c2.388-2.389 2.86-4.951 1.399-7.623l-.912-1.603-.79-1.672c-.26-.56-.194-.98.203-1.288a.7.7 0 0 1 .546-.132c.283.046.546.231.728.5l2.363 4.157c.976 1.624 1.141 4.237-1.324 6.702m-10.999-.438L3.37 14.328a.828.828 0 0 1 .585-1.408.83.83 0 0 1 .585.242l2.158 2.157a.365.365 0 0 0 .516-.516l-2.157-2.158-1.449-1.449a.826.826 0 0 1 1.167-1.17l3.438 3.44a.363.363 0 0 0 .516 0 .364.364 0 0 0 0-.516L5.293 9.513l-.97-.97a.826.826 0 0 1 0-1.166.84.84 0 0 1 1.167 0l.97.968 3.437 3.436a.36.36 0 0 0 .517 0 .366.366 0 0 0 0-.516L6.977 7.83a.82.82 0 0 1-.241-.584.82.82 0 0 1 .824-.826c.219 0 .43.087.584.242l5.787 5.787a.366.366 0 0 0 .587-.415l-1.117-2.363c-.26-.56-.194-.98.204-1.289a.7.7 0 0 1 .546-.132c.283.046.545.232.727.501l2.193 3.86c1.302 2.38.883 4.59-1.277 6.75-1.156 1.156-2.602 1.627-4.19 1.367-1.418-.236-2.866-1.033-4.079-2.246M10.75 5.971l2.12 2.12c-.41.502-.465 1.17-.128 1.89l.22.465-3.523-3.523a.8.8 0 0 1-.097-.368c0-.22.086-.428.241-.584a.847.847 0 0 1 1.167 0m7.355 1.705c-.31-.461-.746-.758-1.23-.837a1.44 1.44 0 0 0-1.11.275c-.312.24-.505.543-.59.881a1.74 1.74 0 0 0-.906-.465 1.47 1.47 0 0 0-.82.106l-2.182-2.182a1.56 1.56 0 0 0-2.2 0 1.54 1.54 0 0 0-.396.701 1.56 1.56 0 0 0-2.21-.01 1.55 1.55 0 0 0-.416.753c-.624-.624-1.649-.624-2.237-.037a1.557 1.557 0 0 0 0 2.2c-.239.1-.501.238-.715.453a1.56 1.56 0 0 0 0 2.2l.516.515a1.556 1.556 0 0 0-.753 2.615L7.01 19c1.32 1.319 2.909 2.189 4.475 2.449q.482.08.971.08c.85 0 1.653-.198 2.393-.579.231.033.46.054.686.054 1.266 0 2.457-.52 3.505-1.567 2.763-2.763 2.552-5.734 1.439-7.586z" clip-rule="evenodd"></path></svg></div></div></div></a></span></div><div class="pw-multi-vote-count l li lj lk ll lm ln lo"><p class="bf b dv z du"><span class="lp">--</span></p></div></div></span><span class="l h g f rv rw"><div class="ab q kv kw"><div class="pw-multi-vote-icon fj je kx ky kz"><span><a class="af ag ah ai aj ak al am an ao ap aq ar as at" data-testid="footerClapButton" rel="noopener follow" href="/m/signin?actionUrl=https%3A%2F%2Fmedium.com%2F_%2Fvote%2Fithaka-tech%2Fd6c2ecb3f887&amp;operation=register&amp;redirect=https%3A%2F%2Fmedium.com%2Fithaka-tech%2Fchoose-boring-releases-d6c2ecb3f887&amp;user=Dane+Hillard&amp;userId=98e683e1a582&amp;source=---footer_actions--d6c2ecb3f887---------------------clap_footer-----------"><div><div class="bm" aria-hidden="false"><div class="la ao lb lc ld le am lf lg lh kz"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" aria-label="clap"><path fill-rule="evenodd" d="M11.37.828 12 3.282l.63-2.454zM13.916 3.953l1.523-2.112-1.184-.39zM8.589 1.84l1.522 2.112-.337-2.501zM18.523 18.92c-.86.86-1.75 1.246-2.62 1.33a6 6 0 0 0 .407-.372c2.388-2.389 2.86-4.951 1.399-7.623l-.912-1.603-.79-1.672c-.26-.56-.194-.98.203-1.288a.7.7 0 0 1 .546-.132c.283.046.546.231.728.5l2.363 4.157c.976 1.624 1.141 4.237-1.324 6.702m-10.999-.438L3.37 14.328a.828.828 0 0 1 .585-1.408.83.83 0 0 1 .585.242l2.158 2.157a.365.365 0 0 0 .516-.516l-2.157-2.158-1.449-1.449a.826.826 0 0 1 1.167-1.17l3.438 3.44a.363.363 0 0 0 .516 0 .364.364 0 0 0 0-.516L5.293 9.513l-.97-.97a.826.826 0 0 1 0-1.166.84.84 0 0 1 1.167 0l.97.968 3.437 3.436a.36.36 0 0 0 .517 0 .366.366 0 0 0 0-.516L6.977 7.83a.82.82 0 0 1-.241-.584.82.82 0 0 1 .824-.826c.219 0 .43.087.584.242l5.787 5.787a.366.366 0 0 0 .587-.415l-1.117-2.363c-.26-.56-.194-.98.204-1.289a.7.7 0 0 1 .546-.132c.283.046.545.232.727.501l2.193 3.86c1.302 2.38.883 4.59-1.277 6.75-1.156 1.156-2.602 1.627-4.19 1.367-1.418-.236-2.866-1.033-4.079-2.246M10.75 5.971l2.12 2.12c-.41.502-.465 1.17-.128 1.89l.22.465-3.523-3.523a.8.8 0 0 1-.097-.368c0-.22.086-.428.241-.584a.847.847 0 0 1 1.167 0m7.355 1.705c-.31-.461-.746-.758-1.23-.837a1.44 1.44 0 0 0-1.11.275c-.312.24-.505.543-.59.881a1.74 1.74 0 0 0-.906-.465 1.47 1.47 0 0 0-.82.106l-2.182-2.182a1.56 1.56 0 0 0-2.2 0 1.54 1.54 0 0 0-.396.701 1.56 1.56 0 0 0-2.21-.01 1.55 1.55 0 0 0-.416.753c-.624-.624-1.649-.624-2.237-.037a1.557 1.557 0 0 0 0 2.2c-.239.1-.501.238-.715.453a1.56 1.56 0 0 0 0 2.2l.516.515a1.556 1.556 0 0 0-.753 2.615L7.01 19c1.32 1.319 2.909 2.189 4.475 2.449q.482.08.971.08c.85 0 1.653-.198 2.393-.579.231.033.46.054.686.054 1.266 0 2.457-.52 3.505-1.567 2.763-2.763 2.552-5.734 1.439-7.586z" clip-rule="evenodd"></path></svg></div></div></div></a></span></div><div class="pw-multi-vote-count l li lj lk ll lm ln lo"><p class="bf b dv z du"><span class="lp">--</span></p></div></div></span></div><div class="bq ab"><div><div class="bm" aria-hidden="false"><button class="ao la lq lr ab q fk ls lt" aria-label="responses"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" class="lu"><path d="M18.006 16.803c1.533-1.456 2.234-3.325 2.234-5.321C20.24 7.357 16.709 4 12.191 4S4 7.357 4 11.482c0 4.126 3.674 7.482 8.191 7.482.817 0 1.622-.111 2.393-.327.231.2.48.391.744.559 1.06.693 2.203 1.044 3.399 1.044.224-.008.4-.112.486-.287a.49.49 0 0 0-.042-.518c-.495-.67-.845-1.364-1.04-2.057a4 4 0 0 1-.125-.598zm-3.122 1.055-.067-.223-.315.096a8 8 0 0 1-2.311.338c-4.023 0-7.292-2.955-7.292-6.587 0-3.633 3.269-6.588 7.292-6.588 4.014 0 7.112 2.958 7.112 6.593 0 1.794-.608 3.469-2.027 4.72l-.195.168v.255c0 .056 0 .151.016.295.025.231.081.478.154.733.154.558.398 1.117.722 1.659a5.3 5.3 0 0 1-2.165-.845c-.276-.176-.714-.383-.941-.59z"></path></svg></button></div></div></div></div><div class="ab q"><div class="qg l ix"><div><div class="bm" aria-hidden="false"><span><a class="af ag ah ai aj ak al am an ao ap aq ar as at" data-testid="footerBookmarkButton" rel="noopener follow" href="/m/signin?actionUrl=https%3A%2F%2Fmedium.com%2F_%2Fbookmark%2Fp%2Fd6c2ecb3f887&amp;operation=register&amp;redirect=https%3A%2F%2Fmedium.com%2Fithaka-tech%2Fchoose-boring-releases-d6c2ecb3f887&amp;source=---footer_actions--d6c2ecb3f887---------------------bookmark_footer-----------"><svg xmlns="http://www.w3.org/2000/svg" width="25" height="25" fill="none" viewBox="0 0 25 25" class="du lw" aria-label="Add to list bookmark button"><path fill="currentColor" d="M18 2.5a.5.5 0 0 1 1 0V5h2.5a.5.5 0 0 1 0 1H19v2.5a.5.5 0 1 1-1 0V6h-2.5a.5.5 0 0 1 0-1H18zM7 7a1 1 0 0 1 1-1h3.5a.5.5 0 0 0 0-1H8a2 2 0 0 0-2 2v14a.5.5 0 0 0 .805.396L12.5 17l5.695 4.396A.5.5 0 0 0 19 21v-8.5a.5.5 0 0 0-1 0v7.485l-5.195-4.012a.5.5 0 0 0-.61 0L7 19.985z"></path></svg></a></span></div></div></div><div class="qg l ix"><div class="bm" aria-hidden="false" aria-describedby="postFooterSocialMenu" aria-labelledby="postFooterSocialMenu"><div><div class="bm" aria-hidden="false"><button aria-controls="postFooterSocialMenu" aria-expanded="false" aria-label="Share Post" data-testid="footerSocialShareButton" class="af fk ah ai aj ak al me an ao ap ex mf mg lt mh"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="none" viewBox="0 0 24 24"><path fill="currentColor" fill-rule="evenodd" d="M15.218 4.931a.4.4 0 0 1-.118.132l.012.006a.45.45 0 0 1-.292.074.5.5 0 0 1-.3-.13l-2.02-2.02v7.07c0 .28-.23.5-.5.5s-.5-.22-.5-.5v-7.04l-2 2a.45.45 0 0 1-.57.04h-.02a.4.4 0 0 1-.16-.3.4.4 0 0 1 .1-.32l2.8-2.8a.5.5 0 0 1 .7 0l2.8 2.79a.42.42 0 0 1 .068.498m-.106.138.008.004v-.01zM16 7.063h1.5a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2h-11c-1.1 0-2-.9-2-2v-10a2 2 0 0 1 2-2H8a.5.5 0 0 1 .35.15.5.5 0 0 1 .15.35.5.5 0 0 1-.15.35.5.5 0 0 1-.35.15H6.4c-.5 0-.9.4-.9.9v10.2a.9.9 0 0 0 .9.9h11.2c.5 0 .9-.4.9-.9v-10.2c0-.5-.4-.9-.9-.9H16a.5.5 0 0 1 0-1" clip-rule="evenodd"></path></svg></button></div></div></div></div></div></div></div></div></div></footer><div class="rx ry rz sa sb l"><div class="ab cb"><div class="ci bh fz ga gb gc"><div class="sc bh r sd"></div><div class="se l"><div class="ab sf sg sh iz iy"><div class="si sj sk sl sm sn so sp sq sr ab cp"><div class="h k"><a href="https://medium.com/ithaka-tech?source=post_page---post_publication_info--d6c2ecb3f887--------------------------------" rel="noopener follow"><div class="fj ab"><img alt="ITHAKA Tech" class="ss ib ic cx" src="https://miro.medium.com/v2/resize:fill:96:96/1*JUL5st-N0tn2jw8as1MBcw.png" width="48" height="48" loading="lazy"/><div class="ss l ic ib fs n fr st"></div></div></a></div><div class="j i d"><a href="https://medium.com/ithaka-tech?source=post_page---post_publication_info--d6c2ecb3f887--------------------------------" rel="noopener follow"><div class="fj ab"><img alt="ITHAKA Tech" class="ss sv su cx" src="https://miro.medium.com/v2/resize:fill:128:128/1*JUL5st-N0tn2jw8as1MBcw.png" width="64" height="64" loading="lazy"/><div class="ss l su sv fs n fr st"></div></div></a></div><div class="j i d sw ix"><div class="ab"></div></div></div><div class="ab co sx"><div class="sy sz ta tb tc l"><a class="af ag ah aj ak al am an ao ap aq ar as at ab q" href="https://medium.com/ithaka-tech?source=post_page---post_publication_info--d6c2ecb3f887--------------------------------" rel="noopener follow"><h2 class="pw-author-name bf te tf tg th ti tj tk nh qs qt nl qv qw np qy qz bk"><span class="gn td">Published in <!-- -->ITHAKA Tech</span></h2></a><div class="re ab ia"><div class="l ix"><span class="pw-follower-count bf b bg z du"><a class="af ag ah ai aj ak al am an ao ap aq ar iq" rel="noopener follow" href="/ithaka-tech/followers?source=post_page---post_publication_info--d6c2ecb3f887--------------------------------">307 Followers</a></span></div><div class="bf b bg z du ab jd"><span class="ir l" aria-hidden="true"><span class="bf b bg z du">·</span></span><a class="af ag ah ai aj ak al am an ao ap aq ar iq" rel="noopener follow" href="/ithaka-tech/choose-boring-releases-d6c2ecb3f887?source=post_page---post_publication_info--d6c2ecb3f887--------------------------------">Last published <span>Sep 26, 2024</span></a></div></div><div class="tl l"><p class="bf b bg z bk"><span class="gn">How we create services and tools to inspire and support learning today and for the future</span></p></div></div></div><div class="h k"><div class="ab"></div></div></div></div><div class="ab sf sg sh iz iy"><div class="si sj sk sl sm sn so sp sq sr ab cp"><div class="h k"><a tabindex="0" rel="noopener follow" href="/@danehillard?source=post_page---post_author_info--d6c2ecb3f887--------------------------------"><div class="l fj"><img alt="Dane Hillard" class="l fd by ic ib cx" src="https://miro.medium.com/v2/resize:fill:96:96/1*z4bkwyZ2vBXYDunTWm08YA.jpeg" width="48" height="48" loading="lazy"/><div class="fr by l ic ib fs n ay st"></div></div></a></div><div class="j i d"><a tabindex="0" rel="noopener follow" href="/@danehillard?source=post_page---post_author_info--d6c2ecb3f887--------------------------------"><div class="l fj"><img alt="Dane Hillard" class="l fd by su sv cx" src="https://miro.medium.com/v2/resize:fill:128:128/1*z4bkwyZ2vBXYDunTWm08YA.jpeg" width="64" height="64" loading="lazy"/><div class="fr by l su sv fs n ay st"></div></div></a></div><div class="j i d sw ix"><div class="ab"><span><button class="bf b bg z tm rg tn to tp tq tr ev ew ts tt tu fa fb fc fd bm fe ff">Follow</button></span></div></div></div><div class="ab co sx"><div class="sy sz ta tb tc l"><a class="af ag ah aj ak al am an ao ap aq ar as at ab q" rel="noopener follow" href="/@danehillard?source=post_page---post_author_info--d6c2ecb3f887--------------------------------"><h2 class="pw-author-name bf te tf tg th ti tj tk nh qs qt nl qv qw np qy qz bk"><span class="gn td">Written by <!-- -->Dane Hillard</span></h2></a><div class="re ab ia"><div class="l ix"><span class="pw-follower-count bf b bg z du"><a class="af ag ah ai aj ak al am an ao ap aq ar iq" rel="noopener follow" href="/@danehillard/followers?source=post_page---post_author_info--d6c2ecb3f887--------------------------------">405 Followers</a></span></div><div class="bf b bg z du ab jd"><span class="ir l" aria-hidden="true"><span class="bf b bg z du">·</span></span><a class="af ag ah ai aj ak al am an ao ap aq ar iq" rel="noopener follow" href="/@danehillard/following?source=post_page---post_author_info--d6c2ecb3f887--------------------------------">161 Following</a></div></div><div class="tl l"><p class="bf b bg z bk"><span class="gn">Publishing Python Packages 🐍📦 ⬆️ Practices of the Python Pro 🐍📘 Technical architect at ITHAKA</span></p></div></div></div><div class="h k"><div class="ab"><span><button class="bf b bg z tm rg tn to tp tq tr ev ew ts tt tu fa fb fc fd bm fe ff">Follow</button></span></div></div></div></div></div></div><div class="tv l"><div class="sc bh r tw tx ty tz ua"></div><div class="ab cb"><div class="ci bh fz ga gb gc"><div class="ab q cp"><h2 class="bf te or ot ou ov ox oy oz pb pc pd pf pg ph pj pk bk">No responses yet</h2><div class="ab ub"><div><div class="bm" aria-hidden="false"><a class="uc ud" href="https://policy.medium.com/medium-rules-30e5502c4eb4?source=post_page---post_responses--d6c2ecb3f887--------------------------------" rel="noopener follow" target="_blank"><svg xmlns="http://www.w3.org/2000/svg" width="25" height="25" viewBox="0 0 25 25"><path fill-rule="evenodd" d="M11.987 5.036a.754.754 0 0 1 .914-.01c.972.721 1.767 1.218 2.6 1.543.828.322 1.719.485 2.887.505a.755.755 0 0 1 .741.757c-.018 3.623-.43 6.256-1.449 8.21-1.034 1.984-2.662 3.209-4.966 4.083a.75.75 0 0 1-.537-.003c-2.243-.874-3.858-2.095-4.897-4.074-1.024-1.951-1.457-4.583-1.476-8.216a.755.755 0 0 1 .741-.757c1.195-.02 2.1-.182 2.923-.503.827-.322 1.6-.815 2.519-1.535m.468.903c-.897.69-1.717 1.21-2.623 1.564-.898.35-1.856.527-3.026.565.037 3.45.469 5.817 1.36 7.515.884 1.684 2.25 2.762 4.284 3.571 2.092-.81 3.465-1.89 4.344-3.575.886-1.698 1.299-4.065 1.334-7.512-1.149-.039-2.091-.217-2.99-.567-.906-.353-1.745-.873-2.683-1.561m-.009 9.155a2.672 2.672 0 1 0 0-5.344 2.672 2.672 0 0 0 0 5.344m0 1a3.672 3.672 0 1 0 0-7.344 3.672 3.672 0 0 0 0 7.344m-1.813-3.777.525-.526.916.917 1.623-1.625.526.526-2.149 2.152z" clip-rule="evenodd"></path></svg></a></div></div></div></div></div></div></div><div class="ue uf ug uh ui l bx"><div class="h k j"><div class="sc bh uj uk"></div><div class="ab cb"><div class="ci bh fz ga gb gc"><div class="ul ab kv ja"><div class="um un l"><a class="af ag ah ai aj ak al am an ao ap aq ar as at" href="https://help.medium.com/hc/en-us?source=post_page-----d6c2ecb3f887--------------------------------" rel="noopener follow"><p class="bf b dv z du">Help</p></a></div><div class="um un l"><a class="af ag ah ai aj ak al am an ao ap aq ar as at" href="https://medium.statuspage.io/?source=post_page-----d6c2ecb3f887--------------------------------" rel="noopener follow"><p class="bf b dv z du">Status</p></a></div><div class="um un l"><a class="af ag ah ai aj ak al am an ao ap aq ar as at" rel="noopener follow" href="/about?autoplay=1&amp;source=post_page-----d6c2ecb3f887--------------------------------"><p class="bf b dv z du">About</p></a></div><div class="um un l"><a class="af ag ah ai aj ak al am an ao ap aq ar as at" rel="noopener follow" href="/jobs-at-medium/work-at-medium-959d1a85284e?source=post_page-----d6c2ecb3f887--------------------------------"><p class="bf b dv z du">Careers</p></a></div><div class="um un l"><a class="af ag ah ai aj ak al am an ao ap aq ar as at" href="pressinquiries@medium.com?source=post_page-----d6c2ecb3f887--------------------------------" rel="noopener follow"><p class="bf b dv z du">Press</p></a></div><div class="um un l"><a class="af ag ah ai aj ak al am an ao ap aq ar as at" href="https://blog.medium.com/?source=post_page-----d6c2ecb3f887--------------------------------" rel="noopener follow"><p class="bf b dv z du">Blog</p></a></div><div class="um un l"><a class="af ag ah ai aj ak al am an ao ap aq ar as at" href="https://policy.medium.com/medium-privacy-policy-f03bf92035c9?source=post_page-----d6c2ecb3f887--------------------------------" rel="noopener follow"><p class="bf b dv z du">Privacy</p></a></div><div class="um un l"><a class="af ag ah ai aj ak al am an ao ap aq ar as at" href="https://policy.medium.com/medium-terms-of-service-9db0094a1e0f?source=post_page-----d6c2ecb3f887--------------------------------" rel="noopener follow"><p class="bf b dv z du">Terms</p></a></div><div class="um un l"><a class="af ag ah ai aj ak al am an ao ap aq ar as at" href="https://speechify.com/medium?source=post_page-----d6c2ecb3f887--------------------------------" rel="noopener follow"><p class="bf b dv z du">Text to speech</p></a></div><div class="um l"><a class="af ag ah ai aj ak al am an ao ap aq ar as at" rel="noopener follow" href="/business?source=post_page-----d6c2ecb3f887--------------------------------"><p class="bf b dv z du">Teams</p></a></div></div></div></div></div></div></div></div></div></div><script>window.__BUILD_ID__="main-20241125-190609-795bd7e319"</script><script>window.__GRAPHQL_URI__ = "https://medium.com/_/graphql"</script><script>window.__PRELOADED_STATE__ = {"algolia":{"queries":{}},"cache":{"experimentGroupSet":true,"reason":"","group":"enabled","tags":["group-edgeCachePosts","post-d6c2ecb3f887","user-98e683e1a582","collection-ccdac8851d0b"],"serverVariantState":"44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a","middlewareEnabled":true,"cacheStatus":"DYNAMIC","shouldUseCache":true,"vary":[],"lohpSummerUpsellEnabled":false,"publicationHierarchyEnabledWeb":false,"postBottomResponsesEnabled":false},"client":{"hydrated":false,"isUs":false,"isNativeMedium":false,"isSafariMobile":false,"isSafari":false,"isFirefox":false,"routingEntity":{"type":"DEFAULT","explicit":false},"viewerIsBot":false},"debug":{"requestId":"4e05a702-1497-4ba8-a906-3b450657acc1","hybridDevServices":[],"originalSpanCarrier":{"traceparent":"00-0216dc6451a0604cb1786d0ffb238f49-886046ade3467578-01"}},"multiVote":{"clapsPerPost":{}},"navigation":{"branch":{"show":null,"hasRendered":null,"blockedByCTA":false},"hideGoogleOneTap":false,"hasRenderedAlternateUserBanner":null,"currentLocation":"https:\u002F\u002Fmedium.com\u002Fithaka-tech\u002Fchoose-boring-releases-d6c2ecb3f887","host":"medium.com","hostname":"medium.com","referrer":"","hasSetReferrer":false,"susiModal":{"step":null,"operation":"register"},"postRead":false,"partnerProgram":{"selectedCountryCode":null},"queryString":"","currentHash":""},"config":{"nodeEnv":"production","version":"main-20241125-190609-795bd7e319","target":"production","productName":"Medium","publicUrl":"https:\u002F\u002Fcdn-client.medium.com\u002Flite","authDomain":"medium.com","authGoogleClientId":"216296035834-k1k6qe060s2tp2a2jam4ljdcms00sttg.apps.googleusercontent.com","favicon":"production","glyphUrl":"https:\u002F\u002Fglyph.medium.com","branchKey":"key_live_ofxXr2qTrrU9NqURK8ZwEhknBxiI6KBm","algolia":{"appId":"MQ57UUUQZ2","apiKeySearch":"394474ced050e3911ae2249ecc774921","indexPrefix":"medium_","host":"-dsn.algolia.net"},"recaptchaKey":"6Lfc37IUAAAAAKGGtC6rLS13R1Hrw_BqADfS1LRk","recaptcha3Key":"6Lf8R9wUAAAAABMI_85Wb8melS7Zj6ziuf99Yot5","recaptchaEnterpriseKeyId":"6Le-uGgpAAAAAPprRaokM8AKthQ9KNGdoxaGUvVp","datadog":{"applicationId":"6702d87d-a7e0-42fe-bbcb-95b469547ea0","clientToken":"pub853ea8d17ad6821d9f8f11861d23dfed","rumToken":"pubf9cc52896502b9413b68ba36fc0c7162","context":{"deployment":{"target":"production","tag":"main-20241125-190609-795bd7e319","commit":"795bd7e3199e13224bc0a42c1be5cd7062eab1ad"}},"datacenter":"us"},"googleAnalyticsCode":"G-7JY7T788PK","googlePay":{"apiVersion":"2","apiVersionMinor":"0","merchantId":"BCR2DN6TV7EMTGBM","merchantName":"Medium","instanceMerchantId":"13685562959212738550"},"applePay":{"version":3},"signInWallCustomDomainCollectionIds":["3a8144eabfe3","336d898217ee","61061eb0c96b","138adf9c44c","819cc2aaeee0"],"mediumMastodonDomainName":"me.dm","mediumOwnedAndOperatedCollectionIds":["8a9336e5bb4","b7e45b22fec3","193b68bd4fba","8d6b8a439e32","54c98c43354d","3f6ecf56618","d944778ce714","92d2092dc598","ae2a65f35510","1285ba81cada","544c7006046e","fc8964313712","40187e704f1c","88d9857e584e","7b6769f2748b","bcc38c8f6edf","cef6983b292","cb8577c9149e","444d13b52878","713d7dbc99b0","ef8e90590e66","191186aaafa0","55760f21cdc5","9dc80918cc93","bdc4052bbdba","8ccfed20cbb2"],"tierOneDomains":["medium.com","thebolditalic.com","arcdigital.media","towardsdatascience.com","uxdesign.cc","codeburst.io","psiloveyou.xyz","writingcooperative.com","entrepreneurshandbook.co","prototypr.io","betterhumans.coach.me","theascent.pub"],"topicsToFollow":["d61cf867d93f","8a146bc21b28","1eca0103fff3","4d562ee63426","aef1078a3ef5","e15e46793f8d","6158eb913466","55f1c20aba7a","3d18b94f6858","4861fee224fd","63c6f1f93ee","1d98b3a9a871","decb52b64abf","ae5d4995e225","830cded25262"],"topicToTagMappings":{"accessibility":"accessibility","addiction":"addiction","android-development":"android-development","art":"art","artificial-intelligence":"artificial-intelligence","astrology":"astrology","basic-income":"basic-income","beauty":"beauty","biotech":"biotech","blockchain":"blockchain","books":"books","business":"business","cannabis":"cannabis","cities":"cities","climate-change":"climate-change","comics":"comics","coronavirus":"coronavirus","creativity":"creativity","cryptocurrency":"cryptocurrency","culture":"culture","cybersecurity":"cybersecurity","data-science":"data-science","design":"design","digital-life":"digital-life","disability":"disability","economy":"economy","education":"education","equality":"equality","family":"family","feminism":"feminism","fiction":"fiction","film":"film","fitness":"fitness","food":"food","freelancing":"freelancing","future":"future","gadgets":"gadgets","gaming":"gaming","gun-control":"gun-control","health":"health","history":"history","humor":"humor","immigration":"immigration","ios-development":"ios-development","javascript":"javascript","justice":"justice","language":"language","leadership":"leadership","lgbtqia":"lgbtqia","lifestyle":"lifestyle","machine-learning":"machine-learning","makers":"makers","marketing":"marketing","math":"math","media":"media","mental-health":"mental-health","mindfulness":"mindfulness","money":"money","music":"music","neuroscience":"neuroscience","nonfiction":"nonfiction","outdoors":"outdoors","parenting":"parenting","pets":"pets","philosophy":"philosophy","photography":"photography","podcasts":"podcast","poetry":"poetry","politics":"politics","privacy":"privacy","product-management":"product-management","productivity":"productivity","programming":"programming","psychedelics":"psychedelics","psychology":"psychology","race":"race","relationships":"relationships","religion":"religion","remote-work":"remote-work","san-francisco":"san-francisco","science":"science","self":"self","self-driving-cars":"self-driving-cars","sexuality":"sexuality","social-media":"social-media","society":"society","software-engineering":"software-engineering","space":"space","spirituality":"spirituality","sports":"sports","startups":"startup","style":"style","technology":"technology","transportation":"transportation","travel":"travel","true-crime":"true-crime","tv":"tv","ux":"ux","venture-capital":"venture-capital","visual-design":"visual-design","work":"work","world":"world","writing":"writing"},"defaultImages":{"avatar":{"imageId":"1*dmbNkD5D-u45r44go_cf0g.png","height":150,"width":150},"orgLogo":{"imageId":"7*V1_7XP4snlmqrc_0Njontw.png","height":110,"width":500},"postLogo":{"imageId":"bd978bb536350a710e8efb012513429cabdc4c28700604261aeda246d0f980b7","height":810,"width":1440},"postPreviewImage":{"imageId":"1*hn4v1tCaJy7cWMyb0bpNpQ.png","height":386,"width":579}},"collectionStructuredData":{"8d6b8a439e32":{"name":"Elemental","data":{"@type":"NewsMediaOrganization","ethicsPolicy":"https:\u002F\u002Fhelp.medium.com\u002Fhc\u002Fen-us\u002Farticles\u002F360043290473","logo":{"@type":"ImageObject","url":"https:\u002F\u002Fcdn-images-1.medium.com\u002Fmax\u002F980\u002F1*9ygdqoKprhwuTVKUM0DLPA@2x.png","width":980,"height":159}}},"3f6ecf56618":{"name":"Forge","data":{"@type":"NewsMediaOrganization","ethicsPolicy":"https:\u002F\u002Fhelp.medium.com\u002Fhc\u002Fen-us\u002Farticles\u002F360043290473","logo":{"@type":"ImageObject","url":"https:\u002F\u002Fcdn-images-1.medium.com\u002Fmax\u002F596\u002F1*uULpIlImcO5TDuBZ6lm7Lg@2x.png","width":596,"height":183}}},"ae2a65f35510":{"name":"GEN","data":{"@type":"NewsMediaOrganization","ethicsPolicy":"https:\u002F\u002Fhelp.medium.com\u002Fhc\u002Fen-us\u002Farticles\u002F360043290473","logo":{"@type":"ImageObject","url":"https:\u002F\u002Fmiro.medium.com\u002Fmax\u002F264\u002F1*RdVZMdvfV3YiZTw6mX7yWA.png","width":264,"height":140}}},"88d9857e584e":{"name":"LEVEL","data":{"@type":"NewsMediaOrganization","ethicsPolicy":"https:\u002F\u002Fhelp.medium.com\u002Fhc\u002Fen-us\u002Farticles\u002F360043290473","logo":{"@type":"ImageObject","url":"https:\u002F\u002Fmiro.medium.com\u002Fmax\u002F540\u002F1*JqYMhNX6KNNb2UlqGqO2WQ.png","width":540,"height":108}}},"7b6769f2748b":{"name":"Marker","data":{"@type":"NewsMediaOrganization","ethicsPolicy":"https:\u002F\u002Fhelp.medium.com\u002Fhc\u002Fen-us\u002Farticles\u002F360043290473","logo":{"@type":"ImageObject","url":"https:\u002F\u002Fcdn-images-1.medium.com\u002Fmax\u002F383\u002F1*haCUs0wF6TgOOvfoY-jEoQ@2x.png","width":383,"height":92}}},"444d13b52878":{"name":"OneZero","data":{"@type":"NewsMediaOrganization","ethicsPolicy":"https:\u002F\u002Fhelp.medium.com\u002Fhc\u002Fen-us\u002Farticles\u002F360043290473","logo":{"@type":"ImageObject","url":"https:\u002F\u002Fmiro.medium.com\u002Fmax\u002F540\u002F1*cw32fIqCbRWzwJaoQw6BUg.png","width":540,"height":123}}},"8ccfed20cbb2":{"name":"Zora","data":{"@type":"NewsMediaOrganization","ethicsPolicy":"https:\u002F\u002Fhelp.medium.com\u002Fhc\u002Fen-us\u002Farticles\u002F360043290473","logo":{"@type":"ImageObject","url":"https:\u002F\u002Fmiro.medium.com\u002Fmax\u002F540\u002F1*tZUQqRcCCZDXjjiZ4bDvgQ.png","width":540,"height":106}}}},"embeddedPostIds":{"coronavirus":"cd3010f9d81f"},"sharedCdcMessaging":{"COVID_APPLICABLE_TAG_SLUGS":[],"COVID_APPLICABLE_TOPIC_NAMES":[],"COVID_APPLICABLE_TOPIC_NAMES_FOR_TOPIC_PAGE":[],"COVID_MESSAGES":{"tierA":{"text":"For more information on the novel coronavirus and Covid-19, visit cdc.gov.","markups":[{"start":66,"end":73,"href":"https:\u002F\u002Fwww.cdc.gov\u002Fcoronavirus\u002F2019-nCoV"}]},"tierB":{"text":"Anyone can publish on Medium per our Policies, but we don’t fact-check every story. For more info about the coronavirus, see cdc.gov.","markups":[{"start":37,"end":45,"href":"https:\u002F\u002Fhelp.medium.com\u002Fhc\u002Fen-us\u002Fcategories\u002F201931128-Policies-Safety"},{"start":125,"end":132,"href":"https:\u002F\u002Fwww.cdc.gov\u002Fcoronavirus\u002F2019-nCoV"}]},"paywall":{"text":"This article has been made free for everyone, thanks to Medium Members. For more information on the novel coronavirus and Covid-19, visit cdc.gov.","markups":[{"start":56,"end":70,"href":"https:\u002F\u002Fmedium.com\u002Fmembership"},{"start":138,"end":145,"href":"https:\u002F\u002Fwww.cdc.gov\u002Fcoronavirus\u002F2019-nCoV"}]},"unbound":{"text":"This article is free for everyone, thanks to Medium Members. For more information on the novel coronavirus and Covid-19, visit cdc.gov.","markups":[{"start":45,"end":59,"href":"https:\u002F\u002Fmedium.com\u002Fmembership"},{"start":127,"end":134,"href":"https:\u002F\u002Fwww.cdc.gov\u002Fcoronavirus\u002F2019-nCoV"}]}},"COVID_BANNER_POST_ID_OVERRIDE_WHITELIST":["3b31a67bff4a"]},"sharedVoteMessaging":{"TAGS":["politics","election-2020","government","us-politics","election","2020-presidential-race","trump","donald-trump","democrats","republicans","congress","republican-party","democratic-party","biden","joe-biden","maga"],"TOPICS":["politics","election"],"MESSAGE":{"text":"Find out more about the U.S. election results here.","markups":[{"start":46,"end":50,"href":"https:\u002F\u002Fcookpolitical.com\u002F2020-national-popular-vote-tracker"}]},"EXCLUDE_POSTS":["397ef29e3ca5"]},"embedPostRules":[],"recircOptions":{"v1":{"limit":3},"v2":{"limit":8}},"braintreeClientKey":"production_zjkj96jm_m56f8fqpf7ngnrd4","braintree":{"enabled":true,"merchantId":"m56f8fqpf7ngnrd4","merchantAccountId":{"usd":"AMediumCorporation_instant","eur":"amediumcorporation_EUR","cad":"amediumcorporation_CAD"},"publicKey":"ds2nn34bg2z7j5gd","braintreeEnvironment":"production","dashboardUrl":"https:\u002F\u002Fwww.braintreegateway.com\u002Fmerchants","gracePeriodDurationInDays":14,"mediumMembershipPlanId":{"monthly":"ce105f8c57a3","monthlyV2":"e8a5e126-792b-4ee6-8fba-d574c1b02fc5","monthlyWithTrial":"d5ee3dbe3db8","monthlyPremium":"fa741a9b47a2","yearly":"a40ad4a43185","yearlyV2":"3815d7d6-b8ca-4224-9b8c-182f9047866e","yearlyStaff":"d74fb811198a","yearlyWithTrial":"b3bc7350e5c7","yearlyPremium":"e21bd2c12166","monthlyOneYearFree":"e6c0637a-2bad-4171-ab4f-3c268633d83c","monthly25PercentOffFirstYear":"235ecc62-0cdb-49ae-9378-726cd21c504b","monthly20PercentOffFirstYear":"ba518864-9c13-4a99-91ca-411bf0cac756","monthly15PercentOffFirstYear":"594c029b-9f89-43d5-88f8-8173af4e070e","monthly10PercentOffFirstYear":"c6c7bc9a-40f2-4b51-8126-e28511d5bdb0","monthlyForStudents":"629ebe51-da7d-41fd-8293-34cd2f2030a8","yearlyOneYearFree":"78ba7be9-0d9f-4ece-aa3e-b54b826f2bf1","yearly25PercentOffFirstYear":"2dbb010d-bb8f-4eeb-ad5c-a08509f42d34","yearly20PercentOffFirstYear":"47565488-435b-47f8-bf93-40d5fbe0ebc8","yearly15PercentOffFirstYear":"8259809b-0881-47d9-acf7-6c001c7f720f","yearly10PercentOffFirstYear":"9dd694fb-96e1-472c-8d9e-3c868d5c1506","yearlyForStudents":"e29345ef-ab1c-4234-95c5-70e50fe6bc23","monthlyCad":"p52orjkaceei","yearlyCad":"h4q9g2up9ktt"},"braintreeDiscountId":{"oneMonthFree":"MONTHS_FREE_01","threeMonthsFree":"MONTHS_FREE_03","sixMonthsFree":"MONTHS_FREE_06","fiftyPercentOffOneYear":"FIFTY_PERCENT_OFF_ONE_YEAR"},"3DSecureVersion":"2","defaultCurrency":"usd","providerPlanIdCurrency":{"4ycw":"usd","rz3b":"usd","3kqm":"usd","jzw6":"usd","c2q2":"usd","nnsw":"usd","q8qw":"usd","d9y6":"usd","fx7w":"cad","nwf2":"cad"}},"paypalClientId":"AXj1G4fotC2GE8KzWX9mSxCH1wmPE3nJglf4Z2ig_amnhvlMVX87otaq58niAg9iuLktVNF_1WCMnN7v","paypal":{"host":"https:\u002F\u002Fapi.paypal.com:443","clientMode":"production","serverMode":"live","webhookId":"4G466076A0294510S","monthlyPlan":{"planId":"P-9WR0658853113943TMU5FDQA","name":"Medium Membership (Monthly) with setup fee","description":"Unlimited access to the best and brightest stories on Medium. Membership billed monthly."},"yearlyPlan":{"planId":"P-7N8963881P8875835MU5JOPQ","name":"Medium Membership (Annual) with setup fee","description":"Unlimited access to the best and brightest stories on Medium. Membership billed annually."},"oneYearGift":{"name":"Medium Membership (1 Year, Digital Gift Code)","description":"Unlimited access to the best and brightest stories on Medium. Gift codes can be redeemed at medium.com\u002Fredeem.","price":"50.00","currency":"USD","sku":"membership-gift-1-yr"},"oldMonthlyPlan":{"planId":"P-96U02458LM656772MJZUVH2Y","name":"Medium Membership (Monthly)","description":"Unlimited access to the best and brightest stories on Medium. Membership billed monthly."},"oldYearlyPlan":{"planId":"P-59P80963JF186412JJZU3SMI","name":"Medium Membership (Annual)","description":"Unlimited access to the best and brightest stories on Medium. Membership billed annually."},"monthlyPlanWithTrial":{"planId":"P-66C21969LR178604GJPVKUKY","name":"Medium Membership (Monthly) with setup fee","description":"Unlimited access to the best and brightest stories on Medium. Membership billed monthly."},"yearlyPlanWithTrial":{"planId":"P-6XW32684EX226940VKCT2MFA","name":"Medium Membership (Annual) with setup fee","description":"Unlimited access to the best and brightest stories on Medium. Membership billed annually."},"oldMonthlyPlanNoSetupFee":{"planId":"P-4N046520HR188054PCJC7LJI","name":"Medium Membership (Monthly)","description":"Unlimited access to the best and brightest stories on Medium. Membership billed monthly."},"oldYearlyPlanNoSetupFee":{"planId":"P-7A4913502Y5181304CJEJMXQ","name":"Medium Membership (Annual)","description":"Unlimited access to the best and brightest stories on Medium. Membership billed annually."},"sdkUrl":"https:\u002F\u002Fwww.paypal.com\u002Fsdk\u002Fjs"},"stripePublishableKey":"pk_live_7FReX44VnNIInZwrIIx6ghjl","log":{"json":true,"level":"info"},"imageUploadMaxSizeMb":25,"staffPicks":{"title":"Staff Picks","catalogId":"c7bc6e1ee00f"}},"session":{"xsrf":""}}</script><script>window.__APOLLO_STATE__ = {"ROOT_QUERY":{"__typename":"Query","viewer":null,"collectionByDomainOrSlug({\"domainOrSlug\":\"ithaka-tech\"})":{"__ref":"Collection:ccdac8851d0b"},"postResult({\"id\":\"d6c2ecb3f887\"})":{"__ref":"Post:d6c2ecb3f887"}},"ImageMetadata:":{"__typename":"ImageMetadata","id":""},"Collection:ccdac8851d0b":{"__typename":"Collection","id":"ccdac8851d0b","favicon":{"__ref":"ImageMetadata:"},"customStyleSheet":null,"colorPalette":{"__typename":"ColorPalette","highlightSpectrum":{"__typename":"ColorSpectrum","backgroundColor":"#FFFFFFFF","colorPoints":[{"__typename":"ColorPoint","color":"#FFF4F2F2","point":0},{"__typename":"ColorPoint","color":"#FFF2F0F0","point":0.1},{"__typename":"ColorPoint","color":"#FFF0EEEE","point":0.2},{"__typename":"ColorPoint","color":"#FFEEECEC","point":0.3},{"__typename":"ColorPoint","color":"#FFECEBEA","point":0.4},{"__typename":"ColorPoint","color":"#FFEAE9E8","point":0.5},{"__typename":"ColorPoint","color":"#FFE8E7E7","point":0.6},{"__typename":"ColorPoint","color":"#FFE6E5E5","point":0.7},{"__typename":"ColorPoint","color":"#FFE4E3E3","point":0.8},{"__typename":"ColorPoint","color":"#FFE2E1E1","point":0.9},{"__typename":"ColorPoint","color":"#FFE0DFDF","point":1}]},"defaultBackgroundSpectrum":{"__typename":"ColorSpectrum","backgroundColor":"#FFFFFFFF","colorPoints":[{"__typename":"ColorPoint","color":"#FF848585","point":0},{"__typename":"ColorPoint","color":"#FF7B7B7B","point":0.1},{"__typename":"ColorPoint","color":"#FF717272","point":0.2},{"__typename":"ColorPoint","color":"#FF686868","point":0.3},{"__typename":"ColorPoint","color":"#FF5E5E5E","point":0.4},{"__typename":"ColorPoint","color":"#FF545454","point":0.5},{"__typename":"ColorPoint","color":"#FF494A4A","point":0.6},{"__typename":"ColorPoint","color":"#FF3F3F3F","point":0.7},{"__typename":"ColorPoint","color":"#FF333333","point":0.8},{"__typename":"ColorPoint","color":"#FF272727","point":0.9},{"__typename":"ColorPoint","color":"#FF1A1A1A","point":1}]},"tintBackgroundSpectrum":{"__typename":"ColorSpectrum","backgroundColor":"#FFFFFFFF","colorPoints":[{"__typename":"ColorPoint","color":"#FFFFFFFF","point":0},{"__typename":"ColorPoint","color":"#FFECECEC","point":0.1},{"__typename":"ColorPoint","color":"#FFD9D9D9","point":0.2},{"__typename":"ColorPoint","color":"#FFC5C6C6","point":0.3},{"__typename":"ColorPoint","color":"#FFB1B1B1","point":0.4},{"__typename":"ColorPoint","color":"#FF9C9D9D","point":0.5},{"__typename":"ColorPoint","color":"#FF868787","point":0.6},{"__typename":"ColorPoint","color":"#FF6F7071","point":0.7},{"__typename":"ColorPoint","color":"#FF575959","point":0.8},{"__typename":"ColorPoint","color":"#FF3D3F3F","point":0.9},{"__typename":"ColorPoint","color":"#FF202122","point":1}]}},"domain":null,"slug":"ithaka-tech","googleAnalyticsId":null,"editors":[{"__typename":"CollectionMastheadUserItem","user":{"__ref":"User:c91398edcd"}},{"__typename":"CollectionMastheadUserItem","user":{"__ref":"User:98e683e1a582"}},{"__typename":"CollectionMastheadUserItem","user":{"__ref":"User:189f2f4b2a6b"}},{"__typename":"CollectionMastheadUserItem","user":{"__ref":"User:78eea9e1371c"}},{"__typename":"CollectionMastheadUserItem","user":{"__ref":"User:46a217aa0bb9"}},{"__typename":"CollectionMastheadUserItem","user":{"__ref":"User:37806f179c9d"}},{"__typename":"CollectionMastheadUserItem","user":{"__ref":"User:bfc24ced380c"}}],"name":"ITHAKA Tech","avatar":{"__ref":"ImageMetadata:1*JUL5st-N0tn2jw8as1MBcw.png"},"description":"How we create services and tools to inspire and support learning today and for the future","subscriberCount":307,"latestPostsConnection({\"paging\":{\"limit\":1}})":{"__typename":"PostConnection","posts":[{"__ref":"Post:d6c2ecb3f887"}]},"viewerEdge":{"__ref":"CollectionViewerEdge:collectionId:ccdac8851d0b-viewerId:lo_0e8730d35607"},"twitterUsername":"ITHAKA_org","facebookPageId":null,"logo":{"__ref":"ImageMetadata:1*oRNIg_5aAvcFZeZG8okFTw.png"}},"User:c91398edcd":{"__typename":"User","id":"c91398edcd"},"User:98e683e1a582":{"__typename":"User","id":"98e683e1a582","customDomainState":null,"hasSubdomain":false,"username":"danehillard","name":"Dane Hillard","newsletterV3":{"__ref":"NewsletterV3:db4c34d8e64a"},"linkedAccounts":{"__ref":"LinkedAccounts:98e683e1a582"},"isSuspended":false,"imageId":"1*z4bkwyZ2vBXYDunTWm08YA.jpeg","mediumMemberAt":0,"verifications":{"__typename":"VerifiedInfo","isBookAuthor":false},"socialStats":{"__typename":"SocialStats","followerCount":405,"followingCount":148,"collectionFollowingCount":13},"bio":"Publishing Python Packages 🐍📦 ⬆️ Practices of the Python Pro 🐍📘 Technical architect at ITHAKA","isPartnerProgramEnrolled":true,"viewerEdge":{"__ref":"UserViewerEdge:userId:98e683e1a582-viewerId:lo_0e8730d35607"},"viewerIsUser":false,"postSubscribeMembershipUpsellShownAt":0,"membership":null,"allowNotes":true,"twitterScreenName":"easyaspython"},"User:189f2f4b2a6b":{"__typename":"User","id":"189f2f4b2a6b"},"User:78eea9e1371c":{"__typename":"User","id":"78eea9e1371c"},"User:46a217aa0bb9":{"__typename":"User","id":"46a217aa0bb9"},"User:37806f179c9d":{"__typename":"User","id":"37806f179c9d"},"User:bfc24ced380c":{"__typename":"User","id":"bfc24ced380c"},"ImageMetadata:1*JUL5st-N0tn2jw8as1MBcw.png":{"__typename":"ImageMetadata","id":"1*JUL5st-N0tn2jw8as1MBcw.png"},"Post:d6c2ecb3f887":{"__typename":"Post","id":"d6c2ecb3f887","firstPublishedAt":1727369524790,"creator":{"__ref":"User:98e683e1a582"},"collection":{"__ref":"Collection:ccdac8851d0b"},"isSeries":false,"mediumUrl":"https:\u002F\u002Fmedium.com\u002Fithaka-tech\u002Fchoose-boring-releases-d6c2ecb3f887","sequence":null,"uniqueSlug":"choose-boring-releases-d6c2ecb3f887","content({\"postMeteringOptions\":{}})":{"__typename":"PostContent","isLockedPreviewOnly":false,"bodyModel":{"__typename":"RichText","sections":[{"__typename":"Section","name":"9711","startIndex":0,"textLayout":null,"imageLayout":null,"backgroundImage":null,"videoLayout":null,"backgroundVideo":null},{"__typename":"Section","name":"54d5","startIndex":14,"textLayout":null,"imageLayout":null,"backgroundImage":null,"videoLayout":null,"backgroundVideo":null},{"__typename":"Section","name":"c836","startIndex":33,"textLayout":null,"imageLayout":null,"backgroundImage":null,"videoLayout":null,"backgroundVideo":null},{"__typename":"Section","name":"bbe0","startIndex":40,"textLayout":null,"imageLayout":null,"backgroundImage":null,"videoLayout":null,"backgroundVideo":null}],"paragraphs":[{"__ref":"Paragraph:6f1ac3ba67cd_0"},{"__ref":"Paragraph:6f1ac3ba67cd_1"},{"__ref":"Paragraph:6f1ac3ba67cd_2"},{"__ref":"Paragraph:6f1ac3ba67cd_3"},{"__ref":"Paragraph:6f1ac3ba67cd_4"},{"__ref":"Paragraph:6f1ac3ba67cd_5"},{"__ref":"Paragraph:6f1ac3ba67cd_6"},{"__ref":"Paragraph:6f1ac3ba67cd_7"},{"__ref":"Paragraph:6f1ac3ba67cd_8"},{"__ref":"Paragraph:6f1ac3ba67cd_9"},{"__ref":"Paragraph:6f1ac3ba67cd_10"},{"__ref":"Paragraph:6f1ac3ba67cd_11"},{"__ref":"Paragraph:6f1ac3ba67cd_12"},{"__ref":"Paragraph:6f1ac3ba67cd_13"},{"__ref":"Paragraph:6f1ac3ba67cd_14"},{"__ref":"Paragraph:6f1ac3ba67cd_15"},{"__ref":"Paragraph:6f1ac3ba67cd_16"},{"__ref":"Paragraph:6f1ac3ba67cd_17"},{"__ref":"Paragraph:6f1ac3ba67cd_18"},{"__ref":"Paragraph:6f1ac3ba67cd_19"},{"__ref":"Paragraph:6f1ac3ba67cd_20"},{"__ref":"Paragraph:6f1ac3ba67cd_21"},{"__ref":"Paragraph:6f1ac3ba67cd_22"},{"__ref":"Paragraph:6f1ac3ba67cd_23"},{"__ref":"Paragraph:6f1ac3ba67cd_24"},{"__ref":"Paragraph:6f1ac3ba67cd_25"},{"__ref":"Paragraph:6f1ac3ba67cd_26"},{"__ref":"Paragraph:6f1ac3ba67cd_27"},{"__ref":"Paragraph:6f1ac3ba67cd_28"},{"__ref":"Paragraph:6f1ac3ba67cd_29"},{"__ref":"Paragraph:6f1ac3ba67cd_30"},{"__ref":"Paragraph:6f1ac3ba67cd_31"},{"__ref":"Paragraph:6f1ac3ba67cd_32"},{"__ref":"Paragraph:6f1ac3ba67cd_33"},{"__ref":"Paragraph:6f1ac3ba67cd_34"},{"__ref":"Paragraph:6f1ac3ba67cd_35"},{"__ref":"Paragraph:6f1ac3ba67cd_36"},{"__ref":"Paragraph:6f1ac3ba67cd_37"},{"__ref":"Paragraph:6f1ac3ba67cd_38"},{"__ref":"Paragraph:6f1ac3ba67cd_39"},{"__ref":"Paragraph:6f1ac3ba67cd_40"}]},"validatedShareKey":"","shareKeyCreator":null},"inResponseToEntityType":null,"isLocked":false,"isMarkedPaywallOnly":false,"lockedSource":"LOCKED_POST_SOURCE_NONE","primaryTopic":null,"topics":[{"__typename":"Topic","slug":"programming"}],"isPublished":true,"latestPublishedVersion":"6f1ac3ba67cd","visibility":"PUBLIC","postResponses":{"__typename":"PostResponses","count":0},"clapCount":51,"allowResponses":true,"isLimitedState":false,"title":"Choose Boring Releases","socialTitle":"","socialDek":"","canonicalUrl":"","metaDescription":"","latestPublishedAt":1729273379974,"readingTime":7.324528301886793,"previewContent":{"__typename":"PreviewContent","subtitle":"Academic research increasingly relies on diverse content types, including gray literature and primary source materials, alongside…"},"previewImage":{"__ref":"ImageMetadata:1*lu8id_9u4R0GaRFM_MlIOA.jpeg"},"isShortform":false,"seoTitle":"","updatedAt":1731730000154,"shortformType":"SHORTFORM_TYPE_LINK","seoDescription":"Our goal was to coast through the finish line instead of scrambling. Key tactics like product-minded engineering made that possible.","viewerEdge":{"__ref":"PostViewerEdge:postId:d6c2ecb3f887-viewerId:lo_0e8730d35607"},"isSuspended":false,"license":"ALL_RIGHTS_RESERVED","tags":[{"__ref":"Tag:release-management"},{"__ref":"Tag:integration-testing"},{"__ref":"Tag:migration"},{"__ref":"Tag:agile-development"}],"isNewsletter":false,"statusForCollection":"APPROVED","pendingCollection":null,"detectedLanguage":"en","wordCount":1888,"layerCake":0,"responsesLocked":false},"LinkedAccounts:98e683e1a582":{"__typename":"LinkedAccounts","mastodon":null,"id":"98e683e1a582"},"UserViewerEdge:userId:98e683e1a582-viewerId:lo_0e8730d35607":{"__typename":"UserViewerEdge","id":"userId:98e683e1a582-viewerId:lo_0e8730d35607","isFollowing":false,"isUser":false,"isMuting":false},"NewsletterV3:db4c34d8e64a":{"__typename":"NewsletterV3","id":"db4c34d8e64a","type":"NEWSLETTER_TYPE_AUTHOR","slug":"98e683e1a582","name":"98e683e1a582","collection":null,"user":{"__ref":"User:98e683e1a582"}},"Paragraph:6f1ac3ba67cd_0":{"__typename":"Paragraph","id":"6f1ac3ba67cd_0","name":"9d4c","type":"H3","href":null,"layout":null,"metadata":null,"text":"Choose Boring Releases","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:6f1ac3ba67cd_1":{"__typename":"Paragraph","id":"6f1ac3ba67cd_1","name":"290e","type":"P","href":null,"layout":null,"metadata":null,"text":"Academic research increasingly relies on diverse content types, including gray literature and primary source materials, alongside traditional peer-reviewed works. ITHAKA supports this evolving research landscape through initiatives that foster cross-content connections on JSTOR, our digital library that supports research, teaching, and learning. These include infrastructure services that enable institutions to make their digital archives and special collections discoverable on the platform, and a years-long effort to integrate Artstor — a vast collection of images and multimedia for educational use — onto the JSTOR platform.","hasDropCap":null,"dropCapImage":null,"markups":[{"__typename":"Markup","type":"A","start":273,"end":278,"href":"https:\u002F\u002Fwww.jstor.org\u002F","anchorType":"LINK","userId":null,"linkMetadata":null},{"__typename":"Markup","type":"A","start":362,"end":385,"href":"https:\u002F\u002Fwww.about.jstor.org\u002Fwhats-in-jstor\u002Finfrastructure\u002F","anchorType":"LINK","userId":null,"linkMetadata":null}],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"ImageMetadata:1*lu8id_9u4R0GaRFM_MlIOA.jpeg":{"__typename":"ImageMetadata","id":"1*lu8id_9u4R0GaRFM_MlIOA.jpeg","originalHeight":1480,"originalWidth":1940,"focusPercentX":null,"focusPercentY":null,"alt":null},"Paragraph:6f1ac3ba67cd_2":{"__typename":"Paragraph","id":"6f1ac3ba67cd_2","name":"7a02","type":"IMG","href":null,"layout":"INSET_CENTER","metadata":{"__ref":"ImageMetadata:1*lu8id_9u4R0GaRFM_MlIOA.jpeg"},"text":"Albrecht Dürer (German, Nuremberg 1471–1528 Nuremberg). “Alberti Dvreri Pictoris et Architecti Praestantissimi De Vrbibvs…” 1535. Illustrated book, 78 pp.; H: 13 3\u002F4 in. (35 cm). The Metropolitan Museum of Art. https:\u002F\u002Fjstor.org\u002Fstable\u002Fcommunity.34718827. Just one of the millions of items now available on JSTOR.","hasDropCap":null,"dropCapImage":null,"markups":[{"__typename":"Markup","type":"A","start":211,"end":254,"href":"https:\u002F\u002Fjstor.org\u002Fstable\u002Fcommunity.34718827","anchorType":"LINK","userId":null,"linkMetadata":null},{"__typename":"Markup","type":"EM","start":0,"end":313,"href":null,"anchorType":null,"userId":null,"linkMetadata":null}],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:6f1ac3ba67cd_3":{"__typename":"Paragraph","id":"6f1ac3ba67cd_3","name":"9ca3","type":"P","href":null,"layout":null,"metadata":null,"text":"On August 1, 2024, the Artstor migration to the JSTOR platform culminated in the need to smoothly guide users from the Artstor Image Workspace (AIW) at library.artstor.org to appropriate counterparts on www.jstor.org. The amount of work this required was daunting; the AIW platform was as large and complex as JSTOR, and covered many different product areas with ownership spread across several different teams. To achieve this transition without drawing focus away from other objectives, we had to adopt a strategic approach.","hasDropCap":null,"dropCapImage":null,"markups":[{"__typename":"Markup","type":"A","start":23,"end":62,"href":"https:\u002F\u002Fwww.about.jstor.org\u002Fnews\u002Fjstor-announces-artstor-on-jstor\u002F","anchorType":"LINK","userId":null,"linkMetadata":null}],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:6f1ac3ba67cd_4":{"__typename":"Paragraph","id":"6f1ac3ba67cd_4","name":"3fc0","type":"H3","href":null,"layout":null,"metadata":null,"text":"The challenge","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:6f1ac3ba67cd_5":{"__typename":"Paragraph","id":"6f1ac3ba67cd_5","name":"76e5","type":"P","href":null,"layout":null,"metadata":null,"text":"Our two main constituents for this transition were our users — primarily art history researchers and faculty — and search engine web crawlers. Like JSTOR users, many Artstor users start their searches outside of our platforms and need to be able to find things no matter what platform changes we make.","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:6f1ac3ba67cd_6":{"__typename":"Paragraph","id":"6f1ac3ba67cd_6","name":"418c","type":"P","href":null,"layout":null,"metadata":null,"text":"The first piece of the challenge was technical: Client-side routing was used extensively on the AIW platform. That routing wasn’t built with web crawlers in mind, so many modern web crawlers couldn’t handle it very well. Plus, these client-side routes were generally invisible to our servers because they used hash-based routing rather than the history API. Some pages did support server-side rendering so web crawlers could index them, which gave us an additional scenario to support.","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:6f1ac3ba67cd_7":{"__typename":"Paragraph","id":"6f1ac3ba67cd_7","name":"2ce0","type":"P","href":null,"layout":null,"metadata":null,"text":"The second challenge was human: Domain knowledge about the details of all this routing and the user value of various pages was spread throughout the organization, and the people with the domain knowledge didn’t always have the technical knowledge to deal with the redirects.","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:6f1ac3ba67cd_8":{"__typename":"Paragraph","id":"6f1ac3ba67cd_8","name":"bdf1","type":"P","href":null,"layout":null,"metadata":null,"text":"Finally, there was the sheer scope of the work to be done. AIW itself was a huge platform, but on top of that we also had to redirect supporting areas like the marketing and support sites. Very early on, we had to set some parameters to rein in the scope:","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:6f1ac3ba67cd_9":{"__typename":"Paragraph","id":"6f1ac3ba67cd_9","name":"5cda","type":"ULI","href":null,"layout":null,"metadata":null,"text":"We wouldn’t guarantee or aim for 100% of traffic to be redirected. Some pages and requests simply couldn’t be redirected anywhere reasonable, and redirecting to generic informational pages can lead to search engine ranking penalties. More importantly for our user focus, it would be disorienting to click a bookmark or a search engine result and get redirected to something irrelevant.","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:6f1ac3ba67cd_10":{"__typename":"Paragraph","id":"6f1ac3ba67cd_10","name":"87eb","type":"ULI","href":null,"layout":null,"metadata":null,"text":"We would create a central, extensible service designed for loose coupling of the URL patterns to match and the behavior when such a match occurred. This would reduce unnecessary coupling and dependencies between teams as well as the context those teams had to hold onto during the migration project.","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:6f1ac3ba67cd_11":{"__typename":"Paragraph","id":"6f1ac3ba67cd_11","name":"deb2","type":"ULI","href":null,"layout":null,"metadata":null,"text":"We would enable teams to implement redirects for the broadest-used page types (such as individual items), but would equally enable implementing redirects for the long tail of irregular page types. This would create a familiar implementation pattern for teams that they wouldn’t have to abandon for more exotic use cases.","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:6f1ac3ba67cd_12":{"__typename":"Paragraph","id":"6f1ac3ba67cd_12","name":"8607","type":"ULI","href":null,"layout":null,"metadata":null,"text":"We would enable visibility into the behavior of the system as early as possible, so that we could observe the trend over time. This fostered an experimentation mindset: We could develop hypotheses about how the traffic would be handled, implement a change, and quickly confirm or disconfirm the desired effect after deploying the new change. This also gave us opportunities to leverage parts of our deployment platform we hadn’t exercised much previously, adding some greenfield work to an otherwise brownfield kind of activity.","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:6f1ac3ba67cd_13":{"__typename":"Paragraph","id":"6f1ac3ba67cd_13","name":"82ef","type":"P","href":null,"layout":null,"metadata":null,"text":"So instead of perfection, we defined our scope as removing as much risk as possible and building in as much confidence as we could ahead of our launch date. Our goal was to coast through the finish line instead of scrambling.","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:6f1ac3ba67cd_14":{"__typename":"Paragraph","id":"6f1ac3ba67cd_14","name":"6bd7","type":"H3","href":null,"layout":null,"metadata":null,"text":"The approach","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:6f1ac3ba67cd_15":{"__typename":"Paragraph","id":"6f1ac3ba67cd_15","name":"d65c","type":"P","href":null,"layout":null,"metadata":null,"text":"So how did we do that? A few key tactics showed up for us and made things possible throughout this project.","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:6f1ac3ba67cd_16":{"__typename":"Paragraph","id":"6f1ac3ba67cd_16","name":"e67f","type":"H4","href":null,"layout":null,"metadata":null,"text":"Practice product-minded engineering","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:6f1ac3ba67cd_17":{"__typename":"Paragraph","id":"6f1ac3ba67cd_17","name":"1b13","type":"P","href":null,"layout":null,"metadata":null,"text":"We approached the project using product-minded engineering principles, which leverage user-focused agile techniques and strong cross-disciplinary and interdisciplinary skills to identify problems worth solving. By considering both user needs and architectural needs together, we came away with a more globally maximum solution without oversimplifying or overengineering.","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:6f1ac3ba67cd_18":{"__typename":"Paragraph","id":"6f1ac3ba67cd_18","name":"347c","type":"H4","href":null,"layout":null,"metadata":null,"text":"Use traffic shadowing","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:6f1ac3ba67cd_19":{"__typename":"Paragraph","id":"6f1ac3ba67cd_19","name":"5c5c","type":"P","href":null,"layout":null,"metadata":null,"text":"Traffic shadowing allows inbound requests to be sent to two or more destinations, each able to take some action. Although one system is still responsible for sending a response back to the user, other systems can also make observations about or take action on requests. Our Capstan platform made this easy to try, and it worked very well. We continued serving AIW pages to users while also sending requests to our new redirect service, so we could see how it would behave and perform.","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:6f1ac3ba67cd_20":{"__typename":"Paragraph","id":"6f1ac3ba67cd_20","name":"2942","type":"H4","href":null,"layout":null,"metadata":null,"text":"Measure early and often","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:6f1ac3ba67cd_21":{"__typename":"Paragraph","id":"6f1ac3ba67cd_21","name":"18b1","type":"P","href":null,"layout":null,"metadata":null,"text":"We built metrics into the redirect service so that as we started implementing and deploying redirect behaviors we could assess the total traffic volume and understand what portion of that traffic was being handled by a known redirect. That was a huge confidence builder, as we could actually demonstrate not only that the service should redirect the implemented URLs once turned on, but that it was in fact doing so — with the shadow traffic.","hasDropCap":null,"dropCapImage":null,"markups":[{"__typename":"Markup","type":"EM","start":330,"end":336,"href":null,"anchorType":null,"userId":null,"linkMetadata":null},{"__typename":"Markup","type":"EM","start":392,"end":415,"href":null,"anchorType":null,"userId":null,"linkMetadata":null}],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:6f1ac3ba67cd_22":{"__typename":"Paragraph","id":"6f1ac3ba67cd_22","name":"f4d0","type":"H4","href":null,"layout":null,"metadata":null,"text":"Use feature flags","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:6f1ac3ba67cd_23":{"__typename":"Paragraph","id":"6f1ac3ba67cd_23","name":"d3ee","type":"P","href":null,"layout":null,"metadata":null,"text":"Where we couldn’t implement traffic shadowing for some supporting pages, we used feature flagging. With feature flags, we can ship two different behaviors and then allow staff and automated tests to toggle those behaviors on or off before exposing that new behavior to users. Even under normal circumstances we have many teams developing across many areas of the platform, and a feature flagging strategy brings speed and safety by ensuring we don’t have to perform a “big bang” release at the very end of a project.","hasDropCap":null,"dropCapImage":null,"markups":[{"__typename":"Markup","type":"A","start":81,"end":97,"href":"https:\u002F\u002Fmedium.com\u002Fithaka-tech\u002Fdeploying-features-under-cover-of-darkness-f112ce444bba","anchorType":"LINK","userId":null,"linkMetadata":null},{"__typename":"Markup","type":"A","start":412,"end":428,"href":"https:\u002F\u002Fmedium.com\u002Fithaka-tech\u002Ffind-bugs-before-your-users-do-closing-the-software-development-risk-exposure-gap-cace5dbd19d2","anchorType":"LINK","userId":null,"linkMetadata":null}],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:6f1ac3ba67cd_24":{"__typename":"Paragraph","id":"6f1ac3ba67cd_24","name":"1c55","type":"H4","href":null,"layout":null,"metadata":null,"text":"Think in transition architectures","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:6f1ac3ba67cd_25":{"__typename":"Paragraph","id":"6f1ac3ba67cd_25","name":"3c07","type":"P","href":null,"layout":null,"metadata":null,"text":"In effect, all of the redirect architecture we built to support this migration was a transition architecture. But we also built some smaller transition systems to move the control of traffic from external vendors into our own platform, making it easier to flip a switch on release day instead of having to handle several moving parts in a row.","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:6f1ac3ba67cd_26":{"__typename":"Paragraph","id":"6f1ac3ba67cd_26","name":"68d7","type":"P","href":null,"layout":null,"metadata":null,"text":"Easing the transition architecture burden made a big difference on several of our support sites. For example, the DNS records for these sites were initially pointed directly at third-party vendors; before we could control the traffic, the traffic would have to come to us. If we waited until release day for that to happen, the DNS change could take longer than expected to propagate, or it could result in unforeseen consequences, or the logic we implemented for it could be wrong. Instead, we designed these constraints away. We worked to bring the DNS under our control earlier, and although it initially continued to point to the third-party vendors, we could now make immediate changes to its behavior.","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:6f1ac3ba67cd_27":{"__typename":"Paragraph","id":"6f1ac3ba67cd_27","name":"6b39","type":"H4","href":null,"layout":null,"metadata":null,"text":"Create a loosely coupled design","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:6f1ac3ba67cd_28":{"__typename":"Paragraph","id":"6f1ac3ba67cd_28","name":"2664","type":"P","href":null,"layout":null,"metadata":null,"text":"Because we had to collect and implement so much widely scattered domain knowledge into these redirects, we had to build a system that made it easy to contribute and hard to cross wires or step on other people’s toes. The system we created allowed teams to come in with nothing more than a URL pattern to match on AIW and a destination URL to send the traffic to. If necessary, they could also contact downstream services for data to help them decide where to redirect that traffic.","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:6f1ac3ba67cd_29":{"__typename":"Paragraph","id":"6f1ac3ba67cd_29","name":"ee30","type":"P","href":null,"layout":null,"metadata":null,"text":"Basically, we decided to meet teams where they are, with their domain knowledge, so they didn’t have to think too much about the technical aspects of how redirection works. This also allowed the team working on the redirect service to do that work without having to worry too much about the domain knowledge. This separated responsibility in a nice way and ensured better outcomes for us and our users.","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:6f1ac3ba67cd_30":{"__typename":"Paragraph","id":"6f1ac3ba67cd_30","name":"7298","type":"H4","href":null,"layout":null,"metadata":null,"text":"Have regular, valuable trade-off discussions","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:6f1ac3ba67cd_31":{"__typename":"Paragraph","id":"6f1ac3ba67cd_31","name":"c3b2","type":"P","href":null,"layout":null,"metadata":null,"text":"Finally, we engaged throughout this whole project in high-quality trade-off discussions. We talked about the level of effort a particular change required compared to the expected user impact. We talked about specific pages and how to handle them. And because we had such a rich cross-section of technical and domain knowledge in those discussions, we made better decisions about how to simplify things or adjust to reduce our overall risk and costs.","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:6f1ac3ba67cd_32":{"__typename":"Paragraph","id":"6f1ac3ba67cd_32","name":"e720","type":"P","href":null,"layout":null,"metadata":null,"text":"This is really a reprise of product-minded engineering, but this highlights one of its most impactful outcomes — giving us context about what’s possible, what gives us the best ROI, and how we might deliver better outcomes for us and users.","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:6f1ac3ba67cd_33":{"__typename":"Paragraph","id":"6f1ac3ba67cd_33","name":"6024","type":"H3","href":null,"layout":null,"metadata":null,"text":"The result","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:6f1ac3ba67cd_34":{"__typename":"Paragraph","id":"6f1ac3ba67cd_34","name":"d41e","type":"P","href":null,"layout":null,"metadata":null,"text":"We worked hard leading up to our launch date, August 1. But release day itself was one of the most boring of all time. We did about 30 minutes of real work to flip on some of those feature flags and deploy a couple of applications, all of which we were highly confident in because of our previous metrics and testing. In that short time we started redirecting over 95% of all AIW traffic to known locations on JSTOR and its supporting sites. The remaining requests were for things we had intentionally decided not to handle.","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:6f1ac3ba67cd_35":{"__typename":"Paragraph","id":"6f1ac3ba67cd_35","name":"6b99","type":"P","href":null,"layout":null,"metadata":null,"text":"We only shipped one bug that we know of, which we spotted quickly. Because of our system design we were able to revert immediately to the old system while we worked on a short-term fix, and within a couple of weeks put a long-term fix in place so we could sunset the old system.","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:6f1ac3ba67cd_36":{"__typename":"Paragraph","id":"6f1ac3ba67cd_36","name":"d5ef","type":"P","href":null,"layout":null,"metadata":null,"text":"Meanwhile, we’re listening for user experience feedback in case anyone is confused or notices broken redirects, and we’re watching how our search engine crawling and ranking responds. As Google and Bing and others recrawl our content, they’ll start sending people directly to JSTOR. NISO recommends leaving these redirects in place for at least a year, so we’ve committed to that. Next year we’ll evaluate whether this architecture has run its course and act accordingly.","hasDropCap":null,"dropCapImage":null,"markups":[{"__typename":"Markup","type":"A","start":283,"end":298,"href":"https:\u002F\u002Fgroups.niso.org\u002Fhigherlogic\u002Fws\u002Fpublic\u002Fdownload\u002F26321","anchorType":"LINK","userId":null,"linkMetadata":null}],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:6f1ac3ba67cd_37":{"__typename":"Paragraph","id":"6f1ac3ba67cd_37","name":"bd50","type":"H3","href":null,"layout":null,"metadata":null,"text":"The takeaways","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:6f1ac3ba67cd_38":{"__typename":"Paragraph","id":"6f1ac3ba67cd_38","name":"d463","type":"P","href":null,"layout":null,"metadata":null,"text":"While the technical tools and architecture we used were obviously important, adopting a loosely coupled, extensible design was key to our success. By bringing solutions to teams that allowed them to focus on their domain knowledge we played to everyone’s strengths. It also ensured teams weren’t colliding with each other too often. This approach helped us focus and synthesize everyone’s strengths. It may not be possible in all cases, but for this project it was one of our best and most productive decisions.","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:6f1ac3ba67cd_39":{"__typename":"Paragraph","id":"6f1ac3ba67cd_39","name":"ed0a","type":"P","href":null,"layout":null,"metadata":null,"text":"By thinking in transition architectures and building key visibility into the system at the outset, we were able to create significant confidence in our progress and readiness for release day, making the finale just a blip on the radar. This raised an unexpected consequence — it would have been easy to say, “Look, we did the thing,” and part ways on release day, because it was so uneventful. Choose boring releases, but be sure to keep the afterparty exciting.","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:6f1ac3ba67cd_40":{"__typename":"Paragraph","id":"6f1ac3ba67cd_40","name":"a266","type":"P","href":null,"layout":null,"metadata":null,"text":"Interested in learning more about working at ITHAKA? Contact recruiting to learn more about ITHAKA tech jobs.","hasDropCap":null,"dropCapImage":null,"markups":[{"__typename":"Markup","type":"A","start":92,"end":108,"href":"https:\u002F\u002Fwww.ithaka.org\u002Fcareers\u002F?gh_src=1ba9e9eb5us","anchorType":"LINK","userId":null,"linkMetadata":null}],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"CollectionViewerEdge:collectionId:ccdac8851d0b-viewerId:lo_0e8730d35607":{"__typename":"CollectionViewerEdge","id":"collectionId:ccdac8851d0b-viewerId:lo_0e8730d35607","isEditor":false,"isMuting":false},"ImageMetadata:1*oRNIg_5aAvcFZeZG8okFTw.png":{"__typename":"ImageMetadata","id":"1*oRNIg_5aAvcFZeZG8okFTw.png","originalWidth":600,"originalHeight":72},"PostViewerEdge:postId:d6c2ecb3f887-viewerId:lo_0e8730d35607":{"__typename":"PostViewerEdge","shouldIndexPostForExternalSearch":true,"id":"postId:d6c2ecb3f887-viewerId:lo_0e8730d35607"},"Tag:release-management":{"__typename":"Tag","id":"release-management","displayTitle":"Release Management","normalizedTagSlug":"release-management"},"Tag:integration-testing":{"__typename":"Tag","id":"integration-testing","displayTitle":"Integration Testing","normalizedTagSlug":"integration-testing"},"Tag:migration":{"__typename":"Tag","id":"migration","displayTitle":"Migration","normalizedTagSlug":"migration"},"Tag:agile-development":{"__typename":"Tag","id":"agile-development","displayTitle":"Agile Development","normalizedTagSlug":"agile-development"}}</script><script>window.__MIDDLEWARE_STATE__={"session":{"xsrf":""},"cache":{"cacheStatus":"HIT"}}</script><script src="https://cdn-client.medium.com/lite/static/js/manifest.de931270.js"></script><script src="https://cdn-client.medium.com/lite/static/js/9865.1496d74a.js"></script><script src="https://cdn-client.medium.com/lite/static/js/main.3947a59c.js"></script><script src="https://cdn-client.medium.com/lite/static/js/instrumentation.d9108df7.chunk.js"></script> <script src="https://cdn-client.medium.com/lite/static/js/reporting.ff22a7a5.chunk.js"></script> <script src="https://cdn-client.medium.com/lite/static/js/9120.5df29668.chunk.js"></script> <script src="https://cdn-client.medium.com/lite/static/js/5049.d1ead72d.chunk.js"></script> <script src="https://cdn-client.medium.com/lite/static/js/4810.6318add7.chunk.js"></script> <script src="https://cdn-client.medium.com/lite/static/js/6618.db187378.chunk.js"></script> <script src="https://cdn-client.medium.com/lite/static/js/2707.b0942613.chunk.js"></script> <script src="https://cdn-client.medium.com/lite/static/js/9977.5b3eb23a.chunk.js"></script> <script src="https://cdn-client.medium.com/lite/static/js/8599.1ab63137.chunk.js"></script> <script src="https://cdn-client.medium.com/lite/static/js/5250.9f9e01d2.chunk.js"></script> <script src="https://cdn-client.medium.com/lite/static/js/6349.b071a958.chunk.js"></script> <script src="https://cdn-client.medium.com/lite/static/js/2648.26563adf.chunk.js"></script> <script src="https://cdn-client.medium.com/lite/static/js/8393.826a25fb.chunk.js"></script> <script src="https://cdn-client.medium.com/lite/static/js/7079.67349d50.chunk.js"></script> <script src="https://cdn-client.medium.com/lite/static/js/3735.afb7e926.chunk.js"></script> <script src="https://cdn-client.medium.com/lite/static/js/5642.a2d9f6a1.chunk.js"></script> <script src="https://cdn-client.medium.com/lite/static/js/6546.cd03f950.chunk.js"></script> <script src="https://cdn-client.medium.com/lite/static/js/6834.08de95de.chunk.js"></script> <script src="https://cdn-client.medium.com/lite/static/js/7346.72622eb9.chunk.js"></script> <script src="https://cdn-client.medium.com/lite/static/js/2420.2a5e2d95.chunk.js"></script> <script src="https://cdn-client.medium.com/lite/static/js/839.ca7937c2.chunk.js"></script> <script src="https://cdn-client.medium.com/lite/static/js/7975.d195c6f1.chunk.js"></script> <script src="https://cdn-client.medium.com/lite/static/js/2106.21ff89d3.chunk.js"></script> <script src="https://cdn-client.medium.com/lite/static/js/7394.3d049572.chunk.js"></script> <script src="https://cdn-client.medium.com/lite/static/js/2961.00a48598.chunk.js"></script> <script src="https://cdn-client.medium.com/lite/static/js/8204.c4082863.chunk.js"></script> <script src="https://cdn-client.medium.com/lite/static/js/4391.59acaed3.chunk.js"></script> <script src="https://cdn-client.medium.com/lite/static/js/PostPage.MainContent.c8a11795.chunk.js"></script> <script src="https://cdn-client.medium.com/lite/static/js/8414.6565ad5f.chunk.js"></script> <script src="https://cdn-client.medium.com/lite/static/js/3974.8d3e0217.chunk.js"></script> <script src="https://cdn-client.medium.com/lite/static/js/2527.a0afad8a.chunk.js"></script> <script src="https://cdn-client.medium.com/lite/static/js/PostResponsesContent.36c2ecf4.chunk.js"></script><script>window.main();</script><script>(function(){function c(){var b=a.contentDocument||a.contentWindow.document;if(b){var d=b.createElement('script');d.innerHTML="window.__CF$cv$params={r:'8e902c061e7c4b50',t:'MTczMjY5MDEwMC4wMDAwMDA='};var a=document.createElement('script');a.nonce='';a.src='/cdn-cgi/challenge-platform/scripts/jsd/main.js';document.getElementsByTagName('head')[0].appendChild(a);";b.getElementsByTagName('head')[0].appendChild(d)}}if(document.body){var a=document.createElement('iframe');a.height=1;a.width=1;a.style.position='absolute';a.style.top=0;a.style.left=0;a.style.border='none';a.style.visibility='hidden';document.body.appendChild(a);if('loading'!==document.readyState)c();else if(window.addEventListener)document.addEventListener('DOMContentLoaded',c);else{var e=document.onreadystatechange||function(){};document.onreadystatechange=function(b){e(b);'loading'!==document.readyState&&(document.onreadystatechange=e,c())}}}})();</script></body></html>

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