導入團隊 Project Templates 樣版設計 – (首部曲)


前情提要
先前,小編在 Visual Studio Everywhere 台北場分享了「團隊開發永遠的痛-談導入團隊開發的共同規範」
有些人可能會誤解這只是探討導入 Project Templates 的問題而已,但事實上,在導入 Project Templates 時,並不是為了有 Project Templates 而導入,因為重點不在於 Project Templates 而是在於如何導入團隊共同規範,這不只是可以從基本的 (Coding Standard / Coding Rule) 、與團隊的合作模式來探討如何導入,而且,這還會跟你個人的工作管理有關。
這一篇,會探討為什麼說會跟你個人的工作管理有關?以及這個從個人到團隊的導入要如何來進行,進而建立團隊的 Project Templates 。
為什麼會有這篇文章?筆者打算寫一個長篇,來記錄、順便說明在導入 Project Templates 時,可能會有的一些困難點,怎麼一步步克服,以及該怎麼來進行,技術障礙、問題該怎麼來解決等。
要導入 Project Templates 首先我們得要先了解團隊的狀況,這包含:
  • 團隊的 Skills
  • 現有團隊有無規範 (Coding Standard/Coding Rule/Coding Style) 等等…
  • 使用協同合作工具 (Microsoft Teams/Skype/Slack 等…)
  • 團隊的文化
團隊的 Skills
首先,我們先探討團隊的 Skills,一般來說,我們會認為專案的團隊所需要的 Skills 不需要太高,專案大多是 Team Work 模式,除非你是一人專案 (一人專案暫且不是這篇的討論範圍) ,否則大多有一定的合作模式。這樣聽起來好像說 Skills 不重要?確實,在團隊開發下,個人的 Skills 重要性遠低於團隊的共同守則,所以這也是筆者為什麼會這麼重視團隊要有共同的規範這件事,稍後筆者會探討團隊的文化,這是重要,因為會支撐整個團隊的合作模式。

團隊有無規範 (Coding Standard/Coding Rule/Coding Style)
前面我提到,規範這件事情的重要性遠高於個人的 Skills,為什麼呢?這邊筆者再更詳細加以說明,個人的 Skills 不足,可以藉由標準開發(模板/SPEC/框架/架構)、SA ==> SD 與 program SPEC 讓 PG 在 Method 與 UI 上填補程式碼,這些已經為標準 SOP,也是團隊開發流程成員都具備的共通默的契,所以在客戶需求明確下,PG 不需具備太高的 Skill 即可在這樣的模式下作業,也就是我說的,藉由團隊共通規範也可以隬補工程師 Skill 的不足部分,且工程師也可以由實作過程中,從團隊的規範中學習,並與團隊一同成長。

使用協同合作工具 (VSTS/Microsoft Teams/Skype/Slack 等…)
近年來講求敏捷,筆者目前帶的專案也是採敏捷的方式,但如果是協助客戶端導入,筆者並不刻意強調敏捷的各種好處,因為任何團隊導入敏捷通常不是全盤導入,這有時必須看當時團隊的情況而定,因為敏捷不是銀彈,團隊願意接受改變、或願意嘗試改變會是良好的基礎。
除了良好的基礎外,團隊平常所使用的協同合作工具的角色就非常重要,這裡所提的協同工作所指的不光是企業內部的員工共同討論工作、視訊開會、共同編輯文件等,還包括個人的工作管理、VSTS,恩,對!VSTS,個未發現我把 VSTS 與 Microsoft Teams 放在一起,其實是不一樣的東西,對!是不一樣,沒有錯!只不過,個人的工作管理必須先做好才能夠與團隊內的成員討論共同工作、視訊開會、共同編輯文件時,才會有效率,注意,是說,這樣才會發揮溝通的真正效率,所以我把它放在一起!
試想,個人工作管理不當的情況下,Priority 排序錯誤,討論內容自然會有誤差,這麼一來,其他團隊成員誤解與你整合的順序,那要不是你完成時發現這個需求重點不在這,要不就是做到一半發現應該先做什麼才對,但時間已經浪費,哪你又得重新花一次的溝通成本,協調團隊成員與你配合的部分得要延後,如果同事坐在你後面這成本似乎還好,但大大小小的細節都如此,那就很大的成本。
團隊開發,許多事情都是環環相扣,所以敏捷一開始所提倡的『減少浪費』其實也是在說明這些事情,因為個人的工作管理這些細節部分也會是 Team Work 的基礎。

團隊的文化
這真的是比較難的部分,前面筆者所提的部分,最後我希望能成為團隊合作的習慣、團隊成員都成在其中慢慢獲得好處 (這個好處指的是敏捷的快速反應、專案的透明化 等等) ,進而形成一種自然而然的合作模式、且團隊成員的自我成長會帶動團隊的成長,團隊成員中較 Junior 的工程師會受其影響並自我提升,最後,我期望能成為團隊的文化。

會有哪些步驟?該怎麼進行?
本篇文章想要說明的是,藉由 Project Templates 的導入,導入團隊開發的公同規範,使用一致性的開發方法,如:Coding Standard/Coding Rule/Coding Style 、使用等,所以 Project Templates 在這裡只是工具,真正的重點是一致的開發方法的導入、推動。
但是,團隊共同的開發規範不是一就可及,因為者也是團隊共識問題,那麼該怎麼做,可以分哪幾個步驟來進行呢?

1. 原始檔控制 (Source Control)
這是任何事情的起點,許多事情,先不要提到規範問題,我們主要的產出就是程式碼,若是連主要的產出都沒有妥善的被管理,那麼什麼都不用談。

2. Coding Standard/Coding Rule/Coding Style
透過團隊內部討論,建立一種程式碼撰寫規範,包含程式碼註解撰寫規則,盡量簡單,直覺,但是不可以失去原先的標的 Coding Style,如果程式碼可讀性差,連你自己三個月後來看你自己的程式碼都不是馬上能夠看懂的話,就表示還有檢討的空間。
另外,這時候其實就可試著培養團對成員進行 Code Review 的習慣,但不是要 Challenge 程式碼而製造對立,而是培養工程師互相討論程式碼該怎麼寫,客戶需求該怎麼做,建議可以每一週進行一次,但不要花費太多時間。如果整合 VSTS / TFS 的 Check-In Policy 與 Team Build 會有更好的效果。
詳細 Code Review 方式與 Check-In Policy 可以參考筆者以前的文章:「[StyleCop] 如何設計屬於團隊的 StyleCop Source Analyzer Rule (Coding Standard)
Front-End 的程式碼規範我們稍後來談,因為 Project Templates 也會包含 Front-End Framework,所以這些都是團隊要討論出共識的部分。

3. 從個人的工作管理 到 團隊
以前,在還沒有 VSTS 時,筆者的公司進行專案時,我們是使用 EXCEL 做個人的工作管理,包含個人每天 Time Card 的填寫,都是使用 EXCEL,甚至個人的(本周/下週)的工作計畫都是使用 EXCEL,但每個人都生出一個 EXCEL 又延伸其他管理問題,雖然,當時的公司請筆者使用 ASP.NET WebForm 開發一套 WKM 工作管理系統,但還是衍伸一個問題,就是沒有辦法像 (VSTS/TFS)的工作項目可以與 Source Code 相關聯的問題,因為當時,TFS 都還沒推出。但在現今,筆者會認為,將簽入的程式碼與 Task 相關連是工程師自身工作管理的一部份,所以,筆者會建議導入 TFS 或是VSTS,因為使用 TFS 或是 VSTS 可以輕易的將個人的工作管理與團隊互相整併,PM 或是 PO 可以隨時掌握專案的執行情況,客戶也能清楚專案的進度,也容易達到敏捷所提倡的透明化。

4. 建立共通架構規範
這與第三點相同,只是軟體開發總是會有架構上的設計,比如分層的方式、延展性、擴充性、共用模組設計、商業邏輯層 (或BO元件)、服務層 (Services Layer)的設計必須要有共通規範,不要太複雜,怎麼切割可能 BY 客戶的產業、Domain Knows-how 有些不同,這個沒有關係,但可以定義出一個基本的分層樣式。企業內部若有資深的 SD 人員或是架構師,可自行規範這個部分,若沒有也可尋求外部講師或是顧問協助提升這個部分。

5. 使用哪一種 Front-End Framework
這是最難管理的一部份,尤其團隊對於 Front-End Framework 的 Skill 都不同的時候,這部分的處理有時可能會導向用教育訓練的方式來進行,這是對於不熟悉的工程師而言,可由熟悉的工程師帶著進行,而先前執行過專案也可以是參考的依據,總而言之,這是未來製作前端 UI 會使用、並包含在 Project Templates 裡面的 Front-End Framework 套件,盡可能凝聚出共識,參考的專案也盡量以含括 基本 CRUD 畫面、查詢、Grid、基本表單、Report 都有包含的專案,先撇除產業的不同,有一個可以包含在 Project Templates 的初版可以即可,那麼之後可以再擴充不同的 Item Templates 到現有的 Project Templates 專案中即可。

結語
這一篇,筆者先探討建立 Project Templates 可能的實作規範與方向供各位參考,下一篇筆者將帶著大家就一個筆者先前實做過的案例來為各位介紹導入與設計的方式。


































留言

這個網誌中的熱門文章

軟體工程師 - 成長的 10 個階段

常見的程式碼壞味道(Code Smell or Bad Smell)

什麼是 gRPC ?