軟體專案很少會因為有人不會寫程式碼而失敗。
它們之所以失敗,是因為人們私下意見不合,假設沒有受到質疑,而且直到生產出現問題之前,每個人都「保持一致」。
這是一個關於合作專案的故事,合作過程並不順利,但最終取得了成功。
我們當時正在開發一款採用相當標準架構的產品:
前端:React + TypeScript
後端:REST API
多名工程師並行工作
緊迫的截止日期(有趣的那種)
一切看起來都很正常……直到後來改變了。
前端假定了一些後端尚未實現的欄位。
後端重構了響應體,卻沒有意識到前端依賴這些響應體。
類型是存在的-只是不存在於同一個宇宙。
雖然沒有出現足以阻止開發的錯誤,但漏洞總是在後期出現。
最糟糕的那種。那種「為什麼我們沒早點發現?」的警示。
在某個時候,有人問了一個危險的問題:
“Why don’t we just define the API first?”
這引發了以下事件:
一位後端工程師擔心失去彈性
一位前端工程師擔心速度變慢
另一個人說「我們可以以後再解決」(經典語氣)
我們沒有假裝達成一致,而是爭論了一番。
那件事就是轉折點。
我們並沒有把「API優先」當作一個流行語。
我們將其採納為合作協議。
我們實際上做了什麼:
早期定義了 OpenAPI 規範
前端產生的類型
將 API 的重大變更視為真正的重大變更,而不是「哎呀」。
我們接受的權衡:
後端失去了一些「隨意重命名」的自由
規範要求嚴格遵守和審查
前期變更所需時間稍長。
我們獲得了什麼:
可預測的前端類型
減少意外狀況
公關評論平靜得多
最大的勝利不在於技術,而在於人性。
而不是:
“Why is this field missing?”
我們開始問:
“Should this field even exist?”
規格要求迫使我們:
明確命名事物
爭論責任問題
讓決策透明化
設計評審變成了真正的設計評審,而不是事後分析。
說實話——過程並不順利:
我們一開始就制定了過多的規定,後來又不得不放寬一些。
一份宣傳稿比某些小說還長。
我們曾經破壞過 API,卻忘記重新產生類型(是的,那很傷人)。
合作並不能消除錯誤。
這只是讓它們更便宜、更早上市而已。
每個團隊都會經歷這一刻:
“It’s just a small backend change.”
臨終遺言。
有了共同的規範,這句話就變成了:
“It’s a small change… but it touches 12 endpoints.”
這正是合併前你想要的坦誠。
根據這次經歷,我現在相信:
合作正及早發現分歧。
沉默比衝突更危險
工具並不能解決團隊問題——它們只會暴露團隊的問題。
明確的合約可以減少受個人私利驅動的決策。
資深工程師不會避免摩擦。
他們管理得井井有條。
良好的合作並非只是表現得友善。
關鍵在於坦誠相待,偶爾也要克服一些不適──但要攜手共進。
當團隊今天不再追求速度,而是開始追求信任時,程式碼庫也會跟著改變。
是的——有時候事情就是從爭吵開始的。
原文出處:https://dev.to/art_light/we-didnt-align-we-argued-and-shipped-a-better-system-1818