CINXE.COM

<!doctype html><html lang="en"><head><title data-rh="true">An engineer’s perspective on engineering and data science collaboration for data products | by Chris Liu | Coursera Engineering | 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="2019-05-20T15:44:12.461Z"/><meta data-rh="true" name="title" content="An engineer’s perspective on engineering and data science collaboration for data products | by Chris Liu | Coursera Engineering | Medium"/><meta data-rh="true" property="og:title" content="An engineer’s perspective on engineering and data science collaboration for data products"/><meta data-rh="true" property="al:android:url" content="medium://p/84cf9b38cd52"/><meta data-rh="true" property="al:ios:url" content="medium://p/84cf9b38cd52"/><meta data-rh="true" property="al:android:app_name" content="Medium"/><meta data-rh="true" name="description" content="Data products facilitate meeting an end goal through the use of data. At Coursera, we’ve built data products whose missions range from facilitating better content discovery to scaling learner…"/><meta data-rh="true" property="og:description" content="Three themes that have worked well for us at Coursera for data product development— from the perspective of an engineer."/><meta data-rh="true" property="og:url" content="https://medium.com/coursera-engineering/an-engineers-perspective-on-engineering-and-data-science-collaboration-for-data-products-84cf9b38cd52"/><meta data-rh="true" property="al:web:url" content="https://medium.com/coursera-engineering/an-engineers-perspective-on-engineering-and-data-science-collaboration-for-data-products-84cf9b38cd52"/><meta data-rh="true" property="og:image" content="https://miro.medium.com/v2/da:true/resize:fit:1200/0*rvxR1udpDV7YaJfG"/><meta data-rh="true" property="article:author" content="https://medium.com/@cliu_88389"/><meta data-rh="true" name="author" content="Chris Liu"/><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="An engineer’s perspective on engineering and data science collaboration for data products"/><meta data-rh="true" name="twitter:site" content="@CourseraEng"/><meta data-rh="true" name="twitter:app:url:iphone" content="medium://p/84cf9b38cd52"/><meta data-rh="true" property="twitter:description" content="Three themes that have worked well for us at Coursera for data product development— from the perspective of an engineer."/><meta data-rh="true" name="twitter:image:src" content="https://miro.medium.com/v2/da:true/resize:fit:1200/0*rvxR1udpDV7YaJfG"/><meta data-rh="true" name="twitter:card" content="summary_large_image"/><meta data-rh="true" name="twitter:label1" content="Reading time"/><meta data-rh="true" name="twitter:data1" content="7 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/@cliu_88389"/><link data-rh="true" rel="canonical" href="https://medium.com/coursera-engineering/an-engineers-perspective-on-engineering-and-data-science-collaboration-for-data-products-84cf9b38cd52"/><link data-rh="true" rel="alternate" href="android-app://com.medium.reader/https/medium.com/p/84cf9b38cd52"/><script data-rh="true" type="application/ld+json">{"@context":"http:\u002F\u002Fschema.org","@type":"NewsArticle","image":["https:\u002F\u002Fmiro.medium.com\u002Fv2\u002Fda:true\u002Fresize:fit:1200\u002F0*rvxR1udpDV7YaJfG"],"url":"https:\u002F\u002Fmedium.com\u002Fcoursera-engineering\u002Fan-engineers-perspective-on-engineering-and-data-science-collaboration-for-data-products-84cf9b38cd52","dateCreated":"2019-05-20T10:01:00.868Z","datePublished":"2019-05-20T10:01:00.868Z","dateModified":"2021-12-10T03:13:32.312Z","headline":"An engineer’s perspective on engineering and data science collaboration for data products","name":"An engineer’s perspective on engineering and data science collaboration for data products","description":"Data products facilitate meeting an end goal through the use of data. At Coursera, we’ve built data products whose missions range from facilitating better content discovery to scaling learner…","identifier":"84cf9b38cd52","author":{"@type":"Person","name":"Chris Liu","url":"https:\u002F\u002Fmedium.com\u002F@cliu_88389"},"creator":["Chris Liu"],"publisher":{"@type":"Organization","name":"Coursera Engineering","url":"https:\u002F\u002Fmedium.com\u002Fcoursera-engineering","logo":{"@type":"ImageObject","width":422,"height":60,"url":"https:\u002F\u002Fmiro.medium.com\u002Fv2\u002Fresize:fit:844\u002F1*zXjOKA4JKHH04Ipi2NI0jA.png"}},"mainEntityOfPage":"https:\u002F\u002Fmedium.com\u002Fcoursera-engineering\u002Fan-engineers-perspective-on-engineering-and-data-science-collaboration-for-data-products-84cf9b38cd52"}</script><style type="text/css" data-fela-rehydration="545" 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="545" 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="545" 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(99, 136, 191, 1)}.es{border-color:rgba(99, 136, 191, 1)}.ew:disabled{cursor:inherit !important}.ex:disabled{opacity:0.3}.ey:disabled:hover{background:rgba(99, 136, 191, 1)}.ez:disabled:hover{border-color:rgba(99, 136, 191, 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(99, 136, 191, 1)}.iu{fill:rgba(99, 136, 191, 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{margin-left:4px}.lr{margin-top:0px}.ls{opacity:1}.lt{padding:4px 0}.lw{width:16px}.ly{display:inline-flex}.me{max-width:100%}.mf{padding:8px 2px}.mg svg{color:#6B6B6B}.mx{line-height:1.58}.my{letter-spacing:-0.004em}.mz{font-family:source-serif-pro, Georgia, Cambria, "Times New Roman", Times, serif}.nu{margin-bottom:-0.46em}.nv{text-decoration:underline}.nw{margin-top:32px}.nx{margin-bottom:14px}.ny{padding-top:24px}.nz{padding-bottom:10px}.oa{background-color:#000000}.ob{height:3px}.oc{width:3px}.od{margin-right:20px}.oe{list-style-type:disc}.of{margin-left:30px}.og{padding-left:0px}.om{margin-left:auto}.on{margin-right:auto}.oo{max-width:666px}.ou{clear:both}.ov{height:auto}.ow{margin-top:10px}.ox{max-width:728px}.pa{max-width:1600px}.pc{cursor:zoom-in}.pd{z-index:auto}.pf{font-style:italic}.pg{margin-bottom:26px}.ph{margin-top:6px}.pi{margin-top:8px}.pj{margin-right:8px}.pk{padding:8px 16px}.pl{border-radius:100px}.pm{transition:background 300ms ease}.po{white-space:nowrap}.pp{border-top:none}.pq{height:52px}.pr{max-height:52px}.ps{box-sizing:content-box}.pt{position:static}.pv{max-width:155px}.qg{height:0px}.qh{margin-bottom:40px}.qi{margin-bottom:48px}.qw{border-radius:2px}.qy{height:64px}.qz{width:64px}.ra{align-self:flex-end}.rb{flex:1 1 auto}.rh{padding-right:4px}.ri{font-weight:500}.rv{margin-top:16px}.rw{color:rgba(255, 255, 255, 1)}.rx{fill:rgba(255, 255, 255, 1)}.ry{background:rgba(25, 25, 25, 1)}.rz{border-color:rgba(25, 25, 25, 1)}.sc:disabled{opacity:0.1}.sd:disabled:hover{background:rgba(25, 25, 25, 1)}.se:disabled:hover{border-color:rgba(25, 25, 25, 1)}.tc{gap:18px}.td{fill:rgba(61, 61, 61, 1)}.tf{fill:#242424}.tg{background:0}.th{border-color:#242424}.ti:disabled:hover{color:#242424}.tj:disabled:hover{fill:#242424}.tk:disabled:hover{border-color:#242424}.tv{border-bottom:solid 1px #E5E5E5}.tw{margin-top:72px}.tx{padding:24px 0}.ty{margin-bottom:0px}.tz{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(87, 117, 161, 1)}.eu:hover{border-color:rgba(87, 117, 161, 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(87, 117, 161, 1)}.iw:hover:not(:disabled){fill:rgba(87, 117, 161, 1)}.ld:hover{fill:rgba(8, 8, 8, 1)}.lu:hover{fill:#000000}.lv:hover p{color:#000000}.lx:hover{color:#000000}.mh:hover svg{color:#000000}.pn:hover{background-color:#F2F2F2}.qx:hover{background-color:none}.sa:hover{background:#000000}.sb:hover{border-color:#242424}.te:hover{fill:rgba(25, 25, 25, 1)}.bd:focus-within path{fill:#242424}.lc:focus{fill:rgba(8, 8, 8, 1)}.mi:focus svg{color:#000000}.pe:focus{transform:scale(1.01)}.lh:active{border-style:none}</style><style type="text/css" data-fela-rehydration="545" 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}.md{margin:0}.nq{font-size:20px}.nr{margin-top:2.14em}.ns{line-height:32px}.nt{letter-spacing:-0.003em}.ol{margin-top:1.14em}.ot{margin-top:56px}.qa{display:inline-block}.qf{margin-bottom:104px}.qj{flex-direction:row}.qm{margin-bottom:0}.qn{margin-right:20px}.rc{max-width:500px}.rt{line-height:24px}.ru{letter-spacing:0}.sj{margin-bottom:88px}.sm{margin-bottom:72px}.sz{font-size:24px}.ta{line-height:30px}.tb{letter-spacing:-0.016em}.tp{width:min-width}.tu{padding-top:72px}</style><style type="text/css" data-fela-rehydration="545" data-fela-type="RULE" media="all and (max-width: 1079.98px)">.e{display:none}.ln{margin-top:0px}.oy{margin-left:auto}.oz{text-align:center}.pz{display:inline-block}</style><style type="text/css" data-fela-rehydration="545" data-fela-type="RULE" media="all and (max-width: 903.98px)">.f{display:none}.lm{margin-top:0px}.py{display:inline-block}</style><style type="text/css" data-fela-rehydration="545" data-fela-type="RULE" media="all and (max-width: 727.98px)">.g{display:none}.lk{margin-top:0px}.ll{margin-right:0px}.px{display:inline-block}</style><style type="text/css" data-fela-rehydration="545" 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}.lz{margin:0}.mj{border:1px solid #F2F2F2}.mk{border-radius:99em}.ml{padding:0px 16px 0px 12px}.mm{height:38px}.mn{align-items:center}.mp svg{margin-right:8px}.na{font-size:18px}.nb{margin-top:1.56em}.nc{line-height:28px}.nd{letter-spacing:-0.003em}.oh{margin-top:1.34em}.op{margin-top:40px}.pw{display:inline-block}.qb{margin-bottom:96px}.qu{margin-bottom:20px}.qv{margin-right:0}.rg{max-width:100%}.rj{font-size:24px}.rk{line-height:30px}.rl{letter-spacing:-0.016em}.sf{margin-bottom:64px}.sn{font-size:20px}.so{line-height:24px}.sp{letter-spacing:0}.tl{width:100%}.tq{padding-top:48px}.mo:hover{border-color:#E5E5E5}</style><style type="text/css" data-fela-rehydration="545" 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}.mc{margin:0}.nm{font-size:20px}.nn{margin-top:2.14em}.no{line-height:32px}.np{letter-spacing:-0.003em}.ok{margin-top:1.14em}.os{margin-top:56px}.qe{margin-bottom:104px}.qk{flex-direction:row}.qo{margin-bottom:0}.qp{margin-right:20px}.rd{max-width:500px}.rr{line-height:24px}.rs{letter-spacing:0}.si{margin-bottom:88px}.sl{margin-bottom:72px}.sw{font-size:24px}.sx{line-height:30px}.sy{letter-spacing:-0.016em}.to{width:min-width}.tt{padding-top:72px}</style><style type="text/css" data-fela-rehydration="545" 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}.mb{margin:0}.ni{font-size:20px}.nj{margin-top:2.14em}.nk{line-height:32px}.nl{letter-spacing:-0.003em}.oj{margin-top:1.14em}.or{margin-top:56px}.qd{margin-bottom:104px}.ql{flex-direction:row}.qq{margin-bottom:0}.qr{margin-right:20px}.re{max-width:500px}.rp{line-height:24px}.rq{letter-spacing:0}.sh{margin-bottom:88px}.sk{margin-bottom:72px}.st{font-size:24px}.su{line-height:30px}.sv{letter-spacing:-0.016em}.tn{width:min-width}.ts{padding-top:72px}</style><style type="text/css" data-fela-rehydration="545" 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}.ma{margin:0}.mq{border:1px solid #F2F2F2}.mr{border-radius:99em}.ms{padding:0px 16px 0px 12px}.mt{height:38px}.mu{align-items:center}.mw svg{margin-right:8px}.ne{font-size:18px}.nf{margin-top:1.56em}.ng{line-height:28px}.nh{letter-spacing:-0.003em}.oi{margin-top:1.34em}.oq{margin-top:40px}.qc{margin-bottom:96px}.qs{margin-bottom:20px}.qt{margin-right:0}.rf{max-width:100%}.rm{font-size:24px}.rn{line-height:30px}.ro{letter-spacing:-0.016em}.sg{margin-bottom:64px}.sq{font-size:20px}.sr{line-height:24px}.ss{letter-spacing:0}.tm{width:100%}.tr{padding-top:48px}.mv:hover{border-color:#E5E5E5}</style><style type="text/css" data-fela-rehydration="545" data-fela-type="RULE" media="print">.pu{display:none}</style><style type="text/css" data-fela-rehydration="545" data-fela-type="RULE" media="(orientation: landscape) and (max-width: 903.98px)">.jm{max-height:none}</style><style type="text/css" data-fela-rehydration="545" data-fela-type="RULE" media="(prefers-reduced-motion: no-preference)">.pb{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%2F84cf9b38cd52&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%2Fcoursera-engineering%2Fan-engineers-perspective-on-engineering-and-data-science-collaboration-for-data-products-84cf9b38cd52&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%2Fcoursera-engineering%2Fan-engineers-perspective-on-engineering-and-data-science-collaboration-for-data-products-84cf9b38cd52&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="cdc0" 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">An engineer’s perspective on engineering and data science collaboration for data products</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="/@cliu_88389?source=post_page---byline--84cf9b38cd52--------------------------------"><div class="l ib ic by id ie"><div class="l fj"><img alt="Chris Liu" class="l fd by dd de cx" src="https://miro.medium.com/v2/resize:fill:88:88/0*ECSDCjFKbFRqqOIr." 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/coursera-engineering?source=post_page---byline--84cf9b38cd52--------------------------------" rel="noopener follow"><div class="l ii ij by id ik"><div class="l fj"><img alt="Coursera Engineering" class="l fd by br il cx" src="https://miro.medium.com/v2/resize:fill:48:48/1*j2vLJO9qZg435iRYfd2Mfg.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="/@cliu_88389?source=post_page---byline--84cf9b38cd52--------------------------------">Chris Liu</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%2F70814e310ce3&amp;operation=register&amp;redirect=https%3A%2F%2Fmedium.com%2Fcoursera-engineering%2Fan-engineers-perspective-on-engineering-and-data-science-collaboration-for-data-products-84cf9b38cd52&amp;user=Chris+Liu&amp;userId=70814e310ce3&amp;source=post_page-70814e310ce3--byline--84cf9b38cd52---------------------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/coursera-engineering?source=post_page---byline--84cf9b38cd52--------------------------------" rel="noopener follow"><p class="bf b bg z jf jg jh ji jj jk jl jm bk">Coursera Engineering</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">7 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">May 20, 2019</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%2Fcoursera-engineering%2F84cf9b38cd52&amp;operation=register&amp;redirect=https%3A%2F%2Fmedium.com%2Fcoursera-engineering%2Fan-engineers-perspective-on-engineering-and-data-science-collaboration-for-data-products-84cf9b38cd52&amp;user=Chris+Liu&amp;userId=70814e310ce3&amp;source=---header_actions--84cf9b38cd52---------------------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 ls lt ab q fk lu lv" aria-label="responses"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" class="lr"><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><p class="bf b dv z du"><span class="pw-responses-count lq lr">1</span></p></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="lw 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%2F84cf9b38cd52&amp;operation=register&amp;redirect=https%3A%2F%2Fmedium.com%2Fcoursera-engineering%2Fan-engineers-perspective-on-engineering-and-data-science-collaboration-for-data-products-84cf9b38cd52&amp;source=---header_actions--84cf9b38cd52---------------------bookmark_footer-----------"><svg xmlns="http://www.w3.org/2000/svg" width="25" height="25" fill="none" viewBox="0 0 25 25" class="du lx" 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 ly cn"><div class="l ae"><div class="ab cb"><div class="lz ma mb mc md me 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 mf an ao ap ex mg mh lv mi mj mk ml mm s mn mo mp mq mr ms mt u mu mv mw"><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 mf an ao ap ex mg mh lv mi mj mk ml mm s mn mo mp mq mr ms mt u mu mv mw"><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="b6f2" class="pw-post-body-paragraph mx my gu mz b na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ns nt nu gn bk">Data products facilitate meeting an end goal through the use of data. At Coursera, we’ve built data products whose missions range from <a class="af nv" rel="noopener" href="/coursera-engineering/courseras-skills-graph-helps-learners-find-the-right-content-to-reach-their-goals-b10418a05214">facilitating better content discovery</a> to <a class="af nv" rel="noopener" href="/coursera-engineering/keeping-students-on-track-5d45e6b073ba">scaling learner interventions</a> to <a class="af nv" rel="noopener" href="/coursera-engineering/how-our-skills-benchmarking-technology-is-creating-value-for-companies-70a7e06e667f">benchmarking learners’ performance of various skills</a>. Each data product is a collaboration among product leaders, business leaders, data scientists, and engineers. Effective data products need effective collaborations between data scientists and engineers.</p><p id="2a46" class="pw-post-body-paragraph mx my gu mz b na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ns nt nu gn bk">What are the factors that go into an effective collaboration? While we don’t claim to have all the answers, this post explains three themes that have worked well for us at Coursera — all from the perspective of an engineer. The three themes are, first, <strong class="mz gv">define boundaries of focus, not boundaries of concern</strong>. Second, <strong class="mz gv">strike a balance between productionizing models and building platforms</strong>. And third, <strong class="mz gv">use data and SQL as the universal language</strong>.</p></div></div></div><div class="ab cb nw nx ny nz" role="separator"><span class="oa by bm ob oc od"></span><span class="oa by bm ob oc od"></span><span class="oa by bm ob oc"></span></div><div class="gn go gp gq gr"><div class="ab cb"><div class="ci bh fz ga gb gc"><p id="d33b" class="pw-post-body-paragraph mx my gu mz b na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ns nt nu gn bk"><strong class="mz gv">Define boundaries of focus, not boundaries of concern </strong>[h/t to Tyler Treat for this <a class="af nv" href="https://bravenewgeek.com/shit-rolls-downhill/" rel="noopener ugc nofollow" target="_blank">phrasing</a>]</p><p id="2071" class="pw-post-body-paragraph mx my gu mz b na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ns nt nu gn bk">When building data products together, data scientists and engineers should work within defined boundaries of focus. They are working on different parts of the system. Not everyone needs to be an expert in everything, and ownership of the various modules should be clear. Yet we’ve found it important for engineers to engage outside of this boundary.</p><p id="d339" class="pw-post-body-paragraph mx my gu mz b na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ns nt nu gn bk">This is because there is no cookie cutter formula for a data product―and thus there is a greater need for empathy. For engineers, viewing data product development work from the data scientist’s perspective has often yielded insights resulting in better work within the engineering domain.</p><p id="aee5" class="pw-post-body-paragraph mx my gu mz b na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ns nt nu gn bk">For example, we developed our experimentation platform as a collaboration between data scientists and engineers. The focus boundaries are as follows: Engineers built the allocation, measurement, and serving engine, while data scientists built the metric definitions, queries, and reporting engine.</p><p id="ea3a" class="pw-post-body-paragraph mx my gu mz b na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ns nt nu gn bk">But engineers were also concerned with how the data scientists computed the metrics and conducted experiments. As a result, we did readings of <a class="af nv" href="https://ai.stanford.edu/~ronnyk/ExPThinkWeek2009Public.pdf" rel="noopener ugc nofollow" target="_blank">experimentation best practices</a>, and collaborated closely with data scientists on validating assumptions. For instance, we were able to start with a <a class="af nv" href="https://en.wikipedia.org/wiki/Factorial_experiment" rel="noopener ugc nofollow" target="_blank">simple approach</a> while also preempting future <a class="af nv" href="https://www.theanalysisfactor.com/the-difference-between-crossed-and-nested-factors/" rel="noopener ugc nofollow" target="_blank">needs</a> in the area of experimental design. This axis of extension enhanced the usability of the system.</p><p id="cf6f" class="pw-post-body-paragraph mx my gu mz b na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ns nt nu gn bk">Defining boundaries of focus, not concern, results in:</p><ul class=""><li id="ef10" class="mx my gu mz b na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ns nt nu oe of og bk">A more cohesive output data product due to mutual empathy</li><li id="4dd5" class="mx my gu mz b na oh nc nd ne oi ng nh ni oj nk nl nm ok no np nq ol ns nt nu oe of og bk">Fulfillment of new and existing requirements with less churn and higher quality</li><li id="ef58" class="mx my gu mz b na oh nc nd ne oi ng nh ni oj nk nl nm ok no np nq ol ns nt nu oe of og bk">Opportunities for innovation at the intersection of boundaries</li></ul></div></div></div><div class="ab cb nw nx ny nz" role="separator"><span class="oa by bm ob oc od"></span><span class="oa by bm ob oc od"></span><span class="oa by bm ob oc"></span></div><div class="gn go gp gq gr"><div class="ab cb"><div class="ci bh fz ga gb gc"><p id="5fe0" class="pw-post-body-paragraph mx my gu mz b na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ns nt nu gn bk"><strong class="mz gv">Strike a balance between productionizing models and building platforms</strong></p><p id="42d6" class="pw-post-body-paragraph mx my gu mz b na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ns nt nu gn bk">Data products follow an <a class="af nv" href="https://firstround.com/review/everything-we-wish-wed-known-about-building-data-products/" rel="noopener ugc nofollow" target="_blank">iterative</a> development cycle. But how should we sequence between productionizing models and building platforms to support future models and features? As engineers, we may look down on one-offs or distasteful hacks, but the <a class="af nv" href="https://en.wikipedia.org/wiki/You_aren%27t_gonna_need_it" rel="noopener ugc nofollow" target="_blank">YAGNI</a> principle suggests doing the simplest thing that could possibly work. In product engineering, this is done by building a minimum viable product. But continuously productionizing models risks iterating toward a local optimum. Iteration by definition is incremental, while building a platform enables new capabilities.</p><p id="0fb7" class="pw-post-body-paragraph mx my gu mz b na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ns nt nu gn bk">We believe productionizing models is a necessary prerequisite to building a platform. Building a platform is like building an abstraction, as it grants the users capabilities without them needing to understand the details. Deciding what to put in the abstraction is the challenge. So much so that <a class="af nv" href="https://www.sandimetz.com/blog/2016/1/20/the-wrong-abstraction" rel="noopener ugc nofollow" target="_blank">duplication is often preferable to the wrong abstraction</a>. As a result, our initial investments in a new data product take the form of a minimum viable product. This product often requires manual work to iterate on, but is crucial to discovering patterns and high-value iteration paths. Those paths systemize into platforms. The platform provides a foundation for future iteration and new feature development by the data scientists.</p><p id="a92c" class="pw-post-body-paragraph mx my gu mz b na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ns nt nu gn bk">For the engineer, maintenance of the platform going forward is necessary, but they will have automated away a part of the previously manual workflow, and they have also increased the velocity of iteration. In our experience, the engineering maintenance cost is worth it.</p><figure class="op oq or os ot ou om on paragraph-image"><div class="om on oo"><picture><source srcSet="https://miro.medium.com/v2/resize:fit:640/format:webp/0*4j6BQio6WeXTkiK6 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/0*4j6BQio6WeXTkiK6 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/0*4j6BQio6WeXTkiK6 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/0*4j6BQio6WeXTkiK6 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/0*4j6BQio6WeXTkiK6 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/0*4j6BQio6WeXTkiK6 1100w, https://miro.medium.com/v2/resize:fit:1332/format:webp/0*4j6BQio6WeXTkiK6 1332w" 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, 666px" type="image/webp"/><source data-testid="og" srcSet="https://miro.medium.com/v2/resize:fit:640/0*4j6BQio6WeXTkiK6 640w, https://miro.medium.com/v2/resize:fit:720/0*4j6BQio6WeXTkiK6 720w, https://miro.medium.com/v2/resize:fit:750/0*4j6BQio6WeXTkiK6 750w, https://miro.medium.com/v2/resize:fit:786/0*4j6BQio6WeXTkiK6 786w, https://miro.medium.com/v2/resize:fit:828/0*4j6BQio6WeXTkiK6 828w, https://miro.medium.com/v2/resize:fit:1100/0*4j6BQio6WeXTkiK6 1100w, https://miro.medium.com/v2/resize:fit:1332/0*4j6BQio6WeXTkiK6 1332w" 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, 666px"/><img alt="" class="bh me ov c" width="666" height="528" loading="eager" role="presentation"/></picture></div><figcaption class="ow ff ox om on oy oz bf b bg z du">Personalized in-course coaching message within the learning experience</figcaption></figure><p id="5185" class="pw-post-body-paragraph mx my gu mz b na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ns nt nu gn bk">An example of how we struck a balance between productionizing models and building a platform is our <a class="af nv" rel="noopener" href="/coursera-engineering/in-course-help-2a475bf3bc2c">automated coaching</a> feature. In the present iteration, we have the capability to target messages to any learner segment and to personalize messages to each individual learner. We use a <a class="af nv" rel="noopener" href="/coursera-engineering/using-deep-learning-to-intervene-where-it-counts-aab76c7ce8dc">feedback loop</a> to control the volume and relevance of messages. Our automated coach can also <a class="af nv" rel="noopener" href="/coursera-engineering/the-power-of-goals-a5134b8d0e1f">collect learner goals</a> that we surface back to learners at later times. But this data product feature didn’t start out this way.</p><p id="6456" class="pw-post-body-paragraph mx my gu mz b na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ns nt nu gn bk">We first productionized an automated coaching feature capable only of sending generic messages to all learners doing a certain action during a certain course. We were able to track learners’ receptiveness to the various message types, and tested out various learning nudges, such as emphasizing a growth mindset.</p><p id="db3d" class="pw-post-body-paragraph mx my gu mz b na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ns nt nu gn bk">After iteration on the message types and copy, we saw big differences between messages in engagement and helpfulness rates. We also hypothesized additional use cases for these in-course coaching messages such as allowing learners to self-assess their competency on a module. At this point, building out a platform to enable high-value iterations became a necessary and natural next step.</p><p id="487b" class="pw-post-body-paragraph mx my gu mz b na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ns nt nu gn bk">Striking a balance between productionizing models and building platforms results in:</p><ul class=""><li id="5c46" class="mx my gu mz b na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ns nt nu oe of og bk">Speedy fulfillment of specific use cases</li><li id="c27d" class="mx my gu mz b na oh nc nd ne oi ng nh ni oj nk nl nm ok no np nq ol ns nt nu oe of og bk">New capabilities emerging as the right forward-looking features are systematized into a platform</li><li id="5808" class="mx my gu mz b na oh nc nd ne oi ng nh ni oj nk nl nm ok no np nq ol ns nt nu oe of og bk">An ability to steadily and iteratively improve data product features and impact</li></ul></div></div></div><div class="ab cb nw nx ny nz" role="separator"><span class="oa by bm ob oc od"></span><span class="oa by bm ob oc od"></span><span class="oa by bm ob oc"></span></div><div class="gn go gp gq gr"><div class="ab cb"><div class="ci bh fz ga gb gc"><p id="761d" class="pw-post-body-paragraph mx my gu mz b na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ns nt nu gn bk"><strong class="mz gv">Use data and SQL as the universal language</strong></p><p id="cb78" class="pw-post-body-paragraph mx my gu mz b na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ns nt nu gn bk">Data scientists at Coursera operate in R and Python, while engineers write Scala. There are a few viable approaches to bridging this difference when developing data products.</p><p id="9abb" class="pw-post-body-paragraph mx my gu mz b na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ns nt nu gn bk">One way is to train data scientists in Scala and engineers in R and Python. This approach is common in smaller organizations where individuals wear many hats.</p><p id="21ea" class="pw-post-body-paragraph mx my gu mz b na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ns nt nu gn bk">The pros of this approach are that coordination costs are minimal and flexibility is maximized. Engineers and data scientists jointly define and redefine the collaboration model on an as-needed basis for each data product. But engineers and data scientists with cross-trained skills are hard to find. This strategy also punishes high-performing engineers and data scientists who prefer to focus on their domain of expertise.</p><p id="66ad" class="pw-post-body-paragraph mx my gu mz b na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ns nt nu gn bk">A second way is to have data scientists own the model prototyping phase and engineers own the model productionizing phase. This approach is common in larger organizations that can afford to hire for specialized roles such as <a class="af nv" href="https://www.oreilly.com/ideas/what-are-machine-learning-engineers" rel="noopener ugc nofollow" target="_blank">machine learning engineers</a>.</p><p id="bbc2" class="pw-post-body-paragraph mx my gu mz b na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ns nt nu gn bk">The pro of this approach is that this specialization can bring efficiency. Domain expertise and industry best practices <a class="af nv" href="https://papers.nips.cc/paper/5656-hidden-technical-debt-in-machine-learning-systems.pdf" rel="noopener ugc nofollow" target="_blank">have</a> <a class="af nv" href="http://martin.zinkevich.org/rules_of_ml/rules_of_ml.pdf" rel="noopener ugc nofollow" target="_blank">emerged</a> <a class="af nv" href="https://arxiv.org/pdf/1812.02257.pdf" rel="noopener ugc nofollow" target="_blank">around</a> the ML engineering field. However, ownership questions arise as machine learning engineers need to interface with both front-end product engineers and data scientists to productionize a data product. Striking the right headcount balance among data scientists, machine learning engineers, and product engineers is another challenge.</p><p id="209a" class="pw-post-body-paragraph mx my gu mz b na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ns nt nu gn bk">A third way is to use data and SQL as the intermediary. In this approach, data is the lingua franca among data scientists and engineers. We’ve had good success with this approach in the past few years.</p><p id="a6f1" class="pw-post-body-paragraph mx my gu mz b na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ns nt nu gn bk">A benefit of this approach is that SQL + data is a constrained interface that requires minimal training to operate. Data is dumb. It is easy to inspect, visualize, and debug data using SQL, and it is easy to collaborate without hidden states, assumptions, and nuances. Furthermore, this approach tightens the iteration loop, as data scientists can iterate on a model from end to end. We think this approach works for the majority of cases. But we recognize there are scenarios where data is not an ideal interface. The two main scenarios are when we need to encode stateful operations in data, and when precomputation of results is onerous. In practice, we’ve found these scenarios to be infrequent and not first-order concerns.</p><p id="91f7" class="pw-post-body-paragraph mx my gu mz b na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ns nt nu gn bk">To use data and SQL as the universal language, we’ve had to build out and democratize our data warehouse, solve the problem of <a class="af nv" href="https://multithreaded.stitchfix.com/blog/2016/03/16/engineers-shouldnt-write-etl/" rel="noopener ugc nofollow" target="_blank">who writes ETLs</a> (answer: <a class="af nv" rel="noopener" href="/@zhaojunzhang/building-data-infrastructure-in-coursera-15441ebe18c2">everyone</a>), and <a class="af nv" rel="noopener" href="/@chuongdo/analytics-at-coursera-three-years-later-638498709ac8">provide interfaces, libraries, and tools</a> to make the data and SQL ubiquitous across the data science and engineering organizations.</p><figure class="op oq or os ot ou om on paragraph-image"><div role="button" tabindex="0" class="pb pc fj pd bh pe"><div class="om on pa"><picture><source srcSet="https://miro.medium.com/v2/resize:fit:640/format:webp/0*rvxR1udpDV7YaJfG 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/0*rvxR1udpDV7YaJfG 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/0*rvxR1udpDV7YaJfG 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/0*rvxR1udpDV7YaJfG 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/0*rvxR1udpDV7YaJfG 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/0*rvxR1udpDV7YaJfG 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/0*rvxR1udpDV7YaJfG 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/0*rvxR1udpDV7YaJfG 640w, https://miro.medium.com/v2/resize:fit:720/0*rvxR1udpDV7YaJfG 720w, https://miro.medium.com/v2/resize:fit:750/0*rvxR1udpDV7YaJfG 750w, https://miro.medium.com/v2/resize:fit:786/0*rvxR1udpDV7YaJfG 786w, https://miro.medium.com/v2/resize:fit:828/0*rvxR1udpDV7YaJfG 828w, https://miro.medium.com/v2/resize:fit:1100/0*rvxR1udpDV7YaJfG 1100w, https://miro.medium.com/v2/resize:fit:1400/0*rvxR1udpDV7YaJfG 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 me ov c" width="700" height="286" loading="eager" role="presentation"/></picture></div></div><figcaption class="ow ff ox om on oy oz bf b bg z du">“Based on your recent activity” recommendations module</figcaption></figure><p id="c9c2" class="pw-post-body-paragraph mx my gu mz b na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ns nt nu gn bk">An example of engineering and data science collaborating at the data boundary is our recommendations module infrastructure. It is a system that produces recommendations at various degrees of personalization. Recommendation modules range from fully personalized to the user (e.g., “Based on your recent activity”) to generic <a class="af nv" href="https://en.wikipedia.org/wiki/Cold_start_(computing)" rel="noopener ugc nofollow" target="_blank">cold start recommendations</a> to everything in between (e.g., “Because you viewed Machine Learning”).</p><p id="2070" class="pw-post-body-paragraph mx my gu mz b na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ns nt nu gn bk">Algorithms generating the recommendations range from matrix factorization to regression to rule-based queries. But data is an effective encapsulation — a combination of results, scores, and metadata is an effective internal API. It meets the characteristics of a <a class="af nv" href="https://static.googleusercontent.com/media/research.google.com/en//pubs/archive/32713.pdf" rel="noopener ugc nofollow" target="_blank">good API</a>: It’s easy for engineers to consume, easy for data scientists to produce, and sufficiently powerful for our use cases.</p><p id="d8e4" class="pw-post-body-paragraph mx my gu mz b na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ns nt nu gn bk">Using data and SQL as the universal language results in:</p><ul class=""><li id="f6dd" class="mx my gu mz b na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ns nt nu oe of og bk">Clear boundaries of focus between engineers as data consumers and data scientists as data producers</li><li id="2978" class="mx my gu mz b na oh nc nd ne oi ng nh ni oj nk nl nm ok no np nq ol ns nt nu oe of og bk">An understandable and debuggable interface</li><li id="4713" class="mx my gu mz b na oh nc nd ne oi ng nh ni oj nk nl nm ok no np nq ol ns nt nu oe of og bk">A common language between data scientists and engineers when collaborating on shared concerns</li></ul></div></div></div><div class="ab cb nw nx ny nz" role="separator"><span class="oa by bm ob oc od"></span><span class="oa by bm ob oc od"></span><span class="oa by bm ob oc"></span></div><div class="gn go gp gq gr"><div class="ab cb"><div class="ci bh fz ga gb gc"><p id="6f44" class="pw-post-body-paragraph mx my gu mz b na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ns nt nu gn bk">At Coursera, engineers and data scientists have <a class="af nv" rel="noopener" href="/coursera-engineering/how-a-b-testing-powers-pedagogy-on-coursera-2cd10ed8365e">built</a> <a class="af nv" rel="noopener" href="/coursera-engineering/how-our-skills-benchmarking-technology-is-creating-value-for-companies-70a7e06e667f">many</a> <a class="af nv" rel="noopener" href="/coursera-engineering/data-driven-content-categorization-89de0104bcbd">data</a> <a class="af nv" rel="noopener" href="/coursera-engineering/building-data-services-to-bring-education-to-millions-part-iii-d34e5f37303">products</a>. We’ve learned that building a data product is a <a class="af nv" href="https://hbr.org/2018/10/how-to-build-great-data-products" rel="noopener ugc nofollow" target="_blank">team sport</a>. As with any team, our goal is to be more than the sum of our parts through effective collaboration. This post has outlined three themes that worked well in our pursuit of this goal from an engineering perspective. Be on the lookout for a post from a data scientist’s perspective!</p><p id="e8c9" class="pw-post-body-paragraph mx my gu mz b na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ns nt nu gn bk"><em class="pf">Special thanks go to </em><a class="af nv" href="https://www.linkedin.com/in/egsands/" rel="noopener ugc nofollow" target="_blank"><em class="pf">Emily Glassberg Sands</em></a><em class="pf">, </em><a class="af nv" href="https://www.linkedin.com/in/vinod-bakthavachalam/" rel="noopener ugc nofollow" target="_blank"><em class="pf">Vinod Bakthavachalam</em></a><em class="pf">, </em><a class="af nv" href="https://www.linkedin.com/in/rmredd/" rel="noopener ugc nofollow" target="_blank"><em class="pf">Rachel Reddick</em></a><em class="pf">, </em><a class="af nv" href="https://www.linkedin.com/in/phil-cayting-2349824/" rel="noopener ugc nofollow" target="_blank"><em class="pf">Phil Cayting</em></a><em class="pf">, and </em><a class="af nv" href="https://www.linkedin.com/in/emkellerlogan/" rel="noopener ugc nofollow" target="_blank"><em class="pf">Emily Keller-Logan</em></a><em class="pf"> for providing feedback on the drafts.</em></p></div></div></div></div></section></div></div></article></div><div class="ab cb"><div class="ci bh fz ga gb gc"><div class="pg ph ab ja"><div class="pi ab"><a class="pj ay am ao" rel="noopener follow" href="/tag/data-science?source=post_page-----84cf9b38cd52--------------------------------"><div class="pk fj cx pl ge pm pn bf b bg z bk po">Data Science</div></a></div><div class="pi ab"><a class="pj ay am ao" rel="noopener follow" href="/tag/engineering?source=post_page-----84cf9b38cd52--------------------------------"><div class="pk fj cx pl ge pm pn bf b bg z bk po">Engineering</div></a></div><div class="pi ab"><a class="pj ay am ao" rel="noopener follow" href="/tag/data?source=post_page-----84cf9b38cd52--------------------------------"><div class="pk fj cx pl ge pm pn bf b bg z bk po">Data</div></a></div><div class="pi ab"><a class="pj ay am ao" rel="noopener follow" href="/tag/product-development?source=post_page-----84cf9b38cd52--------------------------------"><div class="pk fj cx pl ge pm pn bf b bg z bk po">Product Development</div></a></div><div class="pi ab"><a class="pj ay am ao" rel="noopener follow" href="/tag/collaboration?source=post_page-----84cf9b38cd52--------------------------------"><div class="pk fj cx pl ge pm pn bf b bg z bk po">Collaboration</div></a></div></div></div></div><div class="l"></div><footer class="pp nx pq pr ps ab q pt ik c"><div class="l ae"><div class="ab cb"><div class="ci bh fz ga gb gc"><div class="ab cp pu"><div class="ab q kv"><div class="pv l"><span class="l pw px py 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%2Fcoursera-engineering%2F84cf9b38cd52&amp;operation=register&amp;redirect=https%3A%2F%2Fmedium.com%2Fcoursera-engineering%2Fan-engineers-perspective-on-engineering-and-data-science-collaboration-for-data-products-84cf9b38cd52&amp;user=Chris+Liu&amp;userId=70814e310ce3&amp;source=---footer_actions--84cf9b38cd52---------------------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 pz qa"><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%2Fcoursera-engineering%2F84cf9b38cd52&amp;operation=register&amp;redirect=https%3A%2F%2Fmedium.com%2Fcoursera-engineering%2Fan-engineers-perspective-on-engineering-and-data-science-collaboration-for-data-products-84cf9b38cd52&amp;user=Chris+Liu&amp;userId=70814e310ce3&amp;source=---footer_actions--84cf9b38cd52---------------------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 ls lt ab q fk lu lv" aria-label="responses"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" class="lr"><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><p class="bf b bg z du"><span class="pw-responses-count lq lr">1</span></p></button></div></div></div></div><div class="ab q"><div class="od 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%2F84cf9b38cd52&amp;operation=register&amp;redirect=https%3A%2F%2Fmedium.com%2Fcoursera-engineering%2Fan-engineers-perspective-on-engineering-and-data-science-collaboration-for-data-products-84cf9b38cd52&amp;source=---footer_actions--84cf9b38cd52---------------------bookmark_footer-----------"><svg xmlns="http://www.w3.org/2000/svg" width="25" height="25" fill="none" viewBox="0 0 25 25" class="du lx" 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="od 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 mf an ao ap ex mg mh lv mi"><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="qb qc qd qe qf l"><div class="ab cb"><div class="ci bh fz ga gb gc"><div class="qg bh r qh"></div><div class="qi l"><div class="ab qj qk ql iz iy"><div class="qm qn qo qp qq qr qs qt qu qv ab cp"><div class="h k"><a href="https://medium.com/coursera-engineering?source=post_page---post_publication_info--84cf9b38cd52--------------------------------" rel="noopener follow"><div class="fj ab"><img alt="Coursera Engineering" class="qw ib ic cx" src="https://miro.medium.com/v2/resize:fill:96:96/1*j2vLJO9qZg435iRYfd2Mfg.png" width="48" height="48" loading="lazy"/><div class="qw l ic ib fs n fr qx"></div></div></a></div><div class="j i d"><a href="https://medium.com/coursera-engineering?source=post_page---post_publication_info--84cf9b38cd52--------------------------------" rel="noopener follow"><div class="fj ab"><img alt="Coursera Engineering" class="qw qz qy cx" src="https://miro.medium.com/v2/resize:fill:128:128/1*j2vLJO9qZg435iRYfd2Mfg.png" width="64" height="64" loading="lazy"/><div class="qw l qy qz fs n fr qx"></div></div></a></div><div class="j i d ra ix"><div class="ab"></div></div></div><div class="ab co rb"><div class="rc rd re rf rg l"><a class="af ag ah aj ak al am an ao ap aq ar as at ab q" href="https://medium.com/coursera-engineering?source=post_page---post_publication_info--84cf9b38cd52--------------------------------" rel="noopener follow"><h2 class="pw-author-name bf ri rj rk rl rm rn ro ni rp rq nm rr rs nq rt ru bk"><span class="gn rh">Published in <!-- -->Coursera Engineering</span></h2></a><div class="pi 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="/coursera-engineering/followers?source=post_page---post_publication_info--84cf9b38cd52--------------------------------">3.7K 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="/coursera-engineering/two-easy-ways-to-determine-right-size-for-aws-rds-instance-through-request-mirroring-load-test-9cd6e8ac8b5c?source=post_page---post_publication_info--84cf9b38cd52--------------------------------">Last published <span>Jan 3, 2023</span></a></div></div><div class="rv l"><p class="bf b bg z bk"><span class="gn">We&#x27;re changing the way the world learns! Posts from Coursera engineers and data scientists.</span></p></div></div></div><div class="h k"><div class="ab"></div></div></div></div><div class="ab qj qk ql iz iy"><div class="qm qn qo qp qq qr qs qt qu qv ab cp"><div class="h k"><a tabindex="0" rel="noopener follow" href="/@cliu_88389?source=post_page---post_author_info--84cf9b38cd52--------------------------------"><div class="l fj"><img alt="Chris Liu" class="l fd by ic ib cx" src="https://miro.medium.com/v2/resize:fill:96:96/0*ECSDCjFKbFRqqOIr." width="48" height="48" loading="lazy"/><div class="fr by l ic ib fs n ay qx"></div></div></a></div><div class="j i d"><a tabindex="0" rel="noopener follow" href="/@cliu_88389?source=post_page---post_author_info--84cf9b38cd52--------------------------------"><div class="l fj"><img alt="Chris Liu" class="l fd by qy qz cx" src="https://miro.medium.com/v2/resize:fill:128:128/0*ECSDCjFKbFRqqOIr." width="64" height="64" loading="lazy"/><div class="fr by l qy qz fs n ay qx"></div></div></a></div><div class="j i d ra ix"><div class="ab"><span><button class="bf b bg z rw pk rx ry rz sa sb ev ew sc sd se fa fb fc fd bm fe ff">Follow</button></span></div></div></div><div class="ab co rb"><div class="rc rd re rf rg l"><a class="af ag ah aj ak al am an ao ap aq ar as at ab q" rel="noopener follow" href="/@cliu_88389?source=post_page---post_author_info--84cf9b38cd52--------------------------------"><h2 class="pw-author-name bf ri rj rk rl rm rn ro ni rp rq nm rr rs nq rt ru bk"><span class="gn rh">Written by <!-- -->Chris Liu</span></h2></a><div class="pi 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="/@cliu_88389/followers?source=post_page---post_author_info--84cf9b38cd52--------------------------------">104 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="/@cliu_88389/following?source=post_page---post_author_info--84cf9b38cd52--------------------------------">4 Following</a></div></div><div class="rv l"><p class="bf b bg z bk"><span class="gn">Passionate about education and solving hard problems in a collaborative fashion.</span></p></div></div></div><div class="h k"><div class="ab"><span><button class="bf b bg z rw pk rx ry rz sa sb ev ew sc sd se fa fb fc fd bm fe ff">Follow</button></span></div></div></div></div></div></div><div class="sf sg sh si sj l"><div class="qg bh r sf sg sk sl sm"></div><div class="ab cb"><div class="ci bh fz ga gb gc"><div class="ab q cp"><h2 class="bf ri sn so sp sq sr ss st su sv sw sx sy sz ta tb bk">Responses (<!-- -->1<!-- -->)</h2><div class="ab tc"><div><div class="bm" aria-hidden="false"><a class="td te" href="https://policy.medium.com/medium-rules-30e5502c4eb4?source=post_page---post_responses--84cf9b38cd52--------------------------------" 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 class="nw l"><button class="bf b bg z bk pk tf tg th lx lu sb ev ew ex ti tj tk fa tl tm tn to tp fb fc fd bm fe ff">See all responses</button></div></div></div></div><div class="tq tr ts tt tu l bx"><div class="h k j"><div class="qg bh tv tw"></div><div class="ab cb"><div class="ci bh fz ga gb gc"><div class="tx ab kv ja"><div class="ty tz 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-----84cf9b38cd52--------------------------------" rel="noopener follow"><p class="bf b dv z du">Help</p></a></div><div class="ty tz 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-----84cf9b38cd52--------------------------------" rel="noopener follow"><p class="bf b dv z du">Status</p></a></div><div class="ty tz 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-----84cf9b38cd52--------------------------------"><p class="bf b dv z du">About</p></a></div><div class="ty tz 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-----84cf9b38cd52--------------------------------"><p class="bf b dv z du">Careers</p></a></div><div class="ty tz 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-----84cf9b38cd52--------------------------------" rel="noopener follow"><p class="bf b dv z du">Press</p></a></div><div class="ty tz 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-----84cf9b38cd52--------------------------------" rel="noopener follow"><p class="bf b dv z du">Blog</p></a></div><div class="ty tz 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-----84cf9b38cd52--------------------------------" rel="noopener follow"><p class="bf b dv z du">Privacy</p></a></div><div class="ty tz 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-----84cf9b38cd52--------------------------------" rel="noopener follow"><p class="bf b dv z du">Terms</p></a></div><div class="ty tz 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-----84cf9b38cd52--------------------------------" rel="noopener follow"><p class="bf b dv z du">Text to speech</p></a></div><div class="ty 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-----84cf9b38cd52--------------------------------"><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-20241122-185319-7bcdc08639"</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-84cf9b38cd52","user-70814e310ce3","collection-532b19e4043c"],"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":"1a4dba45-b6eb-4049-bf87-403b8e238e7a","hybridDevServices":[],"originalSpanCarrier":{"traceparent":"00-19f5a87eb58308bb12883b825ba48f96-b5bba2600780bd5b-01"}},"multiVote":{"clapsPerPost":{}},"navigation":{"branch":{"show":null,"hasRendered":null,"blockedByCTA":false},"hideGoogleOneTap":false,"hasRenderedAlternateUserBanner":null,"currentLocation":"https:\u002F\u002Fmedium.com\u002Fcoursera-engineering\u002Fan-engineers-perspective-on-engineering-and-data-science-collaboration-for-data-products-84cf9b38cd52","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-20241122-185319-7bcdc08639","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-20241122-185319-7bcdc08639","commit":"7bcdc08639c179dc5172558201a3fd3abc1b5db6"}},"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__ = {"ImageMetadata:":{"__typename":"ImageMetadata","id":""},"Collection:532b19e4043c":{"__typename":"Collection","id":"532b19e4043c","favicon":{"__ref":"ImageMetadata:"},"customStyleSheet":null,"colorPalette":{"__typename":"ColorPalette","highlightSpectrum":{"__typename":"ColorSpectrum","backgroundColor":"#FFFFFFFF","colorPoints":[{"__typename":"ColorPoint","color":"#FFECF3FF","point":0},{"__typename":"ColorPoint","color":"#FFE8F2FF","point":0.1},{"__typename":"ColorPoint","color":"#FFE5F0FF","point":0.2},{"__typename":"ColorPoint","color":"#FFE1EFFF","point":0.3},{"__typename":"ColorPoint","color":"#FFDDEDFF","point":0.4},{"__typename":"ColorPoint","color":"#FFD9EBFF","point":0.5},{"__typename":"ColorPoint","color":"#FFD6EAFF","point":0.6},{"__typename":"ColorPoint","color":"#FFD2E8FF","point":0.7},{"__typename":"ColorPoint","color":"#FFCEE6FF","point":0.8},{"__typename":"ColorPoint","color":"#FFCAE5FF","point":0.9},{"__typename":"ColorPoint","color":"#FFC6E3FF","point":1}]},"defaultBackgroundSpectrum":{"__typename":"ColorSpectrum","backgroundColor":"#FFFFFFFF","colorPoints":[{"__typename":"ColorPoint","color":"#FF6388BF","point":0},{"__typename":"ColorPoint","color":"#FF5D7EB0","point":0.1},{"__typename":"ColorPoint","color":"#FF5775A1","point":0.2},{"__typename":"ColorPoint","color":"#FF516B91","point":0.3},{"__typename":"ColorPoint","color":"#FF4A6182","point":0.4},{"__typename":"ColorPoint","color":"#FF435673","point":0.5},{"__typename":"ColorPoint","color":"#FF3C4B63","point":0.6},{"__typename":"ColorPoint","color":"#FF334054","point":0.7},{"__typename":"ColorPoint","color":"#FF2A3444","point":0.8},{"__typename":"ColorPoint","color":"#FF202833","point":0.9},{"__typename":"ColorPoint","color":"#FF151B23","point":1}]},"tintBackgroundSpectrum":{"__typename":"ColorSpectrum","backgroundColor":"#FF82A8E1","colorPoints":[{"__typename":"ColorPoint","color":"#FF82A8E1","point":0},{"__typename":"ColorPoint","color":"#FF8FB1E6","point":0.1},{"__typename":"ColorPoint","color":"#FF9CBBEA","point":0.2},{"__typename":"ColorPoint","color":"#FFA8C4EF","point":0.3},{"__typename":"ColorPoint","color":"#FFB4CDF3","point":0.4},{"__typename":"ColorPoint","color":"#FFC0D6F7","point":0.5},{"__typename":"ColorPoint","color":"#FFCCDEFB","point":0.6},{"__typename":"ColorPoint","color":"#FFD8E7FF","point":0.7},{"__typename":"ColorPoint","color":"#FFE3EFFF","point":0.8},{"__typename":"ColorPoint","color":"#FFEFF7FF","point":0.9},{"__typename":"ColorPoint","color":"#FFFAFFFF","point":1}]}},"domain":null,"slug":"coursera-engineering","googleAnalyticsId":null,"editors":[{"__typename":"CollectionMastheadUserItem","user":{"__ref":"User:d987eade03ed"}},{"__typename":"CollectionMastheadUserItem","user":{"__ref":"User:80624ba8fd79"}},{"__typename":"CollectionMastheadUserItem","user":{"__ref":"User:7b91bcea825"}},{"__typename":"CollectionMastheadUserItem","user":{"__ref":"User:70814e310ce3"}},{"__typename":"CollectionMastheadUserItem","user":{"__ref":"User:9999dd095c18"}}],"name":"Coursera Engineering","avatar":{"__ref":"ImageMetadata:1*j2vLJO9qZg435iRYfd2Mfg.png"},"description":"We're changing the way the world learns! Posts from Coursera engineers and data scientists.","subscriberCount":3778,"latestPostsConnection({\"paging\":{\"limit\":1}})":{"__typename":"PostConnection","posts":[{"__ref":"Post:9cd6e8ac8b5c"}]},"viewerEdge":{"__ref":"CollectionViewerEdge:collectionId:532b19e4043c-viewerId:lo_b05e453ae2e4"},"twitterUsername":"CourseraEng","facebookPageId":null,"logo":{"__ref":"ImageMetadata:1*zXjOKA4JKHH04Ipi2NI0jA.png"}},"ROOT_QUERY":{"__typename":"Query","collectionByDomainOrSlug({\"domainOrSlug\":\"coursera-engineering\"})":{"__ref":"Collection:532b19e4043c"},"viewer":null,"postResult({\"id\":\"84cf9b38cd52\"})":{"__ref":"Post:84cf9b38cd52"}},"User:d987eade03ed":{"__typename":"User","id":"d987eade03ed"},"User:80624ba8fd79":{"__typename":"User","id":"80624ba8fd79"},"User:7b91bcea825":{"__typename":"User","id":"7b91bcea825"},"User:70814e310ce3":{"__typename":"User","id":"70814e310ce3","name":"Chris Liu","username":"cliu_88389","newsletterV3":{"__ref":"NewsletterV3:7a2621dc9ad7"},"linkedAccounts":{"__ref":"LinkedAccounts:70814e310ce3"},"isSuspended":false,"imageId":"0*ECSDCjFKbFRqqOIr.","mediumMemberAt":0,"verifications":{"__typename":"VerifiedInfo","isBookAuthor":false},"socialStats":{"__typename":"SocialStats","followerCount":104,"followingCount":3,"collectionFollowingCount":1},"customDomainState":null,"hasSubdomain":false,"bio":"Passionate about education and solving hard problems in a collaborative fashion.","isPartnerProgramEnrolled":false,"viewerEdge":{"__ref":"UserViewerEdge:userId:70814e310ce3-viewerId:lo_b05e453ae2e4"},"viewerIsUser":false,"postSubscribeMembershipUpsellShownAt":0,"membership":null,"allowNotes":true,"twitterScreenName":""},"User:9999dd095c18":{"__typename":"User","id":"9999dd095c18"},"ImageMetadata:1*j2vLJO9qZg435iRYfd2Mfg.png":{"__typename":"ImageMetadata","id":"1*j2vLJO9qZg435iRYfd2Mfg.png"},"User:dbd909ab7ead":{"__typename":"User","id":"dbd909ab7ead","customDomainState":{"__typename":"CustomDomainState","live":{"__typename":"CustomDomain","domain":"mengying-li.medium.com"}},"hasSubdomain":true,"username":"mengying-li"},"Post:9cd6e8ac8b5c":{"__typename":"Post","id":"9cd6e8ac8b5c","firstPublishedAt":1672713676343,"creator":{"__ref":"User:dbd909ab7ead"},"collection":{"__ref":"Collection:532b19e4043c"},"isSeries":false,"mediumUrl":"https:\u002F\u002Fmedium.com\u002Fcoursera-engineering\u002Ftwo-easy-ways-to-determine-right-size-for-aws-rds-instance-through-request-mirroring-load-test-9cd6e8ac8b5c","sequence":null,"uniqueSlug":"two-easy-ways-to-determine-right-size-for-aws-rds-instance-through-request-mirroring-load-test-9cd6e8ac8b5c"},"LinkedAccounts:70814e310ce3":{"__typename":"LinkedAccounts","mastodon":null,"id":"70814e310ce3"},"UserViewerEdge:userId:70814e310ce3-viewerId:lo_b05e453ae2e4":{"__typename":"UserViewerEdge","id":"userId:70814e310ce3-viewerId:lo_b05e453ae2e4","isFollowing":false,"isUser":false,"isMuting":false},"NewsletterV3:7a2621dc9ad7":{"__typename":"NewsletterV3","id":"7a2621dc9ad7","type":"NEWSLETTER_TYPE_AUTHOR","slug":"70814e310ce3","name":"70814e310ce3","collection":null,"user":{"__ref":"User:70814e310ce3"}},"Topic:ae5d4995e225":{"__typename":"Topic","slug":"data-science","id":"ae5d4995e225","name":"Data Science"},"Paragraph:82d5b0d3de7c_0":{"__typename":"Paragraph","id":"82d5b0d3de7c_0","name":"cdc0","type":"H3","href":null,"layout":null,"metadata":null,"text":"An engineer’s perspective on engineering and data science collaboration for data products","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:82d5b0d3de7c_1":{"__typename":"Paragraph","id":"82d5b0d3de7c_1","name":"b6f2","type":"P","href":null,"layout":null,"metadata":null,"text":"Data products facilitate meeting an end goal through the use of data. At Coursera, we’ve built data products whose missions range from facilitating better content discovery to scaling learner interventions to benchmarking learners’ performance of various skills. Each data product is a collaboration among product leaders, business leaders, data scientists, and engineers. Effective data products need effective collaborations between data scientists and engineers.","hasDropCap":null,"dropCapImage":null,"markups":[{"__typename":"Markup","type":"A","start":135,"end":172,"href":"https:\u002F\u002Fmedium.com\u002Fcoursera-engineering\u002Fcourseras-skills-graph-helps-learners-find-the-right-content-to-reach-their-goals-b10418a05214","anchorType":"LINK","userId":null,"linkMetadata":null},{"__typename":"Markup","type":"A","start":176,"end":205,"href":"https:\u002F\u002Fmedium.com\u002Fcoursera-engineering\u002Fkeeping-students-on-track-5d45e6b073ba","anchorType":"LINK","userId":null,"linkMetadata":null},{"__typename":"Markup","type":"A","start":209,"end":261,"href":"https:\u002F\u002Fmedium.com\u002Fcoursera-engineering\u002Fhow-our-skills-benchmarking-technology-is-creating-value-for-companies-70a7e06e667f","anchorType":"LINK","userId":null,"linkMetadata":null}],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:82d5b0d3de7c_2":{"__typename":"Paragraph","id":"82d5b0d3de7c_2","name":"2a46","type":"P","href":null,"layout":null,"metadata":null,"text":"What are the factors that go into an effective collaboration? While we don’t claim to have all the answers, this post explains three themes that have worked well for us at Coursera — all from the perspective of an engineer. The three themes are, first, define boundaries of focus, not boundaries of concern. Second, strike a balance between productionizing models and building platforms. And third, use data and SQL as the universal language.","hasDropCap":null,"dropCapImage":null,"markups":[{"__typename":"Markup","type":"STRONG","start":253,"end":306,"href":null,"anchorType":null,"userId":null,"linkMetadata":null},{"__typename":"Markup","type":"STRONG","start":316,"end":386,"href":null,"anchorType":null,"userId":null,"linkMetadata":null},{"__typename":"Markup","type":"STRONG","start":399,"end":441,"href":null,"anchorType":null,"userId":null,"linkMetadata":null}],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:82d5b0d3de7c_3":{"__typename":"Paragraph","id":"82d5b0d3de7c_3","name":"d33b","type":"P","href":null,"layout":null,"metadata":null,"text":"Define boundaries of focus, not boundaries of concern [h\u002Ft to Tyler Treat for this phrasing]","hasDropCap":null,"dropCapImage":null,"markups":[{"__typename":"Markup","type":"A","start":83,"end":91,"href":"https:\u002F\u002Fbravenewgeek.com\u002Fshit-rolls-downhill\u002F","anchorType":"LINK","userId":null,"linkMetadata":null},{"__typename":"Markup","type":"STRONG","start":0,"end":54,"href":null,"anchorType":null,"userId":null,"linkMetadata":null}],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:82d5b0d3de7c_4":{"__typename":"Paragraph","id":"82d5b0d3de7c_4","name":"2071","type":"P","href":null,"layout":null,"metadata":null,"text":"When building data products together, data scientists and engineers should work within defined boundaries of focus. They are working on different parts of the system. Not everyone needs to be an expert in everything, and ownership of the various modules should be clear. Yet we’ve found it important for engineers to engage outside of this boundary.","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:82d5b0d3de7c_5":{"__typename":"Paragraph","id":"82d5b0d3de7c_5","name":"d339","type":"P","href":null,"layout":null,"metadata":null,"text":"This is because there is no cookie cutter formula for a data product―and thus there is a greater need for empathy. For engineers, viewing data product development work from the data scientist’s perspective has often yielded insights resulting in better work within the engineering domain.","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:82d5b0d3de7c_6":{"__typename":"Paragraph","id":"82d5b0d3de7c_6","name":"aee5","type":"P","href":null,"layout":null,"metadata":null,"text":"For example, we developed our experimentation platform as a collaboration between data scientists and engineers. The focus boundaries are as follows: Engineers built the allocation, measurement, and serving engine, while data scientists built the metric definitions, queries, and reporting engine.","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:82d5b0d3de7c_7":{"__typename":"Paragraph","id":"82d5b0d3de7c_7","name":"ea3a","type":"P","href":null,"layout":null,"metadata":null,"text":"But engineers were also concerned with how the data scientists computed the metrics and conducted experiments. As a result, we did readings of experimentation best practices, and collaborated closely with data scientists on validating assumptions. For instance, we were able to start with a simple approach while also preempting future needs in the area of experimental design. This axis of extension enhanced the usability of the system.","hasDropCap":null,"dropCapImage":null,"markups":[{"__typename":"Markup","type":"A","start":143,"end":173,"href":"https:\u002F\u002Fai.stanford.edu\u002F~ronnyk\u002FExPThinkWeek2009Public.pdf","anchorType":"LINK","userId":null,"linkMetadata":null},{"__typename":"Markup","type":"A","start":291,"end":306,"href":"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FFactorial_experiment","anchorType":"LINK","userId":null,"linkMetadata":null},{"__typename":"Markup","type":"A","start":336,"end":341,"href":"https:\u002F\u002Fwww.theanalysisfactor.com\u002Fthe-difference-between-crossed-and-nested-factors\u002F","anchorType":"LINK","userId":null,"linkMetadata":null}],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:82d5b0d3de7c_8":{"__typename":"Paragraph","id":"82d5b0d3de7c_8","name":"cf6f","type":"P","href":null,"layout":null,"metadata":null,"text":"Defining boundaries of focus, not concern, results in:","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:82d5b0d3de7c_9":{"__typename":"Paragraph","id":"82d5b0d3de7c_9","name":"ef10","type":"ULI","href":null,"layout":null,"metadata":null,"text":"A more cohesive output data product due to mutual empathy","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:82d5b0d3de7c_10":{"__typename":"Paragraph","id":"82d5b0d3de7c_10","name":"4dd5","type":"ULI","href":null,"layout":null,"metadata":null,"text":"Fulfillment of new and existing requirements with less churn and higher quality","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:82d5b0d3de7c_11":{"__typename":"Paragraph","id":"82d5b0d3de7c_11","name":"ef58","type":"ULI","href":null,"layout":null,"metadata":null,"text":"Opportunities for innovation at the intersection of boundaries","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:82d5b0d3de7c_12":{"__typename":"Paragraph","id":"82d5b0d3de7c_12","name":"5fe0","type":"P","href":null,"layout":null,"metadata":null,"text":"Strike a balance between productionizing models and building platforms","hasDropCap":null,"dropCapImage":null,"markups":[{"__typename":"Markup","type":"STRONG","start":0,"end":70,"href":null,"anchorType":null,"userId":null,"linkMetadata":null}],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:82d5b0d3de7c_13":{"__typename":"Paragraph","id":"82d5b0d3de7c_13","name":"42d6","type":"P","href":null,"layout":null,"metadata":null,"text":"Data products follow an iterative development cycle. But how should we sequence between productionizing models and building platforms to support future models and features? As engineers, we may look down on one-offs or distasteful hacks, but the YAGNI principle suggests doing the simplest thing that could possibly work. In product engineering, this is done by building a minimum viable product. But continuously productionizing models risks iterating toward a local optimum. Iteration by definition is incremental, while building a platform enables new capabilities.","hasDropCap":null,"dropCapImage":null,"markups":[{"__typename":"Markup","type":"A","start":24,"end":33,"href":"https:\u002F\u002Ffirstround.com\u002Freview\u002Feverything-we-wish-wed-known-about-building-data-products\u002F","anchorType":"LINK","userId":null,"linkMetadata":null},{"__typename":"Markup","type":"A","start":246,"end":251,"href":"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FYou_aren%27t_gonna_need_it","anchorType":"LINK","userId":null,"linkMetadata":null}],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:82d5b0d3de7c_14":{"__typename":"Paragraph","id":"82d5b0d3de7c_14","name":"0fb7","type":"P","href":null,"layout":null,"metadata":null,"text":"We believe productionizing models is a necessary prerequisite to building a platform. Building a platform is like building an abstraction, as it grants the users capabilities without them needing to understand the details. Deciding what to put in the abstraction is the challenge. So much so that duplication is often preferable to the wrong abstraction. As a result, our initial investments in a new data product take the form of a minimum viable product. This product often requires manual work to iterate on, but is crucial to discovering patterns and high-value iteration paths. Those paths systemize into platforms. The platform provides a foundation for future iteration and new feature development by the data scientists.","hasDropCap":null,"dropCapImage":null,"markups":[{"__typename":"Markup","type":"A","start":297,"end":353,"href":"https:\u002F\u002Fwww.sandimetz.com\u002Fblog\u002F2016\u002F1\u002F20\u002Fthe-wrong-abstraction","anchorType":"LINK","userId":null,"linkMetadata":null}],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:82d5b0d3de7c_15":{"__typename":"Paragraph","id":"82d5b0d3de7c_15","name":"a92c","type":"P","href":null,"layout":null,"metadata":null,"text":"For the engineer, maintenance of the platform going forward is necessary, but they will have automated away a part of the previously manual workflow, and they have also increased the velocity of iteration. In our experience, the engineering maintenance cost is worth it.","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"ImageMetadata:0*4j6BQio6WeXTkiK6":{"__typename":"ImageMetadata","id":"0*4j6BQio6WeXTkiK6","originalHeight":528,"originalWidth":666,"focusPercentX":null,"focusPercentY":null,"alt":null},"Paragraph:82d5b0d3de7c_16":{"__typename":"Paragraph","id":"82d5b0d3de7c_16","name":"3c93","type":"IMG","href":null,"layout":"INSET_CENTER","metadata":{"__ref":"ImageMetadata:0*4j6BQio6WeXTkiK6"},"text":"Personalized in-course coaching message within the learning experience","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:82d5b0d3de7c_17":{"__typename":"Paragraph","id":"82d5b0d3de7c_17","name":"5185","type":"P","href":null,"layout":null,"metadata":null,"text":"An example of how we struck a balance between productionizing models and building a platform is our automated coaching feature. In the present iteration, we have the capability to target messages to any learner segment and to personalize messages to each individual learner. We use a feedback loop to control the volume and relevance of messages. Our automated coach can also collect learner goals that we surface back to learners at later times. But this data product feature didn’t start out this way.","hasDropCap":null,"dropCapImage":null,"markups":[{"__typename":"Markup","type":"A","start":100,"end":118,"href":"https:\u002F\u002Fmedium.com\u002Fcoursera-engineering\u002Fin-course-help-2a475bf3bc2c","anchorType":"LINK","userId":null,"linkMetadata":null},{"__typename":"Markup","type":"A","start":284,"end":297,"href":"https:\u002F\u002Fmedium.com\u002Fcoursera-engineering\u002Fusing-deep-learning-to-intervene-where-it-counts-aab76c7ce8dc","anchorType":"LINK","userId":null,"linkMetadata":null},{"__typename":"Markup","type":"A","start":376,"end":397,"href":"https:\u002F\u002Fmedium.com\u002Fcoursera-engineering\u002Fthe-power-of-goals-a5134b8d0e1f","anchorType":"LINK","userId":null,"linkMetadata":null}],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:82d5b0d3de7c_18":{"__typename":"Paragraph","id":"82d5b0d3de7c_18","name":"6456","type":"P","href":null,"layout":null,"metadata":null,"text":"We first productionized an automated coaching feature capable only of sending generic messages to all learners doing a certain action during a certain course. We were able to track learners’ receptiveness to the various message types, and tested out various learning nudges, such as emphasizing a growth mindset.","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:82d5b0d3de7c_19":{"__typename":"Paragraph","id":"82d5b0d3de7c_19","name":"db3d","type":"P","href":null,"layout":null,"metadata":null,"text":"After iteration on the message types and copy, we saw big differences between messages in engagement and helpfulness rates. We also hypothesized additional use cases for these in-course coaching messages such as allowing learners to self-assess their competency on a module. At this point, building out a platform to enable high-value iterations became a necessary and natural next step.","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:82d5b0d3de7c_20":{"__typename":"Paragraph","id":"82d5b0d3de7c_20","name":"487b","type":"P","href":null,"layout":null,"metadata":null,"text":"Striking a balance between productionizing models and building platforms results in:","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:82d5b0d3de7c_21":{"__typename":"Paragraph","id":"82d5b0d3de7c_21","name":"5c46","type":"ULI","href":null,"layout":null,"metadata":null,"text":"Speedy fulfillment of specific use cases","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:82d5b0d3de7c_22":{"__typename":"Paragraph","id":"82d5b0d3de7c_22","name":"c27d","type":"ULI","href":null,"layout":null,"metadata":null,"text":"New capabilities emerging as the right forward-looking features are systematized into a platform","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:82d5b0d3de7c_23":{"__typename":"Paragraph","id":"82d5b0d3de7c_23","name":"5808","type":"ULI","href":null,"layout":null,"metadata":null,"text":"An ability to steadily and iteratively improve data product features and impact","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:82d5b0d3de7c_24":{"__typename":"Paragraph","id":"82d5b0d3de7c_24","name":"761d","type":"P","href":null,"layout":null,"metadata":null,"text":"Use data and SQL as the universal language","hasDropCap":null,"dropCapImage":null,"markups":[{"__typename":"Markup","type":"STRONG","start":0,"end":42,"href":null,"anchorType":null,"userId":null,"linkMetadata":null}],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:82d5b0d3de7c_25":{"__typename":"Paragraph","id":"82d5b0d3de7c_25","name":"cb78","type":"P","href":null,"layout":null,"metadata":null,"text":"Data scientists at Coursera operate in R and Python, while engineers write Scala. There are a few viable approaches to bridging this difference when developing data products.","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:82d5b0d3de7c_26":{"__typename":"Paragraph","id":"82d5b0d3de7c_26","name":"9abb","type":"P","href":null,"layout":null,"metadata":null,"text":"One way is to train data scientists in Scala and engineers in R and Python. This approach is common in smaller organizations where individuals wear many hats.","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:82d5b0d3de7c_27":{"__typename":"Paragraph","id":"82d5b0d3de7c_27","name":"21ea","type":"P","href":null,"layout":null,"metadata":null,"text":"The pros of this approach are that coordination costs are minimal and flexibility is maximized. Engineers and data scientists jointly define and redefine the collaboration model on an as-needed basis for each data product. But engineers and data scientists with cross-trained skills are hard to find. This strategy also punishes high-performing engineers and data scientists who prefer to focus on their domain of expertise.","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:82d5b0d3de7c_28":{"__typename":"Paragraph","id":"82d5b0d3de7c_28","name":"66ad","type":"P","href":null,"layout":null,"metadata":null,"text":"A second way is to have data scientists own the model prototyping phase and engineers own the model productionizing phase. This approach is common in larger organizations that can afford to hire for specialized roles such as machine learning engineers.","hasDropCap":null,"dropCapImage":null,"markups":[{"__typename":"Markup","type":"A","start":225,"end":251,"href":"https:\u002F\u002Fwww.oreilly.com\u002Fideas\u002Fwhat-are-machine-learning-engineers","anchorType":"LINK","userId":null,"linkMetadata":null}],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:82d5b0d3de7c_29":{"__typename":"Paragraph","id":"82d5b0d3de7c_29","name":"bbc2","type":"P","href":null,"layout":null,"metadata":null,"text":"The pro of this approach is that this specialization can bring efficiency. Domain expertise and industry best practices have emerged around the ML engineering field. However, ownership questions arise as machine learning engineers need to interface with both front-end product engineers and data scientists to productionize a data product. Striking the right headcount balance among data scientists, machine learning engineers, and product engineers is another challenge.","hasDropCap":null,"dropCapImage":null,"markups":[{"__typename":"Markup","type":"A","start":120,"end":124,"href":"https:\u002F\u002Fpapers.nips.cc\u002Fpaper\u002F5656-hidden-technical-debt-in-machine-learning-systems.pdf","anchorType":"LINK","userId":null,"linkMetadata":null},{"__typename":"Markup","type":"A","start":125,"end":132,"href":"http:\u002F\u002Fmartin.zinkevich.org\u002Frules_of_ml\u002Frules_of_ml.pdf","anchorType":"LINK","userId":null,"linkMetadata":null},{"__typename":"Markup","type":"A","start":133,"end":139,"href":"https:\u002F\u002Farxiv.org\u002Fpdf\u002F1812.02257.pdf","anchorType":"LINK","userId":null,"linkMetadata":null}],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:82d5b0d3de7c_30":{"__typename":"Paragraph","id":"82d5b0d3de7c_30","name":"209a","type":"P","href":null,"layout":null,"metadata":null,"text":"A third way is to use data and SQL as the intermediary. In this approach, data is the lingua franca among data scientists and engineers. We’ve had good success with this approach in the past few years.","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:82d5b0d3de7c_31":{"__typename":"Paragraph","id":"82d5b0d3de7c_31","name":"a6f1","type":"P","href":null,"layout":null,"metadata":null,"text":"A benefit of this approach is that SQL + data is a constrained interface that requires minimal training to operate. Data is dumb. It is easy to inspect, visualize, and debug data using SQL, and it is easy to collaborate without hidden states, assumptions, and nuances. Furthermore, this approach tightens the iteration loop, as data scientists can iterate on a model from end to end. We think this approach works for the majority of cases. But we recognize there are scenarios where data is not an ideal interface. The two main scenarios are when we need to encode stateful operations in data, and when precomputation of results is onerous. In practice, we’ve found these scenarios to be infrequent and not first-order concerns.","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:82d5b0d3de7c_32":{"__typename":"Paragraph","id":"82d5b0d3de7c_32","name":"91f7","type":"P","href":null,"layout":null,"metadata":null,"text":"To use data and SQL as the universal language, we’ve had to build out and democratize our data warehouse, solve the problem of who writes ETLs (answer: everyone), and provide interfaces, libraries, and tools to make the data and SQL ubiquitous across the data science and engineering organizations.","hasDropCap":null,"dropCapImage":null,"markups":[{"__typename":"Markup","type":"A","start":127,"end":142,"href":"https:\u002F\u002Fmultithreaded.stitchfix.com\u002Fblog\u002F2016\u002F03\u002F16\u002Fengineers-shouldnt-write-etl\u002F","anchorType":"LINK","userId":null,"linkMetadata":null},{"__typename":"Markup","type":"A","start":152,"end":160,"href":"https:\u002F\u002Fmedium.com\u002F@zhaojunzhang\u002Fbuilding-data-infrastructure-in-coursera-15441ebe18c2","anchorType":"LINK","userId":null,"linkMetadata":null},{"__typename":"Markup","type":"A","start":167,"end":207,"href":"https:\u002F\u002Fmedium.com\u002F@chuongdo\u002Fanalytics-at-coursera-three-years-later-638498709ac8","anchorType":"LINK","userId":null,"linkMetadata":null}],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"ImageMetadata:0*rvxR1udpDV7YaJfG":{"__typename":"ImageMetadata","id":"0*rvxR1udpDV7YaJfG","originalHeight":653,"originalWidth":1600,"focusPercentX":null,"focusPercentY":null,"alt":null},"Paragraph:82d5b0d3de7c_33":{"__typename":"Paragraph","id":"82d5b0d3de7c_33","name":"ca5b","type":"IMG","href":null,"layout":"INSET_CENTER","metadata":{"__ref":"ImageMetadata:0*rvxR1udpDV7YaJfG"},"text":"“Based on your recent activity” recommendations module","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:82d5b0d3de7c_34":{"__typename":"Paragraph","id":"82d5b0d3de7c_34","name":"c9c2","type":"P","href":null,"layout":null,"metadata":null,"text":"An example of engineering and data science collaborating at the data boundary is our recommendations module infrastructure. It is a system that produces recommendations at various degrees of personalization. Recommendation modules range from fully personalized to the user (e.g., “Based on your recent activity”) to generic cold start recommendations to everything in between (e.g., “Because you viewed Machine Learning”).","hasDropCap":null,"dropCapImage":null,"markups":[{"__typename":"Markup","type":"A","start":324,"end":350,"href":"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FCold_start_(computing)","anchorType":"LINK","userId":null,"linkMetadata":null}],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:82d5b0d3de7c_35":{"__typename":"Paragraph","id":"82d5b0d3de7c_35","name":"2070","type":"P","href":null,"layout":null,"metadata":null,"text":"Algorithms generating the recommendations range from matrix factorization to regression to rule-based queries. But data is an effective encapsulation — a combination of results, scores, and metadata is an effective internal API. It meets the characteristics of a good API: It’s easy for engineers to consume, easy for data scientists to produce, and sufficiently powerful for our use cases.","hasDropCap":null,"dropCapImage":null,"markups":[{"__typename":"Markup","type":"A","start":263,"end":271,"href":"https:\u002F\u002Fstatic.googleusercontent.com\u002Fmedia\u002Fresearch.google.com\u002Fen\u002F\u002Fpubs\u002Farchive\u002F32713.pdf","anchorType":"LINK","userId":null,"linkMetadata":null}],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:82d5b0d3de7c_36":{"__typename":"Paragraph","id":"82d5b0d3de7c_36","name":"d8e4","type":"P","href":null,"layout":null,"metadata":null,"text":"Using data and SQL as the universal language results in:","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:82d5b0d3de7c_37":{"__typename":"Paragraph","id":"82d5b0d3de7c_37","name":"f6dd","type":"ULI","href":null,"layout":null,"metadata":null,"text":"Clear boundaries of focus between engineers as data consumers and data scientists as data producers","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:82d5b0d3de7c_38":{"__typename":"Paragraph","id":"82d5b0d3de7c_38","name":"2978","type":"ULI","href":null,"layout":null,"metadata":null,"text":"An understandable and debuggable interface","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:82d5b0d3de7c_39":{"__typename":"Paragraph","id":"82d5b0d3de7c_39","name":"4713","type":"ULI","href":null,"layout":null,"metadata":null,"text":"A common language between data scientists and engineers when collaborating on shared concerns","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:82d5b0d3de7c_40":{"__typename":"Paragraph","id":"82d5b0d3de7c_40","name":"6f44","type":"P","href":null,"layout":null,"metadata":null,"text":"At Coursera, engineers and data scientists have built many data products. We’ve learned that building a data product is a team sport. As with any team, our goal is to be more than the sum of our parts through effective collaboration. This post has outlined three themes that worked well in our pursuit of this goal from an engineering perspective. Be on the lookout for a post from a data scientist’s perspective!","hasDropCap":null,"dropCapImage":null,"markups":[{"__typename":"Markup","type":"A","start":48,"end":53,"href":"https:\u002F\u002Fmedium.com\u002Fcoursera-engineering\u002Fhow-a-b-testing-powers-pedagogy-on-coursera-2cd10ed8365e","anchorType":"LINK","userId":null,"linkMetadata":null},{"__typename":"Markup","type":"A","start":54,"end":58,"href":"https:\u002F\u002Fmedium.com\u002Fcoursera-engineering\u002Fhow-our-skills-benchmarking-technology-is-creating-value-for-companies-70a7e06e667f","anchorType":"LINK","userId":null,"linkMetadata":null},{"__typename":"Markup","type":"A","start":59,"end":63,"href":"https:\u002F\u002Fmedium.com\u002Fcoursera-engineering\u002Fdata-driven-content-categorization-89de0104bcbd","anchorType":"LINK","userId":null,"linkMetadata":null},{"__typename":"Markup","type":"A","start":64,"end":72,"href":"https:\u002F\u002Fmedium.com\u002Fcoursera-engineering\u002Fbuilding-data-services-to-bring-education-to-millions-part-iii-d34e5f37303","anchorType":"LINK","userId":null,"linkMetadata":null},{"__typename":"Markup","type":"A","start":122,"end":132,"href":"https:\u002F\u002Fhbr.org\u002F2018\u002F10\u002Fhow-to-build-great-data-products","anchorType":"LINK","userId":null,"linkMetadata":null}],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:82d5b0d3de7c_41":{"__typename":"Paragraph","id":"82d5b0d3de7c_41","name":"e8c9","type":"P","href":null,"layout":null,"metadata":null,"text":"Special thanks go to Emily Glassberg Sands, Vinod Bakthavachalam, Rachel Reddick, Phil Cayting, and Emily Keller-Logan for providing feedback on the drafts.","hasDropCap":null,"dropCapImage":null,"markups":[{"__typename":"Markup","type":"A","start":21,"end":42,"href":"https:\u002F\u002Fwww.linkedin.com\u002Fin\u002Fegsands\u002F","anchorType":"LINK","userId":null,"linkMetadata":null},{"__typename":"Markup","type":"A","start":44,"end":64,"href":"https:\u002F\u002Fwww.linkedin.com\u002Fin\u002Fvinod-bakthavachalam\u002F","anchorType":"LINK","userId":null,"linkMetadata":null},{"__typename":"Markup","type":"A","start":66,"end":80,"href":"https:\u002F\u002Fwww.linkedin.com\u002Fin\u002Frmredd\u002F","anchorType":"LINK","userId":null,"linkMetadata":null},{"__typename":"Markup","type":"A","start":82,"end":94,"href":"https:\u002F\u002Fwww.linkedin.com\u002Fin\u002Fphil-cayting-2349824\u002F","anchorType":"LINK","userId":null,"linkMetadata":null},{"__typename":"Markup","type":"A","start":100,"end":118,"href":"https:\u002F\u002Fwww.linkedin.com\u002Fin\u002Femkellerlogan\u002F","anchorType":"LINK","userId":null,"linkMetadata":null},{"__typename":"Markup","type":"EM","start":0,"end":156,"href":null,"anchorType":null,"userId":null,"linkMetadata":null}],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"CollectionViewerEdge:collectionId:532b19e4043c-viewerId:lo_b05e453ae2e4":{"__typename":"CollectionViewerEdge","id":"collectionId:532b19e4043c-viewerId:lo_b05e453ae2e4","isEditor":false,"isMuting":false},"ImageMetadata:1*zXjOKA4JKHH04Ipi2NI0jA.png":{"__typename":"ImageMetadata","id":"1*zXjOKA4JKHH04Ipi2NI0jA.png","originalWidth":1156,"originalHeight":164},"PostViewerEdge:postId:84cf9b38cd52-viewerId:lo_b05e453ae2e4":{"__typename":"PostViewerEdge","shouldIndexPostForExternalSearch":true,"id":"postId:84cf9b38cd52-viewerId:lo_b05e453ae2e4"},"Tag:data-science":{"__typename":"Tag","id":"data-science","displayTitle":"Data Science","normalizedTagSlug":"data-science"},"Tag:engineering":{"__typename":"Tag","id":"engineering","displayTitle":"Engineering","normalizedTagSlug":"engineering"},"Tag:data":{"__typename":"Tag","id":"data","displayTitle":"Data","normalizedTagSlug":"data"},"Tag:product-development":{"__typename":"Tag","id":"product-development","displayTitle":"Product Development","normalizedTagSlug":"product-development"},"Tag:collaboration":{"__typename":"Tag","id":"collaboration","displayTitle":"Collaboration","normalizedTagSlug":"collaboration"},"Post:84cf9b38cd52":{"__typename":"Post","id":"84cf9b38cd52","collection":{"__ref":"Collection:532b19e4043c"},"content({\"postMeteringOptions\":{}})":{"__typename":"PostContent","isLockedPreviewOnly":false,"bodyModel":{"__typename":"RichText","sections":[{"__typename":"Section","name":"e5dd","startIndex":0,"textLayout":null,"imageLayout":null,"backgroundImage":null,"videoLayout":null,"backgroundVideo":null},{"__typename":"Section","name":"19bf","startIndex":3,"textLayout":null,"imageLayout":null,"backgroundImage":null,"videoLayout":null,"backgroundVideo":null},{"__typename":"Section","name":"cc6f","startIndex":12,"textLayout":null,"imageLayout":null,"backgroundImage":null,"videoLayout":null,"backgroundVideo":null},{"__typename":"Section","name":"5d83","startIndex":24,"textLayout":null,"imageLayout":null,"backgroundImage":null,"videoLayout":null,"backgroundVideo":null},{"__typename":"Section","name":"fc1f","startIndex":40,"textLayout":null,"imageLayout":null,"backgroundImage":null,"videoLayout":null,"backgroundVideo":null}],"paragraphs":[{"__ref":"Paragraph:82d5b0d3de7c_0"},{"__ref":"Paragraph:82d5b0d3de7c_1"},{"__ref":"Paragraph:82d5b0d3de7c_2"},{"__ref":"Paragraph:82d5b0d3de7c_3"},{"__ref":"Paragraph:82d5b0d3de7c_4"},{"__ref":"Paragraph:82d5b0d3de7c_5"},{"__ref":"Paragraph:82d5b0d3de7c_6"},{"__ref":"Paragraph:82d5b0d3de7c_7"},{"__ref":"Paragraph:82d5b0d3de7c_8"},{"__ref":"Paragraph:82d5b0d3de7c_9"},{"__ref":"Paragraph:82d5b0d3de7c_10"},{"__ref":"Paragraph:82d5b0d3de7c_11"},{"__ref":"Paragraph:82d5b0d3de7c_12"},{"__ref":"Paragraph:82d5b0d3de7c_13"},{"__ref":"Paragraph:82d5b0d3de7c_14"},{"__ref":"Paragraph:82d5b0d3de7c_15"},{"__ref":"Paragraph:82d5b0d3de7c_16"},{"__ref":"Paragraph:82d5b0d3de7c_17"},{"__ref":"Paragraph:82d5b0d3de7c_18"},{"__ref":"Paragraph:82d5b0d3de7c_19"},{"__ref":"Paragraph:82d5b0d3de7c_20"},{"__ref":"Paragraph:82d5b0d3de7c_21"},{"__ref":"Paragraph:82d5b0d3de7c_22"},{"__ref":"Paragraph:82d5b0d3de7c_23"},{"__ref":"Paragraph:82d5b0d3de7c_24"},{"__ref":"Paragraph:82d5b0d3de7c_25"},{"__ref":"Paragraph:82d5b0d3de7c_26"},{"__ref":"Paragraph:82d5b0d3de7c_27"},{"__ref":"Paragraph:82d5b0d3de7c_28"},{"__ref":"Paragraph:82d5b0d3de7c_29"},{"__ref":"Paragraph:82d5b0d3de7c_30"},{"__ref":"Paragraph:82d5b0d3de7c_31"},{"__ref":"Paragraph:82d5b0d3de7c_32"},{"__ref":"Paragraph:82d5b0d3de7c_33"},{"__ref":"Paragraph:82d5b0d3de7c_34"},{"__ref":"Paragraph:82d5b0d3de7c_35"},{"__ref":"Paragraph:82d5b0d3de7c_36"},{"__ref":"Paragraph:82d5b0d3de7c_37"},{"__ref":"Paragraph:82d5b0d3de7c_38"},{"__ref":"Paragraph:82d5b0d3de7c_39"},{"__ref":"Paragraph:82d5b0d3de7c_40"},{"__ref":"Paragraph:82d5b0d3de7c_41"}]},"validatedShareKey":"","shareKeyCreator":null},"creator":{"__ref":"User:70814e310ce3"},"inResponseToEntityType":null,"isLocked":false,"isMarkedPaywallOnly":false,"lockedSource":"LOCKED_POST_SOURCE_NONE","mediumUrl":"https:\u002F\u002Fmedium.com\u002Fcoursera-engineering\u002Fan-engineers-perspective-on-engineering-and-data-science-collaboration-for-data-products-84cf9b38cd52","primaryTopic":{"__ref":"Topic:ae5d4995e225"},"topics":[{"__typename":"Topic","slug":"software-engineering"},{"__typename":"Topic","slug":"product-management"},{"__typename":"Topic","slug":"data-science"}],"isPublished":true,"latestPublishedVersion":"82d5b0d3de7c","visibility":"PUBLIC","postResponses":{"__typename":"PostResponses","count":1},"clapCount":322,"allowResponses":true,"isLimitedState":false,"title":"An engineer’s perspective on engineering and data science collaboration for data products","isSeries":false,"sequence":null,"uniqueSlug":"an-engineers-perspective-on-engineering-and-data-science-collaboration-for-data-products-84cf9b38cd52","socialTitle":"","socialDek":"","canonicalUrl":"","metaDescription":"","latestPublishedAt":1558367052461,"readingTime":6.4059748427672965,"previewContent":{"__typename":"PreviewContent","subtitle":"Three themes that have worked well for us at Coursera for data product development— from the perspective of an engineer."},"previewImage":{"__ref":"ImageMetadata:0*rvxR1udpDV7YaJfG"},"isShortform":false,"seoTitle":"","firstPublishedAt":1558346460868,"updatedAt":1639106012312,"shortformType":"SHORTFORM_TYPE_LINK","seoDescription":"","viewerEdge":{"__ref":"PostViewerEdge:postId:84cf9b38cd52-viewerId:lo_b05e453ae2e4"},"isSuspended":false,"license":"ALL_RIGHTS_RESERVED","tags":[{"__ref":"Tag:data-science"},{"__ref":"Tag:engineering"},{"__ref":"Tag:data"},{"__ref":"Tag:product-development"},{"__ref":"Tag:collaboration"}],"isNewsletter":false,"statusForCollection":"APPROVED","pendingCollection":null,"detectedLanguage":"en","wordCount":1596,"layerCake":3,"responsesLocked":false}}</script><script>window.__MIDDLEWARE_STATE__={"session":{"xsrf":""},"cache":{"cacheStatus":"EXPIRED"}}</script><script src="https://cdn-client.medium.com/lite/static/js/manifest.b2314f6d.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.24534aeb.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:'8e73651189b69ca5',t:'MTczMjM4ODM1MC4wMDAwMDA='};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