<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>同人的生活派對 &#187; 管理</title>
	<atom:link href="http://www.lifeparty.idv.tw/blog/archives/category/%e7%ae%a1%e7%90%86/feed" rel="self" type="application/rss+xml" />
	<link>http://www.lifeparty.idv.tw/blog</link>
	<description>君子學以聚之,問以辨之,寬以居之,仁以行之</description>
	<lastBuildDate>Fri, 20 Jan 2012 11:19:52 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.1</generator>
		<item>
		<title>在人後道人短的時盤</title>
		<link>http://www.lifeparty.idv.tw/blog/archives/6681</link>
		<comments>http://www.lifeparty.idv.tw/blog/archives/6681#comments</comments>
		<pubDate>Fri, 28 Oct 2011 17:49:38 +0000</pubDate>
		<dc:creator>jim yeh</dc:creator>
				<category><![CDATA[占卜]]></category>
		<category><![CDATA[專案管理]]></category>
		<category><![CDATA[時盤分析]]></category>
		<category><![CDATA[開發流程]]></category>

		<guid isPermaLink="false">http://www.lifeparty.idv.tw/blog/?p=6681</guid>
		<description><![CDATA[最近太陽進入同人命宮，也該繼續寫文章在網誌上發表了，不過同人最近碰到了一件事，讓我停下來正在寫作的文章，先來寫一篇分析這個事件時盤的文章。這個時盤是某個人在網路上在人後評斷是非的時盤。]]></description>
			<content:encoded><![CDATA[<p>好久沒有網誌上發表文章了，其實同人一直都有文章正在寫，只是最近在工作太忙碌，加上也許是上個月流月太陽會合壓在同人本命的十二宮，直到十月底太陽才離開十二宮，而讓人提不起勁來寫東西。最近太陽進入同人命宮，也該繼續寫文章在網誌上發表了，不過同人最近碰到了一件事，讓我停下來正在寫作的文章，先來寫一篇分析這個事件時盤的文章。</p>
<p>這個時盤是某個人在網路上在人後評斷是非的時盤。上個禮拜在 Facebook 的社群中看到有人提到拿 CMMI 和 Scrum 比較的討論。雖然同人並不看好在台灣導入 CMMI 對軟體發展的效益，但敏捷開發方法並不適用在 CMMI 的導入，這並不是關於 CMMI 的一項事實，即使在台灣成功導入 CMMI 的公司通常都是採用傳通的瀑布模式或是 V-model 的開發方法，但那並不代表 Scrum 和 CMMI 是互相排斥的。</p>
<p>在同人參與討論的過程中，我發現有網友對 CMMI 的觀念有問題，他大談所謂的能力和成熟，卻搞不懂什麼是 ML2 和 ML5。後來他才承認自己沒有學習過 CMMI 的理論，也沒有 CMMI 的實務經驗。不過，他還是很堅持他認為 CMMI 要成熟，就不應該用瀑布法這個不成熟的開發模式。</p>
<p>同人對他的看法回應成熟等級並不代表成熟度，而且提高 CMMI 成熟等級不等同品質比較高，而是因為問題的複雜度昇高和客戶有更高的要求，不管軟體模式的成熟等級多高，所開發出來的軟體都必須要具有相同的品質－能夠解決問題和符合客戶的要求，這才是真正的成熟度。品質不是由軟體模式決定的，因為它總是無法客觀衡量，而是由符合某個主觀價值判斷來認定。</p>
<p>或許成熟等級較高的軟體模式可以開發出更完美的軟體，但可能會因為不能符合客戶的主觀價值判斷，而無法讓系統有用處；反過來說，採用成熟等級較低的軟體模式來開發軟體會碰到更多的困難和障礙，但如果系統的問題與客戶的需求並不複雜，採用成熟等級較低的軟體模式反而是更靈活而彈性，能夠為客戶帶來更高的價值。</p>
<p>事實上，瀑布模式不是不成熟的開發模式，只是它要解決的問題和敏捷開發模式。因此不同軟體模式沒有成不成熟的問題，而是開發者是不是能夠因應解決問題的需要、和客戶的要求來採行適當的軟體模式，溫伯格說過評定某種軟體模式比其它模式成熟，那不是成熟而是幼稚。</p>
<p>這篇文章要談論的主角不是這位跟我辯論軟體模式成熟度的網友，而是另一位網友看到同人和這位網友討論的留言，讓他覺得不能認同。但他沒有在討論區提出他的質疑，卻在自己的塗鴉牆意有所指道同人之短。尷尬的是他這種在人後道人短的行為，很不巧讓同人在第一時間就發現了，卻還沾沾自喜的表現出自命不凡的樣子。儘管同人對他認識並不多，但他的行為卻讓我透過星盤的呈象來認識他。既然他喜歡憑個人的感覺任意的批評人，故弄玄虛地針對人的貶抑而非事情的討論，那麼同人也來從占星時盤超現實的角度，來看一看在人後道人短的行為是怎麼回事吧！</p>
<p>在 23 日凌晨 0:23，那個網友在 Facebook 的塗鴉牆中提到好像是看到同人的留言讓他想扁人，他說在網路不要扯些有的沒有的比較好。後來自己又在塗鴉牆的那則訊息中留言提到他所指的人話說太多而漏餡了。從他寫下訊息的時間來看，他八成是在說我，但令人疑惑的是網路上討論如果覺得我說的不對，為什麼不跟我討論而要私下放話，先前表面上跟我討論敏捷開發方法在台灣導入 CMMI 的情形，卻又私底下說我閒話，到底他是因為心虛還是把自以為了不起，我排出了他留言時候的星盤，看到他的技術能力其實也沒有什麼深入的本事呀！</p>
<p><a href="http://www.lifeparty.idv.tw/blog/wp-content/uploads/2011/10/11AN0036.png"><img src="http://www.lifeparty.idv.tw/blog/wp-content/uploads/2011/10/11AN0036.png" alt="" title="11AN0036" width="621" height="453" class="alignnone size-full wp-image-6682" /></a></p>
<p>時盤命宮在落在獅子座，這個星座有輕鬆、幽默、趣味的意味。再看到太陽和木星的對相，太陽的娛樂對上木星的深入，很清楚地顯示出想要在談笑之中表現出深入智慧的意向，這從他的網誌的名稱就能夠了解。只可惜太陽和木星的衝突相位，反而表現出誇大而輕忽的特質。</p>
<p>太陽落在天平座會合土星顯得表相化而嚴肅刻板，木星則是落在金牛座顯得現實而利益導向，在三九宮的對立代表在表達觀點的強調以自我為中心的經驗並沒有辦法將想法化為行動來身體力行，木星的凶相位常會讓人有說話不負責的態度，堅持以我為尊的權威態度只會得他人自大狂的評價。</p>
<p>火星是命宮中第一顆星，它是和技術有關的星曜，所以可以知道這位網友對技術的重視。但可惜火星只有凶相位，問題也是出在獅子座的以自我為中心，火星刑傷四宮的水星和金星，代表技術上的基礎有淺薄和無法聚焦的問題，主要的原因還是個性的衝動使話語衝口而出、以及想法未盡周詳的缺憾。尤其看到同人的長篇留言就覺得講那些有的沒有的讓他想扁人，這不正像極了火星在獅子座凶象的舉動呀！火星的凶象讓他沒有時間和耐性去弄清楚別人的觀點，那只是所謂「有的沒有的」。</p>
<p>至於命宮的月亮對衝七宮的海王星，正是以情緒反應以逃避的方式應對。月亮在室女座，是故以挑毛病的態度來表現自己的不滿，但又不說對方那裡說得不對，那是海王星正衝的矛盾情結做祟，轉以情緒批判人，而非面對歧異討論事。</p>
<p>同人後來聽說他還想把我的長篇留言拿來當負面教材，這讓我想到以前 Tom 先生也說喲哪桑學長的文章是負面教材。當年我還在《<a href="http://www.zdnet.com.tw/enterprise/column/softwaredev/">名家專欄：軟體開發見聞錄</a>》發表文章談到這是 Tom 先生<a href="http://www.lifeparty.idv.tw/blog/archives/391">信仰偏見的迷思</a>。我知道學長認識那個在人後道人短的網友，他的自大狂妄就好像當年的 Tom 一樣，自我膨脹成這樣真是不可思議。和學長一樣，我會說我從來沒想到我的留言要拿來當教材，我可沒那麼好為人師。同人只會好心提醒：如果為人不謙虛一點，只會讓生命的成長機會隨著傲慢而消逝呀！</p>
<br /><div class="googlePlusOneButton"><g:plusone href="http://www.lifeparty.idv.tw/blog/archives/6681"  size="standard"   ></g:plusone></div><br />]]></content:encoded>
			<wfw:commentRss>http://www.lifeparty.idv.tw/blog/archives/6681/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>對於「做好產品」還沒說清楚的觀念</title>
		<link>http://www.lifeparty.idv.tw/blog/archives/6645</link>
		<comments>http://www.lifeparty.idv.tw/blog/archives/6645#comments</comments>
		<pubDate>Mon, 15 Aug 2011 11:11:43 +0000</pubDate>
		<dc:creator>jim yeh</dc:creator>
				<category><![CDATA[品質文化]]></category>
		<category><![CDATA[思考]]></category>
		<category><![CDATA[溝通]]></category>
		<category><![CDATA[生活感觸]]></category>
		<category><![CDATA[策略]]></category>
		<category><![CDATA[行銷]]></category>

		<guid isPermaLink="false">http://www.lifeparty.idv.tw/blog/?p=6645</guid>
		<description><![CDATA[在同人簡要地回覆學長的留言之時，其實在我心中對於「做好產品」有一些還沒表達清楚的觀念。想等到有空的時候再補充我的想法，雖然後來看到學長說他不再寫文章與人爭辯了，但這些觀念其實不是為了爭辯而產生的，而是為了對話以分享意義，所以我還是決定把它們寫出來。]]></description>
			<content:encoded><![CDATA[<p>對於〈<a href="http://www.lifeparty.idv.tw/blog/archives/6624">做好產品一定能賺到錢</a>〉這篇文章，喲哪桑學長在 <a href="http://www.facebook.com/inpines/posts/161666513908256">facebook 的討論中</a>提出了他的看法。同人看到他的留言時並沒有時間完整表達我的看法，所以只是簡單地闡明我文章的題旨不是沒辦法把產品做好，而是認為客觀的好產品是不存在的。</p>
<p>在同人簡要地回覆學長的留言之時，其實在我心中對於「做好產品」有一些還沒表達清楚的觀念。想等到有空的時候再補充我的想法，雖然後來看到<a href="http://jonathanspeaking.blogspot.com/2011/08/blog-post.html">學長說他不再寫文章與人爭辯了</a>，但這些觀念其實不是為了爭辯而產生的，而是為了對話以分享意義，所以我還是決定把它們寫出來。</p>
<p>學長的留言提到：</p>
<blockquote><p>I find English can express my points better. My point, as well as Phil&#8217;s is that: Create a great product, and then charge it. This is the business we want to do. I don&#8217;t mean doing a product well. Thanks.</p></blockquote>
<p>同人猜想學長大概是看到我的文章提到「把產品做得再好」而認為我把做好產品誤解成把產品做好。但實際上，同人說把產品做得再好指的是把「做好產品」這件事做好，而不是把特定產品依照規格無誤地把產品開發出來。</p>
<p>有開發產品經驗的工程師都很能體會到做好產品要比把產品做好要困難許多。因為後者只需要具體的產品規格就不成問題，而前者則需要界定出對的問題，才能讓人朝向「正確」的方向去發展解決方案。然而，有時候你即使走的路是正確的，但不見得必然能得到該有的回饋，通常只是因為時機尚未配合。</p>
<p>所謂的「對」和「正確」都只存在主觀性而非客觀性，尤其是在市場上，群眾多半是盲目的，消費者總是非理性多過理性的，所謂的「對」和「正確」只是他們在市場上依據個人偏好所得到的結果，這並不代表多數人的選擇必然比少數人的選擇更「偉大」。</p>
<p>這種以成敗來論英雄的觀點其實是忽略了<a href="http://en.wikipedia.org/wiki/Efficient-market_hypothesis">市場通常不是有效率的</a>；在市場能獲利的產品通常不是走在時代尖端的高科技產品，而是接續附加價值高有實際應用的產品，後者並不是偉大的產品，而是基於多數人們保守心態的有用處的產品。</p>
<p>以策略管理的產品定位的角度來看，想要讓產品在市場上獲利應該先設定好目標客戶的特性，找出產品的水平品質（即功能）和垂直品質（即性能）之後，然後再投入適度的研發和技術把產品開發出來再向目標客戶來收費。因此產品的獲利可能只是市場行銷策略的成功，而不代表產品真的比競爭者的產品還要好；有時候，我們知道其它的產品比我們正在使用的產品更好，只是<a href="http://en.wikipedia.org/wiki/Switching_barriers">轉換成本的障礙</a>常使人望而卻步。</p>
<p>除了上面的原因之外，同人認為「做好產品」最大的不妥是在於語言上的不精確。Great Product 一如「成熟度」的偏頗，如同溫伯格說過的：</p>
<blockquote><p>「成熟度」這個字眼所傳達的並非一個事實，而是一種價值判斷－基於事實所做的一種詮釋，最起碼，它並不符合事實。<sup>[<a href="http://www.lifeparty.idv.tw/blog/archives/6645#footnote_0_6645" id="identifier_0_6645" class="footnote-link footnote-identifier-link" title="曾昭屏譯（2006），《溫伯格的軟體管理學（第一卷）－系統化思考》，p.59-60，經濟新潮社。">1</a>]</sup></p></blockquote>
<p>Great Product 的概念在於人們認為它比其它產品都成熟，但事實上，產品面對客戶的需求和他們想要解決的問題，並沒有<strong>對不對</strong>而只有<strong>有沒有效</strong>。<span style="text-decoration: underline;">「做好產品」很容易讓人流於個人主觀價值的偏見而阻礙了對問題分析的客觀的思考</span>，可怕的是語言的不精確會讓人陷入思考偏誤的陷阱當中，讓人堅持對錯批判經驗的執著。</p>
<br /><div class="googlePlusOneButton"><g:plusone href="http://www.lifeparty.idv.tw/blog/archives/6645"  size="standard"   ></g:plusone></div><br />附註
&nbsp;<hr/><ol class="footnotes"><li id="footnote_0_6645" class="footnote">曾昭屏譯（2006），《<a href="http://www.anobii.com/books/013ad41f7a862e80dd/">溫伯格的軟體管理學（第一卷）－系統化思考</a>》，p.59-60，經濟新潮社。</li></ol>]]></content:encoded>
			<wfw:commentRss>http://www.lifeparty.idv.tw/blog/archives/6645/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>做好產品一定能賺到錢？</title>
		<link>http://www.lifeparty.idv.tw/blog/archives/6624</link>
		<comments>http://www.lifeparty.idv.tw/blog/archives/6624#comments</comments>
		<pubDate>Fri, 12 Aug 2011 09:32:16 +0000</pubDate>
		<dc:creator>jim yeh</dc:creator>
				<category><![CDATA[利害關係人]]></category>
		<category><![CDATA[品質文化]]></category>
		<category><![CDATA[思考]]></category>
		<category><![CDATA[生活感觸]]></category>
		<category><![CDATA[組織]]></category>
		<category><![CDATA[職場]]></category>
		<category><![CDATA[領導]]></category>

		<guid isPermaLink="false">http://www.lifeparty.idv.tw/blog/?p=6624</guid>
		<description><![CDATA[「好產品不一定能賺到錢」並不是一項迷思。其實它告訴我們一項真理：人想要靠開發出好產品而賺到錢，除了需要有能力把產品做出來之外，還需要其它因素的配合；把各種可能的因素加在一起，我們通常會通稱它叫機運。]]></description>
			<content:encoded><![CDATA[<p>喲哪桑學長認為<a href="http://jonathanspeaking.blogspot.com/2011/08/still-make-great-product.html">「好產品不一定能賺到錢」是因為人們沒有做出好產品而提出來的迷思</a>，不過同人並不贊同他的看法。</p>
<p>同人覺得喲哪桑的觀點讓人最疑惑的地方是有關「好產品」的定義，如何在開發產品之前具體而客觀地定義出什麼樣的產品是好產品，讓人能按照這樣的標準把產品開發出來。依據同人在系統開發的經驗來看，「好產品」的觀念總是只存在決定什麼好產品的「那個人」之<span style="text-decoration: underline;">主觀印象</span>當中，它通常是來基於他的價值判斷而產生的，但其他人不見得都會認同他對好產品的主觀價值認定。</p>
<p>當然，如果市場上大部分人都能認同「那個人」對產品價值的認定，那麼做出他認定所謂的好產品就能夠賺到錢。但如果市場上認同「那個人」對好產品概念的人並不多，即使產品做得多好也不能讓產品開發者賺到錢。</p>
<p>換句話說，開發者開發出產品的好壞並不能決定產品是否能絕對獲利，更關鍵的決定因素在於市場。就算開發者有能力開發出盡善盡美的好產品，但那並不代表市場就一定會肯定它的價值，因此「好產品不一定能賺到錢」並不是一項迷思。其實它告訴我們一項真理：人想要靠開發出好產品而賺到錢，除了需要有能力把產品做出來之外，還需要其它因素的配合；把各種可能的因素加在一起，我們通常會通稱它叫機運。</p>
<p>對於一些勇於實踐冒險精神的創業家而言，他們的成功是因為承擔風險而獲得的報酬，然而，不要忘記可能不乏有人和他們做了相同的事而失敗的例子，只是這些多半是「<a href="http://www.lifeparty.idv.tw/blog/archives/888">沉默的證據</a>」而讓人不得而知。</p>
<p>喲哪桑說，在 Phil 的演講中有提到幾個好產品的特性。他引用在他的文章中提到：</p>
<blockquote><p>更明確點說，做個好產品，好到人們會長期地一直留下來​用，好到它對人們的價值愈用愈高，而且，還能壓低公司的​變動成本。</p></blockquote>
<p>對於學長上面明確提到好產品的特性，同人不是不能認同。而是認為時空背景因素常會影響人們對產品使用的偏好；人們沒有長期使用某項產品，不代表它還不夠好，而是人們會感受到該項產品好用的時機還沒有到。很多時候，新穎或前衛的創新產品沒有受到人們的青睞，只是因為人們感知不到它的有用性，有時候不是因為產品易用性欠佳的原因，而是因為外在環境還沒有足夠的變因來刺激使用者的使用需求，這正是著名的<a href="http://en.wikipedia.org/wiki/Technology_acceptance_model">科技接受模式</a>所教導我們的觀念。</p>
<p>假設你打算花費了三個月的時間來做出一個好產品，你已經用專業的市場行銷眼光看到三個月之後將會大受歡迎的產品。於是你在工程方面投入了大量的功夫和心力，想辦法把產品做到盡善盡美。但假如你真的做出了無懈可擊的完美產品，是不是就會讓客戶認為這是有價值的好產品？答案恐怕是未必見得，因為你原先對市場的預測可能出現失誤、或是其間發生難以事先料想到時空背景的改變，使你的產品終究沒有得到客戶的認同。</p>
<p>喲哪桑說他們會每隔 1 天、3 天、1 個月、甚至是 1 年來檢查保留的比率，藉此來確認做出客戶覺得有價值的好產品。同人同意這種作法的確有助於增加產品在市場的成功，只是產品在市場上成功是因為產品做得好，這並不是客觀的事實，而是主觀的價值判斷。</p>
<p>其實產品的好壞很難客觀界定的，縱使你把產品做得好到大部分的人都愛用，也很難不讓其他的人覺得你的產品不好用或是不夠完美，尤其是在不同的時空因素下，同一個人對相同的產品常會有截然不同的評價。開發產品很難能夠做到滿足每一個人的需求，在現實因素的考量必須捨棄比較少人需要的功能時，難道是代表那些功能不好所以才會被捨棄嗎？</p>
<p>真相是捨棄不是因為它不好，而是因為多數的人<strong>現在</strong>不需要它，而且人很難預知將來會不會用到它。世界上從來不缺少比目前市場成功產品做得更完美的產品，但它們很多沒辦法成功地在市場上存活，並不是因為它們不是好產品，而是人們現在不太需要它們。同樣的道理，目前在市場上走紅的產品也不是因為它們是好產品，而是剛好符合市場上的條件；有一天這樣的條件會消失，而它們也將會被其它的產品所取代，就像它們曾經取代過的商品一樣。</p>
<p>最後喲哪桑學長說：<span style="text-decoration: underline;">要做出好產品，讓它更好。別畫唬爛、別搞政治，別搞關係，別打嘴炮</span>。同人很認同這句話，但卻也不由得想到過去的一段經驗。當時同人在一家開發資料庫資訊安全​的公司負責軟體設計及開發，那家公司的總經理常說他不想讓公司成為詐騙集團。他認為台灣軟體業的問題是<a href="http://www.lifeparty.idv.tw/blog/archives/6092">不重視把事情做好的紀律</a>，只靠業務和行銷吹噓而沒有把產品做好。</p>
<p>只是同人發現在他<a href="http://www.lifeparty.idv.tw/blog/archives/6039">主觀價值判斷上的執著</a>，無形之中產生了<a href="http://www.lifeparty.idv.tw/blog/archives/5589">組織的官僚特性</a>和<a href="http://www.lifeparty.idv.tw/blog/archives/5343">文化偏見</a>，其實他不是沒有在參觀者的面前做樣子，只是沒有意識他並沒有做到言行一致，結果讓產品一直「<a href="http://www.lifeparty.idv.tw/blog/archives/279">收尾巴</a>」收不完。這個經驗讓同人學習到了<strong>做好產品關鍵不在我們怎樣要求完美，而在於如何真的做到言行一致</strong>。</p>
<br /><div class="googlePlusOneButton"><g:plusone href="http://www.lifeparty.idv.tw/blog/archives/6624"  size="standard"   ></g:plusone></div><br />]]></content:encoded>
			<wfw:commentRss>http://www.lifeparty.idv.tw/blog/archives/6624/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>軟體開發團隊的官僚特性</title>
		<link>http://www.lifeparty.idv.tw/blog/archives/5589</link>
		<comments>http://www.lifeparty.idv.tw/blog/archives/5589#comments</comments>
		<pubDate>Mon, 11 Jul 2011 11:10:05 +0000</pubDate>
		<dc:creator>jim yeh</dc:creator>
				<category><![CDATA[品質文化]]></category>
		<category><![CDATA[問題解決]]></category>
		<category><![CDATA[寫作]]></category>
		<category><![CDATA[專案團隊]]></category>
		<category><![CDATA[溝通]]></category>
		<category><![CDATA[生活感觸]]></category>
		<category><![CDATA[系統思考]]></category>
		<category><![CDATA[職場]]></category>
		<category><![CDATA[閱讀]]></category>
		<category><![CDATA[領導]]></category>

		<guid isPermaLink="false">http://www.lifeparty.idv.tw/blog/?p=5589</guid>
		<description><![CDATA[在今年過農曆年前，看到以前閱讀《溫伯格的軟體管理學（第二卷）：第一級評量》所做的筆記，引發同人想要寫一篇文章探討軟體開發團隊的官僚特性。但由於工作轉換及其它寫作計劃的原因，直到現在才有時間分享我對軟體開發團隊的官僚特性之心得。]]></description>
			<content:encoded><![CDATA[<p>在今年過農曆年前，看到以前閱讀《<a href="http://www.books.com.tw/exep/prod/booksfile.php?item=0010411034">溫伯格的軟體管理學（第二卷）：第一級評量</a>》所做的筆記，引發同人想要寫一篇文章探討軟體開發團隊的官僚特性。但由於工作轉換及其它寫作計劃的原因，直到現在才有時間分享我對軟體開發團隊的官僚特性之心得。</p>
<p>溫伯格說官僚是<strong>每件事都在掌控中，但是一切全都失控了</strong>。他提到：</p>
<blockquote><p>當專案規模變得相當龐大，通常就會因為專案成員對整體狀況缺乏掌控，不了解本身工作與整個專案的相關性，而導致官僚作風出現。</p>
<p>在這種情況下，大家一定會在不知不覺中做出危害品質的事，甚至會阻礙到專案的完成。這就是官僚－人們不明究裏地在做事。</p></blockquote>
<p>要評量軟體開發組織的「官僚特性」（bureaucratic nature），溫伯格認為可以藉由有多少事情在不明究裏的情況下完成。他指出在不明究裏的情況下完成事項，占完成事項的百分比就是評量官僚的一種方式。</p>
<p>想要減少團隊的官僚特性，管理者應該要讓團隊成員充分了解專案計劃。溫伯格提醒管理者有計劃還是不夠，應該要讓參與專案的團隊成員了解計劃，並且透過傳達與溝通讓每一個人都了解計劃。他強調只有高層了解的秘密計劃（而且就連高層自己也不太清楚這些計劃），勢必會在大型專案中引發官僚之災。</p>
<p>溫伯格的觀點解釋了在軟體開發團隊常見的官僚特性。在軟體開發過程中，人們不知不覺犯下危害軟體的品質或阻礙專案的進行的錯誤，通常並不是因為計劃不夠完整，而是因為團隊成員缺乏對專案計劃的整體了解。專案成員從專案計劃知道他的任務，但卻不知道他的任務和整體專案的關係。</p>
<p>換句話說，團隊成員知道他應該做什麼、和如何做，可是卻不知道為什麼要這樣做，工作只是由上面丟下來交辦，他只是奉命行事而已。比如說：</p>
<ul>
<li>程式開發者按照系統設計規格開發程式，可是卻不知道為什麼系統要這樣設計。</li>
<li>系統設計者按照系統分析規格設計系統，可是卻不知道為什麼系統要這樣分析。</li>
<li>系統分析者按照客戶提出的需求來分析系統，可是卻不知道為什麼系統會有這個需求。</li>
<li>管理者覺得開發者沒有把事情做對，可是卻總是不早點告訴開發者什麼叫做把事情做對。</li>
</ul>
<p>為什麼團隊成員在他們不知道為什麼的時候，不先溝通把事情的來龍去脈弄清楚才開始執行任務呢？可能是團隊成員的能力只能知其然，而不能知其所以然；也有可能是因為團隊成員的態度並不想多花心力去了解事情的根源。同人認為不管是成員能力或態度的因素，管理者都應該要為開發團隊的官僚特性負起最大的責任。</p>
<p>因為<strong>軟體開發團隊的官僚特性本質上是品質文化的問題，基本上和管理者的態度及核心價值觀有關</strong>。如果程式的開發者不能了解程式和設計、需求、乃至於其所要解決的問題，就很難確定他能夠在正確的問題方向上思考，以發展在正確問題下的有效解決方案。也許他做不到的原因是因為尚未培養面對問題獨立思考的技能和習慣，但如果管理者不能在團隊中建立<a href="http://www.lifeparty.idv.tw/blog/archives/128">共享語意庫</a>或增進<a href="http://www.lifeparty.idv.tw/blog/?s=%E6%B7%B1%E5%BA%A6%E5%8C%AF%E8%AB%87">共享意義</a>暢通的管道，要求開發者要有能力知其所以然只是緣木求魚罷了。</p>
<p>從另一種角度來看，團隊成員在態度上不想多花心力去了解事情的根源之真相，很可能是管理者在態度上並沒有鼔勵團隊成員多多參與討論、以及提供成員表達個人意見的管道。即使管理者在言語上聲稱他們願意接受不同的建言，但實際上面對團隊成員提出不同意見的質疑，卻是表現出不能接納建言的行為。慢慢地，團隊當中自然愈來愈沒有人願意表達他們的異議，成員傾向聽命辦事來規避把事情攬在自己身上，於是讓這樣的心態更加深團隊的官僚特性。</p>
<p>當然，管理者因為態度而加深開發團隊的官僚特性，最後必然會「個人造業個人擔」。最後團隊有想法、有抱負的「年輕人」會愈來愈少，只知道制度和規範而忽略思考創新的「老人」愈來愈多；這裡指的年輕人和老人不是基於年齡，而是基於成員面對問題的心態。當團隊的大部份成員都已經心態老化，思考僵化是軟體品質不良的根本原因，不論管理者加深團隊的官僚特性是有意或無意，他都必須為此承擔相對的代價。</p>
<p>「年輕人」比「老人」對事情的「理所當然」更不以為然，因此前者可以透過思考和創意來創造更多的可能性，這正是後者限於官僚特性所看不到的世界。</p>
<p>同人記得聽過某個長官曾經對下屬提的意見表示：「不要只提出問題，要有 solution！」不過接下來聽到另人激賞的反駁：「如果要有 solution 才​能提問題，那誰敢提呀？」表現對官僚特性的反抗，當然反抗的結束是最後反駁者終於離開那位長官的團隊。</p>
<p>同人不知道那位長官心中到底有沒有意識到「如果這麼快就可以有 solution，那根本就不成問題」的真相，但我知道他的管理風格無法適應會對「理所當然」質疑的思考者，他只能「管理」聽命辦事的工作者，也許只有加深團隊的官僚特性才能減輕他對管理彈性不足所反應的焦慮吧！</p>
<br /><div class="googlePlusOneButton"><g:plusone href="http://www.lifeparty.idv.tw/blog/archives/5589"  size="standard"   ></g:plusone></div><br />]]></content:encoded>
			<wfw:commentRss>http://www.lifeparty.idv.tw/blog/archives/5589/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>不要把 TDD 和做測試混為一談</title>
		<link>http://www.lifeparty.idv.tw/blog/archives/6126</link>
		<comments>http://www.lifeparty.idv.tw/blog/archives/6126#comments</comments>
		<pubDate>Tue, 05 Jul 2011 11:22:29 +0000</pubDate>
		<dc:creator>jim yeh</dc:creator>
				<category><![CDATA[利害關係人]]></category>
		<category><![CDATA[品質文化]]></category>
		<category><![CDATA[問題解決]]></category>
		<category><![CDATA[專案團隊]]></category>
		<category><![CDATA[思考]]></category>
		<category><![CDATA[溝通]]></category>
		<category><![CDATA[生活感觸]]></category>
		<category><![CDATA[職場]]></category>
		<category><![CDATA[開發流程]]></category>

		<guid isPermaLink="false">http://www.lifeparty.idv.tw/blog/?p=6126</guid>
		<description><![CDATA[最近讀到一篇文章〈不要盲目的 BDD / TDD，我對寫測試的看法〉，看完作者 XDite 反對不論如何都要導入 TDD 的理由，讓同人想提出我對這篇文章的看法。]]></description>
			<content:encoded><![CDATA[<p>最近讀到一篇文章〈<a href="http://blog.xdite.net/?p=2478">不要盲目的 BDD / TDD，我對寫測試的看法</a>〉，看完作者 <a href="http://blog.xdite.net/">XDite</a> 反對不論如何都要導入 <a href="http://en.wikipedia.org/wiki/Test-driven_development">TDD</a> 的理由，讓同人想提出我對這篇文章的看法。</p>
<p>XDite 在文章中前半段，提到他對做測試的看法：</p>
<blockquote><p>我個人的看法是認為在大多數的情形下，你需要對你的「軟體」寫 "Test"，而且是要先寫 "Test" 再行撰寫程式，也就是  Test-Driven Development。因為程式碼會逐漸龐雜，沒有人可以 write code without bug，也不可能每次都有辦法用手測出來，加上有時候寫錯程式時的損失不是事後修理就有辦法彌補的，所以我們必須要寫 Test  Case，及早抓出問題。</p></blockquote>
<p>XDite 說這是所謂寫<a href="http://en.wikipedia.org/wiki/Test_case">測試</a>的重要性。但他強調這卻不是程式設計師「可以」不合時宜的盲目在「任何類型」的專案強行導入 <a href="http://en.wikipedia.org/wiki/Behavior_driven_development">BDD</a> / TDD 的藉口。XDite 指出寫測試程式來確保程式正確性的解決方案，存在著額外多付成本的代價，亦即：</p>
<ol>
<li>「 寫測試 + 寫程式」 所花的時間，大概是純寫程式的 1.5 -2 倍時間。</li>
<li>「會寫 Test」、「正確的測到該測的部份」、「寫出好的測試」，都需要學習時間以及功力。</li>
</ol>
<p>於是 XDite 提出了四點原因，用來當成反對盲目 BDD/TDD 的理由。即使是程式設計師因為厭倦了維護在之前的專案後期的維護，因為修改程式碼而一再發生的問題（無論是小問題，大問題），而決定在下個專案，無論什麼專案類型都要導入 TDD / BDD，XDite 認為這在他眼中認為這是相當不正確的事情。</p>
<blockquote><p>1. 每個專案類型不盡相同，有的是要求高正確性且牽扯到金流問題且開發時間充裕。有的純粹只是 event，用過極丟。有的是幫人外包，只要求規格正確，開發時間不寬裕。有些則是混合型。有些部分的程式碼則是相當難以寫測試（如 View），C/P 值極低。應該考慮每個專案的類型甚至是 component 去決定哪部分該嚴厲的規定寫測試，而哪些部分可有可無。</p>
<p>2. Startup 前期應不應該導入 TDD/BDD ? 我認為不應該。為什麼，很多人都認為 TDD / BDD 是為了確保「程式的正確性」，所以無論如何我們都應該執行。卻忽略了 Startup 的成功要素是「快速驗證你的 Idea 的正確性」、「快速應付市場變化調整的速度」、「在市場廝殺中節省成本存活下來」。</p>
<p>3. 寫測試只是為了要能自動驗證「程式的正確性」、降低「程式出錯的機率」，但團隊合作開發程式最重要的是團隊中的「溝通」，大家對 function 和架構要有一定程度以上的理解，共同撰寫程式要有一定程度以上的 convention。變更任何重大架構（如 core function, db schema, 底層設計前）都要提醒大家。</p>
<p>如果每個人都只寫自己的，然後想改什麼東西照自己心情，沒有人想舉手之勞通知大家、跟隊友溝通。坦白說，那寫測試有個屁用，可能只是不會爆 production code，development 拉下來還是爛光光，還是要修到死。</p>
<p>完全不溝通、不制定規範，卻期待寫測試能夠解決一切，這樣的想法不是很奇怪嗎？</p>
<p>4. 無論如何，就算寫了再完美的測試，再完美的程式碼。程式還是可能在你完全預期不到的狀況爆掉，所以應該做的是要接受無論如何就是要修 bug 的這件事，然後想辦法把修 bug 的成本儘量壓低，也把因為 bug 會產生的損失也儘量壓低。</p>
<p>不要期待測試是萬靈丹。否則期待越大，失望也大。</p></blockquote>
<h4>到底是評論 TDD、還是做測試？</h4>
<p>同人覺得 XDite 這篇文章的論點令人混淆；他到底是在評論盲目導入 TDD 的行為、還是在探討開發者該不該多花時間寫測試程式，以確保「程式的正確性」？這兩者完全是不能相提並論的事情，同人很不能理解在前面提到寫測試程式來確保「程式的正確性」需要花更大的代價，而下一段就拿寫測試程式必然會忽略其它開發活動（如溝通、修正程式 <a href="http://en.wikipedia.org/wiki/Computer_bug">bug</a> 等活動）來否定 TDD/BDD 的價值。</p>
<p>難道 XDite 以為 TDD 就只是在做確保「程式的正確性」之測試而已嗎？假如 XDite 真的是這樣認為，那麼顯然他把 TDD 誤解成是在<a href="http://en.wikipedia.org/wiki/Software_testing">做測試</a>。不過，對於同人在文章後面留言提出的質疑，XDite 回應否定他把 TDD 誤解成寫測試，而是不喜歡一些沒有把 TDD 搞清楚的人，強行要把「TDD」和「測試」混在一起，綁在一起要求無論如何都要「TDD」。他提出了一種典型把測試跟 TDD 混淆綁在一起的狀況，是遇到下面這種混蛋邏輯：</p>
<blockquote><p>因為程式會爆炸，或者是以後改來改去又會暴很麻煩 =&gt; 所以我們需要寫測試 =&gt; 既然要寫測試，也許我們不應該事後補寫 Test Case，而是應該來試著 TDD。</p></blockquote>
<p>另外，XDite 還提到理想狀況開發者可以用 TDD 來開發產品，先寫測試去制定出規格，然後寫出實際程式通過測試，達到 <a href="http://en.wikipedia.org/wiki/System_design">System Design</a>。接著藉由不斷的寫新測試、新規格，然後寫出更多的程式，邊修邊測到 boundary。但現實狀況是，就算是熟悉 TDD 的開發者，他卻不一定是「<a href="http://en.wikipedia.org/wiki/Software_specification">規格</a>」、「<a href="http://en.wikipedia.org/wiki/Software_design">設計</a>」的主導者。</p>
<p>XDite 說在這樣的「現實狀況」，很多時候， Team 裡面有開發者不能強迫導入 TDD 的環節。強行推動只是互相絆倒和拖垮彼此的時程。XDite 認為 TDD 只在某種「單純」（專案成員素質接近一致，沒有 highly dynamic factor，目標單純）的專案、環境、Component 下適用。</p>
<p>雖然 XDite 對他的觀點，似乎並沒有留下和同人繼續討論的空間；我發現我後來的留言被當成 spam 處理。同人猜想也許他的文章說歡迎指教，但我的留言讓他感到威脅、或是覺得再繼續討論壓力太大，於是想中止和我就這個議題繼續討論。同人不想責怪他對我留言的反應，即使他這樣做只是要表達內心情緒的不滿，但我仍然不會停止對 TDD 的這個討論主題的思辨，並且會透過網誌來表達我的觀點。</p>
<h4>評論 XDite 的四點理由</h4>
<p>XDite 提到他不喜歡把「測試」和「TDD」綁在一起的混蛋邏輯，但它反對不管怎樣都要導入 TDD/BDD 的原因，卻又以寫測試案例的「極端」現象來反駁 TDD 的價值，顯得不合邏輯。</p>
<p>在 XDite 寫的四點原因中，除了第二點有明白地表達不該在 startup 前期導入 TDD 之外，其它三點看起來都好像是在批評寫測試程式的問題（還不論是不是先寫測試程式）。因此，這樣看來就很令同人費解；如果真如 XDite 所說的他不喜歡人們把測試和 TDD 綁在一起，怎麼會把寫測試程式出的問題都算在盲目導入 TDD/BDD 的頭上？如果連自己在談 TDD 的時候，都會和寫測試程式的問題牽扯不清，那麼又怎麼能責怪別人把「測試」和「TDD」綁在一起呢？</p>
<p>同人認為在 XDite 所提到的四點原因，它們並非錯誤，而是並沒辦法當作反對不管如何都要導入 TDD/BDD 的原因。雖然在第一點原因中 XDite 並沒有說錯，有些程式像是使用者界面程式的測試程式就很難寫，因此的確不大適合強行對他們進行 TDD。然而，當遇到這種情況的時候，使用者還是可以選擇用 Mock Object 把那些沒辦法寫測試程式的物件區隔起來，然後針對最多部分可測試具有演算邏輯的程式來進行 TDD。</p>
<p>因此，使用者界面程式沒辦法建構 TDD 的測試程式對於 TDD 而言，並不是什麼太大的問題。因為基本上 TDD 不是用來當做測試的工具，而是用來設計可以驗證符合使用者真實需要的工具。所以開發者只要針對可測試、或該測試的部分建構測試案例就夠了。TDD 的目的是要確認花費最小的努力來滿足使用者的需求，測試案例所要求的不是全面的完整，而只是確認達到剛好達到滿足需求的邊界，這將會促使開發者先以界面的思維來整合系統各要件。對 TDD 測試案例比較重要的問題，是如何設計可測元件與非可測模組之間的界面。</p>
<p>至於 XDite 提到對於某些程式沒有必要寫 TDD 的測試程式，同人倒會很好奇有什麼客觀標準、或是有誰可以決定什麼程式沒有建構 TDD 測試案例的必要？在同人導入 TDD 的經驗中，就曾經有開發者要求 Business Object 不要寫 TDD 的測試案例，當時他們的理由是它們沒有什麼太複雜的邏輯、而且不大容易會變動，所以應該不需要為它們建構 TDD 的測試程式。</p>
<p>然而，事實證明，接受開發者這個要求的決定，是整個系統發生苦難的開始。因為所有的問題都從 Business Object 的瑕疵開始引爆，直到把 Business Object 也納入 TDD 測試案例的範圍，系統程式的品質才能達到令人接受的水準。</p>
<p>再來，對於 XDite 唯一有討論到導入 TDD 的第二點，他認為 startup 前期不應該導入 TDD，因為 startup 的成功要素是「快速驗證你的 Idea 的正確性」、「快速應付市場變化調整的速度」、「在市場廝殺中節省成本存活下來」。然而，同人對此卻認為恰好相反，TDD 正是「快速驗證你的 Idea 的正確性」、「快速應付市場變化調整的速度」、「在市場廝殺中節省成本存活下來」的利器。</p>
<p>為什麼？不用 TDD，人們多半傾向會以自己所相信的基本假設來解答問題，也就是以自己的經驗或熟悉的事物，從核心出發來發展解決方案，以期待把事情做正確。在這種情境下，人們通常會想得太多，而容易有過度設計（over engineering）的傾向，而 TDD 則可以讓人回歸到從問題來決定系統的邊界，再以最符合經濟效益的方式來解決問題。所以自然能夠以最省時及省力的方式來做正確的事情，更可以在市場上獲得致勝關鍵。</p>
<p>XDite 說他不同意「快速驗證你的 Idea 的正確性」、「快速應付市場變化調整的速度」、「在市場廝殺中節省成本存活下來」，是「對  TDD 再適合不過」。但同人很清楚這「對於熟悉 TDD 的開發者而言」是很自然的，顯然 XDite  是忽略了我認為這句話成立的前提，在於開發者是否能熟悉使用 TDD 的節奏。</p>
<p>如果開發者熟悉 TDD  的節奏，當他沒辦法寫出測試程式的時候，代表他對系統所要解決的具體問題還不夠清楚。為了要弄清楚他必須更清楚去溝通，而且 TDD  的習慣會促使他傾向以使用者的情境去溝通，而不是拿功能要使用者告訴他該做什麼。只有在開發者瞭解使用者的情境之後，開發者才能具體而正確地寫出驗證程式的測試案例，這說明<strong>在 TDD 寫的測試案例不是做測試而是在做設計，而且不可能因為寫 TDD 的測試案例而讓開發者不做溝通</strong>。</p>
<p>所以 XDite 提出的第三點和第四點原因，或許對於做測試是可能成立，但在 TDD 的情況下卻是可能性很低。因為除了建構 TDD 的測試案例需要了解使用者情境更需要溝通之外，TDD 的測試案例本身就是有用的溝通工具。TDD 的測試案例是能夠經過驗證的具體規格、同時它也是相關元件、API、或是模組的範例程式。</p>
<p>當然 TDD 更不會有太要求測試程式的完美，而忽略修正 bug 的問題，因為 TDD 的測試案例並不要求完美，而只是夠用就好。而且 TDD 在實際上可以用較低的成本來修正 bug，因為它能夠自動發現錯誤，再加上重構能夠逐漸改善程式碼的品質，TDD 沒辦法確保程式一定不會出現錯誤，但它總是能夠以較低的成本得到較高品質的程式碼。</p>
<h4>TDD 必須很「單純」？</h4>
<p>XDite 說 TDD 只在某種「單純」（專案成員素質接近一致，沒有 highly dynamic factor，目標單純）的專案、環境、元件下適用。但在同人導入 TDD 的成功經驗中，很不巧就有專案、環境、元件不單純的例子。</p>
<p>在一個國內知名金控公司的銀行外匯系統建置專案，表面上專案的目的是為了建置新一代的外匯系統，而不想受制於舊有系統和廠商的牽制，但實際上客戶高層的想望是要架構能夠整合機構其它系統的基礎建設平台。然而，當詢問客戶高層對系統目標的意見時，他們給的回答竟是「把系統做到令客戶咋舌」這種有說等於沒說的答案。</p>
<p>專案的成員並非來自開發組織的單一部門，而是從各個組織挑選各種經驗和背景的人，雖然有專業能力資深的人，但也有對相關技術不熟悉的成員。可以想見，在專業、技術、能力、背景如此懸殊的情況下，因為「人的問題」而發生團隊衝突是很難避免的，這個專案的團隊衝突的課題，正好提供我<a href="http://ndltd.ncl.edu.tw/cgi-bin/gs32/gsweb.cgi/login?o=dnclcdr&#038;s=id=%22095NTUS5396084%22.&#038;searchmode=basic">碩士論文</a>的研究動機。</p>
<p>當時開發團隊過去沒有接觸過相關問題領域的經驗（事實上是客戶指定不希望找對有金融經驗的人來開發，公司沒有開發過相關領域的專案，而有不錯的系統建置專案，才是客戶會選擇我們的主要原因）、開發環境也是用開發團隊過去完全沒有經驗的技術。</p>
<p>客戶指名這個專案要使用 <a href="http://en.wikipedia.org/wiki/Service-oriented_architecture">SOA</a> 架構，由前端 <a href="http://en.wikipedia.org/wiki/JavaServer_Faces">JSF</a> 以 <a href="http://en.wikipedia.org/wiki/Webservice">Web service</a> 呼叫到 <a href="http://en.wikipedia.org/wiki/Application_service">Application Service</a>，呼叫後端直接存取 <a href="http://en.wikipedia.org/wiki/POJO">POJOs</a> 或是傳送訊息的服務、而中間物件的傳遞則透過 <a href="http://en.wikipedia.org/wiki/XStream">XStream</a> 的序列化以 <a href="http://en.wikipedia.org/wiki/JAX-RPC">JAX-RPC</a> 進行遠端傳送、至於元件包括軟體架構也都是從無到有按照系統需求逐漸演化成型。</p>
<p>專案團隊大部分的人都沒做過 TDD，加上這麼多「高度動態的因素」，而導入 TDD 竟然能夠成功，是因為我們運氣好嗎？這麼說必須忽略開發組織守舊勢力對新方法論、架構和技術的反撲，否則就很難解釋公司總經理的質疑和反對。實際的情況是我們不是運氣好，而是用對的方法讓我們做好準備。當公司高層開始質疑的時候，我們早就已經透過 TDD 快速驗證我們的方法沒問題，而讓總經理無法否決我們的設計成果。這讓人目睹 TDD 的真正價值所在，不是確認「程式的正確性」，而是讓人有勇氣並保持簡單的節奏。</p>
<p>同人認為 TDD 的成功並不在 TDD 自動確認「程式的正確性」，而在於TDD 讓人有勇氣把事情做好，讓人遵循良好解決問題的節奏和紀律。那就是：1.確認問題；2.依照問題情境，發展用來驗證方案的標準；3.設計方案並執行驗證，以達符合驗證標準；4.視組織需要改善方案，再次執行驗證以確認符合標準。</p>
<p>依照這樣的節奏和紀律，可以讓人在確認方案做正確之前，已經驗證方案是用來解決正確問題，以避免過度設計和設計不足的兩難。這正是傳統方法很難避免的問題；即使開發者擁有熟練的開發技術，但少了在事情做對之前先做正確事情的紀律，品質問題正是因此而叢生。</p>
<h4>現實的真相</h4>
<p>XDite 用「理想狀況」來反駁用 TDD 來瞄準、射擊、修正後再射擊的觀念，他說很多時候， Team 裡面有開發者不能強迫導入 TDD 的環節，強行推動只是互相絆倒和拖垮彼此的時程，這是所謂的「現實狀況」。這麼說似乎是意味了 XP 敏捷方法的 TDD 實務無法在「現實狀況」實行，而是「理想狀況」。這種說法對同人其實並不陌生，就像我在〈<a href="http://www.lifeparty.idv.tw/blog/archives/163">羅馬不是一天造成的</a>〉這篇文章所提到的情形：</p>
<blockquote><p>同人偶爾會與 X 君分享我的工作心得，他很羡慕我能夠堅持設計的理想，遵循好的設計原則及開發方法發展出軟體架構，像他就沒有這樣的機會。而和同學分享我的工作成果時，他則認為我堅持設計理念可以成功，是因為我們公司有足夠的資源可以讓我們玩，換成是小公司，就不會有這樣的成功條件。</p></blockquote>
<p>其實同人在那篇文章所提到的概念、架構和技術的驗證，所用的方法正是 TDD。但同人分享成功經驗看到人們的反應卻發現，除了羡慕和佩服之外，多半是認為我剛好遇到足夠的條件來支持我實踐理想，而他們的「現實狀況」一定不允許他們這樣做。</p>
<p>假如真的是「現實狀況」不允許開發者導入 TDD，那麼面對開發出來的軟體品質不彰，他們採取了什麼行動來面對現實呢？以同人在一家開發軟體產品的 startup 公司看到的「現實狀況」來看，他們只是試著更努力而辛苦地把過去的工作做得更好，可是彷彿都一直不能如願。</p>
<p>同人在那家公司分享過我的 TDD 的經驗，RD 經理認為或許應該要做 TDD，可是因為使用資料庫的關係，會讓 TDD 很難做到或是做了沒有太大的效益。同人並不太瞭解為什麼他會有這種顧慮，因為按照我過去的經驗，資料庫的部分可以用 Mock Object 或是 Hash Map 版本的實作來區隔開來，而且這樣做有優化設計的好處。不過，同人不便公開質疑主管對 TDD 的顧慮，而是選擇尊重他在「現實狀況」下的決定；等到適當的時機再導入 TDD，除了眼下的問題需要被克服之外，還要讓開發者們的步調都能一致。</p>
<p>直到同人離開那家公司之前，TDD 都是一直被人們掛在嘴巴上說，但從來未曾真正去做。然而，隨著需求愈來愈多，程式碼也愈來愈複雜。這時候，關於軟體品質愈來愈殷切的議題便是元件很難被獨立測試，而是必須整塊合在一起才能測試，但這在除錯上很沒有效率。於是各個元件要獨立測試變成一項非常重要的需求，但滿足此項需求最大的問題便是軟體架構需要動大刀，而更緊急的嚴重問題便是有一大堆在客戶端的 P1 和 P2 的 bug 需要解決。</p>
<p>於是在龐大的時程和品質壓力下，常讓 RD 和 QA 沒辦法在時限內產出符合品質要求的軟體。我們用的方法，就是一次又一次的讓 RD 以<a href="http://en.wikipedia.org/wiki/BDUF">大規模前置設計</a>（BDUF），然後等程式開發完成之後再 handover 給 QA。雖然表面上公司採用敏捷的開發流程，每天在固定時間召開 <a href="http://en.wikipedia.org/wiki/Stand-up_meeting">Daily Stand-Up Meeting</a>，但是看起來專案管理者的腦袋並沒有換成敏捷的思維，仍然是期待以更精確的預測來改善專案的進展，即使是他們對專案狀況的預估從來沒有準確過。</p>
<p>在這種「現實狀況」下，雖然同人已經提醒 <a href="http://en.wikipedia.org/wiki/Scrum_%28development%29">Scrum</a> 偏重管理面而非工程面，但由於 RD 經理對 TDD 仍然有疑慮而不敢貿然採用它來提昇程式的品質。整個開發團隊只是一遍又一遍地用和昨天用過的方法，來試圖解決今天相同的問題，但我發現專案管理者好像不合邏輯地希望得到不一樣的結果。它正符合愛因斯坦對精神錯亂所下的定義：</p>
<blockquote><p>一遍又一遍做同樣的事，卻期待不同的結果。</p></blockquote>
<p>同人看到專案管理者對「現實狀況」的理解是，因為開發者在事前（不用心而）想得不夠多，所以不能在一開始就把事情做對，而導致軟體運行發生錯誤。但同人認為「現實狀況」的真相卻是，關鍵在於開發者沒有辦法做正確的事情，在很多時候設想了太多無謂的問題，而把心力分散在處理瑣碎的事情，而無法專注在關鍵問題上思考。</p>
<p>這是因為無法快速驗證方案對解決問題的效果，往往在開發者花費大量心力脫離「<a href="http://zh.wikipedia.org/zh-tw/%E4%BA%BA%E6%9C%88%E7%A5%9E%E8%AF%9D#.E7.84.A6.E6.B2.B9.E5.9D.91">焦油坑</a>」之後，才發現真實情況有很多地方是無先無法預料到的。換句話說，這不是開發者做的東西不對或是不好，而是面對適應變化，沒有把握「動作要快、行動要小」<sup>[<a href="http://www.lifeparty.idv.tw/blog/archives/6126#footnote_0_6126" id="identifier_0_6126" class="footnote-link footnote-identifier-link" title="曾昭屏譯（2006年），《溫伯格的系統管理學：系統化思考（第一卷）》，經濟新潮社。">1</a>]</sup>的原則。</p>
<p>當然在「現實狀況」下，導入 TDD 的實務不見得真的能夠有效地解決問題，對於任何一種開發方法論，我們都不應該盲目導入，而是要弄清楚它的適用範圍和限制，TDD 當然也不例子。然而，對於把 TDD 和做測試混為一談，然後藉此推測團隊中「一定」有 TDD 不能強迫導入的環節，強制推行只會互相絆倒和拖垮彼此時程，同人認為這是扭曲 TDD 當成做測試的繆誤。</p>
<p>使用 TDD 來開發軟體，開發者實際花費在測試案例的時間並不會很長。因為程式開發者不可能只寫程式而不驗證自己的程式碼，否則無法確認程式符合規格，就不能認定他已經寫完程式了。既然驗證程式碼是他的責任，那麼測試先行只是確認程式碼符合規格的一種方式，這樣只是把後面應該執行的工作先做好，並不會增加開發者額外的工作量。</p>
<p>因此建構 TDD 的測試案例並不需要額外的工作量、也不大可能會因為執迷於測試而沒有花時間溝通共通架構、或是程式的 <a href="http://en.wikipedia.org/wiki/Debug">debug</a> 時間。又能節省開發者因為想太多而多花費過度設計的時間，而且可以支持驗證程式的重構來加強程式的結構，不會因為增加功能而影響程式碼的品質。</p>
<p>TDD 在開發程式之前先寫測試案例的用意，並不是為了及早自動抓出問題。雖然這通常是採用 TDD 能夠產生的附加價值，但 TDD 先寫測試程式的精神是為了驗證未來方案能夠符合需求，以確認方案是在正確的命題方向上發展。開發者發展解決方案，每前進一小步，都能夠知道這一步離他的目標更接近或是遠離，這讓他可以馬上採取行動來調整方向以減少偏差。於是開發者可以做到真正的面對現實，這正是掌握適應改變行動要快、動作要小的原則。</p>
<h4>不理究理者的未嘗知義</h4>
<p>採用 TDD 來開發軟體，並不能做到確保程式的正確性、或是降低程式出錯的機率。因為要做到這個目的你就必須「預測」程式會發生問題的一切可能性，並且預先把它們都放到測試案例中，才有可能達到這些目的。然而，事先做預測已經違反了敏捷開發的基本原則，也違反了 TDD 的基本精神，認為 TDD 的目的是為了確保程式的正確性、或是降低程式出錯的機率而把它和做測試混為一談，這只是不明究理的人未嘗知義的偏見。</p>
<p>就像在網路社群中，<a href="http://www.artima.com/weblogs/viewpost.jsp?thread=216434">James O. Coplien 以「宗教信仰」形容 TDD 的迷思</a>算是最典型的代表，它以 TDD 不可能達到測試良好的涵蓋率來批評它的效率不如傳統的軟體工程方法。同人曾經<a href="http://www.lifeparty.idv.tw/blog/archives/266">評論過這種觀點的繆誤</a>：</p>
<blockquote><p>品質的問題並不是測試效率太低；而是開始測試的時間拖得太久，使得分析設計階段的缺陷不斷地擴散而使開發人員窮於應付。例如開發者在設計的過程中有沒有去思考設計驗證的問題，還是把這個責任推給後續的品管作業，例如 code inspection，或是各種形式的審查作業？</p>
<p>這個答案無關乎方法論本身的優劣，而是關乎開發者面對問題的態度，這對品質有著直接而深遠的影響。沒錯，我們需要專注於思考，但思考的重點並不在用那一種檢驗方式比較有效率，因為那樣我們將會落入品質是檢驗出來的迷惘當中。而是應該思考，對這個問題為什麼我會這樣設計？我如何驗證它是可行的？有沒有可能它會無法解決問題或造成其它我沒有想到的問題？</p></blockquote>
<p>把做測試和 TDD 混為一談的觀點，忽略了 TDD 的價值不在檢驗程式的正確性，而是找出足以解決問題的系統邊界的設計過程、以及面對目標採用有效的節奏把事情做好。對於 TDD 而言，測試不是用來確認程式沒有錯誤的目的，而是定義系統邊界的手段與過程，因為品質的關鍵不在於確認沒有錯誤的程式，而是從程式接口之間發現軟體自然演化的脈絡；學習庖丁解牛的精神，以游刃有餘的技法來體會軟體開發之道。</p>
<p>至於 XDite 在意以「混蛋邏輯」把 TDD 和測試綁在一起，同人覺得根本就是沒有必要地在鑽牛角尖。當程式設計者說他想要寫測試程式來確認程式的品質，並不見得他真的是把測試和 TDD 綁在一起；而且就算是他真的把測試和 TDD 綁在一起，同人也認為無傷大雅。有時候，管理者不見得會瞭解程式開發者所表達 TDD 的正確的觀念，所以開發者必須學會用不太精確但表達到重點的說法對管理者提出需求。</p>
<p>這也就是說，對於程式設計者而言，他所需要的是擁有能夠提昇他程式品質的方案，而 TDD 是他想要可能可以符合需要的候選方案之一。提出測試的附加價值是讓管理者比較能夠接受的說法，當然程式開發者也有可能真的把測試和 TDD 綁在一起，但即使這樣也沒有關係。因為當他實際採用 TDD 開發程式後會發現程式品質的提昇不是測試，而是在<a href="http://en.wikipedia.org/wiki/Edge_of_chaos">系統邊界附近</a>發生<a href="http://en.wikipedia.org/wiki/Self-organization">自我組織</a>的演化過程。</p>
<p>很多時候，我們真的沒辦法期待人們觀念正確才開始動手執行，因為那樣等於你什麼都不用做，而且軟體開發的重點不是理論怎麼說，而是實務上怎麼做，程式開發者從實務上的執行才能真正瞭解，TDD 不能跟做測試混為一談。</p>
<br /><div class="googlePlusOneButton"><g:plusone href="http://www.lifeparty.idv.tw/blog/archives/6126"  size="standard"   ></g:plusone></div><br />附註
&nbsp;<hr/><ol class="footnotes"><li id="footnote_0_6126" class="footnote">曾昭屏譯（2006年），《<a href="http://www.books.com.tw/exep/prod/booksfile.php?item=0010341309">溫伯格的系統管理學：系統化思考（第一卷）</a>》，經濟新潮社。</li></ol>]]></content:encoded>
			<wfw:commentRss>http://www.lifeparty.idv.tw/blog/archives/6126/feed</wfw:commentRss>
		<slash:comments>16</slash:comments>
		</item>
		<item>
		<title>從公共建設的系統失常看系統開發的複雜性</title>
		<link>http://www.lifeparty.idv.tw/blog/archives/6092</link>
		<comments>http://www.lifeparty.idv.tw/blog/archives/6092#comments</comments>
		<pubDate>Fri, 24 Jun 2011 05:31:29 +0000</pubDate>
		<dc:creator>jim yeh</dc:creator>
				<category><![CDATA[CNet/ZDNet]]></category>
		<category><![CDATA[利害關係人]]></category>
		<category><![CDATA[問題解決]]></category>
		<category><![CDATA[寫作]]></category>
		<category><![CDATA[專案監控]]></category>
		<category><![CDATA[思考]]></category>
		<category><![CDATA[溝通]]></category>
		<category><![CDATA[生活感觸]]></category>
		<category><![CDATA[職場]]></category>
		<category><![CDATA[開發流程]]></category>

		<guid isPermaLink="false">http://www.lifeparty.idv.tw/blog/?p=6092</guid>
		<description><![CDATA[要認識系統開發的複雜性，這並不是一件很容易的事。不過，忽略它會讓我們和湊熱鬧的外行人一樣，從他人系統失敗的經驗中只能看得到表相；以為這只是犯了離譜的技術或方法論的錯誤。]]></description>
			<content:encoded><![CDATA[<p>談到系統開發，很多人都不反對它具有複雜性，至少不會認為它是很容易的一件事。然而，當聽到公共建設的系統失常的消息之後，人們似乎又會忘了系統開發存在的複雜性。我們經常會看到許多相關的評論，認為系統會發生錯誤是因為方法或是技術的問題，卻甚少探討有關系統開發的複雜性問題。</p>
<p>當然，系統發生錯誤的原因，也許真的很可能和方法或技術有關。但是否所謂的方法或是技術，就是一般對系統發生錯誤的評論中經常提到的方法或技術；不是開發者的技術觀念有問題，就是沒有遵照正確的流程及方法來做事？筆者覺得這樣的假設似乎把系統開發看的太容易了。</p>
<p>如果系統失敗的真相，真的是技術觀念、流程、或方法論的問題，那麼只要在系統開發過程中，加強這些因素就可以確保系統開發的成功。但從筆者系統開發的經驗顯示，這些因素雖然很重要，但它們並不是系統開發能得以成功的關鍵，而是要等到逐漸適應系統開發的複雜性之後，才能逐漸地改善增加系統成功的機會。</p>
<p>要認識系統開發的複雜性，這並不是一件很容易的事。不過，忽略它會讓我們和湊熱鬧的外行人一樣，從他人系統失敗的經驗中只能看得到表相；以為這只是犯了離譜的技術或方法論的錯誤。我們應該學習像內行人一樣，<a href="http://www.lifeparty.idv.tw/blog/archives/58">從系統失敗的教訓中看到成功的門道</a>，了解到系統開發複雜性本質的真相；不天真地以為技術或方法論可以解決系統失敗，而是深入省思系統開發的複雜性。基於筆者過去對系統失常的觀察及體會，想以這篇文章從公共建設的系統失常看系統開發的複雜性。</p>
<h4>從文湖線的系統品質談起</h4>
<p>自從捷運文湖線通車之後，筆者就常聽到有人對它的系統品質提出批評的意見。筆者記得以前在上班的途中，在路上遇到同事就曾和他討論到捷運文湖線的系統品質。這位同事林君的看法是以工程技術觀點看待系統失敗的典型，雖然他的觀點並不能夠讓我們看到系統失敗的全貎，但對系統開發的複雜性本質，倒是不失為一個不錯的思考起點。</p>
<p>林君知道筆者平常上下班都是搭捷運文湖線，然後再轉乘公車接駁。當時他問筆者搭乘捷運文湖線的人潮，筆者回答和過去文湖線未通車前搭乘捷運新店線相比，文湖線的人潮似乎並沒有新店線的人那麼多，雖然不見得會有位置坐，但文湖線的擁擠程度確實比不上新店線。林技術長猜測也許是人們對文湖線沒有什麼信心，所以搭乘的人比較少。</p>
<p>林君長年在國外定居和工作，因此以歸國華人的身份看待捷運文湖線的系統品質，會認為人們對捷運文湖線的系統沒信心是很自然的。文湖線在開始營運之初，發生過很多次嚴重的當機事件，因而讓人們覺得系統的品質不佳，這的確是不爭的事實。不過文湖線現在的狀況，確實已經比剛上線的時候要穩定許多。</p>
<p>依據<a href="http://www.google.com/url?q=http%3A%2F%2Fwww.trtc.com.tw%2Fct.asp%3FxItem%3D1129326%26ctNode%3D24508%26mp%3D122031&amp;sa=D&amp;sntz=1&amp;usg=AFQjCNFmHJfUYIIJjNdy24H8906j3-XYtg">台北捷運公司所提供的資料</a>，文湖線系統可用度與國際穩定度指標 MKBF 的兩項指標，可以客觀地證明，文湖線已是一條符合國際水準的捷運線。以筆者每天親身搭乘的實際體驗，我認為文湖線現在的狀況，其實並沒有像林君說得那麼糟糕。</p>
<p>筆者以過去參與的大型公共建設的系統開發經驗，讓我比較能夠理解文湖線剛開始上線的系統失常，直到後來才逐漸穩定的狀況。以筆者過去的系統開發經驗顯示，很多系統在剛開始上線的時候，總是會碰到一些偶然的意外，讓系統功能無法正常運作。直到專案團隊耗費足夠的時間與心力，找到系統異常的根本原因，才能針對問題對系統改善或調整使其趨於穩定。</p>
<p>因此筆者認為系統從剛開始上線到逐漸穩定，需要足夠的時間。剛開始是由於開發人員經驗不足，以致於不夠了解狀況而難以掌控系統以因應問題。等到開發人員從系統失敗中得到寶貴的經驗及教訓，並努力費心解決問題並改善系統，系統自然就會開始漸入佳境。很多系統並不像捷運文湖線或是高鐵售票系統那樣受到大家的注意，但其實每個系統在上線後，會出現問題的機率都是一樣的。</p>
<p>不過，林君倒是不這樣認為，而是認為由於開發者的觀念錯誤，才導致捷運文湖線的品質不良。以林君長期在國外開發系統的經驗，他很推崇老美做事的方法，按步就班地照著正確的方法來進行開發的工作，不求速成只求「把事情做正確」。反觀在台灣，他認為人人都是為了趕進度而求快速，經常省略了一些不應該省略的作業，為了節省時間，卻得到系統品質不穩定、甚至是系統失敗的代價。</p>
<h4>品質就是沒有錯誤？</h4>
<p>林君認為開發者為了讓捷運文湖線提早上線，沒有確實地把開發工作做正確，因而使系統品質變得不穩定而不斷發生系統異常的事故，所以應該歸咎於開發過程的觀念錯誤。林君的論點似乎是認為「品質就是沒有錯誤」，但這種觀念必須把系統開發的錯誤當成道德問題，否則它將會造成邏輯推論上的繆誤。</p>
<p>「品質就是沒有錯誤」會造成什麼邏輯推論上的繆誤呢？的確，當系統出現大量的錯誤時，毫無疑問地，不管系統功能如何，人們還是會因為品質缺失而認為它沒有價值可言。但反過來說，即使系統沒有發生任何的錯誤，我們也無法確認它的價值為何。<sup>[<a href="http://www.lifeparty.idv.tw/blog/archives/6092#footnote_0_6092" id="identifier_0_6092" class="footnote-link footnote-identifier-link" title="曾昭屏譯（2006），《溫伯格的軟體管理學：第一卷（系統化思考）》，p.294，經濟新潮社">1</a>]</sup></p>
<p>事實上，在追求系統不會出錯的完美之外，要讓系統有價值還需要對特定的人有用處。開發者致力於工程技術的完善，開發出不會發生任何錯誤的系統，即使盡到開發沒有瑕疵系統的道德責任，但這並不代表系統能夠為客戶或是使用者產生價值，而能夠贏得他們讚揚的肯定。</p>
<p><img alt="客戶真正的需要" src="http://andinspired.files.wordpress.com/2008/02/analogy.jpg" title="what the customer really needed" class="alignnone" width="449" height="336" /></p>
<p>這是因為追求系統在工程技術的完美、和系統符合客戶及使用者在問題領域真正的需要，根本就是兩回事。就像系統開發者常會碰到幾種導出使用者需求的障礙。尤其對於大型規模或複雜的系統，客戶和使用者通常要等待較久的時間，才能接觸到實際的系統。經過長時間對環境所產生的變化，加上他們在想法上的蘊釀，讓系統在認知和實際上的差距變大，於是便出現「是的，但是&#8230;」症候群的現象。開發者照著客戶或使用者提出的需求來開發系統，但等到系統開發出來之後，他們反而表示「是的，系統功能看起來很酷，但是它不是我想要的功能」。</p>
<p>「是的，但是&#8230;」症候群顯示系統開發在導出使用者需求的一種常見障礙；由於系統在被開發出來之前的不可見和不可觸摸性，客戶和使用者在還沒看到和接觸系統之前，根本很難說清楚他們需要什麼，而且有時候連他們都不知道自己要什麼。</p>
<p>除此之外，系開開發在導出系統需求還有兩種常見的障礙，一種是在系統範圍內存在「未發現的廢墟」，當開發者愈深入認識系統，愈會發現很多原來沒有被發現的系統問題；另一種是開發者和客戶或使用者的語言不同，因為彼此背景、專業知識、技能、以及關注的焦點不同，使雙方在溝通上採用不同的方式，增加彼此誤解和衝突的機會。<sup>[<a href="http://www.lifeparty.idv.tw/blog/archives/6092#footnote_1_6092" id="identifier_1_6092" class="footnote-link footnote-identifier-link" title="Dean Leffingwell &amp;#038; Don Widrig (2003), 《Managing Software Requirements: A Use Case Approach》, Second Edition, Addison Wesley Professional.">2</a>]</sup></p>
<p>由上面幾種導出使用者需求的障礙，我們可以了解僅僅系統開發要把需求弄清楚，就是一項艱鉅的任務。很多時候系統發生錯誤，問題的關鍵並不是開發者開發的系統有錯誤，而是沒有開發客戶或使用者真正需要的系統。因為在具備規模和體制的系統開發專案中，系統不大可能在層層工程驗證和確認過程把關之下，還會發生沒有把事情做正確的繆誤。但倒是很有可能因為系統開發在各種因素交互作用下產生的複雜性，讓人無法在混亂和秩序之間適當地調適而讓情況失去控制。</p>
<h4>系統開發的模糊地帶</h4>
<p>從工程技術的觀點來看，系統開發應該需要客觀及明確，其中不應該有模稜兩可和高度的不確定因素存在。但實際上在系統開發的過程中，卻讓我們發現要開發被嚴謹定義的系統，處處出現無法具體而明確清楚定義的難題。系統開發顯然存在模糊地帶，只是假設它不存在，更加容易讓人忽略系統的複雜性，而在系統出現混亂的時候無所適從。</p>
<p>系統開發為什麼會存在模糊地帶呢？理論上，只要能夠發展出足夠具體的需求規格，系統應該就不存在任何的模糊地帶才是。然而，即使沒有前面提到導出使用者需求的三大障礙，人也沒辦法藉由發展嚴密的系統規格，讓系統開發過程的模糊地帶因此而消失。</p>
<p>因為雖然定義具體的規格可以用來規範系統的一致性，減少系統發生模稜兩可情況發生的機會，然而，規格所規範的一致性愈高，也就代表系統的完備性愈容易受到限制；在系統規格沒有錯誤的情況下，不可能不出現任何邏輯上的矛盾。</p>
<p><a href="http://zh.wikipedia.org/wiki/%E5%93%A5%E5%BE%B7%E5%B0%94%E4%B8%8D%E5%AE%8C%E5%A4%87%E5%AE%9A%E7%90%86">歌德不完備定理</a>已經證明在理性的世界中，沒有任何的公理系統可以表現它的正確性，而在它所涵蓋的範圍中不發生任何的矛盾。只要公理系統所涵蓋的範圍足夠廣大，可以蘊含自然數所定義的成員，那就必然可以找到沒辦法證明也不能夠證否的命題。此外，也沒有任何的公理系統可以證明自己的正確性。</p>
<p>從歌德不完備定理可以讓我們理解系統開發的模糊地帶是必然存在的。對系統運作可能會碰到各種問題，如果開發者對問題領域沒有足夠的經驗，藉由數理公式及邏輯推演，沒有人可以定義出沒有模糊地帶的完備具體系統規格。當規格具有相當的涵蓋範圍，就代表系統存在更多的模糊空間，不然就代表了規格一定存在邏輯上的矛盾。</p>
<p>歌德不完備定理並不是說沒有系統的規格是完備的，而是指只要規格的涵蓋範圍夠廣，就沒辦法透過計算或是推論來證明它的完備性，否則將會以破壞規格的一致性作為代價。當然對於系統運作將來會面臨的某些情境，開發者可以增加規格的細節來擴大規格的完備性，但通常這樣做會影響到系統其它部分的功能，於是還是無法提昇規格整體的完備性，或是因此喪失規格的一致性。</p>
<p>因此，系統開發的模糊地帶是因為人們經驗的侷限，它們讓我們不可能用規格的正確無誤來證明系統對人的用處，也就無法確保系統的價值為何。因為單單要定義什麼是「完全正確無誤」就是個大問題，很多時候人不是不知道應該把事情做對，而是缺乏可以減少或避免犯錯的經驗。</p>
<p>一般而言，系統開發的錯誤包括缺少兩種典型的經驗；第一種錯誤是缺乏問題領域的經驗，使人沒辦法在規格中清楚定義系統，因為不清楚系統未來將面對的情境，沒辦法問正確的問題以做正確的事、第二種經驗則是缺乏工程技術的經驗，使人不了解系統可以採用的技術及方法，沒辦法回答正確的解答來把事情做正確。</p>
<h4>工程技術的對策</h4>
<p>在工程實務上，面對系統開發的模糊地帶，開發者並非無技可施。要避免沒有問對問題和沒有提供正確解答的缺失，開發者可以透過驗證（Validation）流程來做正確的事情，然後再運用確認（Verification）流程把事情做正確。這是面對系統開發的模糊地帶，工程技術所提供的對策，只是運用<a href="http://en.wikipedia.org/wiki/Validation_and_verification">工程實務的驗證和確認流程</a>，是否真能有效降低或避免系統開發的模糊空間？</p>
<p>從筆者實際參與系統開發的經驗來看，在系統開發過程中，開發者經常花費很多的心力在系統的驗證和確認上，但實際上它們對降低或避免系統開發的模糊地帶其實非常有限。主要的原因並非開發者的能力或是他們的使用的流程或方法不對，而是開發者終究會發現他們沒辦法完全忽略、或是排除工程技術以外有關人的因素。</p>
<p>筆者再舉另一個著名公共建設發生系統失常的例子。就像在幾年前，通過 CMMI ML3 的神通電腦開發高鐵售票系統，被人們詬病像登機的售票系統是忽視真正的使用者需求。以通過 CMMI ML3 的公司水準來看，人們很難能夠接受他們會開發出這樣的系統，不敢相信他們具有相當的軟體開發能力成熟度。</p>
<p>CMMI 工程領域中的驗證過程，它的目的是為了證實未來的系統，在預期中的環境中運作可以滿足預期的使用者需求，因此如果系統沒有滿足實際使用者真正的需求，很可能是因為開發者並沒有做好需求的驗證，並且以「用廣泛的方式驗證需求」來發展需求。</p>
<p>然而，高鐵售票系統沒有辦法滿足使用者真實需求，原因不盡然是需求驗證的問題。相信有參與過大型軟體系統開發專案經驗的人都會非常清楚，在開發過程中，開發者能夠主導需求方向的能力是很有限的。面對系統的真實情況，開發者並不如其他的利害關係人更能了解需求，可能很難分辨什麼樣的系統擺在預計的環境，才能滿足使用者需求。</p>
<p>當然，開發者可以用各種方法來探索各個候選的系統解決方案，然後運用各種廣泛的方式來確認需求；諸如用展示、雛型、模擬、或概念驗證等技術來驗證使用者需求。然而，除了筆者在前面提到的三大導出使用者需求的三大障礙之外，系統開發還會常碰到其它原因，讓「用廣泛的方式確認需求」也不能獲得使用者的真實需求。</p>
<p>例如負責需求確認的人員，並不是實際操作系統的使用者。他們可能會誤解使用者的需求、或是因為利害關係而忽略使用者的需要，等到系統開發完成後，系統使用者才發現系統不符合他們的需求。</p>
<p>上面的情況在大型的系統開發專案中很常見，開發者經常會碰到提出需求和使用系統並非同一個人的困擾。跟開發者談需求和確認需求的是資訊部門，當開發者把系統開發出來之後，交付使用單位操作以後，使用者卻又表示系統並不符合他們的需求。</p>
<p>為什麼客戶不讓開發者面對使用者直接溝通需求，而要透過資訊部門的中間人的角色？這個問題其實很複雜，很多時候客戶很難找到確切的使用者來讓開發者訪談需求。即使排除像高鐵售票系統的使用者是一般的民眾的狀況，其它企業內部的系統的使用單位，很經常會橫跨多個部門，要找到所有的利害關係人一齊開會，其實是非常不容易的。</p>
<p>其實還有更主要的原因是客戶在策略觀點、和使用者作業觀點的不同調。客戶的決策高層可能不只是希望系統將現行作業自動化提昇效率，他更希望系統能夠運用資訊科技的優勢來改進作業流程，並改變使用者習慣來創造效益。所以並不希望開發者對系統需求的認知，被使用者的作業習慣框住。客戶端高層對系統的看法，經常會與實際操作系統的使用者的需求南轅北轍，很難能夠從當中找到讓每個人都滿意的系統需求，而只能從當中做出某種程度的取捨。</p>
<p>雖然系統開發在驗證和確認流程並不是對人而是應該針對事，可是忽略人的因素就很難能夠得到執行它們應有的成效。記得筆者曾經經歷過系統經過客戶的 Power User 測試需求的系統，最後在系統驗收之前，卻還是被客戶要求變更需求。這對開發者也許是難以理解並接受的情境，但其實這正是系統開發複雜性本質的展現。即使對企業需求更了解的資深使用者也很難發現自己提出的需求是有問題的，更何況有時候需求的變化是來自人力所不能抗力的環境因素所造成的，開發者很難能夠對他們來多加以責難。</p>
<h4>社會技術的關鍵因素</h4>
<p>因此，從上面工程技術經常碰到的困難我們可以清楚知道，系統開發即使透過嚴謹的工程技術，也不可能忽略人的因素，因為即使工程技術沒有出現錯誤，也不能證明它是對人有用處而展現價值。這正說明了系統開發的複雜性並不是單獨以工程技術的觀點就可以理解，而是更需要正視有關於社會技術的觀點。</p>
<p>社會技術觀點和工程技術觀點最顯著的差異，正是前者並不如後者的客觀，這也代表是非對錯沒有固定不變的標準，常常同一件事在不同的專案或基於人的不同立場而會有不同的結論。其實系統開發的複雜性正是因為無法限定在單一的觀點，而是必須考量各種不同面向的多重觀點。</p>
<p>因此，系統開發需要考量多重觀點，要先從取捨系統需求出發，這代表系統開發者必須做好利害關係人管理，它對系統的成敗具有積極的決定因素。利害關係人管理需要識別出專案的利害關係人，然後挖掘、管理、以及影響他們的需要及期望。專案的利害關係人包括主動參與專案的人員、或是他們所感興趣的事情，會對專案的產出或成敗有影響的個人或組織。</p>
<p>系統開發應該要儘可能地滿足每一位利害關係人的期望和需要，然而，一旦利害關係人之間，彼此意見衝突而且無法協調共識時，那系統就必須要以滿足專案的客戶為主。也就是說要把客戶當成是關鍵的利害關係人，為了滿足他的需要和期望，其他人的需要及期望都可以被放棄。</p>
<p>然而，有些時候系統開發者眼前直接面對的客戶、或是專案的贊助者，他們的意見不見得會讓系統變得更有用處，而且經常還會讓系統變得更不容易使用，反而讓人們沒辦法接受系統。因此，在這種情況下，可能會促使<a href="http://jonathanspeaking.blogspot.com/2007/02/stakeholder-management.html">開發者認為應該思考使用者實際的需要</a>，因為可能他們才是最重要的利害關係人，而不以滿足客戶或專案的贊助者的需要和期望為目標。</p>
<p>不過，這種想法的問題是開發者通常沒有能力判斷誰的期望和需要比較重要。當然使用者是直接使用系統的人，他們的期望和需要或許應該優先考慮。但客戶和專案贊助者是真正出錢的人，當他們和使用者的意見不一致、甚至是發生衝突的時候，考量現實的因素，開發者真的很難為了符合使用者的期望和需要，而違逆客戶或專案贊助者的要求。</p>
<p>其實開發者運用他所熟悉的工程技術，通常是不能分辨誰才是真的利害關係人，因為對於客戶所關心的問題領域，有太多他不清楚的事情。有時候，開發者基於工程技術感覺應該是對的事情，往往最後才會發現它可能是錯的。當然，其它像客戶、或專案管理的單方向觀點，可能會受到對解決方案領域的認識有限，也沒辦法分辨誰才是真的利害關係人。當我們聽到有人主張「客戶永遠是對的，所以你應該照我說的這樣做」就會知道這絕對不是真理而是偏見，忽略了系統開發的複雜性來自多重面向。</p>
<h4>在混亂中找秩序</h4>
<p>既然系統開發的複雜性不能忽略多重面向，那麼我們就不可能在問題領域和解決方案領域之間選擇一邊來強調系統開發的核心思想是什麼，而是應該在各種不同面向觀點的交界之處，去找到適應系統開發複雜性的關鍵所在。換句話說，系統開發必須調合各種陰陽面，從未知和已知之間、混亂和秩序之間、結構和非結構之間，去尋找可以融合各種觀點的最大可能性。</p>
<p>要調合系統開發的各種陰陽面，以融合各種觀點最大的可能性，依複雜適應性系統（complex Adaptive System）的觀念來說，停留在會發生自我組織的混沌邊緣以適應變化，可以從三個方向著手。首先必須要把廣大而無所不包的可能性，限制在一小部分、其次是必須保持允許輕微改變的穩定性、最後是必須要在靜止不動的死寂和過度活動的混亂之間維持平衡。</p>
<p>這三個方向讓我們看到了適應系統開發複雜性的三大重點，那就是系統必須是可測試的、擁有允許改變的彈性、以及必須能夠持續的整合以維持動態的平衡。測試是為了知道系統的邊界在那裡、彈性是為了容納更多需要的變化、整合則是讓演進系統的火光能夠迸現。</p>
<p>於是，面對環境變化的無常，開發者需要自我組織來演化出適應複雜性的能力。筆者認為這種能力才是系統開發品質的關鍵，以工程技術和社會技術之間的調適，來尋求不同領域觀念之間的融合。這樣就能夠使系統在變化的環境中，能夠保持穩定的動態平衡。</p>
<p>就好像《太極拳論》提到「偏沉則隨，雙重則滯」的觀念一樣。工程技術重視規律和秩序，而社會技術則強調適應變化和彈性，兩者各有所長而無法偏廢。在開發過程採用（adopt）、調適（adapt）、並熟練（adept）不同著重點的轉移，是讓人學習在混亂中找秩序的法門與修煉。當然筆者承認這實際做起來真的不大容易，但至少它不會讓人用簡化的思維來看待系統開發。</p>
<h4>後記</h4>
<p>這篇文章本來是準備投稿 <a href="http://www.zdnet.com.tw/">ZDNet Taiwan</a> 的文章，從去年八月和同事的對話引發同人的寫作動機開始，到最近才把整篇文章完成，歷經了將近一年的時間。在寫作過程中，文章經過無數次的修改，希望能夠寫出不同以往談論系統開發複雜性的文章，沒有深澀的術語、也能用非技術專業的觀點來看到我對複雜適應性系統的領會。</p>
<p>這正是同人想突顯和另一篇有關系統開發複雜性的文章〈<a href="http://www.lifeparty.idv.tw/blog/archives/175">軟體開發是工藝還是工程</a>〉最大的不同，也算是對我最近兩年在系統開發所行、所思、所得，做一個比較全面的整體論述。系統開發真的需的有效的方法，但沒有任何一套方法可以忽略人的因素而能夠正確無誤地運作。</p>
<p>很多時候，讓人們沒辦法流程把事情做好的原因其實很簡單，但人的情緒卻通常把它變得很複雜。尤其是高階主管的情緒，不去觀察現象來瞭解執行和計劃的落差，以調整計劃來做正確的事情，卻以批評與責難來反應自己的情緒，這正是顯示高階主管在系統開發管理的無能為力。這種無能代表他們除了只會讓人「聽命辦事」之外，其它對管理其實是一無所悉。儘管他們能夠一直用口號來「教育」員工，並藉此檢查工作者的工作態度對不對，但他們的管理能力只能讓他們「簡化」系統開發的複雜性。</p>
<p>這篇文章比〈軟體開發是工藝還是工程〉更擴展它的詮釋領域，系統開發不應該只限制在軟體開發上。雖然軟體的抽象性會增加系統開發的困難度，但系統開發複雜性的本質所在，在於技術和業務觀點相互撞擊而產生各種變化，它不只是存在於軟體開發的系統中，對其它非軟體的系統開發也是相同的狀況。</p>
<p>同人並不想讓這篇淪為整理過去文章的新瓶舊酒，而是以這兩年系統開發實務得到的經驗，融合複雜適應性系統的觀念，內化成系統開發調適變化與紀律的動態平衡之道。雖然這篇文章也許寫了太久，以致於錯過了投稿 <a href="http://www.zdnet.com.tw/enterprise/column/softwaredev/">ZDNet Taiwan 專欄</a>的時機，但發表在網誌也算是對自己有交待和對喜歡《<a href="http://www.lifeparty.idv.tw/blog">同人的生活派對</a>》<a href="http://www.lifeparty.idv.tw/blog/archives/category/%e8%bb%9f%e9%ab%94%e9%96%8b%e7%99%bc">軟體開發</a>和<a href="http://www.lifeparty.idv.tw/blog/archives/category/%e7%ae%a1%e7%90%86/%e5%b0%88%e6%a1%88%e7%ae%a1%e7%90%86">專案管理</a>文章讀者的回饋。讀者的支持是作者寫作最大的動力，不管是在網路專欄或是個人網誌，同人將會持續寫作來分享我在軟體開發和專案管理領域所體會的點點滴滴。</p>
<br /><div class="googlePlusOneButton"><g:plusone href="http://www.lifeparty.idv.tw/blog/archives/6092"  size="standard"   ></g:plusone></div><br />附註
&nbsp;<hr/><ol class="footnotes"><li id="footnote_0_6092" class="footnote">曾昭屏譯（2006），《<a href="http://www.anobii.com/books/013ad41f7a862e80dd/">溫伯格的軟體管理學：第一卷（系統化思考）</a>》，p.294，經濟新潮社</li><li id="footnote_1_6092" class="footnote">Dean Leffingwell &#038; Don Widrig (2003), 《<a href="http://safari.oreilly.com/032112247X">Managing Software Requirements: A Use Case Approach</a>》, Second Edition, Addison Wesley Professional.</li></ol>]]></content:encoded>
			<wfw:commentRss>http://www.lifeparty.idv.tw/blog/archives/6092/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>絕對支持品質流程的宣稱</title>
		<link>http://www.lifeparty.idv.tw/blog/archives/6039</link>
		<comments>http://www.lifeparty.idv.tw/blog/archives/6039#comments</comments>
		<pubDate>Thu, 23 Jun 2011 08:27:51 +0000</pubDate>
		<dc:creator>jim yeh</dc:creator>
				<category><![CDATA[品質文化]]></category>
		<category><![CDATA[問題解決]]></category>
		<category><![CDATA[寫作]]></category>
		<category><![CDATA[專案團隊]]></category>
		<category><![CDATA[溝通]]></category>
		<category><![CDATA[生活感觸]]></category>
		<category><![CDATA[職場]]></category>
		<category><![CDATA[領導]]></category>

		<guid isPermaLink="false">http://www.lifeparty.idv.tw/blog/?p=6039</guid>
		<description><![CDATA[在公司高層這種態度和形成的公司文化氛圍之下，公司產品最後會變成「把做好的東西丟到牆的那一邊去」就不足為奇了。再加上以西方優越感產生文化的價值批判，在這種情況之下，QA 對產品品質的提昇有多少著力點呢？同事丙的離開做出了最好的回答。]]></description>
			<content:encoded><![CDATA[<p>最近在兩年前寫過〈<a href="../archives/488">聚餐也談品質流程</a>〉的文章，看到當時 <a href="http://www.lifeparty.idv.tw/blog/archives/488/comment-page-1#comment-8821">satomi 在迴響中提到</a>：</p>
<blockquote><p>我看了很多公司，每一家都宣稱絕對支持 QA 啊！</p></blockquote>
<p>這句話讓同人心中無限感觸。感觸之一是 satomi 原來就認識同人的許多同事，包括同事丙和同事乙，而且和同事丙一樣，satomi 是非常有經驗的 QA。這當然是我在寫完那篇文章之後才知道的事情，然而現在看這篇文章，感覺像是跟很多老朋友在進行有關品質的對話。</p>
<p>其實還有更大的感觸之二，記得我當初在寫這篇文章的時候，我認為公司的品質文化是重視方法來提昇品質，這是公司高層對品質的承諾。因此，當 satomi 留言回應「QA 應該要可以提昇品質，但是公司從來沒有授予這個 QA 團隊做到這件事的權限」時，同人覺得公司一直給予 QA 足夠的權限而並不認為是如 satomi 說的那樣。</p>
<p>然而，兩年後有機會再回頭看到那篇文章之後，才看到 satomi 留言的先見之明。原來同人當初對公司的品質文化的看法並不正確，即使公司高層宣稱絕對支持 QA，但在行為上的表現卻並非如此，而是並沒有實際賦予 QA 足夠的權限來提昇產品的品質。</p>
<p>當然，同人相信同事丙當初不見得有「認為公司表面上表示絕對支持 QA，但骨子裡卻從來沒有授予這個 QA 團隊做到這件事的權限」。不過我很確信他今天不會認為公司高層的行為真的如其所宣稱，在行動上支持 QA。</p>
<p>否則，原先對公司發展遠景抱持希望和品質管理工作懷有熱情的同事丙，應該不會在同人離開公司之後，選擇在同一個時間點也離開公司。以同人在離職之前對他的觀察，我發現他在會議中相較於以前更少表示他的看法，感覺到他似乎已經不像過去對工作懷抱熱情，即使他還是努力工作為減少公司產品的 bug 而奮鬥不懈。</p>
<p>是什麼東西讓同事丙澆熄他的熱情？從同人後來私下和同事丙的聊天之中，可以確知是和公司高層對開發流程的態度有關。公司高層對品質的觀念和態度很有問題，有問題是指因應公司產品的複雜性和解決客戶問題方面，他們採用了不大適當的產品品質模式；以「照章行事」的方式來進行品質的管控而非「把穩方向」來做正確的事情以提昇品質。</p>
<p>在同人和同事丙共識的兩年中，我曾不只一次看到他和公司高層之間在開發流程的溝通中產生火花。對於高層提出新的開發流程，同事丙為了確認「我們真的要以瀑布法來開發產品嗎？」經常會造成和高層不悅的言語交鋒。在同人眼中看到這一切，我覺得使用「瀑布法」也許並沒有什麼不好，但我發現比較大的問題是高層侷限於自己的眼光，而不能用別人的觀點來看到自己觀點的問題。</p>
<p>同人從另外一件事更顯著地看到高層有這種侷限。有一次，在一個公司高層找同事丙、研發經理研究該如何解決客戶端問題的會議中，同事丙提出對公司高層提出的解決方案的意見。公司高層告訴同事丙，他應該先想好解決方法再提出他的意見。同事丙則不以為然地表示，如果要提意見之前都要先想好解決方案，那麼誰敢提呀！</p>
<p>因此，在公司高層這種態度和形成的公司文化氛圍之下，公司產品最後會變成「把做好的東西丟到牆的那一邊去」就不足為奇了。再加上<a href="http://www.lifeparty.idv.tw/blog/archives/5343">以西方優越感產生文化的價值批判</a>，在這種情況之下，QA 對產品品質的提昇有多少著力點呢？同事丙的離開做出了最好的回答。結果真的讓 satomi 說對了，公司的確是沒有賦予 QA 足夠的權限來提昇產品品質。</p>
<p>當然，產品品質不能提昇其實不能全怪公司高層。同人相信他絕對是有心要把產品做好，絕對也不是只有口頭上說說而已，但只是他的心智能力和行為沒辦法達成一致，非不為也，實乃不能也。從他老是把「把事情做對」掛在嘴裡，就知道他不知道「做正確的事情」可能才是品質不能提昇的最大瓶頸。去年年底，同人才發現他根本不能分辨工程的<a href="http://en.wikipedia.org/wiki/V%26V">驗證（validation）流程和確認（verification）流程</a>的差異，還問我「做正確的事情」是什麼意思，不是「把事情做正確」就行了嗎？</p>
<p>因此，我們真的不能怪罪公司高層<a href="http://www.lifeparty.idv.tw/blog/archives/4311">只知道「照章行事」而不知「把穩方向」</a>。你可以看到那些沒有辦法改變品質文化的高階主管，他們的無能是來自於無知，所以真的不能太苛責他們。</p>
<p>也許在夜闌人靜中，有心而無力改變的高階主管會反省自己白天錯誤的愚蠢行為，然而，一旦相同情境再度聚合，他們就是無法不在別人面前表現出愚蠢的樣子。這代表他們對於提昇軟體的品質這檔事，知道的很有限，可是又不想讓人知道他們知道的有限，也許需要更多失敗的境遇來磨鍊出成熟的心性，才能<a href="http://www.lifeparty.idv.tw/blog/archives/205">走出自己穴居的洞穴</a>，而看到不一樣的世界。</p>
<br /><div class="googlePlusOneButton"><g:plusone href="http://www.lifeparty.idv.tw/blog/archives/6039"  size="standard"   ></g:plusone></div><br />]]></content:encoded>
			<wfw:commentRss>http://www.lifeparty.idv.tw/blog/archives/6039/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>內切圓與外接圓－工作觀與文化的思考</title>
		<link>http://www.lifeparty.idv.tw/blog/archives/5343</link>
		<comments>http://www.lifeparty.idv.tw/blog/archives/5343#comments</comments>
		<pubDate>Wed, 16 Feb 2011 06:27:26 +0000</pubDate>
		<dc:creator>jim yeh</dc:creator>
				<category><![CDATA[心理]]></category>
		<category><![CDATA[思考]]></category>
		<category><![CDATA[易經思維]]></category>
		<category><![CDATA[溝通]]></category>
		<category><![CDATA[生活感觸]]></category>
		<category><![CDATA[管理]]></category>
		<category><![CDATA[組織]]></category>
		<category><![CDATA[職場]]></category>
		<category><![CDATA[衝突]]></category>
		<category><![CDATA[領導]]></category>

		<guid isPermaLink="false">http://www.lifeparty.idv.tw/blog/?p=5343</guid>
		<description><![CDATA[不管工作觀的差異是否源自於文化，文化的差異似乎很容易加深不同工作觀的隔閡，這引發這篇文章的寫作動機；從以內切圓和外接圓來詮釋工作觀的比喻開始談起，探討我對工作觀與文化的思考。]]></description>
			<content:encoded><![CDATA[<p>有時候，人的工作觀可能會受到文化的影響，於是有些人會以為工作觀的差異是來自文化，但實際上這並非事實，而是個人的主觀印象。不過，不管工作觀的差異是否源自於文化，文化的差異似乎很容易加深不同工作觀的隔閡，這引發這篇文章的寫作動機；從以<a href="http://zh.wikipedia.org/zh-tw/%E5%86%85%E5%88%87%E5%9C%86">內切圓</a>和<a href="http://zh.wikipedia.org/zh-hant/%E5%A4%96%E6%8E%A5%E5%9C%93">外接圓</a>來詮釋工作觀的比喻開始談起，分享我對工作觀與文化的思考。</p>
<h4>對於工作的兩種觀念</h4>
<p>內切圓和外接圓的比喻是由過去的一位長官 JL 先生所提出來的。他是在台灣出生，在義務教育結束後前往美國完成學業、工作並且創業有成，直到這幾年才在回到台灣在軟體產品領域發展。由於他深受西方文化的薰陶，在台灣特別感受到很多人做事的態度和美國人很不一樣。</p>
<p>如果我們的工作可以區劃成一塊一塊的正方形方格，看做是工作必須要完成的目標。那麼我們用來完成工作目標的活動，就可以看成是與這些方格重疊的圓形，可能是在正方形裡面的內切圓、或是在正方形外面的外接圓。JL 指出依他的觀察，他覺得東方人做事像內切圓，而西方人做事則像外接圓。他認為內切圓和外接圓是來自不同文化而產生工作觀的差異。</p>
<p>JL 表示在台灣，人們工作似乎比較習慣按照制度或是規章來做事，也就是需要按照組織所規範的框架來做事。反觀在國外他長年和美國人工作的經驗顯示，美國人做事通常不受制式框架的約束，因此比較能夠進行思考的自由與創新，用一些方法來突破框架的限制。</p>
<p>當然依照框架來做事，也不見得是壞事，它可以讓人們暸解要付出多少心力來解決問題。但 JL 指出就好像內切圓並不能完全涵蓋外切的四邊形一樣；按照框架來思考問題，實際的問題和想法之間，很容易因為落差而出現缺漏。反過來說，如果想法可以超越框架的限制，想法的完整性就可以比實際問題更多一點。就像外接圓一樣，代表想法的圓形可以完全涵蓋代表問題的四邊形在其中。</p>
<p>JL 強調內切圓或是外接圓的工作觀，沒有絕對的對錯，這只是受到文化的影響而有不同的選擇。他表示熟悉西方文化的他，一開始很不習慣人們和他有不一樣的工作觀，但慢慢地他發現經過一些磨合，逐漸了解該如何與統合習慣不同文化的人，並且找到方法能夠讓事情進展更加順利。</p>
<h4>觀念不同源自文化差異？</h4>
<p>JL 認為東方人和西方人在工作觀念的不同，是源自於文化的差異。或許這是因為他對開發軟體產品有熱忱，想回到他出生的國家，以他從美國人那邊學習到的做事方法，希望為台灣的軟體產業貢獻一些心力，但是在跟台灣工程師共事之後，卻覺得他們並不像美國人可以打破常規，能夠突破傳統做事的方法而進行創新。但以同人的觀察來說，我認為文化影響工作觀念的看法，是基於他對工程師工作觀念的期望所致，這是一種主觀的刻板印象而並非客觀事實。</p>
<p>同人認為內切圓和外接圓工作觀念的不同，不是源自於文化差異，而是來自於組織角色對工作的期待不同所致，我是根據「尋求簡單之道」（search for a simple way）專案的研究結果做出這樣的論述。同人在〈<a href="http://www.lifeparty.idv.tw/blog/archives/982">簡單，複雜世界的致勝之道</a>〉曾經提過這個研究，這本書是《<a href="http://www.anobii.com/books/%E8%B6%8A%E7%B0%A1%E5%96%AE%E8%B6%8A%E6%9C%89%E5%8A%9B%E9%87%8F/9789866739149/019cb0fce2190d24ab/">越簡單越有力量</a>》這本書作者投入該專案的研究心得，其中提到工作的複雜面向最主要的原因是變革欠缺整合。</p>
<blockquote><p>高層主管與員工對整合觀點的懸殊態度，對於整合，領導者關心的焦點是管理、控制與協調的工具；而員工關切的重點是有利個人決策的工具，執行工作者的觀點常會受到不平等的對待。</p></blockquote>
<p>對每個工作執行者來說，沒有人會不希望把工作做到盡善盡美。因此要在工作上突破傳統、超越框架，他們知道在工作上完成外接圓是最有效率的工作方式，而且也可以展現個人的專業能力。然而，實際上在執行工作的時候，他們卻常常會發現缺乏資訊、資源、工具等支援來進行如何工作的決策。</p>
<p>換句話說，員工執行工作的困難，通常在技術專業上都不成問題，而是在工作過程發生複雜的問題，而複雜最大的成因是領導者和員工對工作的觀念歧異，而員工的觀點總是被不平等的對待。很多高層經理希望工程師能夠發展外接圓，以涵蓋問題的面向，但受到時間急迫、資源或資訊不足的因素，必須要在工作上的各個面向有所取捨時，當然畫出外接圓是不可能的任務，而是以比較符合現實因素的內切圓來取而代之。</p>
<p>以上這種工作觀點的對立現象，並不是只有台灣而已，而是舉世皆然。這從「尋求簡單之道」（search for a simple way）專案的研究對象是美國企業，就可以得到證實；在美國工作，工作觀念對立的現象是普遍存在，顯見不是因為美國文化讓人傾向用外接圓的觀念來工作，而是因為角色的差異而選擇不同的工作觀念。</p>
<h4>美國工程師能力強？</h4>
<p>如果工作觀念的差異，並不是源自文化因素，那麼為什麼 JL 看不到美國工程師用內切圓的觀念做事？從同人從和 JL 共事的經驗來看，我不覺得他在軟體開發使用的流程，有什麼特別的不同，那這樣是不是意味著美國工程師能力強呢？同人相信 JL 的記性沒有錯誤，但我想並不是美國工程師能力比台灣工程師強，而是認為 JL 忽略了工作複雜性的分別。</p>
<p>雖然 JL 過去和最近這幾年都是開發網路安全的產品，但以前開發 L2、L3、L4 的防火牆，和最近幾年開發的產品，是在 L7 的網路安全應用領域，產品的複雜性和技術的成熟度當然差距非常大，因此在相較之下，如果是在產品複雜性低、技術成熟度高的領域開發產品，要用外接圓的觀念來做事當然是不會有太大的問題。</p>
<p>相反地，如果在產品複雜度高、技術成熟度低的領域開發產品，就不可避免地會碰到很多不確定因素，在這種情況下，想要以外接圓的觀念開發產品，期望做到一次到位談何容易？而且這樣做也很容易昧於現實而招致失敗的命運。所以，內切圓的觀念會比較適合在複雜性高的產品開發工作，必須集中資源去處理最關鍵或是最需要迫切解決的問題，而沒辦法期待在第一時間就兼顧所有的問題。</p>
<p>因此，同人認為選擇內切圓或外接圓的觀念來做事，與文化並沒有直接的關係，而是與問題的複雜性與技術的風險有關。談到文化，同人想到溫伯格在《溫伯格的軟體管理學（第一卷）－系統化思考》所提到的：</p>
<blockquote><p>當寫到有關文化方面的東西時，往往會參雜一種批判的情緒。比方說，有些人會覺得「<em>任何一種</em>軟體文化都有成功的時候」是一種令人難以接受的說法。他們就像歐威爾的政治寓言小說《動物農莊》裡的那些豬，樂於接受「所有動物生而平等&#8230;&#8230;但是，某些動物更該得到平等的對待」這類的觀念。有些人會同意「任何文化都有成功的可能&#8230;&#8230;但是，某些種類的文化較其它的文化更有可能成功」。</p>
<p>諸如此類的想法大有八九都是藏在心中秘而不宣的。例如克勞斯比在他的「品質管理成熟度座標格」中描述了描述了品質管理五種不同的階段。這樣的座標格是一種極為有用的工具，不過，若簡化為「品質管理座標格」將會是更貼切的名稱。「成熟度」這個字眼所傳達的並非一個事實，而是一種價值判斷－基於事實所做的一種詮釋，最起碼，它並不符合事實。
</p></blockquote>
<p>溫伯格說：「追求不必要的完美不是成熟，而是幼稚」<sup>[<a href="http://www.lifeparty.idv.tw/blog/archives/5343#footnote_0_5343" id="identifier_0_5343" class="footnote-link footnote-identifier-link" title="曾昭屏譯（2006），《溫伯格的軟體管理學（第一卷）－系統化思考》，p.59-60，經濟新潮社。">1</a>]</sup>在他的書中提出了六種軟體模式，強調使用某一種軟體模式並沒有比其它軟體模式更「成熟」的問題，只端看問題的複雜度和客戶的需要。同樣的道理，如果外接圓和內切圓的工作觀念，我們可以看做是不同的工作模式，兩者應該也沒有那一種模式比較成熟的問題，不然很容易讓人陷入批判情緒當中。</p>
<h4>兩種文化思維</h4>
<p>同人不知道 JL 說工作觀的不同源自文化差異的說法，其中是不是帶有文化批判的情緒。我也看不出來，所謂統合東西文化，可以讓事情進展得更順利的方法，到底指的是什麼。但從同人對西方的管理學、科學、以及東方哲學觀點的認識來看，JL 的一番說法，倒是讓同人看到兩種文化思維各有所長。也就是西方文化強調理念與力量、東方文化則是重視經驗與關係。</p>
<p>同人曾經聽過 JL 和一位同事的對話，他告訴同事 <a href="http://en.wikipedia.org/wiki/Entropy">Entropy</a> 的觀念，提到：「任何穩定的系統，在沒有外力干預的情形下，都會從有秩序的狀態下慢慢走向衰敗，所以人必須要更有力量才能讓系統維持穩定」JL 或許並沒有說錯，人需要更有力量來控制系統，讓它維持穩定的狀態。但到底人要如何才能得到更大的力量呢？同人不方便對長官提出這個問題，因為這個對話我是旁觀者而不便插話。但依我平常對 JL 的觀察，我大概知道他口中所指的力量到底是什麼。</p>
<p>同人相信長官口裡所指的力量是指「理性」的能力，也就是針對事物所呈現的事實，進行邏輯思辨和推論，然後在決定目標及擬定策略之後，再運用技術能力來完成目標的方法論。這種方法論強調西方文化所重視的科技能力，而且確實可以發揮更高的效率在處理一般性問題上面，而使人擁有更大的力量。</p>
<p>不過，也許是科技的理念讓人擁有更大的力量，而容易使人疑惑，忽略世界並不是完全「理性」的，很多問題沒有辦法用「理性」來解決的。尤其是在當人們對工作上的意見分歧，影響心理層面的負面情緒時，這時候談「理性」的人其實他的行為是不理性。在行為不理性的情況下，「理性」其實並不能產生力量。</p>
<p>溫伯格說：「力量是一種關係」<sup>[<a href="http://www.lifeparty.idv.tw/blog/archives/5343#footnote_1_5343" id="identifier_1_5343" class="footnote-link footnote-identifier-link" title="李田樹、褚耐安譯（2006），《領導的技術》，p.218，經濟新潮社。">2</a>]</sup>人所擁有的各種能力，包括知識、技術、專業、或是權力，它們的力量取決於它們所作用的對象上。如果人沒有清楚地認識自己，不清楚自己擁有能力要用來做什麼，就很容易把能力運用在不正確的對象上，這樣並不能產生力量，而會讓自己產生困惑。溫伯格說：「力量這概念經常使人困惑，因為我們通常不以相互關係的觀念來考量他」<sup>[<a href="http://www.lifeparty.idv.tw/blog/archives/5343#footnote_2_5343" id="identifier_2_5343" class="footnote-link footnote-identifier-link" title="李田樹、褚耐安譯（2006），《領導的技術》，p.222，經濟新潮社。">3</a>]</sup>。</p>
<p>從溫伯格對力量的觀點，讓我們看到力量是一種合一的關係，而這正是東方文化思維重視關係的關鍵所在；關係存在才有力量可言，真理不是絕對的，以人如滄海之一粟的渺小，惟有以體驗來擴展經驗，對世界的認識才會更加全面。其實東西方文化各有所長，人用「理性」來創造科技文明，然而，心物的分離是過度強調理性必然得的代價，人必須回過頭來以心物合一的「經驗」來認識非理性的世界，才能重新再得到力量。</p>
<p>《易經乾卦象傳》曰：「天行，健，君子自強不息」代表理性的發展，人要效法天的精神，每天都要追求進步，才能讓自己不斷成長而擁有力量。不過，《乾卦》用九的原則是「天德不可為首」，要「見群龍無首」才能夠持盈保泰。所以《乾卦》上九曰：「亢龍有悔」告訴我們人在知進退而不失正道的情況下，才能得到真正的力量。</p>
<p>《易經坤卦象傳》曰：「地勢，坤，君子以厚德載物」代表經驗的成就，能夠包容萬物、順應所謂「積善之家，必有餘慶；積不善之家，必有餘殃」的趨勢的人，才會真正地成就事物。《坤卦》六二曰：「直、方、大，不習無不利」說明事物的永續發展，是模式不斷複製倍增的原理，它不用經過學習就能讓人運用自如，但不良的模式一旦成形，矯正它就要浪費更大的心力。</p>
<p>因此《坤卦文言》曰：「直其敬，方其內，君子直以敬外，義以方內。敬義立，則德不孤」這正代表了優秀領導者對人表現謙虛態度，而對內堅持專業的原則<sup>[<a href="http://www.lifeparty.idv.tw/blog/archives/5343#footnote_3_5343" id="identifier_3_5343" class="footnote-link footnote-identifier-link" title="《從 A 到 A+》提到第五級領導者正是對人表現謙虛精神，對事堅持專業。">4</a>]</sup>。否則，一個有能力而不懂得謙虛的人，很容易因為驕傲而忽略自知之明，讓他老是在眾人面前表現出愚蠢的樣子。</p>
<br /><div class="googlePlusOneButton"><g:plusone href="http://www.lifeparty.idv.tw/blog/archives/5343"  size="standard"   ></g:plusone></div><br />附註
&nbsp;<hr/><ol class="footnotes"><li id="footnote_0_5343" class="footnote">曾昭屏譯（2006），《<a href="http://www.anobii.com/books/013ad41f7a862e80dd/">溫伯格的軟體管理學（第一卷）－系統化思考</a>》，p.59-60，經濟新潮社。</li><li id="footnote_1_5343" class="footnote">李田樹、褚耐安譯（2006），《<a href="http://www.anobii.com/books/014cfa7baf2eef15ba/">領導的技術</a>》，p.218，經濟新潮社。</li><li id="footnote_2_5343" class="footnote">李田樹、褚耐安譯（2006），《<a href="http://www.anobii.com/books/014cfa7baf2eef15ba/">領導的技術</a>》，p.222，經濟新潮社。</li><li id="footnote_3_5343" class="footnote">《<a href="http://www.books.com.tw/exep/prod/booksfile.php?item=0010202911">從 A 到 A+</a>》提到第五級領導者正是對人表現謙虛精神，對事堅持專業。</li></ol>]]></content:encoded>
			<wfw:commentRss>http://www.lifeparty.idv.tw/blog/archives/5343/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>成員能力優勢與團隊多樣性</title>
		<link>http://www.lifeparty.idv.tw/blog/archives/4409</link>
		<comments>http://www.lifeparty.idv.tw/blog/archives/4409#comments</comments>
		<pubDate>Wed, 27 Oct 2010 05:33:14 +0000</pubDate>
		<dc:creator>jim yeh</dc:creator>
				<category><![CDATA[問題解決]]></category>
		<category><![CDATA[專案團隊]]></category>
		<category><![CDATA[思考]]></category>
		<category><![CDATA[生活感觸]]></category>
		<category><![CDATA[組織]]></category>
		<category><![CDATA[職場]]></category>
		<category><![CDATA[閱讀]]></category>
		<category><![CDATA[領導]]></category>

		<guid isPermaLink="false">http://www.lifeparty.idv.tw/blog/?p=4409</guid>
		<description><![CDATA[比起個人的單打獨鬥，團隊合作可以創造更高的效益，但該如何組織高效率的團隊，却往往是令人傷透腦筋的一件事。團隊在組織中是跨越部門的功能性與職位層級的工作小組，它組合了多樣性與一致性兩種特性。團隊多樣性是來自於組織當中不同的部門或功能群組事業單位，而一致性則是基於相同組織具有相同的企業文化及共同目標。 由於這兩項特性，在團隊中是彼此對立但卻又是相輔相成的，因而容易造成管理團隊合作的困難。團隊可以發揮成員能力多樣性的優勢，產生團隊綜效而創造更高的整體效益，但另一方面，團隊的多樣性太高，將會對一致性造成衝擊，使管理者面臨到管理的困難。 團隊多樣性有助於團隊績效，但多樣性很容易使成員之間因為意見分歧，進而產生情緒反應與相互的干擾行為而發生衝突。衝突通常對團隊績效是有損害的，這在團隊發展是需要注意的問題，因此團隊領導者通常需要想辦法增加團隊的一致性，以降低成員之間一旦發生衝突的麻煩。 同人之前在文章〈技術經理的教練角色〉，就曾經提到技術經理不應該為了增加一致性而犧牲多樣性。在那篇文章同人對通達人提出的觀點，表達我的看法。他認為在保有多樣性的同時，也必須注意—致性。因為一致性是合作的基礎，就像足球隊隊員們都須熟練基本技巧「控球」和「傳球」，才能在實際比賽中透過一系列交互傳球得分。 同人當時以「必要多樣性法則」來說明如果技術經理的管理彈性不足，他就只能對團隊成員處處設限，以減少團隊的多樣性來降低管理的困難。但如此一來也等於抑制成員的創意，常會使得問題的解決更加困難。因為團隊可以視做一個動態系統，這個系統的行為將會由系統最有彈性的部分來掌控。換句話說，如果技術經理的彈性不足，那麼團隊的多樣性將會造成他控制整個系統的困難度。 從「必要多樣性法則」可以理解，如果希望利用團隊創造出更高的效益，多樣性是不可或缺的，否則團隊合作所產生的效益必然會欠缺創造力。這樣的觀念就像自然界生物與社會發展的演進一樣，存在差異性才能促成個體致力於創新與改變，進而促成整體性的發展與成長。 有趣的是，前一陣子同人在《我不要當負翁！教你如何經濟思維》這本書中也看到以經濟學的交易及合作的觀念來解釋團隊多樣性的必要性，也覺得非常有意思。 《我不要當負翁！教你如何經濟思維》提到運用「絕對優勢」和「比較優勢」都可以創造合作的效益。「絕對優勢」可以降低生產的會計成本，而「比較優勢」則是可以降低生產的機會成本。所謂的「絕對優勢」是指一個人在某一項工作技能的生產力強過他人，而「比較優勢」則是指一個人在某一項工作技能的生產力強過自己的其它生產力。 讓人們從事各自具有比較優勢的工作，然後再互相交易，可以提高彼此的福利。&#8230;&#8230;只要存在比較優勢，進行分工合作對於擴大生產就是有利可圖的。[1] 書中還舉了是否外包生產的決策、和不必事必躬親的例子來詮釋「比較優勢」的觀念。縱使在某一項技能具備「絕對優勢」，但為了降低機會成本來進行更有效益的工作，應該運用「比較優勢」來增進團隊合作效益。 依照以上的觀念來看，依照團隊成員所具有的優勢，來進行分工，然後再將其工作產出加以整合，就能夠擴大團隊合作的效益。當然，在團隊之中，絕對優勢是最容易被看到而加以利用，但考量機會成本的損失，團隊合作應該重視比較優勢更勝於絕對優勢。 就拿技術經理擔任教練角色的例子來說好了。一般來說，技術經理對技術的熟悉程度較高，技術的操作對他們來說，算是比一般人都還要在行的絕對優勢。不過如果因為這樣，就讓技術經理一直從事技術操作的活動，這樣就會減少其他工程師自己動手操作技術的時間，而降低了讓他們的技能透過磨鍊而提昇的機會。另一方面，也會讓技術經理無法脫離技術操作的工作，這樣就沒辦法藉由活動領域的擴展，來得到更高層次的技術或解決問題的全局觀點。 以團隊整體合作效能的角度來看，即使技術經理自己親自動手可以很快就把事情做好，但如此卻喪失了團隊合作的意義；讓能力強的人攬了太多的事在身上，其他人卻無法分擔他的負擔，也沒辦法得到技術資深者的教導與親自演練技術的機會，工作動機與士氣也就無從激勵。所以對於團隊合作而言，這其實並非是好主意。 為什麼技術經理要攬那麼多的事情在身上，而不去把它們交給其他人來完成呢？主要的原因通常是技術經理擔心團隊成員沒有足夠的基本能力，不能把事情做好反而會讓他浪費更多的時間來處理爛攤子。除非技術經理能夠培養團隊成員的能力，讓他們也能夠操作他會的技術，這樣他才有可能抽身去做更有效益的事情。但問題通常是在團隊成員的素質參差不齊，要培養操作技術所需要的基本能力是有困難的，畢竟羅馬不是一天造成的。 不過技術經理也許不用如此多慮，如果成員沒辦法運用一致性的能力來解決問題，其實正代表可用另一種角度，以成員的多樣性來創造團隊合作的效益。有時候，解決問題不一定只限於某種我們熟悉的技術或方法，甚至也不一定要用技術才能解決問題。說不定換一種角度，可以用一些我們不是那麼熟悉或奇特的技術、方法、甚至是觀點來看待問題，然後說不定可能發現有更令人驚喜方法可以解決問題；這類的方式通常更有創造力，可以用較少的代價來達成需要達成的目標。 一個可以充分讓成員發揮比較優勢的團隊，必然是會讓團隊存在各類特長的成員而呈現多樣性，而且能夠讓成員根據他們的專長來發揮特色。對整個團隊而言，存在各種不同的特色正是讓團隊充滿了如朝陽般的生氣，讓大家朝向共同目標而發展出自己的特長。 因此管理者在進行團隊分工除了思考成員具備什麼能力能夠勝任什麼工作的同時，更應該思考成員之間特質如何相互搭配特長。因為後者能夠發揮更多的比較優勢，它讓每個人都能夠追求較大的效益，在產生團隊績效的同時也讓成員一直獲得成長，其實它正是讓個人與團隊能夠共創雙贏的優勢。 附註 &#160;董自強（2010），《我不要當負翁！教你如何經濟思維》，p.106 &#8211; 107。]]></description>
			<content:encoded><![CDATA[<p>比起個人的單打獨鬥，團隊合作可以創造更高的效益，但該如何組織高效率的團隊，却往往是令人傷透腦筋的一件事。團隊在組織中是跨越部門的功能性與職位層級的工作小組，它組合了多樣性與一致性兩種特性。團隊多樣性是來自於組織當中不同的部門或功能群組事業單位，而一致性則是基於相同組織具有相同的企業文化及共同目標。</p>
<p>由於這兩項特性，在團隊中是彼此對立但卻又是相輔相成的，因而容易造成管理團隊合作的困難。團隊可以發揮成員能力多樣性的優勢，產生團隊綜效而創造更高的整體效益，但另一方面，團隊的多樣性太高，將會對一致性造成衝擊，使管理者面臨到管理的困難。</p>
<p>團隊多樣性有助於團隊績效，但多樣性很容易使成員之間因為意見分歧，進而產生情緒反應與相互的干擾行為而發生衝突。衝突通常對團隊績效是有損害的，這在團隊發展是需要注意的問題，因此團隊領導者通常需要想辦法增加團隊的一致性，以降低成員之間一旦發生衝突的麻煩。</p>
<p>同人之前在文章〈<a href="http://www.lifeparty.idv.tw/blog/archives/2563">技術經理的教練角色</a>〉，就曾經提到技術經理不應該為了增加一致性而犧牲多樣性。在那篇文章同人對通達人提出的觀點，表達我的看法。他認為在保有多樣性的同時，也必須注意—致性。因為一致性是合作的基礎，就像足球隊隊員們都須熟練基本技巧「控球」和「傳球」，才能在實際比賽中透過一系列交互傳球得分。</p>
<p>同人當時以「必要多樣性法則」來說明如果技術經理的管理彈性不足，他就只能對團隊成員處處設限，以減少團隊的多樣性來降低管理的困難。但如此一來也等於抑制成員的創意，常會使得問題的解決更加困難。因為團隊可以視做一個動態系統，這個系統的行為將會由系統最有彈性的部分來掌控。換句話說，如果技術經理的彈性不足，那麼團隊的多樣性將會造成他控制整個系統的困難度。</p>
<p>從「必要多樣性法則」可以理解，如果希望利用團隊創造出更高的效益，多樣性是不可或缺的，否則團隊合作所產生的效益必然會欠缺創造力。這樣的觀念就像自然界生物與社會發展的演進一樣，存在差異性才能促成個體致力於創新與改變，進而促成整體性的發展與成長。</p>
<p><a title="More about 我不要當負翁！教你如何經濟思維" href="http://www.anobii.com/books/我不要當負翁！教你如何經濟思維/9789861847375/01bb6db13826e6b0b5/"><img style="padding: 5px;" title="More about 我不要當負翁！教你如何經濟思維" src="http://image.anobii.com/anobi/image_book.php?type=4&amp;item_id=01bb6db13826e6b0b5&amp;time=1276431305" alt="More about 我不要當負翁！教你如何經濟思維" align="right" /></a>有趣的是，前一陣子同人在《<a href="http://www.books.com.tw/exep/prod/booksfile.php?item=0010470219">我不要當負翁！教你如何經濟思維</a>》這本書中也看到以經濟學的交易及合作的觀念來解釋團隊多樣性的必要性，也覺得非常有意思。</p>
<p>《我不要當負翁！教你如何經濟思維》提到運用「絕對優勢」和「比較優勢」都可以創造合作的效益。「絕對優勢」可以降低生產的會計成本，而「比較優勢」則是可以降低生產的機會成本。所謂的「絕對優勢」是指一個人在某一項工作技能的生產力強過他人，而「比較優勢」則是指一個人在某一項工作技能的生產力強過自己的其它生產力。</p>
<blockquote><p>讓人們從事各自具有比較優勢的工作，然後再互相交易，可以提高彼此的福利。&#8230;&#8230;只要存在比較優勢，進行分工合作對於擴大生產就是有利可圖的。<sup>[<a href="http://www.lifeparty.idv.tw/blog/archives/4409#footnote_0_4409" id="identifier_0_4409" class="footnote-link footnote-identifier-link" title="董自強（2010），《我不要當負翁！教你如何經濟思維》，p.106 &amp;#8211; 107。">1</a>]</sup></p></blockquote>
<p>書中還舉了是否外包生產的決策、和不必事必躬親的例子來詮釋「比較優勢」的觀念。縱使在某一項技能具備「絕對優勢」，但為了降低機會成本來進行更有效益的工作，應該運用「比較優勢」來增進團隊合作效益。</p>
<p>依照以上的觀念來看，依照團隊成員所具有的優勢，來進行分工，然後再將其工作產出加以整合，就能夠擴大團隊合作的效益。當然，在團隊之中，絕對優勢是最容易被看到而加以利用，但考量機會成本的損失，團隊合作應該重視比較優勢更勝於絕對優勢。</p>
<p>就拿技術經理擔任教練角色的例子來說好了。一般來說，技術經理對技術的熟悉程度較高，技術的操作對他們來說，算是比一般人都還要在行的絕對優勢。不過如果因為這樣，就讓技術經理一直從事技術操作的活動，這樣就會減少其他工程師自己動手操作技術的時間，而降低了讓他們的技能透過磨鍊而提昇的機會。另一方面，也會讓技術經理無法脫離技術操作的工作，這樣就沒辦法藉由活動領域的擴展，來得到更高層次的技術或解決問題的全局觀點。</p>
<p>以團隊整體合作效能的角度來看，即使技術經理自己親自動手可以很快就把事情做好，但如此卻喪失了團隊合作的意義；讓能力強的人攬了太多的事在身上，其他人卻無法分擔他的負擔，也沒辦法得到技術資深者的教導與親自演練技術的機會，工作動機與士氣也就無從激勵。所以對於團隊合作而言，這其實並非是好主意。</p>
<p>為什麼技術經理要攬那麼多的事情在身上，而不去把它們交給其他人來完成呢？主要的原因通常是技術經理擔心團隊成員沒有足夠的基本能力，不能把事情做好反而會讓他浪費更多的時間來處理爛攤子。除非技術經理能夠培養團隊成員的能力，讓他們也能夠操作他會的技術，這樣他才有可能抽身去做更有效益的事情。但問題通常是在團隊成員的素質參差不齊，要培養操作技術所需要的基本能力是有困難的，畢竟<a href="http://www.lifeparty.idv.tw/blog/archives/163">羅馬不是一天造成的</a>。</p>
<p>不過技術經理也許不用如此多慮，如果成員沒辦法運用一致性的能力來解決問題，其實正代表可用另一種角度，以成員的多樣性來創造團隊合作的效益。有時候，解決問題不一定只限於某種我們熟悉的技術或方法，甚至也不一定要用技術才能解決問題。說不定換一種角度，可以用一些我們不是那麼熟悉或奇特的技術、方法、甚至是觀點來看待問題，然後說不定可能發現有更令人驚喜方法可以解決問題；這類的方式通常更有創造力，可以用較少的代價來達成需要達成的目標。</p>
<p>一個可以充分讓成員發揮比較優勢的團隊，必然是會讓團隊存在各類特長的成員而呈現多樣性，而且能夠讓成員根據他們的專長來發揮特色。對整個團隊而言，存在各種不同的特色正是讓團隊充滿了如朝陽般的生氣，讓大家朝向共同目標而發展出自己的特長。</p>
<p>因此管理者在進行團隊分工除了思考成員具備什麼能力能夠勝任什麼工作的同時，更應該思考成員之間特質如何相互搭配特長。因為後者能夠發揮更多的比較優勢，它讓每個人都能夠追求較大的效益，在產生團隊績效的同時也讓成員一直獲得成長，其實它正是讓個人與團隊能夠共創雙贏的優勢。</p>
<br /><div class="googlePlusOneButton"><g:plusone href="http://www.lifeparty.idv.tw/blog/archives/4409"  size="standard"   ></g:plusone></div><br />附註
&nbsp;<hr/><ol class="footnotes"><li id="footnote_0_4409" class="footnote">董自強（2010），《我不要當負翁！教你如何經濟思維》，p.106 &#8211; 107。</li></ol>]]></content:encoded>
			<wfw:commentRss>http://www.lifeparty.idv.tw/blog/archives/4409/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>溝通不要玩猜心的遊戲</title>
		<link>http://www.lifeparty.idv.tw/blog/archives/4339</link>
		<comments>http://www.lifeparty.idv.tw/blog/archives/4339#comments</comments>
		<pubDate>Thu, 23 Sep 2010 08:41:58 +0000</pubDate>
		<dc:creator>jim yeh</dc:creator>
				<category><![CDATA[問題解決]]></category>
		<category><![CDATA[心理]]></category>
		<category><![CDATA[思考]]></category>
		<category><![CDATA[溝通]]></category>
		<category><![CDATA[生活感觸]]></category>
		<category><![CDATA[管理]]></category>
		<category><![CDATA[組織]]></category>
		<category><![CDATA[職場]]></category>
		<category><![CDATA[衝突]]></category>
		<category><![CDATA[閱讀]]></category>

		<guid isPermaLink="false">http://www.lifeparty.idv.tw/blog/?p=4339</guid>
		<description><![CDATA[東方人的含蓄溢於言表，為了維繫人際關係的和諧，通常並不習慣直接說出心裡面的想法，而是喜歡用迂迴轉進的言語模式來溝通，希望對方能夠揣摩自己的心意，了解在言語之外的弦外之音。 當然，如果從言語的暗示當中，聽話者可以聽懂說話者所要表達的意思，有時候可以化解一些尷尬的場面，然而如果聽話者聽不懂、甚至是誤解說話者想要表達的意思，那溝通就會非常的沒有效率。不幸地是，有莫非定律的加持，後者比前者發生的機率然還要大得多，而且容易讓人覺得被操控玩弄而感到的不自在。 溝通不應該玩猜心的遊戲，要別人猜中你的心思，這是很累人的一件事，換做是自己，可能也不見得會猜中對方的心思。有時候，當我們對別人的行為感到失望時，應該用直接的方式表達我們的在意，而不是期待對方想清楚，然後做到符合自己沒有說出來的期待。 如果我們沒有說出對他行為的期待，又要求對方能夠「具體」做到我們的期待，這其實是非常矛盾的，甚至於這只能說是自找麻煩而已；有時候自己都不知道自己在想什麼，又如何要求別人可以猜測出自己的心意呢？ 過去同人常常以隨和自居，命盤中命宮在天平座的我，最容易犯一個毛病，那就是通常並不會在事情剛開始，把自己對他人的期待直接清楚說出來，而是提供各種的可能性，要別人猜測我心中的想法。但後來我慢慢發現，以前我不把我心中的想法直接了當地說出來，怕對別人不好意思，其實這不叫替別人想，而是陷別人於不義。 因為當我不把問題說出來，別人不會知道我的介意，只會在別人違反我的原則時感到不舒服。但一開始沒說，在別人的行為在心中產生矛盾後，却更不知道該如何表達，直到最後忍耐不住發作而讓人感到莫明其妙。所以我現在都寧願把壞話說在前頭。這樣勝過別人看不懂的怒氣積壓在心中，而要比事後讓人搞不清楚為什麼要那麼大的反應還來得好。 我們對他人的行為的介意，很多時候讓我們感到失望的並不是行為本身的問題，而是行為所衍生的彼此信任與關係的問題。也就是說他人的行為讓我們發現對方是無法被信任的，因為相同的行為已經重覆好幾次，形成了一種模式，而這種模式讓我們無法信任對方，影響彼此之間的關係。因此，我們面對他人做出我們介意的行為，如果不去表達清楚真正讓我們介意的地方，就會讓對方覺得不能理解，為什麼我們要對一件小事產生那麼大的反應。 其實原因正是如同《關鍵對立》這本書所提到的，因為我們介意的是「模式」和「關係」的問題，而對方對認為我們對他的某種行為的「內容」在做文章，而我們也沒有針對需要解決的問題來進行「關鍵對立」。可想而知，這樣沒有弄清楚溝通的重點，當然會弄得溝通曖昧不明而沒有辦法進行有效的溝通。而最大的混淆，正是沒有直接說清楚自己真正的介意。溝通，真的不要玩猜心的遊戲呀！]]></description>
			<content:encoded><![CDATA[<p>東方人的含蓄溢於言表，為了維繫人際關係的和諧，通常並不習慣直接說出心裡面的想法，而是喜歡用迂迴轉進的言語模式來溝通，希望對方能夠揣摩自己的心意，了解在言語之外的弦外之音。</p>
<p>當然，如果從言語的暗示當中，聽話者可以聽懂說話者所要表達的意思，有時候可以化解一些尷尬的場面，然而如果聽話者聽不懂、甚至是誤解說話者想要表達的意思，那溝通就會非常的沒有效率。不幸地是，有<a href="http://zh.wikipedia.org/zh-tw/%E8%8E%AB%E9%9D%9E%E5%AE%9A%E5%BE%8B">莫非定律</a>的加持，後者比前者發生的機率然還要大得多，而且容易讓人覺得被操控玩弄而感到的不自在。</p>
<p>溝通不應該玩猜心的遊戲，要別人猜中你的心思，這是很累人的一件事，換做是自己，可能也不見得會猜中對方的心思。有時候，當我們對別人的行為感到失望時，應該用直接的方式表達我們的在意，而不是期待對方想清楚，然後做到符合自己沒有說出來的期待。</p>
<p>如果我們沒有說出對他行為的期待，又要求對方能夠「具體」做到我們的期待，這其實是非常矛盾的，甚至於這只能說是自找麻煩而已；有時候自己都不知道自己在想什麼，又如何要求別人可以猜測出自己的心意呢？</p>
<p>過去同人常常以隨和自居，命盤中命宮在天平座的我，最容易犯一個毛病，那就是通常並不會在事情剛開始，把自己對他人的期待直接清楚說出來，而是提供各種的可能性，要別人猜測我心中的想法。但後來我慢慢發現，以前我不把我心中的想法直接了當地說出來，怕對別人不好意思，其實這不叫替別人想，而是陷別人於不義。</p>
<p>因為當我不把問題說出來，別人不會知道我的介意，只會在別人違反我的原則時感到不舒服。但一開始沒說，在別人的行為在心中產生矛盾後，却更不知道該如何表達，直到最後忍耐不住發作而讓人感到莫明其妙。所以我現在都寧願把壞話說在前頭。這樣勝過別人看不懂的怒氣積壓在心中，而要比事後讓人搞不清楚為什麼要那麼大的反應還來得好。</p>
<p>我們對他人的行為的介意，很多時候讓我們感到失望的並不是行為本身的問題，而是行為所衍生的彼此信任與關係的問題。也就是說他人的行為讓我們發現對方是無法被信任的，因為相同的行為已經重覆好幾次，形成了一種模式，而這種模式讓我們無法信任對方，影響彼此之間的關係。因此，我們面對他人做出我們介意的行為，如果不去表達清楚真正讓我們介意的地方，就會讓對方覺得不能理解，為什麼我們要對一件小事產生那麼大的反應。</p>
<p><a title="More about 關鍵對立" href="http://www.anobii.com/books/關鍵對立/9789861571218/01e8645618b8497cb4/"><img style="padding: 5px;" title="More about 關鍵對立" src="http://image.anobii.com/anobi/image_book.php?type=4&amp;item_id=01e8645618b8497cb4&amp;time=0" alt="More about 關鍵對立" align="right" /></a>其實原因正是如同《<a title="More about 關鍵對立" href="http://www.anobii.com/books/關鍵對立/9789861571218/01e8645618b8497cb4/">關鍵對立</a>》這本書所提到的，因為我們介意的是「模式」和「關係」的問題，而對方對認為我們對他的某種行為的「內容」在做文章，而我們也沒有針對需要解決的問題來進行「<a href="http://www.lifeparty.idv.tw/blog/archives/146">關鍵對立</a>」。可想而知，這樣沒有弄清楚溝通的重點，當然會弄得溝通曖昧不明而沒有辦法進行有效的溝通。而最大的混淆，正是沒有直接說清楚自己真正的介意。溝通，真的不要玩猜心的遊戲呀！</p>
<br /><div class="googlePlusOneButton"><g:plusone href="http://www.lifeparty.idv.tw/blog/archives/4339"  size="standard"   ></g:plusone></div><br />]]></content:encoded>
			<wfw:commentRss>http://www.lifeparty.idv.tw/blog/archives/4339/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

