天天看點

[轉]設計者-開發者工作流中的疊代模式

 轉載自InfoQ,原文位址:http://www.infoq.com/cn/articles/designer-developer-workflow

=================================================================================

      設計者-開發者工作流(designer-developer workflow)這個詞已經流行了好幾年。它描述了設計人員、開發人員在為Web或桌面應用創造互動體驗過程中的關系,而沒有表達出設計者、開發者之間的互動和協作。工作流這個術語讓我們覺得這種關系是線性的,但實際上它不是。

      在項目的整個生命周期中,我們會不停地為項目增加内容。項目本身從開始到結束可能是線性的,但項目參與者之間的協作不是。需要協作的項目,不會變成一個裝配流水線;在項目結束之間,我們每個參與者都可能要往項目中不停地添加各種元件、功能片、代碼和設計方案。這個過程是有機的,而且——更重要是疊代式的。

      作為Adobe的産品部門經理,我經常要和建構各種互動應用、内容的設計和開發人員一起工作。在此過程中我常聽到的一點,就是“團隊成員間的工作流程,是項目成功的關鍵;有效減少團隊可能遇到的困難的方法是保證項目中每個人之間的清晰、高效溝通”。

      在本文中,我将讨論一些可在開發和設計工作中應用的疊代模式,并說明如何利用這些疊代模式實作團隊内的高效溝通。

疊代

      所謂疊代開發,可定義為全程功能建構。比如在一個項目中,逐漸增加各種新特性、互動體驗、特性提升和新功能——每次隻增加一項。

      我們以開發一個簡單的遊戲為例。遊戲的一個關鍵特性是記錄玩家的分數。而這個特性的最初版本,可能就隻是通過調用計分系統的功能為使用者增加分數。計分系統除了按給定點數未使用者加分,沒有其他任何功能,目的非常簡單。在項目全過程中,我們可以逐漸演進和完善計分系統,每次增加一個小的特性或功能,即每次就是一個疊代。對于這裡的計分系統而言,我們可以通過疊代逐漸增加的各項功能和特性大緻有:

  1、通過對計分系統的調用,實作每次按一個點數為某玩家計分

  2、通過對計分系統的調用,實作每次按個數不定的一組點數為某玩家計分

  3、分數達到預先固定的滿分時,讓計分系統通知遊戲

  4、在計分系統建立時,可自定義滿分分數

  5、為多個玩家建立多個計分系統執行個體

  作為開發人員,我可以此作為開發某個元件的“特性路标圖”,也可用于在完成獨立的每個步驟後,标示下一步驟的工作。這樣,即使項目周期很長,無論何時我們都能知道自己身在何處,進而可專注于每個獨立特性的建構。以這種方式設計整個開發過程,可保證我們不會在未來某個時候遺漏任何工作。

  對于大型項目,我可能沒有足夠時間去定義一份完整的應用規格文檔。但我知道大體上可分為哪些部分,并從中選擇簡單的入手,比如一套Adobe Flex元件,我可以先将這些最基礎的元件開發出來。在接下來的每個獨立的開發步驟中,我可以擴充已完成功能片的功能,并按我最終希望的形式和作用的要求将它們整合在一起。在此之後,我可以如法炮制對付這個大應用中的其他類似或差别不大的元件。

  如此這般,最終我可以建構出所有功能子產品,然後将它們內建,進而形成整個應用。這些子產品的組織內建也可以用疊代方法完成,通過事件、監聽器,逐漸在這些子產品間建構出通訊橋梁。

設計

  疊代如何應用于設計呢?最簡單的答案是有兩種應用途徑——你或許不能立刻想到。

  首先,在做系統的整體設計,我從基本建構塊(building block)入手:在哪裡實作導航?主要内容放在哪裡?應用中的這個或那個功能安排什麼地方?所有基本建構塊一起組成了套件的整體架構(有關終端使用者如何使用套件、應用或内容的結構、方法的總體設計)。

  當你将系統的主内容塊(如導航、部件A/B/C)定下來後,設計過程就開始了。在這個過程中,每完成一個基本建構塊的設計,就是一次疊代。在整個過程中,你可以逐漸演進和完善自己的設計意圖。

  第二個方法應用在我已經完成了應用的整體結構,準備在此基礎上進行可視化設計的時候。此時使用者界面已經确定,結構中每個離散的元素都可以取出來獨立設計。在設計了整體結構後再設計其組成元素是非常重要的,因為你需要知道每個組成元素在整個大套件或應用中的運作環境。每個獨立的功能子產品與其他子產品如何互動,将決定該套件或應用的使用者界面設計是相對固定還是相對可變化。

  比如前面舉到的導航例子,我将疊代設計此元件,最開始使用其預設狀态,然後再擴充引入其他元素。假設在我的遊戲中需要一個菜單欄。在設計它時,我可以疊代式設計各種特性,具體可包括:

  設計初始導航狀态,不支援滑鼠互動。

  支援滑鼠懸浮移動。

  支援滑鼠懸浮移動和提示框。

  支援滑鼠點選一級導航元素。

  支援二級導航。

  在二級導航中支援滑鼠懸浮移動。

  實作完整導航結構。

  在每一步驟中,元件(本例中即菜單)的設計,都需要考慮與導航結構協作;同時,它需工作在整個套件或應用的環境中,是以必須保證其設計和互動流程與該環境适配。

  導航結構完成後,你就可以想辦法對付下一個元件元素了。

回退

  疊代式開發和設計的一大好處是當我走遠或走歪的時候,可以清晰回溯到還原點糾正錯誤,繼續前進。

  比如,我們現在需要遊戲中的計分系統支援減分,就可以倒回去增加這項功能。對于更複雜的項目來說,即使某些基礎性的東西需要變化,我們也能将項目回退可實作此變化的狀态,然後修改、重新将它引入原子產品,并修複任何可能出現的內建問題。

  以前面的導航結構為例,如果發現需要增加三級導航,我可以回到建構二級導航的地方,并添加三級導航。如果發現三級導航不能和該套件或應用的整體環境較好的協同工作,我可以回溯到更遠點,将二級導航返工,然後再引入三級導航,并使其生效。

  對于多數設計和開發人員而言,這些聽起來有點老生常談,但的确都是指導我們如何工作、如何向項目持續增加内容的基本方法。即使在軟體開發領域之外的設計準則中,它往往也是适用的。例如視訊編輯就是一個典型的疊代式設計實踐。編輯人員每段時間隻處理一個視訊片段,然後是場景,再然後才是整個視訊。從單獨元素開始,逐漸讓其成長,容納更多元素,這是我們在大型項目中采用的最基本的工作方法。

疊代離不開溝通

  在疊代模式中,無論是設計人員還是開發人員,都會面臨一個難題:每個成員如何與正在建構套件或應用中的小組中其他專業的成員實作有效溝通?

  答案之一是在每步疊代中向全體成員廣播資訊——但無疑隻有每次疊代在粒度上得到了充分劃分,這種溝通才會産生作用。此外還要求它與項目存在相關性。當然在項目的目前時候,它不可能總是相關的;但在開發過程中的未來某個時候,它必定又是有價值的。這樣,團隊成員在整個過程中都可以獲得他們需要的資訊。

  靈活性,是疊代開發和設計的一大要點。團隊所有成員都向疊代過程貢獻自己的成果,是以他們的工作必須是靈活的、開放的,隻有這樣,過程産出的各種元件、設計方案和代碼最終才能有效內建。要想疊代設計和開發最後取得成功,那麼所有參與者就必須在項目中取得共識。

  很多時候,應用的設計和開發人員最開始都會認真制定詳細規格書,并以此為基礎開始工作。但不久,他們就會按照每個人自己的想法“私奔”了。多數情況下,規格書并不能容納應用中全部設計和功能用例,是以在執行過程中,他們有為滿足需求而自行改編的傾向。但問題是設計和開發彼此分離,互不依賴,那麼最後碰頭時,必然發現互不相容,必須予以修改才能解決二者之間的差異。

  規定統一的溝通語言,是項目第一步。在項目開始的時候,設計和開發團隊必須就項目的主要元件達成一緻。詳細規定這些元件的功能和設計或許并非必需,但在它們的主要方面達成一緻至關重要。例如某應用程式包含一個菜單、某種聊天功能和一些對象。團隊必須就應用中的命名規則、基本元件的作用、以及每個主要元件的主要目标達成一緻。

  完成了這些要素的定義後,團隊成員就可以開始疊代工作了。開發和設計人員可以将這些定義作為他們不斷開展疊代的基礎,在每步工作的同時,規劃出下一步驟。如果功能發生變化,可以在未來的疊代步驟做出調整以适應變化了的需求。

  如在一個疊代步驟中,不同部件間出現了沖突,參與者可以通過溝通解決這些問題并繼續前進,無需将整個元件、套件或應用返工。

組織與管理

  有多種技術和系統可幫助設計和開發人員組織和管理疊代。對開發人員而言,必不可少的工具就是代碼版本控制系統,它負責将每個疊代過程形成的代碼予以儲存,供未來使用,開發人員可以根據要求傳回到先前的任意疊代階段。

  對于設計人員而言,像Adobe Version Cue這樣的設計檔案管理系統,能為疊代開發提供重要的版本管理能力。此外,在團隊範圍内采用某種統一的檔案命名規範也會大有好處。像Subversion這樣的代碼存儲系統,也可用于設計疊代過程。

  對于團隊來說,建立Wiki、内部開發部落格或其他類似的溝通工具,幫助團隊成員自動實作資訊的收集和分發,對整個團隊的溝通效果也有極大幫助。

  不過,最關鍵的一點,還是無論你們選擇什麼工具,整個團隊都必須要使用這些工具。否則,工具将不存在任何意義。如果一個團隊成員隻顧幹自己的,不利用這些工具跟蹤其他成員的疊代成果,他們最後開發出來的子產品将被棄用,或在內建時出現問題。

總結

  研究并和你的團隊成員讨論文中提到的技術,并确定哪項技術最适用于你的團隊,這是要做的第一步工作。要找到這項技術,需要打開心扉,仔細思考各種可能和以前可能從未入過你眼的工具。再次強調,這些技術的最終目标是讓你的團隊良好工作,就像我前面提到過的那樣,團隊成功溝通和協作,是項目走向成功的秘訣。

繼續閱讀