序言
熟悉我的人會知道,我對技術的了解相較于一般的產品經理要多一些步悠,平時也更多的承擔技術強相關的系統(tǒng)設計工作脆淹,因此有一些我一直在不斷反思常空,嘗試給出更好答案的問題,比如:技術型產品經理的定位是什么盖溺?產品經理對技術的了解程度如何劃分漓糙?如何設計出一個架構合理的系統(tǒng)?
本篇文章準備就這類問題盡量展開去講烘嘱,拋磚引玉昆禽。
技術型產品經理的定位
八個月前,我在《趨勢三段論》中提過這樣的觀點蝇庭,技術型產品經理的定位是:
以用戶需求為導向醉鳖,充分利用現(xiàn)有技術及推動新技術的研究,為用戶提供更高質量的產品哮内。
這句話有兩個要點盗棵,一個是充分利用現(xiàn)有技術,另一個是推動新技術的研究北发。
充分利用現(xiàn)有技術
第一點強調的是什么呢纹因?是扛需求、是推動業(yè)務落地的能力琳拨。所謂充分利用現(xiàn)有技術瞭恰,核心要點是保證自己能夠提出一個合理范圍內的落地方案,既不畏首畏尾狱庇,讓產品落了俗套惊畏,又不天馬行空,完全不具備可行性密任。這才能叫可落地颜启。
需求的來源有很多:競品的新特性、領導的需求批什、自己的需求农曲、合作方的需求等等社搅,每個人站在自己的角度講自己的想法驻债。能落地嗎乳规,誰該做什么?這是技術型產品經理要問自己的第一個問題合呐,他應該具有對全鏈路的把控能力暮的,前端、后臺淌实、總控冻辩、意圖、解析拆祈、對話恨闪,每個部分該承擔什么?改動量如何放坏?任務該如何拆解咙咽?存在什么依賴關系?
技術型產品經理需要兼具從用戶和技術的角度看問題的能力淤年。平衡技術實現(xiàn)與用戶需求钧敞,把最初想法轉化成真實可落地的實施方案,是技術型產品經理的一個重要的任務麸粮。
關于這點溉苛,我有一條約束自己的標準,這里分享出來弄诲,即:問題是否到我為止愚战?換言之,我能否有能力成為所有問題的最后責任人齐遵?交付到我這的問題凤巨,要么我解決,要么我找人解決洛搀,我對最終交付負責敢茁。
推動新技術的研究
第二點強調的是:預見性和解決未來問題的能力。作為產品經理留美,應當對整個業(yè)務的發(fā)展方向有正確的理解彰檬;作為技術型產品經理,應當對業(yè)務發(fā)展所需的技術有一個明確的認知谎砾。
因為我們可做逢倍、能做、還沒做的事情太多了景图,都要做嗎较雕?顯然不是。事情有個輕重緩急,作為產品經理亮蒋,推動技術研究朝著未來業(yè)務最需要的地方發(fā)展就是自己的職責扣典。
這一點要求我們根據(jù)業(yè)務的發(fā)展方向,明確什么是重要而不緊急的事慎玖,然后在條件允許的情況下贮尖,優(yōu)先去處理它們。否則等到所有的事情都重要且緊急之后趁怔,那每天的工作會變成到處救火湿硝,且犯錯的概率也會由于缺乏深入思考的時間而大大提高。
舉個真實例子润努,我八月份提過一個需求关斜,九月份上線之前,有個業(yè)務方的新需求明確依賴我提過的這個需求铺浇,而且還非常著急蚤吹。如果等接到需求我再開始籌備,至少要將他們的上線時間推遲半個月随抠。
關于這點裁着,我同樣有一條約束自己的標準,雖然自己暫時還做不到拱她,但這里也分享出來二驰,即:別人是否有機會向我提出問題?換句話說秉沼,就是我是否能夠總是比別人先發(fā)現(xiàn)問題桶雀,然后推動問題在真正產生負面影響之前解決。
產品經理對技術的了解層級
我曾經給出過一個三層的劃分唬复,用于描述產品經理對技術的了解層級:
第一層:知道什么能做矗积,什么不能做。也即知道所謂的技術邊界敞咧。不論是自己提需求棘捣,還是承接別人的需求,你都能肯定的做出『支持』或『目前還不支持』的判斷休建。
第二層:知道什么好做乍恐,什么不好做。也即测砂,當產品需求超出了目前系統(tǒng)的邊界時茵烈,或者說某需求當下『不能做』時,你有能力給出一個權衡了產品需求與系統(tǒng)改動量的初步技術方案砌些。能做到這一層的人呜投,可以說是一個稱職的技術型產品經理了,至少有能力跟技術人員進行高效的溝通。
第三層:知道什么該做仑荐,什么不該做雕拼。也即,你知道系統(tǒng)中的每個模塊的定位和意義释漆,并有能力以業(yè)務需求為導向協(xié)助技術人員、甚至引導技術人員完成對系統(tǒng)架構的優(yōu)化與改造篮迎,使其在未來能夠更好的滿足業(yè)務發(fā)展對于技術的要求男图。
第三層比較抽象,這里做一下解釋甜橱。當業(yè)務場景較為簡單且有限時逊笆,很容易出現(xiàn)一種情況,就是系統(tǒng)設計與業(yè)務嚴重耦合岂傲。實現(xiàn)一項業(yè)務功能的鏈路會很長难裆,從頭到尾涉及到很多模塊,這塊邏輯你做也可以镊掖,他做也可以乃戈,往往人們總是傾向于選擇最符合直覺,看起來最直接的方案亩进。但這樣通常會造成模塊間定位不清症虑,邏輯分散的情況,當業(yè)務漸漸復雜起來归薛,就不得不進行重構谍憔,否則就再難拓展。
所謂該做不該做主籍,就是當你與技術人員合作設計方案的時候习贫,應該從業(yè)務發(fā)展的角度看待問題,幫助技術人員明確各個模塊的定位千元,使得我們的系統(tǒng)能夠在盡可能長的時間保證可用性苫昌,能夠隨著業(yè)務的發(fā)展一同成長,而不是頻繁重構幸海。
舉個形象些的例子蜡歹,就像走一條路,第一層的技術型產品經理可以判斷涕烧,這條路上有沒有障礙月而,能不能走通;當走不通的時候议纯,第二層的技術型產品經理可以了解父款,這些障礙物到底好不好處理;第三層的技術型產品經理會知道,這些障礙物究竟該怎樣處理憨攒,才能讓它們在最長的時間范圍內不會成為干擾世杀。
技術型產品經理的抽象能力
抽象能力是技術型產品經理最為重要的能力之一。
抽象能力能夠幫助我們在分析時不至于陷入到繁雜的細節(jié)之中肝集,能夠透過現(xiàn)象看到問題的本質瞻坝,一針見血地解決問題的核心。
我舉兩個例子來說明抽象能力的作用杏瞻。
信息的概念
第一個所刀,在設計新體系時,我時常會抽象出一個概念捞挥,叫做信息浮创。一個體系的建立需要各個模塊的配合和協(xié)作,我不可能知道每個模塊每行代碼的邏輯砌函,那我靠什么來判斷一個方案是否可行呢斩披?靠判斷是否存在合理的信息通路。
是讹俊,我確實不知道每個模塊的詳細邏輯垦沉,但我知道某項任務的完成,所必須的信息是什么仍劈。
先從整個任務的角度去看乡话,將所有的模塊看做一個整體,看它的輸入輸出是否合理耳奕,如果一個系統(tǒng)未能獲取到它完成任務所必須的信息绑青,這個方案必然就是不成立的,因為信息無法無中生有屋群。
再從每個模塊的角度去看闸婴,每個模塊在系統(tǒng)中的作用是什么?它們的輸入和輸出是什么芍躏?它們有沒有得到完成任務所必須的信息邪乍?它們對信息做了怎樣的加工?最終模塊的輸出是否是我們想要的对竣?
如果這些問題都有一個明確而合理的答案庇楞,那么這個方案就是可行的。剩下的只是各個模塊內部選擇自己最優(yōu)的實現(xiàn)邏輯否纬、模塊間選擇最優(yōu)的協(xié)作方式而已吕晌。
邏輯上完備
第二個,通過抽象出問題的基本影響因素做到邏輯上完備临燃。在做系統(tǒng)基礎架構設計時睛驳,有一個很重要的任務就是避免遺漏場景可能性烙心。因為在系統(tǒng)設計初期,所謂的業(yè)務場景都只存在與設想中乏沸,而系統(tǒng)又需要在未來盡可能長的時間內保持對業(yè)務的可支持性淫茵,所以如何將當前還未真正遇到的問題進行全面考慮,盡可能的做到高通用性蹬跃,就成了一個必須要面對的問題匙瘪。
這里我們可以嘗試先想出一些基本且明顯的場景,然后據(jù)其反向抽象出問題的基本影響因素蝶缀,并明確每個因素所有可能的情況丹喻,然后再利用排列組合的方式去描述一個個場景,就能有效的避免遺漏扼劈。
舉個例子驻啤,通過頭腦風暴菲驴,我想到了系統(tǒng)需要解決的12種場景荐吵,但是否完備了?我不清楚赊瞬。但是我通過反向抽象先煎,發(fā)現(xiàn)影響場景的基本因素有3個,它們的可能性個數(shù)分別為2巧涧、3薯蝎、3,那么通過排列組合谤绳,我就知道占锯,完備的場景數(shù)應當是18種,也就意味著我需要繼續(xù)驗證我當前的設計是否支持剩余的6種情況缩筛。當然有的情況在實際業(yè)務場景中是不可能存在的消略,不過做最初設計時多考慮一分,未來落地時就會少一分風險瞎抛。
好的系統(tǒng)具備什么樣的特征
這個問題是我最近一直在思考的艺演,很多時候,我通過直覺能夠判斷出兩個系統(tǒng)設計方案的優(yōu)劣桐臊,但要跟別人解釋原因時胎撤,卻又不知道如何表達,所以我希望能夠提煉出一套系統(tǒng)設計需要遵循的方法論断凶,至少用在我自己的工作中伤提。
現(xiàn)在的我還沒能力提出一整套完備的體系,所以這里只是從幾個我有所感觸的維度進行說明认烁。
第一個特征是模塊化飘弧。承擔同一功能的邏輯應當聚合成一個模塊识藤,不要散落在各處,從而導致不可復用和難以維護次伶。類似于開發(fā)過程中的函數(shù)封裝痴昧,所有需要同樣邏輯的部分都統(tǒng)一的調用同一個函數(shù),而不是每次用到都重新寫一遍冠王,還難以保持一致性赶撰。
第二個特征是低耦合。承擔不同功能的模塊保有邏輯上的獨立性柱彻,邏輯上分離的兩個模塊不應該存在邏輯上的相互依賴關系豪娜,每個模塊應該明確定義好自己的輸入和輸出,并盡量保證輸入和輸出的通用哟楷,而不是和上下位模塊深度耦合瘤载,這會導致在進行邏輯優(yōu)化時牽一發(fā)而動全身。
第三個特征是通用性卖擅。系統(tǒng)的設計是為了解決一類問題鸣奔,而不是某幾個問題。系統(tǒng)定義好自己的輸入輸出特性惩阶,將不同的輸入轉化為對應的輸出挎狸,而不是與業(yè)務邏輯耦合。不同的模塊断楷,必須明確好锨匆,哪些模塊處理業(yè)務邏輯,哪些模塊不處理業(yè)務邏輯冬筒,這樣作為一個整體的系統(tǒng)才能有足夠的通用性去做后續(xù)場景的拓展恐锣。
第四個特征是邊際成本遞減。系統(tǒng)對業(yè)務的支持一定要做到邊際成本遞減舞痰,或者講土榴,做到規(guī)模效應。隨著工作量的累積匀奏,同一單位工作量所帶來的效果的應當是遞增的鞭衩。借用云棲大會中阿里iDST工程師的說法,每個技術人員所能支持的業(yè)務方數(shù)量應當是遞增的娃善,而不是說5個業(yè)務方需要1個技術人員论衍,那10個業(yè)務方就需要2個,100個業(yè)務方就需要20個聚磺,這顯然是不合理的坯台。
系統(tǒng)設計中需要明確的問題
在系統(tǒng)設計中,至少需要明確以下問題:
- 該系統(tǒng)涉及到的模塊有哪些瘫寝?哪些模塊是已有的蜒蕾,哪些模塊是新增的稠炬?
- 每個模塊的定位,或者說定義是什么咪啡?在系統(tǒng)中扮演什么樣的角色首启,起到什么樣的作用?舊有模塊的定義是否滿足我們的要求撤摸,新模塊的定義是否清晰明確毅桃?
- 每個模塊的輸入輸出是什么?每個模塊所獲得的輸入是否剛好滿足其能完成任務的需求准夷,既不缺乏信息钥飞,也不存在會導致依賴的信息冗余?
- 模塊間的上下位關系是否明確衫嵌,是否與該模塊的原有定位相契合读宙?
- 系統(tǒng)整體的模塊的調用順序是什么?是否擁有合理的信息通路楔绞?是否保證了模塊上下位關系的一致性结闸?是否存在下位模塊僭越上位模塊進行/被進行跨層級調用的情況?
做個形象點的類比墓律,設計系統(tǒng)就像拼拼圖膀估。第一個問題幔亥,就是看我們手上有哪些拼圖耻讽;第二個問題,就是看拼圖上的畫是什么帕棉;第三個問題就是看拼圖的邊緣是什么樣的针肥;第四個問題,就是看哪些拼圖的邊緣是相互契合的香伴;第五個問題慰枕,就是拼好后,看整幅拼圖是否存在不一致錯誤即纲。
結語
寫完之后具帮,回顧整篇文章,我發(fā)現(xiàn)我講了三層事情:
第一層:抽象能力低斋、產品理解蜂厅、技術知識
第二層:工作定位
第三層:實踐方法
抽象能力是技術型產品經理的重要能力,是進行頂層設計的基礎膊畴。同時掘猿,技術型產品經理要兼具對產品的理解和技術的了解。這些構成了一個技術型產品經理的能力體系唇跨。
技術型產品經理要明確自己的工作定位稠通,兼顧當下與未來衬衬,既要有能力推動當下業(yè)務落地,又要有足夠的預見性去解決未來的問題改橘。
技術型產品經理時常要與技術人員合作進行系統(tǒng)/平臺的設計滋尉,保證系統(tǒng)及其各個模塊擁有明確的目的(定位)、合理的鏈接(信息通路)飞主、必備的要素(模塊)兼砖,是設計一個完備系統(tǒng)的基本要求。