導入 Clojure 經驗談

什麼是成功導入先進軟體技術棧的要件?

Laurence Chen
Aug 16, 2022
Customer is business; Knowledge is business.

緣起

大約 2018 年底的時候,我換了一次工作,那一回,唯二投履歷的工作之一,是間技術棧 (technical stack) 選用 Erlang/Elixir 的軟體接案公司,我滿懷憧憬,覺得如果換一分新工作又順便學一些先進的科技真是不錯。

求職沒有被收下的時候,我又很快地轉了一個念頭:「既然有人可以在台灣開一間軟體接案 (software agency) 公司,技術棧選用 Elixir?那應該也可以有人在台灣開一間軟體接案公司,技術棧選用 Clojure 吧?」(註:Elixir 與 Clojure 都是相對小眾的程式語言。)

從 agency 轉型成為 consulting

做生意,不免都要思考最適規模、價值創造、收費模式等議題。總之,經營一年半之後,我就決定把自己的生意改一改,從接案代工 (agency) 改成諮詢顧問 (consulting) 。主要的差異在哪呢?其實對我而言,主要的差異就是:「不需要雇用員工」

轉型之前,我是獨力完成軟體專案。轉型之後,我是與客戶協力完成專案而非獨力完成專案。做專案的人力,主要是客戶的員工。我只動手解決最難、最關鍵的部分。專案裡多數的工作,我是傳授知識技術給客戶的員工,由他們協力完成。

Clojure 很難直接「賣」

Clojure 很難直接「賣」,在很多次的嘗試之後,我徹底地了解這個道理。所以,我通常都是拐一個彎、拐兩個彎來賣。我通常是跟客戶談:什麼可以讓你的軟體開發速度變快、軟體品質變好、還有應該如何量測成效與成功。

即使是這樣子談,效果還是不太好,我又再換了一個方法談。準備一分 20 小時的教材,然後講「20 小時無痛起步」之類的。

逆向工作、六個工作天導入

最近的一個專案,在一些條件的加持之下,我幫客戶非常順利地導入了 Clojure 。

加持條件:

  • 我承接的軟體專案,其中有兩個部分, 第一部分是資料分析 (data analytics) ,主要是 SQL 。第二部分則是應用軟體開發 (application program)。而我在做資料分析時,進度大幅超前,建立了客戶的信心。

實務的作法:

  1. 我和客戶談應用軟體開發時,先與客戶談成的協議是:我做架構設計,實作的部分原則上交給客戶的員工。我可以協助做品質管控之類的。在這個時候,技術棧 (technical stack) 依然是一個開放的選項。
  2. 等到資料分析的進度大幅超前,我與客戶顯然有時間可以玩一些大膽的創新時,我就拿出我的 Clojure training tutorial ,並且解釋照這個教材來訓練,大約多少時間可以訓練完成。
  3. 兩個工作天,先是密集地上課 ,把教材的課程教到第七課。
  4. 三個工作天,我自己把客戶的專案拿來開發。先把需要的函式庫 (libraries) 都串好、相對難的部分我直接刻完,做到的程度是:「整個系統對於客戶來講,就是一個框架 (framework) ,他們只需要去把最後三個空缺 (todo) 填完即可。」
  5. 最後一個工作天,我把我做到一半的專案連同文件交接給客戶。客戶表示:「比原先想象的,還簡單許多了。」

結論

新創公司的理論,有一派的人主張,要經營成功的公司,要先取得最小可行客戶 (minimum viable customers)。一旦有了,事業就成功一半了。對於軟體開發,我主張:「要把軟體做好,要先取得最小可行知識(minimum viable knowledge)。 」

對於我的客戶來講,導入 Clojure 這件事,他們需要學習的『知識』,基本上就是最小可行知識

  1. Clojure programming 的基礎
  2. 勉強足夠把三個空缺 (todo) 填完的知識

快速取得最小可行知識,這就是要導入先進軟體技術棧 (advanced technical stack) 的成功要件。

--

--

Laurence Chen

IT 顧問、講者、作家。喜歡快速迭代 (fast iteration) 與提高產出。 著作:「從錯誤到創新」 https://leanpub.com/errors_to_innovation/ 網站:https://replware.dev/