作為一名後臺開發同學,做需求開發不可避免,無論是產品需求還是技術需求,需求雖然在變,但做事的方法是相同的,這裡簡單總結下從接到一個需求開始至需求上線的整個過程,以及其中需注意的點,避免後續踩坑
1. 明確需求
以產品需求舉例,接到一個需求之後,首先要做的是搞明白這個需求,而不是一上來就是開始擼程式碼,這樣很有可能導致最後上線的功能不符合產品預期
怎樣明確一個需求?
- 為什麼做這件事,收益在哪裡,讓需求方來即產品經理講,如果這個都講不明白,這個需求可以直接拒掉,畢竟做了也沒什麼收益,這個道理在哪裡都說得通
- 明白1之後,產品一般都會提出自己的方案,但是這個方案是否合理 也需要我們開發自己來思考,不當工具人,有不合理的地方應該直接提出來和產品討論
- 需求預期上線時間以及驗收標準
重點: 產品需求清晰後要追細節,避免一句話需求,凡是方案涉及到的細節點都需要在tapd or 企業微信中同步出來,避免後續返工
2. 開發
需求明確後,一般會開始排期,評估工作量,工作量拍腦門可不行,需方案明確後才能給出相對準確的排期
這裡評估工時
- 工作點拆分的越細,一般評估的工時會更加準確
- 可以請有經驗的同學幫忙評估,自己再留一定buff也可
拆分工作這裡建議 寫設計文件,之後排期也可以很明確的給出來,下邊列下開發中要注意的點
-
設計文件
- 需求描述,架構圖,細節流程圖,監控點,測試點等等,可以參考這裡就不展開講
- 方案選型和涉及建議要有和業界或者公司內部部門的比較
- 整體架構和方案指定後需評審,可以找組內小夥伴或者leader或者總監,都可以,查漏補缺
-
編碼
- 編碼階段注意寫單元測試
- 編碼種碰到問題及時反饋出來討論,技術問題或者產品邏輯問題都可以, 或者寫入todo項也可
-
自測
- 前提是單元測試已ok
- 針對介面或者邏輯進行測試,後臺開發一般需看日誌來確認邏輯正常
- 需測試到異常分支,這裡最容易出問題
-
聯調
- 需求如果涉及到多方,需和上下游服務進行聯調,此時更應該看服務端日誌確認自己的邏輯正常才可以
-
監控
- 需能看到異常or關鍵邏輯的監控是否正常
-
debug
- 需要有debug能力,比如可以針對單個使用者染色,接入天機閣,可以很方便看到此使用者日誌,要不然排查問題成本太高
-
效果驗收
- 需讓需求提出放在測試環境 驗收,符合預期後進入下一步
-
效能驗收
- 壓測當前服務,給出QPS,分位耗時等資料
-
CR
- 強烈建議 程式碼走讀,前置查漏補缺,總比線上上發現問題好
這裡要注意
- owner意識,自己承諾的時間點儘量要達到,如果有插入需求或者編碼中碰到問題會影響進度,需及時反饋出來,而不能等到最後一天了才說沒完成
- 追求效率,30min法則,如果一個問題自己google和思考30min還沒解決的,及時反饋給導師or高T,再解決不了再向上反饋,不能死撐著
- 口頭溝通基本無效,關鍵點需同步出來
此時開發側基本工作已完成,下一步需在正式環境部署服務上線
3. 上線
-
資源評估
- 建議前置,我廠資源申請還是比較麻煩的
- 服務上線需要使用多少資源,cpu,mem,底層儲存(redis,dcache)等等 需要前置評估出來
- 這裡根據之前的QPS資料,再結合預估的峰值流量 即可預估出需要部署多少節點
- 這裡要注意線上節點的負載不能過高,需要有一定冗餘,線上負載建議在40-50%之間
-
資源申請
- 一般是向運維同學申請,需說明需求背景,收益,資源推導公式 便於運維同學審批
-
資源部署
- 部署在正式 和 灰度節點即可
-
壓測
- 之前壓測使用的是自己構造的client,req和線上使用者是不同的,這裡建議使用線上旁路流量指定後端某一個節點進行壓測,資料最為準確
-
釋出流程
-
灰度釋出
- 釋出灰度節點,使用者量比較小
- 產品需在此環境驗收功能是否正常
- 開發需在此環境驗收邏輯是否正常,通過日誌確認
-
旁路驗證
- 因之前機器資源是根據壓測結果推導而來,假如結果不準 會導致線上服務異常,這裡建議可以 先旁路線上流量至新服務上,對線上無影響,又可以驗證服務效能,提前發現問題 提前解決
-
正式釋出
- 這裡建議使用 白名單+灰度百分比方式放量,風險最小
- 產品開發先使用白名單體驗,通過日誌確認,功能正常之後再開始按百分比放量
- 放量中注意觀察服務負載和之前的監控等資料,有異常及時處理
- 這裡建議使用 白名單+灰度百分比方式放量,風險最小
-
這裡多說兩句,後臺開發需對釋出有敬畏之心,釋出要灰度上線,邏輯都驗證到才可以,切記不可釋出完事就完事了,要對自己的釋出負責,畢竟我們寫的可不是玩具程式,是真的會影響上億使用者的體驗的
4. 後續
- 功能上線之後,還需關注上線之後效果如何,是否符合預期,可以和產品討論是否有後續的優化點
- 系統是否便於debug,如果不是 這裡也是優化的點,畢竟開發同學有大部分時間都是在查case,這裡效率一定要提高
- 如何處理線上問題,建議看這篇,以恢復線上為第一原則
- 開發側是否為了趕工期 有挖坑,比如有臨時的解決方案,該填的坑也得填了
- 總結。方案架構設計的對比,思考等等,持續總結才能提高自己的架構設計能力
- 專案中使用的上下游元件是否瞭解其原理,比如使用 redis or kafka 是否真的瞭解了,都是可以學習的點
歡迎大家一起交流學習:
qq:564790073
github:https://github.com/hashyong