開發者體驗 DX,Developer eXperience

重視UX的團隊換來更好的需求探討, 

重視DX的團隊換來良好的開發紀律。

(DX 如果你是第一次聽到這個名詞,恭喜你、妳了,這是一個好的開始 )

UX有多重要已經是不爭的事實,但我們卻很少談論到DX(Developer Experience),就是“開發人員體驗”。請回想每次我們嘗試使用新的開發工具,沒使用過的程式庫或是第一次呼叫新的API的時候,必須經歷的種種情境。首先;我們需要先決定要不要使用這種工具?甚至是該不該使用?它與我們的開發環境是否容易整合?這組應用程式介面(API)的靈活性不知道如何?出現問題時我們應該去哪裡找解答呢?這些都是我們每每都要問到的問題,這便是開發人員日常使用產品時的感覺,而過去這些個感覺都不會有人在乎的,我們也只能偶偶吐吐苦水,所有的不快也只能逕自往肚子裡吞或者留作茶餘飯後的消遣議題,當然就更不用談應該往何處去反應如何被改進了。而這些都是DX的範疇,也就是開發者體驗,它們也應該像UX一樣的被重視。

「好的開發者體驗DX,讓開發者可以快速透過API來打造所需要的服務,替你的產品或服務創造更大的附加價值。」

狹義定義指向開發者的API體驗,廣義定義則指向所有開發的作業

DX範疇的簡單判斷

當產品的主要用戶是開發人員時,開發人員體驗就相當於使用者體驗。DX 泛指有關使用產品、Lib、SDK、文件、框架、開源解決方案、通用工具及API等的開發人員經驗。因此在進行開發作業之前,請先確認一下誰是你的使用者,他的 persona又是如何? 我們應該如何設計才會讓我們的使用者覺得順暢愉快,甚至吐出一聲『哇』來呢?

.

誰是你的使用者?

DX;是在UX 風潮下衍生出來的開發者體驗 DX ,Developer Experience思維。它實質上不是什麼新觀念,只是我們一直未能正視它的重要性而已。而開發者在進行產品開發的流程時,實際上是有多個面向的有多種角色需要參與的,請看上圖的軟體開發週期。工程師在進行軟體開發作業時,扮演什麼角色就需要弄清楚所面對使用者是何種類型的人(Persona),才不至於偏差了開發的順暢度。

.

開發人員體驗是瞭解開發人員如何完成其工作,並進而優化該體驗的實踐。

.

毫無疑問;DX 的靈感是來自UX使用者體驗實踐,將開發人員視為使用者的特殊案例。好處是;我們可以應用 UX 原則及許多工具來改善我們對 DX 的理解,並且與任何 UX 的原則應用一樣,我們還需要考慮領域本身(扮演的角色),在這種情況下,這意味著它涵蓋了整個軟體開發的生命週期。因此,DX 其實是UX和一般開發原則的結合。

.

大多數成功的產品最終會演變成為 API.並逐漸形成一個API的生態圈。

.

AaaP; API as a Product = API即產品

重視應用程式介面API,開啟DX的大門

身為工程師我們多少都撰寫過程式來呼叫別人設計的API介面,目的可能是取得資料或是獲得服務。請問寫這支應用程式花了你多少時間呢? 撰寫的過程是順暢還是滿腹的怨言呢? 這便是一種最典型開發者體驗。API介面設計的好與壞的差別可能因人而異,每個人的感受不同,但隨後而來的流程體驗或是維護更新就可以看出設計者的功力了,對使用者介面體驗UX而言,我們會說設計者是否考慮到使用者會如何操作它,而對 DX而言則是程式設計人員會如何來呼叫它呢,好與壞真是大異人心。但這股趨勢卻是不爭的事實。

.

API即產品;是指「組織將API視為可衡量的產品」.

.

<Something>-as-a-service 是一個讓人心生敬畏的標語。聽起來就好像有一股新風潮即將對準著技術人員席捲而來的味道。讓我們來回為一段歷史;記得是從 1983年昇陽電腦提出「網路即電腦」The Network is the computer 開始,到1996年,Compaq公司首次提出了「雲端運算」Cloud Computing這個詞彙(現在雖然Compaq不見了,但雲端將永遠長存)。隨後AWS的雲端真正的成熟並成為一代雲端的霸主,並造成一股「軟體即服務(SaaS)」的風潮。而AaaP,API as a Product, API是個產品則是指「組織將API視為可衡量的產品」,也就是對待應用程式介面(API)的方式,與其它的產品並無差異的意思。講得白話一點,就是將API的原型、設計、部屬與管理視同為一個產品來開發維運。這也意味著,設計一個應用程式介面(API) 也應該從了解你的使用者開始。有趣的是;這個使用者不是其他的客戶而是開發人員(developer)。我認為這是一股 DX的風潮,DX太重要了,對一個時時處於壓力之下的開發人員,一個設計良好的工作情境可以提升多少效能,又能避開多少陷阱、多少不經意的缺陷呢。

Thouhtworks的DX定義

小結

這篇文章的用意在推廣DX的觀念,也期待未來在人力銀行裡會出現這個需求的項目。市面上談UX的書到處都是,但卻找不到任何一本專門談DX的書,這意味著DX的觀念尚未普及,但對開發者而言這是何其重要的一種觀念,我們怎麼能不考量到使用我們程式、元件或程式庫、工具的程式人的感受呢? 反過來想;我們應該在設計之初就把那些使用時所可能導致的坑坑洞洞都避開來,用良好的設計來協助程式開發人員迅速解決他的問題。

程式設計是一種經驗主義,經驗越是豐富的程式師越能把程式設計得面面俱到,因此不同於UX設計師的一點是DX設計師可能更適合資深的工程師來擔任,也為工程師的晉升之路增添了更多的選擇。

敏捷10字口訣是實踐DX的基礎

.

很多人都不知道敏捷是DX的基礎觀念,因為敏捷開發一開始就是為了程式開發人員而興起的,2001年參與草創的17位人士都是當代極端傑出的軟體工程師,目的也是為了協助工程師快捷的完成他們所被賦予的任務,這一點與DX的定義完全可以相輔相成。如果我們把敏捷的觀念深入DX之中,便能得到以下結論。敏捷以為;開發者體驗應該建立在簡單有意義的小增量之上(小範圍的簡潔設計, 極簡至上),而這個小增量應該是居於某種假設而來的(漸進式的設計,遞增式的完成任務),在迅速得到結果驗證(重視學習成果)並透過展示給相關的利益人員後尋求有意義的回饋得到改善,透過Sprint的開發經驗換來成長的喜悅,接著再邁向下一個迭代(持續改善)。上圖中的小增量、多迭代與尋求回饋正是這個意思。

DX的幾個重要優點:

  • 提供高品質的程式碼
  • 提升開發效能,減少維運負荷。
  • 即時反應,即時滿足,開箱即用的體驗。
  • 擔心新手會出狀況。
  • 持續改善;工作愉快,增長實質投入
  • 讓敏捷更加敏捷

提供高品質的程式碼

開發人員工做的越是順暢當然所撰寫出來的程式品質有機會越佳,就跟良好的學習體驗一樣,學生習得的技能自然更加踏實。這種情形經常發生在我們選對了一個好的元件或是程式庫時,順暢的開發經驗讓人能夠簡潔的達成任務,就像是呼叫到一個開發者體驗設計良好的應用程式介面(API)一樣,程式員能夠迅速地透過範例的引導,快速的完成了呼叫程式的設計作業。這樣的體驗;自然而然產出的程式碼會有較高的品質。

UX就是讓使用者高興樂於使用它,DX則是讓工程師愉快地進行開發作業。

提升開發效能,減少維運負荷

就好比使用者用到一個好的體驗時,經不住的「哇」一聲說明了一切,同樣的當開發人員用到一個好的元件、程式庫或工具時,如果也能獲得同樣的感受則接下來的開發作業,自然就要順暢許多,效能也就自然的提升,而在維運上不知道可以減輕多少工作量。例如良好的錯誤訊息或是好的反例提示。這一聲「哇」就相當有價值了。

即時反應,即時滿足,開箱即用的體驗

大多數時候,開發人員都在急著找到解決其面對問題的答案。這個解題過程的內心所受的煎熬大概只有親身經歷過的程式設計人員才能體驗。當我們急著找解答時當然希望能有開箱即用的效果,而不是讀完了 Readme文件的注意事項後,接著請你再去讀文件的格式說明,然後是初體驗說明。反之;應該是在 Readme裡頭就能包含初體驗及簡單的規格說明。讓使用者可以快速的上手,這一點就跟新進人員onboard時能多快上手一樣,新人花越少時間上手就表示貴單位的效能越好。

擔心新手會出狀況

我們總是在軟體出問題的時候,才想到工程師為何會犯這種無知的錯誤呢? 害得大家雞飛狗跳、人仰馬翻的。但事後也只是記下過錯,發誓絕不再犯。可是;我們可曾回過頭來探討工程師是在怎樣的情境下犯的錯誤呢? 我們要建立怎樣的DX 才可以避免這個錯誤呢? 這便是典型的DX的價值所在。從開發人員的角度去看產品的開發作業。也就是治本之道。

持續改善;工作愉快,增長實質投入

工作愉快才能迎來主動性的持續改善。這種改善方式屬於雙贏的形式,工作人員因為學習而成長了,然後在經營它的工作時便展現出成熟的風貌,能夠主動的改進自我,在公司與個人間展現出雙贏的局面。

這一點對於智慧型工作者至為重要,

敏捷與開發者體驗

敏捷開發原本就是為了軟體開發而設計的。2001年發起的17為工程師都是軟體工師。第一條宣言「個人與互動重於流程與工具」。就直接說明了使用者體驗的重要性。 而針對開發流程的真正使用者正是在不同階段扮演不同角色的工程師。所以敏捷以為;開發者體驗應該建立在簡單有意義的小增量之上,而這個小增量應該是居於某種假設上的,在迅速得到結果驗證後,透過執行(Sprint)的經驗換來成長的喜悅,然後再邁向下一個迭代。

讓敏捷更加敏捷

敏捷即務實,程式人員在進行開發作業時最重要的即是務實。例如: 大量的文件對coding起不了太大的幫助,應該適量(just enough) 即可,這就是務實。程式交付一定要經過測試尤其是自動有效的單元測試,而不是把測試的工作交付給測試人員,這也是務實的做法。擔心新人犯錯、擔心程式品質不夠好,要好就做好code review、就把自動化測試做好,這就是務實。敏捷的思維其實就是那些傑出的軟體開發者在教我們怎麼做好程式設計的工作,而開發者體驗DX正可以基於這些技能再加入人性的考量,就好比應用程式介面的設計,通常設計者都是已經會了而且對這項技能十分熟練的人,他絕對不能用自己的觀點來做設計,應該反過來思考初次嘗試這項技能的人會怎麼做,依據他的 Persona做判斷,引導他按部就班的完成初次的體驗。因此開發者體驗的加入可以讓敏捷更加敏捷,也就是基於那些敏捷化的 guideline 針對程式設計再投入更多人性的考量。

 

註1. DX, Developer Experience 開發者體驗相關資料並不多,但有二個入口可以關注:一個是美國API Academy 有關API設計的推廣理念,裏頭常常會揭露到 DX的許多特性。另一個是 Thoughtworks 公司的科技雷達常常會出現較好的文章。

此刻我們正在公司內部推廣 DX 理念,我們入門的手法也是從最顯而易見的 API 設計開始,但推行開發者體驗DX應該更甚於此,最後附上 2002 的 Bezos issuethe API mandate(它傳奇般的改變了亞馬遜成為 AWS)供大家參考。

Bezos issuethe API mandate

如果你有興趣研究的話可以再參考《持續API管理》會更紮實些。

註2. 設計API沒有既定的規則,但有一些styles可依循,請參考:

可以在Ronnie Mitra 的 slideshare 找到.

註 3. 設計API的幾篇好文章

註 4. IEEE 的定義 (2012 年)

New ways of working such as globally distributed development or the integration of self-motivated external developers into software ecosystems will require a better and more comprehensive understanding of developers’ feelings, perceptions, motivations and identification with their tasks in their respective project environments. User experience is a concept that captures how persons feel about products, systems and services. It evolved from disciplines such as interaction design and usability to a much richer scope that includes feelings, motivations, and satisfaction. Similarly, developer experience could be defined as a means for capturing how developers think and feel about their activities within their working environments, with the assumption that an improvement of the developer experience has positive impacts on characteristics such as sustained team and project performance. This article motivates the importance of developer experience, sketches related approaches from other domains, proposes a definition of developer experience that is derived from similar concepts in other domains, describes an ongoing empirical study to better understand developer experience, and finally gives an outlook on planned future research activities.

註 5. 由 Youtube 上的影片,你會發現美國已經舉辦了好幾屆的 UXDX Seminars 活動了而去年日本也開始舉辦了,稱為: Developer eXperience Day2021。可以開始期待台灣的第一屆 Developer eXperience Day 了。

對「開發者體驗 DX,Developer eXperience」的一則回應

  1. Hi Ruddy老师,我是来自大陆的工程师,有问题请教,方便的话请你回复邮件给我,非常感谢!jingyun.ci@gmail.com

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com 標誌

您的留言將使用 WordPress.com 帳號。 登出 /  變更 )

Google photo

您的留言將使用 Google 帳號。 登出 /  變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 /  變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 /  變更 )

連結到 %s