Salesforce 整合幾乎從來不是敗在通訊協定上。驗證是已經解決的問題,寫入一筆記錄也是已經解決的問題。真正把專案拖垮的,是每天的請求配額和資料模型的形狀,而這兩件事通常要等到上線大約三週之後才被發現,那時夜間作業開始回傳錯誤,卻沒有人說得清它在測試環境裡為什麼是好的。 這個模式一致到可以預測。開發者對著一個 Developer Edition 組織開發,一切通過,客戶簽字驗收。接著這套程式碼遇上的,是一個已經住著行銷連接器、資料倉儲擷取作業,以及一個 2019 年就在跑的 Apex 觸發程序的正式組織,而那份看起來很寬裕的請求預算,其實是別人早就在花的一口共用的鍋。 這篇文章把意外提前攤開來談:你應該用哪一個 API、配額是怎...
程式設計教學
實用的程式設計教學,提供清楚範例與最佳實務,涵蓋 Python、C++、JavaScript 等。學習設計、測試與效能優化。
大多數 WordPress 外掛開發都走同一條弧線。有人需要一份預約表單、一個內容匯入器,或是結帳頁上多一個欄位,開發者把它寫出來,它能用,大家各自忙別的去了。兩年後,這個網站被困在一個舊版本的 WordPress 上,因為沒有人有把握那個外掛能撐過一次更新,而寫它的人早就離開了。 原因很少是核心跑得太快。WordPress 在破壞相容性這件事上非常保守,五年前寫得像樣的外掛,今天一行都不用改仍然跑在 WordPress 7.1 上。外掛會壞,壞在第一個星期定下的幾個決定:功能被放進佈景主題、該掛鉤的地方直接改了核心檔案、資料被塞進手邊最方便的結構,以及從來沒有人拿發行候選版本試過。 一個客製化 WordPress 外掛靠什麼才能撐...
事故檢討很容易召開,卻很難做得有用。會開了,文件寫了,四條改善事項記下來了,六個月後同一個故障又發生一次,而某個人正好在找別的東西時翻出那份舊文件。 談到這件事時,注意力幾乎都落在「不究責」這個詞上。這條原則確實重要,但失效的地方並不在那裡。有大量組織把不究責執行得一絲不苟,檢討卻什麼也沒有改變,原因很簡單:他們把檢討本身當成了交付物,而不是當成產出交付物的手段。 判斷你們的檢討是否有效,有一個簡單到令人難堪的測試:過去六個月記錄下來的改善事項,實際完成的比例是多少? 如果答案是「大部分」,那麼無論流程長什麼樣,它都在發揮作用。如果低於一半,你們是在開會而不是在運行一個流程,換更漂亮的範本也救不了。少數幾條帶負責人與期限的事項,勝過...
技術文件的失敗方式非常具體,也非常好預測。有人在兩週清閒的時間裡寫下一大堆,接著系統變了,沒有人回頭更新,一年之內那份文件就開始信心十足地講著錯誤的內容。到了那個時候,它比什麼都沒有還要糟,因為相信它的讀者會依據早已不成立的資訊去動手。 常見的反應是號召大家多寫一些,而這只會讓同樣的失敗來得更快。有用的反應是少寫,並且認真挑選寫什麼,因為真正的瓶頸不是寫作的工夫,而是維護的工夫。文件從寫完那一刻起,就開始被現實甩在後面。 判斷一份文件該不該存在,唯一經得起時間的檢驗是: 當它變錯的時候,會不會有人察覺?部署指南天天有人用,錯誤立刻就會浮出來。一份二十頁的子系統說明只會被讀一次,它的錯誤要等到十八個月後,有人照著它動手時才浮出來。沒有...
開發者到職通常是用新人訓練花了幾天來衡量的,而那是問題的另一頭。真正重要的數字是另一個:一位新來的工程師要過多久,才能改動某個東西,而且有把握自己沒有弄壞別的地方。在大多數團隊裡,這個數字是以月計算的,而不是以天計算的。 延遲很少出在人身上。它出在系統裡有多少部分只存在於別人的腦袋裡,以及前兩週裡有多大一部分時間,是靠一次次打斷別人,一點一點把這些東西挖出來的。 唯一值得追蹤的指標:從到職到他們的第一次改動進入正式環境,需要多久。 不是第一次提交,提交可以只是改一個錯字,而是一次有意義而且真正上線的改動。如果這個時間超過一週,障礙幾乎從來都不是能力。而是一份最近沒有人從零走過一遍的環境建置流程,或者一份沒有人帶路就找不到入口的程式碼...
軟體原始碼託管,也就是把原始碼交給中立的第三方保管(英文稱為 software escrow),回應的是一種完全合理的擔憂:替你打造並維運關鍵系統的供應商收攤了,而你手上留下的,是一個自己離不開、卻又維護不了的東西。託管合約把原始碼寄存在第三方那裡,一旦真的發生這種情況,第三方就把它交付給你。 這種擔憂站得住腳。問題在於這項工具經常被誤解,而兩者之間的落差催生出一種合約:每年都在花錢,真到需要它的那一天卻幫不上忙。 簽約之前該先問的那個不舒服的問題: 如果明天就把程式碼交到你手上,你這邊真的有人跑得起來嗎?一份沒有建置說明、沒有基礎架構定義、沒有它所呼叫的第三方服務憑證、也沒有資料的原始碼託管,不是營運持續計畫。那只是一個資料夾。從...
在固定價格合約與按工時計費之間做取捨,通常會被說成是一次關於風險的選擇。這個說法本身沒錯,可是緊接著就被處理歪了,因為雙方都預設風險會消失,而不是只在兩邊之間換手。 風險並不會消失。在固定價格的安排裡,估算失準的風險由廠商承擔,而廠商會把這份風險先算進報出的金額裡。在按工時計費的安排裡,承擔的人換成業主。真正的問題從來不是哪一種做法能消除不確定性,而是哪一方比較有條件去管理它,以及把風險轉移出去的代價值不值得付。 能事先看出哪一種做法會成功的檢驗: 你能不能把「完成」寫下來,寫到兩個人對於是否已經達到這個狀態能夠得出一致判斷的程度?如果可以,固定價格就是你能用的選項,而且多半是合理的。如果寫不出來,固定價格合約並不會把模糊消掉,它只...
關於 API 版本管理的爭論,幾乎總是從錯誤的一端開始:版本號到底要放在哪裡。事實上,那是整個主題裡後果最輕微的一個決定。真正要緊的是究竟哪些變更才需要一個新版本,而多數團隊恰好在這裡判斷失準,而且是往掉以輕心的方向失準。他們發布了自認為純屬新增的東西,然後某個用戶端就壞了。 好用的思考模型是這樣:你的 API 是一份承諾,界定了呼叫端可以倚賴什麼。如果一次變更讓一個講理的呼叫端原本倚賴的東西失效,那它就是破壞性的。而呼叫端倚賴的東西,遠遠多過你的文件明確允許他們倚賴的範圍。 讓所有人都踩到的那種變更: 在回應裡多加一個欄位。它只是新增,照理說弄不壞一個寫得規矩的用戶端,可它偏偏經常弄壞真實世界的用戶端,因為其中有些會嚴格驗證回應,...
軟體 RFP,也就是需求建議書,本來的用途是讓不同廠商變得可以互相比較。可是現實中大多數文件剛好起了反效果:它們把解決方案寫得夠細,細到把回答的空間綁死,卻偏偏漏掉了任何人報價時都會需要的那些資訊。結果就是五份報價,彼此差了一個數量級,形式上每一份都回應了需求,但沒有任何兩份在衡量同一件事。 常見的說法是廠商在打太極。偶爾確實如此。但更常見的情況是,文件要了一個從它本身內容根本推不出來的數字,於是每家廠商都用各自不同的假設去填補空白。假設不同,價格自然不同,這裡並沒有誠不誠實的問題。 判斷你的 RFP 是否有效的檢驗方式: 兩家不同的廠商讀完之後,能不能得出實質上相同的範圍?如果文件裡只寫了「使用者管理」,沒有說明有幾種角色、權限是...
軟體維護成本,就是那個讓一個成功專案在十八個月後變成一場尷尬談話的數字。開發階段有預算、有簽核,也如期交付了。可是上線之後會發生什麼事,被一句「技術支援」草草帶過,再配上一個有人憑感覺喊出來的金額,而那個金額幾乎每次都太小。 原因出在結構,不是誰不用心。開發有一個可以報價的範圍。維護沒有範圍,因為決定它的是還沒發生的事:某個相依套件爆出漏洞、某家供應商改掉自己的介接規格、某位使用者碰上當初誰都沒想到的狀況。 人人都在引用的經驗法則是每年抓開發成本的 15 到 20 個百分點,而它之所以危險,正是因為它離正確答案不遠。 它對的次數多到讓人安心,錯的時候又總是往同一個方向錯:它低估了缺陷集中浮現的第一年,而在有法遵義務或外部介接很多的系...