你需要一個英雄:項目經理
已發表: 2022-03-11這篇文章是為你這個勇敢的企業家準備的,你心中有一個應用程序的想法,還有一點銀行里的現金。 你在雞尾酒餐巾紙上亂塗亂畫的圖表會擾亂整個世界,裝滿錢的自卸卡車已經派到你家了。 為了確保他們準時到達,這裡有一些簡單的建議可以讓您的生產週期順利進行。
為什麼首先需要項目經理
“計算機程序是人類製作的最複雜的東西,”Douglas Crockford 說。 你可能以前沒有聽說過這個名字,但他以程序員而聞名。 他目前是 PayPal 的高級軟件架構師,他開創了各種超出本文討論範圍的超酷技術。 他是一個非常了解大型項目的人。
至於我自己,我已經編程了 13 年,即使是現在,在某些時候,每個項目都會帶我進入未知領域。 那裡有很多不同的技術,並且正在以如此驚人的速度設計新技術,以至於我從未覺得自己完全掌握了正在發生的事情。 雖然每個項目都有其獨特的挑戰,但也有一些不變的因素:
- 該項目有時間壓力。
- 預算比我想要的要小。
- 我比客戶想要的貴。
- 我不像客戶想要的那樣完美地傾聽。
- 客戶沒有像我想的那樣完美地解釋事情。
顯然,我們需要一個保姆。 必須有人介入以建立基本規則,讓每個人都誠實,並確保我們不會忘記任何重要的事情。 必須有人促進各方之間的溝通。
這個人,這個英雄,是項目經理。
當我開始寫這篇文章時,Toptal 沒有與項目經理簽訂合同,但他們現在這樣做了。 協同作用! 我只能想像那些被閱讀以下建議並意識到他們錯過了一個很好的機會的權力。
為什麼程序員不能成為優秀的項目經理
撇開項目管理協會的認證不談,項目經理能帶來的最重要的東西就是經驗。 結果,許多程序員會成為相當不錯的項目經理。 我們在技術項目方面的經驗比其他任何人都多,而且我們的分析頭腦擅長編目信息和設定具體目標。
天知道,你付給我們的錢已經夠多了,所以期望我們能管理好自己而不是強迫你也為別人的時間買單似乎是合理的,對吧?
好吧,對於初學者來說,你付錢給我們編碼。
當我們從編程的迷茫中走出來決定優先考慮什麼,或者爭論這週實際上要完成多少工作時,代碼並沒有被編寫出來。 然後至少需要 10 分鐘才能回到“區域”,尤其是當我們對剛剛進行的對話感到壓力時,如果我們正在爭論功能優先級,這很可能會發生。 噓,我知道,但這一切都是為了最有效地利用昂貴的資源。
最重要的是,我們真的不能只見樹木不見森林。 如果你從這篇文章中什麼都不帶走,請理解這一點:當我整天盯著一些特定的錯誤時,我的大腦會失去對大局的追踪。
當我修復這些錯誤時,我的大腦會獎勵我,並且我認為我已經做了很棒的事情並且現在可以去玩電子遊戲了。 當有人提醒我主頁仍然損壞時,這完全是一個驚喜,因為我花了一天時間讓我的大腦對整個項目的一小部分非常詳細的了解,而忘記了其餘的部分。 我的大腦就是這樣工作的,許多其他程序員也有類似的心理構成。
為什麼客戶不能成為一名優秀的項目經理
那麼,如果我們程序員不想承擔完成項目管理工作的責任,那麼它必須落到你這個客戶身上。 是你的錢。 這是你的願景。 無論如何,你最終要對整個事情負責。
然而,你也有很多事情要做。
許多客戶像我們其他人一樣只是從事日常工作的凡人,有些人甚至因拖延或健忘而聞名。 雖然這不一定描述您,但請考慮擁有一個專業記憶者的想法,以便您可以回到保持整個項目活力的重要工作。
如果您曾參與或監督過類似範圍的技術項目,那麼您確實可能會成為您項目的優秀經理。 如果您還沒有,請不要低估可以預測可能出現的問題的人的價值。 時間估計總是只是估計,錯誤往往會在最不合適的時候出現。 讓另一個(如果只是兼職)員工知道流程的哪些部分需要或可能需要最多關注的人是值得的。
以質量保證 (QA) 為例。 適當的質量保證對於從任何項目中獲得您想要的東西都是必不可少的,而且它永遠不會得到應有的關注。 一個好的項目經理會充分利用有限的 QA 資源,也會為你的程序員提供質量保證。 有時,我們超出了我們的深度,有時我們會犯錯誤。 您需要一個技術熟練的人擔任監督角色,以確定您的程序員是否只是在休假,或者他或她是否實際上不適合該項目。 儘早解決人員問題可能意味著您的項目生死攸關。
最後,即使是您,客戶,有時也需要一些檢查和/或平衡。 這對我來說很難寫,因為我們計算機程序員並不以直言不諱的天性而聞名。 可以說,我參與過許多項目,客戶堅持認為一切都是重中之重,絕對是所有需要完成的事情。 雖然我毫不懷疑這是絕對正確的,但遺憾的是,這些客戶無法控制一天中的小時數。 他們最終沒有得到他們想要和/或應得的積極結果,我認為如果客戶委託項目經理有權評估工作量並委婉而堅定地控制事情,這種結果是可以避免的. 很難做出大多數技術項目所需的冷靜判斷,因為這是你的想法和你的錢,而計算機不在乎你或我是否會哭泣和尖叫。 (我知道這是真的,因為我已經嘗試過很多次了。)
管理技術項目的技術不完整列表
無論您是決定忽略之前的 1,000 多字詞並自己管理您的項目,還是您打算聘請某人但希望對流程有更多的了解,這份清單都會對您有所幫助。 我從來沒有(正式)當過項目經理,所以我不能說任何給定的項目經理會使用哪些工具,但我在所有這些技術上都取得了很好的成功:
里程碑
當開始一個新項目時,大多數人直覺地知道將項目分成更易於管理的塊很重要,每個塊的工作價值從幾周到幾個月不等。 在項目開始時,最好召開一次啟動會議來建立這些里程碑。 可以對如何達到他們有點模糊,最重要的是在每個里程碑之後繼續檢查,以便從每個人對項目的增強理解中受益,並確保項目的里程碑仍然(大致)與最初認為的大小相同。
時間估計
我們程序員絕對討厭估計,因為我們知道它們是錯誤的,而且我們知道它們會被用來對付我們。 他們錯了也沒關係,因為根據定義,它們是基於少數未知數的。 他們被用來對付我們也沒關係,因為我們的工作很輕鬆,而且不時地鞭打鞭子並沒有什麼壞處。

因此,每當新的里程碑開始工作時,請隨時詢問估算。 您應該期望每個主要功能有一兩行,以及該功能需要多長時間的粗略估計。 我通常做一個樂觀的估計,然後加倍。 通常情況下,這段額外的時間會導致看不見的陷阱。
用戶故事
用戶故事是對應用程序中單個功能的簡要描述。 它們作為重要特徵的記錄很有用,並且應該是一口大小,能夠放在索引卡上,並且通常伴隨著一點圖畫。 更重要的是,它們充當了客戶想要的東西和程序員必須告訴計算機的東西之間的橋樑。 它們對您(客戶)來說很簡單,可以在幾分鐘內完成,但對我們(程序員)來說足夠詳細,可以咬牙切齒。
有關用戶故事的一些快速信息,我發現 Mountain Goat Software 和 Roman Pichler 的這些教程質量高且簡潔。 有關敏捷項目管理整個哲學的更多信息,請閱讀這篇 Toptal 博客文章 Paul Barnes 的敏捷項目管理終極介紹。
組合物(樣機)
這不是一篇關於為什麼需要設計師的文章,因為我覺得大多數客戶已經理解這一點,但它值得重複,因為如果你在你的程序員面前拍出一個具體的、經過深思熟慮的設計,你會看到巨大的生產力提升。 每次我們必須做出設計決定時,我們都必須離開“區域”,每次我們必須返回並更改某些內容,因為我們沒有收到最終草案,好吧,你做數學......我'我不抱怨,因為設計很有趣,但根據我的經驗,這是可避免的額外計費時間的第一來源。
大多數設計師在 Adobe Photoshop、Adobe Illustrator 或 Sketch 中提供合成,也稱為合成。 如果您自己做,您可以使用無數在線工具之一,例如 Balsamiq 或 InVision。 comp 不必具有與成品相同的顏色和样式(因為這些可以在以後輕鬆更改),但請花額外的時間確保所有 UI 元素都存在並考慮在內。
站立會議
長時間的會議有時是不可避免的,但你真的不想讓你的程序員超負荷或占用他們不必要的時間。 我的一些客戶似乎希望我記住在兩個半小時的會議中所說的一切。 他們非常失望。 站立會議通常限制為 15 分鐘,並且習慣上站立持續時間。 站立方面應該確保每個人都參與,並保持會議簡短。
在站立會議期間,每個人都圍成一圈提供一份簡短的狀態報告,讓所有團隊成員隨時了解彼此的最新進展。 您可以在 ExtremeProgramming.Org 找到有關站立會議的更多信息。 如果你們都在遠程工作並且不想讓每個人每天都使用 Skype,那麼您可以嘗試使用 15Five 等有趣的工具來替代站立會議。 15Five 讓團隊成員在他們方便的時候提供他們的意見,它會提示他們調查問題,以梳理出更深入的回答。
票務系統
雖然任何人都可以維護一個便簽系統和 Google Docs(每個人的任務以不同的顏色突出顯示),但這真的沒有必要; 很多人都試圖為你解決這個問題。 Basecamp 和 Trello 以其易用性而聞名,而 Pivotal 則試圖將整個“敏捷”理念封裝到一個非常巧妙的包中。 無論您選擇什麼,一個好的票務系統至少可以讓您:
- 創建任務
- 分配優先級和截止日期
- 鏈接任務和子任務
- 分配不同的解決方案,例如“完成”或“測試失敗”
- 顯示分配給特定用戶的所有任務
當項目經理向您展示 40 張全部在同一天到期的鮮紅色優先票時,您將真正了解這個項目鳥瞰圖的價值。
源代碼控制
您甚至可能永遠不會查看項目版本控制系統中的代碼,但源代碼控制(或版本控制)是我們可以使用的最重要的工具之一,是可以想像的最強大的備份系統。
大多數現代項目都使用 Git,儘管有時您在處理已經存在了一段時間的項目時會遇到 Subversion (SVN)。 Github 允許您免費託管無限的公共存儲庫(此外,它包含世界上大多數開源項目),而 Bitbucket 允許您託管無限的私有存儲庫,因此是商業項目的首選。
無論您選擇哪種版本控制系統,它都會遠程存儲我們的代碼以防萬一發生任何事情,並且每次我們“提交”代碼時都會跟踪它,同時迫使我們寫一條描述我們正在處理的內容的小消息。 這可以防止不同的開發人員覆蓋彼此的代碼,它讓我們可以看到在給定時間段內所做的所有更改,它讓我們可以創建新的代碼分支來存儲不會立即上線的功能。 它甚至有一個名為“責備”的命令,可以顯示誰對給定的代碼行負責,以及何時提交。
源代碼控制是最大的。
測試驅動開發
這是一種相對昂貴的做法,這意味著它不經常用於預算僅限於幾個自由職業者的項目中。 所以你,作為一個創業者,不應該為不這樣做而感到難過,但我必須把這個想法擺在你面前,因為它提供了對錯誤的終極防禦。 基本上,您的程序員會花費額外的寶貴時間編寫測試(小代碼塊),以確保應用程序的某些部分以特定、可預測和可重複的方式運行。 例如,我可能會編寫一個測試斷言,當單擊“登錄”按鈕時,會打開一個包含用戶名字段的彈出窗口。
測試的美妙之處在於,一旦我編寫了它們,我就可以用一個命令來運行它們。 如果我編寫了 200 個測試,我可以在發布應用程序的新版本後運行它們,以確保這 200 個功能中沒有引入任何錯誤。 它並不完美,但它已經盡可能接近保證無錯誤(至少是 bug-lite)的應用程序。
包起來
這就是我對項目管理的所有了解。 我不確定這其中有多少會在項目管理學院通過,但這些都是我在過去十年中從事網絡項目時學到的東西。 當然,我建議您僱用某人以從他或她的經驗中受益,但我希望這些信息對您有所幫助,即使那不是您能夠做到的。 你將是這個項目的最終權威,所以你對它的內部運作了解得越多,你就越有可能帶領它走向勝利。