朋友和同事常問我:「弗蘭克 - 你怎麼這麼有效率?」。雖然我沒有靈丹妙藥,但我形成了一種心態並採用了一套工具和技術來幫助我作為軟體工程師提高工作效率。在這篇文章中,我將與您分享其中一些策略。
在經濟學中,生產力衡量產出與投入的比率。在軟體工程中,我認為產出是我的工作創造的價值,輸入是花費的錢,其中包括我的工作時間,以及我用來產生價值的工具的任何費用。在我看來,重要的是要考慮你的工作作為輸出的價值,而不是合併拉取請求或關閉票證。
當我們談論生產力時,我們通常將其視為有效性和效率的組合。
提高效率就是在保持輸入不變的同時增加輸出。在產出產生價值的背景下,它通常被解釋為「做正確的事」。
提高效率就是減少輸入,同時保持輸出恆定。它通常被解釋為“正確地做事”。
這種區別很有用,因為它可以幫助辨識改進的潛力。考慮非常快速地編寫不需要的東西。這樣效率高,但效果低。另一方面,考慮用您沒有經驗的程式語言編寫一些非常有價值的功能,這會顯著減慢您的速度。高效的同時,效率也會低。
有效意味著「做正確的事」。但你如何確定什麼是正確的事呢?您需要確定需求。這可以透過與客戶和利害關係人交談、閱讀客戶回饋或分析業務指標來完成。一旦確定了相關的目標/史詩/功能/任務,您就可以對它們進行優先排序。
在考慮生產力的優先順序時,我們不能只考慮影響(產出)。我們還需要考慮所需的努力(投入)。影響力矩陣是決定優先順序的有用工具。
您將任務放置在努力軸和影響軸之間的平面上。為了最大限度地提高生產力,首先要專注於快速獲勝。然後計劃處理主要專案,到處加入填充物。避免浪費。
透過優先考慮影響大、省力的任務,您可以為系統(公司、部門、團隊)的生產力奠定良好的基礎。然而,當考慮個人貢獻者(例如您自己)花費的時間和精力時,也有很大的改進潛力。如果您無法有效執行,那麼擁有「完美計劃」是不夠的。
每個人都有相同的可用時間。為了論證這一點,我們假設您每天工作 8 小時。但是,您將無法將整個 8 小時用於高影響力的任務。有會議、營運任務、開銷和乾擾。即使當您正在執行任務時,您的效率也可能取決於您的心情、精力水平和專注能力。
就我個人而言,長期生產力的最大因素是建立和維持動力。我喜歡用雪球來比喻我的工作動力。在物理學中,動量定義為物體的質量與其速度的乘積。
當您開始新工作或擔任新角色時,您就像山頂上的一個小雪球一樣開始。雪球的品質對應到你累積的知識和技能。速度對應於您能夠完成編碼、審查 PR 等任務的速度。
當你第一次開始推時,感覺很難獲得動力,因為球很小,很容易卡在小樹枝或石頭上。當你繼續前進時,球的尺寸和速度都會增加。
為了隨著時間的推移建立並保持你的動力,你有幾項責任:
增加雪球的質量。學習新的程式語言、框架、工具和技術。熟悉新的程式碼庫,並了解您正在從事的業務領域。與您的同事、利害關係人和客戶建立持久的關係。所有這些都將使您更輕鬆地克服障礙。
提前規劃,避免撞到樹木等重大障礙物,這些障礙物可能會阻止你的雪球,甚至導致雪球部分掉落。這意味著儘早辨識潛在的阻礙因素和風險,並在達到它們之前避免它們或減輕它們。
繼續推動你的雪球。這意味著您的任務取得進展,創造價值。你需要找到適量的推動力,因為推動力太大會讓人很難停下來繞過障礙或改變優先事項。
您如何在整個工作日/一周中平衡這些活動?如果你只專注於推動而不進行計劃,你很容易遇到障礙。如果你不努力增加體重,你將無法克服越來越大的障礙並接受更大的挑戰。如果你只致力於增加品質而不是推動,那麼你就沒有創造價值。
在我的職業生涯中,應用敏捷軟體開發的核心原則效果很好。此外,我發現並磨練了一些技術和工具,幫助我每天建立和保持動力。以下部分將快速回顧敏捷原則,然後深入探討我使用的工具和技術。
我非常喜歡敏捷軟體開發宣言背後的原則。我不是說像 Scrum 這樣的“敏捷方法論”,而是核心原則。總結一下對我來說最重要的幾點:
持續為客戶創造價值
歡迎不斷變化的需求
簡單性-最大限度地增加未完成的工作量
持續專注於卓越技術和良好設計
定期反思和適應
我如何將這些應用到日常工作中?我只考慮已完成的工作,如果該工作可用於生產。我將任務分解為盡可能小的部分,目標是在一天內完成拉取請求,以獲得早期回饋并快速迭代。如果優先順序發生變化,這使我可以切換到另一項任務,而不會留下未完成的工作。
這確保了我的工作專注於增加價值,並且我可以快速適應不斷變化的需求。為了確保簡單性,我應用了 YAGNI(你不會需要它)原則。我只實現現在需要的,避免過度設計。我明確地進行設計,以避免在編寫程式碼後進行設計討論時失去動力。當重新審視程式碼時,我總是嘗試改進它,並不斷回報技術部門。
我也會定期反思我的工作,並嘗試改進我的工作流程和工具。我們將在下面的「改善」部分詳細討論這一點。如果您想了解有關敏捷軟體開發的更多訊息,請查看我的文章像我是體育學生一樣解釋敏捷。
接下來,讓我們深入了解一些您可以親自嘗試的具體工具和技術。
Kaizen 是日文術語,意思是「持續改進」。這是一種專注於對流程、工作流程和工具進行微小、漸進的改變的概念。它作為豐田之道的一部分而普及。核心思想是:
改進是一個永無止境的過程。進行微小的、持續的改變,以取得重大的、長期的成果。
使每個人都能發現效率低下的問題並提出解決方案。
專注於過程,而不是人。有系統地改進流程。
消除浪費。不能為客戶或組織增加價值的活動需要被刪除。
衡量並反映。使用指標來追蹤進度、嘗試更改並反思結果。
我在與我合作的團隊中以及個人層面上應用 Kaizen。每天結束時,我都會花 5-10 分鐘反思當天執行的活動,以及它們對客戶或我的組織的影響。我每週花 30-60 分鐘來改善我的工作流程/工具。
例子有:
自動建立我之前手動編譯的每日或每週訊息/報告。
透過學習或檢視鍵盤快速鍵、IDE 功能或外掛程式來提高編碼效率。
取消時間投入回報 (ROTI) 較低的會議。考慮閱讀會議摘要/會議紀錄。
在我的收件匣中新增資料夾和規則,以集中一些我可以每週查看的低優先級郵件。
歸檔一些不再相關的舊 Slack 頻道。
零收件匣技術旨在透過將未讀郵件數量保持在(或接近)0 來有效管理您的收件匣(電子郵件、slack)。不會遺失重要訊息。核心思想是:
處理每條訊息,而不僅僅是「檢查」它。應用 4D:刪除、委託、延遲、執行。
如果訊息不相關、垃圾郵件或不必要,請刪除該訊息(主要適用於電子郵件)。
如果該任務屬於其他人,則將其委託給其他人。立即轉發。
如果訊息需要您採取行動但無法立即處理,請推遲該訊息。安排在以後的時間。大多數電子郵件用戶端都有此功能,對於 Slack 頻道,我使用「提醒我此功能」。
如果完成任務的時間少於兩分鐘,請立即執行。
使用資料夾、標籤、頻道對訊息進行分類。在處理傳入訊息之前,使用自動過濾器/規則自動組織它們。根據專案和訊息類型(例如拉取請求、票證更新),我個人的電子郵件帳戶中有不同的資料夾。
不要將電子郵件用作待辦事項清單。將較大的、可操作的專案移至專用的任務管理工具。
阻止訊息時間。不要整天不斷地查看電子郵件或 Slack,而是使用專門的時間段,最好是在您效率最低的時候,例如午餐後或下午。
取消訂閱並過濾。如果您收到不相關的電子報/更新,請取消訂閱。如果您無法取消訂閱,請新增自動過濾器,以便在郵件到達您的收件匣之前將其刪除。
積極歸檔。我個人不會存檔電子郵件,但我使用過濾器僅顯示收件匣中未讀的郵件。我積極歸檔孤立的臨時 Slack 頻道。
保持簡單和一致。無論您使用什麼系統,它都需要足夠簡單,以便您每天都能應用。
我嘗試使用數字待辦事項列表,但它們不適合我。它們經常過時,或者某些任務永遠停留在那裡。我改用筆記本,它就放在我面前的桌上。我使用一個簡單的系統:
每天,我都會依照優先順序寫下日期和當天要完成的任務。我要么在前一天晚上做,要么作為早上的第一件事。
當我完成任務時,我會檢查它們。每當我從事一項活動時,例如查看 Slack 訊息或收到的 PR 審核請求,我都會查看我的清單以提醒自己最重要的任務是什麼。這幫助我回到正軌,並首先專注於最重要的部分。
隨著時間的推移,可以將新任務新增到清單中。不完成所有任務也沒關係。然而,本著 Kaizen 的精神,我將在一天結束時回顧這些情況,並製定一個計劃,在未來避免它們。
讓我們來看一個範例列表:
想像一下,在撰寫部落格文章時,一位同事通知您,您需要在今天之前發送一份報告。您將其加入到列表頂部,並立即開始處理它。到最後,你還是沒能檢查你的電子郵件。
當結束一天的工作時,你試圖理解報告為何出乎意料地出現。可能的原因有很多種,例如:
今天需要完成報告,你知道這一點,但忘記了你什麼時候計劃了這一天。在這種情況下,您可能需要調整流程,以在截止日期前一天提醒截止任務。
今天需要完成報告,但你不知道,因為你的同事忘了告訴你。在這種情況下,請提前明確傳達您需要多長時間。考慮使用共享任務管理工具,您的同事可以將您指派給某些任務,該工具會通知您這種情況。
報告不必今天完成。無論如何,下週末之前不會發送。在這種情況下,請務必挑戰未來緊急臨時任務的優先順序。
我每天都使用時間拳擊和時間限制。時間劃分可以幫助我規劃一天和一周的時間,確保我為重要的短期和長期活動騰出空間。時間限制可以幫助我避免陷入細節或迷失在細節中。
以下是我安排時間進行的一些活動:
審查拉取請求(每日)
寫程式碼(每日)
閱讀並回覆訊息(每日)
一對一/團隊會議(每週/每兩週一次)
教育、學習、個人發展(每週)
運動(每天)
我有時會用日曆來安排時間,或是在待辦事項清單中的專案旁邊寫下時間。我在每個區塊內應用時間盒,但也在更廣泛的範圍內應用。例如,當我將 PR 審核時間限制為 60 分鐘時,即使我沒有審核所有 PR,我也會在 60 分鐘後停止。其餘的將在第二天獲得更高的優先權。
時間盒還可以幫助我更好地管理未知的事情。當開始一項更大的任務時,我經常以概念驗證 (POC) 開始,時間限制為幾個小時。如果我無法在那段時間完成 POC,我會更改對該任務所需工作量的估計,將其放置在影響工作量矩陣中的另一個位置,並相應地重新調整其優先順序。如果它仍然是首要任務,我會延長時間範圍,但如果有其他快速成功的方法,我可能會暫時轉向它們。
時間限制幫助我在建立和維持動力所需的不同活動之間保持平衡,而時間限制則強調進步而不是完美。
我們的大腦能夠解決複雜的問題,但難以應對幹擾和情境切換。我個人發現,與8 小時的混合工作相比,如果我將4 小時用於不受干擾的深度工作,以及4 小時的淺度工作(可以處理幹擾),那麼我在8 小時內的生產力會更高。
想要成功進入深度工作,需要有合適的環境。我在聽音樂時使用耳機,我的桌子上需要有一點雜亂,但不能太多。如果太多了,我得先清理一下。我也可能會關閉訊息程式/通知。
雖然深度工作非常有效,但也令人筋疲力盡。我的注意力集中能力在約 45-60 分鐘後迅速下降,但 30 分鐘後注意力開始對我的身體造成損害。我的頭開始疼痛,我的肌肉開始緊張。
為了幫助保持工作和恢復之間的平衡,我經常使用番茄工作法™ 。核心理念是工作25分鐘,然後休息5分鐘。 4 個番茄鐘後,進行較長時間的休息 15-30 分鐘。
番茄工作法對我的工作還有另一個正面的影響。它迫使我將工作分成更小的塊,這些塊可以在一個槽內完成。例如,如果我正在編寫程式碼,我的目標是在每個插槽之後對其進行編譯。理想情況下,我也能夠提交更改。在撰寫部落格文章時,我的目標是在一個時段內完成一個部分。
帕累託法則背後的理念是,80% 的結果來自 20% 的原因。當應用於工作時,意味著80%的價值來自20%的工作。我們可以利用這項原則,透過專注於能帶來最大價值的 20% 的工作來最大限度地提高生產力。
這對我來說在實踐上意味著什麼?
廣泛使用 GenAI。我使用 GenAI 生成程式碼,這通常不是很好,但如果它有效,它將作為第一次迭代。我也使用 GenAI 產生自動化測試。我寧願擁有醜陋的、經過測試的程式碼,也不願擁有漂亮的、精緻的、未經任何測試的高性能程式碼。不要一開始就以 100% 的程式碼覆蓋率為目標,而是專注於關鍵方面。
不要過度設計。首先,使其發揮作用,然後使其正確(如果它已證明其價值)。
不斷重構。每當我接觸程式碼時,我都會尋找改進它的機會。此機制確保廢棄程式碼不會被過度設計,但相關程式碼會收斂到高品質。
逐步減少勞累。當你做過一次某件事時,值得寫在紙條或票據上。當您定期但不經常這樣做時,請建立一個操作手冊。當操作手冊變得很長並且執行頻率更高時,請將其編寫成腳本。當您經常執行腳本時,使其自動化。
當然,你需要記住,剩下的 20% 的結果,花費的時間是前 80% 的 4 倍,是你要支付利息的部分。因此,你應該明智地選擇你可以承擔多少部門,你願意支付多少利息,並投入時間定期償還部門。
那為什麼應用這種技術可以節省時間呢?如果你最終完成了所有工作,那還有什麼意義呢?關鍵是你所做的工作幾乎永遠不會 100% 解決問題。可能是因為你沒有完全理解這個問題。或者問題可能會隨著時間的推移而改變。也許稍後會出現其他更好的解決方案。透過專注於帶來最大價值的 20%,您能夠更快地交付價值,並且能夠更輕鬆地進行轉型。
現場步行是來自豐田方式的另一種技術。 Gemba 是一個日文術語,意思是「真實的地方」。在軟體開發的背景下,這意味著去工作完成的地方,例如團隊的工作空間、程式碼儲存庫、CI/CD 管道、事件通道、生產環境。作為技術主管,這對我來說很重要,可以避免「象牙塔」綜合症,並與同事正在做的工作保持聯繫。
現場行走幫助我及早發現效率低、瓶頸和障礙。它也幫助我更了解工作背景,並與同事建立關係。我嘗試每天進行現場散步,花大約 15 分鐘的時間。關鍵思想是:
去創造價值的地方。在 SRE 中,我稱之為「戰壕」。
觀察,不要判斷。提出問題並傾聽同事面臨的問題。閱讀字裡行間,保持好奇。
與同事互動。
專注於流程,而不是人。
升級是指當前等級無法解決問題時,將問題向上級或專業等級提出。快速升級對於確保問題由具有適當專業知識、權力或資源的人員處理來確保有效解決非常重要。
升級對於避免任務陷入困境也很重要。雖然對某些人來說這似乎是“抱怨”,但快速解決問題符合公司和客戶的利益。
我經常將升級與時間限制結合。如果我無法在預計時間內完成任務,我可以將其回報給相關各方,例如我的老闆或該領域的專家。
在這篇文章中,我們探討了提高軟體工程師生產力的各種策略,同時平衡有效性和效率。我們強調了使用影響-努力矩陣進行優先排序的重要性,以專注於高影響力、低努力的任務。
我們了解如何建立和保持動力,深入研究生產力工具集,包括確保價值交付和適應性的敏捷原則、用於持續改進的Kaizen、用於管理訊息的零收件匣技術、使用待辦事項清單進行日常任務管理、有效時間管理的時間盒和時間限制、保持專注的番茄工作法、價值最大化的帕累托原則、與團隊工作保持聯繫的現場行走,以及快速升級以有效解決問題的重要性。
您最喜歡的生產力工具和技術是什麼?您如何平衡工作的效能和效率?請在評論中分享您的想法!
如果你喜歡這篇文章,你可以在 ko-fi 上支持我。
待辦事項清單照片由Thomas Bormans在Unsplash拍攝
日曆照片由Eric Rothermel在Unsplash上拍攝
沮喪的人照片由ahmad Gunnaivi在Unsplash上拍攝
相機鏡頭照片由Paul Skorupskas在Unsplash上拍攝
筆記型電腦照片由Lukas Blazek在Unsplash上拍攝
汽車工廠照片由Michael Satterfield在Unsplash上拍攝
原文出處:https://dev.to/frosnerd/frank-how-are-you-so-productive-2l56