在過(guò)去的一年中,我們一直在使用實(shí)時(shí)反饋來(lái)改進(jìn)我們的工具,并為L(zhǎng)inkedIn的開(kāi)發(fā)人員提供更高效的體驗(yàn)。它幫助我們將反饋參與度提高了一倍,更重要的是,可以更好地調(diào)整我們的建議和改進(jìn)。
對(duì)于希望改善開(kāi)發(fā)人員體驗(yàn)的任何工程組織,以下問(wèn)題將提供一個(gè)很好的起點(diǎn):
·我們?nèi)绾尾拍苁刮覀兊拈_(kāi)發(fā)人員更加高效和快樂(lè)?
·作為面向內(nèi)部開(kāi)發(fā)人員的工具的所有者,我應(yīng)該進(jìn)行哪些投資以最好地幫助我的用戶?
·如果有一種方法可以在開(kāi)發(fā)人員遇到問(wèn)題或經(jīng)驗(yàn)豐富時(shí)立即獲得他們的立即反饋,該怎么辦?
通過(guò)分享我們?cè)趯?shí)時(shí)反饋實(shí)施過(guò)程中的經(jīng)驗(yàn)教訓(xùn),我們希望它可以幫助其他組織改進(jìn)自己的流程,從而在其開(kāi)發(fā)人員和工具所有者之間創(chuàng)建自然的反饋循環(huán)。
傳統(tǒng)調(diào)查的挑戰(zhàn)
在過(guò)去的幾年中,我們依靠季度的開(kāi)發(fā)人員調(diào)查來(lái)聯(lián)系工程師,并就他們使用的工具征求全面的反饋。但是,我們發(fā)現(xiàn)使用這種方法遇到了許多挑戰(zhàn):
·開(kāi)發(fā)人員有時(shí)會(huì)對(duì)他們很久沒(méi)有使用的工具提出意見(jiàn)。在某些情況下,我們發(fā)現(xiàn)在發(fā)布調(diào)查前的6個(gè)月中,超過(guò)90%的使用特定工具的人沒(méi)有使用過(guò)該工具。
·工具所有者對(duì)所提供的反饋了解甚少。開(kāi)發(fā)人員提供什么評(píng)分?他們指的是什么具體工具或行動(dòng)?這使得反饋的大部分無(wú)效。
·很難衡量定期調(diào)查之間的情況。在兩次調(diào)查之間發(fā)布功能和錯(cuò)誤修復(fù)時(shí),我們無(wú)法確定用戶評(píng)級(jí)適用于“之前”狀態(tài)還是“之后”狀態(tài)。此外,在兩次調(diào)查之間,我們無(wú)法對(duì)開(kāi)發(fā)人員的想法產(chǎn)生任何干擾。
從高層次來(lái)看,結(jié)果幫助我們了解了整個(gè)工具生態(tài)系統(tǒng)的總體看法,并使我們?cè)诠ぞ逳SAT方面取得了重大進(jìn)展。但是,我們對(duì)痛點(diǎn)的具體內(nèi)容缺乏扎實(shí)的了解,因此希望就內(nèi)部用戶對(duì)他們所使用的工具的感受如何提供更準(zhǔn)確的信息。
解決方案:實(shí)時(shí)反饋
為了克服這些挑戰(zhàn),我們開(kāi)發(fā)了一種稱為實(shí)時(shí)反饋的機(jī)制。實(shí)時(shí)反饋是一個(gè)系統(tǒng),該系統(tǒng)首先收集有關(guān)開(kāi)發(fā)人員在我們的工具生態(tài)系統(tǒng)中采取的操作的信息,然后基于此上下文信息,確定是否,何時(shí)以及如何向開(kāi)發(fā)人員征求反饋。
例如,我們可能會(huì)注意到開(kāi)發(fā)人員剛剛完成了部署,并且在過(guò)去的兩周內(nèi)沒(méi)有要求任何工具活動(dòng)提供反饋。在這種情況下,我們可以發(fā)送電子郵件以征詢有關(guān)特定部署的工具體驗(yàn)的反饋。將反饋請(qǐng)求無(wú)縫集成到日常工作流程中,意味著開(kāi)發(fā)人員無(wú)需每季度坐下來(lái)一次就依靠他們的內(nèi)存,而是可以每次自動(dòng)添加一點(diǎn)時(shí)間提示您提供反饋。
捕獲上下文
當(dāng)我們向工具的開(kāi)發(fā)人員提供反饋時(shí),我們可以包含有關(guān)開(kāi)發(fā)人員在提供反饋時(shí)從事的特定活動(dòng)的上下文。
如上所述,定期調(diào)查的挑戰(zhàn)之一是從反饋中提取可采取行動(dòng)的信息。提到“有時(shí)”的評(píng)論尤其難以理解。通過(guò)確切地知道在特定時(shí)間發(fā)生了什么并立即詢問(wèn)(實(shí)時(shí)),我們傳遞的反饋將更加精確,并提供有關(guān)特定會(huì)話和使用的更多詳細(xì)信息。
為了捕獲此上下文信息,我們創(chuàng)建了一個(gè)系統(tǒng),該系統(tǒng)通過(guò)多種渠道記錄開(kāi)發(fā)人員的操作:內(nèi)部Web UI(通過(guò)使用Matomo),命令行界面(CLI)和內(nèi)部API(通過(guò)利用我們的內(nèi)部日志記錄和審核機(jī)制,將信息發(fā)布到Apache Kafka)。
上下文捕獲是我們策略的關(guān)鍵要素,它不僅用于反饋。我們計(jì)劃將其用作新系統(tǒng)的基礎(chǔ),以幫助開(kāi)發(fā)人員獲得工具方面的幫助。從理論上講,如果我們能夠全面了解開(kāi)發(fā)人員在尋求幫助時(shí)正在做的事情,那么提供該支持將更加容易。
參與率
對(duì)于任何調(diào)查過(guò)程,其有效性的主要因素取決于用戶群體的響應(yīng)意愿。實(shí)際上,當(dāng)我們過(guò)渡到實(shí)時(shí)反饋方法時(shí),我們一直關(guān)注的一個(gè)主要問(wèn)題是持續(xù)的參與率。
事實(shí)證明,就人口覆蓋率而言,使用實(shí)時(shí)招標(biāo)方法比我們的傳統(tǒng)調(diào)查更為有效。我們?cè)O(shè)法使參與調(diào)查的人口增加了一倍(從定期調(diào)查的大約15%增加到采用實(shí)時(shí)方法的30%以上)。
由于參與度的提高,我們現(xiàn)在能夠?qū)﹂_(kāi)發(fā)人員群體進(jìn)行更好的市場(chǎng)細(xì)分。在LinkedIn,有很多開(kāi)發(fā)人員,例如UX開(kāi)發(fā)人員,后端開(kāi)發(fā)人員,站點(diǎn)可靠性工程師和機(jī)器學(xué)習(xí)專家。這些不同的開(kāi)發(fā)人員類型(開(kāi)發(fā)人員的分組/群組)具有不同的需求,使用模式和生產(chǎn)力問(wèn)題。更精確的定位和細(xì)分將導(dǎo)致更好和更個(gè)性化的工具,以滿足每種開(kāi)發(fā)人員類型的特定需求。
我們也意識(shí)到不要過(guò)多地要求開(kāi)發(fā)人員征服反饋,否則參與度可能會(huì)急劇下降。因此,我們實(shí)現(xiàn)了智能節(jié)流機(jī)制,以確保僅在開(kāi)發(fā)人員完成其意圖時(shí)(即,它們處于流程的盡頭)才要求反饋。征集本身的重點(diǎn)是他們的經(jīng)驗(yàn),而不是技術(shù)工具的特定工具或?qū)印@?,我們可能?huì)問(wèn)他們整個(gè)部署過(guò)程如何,而不是僅僅使用一種工具的經(jīng)歷。
我們還確保尊重關(guān)于反饋請(qǐng)求的偏好。開(kāi)發(fā)人員可以選擇他們希望被詢問(wèn)的頻率,以及希望被詢問(wèn)的渠道(例如電子郵件,Web,Slack等)。我們認(rèn)為,允許這種靈活性,以便將反饋的傳遞合并到每個(gè)開(kāi)發(fā)人員的工作流中,也起到了增加參與度的作用。
開(kāi)發(fā)人員可以選擇他們希望被詢問(wèn)的頻率,以及他們想被詢問(wèn)的渠道。這些渠道包括:
·電子郵件:這完全依靠電子郵件客戶端來(lái)捕獲反饋(單擊,基于mailto鏈接)。
·可插拔的UI小部件:我們開(kāi)發(fā)了產(chǎn)品內(nèi)可插拔的UI小部件,它可以服務(wù)于各種請(qǐng)求機(jī)制,包括被動(dòng)和主動(dòng)的請(qǐng)求機(jī)制(例如,內(nèi)聯(lián),toast通知和彈出窗口)。
·Slack:通過(guò)與即時(shí)消息集成,我們還開(kāi)發(fā)了一種通過(guò)Slack收集反饋的方法。
·Web門(mén)戶:我們開(kāi)發(fā)了一個(gè)Web門(mén)戶,允許開(kāi)發(fā)人員以獨(dú)立體驗(yàn)的形式提供反饋,并與其他用戶報(bào)告的內(nèi)容進(jìn)行交互(即投票,評(píng)論)。
對(duì)反饋采取行動(dòng)
聆聽(tīng)反饋是一個(gè)很好的起點(diǎn),但是實(shí)施反饋后所發(fā)生的事情是促使我們創(chuàng)建實(shí)時(shí)反饋的動(dòng)力。從各種收聽(tīng)渠道收集反饋后,我們便將其合成為可共享的報(bào)告(文檔和其他產(chǎn)品,例如儀表板)。我們確保相關(guān)團(tuán)隊(duì)根據(jù)反饋采取行動(dòng),并且當(dāng)他們選擇不這樣做時(shí),我們確保推理與提供反饋的開(kāi)發(fā)人員共享。確保完成此循環(huán)對(duì)于維持健康的反饋文化非常重要,這樣反饋提供者就可以知道他們正在聽(tīng)取并繼續(xù)提供有價(jià)值的輸入。
我們的“聽(tīng),行動(dòng)和分享”框架
建立這兩種關(guān)系類型-向內(nèi)(面向工具開(kāi)發(fā)人員)和向外(向整個(gè)公司的工程師)-允許我們建立共生關(guān)系。我們將深入了解如何使開(kāi)發(fā)人員提高工作效率和幸福感,并與工具開(kāi)發(fā)人員進(jìn)行交流以提出改進(jìn)建議,以更好地幫助他們的服務(wù)對(duì)象。
從反饋中獲得的見(jiàn)解
我們想分享兩個(gè)我們從主觀反饋中獲得的主要見(jiàn)解的例子。
·我們的內(nèi)部CI系統(tǒng)為預(yù)期的管道運(yùn)行時(shí)間提供了估計(jì)。事實(shí)證明,這些估計(jì)有時(shí)不是很準(zhǔn)確,但導(dǎo)致開(kāi)發(fā)人員對(duì)所討論的工具的可靠性問(wèn)題產(chǎn)生懷疑。
·當(dāng)流量變化導(dǎo)致分析失敗時(shí),我們的金絲雀部署監(jiān)視系統(tǒng)(EKG)添加了一個(gè)保護(hù)層,以確保開(kāi)發(fā)人員意識(shí)到該分析是不可靠的,因?yàn)榭丶赡芤迅牧似湫袨?。不幸的是,開(kāi)發(fā)人員最終認(rèn)為EKG本身不可靠,因此忽略了分析。通過(guò)獲取有關(guān)此現(xiàn)象的反饋,我們改進(jìn)了系統(tǒng),現(xiàn)在正在以更好的方式處理這種情況。
綜上所述,通過(guò)傳統(tǒng)調(diào)查了解我們以前方法的盲點(diǎn)有助于我們重新思考如何收集反饋。通過(guò)創(chuàng)建實(shí)時(shí)反饋,這是從開(kāi)發(fā)人員那里收集反饋的全渠道上下文方式,我們已經(jīng)能夠增加接收到的反饋的數(shù)量和質(zhì)量,從而使我們?cè)谌绾胃玫刂С珠_(kāi)發(fā)人員方面獲得了更具可行性的見(jiàn)解。
致謝
我們要感謝Vineet Juneja,他根據(jù)以往的經(jīng)驗(yàn)幫助我們?cè)谶@一領(lǐng)域提供了指導(dǎo);管理團(tuán)隊(duì)的Ben Lai,Awais Tariq,Narsi Nagampalli,Jeff Galdes和Jared Green;工程團(tuán)隊(duì)的Naman Jain,Troy Holsapple,Sahil Patwardhan,Sunting Sun,Aaron Dai,Barry Warsaw和Max Kanat-Alexander(向Max致以特別感謝!我們的用戶體驗(yàn)合作伙伴Arun Yegappan,陳寬英和凱爾·史密斯;最后是我們的數(shù)據(jù)科學(xué)合作伙伴Wu Wu。LinkedIn上的許多團(tuán)隊(duì)與我們合作推出了“實(shí)時(shí)反饋”,我們感謝他們的支持。
原標(biāo)題:How LinkedIn turned to real-time feedback for developer tooling