經(jīng)常有產(chǎn)品經(jīng)理問我:產(chǎn)品經(jīng)理到底需不需要懂技術(shù)部宿?
我:你覺得呢?
他:需要吧瓢湃?
我:產(chǎn)品經(jīng)理對需求負責(zé)理张,你覺得自己有懂技術(shù)的需求嗎?
他:有啊绵患,懂技術(shù)后能讓需求更符合實際情況雾叭,更好的根開發(fā)溝通,更好的評估開發(fā)需要的時間落蝙,還能在功能和性能之間找到平衡點...
我:那還不趕快去學(xué)织狐!
他:你能教教我么?
我:原來你在這等著我...
于是筏勒,就有了這篇文章:產(chǎn)品經(jīng)理的技術(shù)素養(yǎng)移迫。
常識篇
當下ToC的創(chuàng)業(yè)項目,要么是守著iOS和Android平臺做APP管行,要么是守著微信平臺做HTML5的應(yīng)用厨埋,所以就講講這兩個領(lǐng)域的開發(fā)常識吧。
APP 開發(fā)常識
1. APP能穩(wěn)定運行是對客戶端開發(fā)的最低要求病瞳,沒的商量揽咕!
任何的客戶端閃退和卡死都是客戶端開發(fā)的錯悲酷,也許他們會說這是因為服務(wù)器返回結(jié)果的格式不對呀套菜,或是返回的數(shù)據(jù)里面有臟數(shù)據(jù)呀亲善,或是網(wǎng)絡(luò)異常導(dǎo)致的呀......但是我要告訴你們,這都不是客戶端閃退或卡死的理由逗柴!返回格式不對蛹头,友好的提示下就好了呀,臟數(shù)據(jù)過濾掉呀戏溺,網(wǎng)路異常就超時結(jié)束請求渣蜗,提示用戶網(wǎng)路有問題就好了呀,閃退或卡死就是客戶端沒處理好旷祸!
理論上耕拷,哪怕是服務(wù)端所在的機房炸了,客戶端也應(yīng)該是除了不能讀取新的數(shù)據(jù)托享,其他功能都可以正常運行骚烧,這才是優(yōu)秀的APP該有的素質(zhì)(你們自己關(guān)閉網(wǎng)絡(luò),然后用微信感受下)闰围!
2. 所有的閃退都要收集回來并解決赃绊!
再完善的測試,也無法做到將所有的情況都考慮到羡榴,特別是在復(fù)雜變的手機端碧查。所以對于APP影響最大的閃退,一定要借助第三方平臺對所有閃退的異常進行完整收集校仑!這里的完整是指系統(tǒng)平臺(iOS&Android)忠售,應(yīng)用版本,程序的報錯描述迄沫,引發(fā)閃退的相關(guān)數(shù)據(jù)等稻扬,這些信息可以幫助開發(fā)快速的定位出錯的位置,減少開發(fā)說我這里重現(xiàn)不了邢滑,沒辦法解決的情況腐螟,對于解決閃退非常有幫助。
推薦兩個用戶量比較多的閃退監(jiān)控平臺困后,方便你們選擇吧:Fabric(twitter維護)乐纸、BugTags(國內(nèi)團隊維護)。
3. 熱修復(fù)技術(shù):線上嚴重故障的救命稻草摇予!
這個技術(shù)主要是解決應(yīng)用上線之后汽绢,在主干流程上發(fā)現(xiàn)嚴重BUG,例如閃退或者數(shù)據(jù)加載出錯等問題侧戴。以前遇到的這樣的問題宁昭,就只能緊急修復(fù)并發(fā)版跌宛,一面安排運營安撫用戶,另一面祈禱各大市場趕快幫忙通過審核积仗,相當?shù)睦仟N〗校現(xiàn)在有了熱修復(fù)技術(shù),可以通過在應(yīng)用啟動的時候寂曹,從網(wǎng)上下載一段代碼到本地哎迄,替換掉本地有問題的代碼,從而達到無需發(fā)版就能修復(fù)嚴重BUG的效果隆圆,有效的保證產(chǎn)品的穩(wěn)定性漱挚。
推薦幾個常用的熱修復(fù)解決方案:
iOS平臺下阿Bang同學(xué)的JSPatch相當?shù)目孔V,微信都在用渺氧。
Android平臺下阿里維護的AndFix也是個不錯的選擇旨涝。
4. Andriod的兼容與適配
Android開發(fā)最繁瑣地方,莫過于適配各種屏幕尺寸和兼容各種廠商修改過的系統(tǒng)了侣背。建議上線前優(yōu)先適配主流機型顿乒,上線后重點適配你應(yīng)用的用戶使用最多的機型科雳,并結(jié)合前面提到的閃退收集和熱修復(fù)技術(shù)芬萍,保證應(yīng)用的穩(wěn)定性买喧。
5. iOS的內(nèi)測分發(fā)與審核
iOS應(yīng)用做有一定規(guī)模的內(nèi)測分發(fā)是一件挺麻煩的事情消别,如果你用的是99美元的開發(fā)者賬戶,就只能通過一個個的添加測試用戶手機的UDID蒂胞,才能進行呢測指蚜。更好的辦法是申請一個299美元的企業(yè)開發(fā)者賬號播瞳,使用這個賬號的證書打包的應(yīng)用可以自由分發(fā),再結(jié)合一些分發(fā)平臺(http://fir.im或者蒲公英等)驯击,可以非常方便進行千人規(guī)模的內(nèi)測择吊,獲得更多的用戶反饋。
但是问欠,申請企業(yè)開發(fā)者賬號是需要提供企業(yè)的鄧白氏編碼才能申請,然而由于國內(nèi)很多第三方蘋果市場對企業(yè)開發(fā)者賬號的濫用(所謂的免越獄安裝應(yīng)用捌治,就是靠使用企業(yè)開發(fā)者賬號打包實現(xiàn)的)兼吓,導(dǎo)致蘋果對大陸地區(qū)企業(yè)賬號審核的越來越嚴格,一度淘寶上一個企業(yè)開發(fā)者賬號都炒到了10W+森枪,所以有一定規(guī)模內(nèi)測需求的項目视搏,初期就開始申請企業(yè)開發(fā)者賬號吧,因為一般需要一兩個月才能搞定县袱。
6. 客戶端和服務(wù)端都可以做的功能浑娜,大多數(shù)情況下建議在服務(wù)端實現(xiàn)
項目推進的過程中,經(jīng)常會遇到有些功能客戶端也可以做式散,服務(wù)端也可以做的情況筋遭,這種情況下,大多數(shù)時候建議在服務(wù)端實現(xiàn),這樣有兩個好處:
1. 核心邏輯只在服務(wù)端實現(xiàn)一次漓滔,不用在兩個客戶端平臺都開發(fā)一遍编饺,節(jié)省開發(fā)時間。
2. 如果有BUG响驴,可以在服務(wù)端即時修改透且,而不需要重新發(fā)版。
舉個例子豁鲤,查看附近的人列表里秽誊,每條記錄都有個距離的數(shù)值,這個距離在客戶端計算也行琳骡,在服務(wù)端計算也行锅论,但是在服務(wù)端計算并將結(jié)果直接返回給客戶端可以保證數(shù)據(jù)的一致性,一方面減少由于客戶端選用的GIS庫不同日熬,導(dǎo)致iOS算出來是1.81km棍厌,Andorid算出來是1.82km的詭異情況;另一方面如果計算出錯竖席,只要在服務(wù)器調(diào)整距離的算法,客戶端自動就可以正確顯示了敬肚。
微信&HTML5 開發(fā)常識
1. 微信授權(quán)登錄
微信提供的應(yīng)用授權(quán)登錄作為目前最流行的第三方登錄方式毕荐,基本已經(jīng)成為應(yīng)用的標配了,而相應(yīng)的微信服務(wù)號提供的Web授權(quán)登錄艳馒,也已經(jīng)成為微信HTML5應(yīng)用獲取用戶信息的利器憎亚,但是這里有一個坑,就是默認情況下弄慰,應(yīng)用授權(quán)登錄的返回的用戶唯一標識(即OpenID)與Web授權(quán)登錄返回的OpenID不一致第美,哪怕是同樣的應(yīng)用名稱也是如此。解決辦法是將你的服務(wù)號綁定到微信開放平臺下陆爽,這樣兩種授權(quán)的返回信息中什往,會多一個統(tǒng)一的UnionID字斷,用做用戶的唯一標識慌闭。但是UnionID不能用于發(fā)送消息模版的需求别威,所以最終每個微信授權(quán)的用戶,需要同時保存OpenID和UnionID驴剔,才能順利的完成打通和后續(xù)的業(yè)務(wù)處理省古。
另外微信的授權(quán)登錄有兩個模式,基礎(chǔ)授權(quán)和高級授權(quán)丧失。前者的好處是用戶無感知豺妓,但是只返回OpenID和UnionID;后者需要額外跳轉(zhuǎn)一次頁面進行授權(quán),但是能拿到包括昵稱琳拭、性別载佳、城市等在內(nèi)的完整的用戶信息。這里有一個優(yōu)化的技巧是當用戶登錄的時候臀栈,先使用基礎(chǔ)授權(quán)登錄的方式獲取用用戶的OpenID和UnionID蔫慧,然后在你的用戶信息中查詢,如果該用戶存在权薯,則直接完成登錄姑躲;如果該用戶不存在,再跳轉(zhuǎn)到高級授權(quán)登錄盟蚣,獲取完整的用戶信息并保存黍析,這樣這個用戶再下次登錄的時候,就不需要使用高級授權(quán)登錄了屎开,直接通過基礎(chǔ)授權(quán)即可無跳轉(zhuǎn)的完成登錄阐枣。
2. 防欺詐提示
經(jīng)常會在各種微信里的Web頁面中,看到上方這個紅色的防欺詐提示奄抽,包括一些知名平臺的服務(wù)號也是如此蔼两。其實這個提示是可以去掉的,只要你的服務(wù)號通過了支付功能的審核逞度,將頁面的域名設(shè)置到業(yè)務(wù)域名的位置额划,就可以去掉這個提示了,如下圖所示:
3. 運營商劫持
現(xiàn)在的運營商劫持档泽,已經(jīng)流氓到令人發(fā)指的地步了俊戳,圖中間的彈窗通知已經(jīng)嚴重影響到了用戶的體驗。目前對于運營商劫持馆匿,最好的解決辦法是使用HTTPS協(xié)議的部署你的Web服務(wù)抑胎,這樣信息在傳輸過程中是加密的,運營商就很難再進行劫持和嵌入廣告了渐北。
4. 網(wǎng)絡(luò)出錯
最后再分享個疑難雜癥阿逃,在微信里打開Web頁面的時候,偶爾會遇到這樣一種情況腔稀,就是頁面無法打開盆昙,微信提示網(wǎng)絡(luò)出錯,點擊重新加載多次依然如此焊虏,嚇得產(chǎn)品經(jīng)理以為系統(tǒng)掛了淡喜!但是讓開發(fā)去查,開發(fā)卻說服務(wù)器根本連你這個請求的沒收到诵闭,跟系統(tǒng)沒關(guān)系炼团!一邊用戶反饋打不開澎嚣,一邊開發(fā)說跟他們沒關(guān)系,產(chǎn)品經(jīng)理卡在中間瘟芝,真是日了X了易桃!
這種情況呢,絕大多數(shù)是因為微信內(nèi)置的瀏覽器緩存了一個錯誤的DNS解析結(jié)果锌俱,導(dǎo)致請求無法發(fā)送到服務(wù)器晤郑,從而一直無法打開。解決的辦法也很簡單贸宏,切換下網(wǎng)絡(luò)(4G就切到WIFI造寝,反義亦然),重新解析下域名吭练,就可以正常訪問了诫龙。
通用常識
1. 一些文本推送的長度限制
一條短信最多70個字,如果內(nèi)容超長鲫咽,雖然會被智能手機合并成一條信息展示給用戶签赃,但是運營商計算是按照70個字一條進行拆分的,所以處于成本的考慮分尸,還是將短信的文案控制在70個字以內(nèi)吧锦聊。
主要的應(yīng)用推送服務(wù)(包括蘋果和Android的第三方推送服務(wù)),用來承載內(nèi)容的空間一般也就是256個字節(jié)(utf-8編碼下寓落,一個漢字占三個字節(jié))括丁,超過的話會發(fā)送失敗。如果遇到有些推送能收到伶选,有些推送收不到的情況,很可能就是文案超長了尖昏,可以檢查下仰税。
微信服務(wù)號推送的客服信息不能超過2048個字節(jié),并且用戶與服務(wù)號之間48小時內(nèi)要有互動抽诉,否則會發(fā)送失敗陨簇。
2. 使用云服務(wù)
別再用Excel管理項目了!別再自己找機房買服務(wù)器了迹淌!別再自己搞文件存儲了河绽!別再自己開發(fā)統(tǒng)計分析系統(tǒng)了!現(xiàn)在有大量的優(yōu)質(zhì)的云服務(wù)唉窃,可以大幅的提高創(chuàng)業(yè)團隊的效率耙饰,果斷用起來吧!
推薦一些不錯云服務(wù)給你們:
項目管理:TeamBition纹份、Tower苟跪;
云主機:阿里云廷痘、Ucloud;
消息推送:極光推送件已、個推笋额;
短信:創(chuàng)藍、螺絲帽篷扩;
云存儲&CDN:七牛兄猩、又拍;
即時通訊:融云鉴未、環(huán)信枢冤;
代碼托管:Coding、Bitbucket歼狼;
統(tǒng)計分析:友盟掏导、騰訊分析;
3. 關(guān)于開發(fā)外包
如果實在招聘不到合適的開發(fā)人員羽峰,項目原型的開發(fā)可以找你信得過的朋友來做并付費趟咆。別老想著找人免費幫你做,適當?shù)母顿M能大幅提高朋友的開發(fā)效率梅屉,從有空寫寫變成努力完成值纱,絕對是雙贏的!
如果找外包公司開發(fā)的話坯汤,找個你信得過的朋友做顧問虐唠,審核數(shù)據(jù)庫的設(shè)計和核心代碼,盡可能的避免項目發(fā)展過程中因為系統(tǒng)設(shè)計不當惰聂,導(dǎo)致需要推翻重來的風(fēng)險疆偿。
另外,項目原型是用來快速驗證想法的搓幌,不要過于追求細節(jié)杆故,關(guān)注核心業(yè)務(wù)的功能即可,快速上線去檢驗?zāi)愕纳虡I(yè)模式才是關(guān)鍵溉愁。
4. 關(guān)于代碼重構(gòu)
產(chǎn)品經(jīng)理經(jīng)常聽到開發(fā)要求對現(xiàn)有代碼進行重構(gòu)处铛,這里的重構(gòu)一方面是改進趕進度時寫的低質(zhì)量代碼,另一方面是把一些通用的功能和模塊進行抽象拐揭,方便后續(xù)開發(fā)撤蟆。
建議每個月至少給開發(fā)留2個工作日進行代碼重構(gòu)吧。
技能篇
1. 最好掌握的技能
科學(xué)上網(wǎng):網(wǎng)絡(luò)世界哪么大堂污,要常出去看看家肯,畢竟Copy to China還是主流的創(chuàng)新模式...
數(shù)據(jù)庫查詢:項目初期運營系統(tǒng)還沒有那么完善的時候,如果你會查詢數(shù)據(jù)庫敷鸦,能大幅的提升數(shù)據(jù)分析的效率息楔!
微調(diào)HTML/CSS:不需要會做復(fù)雜的前端布局寝贡,但是如果你可以對Web頁面的樣式進行微調(diào),更容易做出最滿意的效果值依,輸出你自己的品味圃泡;
2. 至少了解的概念
下面這些概念,如果你能了解他們的優(yōu)勢與不足愿险,那么在與開發(fā)溝通和產(chǎn)品決策的時候颇蜡,會有很大的幫助(例如之前提到的HTTPS能夠解決運營商劫持的問題):
數(shù)據(jù)庫、緩存辆亏、消息隊列风秤、Web服務(wù)器、負載均衡扮叨、CDN缤弦;
TCP、UDP彻磁、FTP碍沐、HTTP/HTTPS、Protobuf衷蜓;
輪詢累提、推送;
灰度發(fā)布磁浇、AB測試斋陪;
推薦系統(tǒng)、搜索系統(tǒng)置吓;
溝通篇
1. 如何提需求无虚?
差的方式
產(chǎn)品:我們需要做一個刷臉付款的功能,用戶通過刷臉完成支付衍锚。
開發(fā):人臉識別可靠性差骑科,特征容易改變或者相同,在全球范圍內(nèi)都是難點构拳,用來做支付太不安全了!
好的方式
產(chǎn)品:我們?yōu)榱颂岣哂脩舻臉s耀感增加一個營銷的口碑傳播點梁棠,想做一個刷臉支付的功能置森,你們看看安全性方面有沒有什么好的方案?這個功能使用的流程是......(過程描述略之)
開發(fā):人臉識別可靠性差符糊,最好加入一個二次確認的過程凫海,例如微信上發(fā)條確認信息,用戶確認一下男娄,其它應(yīng)該沒什么問題行贪。
抓到要點沒漾稀?沒有的話,看看我的總結(jié)吧:
1. 先講需求背后的訴求建瘫,再講需求的要點崭捍;
2. 提出需求要點中技術(shù)上的不確定部分,征詢開發(fā)意見啰脚;
3. 最后再補充細節(jié)殷蛇,并允許開發(fā)對細節(jié)進行合理的調(diào)整;
2. 如何協(xié)商開發(fā)進度橄浓?
差的方式
產(chǎn)品:這個需求開發(fā)完成需要多少時間粒梦?
開發(fā):一周
產(chǎn)品:要這么久?這個需求不是很復(fù)雜呀荸实?
開發(fā):這個需要XXXX...(一堆產(chǎn)品可能聽不懂的術(shù)語)
產(chǎn)品:不用這么麻煩吧匀们!
開發(fā):你行你來做啊准给!
產(chǎn)品:好吧泄朴,那就一周吧...
好的方式
產(chǎn)品:這個需求開發(fā)完成需要多少時間?
開發(fā):一周
產(chǎn)品:要這么久圆存?那我們一起把這個需求拆分一下叼旋,拆分成幾個一到兩天內(nèi)可以完成并測試的小需求吧。
開發(fā):這個需求可以拆分成ABCD四個任務(wù)沦辙,A任務(wù)需要1天夫植,B任務(wù)需要1天,C任務(wù)應(yīng)該要2天油讯,D任務(wù)需要1天详民。
產(chǎn)品:好的,就這么定了陌兑,我重新把這幾個需求寫到任務(wù)系統(tǒng)上沈跨。
抓到要點沒?沒有的話兔综,繼續(xù)看總結(jié)吧:
1. 尊重技術(shù)的評估饿凛,不要想當然;
2. 如果一個需求的開發(fā)時間超出了你的預(yù)期软驰,就對需求進行拆分涧窒,每個需求的開發(fā)時間控制在兩天以內(nèi),這樣的好處是可以快速的了解到開發(fā)的進展锭亏,不斷確認產(chǎn)出的結(jié)果是否是產(chǎn)品所需要的纠吴,避免一周后,發(fā)現(xiàn)開發(fā)和產(chǎn)品對需求的理解有很大的偏差而導(dǎo)致的延期慧瘤。另外戴已,如果真的是個非常簡單的需求固该,開發(fā)根本無法進行分解,他自然會縮減時間的糖儡。
PS:別把開發(fā)進度逼的太緊伐坏,可能會影響系統(tǒng)質(zhì)量...
3. 如何報BUG?
差的方式
為什么我的賬號不能登錄呀休玩?
好的方式
為什么我的賬號不能登錄呀著淆?提示帳號密碼錯誤!我測試的帳號是:cc123 密碼是:123456拴疤,用的是蘋果手機永部,安裝的最新的版本!
剛剛測試的呐矾,相關(guān)信息我都寫在TeamBition(Bug跟蹤系統(tǒng))上了苔埋,盡快處理下,這個BUG的優(yōu)先級最高蜒犯!
抓到要點沒组橄?沒有的話,最后再幫你們的總結(jié)一次:
1. 提供穩(wěn)定復(fù)現(xiàn)的流程和錯誤信息(最好有截圖)罚随;
2. 提供支持復(fù)現(xiàn)BUG的完整數(shù)據(jù)(相關(guān)帳號密碼玉工、測試的輸入等);
3. 提供準確的應(yīng)用信息(應(yīng)用版本淘菩、測試環(huán)境/正式環(huán)境 等)和平臺信息(iOS遵班、Android等);
4. 明確BUG的緊急程度潮改;
5. 將BUG錄入到追蹤系統(tǒng)狭郑,以防被忽略;
4. 開發(fā)延期怎么辦汇在?
開發(fā)沒有按照約定的時間完成工作...
工期一天天的延期翰萨,你很焦慮...
怎么辦?怎么糕殉?怎么辦亩鬼?
接受現(xiàn)實吧,輕度的Delay是難以避免的宿命阿蝶!如果開發(fā)每次都特別準時的交工辛孵,那你們的開發(fā)一定在保留實力,并沒有拼盡全力…
如果你每天上午到公司的時候赡磅,看見他們已經(jīng)在對著你昨晚反饋的BUG冥思苦想了;每天晚上你離開的時候宝与,他們還圍在一起討論解決方案...那么他們已經(jīng)盡力了焚廊,但畢竟人力有窮盡冶匹,輕度的Delay代表他們對產(chǎn)品盡早完工的渴望和你一樣強烈,對產(chǎn)品盡快上線和你一樣的期待咆瘟,才會讓自己這么的辛苦的加班嚼隘。
此時你能做的是,把優(yōu)先級低的BUG整理好后袒餐,在每天的溝通會議上一起提交給他們飞蛹,而不是一次次的打斷他們;你還能做的是把當前節(jié)點里不太重要但是又比較復(fù)雜的功能灸眼,放進下一個節(jié)點卧檐,讓他們能夠?qū)W⒃谥攸c的功能。
但是焰宣,如果你的開發(fā)團隊面對一天天Delay泰然自若霉囚,繼續(xù)該遲到遲到,該早退早退...如果你不斷的詢問要延期到什么時候匕积,但是并沒有人能給出準確的答復(fù)盈罐!是時候找CEO和技術(shù)負責(zé)人一起好好的討論下了,一個項目組人不多心還不齊闪唆,這項目不干也罷了盅粪。一個項目想要成事,一定是和一群能夠前途相托悄蕾,甚至性命相托人在一起票顾,才有可能!
所以笼吟,產(chǎn)品經(jīng)理對技術(shù)該了解到什么程度库物?
舉個打車的例子吧:
產(chǎn)品經(jīng)理相當于一個乘客,知道要去哪兒贷帮,開發(fā)團隊就相當于是司機戚揭。產(chǎn)品經(jīng)理可以不會開車,不會踩是離合器不會掛擋撵枢,但是如果他知道:
1. 哪條路最短民晒?
2. 哪條路雖然繞一點但是最順暢?
3. 如果出現(xiàn)特殊情況锄禽,兩條道路都不能走了潜必,步行是否可行,需要多久沃但?
就可以省錢省時間磁滚!
說了這么多,再送給你們一段我很喜歡的話吧(From 邱岳):
對產(chǎn)品負責(zé),最直接的表現(xiàn)就是「讓正確的事情相繼發(fā)生」垂攘!
如果在這個過程中需要懂技術(shù)维雇,就去學(xué)技術(shù),需要懂交互晒他,就去學(xué)交互吱型,需要懂畫圖,就去學(xué)畫圖陨仅,需要懂演講津滞,就去學(xué)演講,需要懂什么灼伤,就去學(xué)什么…
團隊中触徐,誰都可以說這不是我的職責(zé)范圍,只有產(chǎn)品經(jīng)理不行饺蔑,受不了這個委屈锌介,就別干產(chǎn)品經(jīng)理。
關(guān)注“譜曰”公眾號猾警,第一時間收到我的分享孔祸。