軟體專案開案前到底要做哪些事?

一個軟體專案的開展,簽約是一個最重要的里程碑。不論是接案還是外包,能走完簽約這一步,總是有一種「終於搞定」的感覺,雖然開案之後還是有很多事情要處理。

不過,要走到簽約這一步也不是那麼的容易。這中間還有很多預備的文件要先完成,才能讓專案的範圍驗收條件專案費用變得透明,在最後簽約的時候才會比較有信心這個案子不會出什麼問題。

當你剛開始創業只有自己一個人的時候,很多細節都必須瞭然於胸,才能夠知道如何跟業主溝通,釐清工作範圍和責任歸屬,或是進行談判協調專案費用。

接下來要介紹的這個流程,是個人從過去接案的過程中歸納出來的細節。其中每一個階段的文件都可以由發包方或是接案方來產出,看彼此的合作方式或是商業模式而定。唯有 Milestone Schedule (時程) 和 Quotation (報價) 是由接案方提出。

需求拆解流程取得開案前文件4

大致上整個流程可以分成三個階段:

  1. 創意階段-整理產品的使用者需求
  2. 草案階段-轉換成工程端與專案端的語言
  3. 簽約開案-決定專案範圍與商業條款

Scenario 使用者情境

做一個軟體產品最重要就是知道要提供什麼功能給使用者。如果是 1) 做自己的產品的話,可以從前期調研的 Persona 整理出使用者需求;如果是 2) 接案的話,有時候業主只有一個很粗略的想法,並沒有太多細節可以參考,這樣情況是經常發生的事。

所以這個階段最重要的事,就是把使用者情境描述記錄下來,而使用者情境描述可以利用下面這個公式:

作為一個 <某類型的使用者>,我想要 <達到某一個目標>,這樣做 <的原因是什麼>

例如我們以《如何使用實精畫布》的分享相片這個情境為例:

作為一個爸爸/媽媽,我想要分享我的小朋友的相片給其他的親朋好友,這樣我們可以隨時分享生活中美好的時刻。

子句一 (作為一個…):說明這個使用者情境是屬於精實畫布上的哪一個客群

子句二 (我想要…):說明這個客群想要解決的問題或是他們的需求

子句三 (這樣…):說明這個客群,想藉由處理前面子句二問題或需求,來滿足他們內心真正的渴望和訴求。所以在精實畫布上的解決方案獨特價值主張,要能夠呼應這個客群的內心需求

運用這樣的描述法,可以很完美地跟創業者的精實畫布中的規劃相呼應。同時,創業者也可以藉此,去挑選出真正需要解決的問題,以及針對這些問題去設計最好的解決方案。

UI Wireframe 線框圖

Kitchenware_wireframe

經過 Scenario 階段之後,使用者的問題應該已經被條列出來了。接下來,是發揮創意來解決這些問題的時候了。

分享相片為例,在線框圖階段的時候,創業者需要決定用什麼方式來處理使用者的需求。

使用者想要分享相片的時間點,可能是剛拍完照的時候,也可能是想分享之前的相片。分享的對象可能是固定的某些人,或者是分享時才想要決定對象。依照這些不同的情況,所設計出來的操作流程也會不同。

將這些操作流程用線框圖視覺化之後,創業者就可以很清楚地看出完整的操作流程,是不是能夠很方便地處理使用者想要分享相片的需求。

當然,一個產品可能不會只有分享相片一個需求。所以,如同前面對分享相片的作法一樣,將其他需求都使用線框圖視覺化之後,整個產品的輪廓就非常清楚了。瞭解整個產品的輪廓之後,接下來,是該瞭解如何實現產品的時候了。

Product Requirement Document (PRD) 產品需求文件

這裡我先引用一下維基百科上關於 PRD 的定義,其中介紹一般典型的 PRD 應該包括以下這些部份:

  1. Title & author information
  2. Purpose and scope, from both a technical and business perspective
  3. Stakeholder identification
  4. Market assessment and target demographics
  5. Product overview and use cases
  6. Requirements, including
    • functional requirements (e.g. what a product should do)
    • usability requirements
    • technical requirements (e.g. security, network, platform, integration, client)
    • environmental requirements
    • support requirements
    • interaction requirements (e.g. how the product should work with other systems)
  7. Assumptions
  8. Constraints
  9. Dependencies
  10. High level workflow plans, timelines and milestones (more detail is defined through a project plan)
  11. Evaluation plan and performance metrics

精實畫布開始,走過 Scenario,走過 UI WireframePRD 的第 1、2、4、5、7 點其實已經整理完畢。後面 R & R 階段可以完成 PRD 的第 3 點; Milestone Schedule 可以完成第 9 和 第 10 點,而第 6、8、11 點則是這個階段的重點。

PRD 是產品完整的需求書,也是說明實現這個產品應該包含哪些技術和資源的重要文件。前面透過線框圖,整個產品的流程細節都已經表露無遺,PRD 可以接續著把設計的語言,轉換成專案管理和軟體工程的語言。

接著,我們需要從線框圖中的每一個頁面之中,將每一個按鈕、每一行文字、每一張圖片背後所隱藏的服務運作細節找出來。例如:

  1. 分享相片需要至少一台伺服器
  2. 需要建立網路服務 API
  3. 資料傳輸的回應時間
  4. 分享對象則會有權限控管的問題
  5. 分享成功會有訊息通知則需要架設 Notification Server
  6. 資料上下傳需要做資料加密則需要購買 TLS Certificate 等等。

如此一來,需要完成什麼任務和取得什麼資源,才能完成這個產品就一清二楚了。同時,每一項功能的限制條件和測試驗收方法,也可依此來描述。

舉例來說,假設我們需要設計一個音樂串流的 API。在網路傳輸上,音樂的封包在網路上延遲不能超過 20 ms,不然會被人耳察覺音樂有遲頓的現象。

所以這 20ms 就是封包傳輸延遲的限制條件,而驗收方法則可以是,使用工具軟體檢查每一封包之間的延遲,以確認每個封包的延遲時間低於 20ms。

R & R Matrix 角色與責任陣列

R & R 文件中,基本上會說明專案中每個角色所賦與的任務。其中當然也包括合約中供應商的角色,以及供應商應提供的軟體、硬體或是支援服務。另外,R & R 文件中也應該標示其他第三方關係人與專案有關聯的角色及責任。

專案角色 專案職責
專案負責人 執行專案的決策。包括決定產品功能、是否支付費用等重要決定
專案經理 確保專案成員準時交付專案成果
專案成員 實際執行專案任務的每一個人
使用者代表 代表實際用戶對專案成員說明用戶對產品的期待,並進行測試,提供回饋
客戶決策代表 負責將客戶組織內部的共識,也就是對專案問題以及專案成果的想法,與專案經理溝通。
供應商 1 負責照片分享功能
供應商 2 負責照片特效濾鏡功能

 

R & R 的重點在於界定每個角色在專案中的職責範圍。而細節的功能實作任務,則可以放在 Milestone Schedule 裡面描述。做到這裡,PRD 的第 3 項就可以補上了。

Milestone Schedule 里程碑時程

在展開 Milestone Schedule 的時候,可以善用一些工具,像是 Microsoft Project 或是 OmniPlan。以下的附圖是利用 OmniPlan 展開工作項目的例子。

schedule_template

在前面 PRD 的階段,所有工作細節應該已經從 Wireframe 中,一樣一樣的抽取出來。然後依照軟體、硬體、雲端程式、App 程式等等的類別,分門別類,排列妥當。

現在只要將每一項工作,抄錄在 OmniPlan 或是 Microsoft Project,再填入工作負責人以及預估工時,再依照專案任務的相依性,重新整理專案,則專案的關鍵鏈,或者稱要徑 (Critical Path),也就是專案時程中最長的那一條路,所有會影響專案時程的任務,都會被找出來。

做到這裡,PRD 的第 9,第 10 項又可以補齊了。

Quotation 報價

有了前面預估的人力工時 (描述於 Schedule),以及應該取得的設備或是資源 (描述於 PRD),所有的專案成本就攤開得差不多了。再來,如果你是接案方,就看你要賺多少,把你的利潤加上去;如果你是發包者,就可以藉自己預估的成本,來檢視每一家的報價是不是合理划算。

這裡要強調一件事,這裡的預估成本來自於最前面的 Scenario。所以越精準的需求,這裡的預估成本就越精準。反之,如果需求不明確,專案範圍難以界定,最後提出來的報價誤差就越大。

一般接案方,當然會想留比較大的利潤空間,但是也會擔心過高的報價拿不到案子,心裡也是兩難。同樣的情況對發包方也不是好事,因為需求沒有界定清楚,實作上就有不同程度的實作空間,對於實際成果與原先預期結果也會存在比較大程度的落差。

Contract 合約

最後,最重要的工作就是簽訂合約。

我認為簽訂合約最重要的三件事,還是文章一開始所提到的,專案範圍驗收條件專案費用。一個好的案子,這三件事一定是清清楚楚,而且是雙方都接受的條件。代表這個案子,不會有太多的意外。其他部份則是專案維護時效付款條件所有權歸屬法律責任歸屬等。最後記得把 PRD 作為附件附在合約上,之後雙方有任何異議,都可用 PRD 的內容來釐清。

Contract_p1 Contract_p2

結語

專案管理其實跟軟體工程一樣,都要運用大量的邏輯思考,才能將流程的每一個環節拼湊起來。從 ScenarioContract 這段路的重點在於,確保「對的產品,能夠被做對」。

 

, , , ,