2004/12/06

The Art of Project Management

The Art of Project Management(中譯本《專案管理之美學》)是作者Scott Berkun根據多年的經驗,以平鋪直敘的方式敘述他的經驗。其中多數屬實務經驗,如lesson learned、以及依據實務經驗所發展出的專案管理的信念和理論。

Scott的工作經驗多數來自於IT界。Scott在Microsoft工作近十年,領導團隊開發軟體專案,如Internet Explorer瀏覽器、Windows作業系統、及MSN服務。Scott 也常受邀在各公開及學院發表演說、提供諮詢顧問服務,是實戰的人物。

要讓一件事情有條不紊地邁向成功,重點不在專業知識、技術、或理論,而是在project management。本書是這些寶貴經驗的知識總整理,內容包括領導團隊的技巧、引導團隊集思廣益的方法、組織專案、管理進度、應付政治、以讓專案平順等務實的技巧。

專案管理應是通識。大至蓋台北101、開發新款汽車、創業,小至規畫一個成功的home party,專案管理知識皆可派上用場。本書提供很大的價值,建議直接閱讀本書的英文版。

2004/11/06

Book Review: 微笑禿鷹

微笑禿鷹垃圾可以變黃金,麻雀有望成鳳凰,只要被專業創投相中,瀕臨關門大吉的公司,也可以轉化為成功的上市公司。

微笑禿鷹以故事方式敘述作者在創投界的經驗,以及與許多創投同業往來的過程。情節生動,高潮迭起,非常有趣。

2004/10/03

The Mythical Man-Month (人月神話)

by Frederick P. Brooks (Paperback)
Addison-Wesley Professional; 1st edition (August 2, 1995)

Editorial Reviews

Amazon.com
The classic book on the human elements of software engineering. Software tools and development environments may have changed in the 21 years since the first edition of this book, but the peculiarly nonlinear economies of scale in collaborative work and the nature of individuals and groups has not changed an epsilon. If you write code or depend upon those who do, get this book as soon as possible -- from Amazon.com Books, your library, or anyone else. You (and/or your colleagues) will be forever grateful. Very Highest Recommendation.

From Book News, Inc.
The 20th anniversary edition of this classic collection of essays on software engineering and managing complex projects includes revised material, and new chapters condensing the author's original propositions and his views 20 years later, plus a reprint of his 1986 paper "No Silver Bullet," and his recent comments on that essay. Brooks' central argument is that large programming projects suffer different management problems from small ones due to the division of labor, and that conceptual integrity of the product is critical. Annotation copyright Book News, Inc. Portland, Or.

軟體業永遠的神話

軟體工程堪稱變化最快速的行業,過去幾十年來,我們看盡各種軟體神話如驚濤駭浪襲捲而來,轉瞬間就被另一波浪濤殲滅無蹤影。在這樣的景況裡,若有什麼事物是可以歷久仍彌新,那就不僅僅是異數,而是神話,值得你駐足瞻仰了。

《人月神話》就是這樣一本書。原是佛瑞德‧布魯克斯為開發IBM史無前例的巨型軟體系統「OS/360」所寫的專案總結報告,1975年出版迄今,近30年來幾已成為程式設計工作者人手一冊的必讀經典。時至今日,大型複雜軟體的開發與應用,更加緊密地牽動各個層面,也益發彰顯此書的價值,特別是對所有工作環節涉及程式設計這一領域的人,如專案經理,甚至連IT產業的領導者如摩托羅拉對這本書也大力推崇。

簡而言之,《人月神話》談的是軟體開發專案管理的所有方方面面的問題。3個人4個月的工作絕不等於12個人1個月的工作(這也是本書書名的由來),那為什麼進度落後時大家還是直覺反應加人呢?

既然布魯克斯在1975年就已經討論了克服時間壓力和團隊合作之間矛盾的有效方法,為什麼今天產品開發中屢屢延期交付仍是常態呢?

既然布魯克斯早就提醒過我們要注意軟體發展中普遍存在和頻繁出現的目標捨棄、功能調整、預算緊縮等變數,為什麼在專案計畫階段大家還保持樂觀,蔑視一切潛在的風險呢?(文/桑加米卓)

2004/09/02

Developing Microsoft ASP.NET Server Controls and Components

by Patrick M. Lencioni "Not finance. Not strategy. Not technology. It is teamwork that remains the ultimate competitive advantage, both because it is so powerful and so rare..."

Editorial Reviews

Amazon.com
Once again using an astutely written fictional tale to unambiguously but painlessly deliver some hard truths about critical business procedures, Patrick Lencioni targets group behavior in the final entry of his trilogy of corporate fables. And like those preceding it, The Five Dysfunctions of a Team is an entertaining, quick read filled with useful information that will prove easy to digest and implement. This time, Lencioni weaves his lessons around the story of a troubled Silicon Valley firm and its unexpected choice for a new CEO: an old-school manager who had retired from a traditional manufacturing company two years earlier at age 55. Showing exactly how existing personnel failed to function as a unit, and precisely how the new boss worked to reestablish that essential conduct, the book's first part colorfully illustrates the ways that teamwork can elude even the most dedicated individuals--and be restored by an insightful leader. A second part offers details on Lencioni's "five dysfunctions" (absence of trust, fear of conflict, lack of commitment, avoidance of accountability, and inattention to results), along with a questionnaire for readers to use in evaluating their own teams and specifics to help them understand and overcome these common shortcomings. Like the author's previous books, The Five Temptations of a CEO and Obsessions of an Extraordinary Executive, this is highly recommended. --Howard Rothman

Product Description:
In The Five Dysfunctions of a Team Patrick Lencioni once again offers a leadership fable that is as enthralling and instructive as his first two best-selling books, The Five Temptations of a CEO and The Four Obsessions of an Extraordinary Executive. This time, he turns his keen intellect and storytelling power to the fascinating, complex world of teams.

Kathryn Petersen, Decision Tech's CEO, faces the ultimate leadership crisis: Uniting a team in such disarray that it threatens to bring down the entire company. Will she succeed? Will she be fired? Will the company fail? Lencioni's utterly gripping tale serves as a timeless reminder that leadership requires as much courage as it does insight.

Throughout the story, Lencioni reveals the five dysfunctions which go to the very heart of why teams even the best ones-often struggle. He outlines a powerful model and actionable steps that can be used to overcome these common hurdles and build a cohesive, effective team. Just as with his other books, Lencioni has written a compelling fable with a powerful yet deceptively simple message for all those who strive to be exceptional team leaders.

See all Editorial Reviews

2004/08/10

Accessing Custom Site Templates through the Sharepoint API

Using custom site templates in Sharepoint is a really powerful feature. You can customize your WSS site through frontpage or the web UI and save the site as a template. By default the template is stored in the top-level site template gallery of the site you customized.

This template can be exported as an ".stp" file and imported on other top-level websites. But you can also place the template in two other locations. The three locations for site templates are:
Top-Level (WSS) Site Template Gallery Sharepoint Portal Server Template Gallery Sharepoint Virtual Server TemplatesTo enter the template into the Portal gallery go to Portal > Site Settings > Manage security and additional settings > Manage site template gallery and upload your ".stp" file (read on to find out why this is useless).

To enter the template into the Virtual Server Templates open the commandline at the directory \Program Files\Common Files\Microsoft Shared\web server extensions\60\BIN and run stsadm -o addtemplate -filename \sitetemplate.stp -title sitetemplate

You can run stsadm -o enumtemplates to verify that your template was added, and you'll also notice that it's been given a name like "_GLOBAL_#1". If you've added a template to the Sharepoint Portal Server Template Gallery (#2 above) you'll notice that this template is not listed when using stsadm.

  • Team Site, STS#0
  • Blank Site, STS#1
  • Document Workspace, STS#2
  • Basic Meeting Workspace, MPS#0
  • Blank Meeting Workspace, MPS#1
  • Decision Meeting Workspace, MPS#2
  • Social Meeting Workspace, MPS#3
  • Multipage Meeting Workspace, MPS#4
  • Business Activity Services Team Site, BAS#0
  • SharePoint Portal Server Site, SPS#0
  • SharePoint Portal Server Personal Space, SPSPERS#0
  • SharePoint Portal Server My Site, SPSMSITE#0
  • Contents area Template, SPSTOC#0
  • Topic area template, SPSTOPIC#0
  • News area template, SPSNEWS#0
  • News Home area template, SPSNHOME#0
  • Site Directory area template, SPSSITES#0
  • SharePoint Portal Server BucketWeb Template, SPSBWEB#0
  • Community area template, SPSCOMMU#0
  • sitetemplate, _GLOBAL_#1 <- My custom template on the Virtual Server

When you look at the Sharepoint SDK for the SPSiteCollection.Add method there is a parameter for sitetemplate. In the example they've used "STS#0", which indicated that the method expects the Name property of the SPWebTemplate, and that it makes a selection from the templates on the virtual server. So if you want to create a site with the template you just deployed with stsadm, specify "_GLOBAL_#1". If you find it uncomfortable to use this generated name a simple mapping can be applied like this:

string template = "My Template Title";
SPGlobalAdmin globalAdmin = new SPGlobalAdmin();
SPWebTemplateCollection webTemplates
= globalAdmin.VirtualServers[0].GetWebTemplates(lcid);
foreach(SPWebTemplate t in webTemplates)
if (t.Title.CompareTo(template) == 0) template = t.Name;

So what do you specify if you want to apply one of the templates in the Sharepoint Portal Server Template Gallery? After all, it's more user friendly to expose templates here than through the command line interface (if you're not doing complex automated deployments that is). Well by looking in the Gallery UI in Site settings you'll notice that the Name property of the template you've uploaded is TemplateName.stp. Supplying this as a parameter to the SPSiteCollection.Add method will not work. The template won't be found.

The only way to get a hold of these templates are by accessing the SPSite of the portal (either by using context site or creating a new object). You'll find these templates by using the SPSite.GetCustomWebTemplates method. The problem is that SPSite has no way of applying a template other than in the constructor. That leaves you with manipulating the SPSite.RootWeb object after you've created the new SPSite.

But now you've got two different SPSite objects; the portal and the top-level site you just added. Because the templates are stored on the portal SPSite object they cannot be accessed on the top level website. This is because the method SPWeb.ApplyWebTemplate(SPWebTemplate obj) actually is just an overload that reads the SPWebTemplate name property as a string and passes it down to the SPSite object, which in turn looks up in it's own template gallery.

So the conclusion is that for top-level websites you have to deploy your templates using stsadm. Then what's the use of the Sharepoint Portal Server Template Gallery? Beats me. I haven't actually found any of the templates I've added to that list anywhere else than in the SPSite object of the portal root site.

2004/07/26

Build Automation System using Cruise Control .NET (CCNET)

In a Team development environment where parallel development and testing goes we find a requirement of getting most recent build to test as well as some specific build to give the QA to do testing on. This post describes what all are needed to set up an automated source code integration and build system for an environment where we use Visual Studio for development, source control (SVN in our case) for source depot, and doc/ tracking system (trac in our case).

Why do we need a continuous source code integration and build system? well, this helps the QA team by allowing then to not spend more time in syncing the source and doing a build everytimes or even working on a relatively older build.  This works as a perfect backup for your Source Control and also the deployment server. This also allows to align the builds numbers to be same as your assembly\file version and also to the source control label there by making a particular build to be a complete unit in itself in terms of readiness for deployment or using the same for development.

Now coming back to build server where we can use cruise control .NET for source integration along with a couple of batch scripts to control the build number and assembly version. CCNET pings the source control (SVN) after every 30 mins (this is a default value and can be changed) to see if there are any modifications. If there are then it triggers a build and publishes it on the Build Server. Once done sleeps again for 30 mins unless it is Forced for a build in between i.e. you can manually force a build in between sleeps.

The core components of build server are:

1) Cruise Control .NET (CCNET):
Its an open source build and integration engine which can be downloaded freely from http://confluence.public.thoughtworks.org/display/CCNET/DownloadOnce. Once the installation is done CCNET needs to be configured according to your requirements.  The config file can be found at “%SYSTEMDRIVE%\Program Files\CruiseControl.NET\Server\ccnet.config”.

2) Batch Scripts:
You might have some tasks to do before the automated build.  In our case, we want to shift the version in every new build. It can be done by altering AssemblyVersion attribute defined in AsseblyInfo.cs file(s). Also you might need to get all the green lights in NUnit testings before you build.  CCNET integrates with NUnit & NAnt nicely for executing test cases and more powerful automated scripts.

Fpr complete reference on the configuration blocks, check out the project home at http://ccnet.sourceforge.net/CCNET/.  If you like to do the same on Linux, you might wanna check out luntbuild

2004/07/11

創業者手中的地圖

每天都有人開始創業之路,每天也都有人走下創業舞台。抱著創業夢的人不計其數,為什麼有人美夢成真?有人卻是夢醒一場空?

倫敦商學院知名的管理教授薩爾 (Donald Sull),花了五年的時間研究創業個案,歸納出創業者如何在追求機會的同時,也能維持應有的紀律 (discipline),管理伴隨而來的不確定性。他在史隆管理評論(MIT Sloan Management Review)發表研究結果,提供剛起步的創業者,一步步遵循邁進的創業地圖。

第一步,擬出實用的假設。

創業者必須先定義機會,釐清所需資源、將創造的價值,以及執行計劃等。擬定假設時,必須保持彈性,公司在穩定之前,無可避免都要歷經各種變動。加州的一家創投公司在研究過三百家新公司後發現,失敗公司擁有的一個共同特點是,太早決定了經營模式。

擬定假設時,創業者也要確定自己有能力。篩選創業機會的第一個考量應該是,創業者自問自己的經驗或專業,是否能在這個機會上佔一席之地。創業者除了必須了解顧客、對手、技術、法規之外,還必須找出公司的致命傷及成功關鍵。創業者必須能回答:「現在公司的致命傷是什麼?」(例如財力雄厚的競爭者),也要能回答:「我們壓的寶是什麼?」(例如製造出更好用的捕鼠器。)

第二步,匯集資源。

創業者在進行測試之前,必須先獲得資源,包括有形的資金、設備,以及無形的智慧財產權、收集潛在顧客的資料等。究竟多少的資金才夠?創業者匯集的資源,必須足夠支持他進行第二次的測試。

而且,公司應該先確定經營模式,再僱用核心員工。加州創投公司的那份研究發現,大部份成功的新公司都是在進行過幾次測試,擁有穩定的模式之後,才僱用重要的主管,因為那時候公司才明確知道,主管需要具備的專業與經驗為何。另外,公司可以將與核心測試無關的功能外包,將有限的資源集中。

第三步,設計及執行測試。

常見的做法包括,顧客研究、製造樣品、進行小區域試賣等。測試時,公司可採用部份性的測試,針對某個特定問題收集有用的資訊,這個方法適用於公司已經知道,自己對那個議題不了解時。相對地,全面性的測試,則適用於讓公司發現未知的問題,公司以較小的規模,測試產品的各個面向,例如產品在全國上市前,先在某個地區進行試賣。另外,公司也可採用階段式的測試,例如,新餐廳逐步測試與調整菜單、定價、裝潢等。

無論採用何種測試方法,創業者都要避免測試可能帶來的負面效果,包括拖太久、花太多錢、目標不明確、負責測試的人將成功與否視為個人成敗,以致失去客觀性等。要避免這些情況,公司可以邀請外界專家參與設計測試及評估結果。

創業時如果能抓穩手中的地圖,美夢成真的機率,或許就能高一些。

2004/06/24

建置成功網站的關鍵因素

就像名片,網站已成為企業必備的配備。在您投入金錢與時間前,您了解如何建置成功的網站嗎? 如果你要建置一個成功的,能長時間保持運作的企業網站,請慎重考慮下列問題。
1. 為什麼要建置它?
明暸企業目標以及網站需求。從目標和需求著手,找出何種的資訊對你的客戶(網站瀏覽者)有幫助。了解你對網站設計及網站內容之願景及構想。經由此分析,你能更有效的規劃需求、預算,並製造出滿意的網站。

2. 你對成功網站的定義
建置一個網站,就像辦一本雜誌,從定位開始,到版型、內容、團隊必須顧到品質、預算、成敗控管,但不像雜誌印刷出版就沒事了,對網站而言,日後更新維護是更重要的,因此網站的規劃團隊一開始就要做出正確的網站定位、選擇最好的網站建置軟體、並籌畫建置的人才及日後維護的方式,甚至是要從使用者角度出發,了解使用者想要的資訊、點選的習慣、預期看到什麼頁面, 要有明確的設計讓使用者節省更多的精神、時間,網站瀏覽介面要友善化,後端維護要相對簡單化。
問主事者
[1]這個問題:若您第一次瀏覽新網站,您希望留下何種印象?
[1] 主事者通常為此專案的利益關係人及決策者,如企業主或行銷部門主管。

3. 建置的目的到底為何?
依據定義製作出需求,您將可清楚的分析出建置的目的。
例如,在製作行銷策略時,如果你知道客戶要的是什麼,那麼你就可以做更好的服務以滿足他們的需求。之於網站建置,如果你有預設瀏覽的族群,你就可定義網站的訴求目標、清楚勾勒出建置的目的及效應。這將導引您做出更好的決策,真正利用網站提供更佳的服務。

4. 成本考量
很多的客戶有對架設網站有不同的看法,以為將很多的資料放上去就好了,但經驗告訴我們簡單的網頁設計不止可以降低您的預算也可以讓網站的訪客快速找到他們想要的資料。

5. 是否一定以價錢的原因來選擇網頁設計公司?
網頁設計的產業是一個很速成的產業,充滿了很多不專業的公司,一個人一台電腦就能做網頁設計,他們的設計費通常很便宜,但並不能提供完整的服務。選擇一個真正專業且有經驗的網站建置團隊會比純粹比價重要的多。

6. 如何選擇一個好的團隊?
依據您定義出的需求,您可分析出網站建置團隊應具備的職能素養。

一般具有專業且有經驗的網站建置團隊,應須有下列表現:














比重標準
0-05 網頁設計公司自已網站的品質
0-30
0-20
0-10
他們作品網站的品質
你相信的人給的參考意見
作品網站跟你想要網站的相似程度(設計上、製作上或功能上
0-50
0-20
有能力提出策略與投入的方式
整體設計力、整體技術力
轉發包特殊工作(攝影、程式設計、配音等)能力
0-30
為現在或未來瀏覽器設計網站的能力
0-10吸引人潮入站的能力
0-30技術能力:例如,自已能不能寫perl或其它伺服器端的scripts
壓縮技術、Shockwave動畫、Flash等技術
0-30領導者在其它媒體是資深設計師
0-30對專案的整體熱忱
0-50希望跟他們共事的程度


精確的企劃,造就完美的網站

對大部份企業而言,網站不可能企劃幾個月、建置幾個月、再聘用專職人員維護。因此,前置作業的規劃,精確找出網站的訴求及範疇、謹慎的專案計畫、在每個階段做評估,皆為成功又符合預算的網站專案執行要點。

2004/01/13

Book Review: 老大老二老三

老大老二老三的圖像
本書是作者的二本舊作及一本新作修訂合集而成的。

This book is a must have. It describes the 3 mixed positions using history as example, very fun to read yet it packs with a bag full of political knowledge.

Mercury簡易改裝

有同好有一樣的困擾 - 如何使用自己的data logging軟體,因此寫了這篇來分享我的簡易改裝。 Background 雲豆子 MERCURY roaster 烘豆機的設計是使用自行開發的軟體,來:1. 操控風門/火力; 2. data logging/自動烘焙。 ...