Wednesday, December 25, 2013

[節錄] 創業家的老婆,比創業家的女友更苦:鋼鐵人 Elon Musk 前妻的心酸告白

做創業家的另一半,不容易。
《TO》上週一篇討論與創業家維繫親密關係的文章,讀者熱烈分享;不過,那篇文章只討論到「女朋友」,《MarieClaire》近日則刊登一篇題為 ” ‘I Was a Starter Wife’ : Inside America’s Messiest Divorce(我曾是創業家的太太:全美國最難解的離婚案內幕) ”,聚焦討論的是創業家的太太--受訪者是被譽為「真實版鋼鐵人」的 Elon Musk 的前妻(你也可以說是「前小辣椒」)。
創辦過 Paypal 、Tesla、Space X 的 Elon Musk,最近因為提出 Hyperloop 概念再度受到矚目。他的第一任妻子 Justine Musk 公開在媒體上分享她與 Elon 的婚姻關係,她自身經歷正好反應前文「創業家太痴迷他們的公司,以至於沒辦法再去關心別的東西」的說法。
Justine Musk 在這段婚姻關係中,始終無法習慣 Elon Musk 以老闆對員工的口吻和她溝通。對 Justine Musk 而言,擁有自我和維繫親密關係,對於創業家的親密愛人而言,似乎是難以兼得的矛盾狀態。她在《MarieClaire》的文章中回顧她與 Elon 的共同生活,以及如何在追求平等關係未果後,無奈的結束這段婚姻關係。以下摘譯她的專訪報導內容,以第一人稱撰述。
  • 與 Elon Musk 相識:他並不是我夢想中的男人
2008 年春天即將接近尾聲的時候,我與財富萬貫的 Elon Musk 提起了離婚訴訟。
他是一個事業很成功的男人,也是我 5 個年幼孩子的父親。提出離婚訴訟後的 6 個星期,他發訊息告訴我,他已經和一個 20 多歲,名叫 Talulah Riley 的英國女星訂婚,她曾演過 2005 版電影《傲慢與偏見》裡的其中一個姐妹。一直到這個時刻我才體會到,我跟這個男人的生活,早已跌入了一種陳腔濫調之中。
在認識他之前,我是一個頗有抱負的作家,我剛從一段艱難的感情中脫身,離開一位年紀比我大的初戀男友,一個人來到加拿大安大略省的 Queen’s 大學開始我的大學生活。我喜歡比我年紀大的男人,我熱愛詩意、反叛,我喜歡男人騎著摩托車,停在我宿舍的窗戶下,在暮光下呼喊我的名字。
Elon Musk 並不是我夢想中的男人。他比我大一個年級,出身於上流社會,外表乾淨俐落,講話時帶著一口南非腔的英語。一天下午,走回宿舍的樓梯上 時,Elon 向我搭訕。他說:「我們原本可以在一個派對上認識的,只是我看到你時,沒過去找妳搭訕(多年以後,他向我坦白說他在一個房間瞄上我,就決定要認識我)。」
他想請我去吃冰淇淋,我當下答應了,但後來因為某些因素,我只在宿舍門上貼了張便條紙,告訴 Elon 我不去了。幾小時後,當我正在學生中心埋頭 苦讀西班牙文時,我聽到了背後輕輕的咳嗽聲,回頭一看,Elon 笨拙地對著我笑,他手中的兩個巧克力脆片甜筒正往下滴 —— 他是那種沒辦法接受被拒絕的男人。
  • 他讓我做自己,雖然曾經分道揚鑣,但我還是期待回他身邊
他是一個十足的科技咖,擅長數字、商業和邏輯。我不是他唯一追求的女生,不過他轉到華頓商學院後,還是堅持送我玫瑰。有一次,我們一起去書店,我指 著書架說,「有一天我要自己的書也擺在這裡 。」在這之前,我曾向一個女生朋友提過這個想法,當時她放聲大笑,但 Elon 的態度卻是嚴肅的,他好像頗為觸動。
這也是第一次一個男生著迷於我的抱負,而不是長髮和小蠻腰。以前的男朋友都會抱怨我太好強,但只有 Elon 說我的靈魂中有一把烈焰 ,當他告訴我「我在妳身上,看到了自己的影子」 時,我能真切地體會他的意思。
畢業之後,我在日本教了一年的英語課程,那時 Elon 和我便分道揚鑣了。回到加拿大後,我邊當酒保,邊創作自己的小說,一邊也要考慮著回日本還是去讀研究所。有一天晚上,我對妹妹說:「要是 Elon 再打電話給我,我就會回去他身邊,感覺我在曾在那段感情中,遺失了什麼東西。」一周後,他真的打給我了。
研究所畢業後,Elon 搬到了矽谷。他和另外三個室友在 Mountain View 合租公寓,成立第一家網路公司 Zip2。我很常過去看他。有一晚,他問我:「妳想要幾個孩子?一個還是兩個?」,我回答得很快:「如果我請得起保姆,我想要四個」。
他哈哈大笑地說:「這就是我跟你不一樣的地方,我只『假設』我將來一定請得起保姆。」那時候,我覺得他是這世界上最甜蜜的男人。
  • 他在一個街角跪著向我求婚,然後我們簽訂了財務協議
過了兩年,2000 年初時、在我們婚禮前兩個月,Elon 告訴我他約了一位律師,幫助我們簽訂一份「財務協議」,這是他新公司的董事會提出的要求。當我問他這是什麼時,他 很快地回我:「這不是婚前協議。」如果說之前我只是和一個 20 多歲,事業還在掙扎的創業家約會,那麼此時此刻,我已經有錢的創業家訂婚了。
Elon Musk 出售了一個為新聞機構開發的線上內容軟體公司 Zip2,他之前與多家報紙合作,並幫助他們上線。1999 年時,一夜之間,Zip2 的價值已經超過了 2000 萬美金,他買了 1800 平方英寸的公寓後,我們終於有了屬於自己的家。另外,他還買了一輛百萬 McLaren F1 跑車,和一架小飛機。
日復一日,我們還是像往常一樣過日子,但我有時候會覺得 Elon 的財富是那麼抽象、不真實,這件事情本身似乎總存在一種無以名狀的虛無。我感到很不安,時常開玩笑說,他哪一天會為了某個超級名模拋棄我。
之後,他將新賺取財富中的大部分,投入了他的第二家公司 X.com,一家網上銀行機構,後來又發展成為 PayPal(網上支付公司);這就是當時要求他,必須要跟我簽署財務協議的公司董事會,而令我不解的是,Elon 當時一直想進入調解期間。現在我才知道,那意味著我所言所行,都將屬於保密,在法庭上是不被承認的,對我並不有利,但當時我並沒有時間去瞭解。
結婚兩個月後,我爽快地簽了一份婚後協定。我信賴我的丈夫,不然我幹嘛嫁給他?我告訴自己這沒什麼,我們是靈魂的伴侶,不可能離婚的。我無法想像沒有 Elon 的生活會是如何,這一點在他求婚前的幾個月,我就感受到了。
但是,我們的關係還是出現了一些「警訊」。
  • 經歷喪子之痛,優越、超現實的婚姻生活衝突不斷
在婚禮上,我和 Elon 在音樂中漫舞時,他對我說,「我是這段感情中的主宰者」,而當時我只是像之前簽婚前協定那樣,不以為然地聳聳肩,就像我簽署協議時,一樣地看淡些事情。
但隨著時間的推移,我慢慢發現他說那句話時是很認真的。他成長於南非那種以男性為主導的文化背景中,競爭和征服的意志幫助他在商業領域獲得了巨大的 成功。因此當他回到家後,我們雙方間極端的經濟能力,讓他也難以放下這種心智模式;這就導致了我們之間巨大的失衡,新婚不久的那種浪漫,便消失了 --Elon 總是以自己的判斷來震懾我,不斷地指責我的不完美。我一次又一次地對他說:「我不是你的員工,我是你的妻子啊!」。他也經常說,「如果你是我的員工,我一 定會把妳開除掉。」
2002 年,eBay 收購 PayPal 的時候,我們搬到了洛杉磯,並且有了我們的第一個孩子。出售 PayPal 後,Elon 的淨資產已躍過億。那個星期,我將孩子放入搖籃午睡,像往常那樣仰面朝上地睡著,但他突然停止了呼吸。那時他才 10 個星期大,是男性嬰兒最容易患上 SIDS(嬰兒猝死綜合征)的時期,當醫護人員趕到對他實施搶救時,他已經因長時缺氧而腦死。他死的時候,我把他緊緊地抱在懷中。
Elon 很明確地表示,並不想談論孩子的死。我很不理解他這一點,就像他不理解我,為什麼在大家面前還是依然表現悲傷,他認為我是在進行「情感操縱」,因此我便悄悄埋葬了我的悲慟。
Elon 和我想盡快再懷上孩子,在接下來的五年裡,我生了一對雙胞胎,然後又產下三胞胎。同時,為了轉移注意力,我寫了三本小說給 Penguin and Simon & Schuster 出版公司。即便這樣, 第一個孩子的死還是困擾了我整整一年,我情緒低落,精神也近乎恍惚,要不是保姆注意到了我的內心的掙扎,並給我一些精神上的支持,那種狀態恐怕要持續到今天。
結婚 7 年後,我們擁有五名管家、參加募捐晚會,並總是在好萊塢夜總會預定了最好的位置,那時 Paris Hilton 和 Leonardo DiCaprio 就在我們旁邊一起 Party。而 Larry Page 在加勒比私人小島舉行婚禮的時候,我們也參加了。在旅行的時候,我們坐 Elon 的私人飛機,空服員會遞給我們一支香檳。這正是夢想中的生活方式 —— 特權、超現實。
但是,這種旋風般的光耀,總無法偽裝我心底的空虛。Elon 總是埋首在工作中,回到家後,心思卻又在別處。但我渴望的是兩人之間深度的、真誠的交流,以此來激發共鳴和親密感。為了 Elon 的事業,我犧牲了正常的家庭生活,但那時他卻對我說,「你書讀得太多了」,且對我的作品進度毫不關心。
這感覺起來像一種蠻橫的漠視,與他以前對我的支持態度截然相反。為了房子和孩子睡覺時間安排之類的事情,我們發生了爭吵,我的錯誤總會被無限放大,也覺得自己在他眼中毫無價值感。所以開始思考,如果我們的關係變動,會不會影響到 5 個孩子。
  • 車禍驚醒夢中人:再也不能忍受「男人說話,女人只能在旁邊微笑」
2008 年春天,也就是我們結婚 8 年後,一場車禍把我從「夢」中驚醒。對方的車撞上我,整個金屬車身變了形,汽車因阻力停了下來的那刻,我的第一反應居然不是「謝天謝地,我們都沒受傷」,而是「天啊!我丈夫一定會殺了我的」。
我不正視自己內心的感受,儘管我不是一個細心到可以掌管許多事務的人,但我再也不能忍受「男人說話,女人只能在旁邊微笑」的那種無聊的感覺。我對肉毒桿菌和化妝一點興趣都沒有,但 Elon 總是希望把我塑造成「金髮女郎」的形象,而我總是不斷拒絕他。
車禍不久後的一天,我縮著腿坐在床上,胸貼著膝蓋,眼睛充滿著淚水。我語氣溫柔但十分堅定地告訴 Elon,「我們的生活必須改變。我不願只是富有丈夫生活中的附屬品,我要平等。我需要愛,也需要被愛,就像以前你還沒有賺到很多錢的時候那樣。」
Elon 同意和我一起去心理諮詢,但那時他經營兩家公司,面對巨大的壓力。三個療程過後(一個月),他向我發出了最後通牒:我們要不今天就解決婚姻問題,要不明天離婚;我明白他的意思。第二天早晨,他提起離婚訴訟,我腦中頓時一片麻木,但卻出奇地感覺到釋然。
簽訂婚後協定八年後,我才開始懂得自己之前所做的究竟意味著什麼。
作為一個處在婚姻關係中的人,我居然草率地放棄了自己所有的權利,包括對於夫妻公共財產的要求。當然,除了我們的房子,因為我們有了第一個小孩後, 房子就授予了我。但是,我的律師擺出了一條能證明婚後協議無效的理論,婚後協議不像婚前協定,要求財務完全公開,其依據是「婚姻授託義務」,即夫妻一方應 該在經濟事務上對另一方開誠佈公。
我們簽協議的那段時期,Elon 忙於 X.com 和 Confinity 兩家公司合併業務;這兩家公司成了後來的 PayPal,這使得 X.com 公司的估值,比他在婚後協議中的登記的金額,高出了百萬美元。
據我的律師透露,如果不是為了維護調解的保密性,他這樣做不管是蓄意的,還是只是因為眼光長遠,我都可以聲明這個合約具有欺詐性質,因而是無效的。
這個決定我們婚姻官司結果的問題,在加州的法律體系中曲折了兩年多後,法官做出了有利於 Elon 的判決,但強調這個案件的特殊性,馬上准許了我們上訴的請求。在一年多之後,事情才得以解決。
  • 第二任妻子 Talulah Riley:我也喜歡她,但她也成了金髮女郎
在我們分開後的幾個月後,我剪了頭髮、染黑了頭髮,也慢慢地跟一個幾年前曾經碰巧認識的男人,走向愛情。
有一天晚上,他帶我去看百老匯製作人兼作家 Eve Ensler 新推出的作品,當我們看到 《The Huffinton Post》創辦人 Arianna Huffington 坐在前排時,他說:「這裡是成功女性的中心嘛」,他接著指出了在席的其它傑出女性。這讓我想起了我曾經進入過的社交生活:富有男性身邊充斥著年輕的女人, 身邊的助理總是奉承他們,而他們的女人過了三十歲後,基於某種原因,就離開了。而此時此刻,我覺得我重新獲得了可以再次書寫人生的自由。
由於我和 Elon 疏遠了,所以每次涉及到孩子的事情,我就會和他的助理交涉。儘管我曾經氣 Elon 對待我的態度,像是可拋棄物,也氣我自己,為什麼當初不再認識他多一些,但我始終還是敬佩他那種聰穎睿智的人。
對於離婚,我不後悔。孩子們在健康成長,而我和 Elon 共同擁有監護權。現在的我,內心寧靜,對於生活,我常報以深深的感激。而且,一些意想不到的事情發生了:在離婚訴訟的過程中,我和她的未婚 妻 Talulah Riley 都覺得自己和對方很投緣,我認為她是一個很可愛、聰穎的年輕人,比我更適合前夫的生活方式和個性。
但儘管她原本的髮色是黑色,現在卻比我以前還要更「金髮女郎」了。


(資料來源:Marie Claire ; 圖片來源 :epSos.de, CC Liscensed)

http://techorange.com/2013/08/30/millionaire-starter-wife/ 

Tuesday, December 17, 2013

iOS7 > Lesson#19 - Add a Splash Screen into your application

Background

In this lesson, we will learn:

  • Introduction to Splash Screen
  • Add a Splash Screen into your application


<Introduction to Splash Screen>

Splash screen is the first screen you see when launching an application. Usually, splash screen is an image covering the entire screen and disappears after the main screen is loaded.

The primary purpose of splash screen is to let user know your app is loading and give user an introductory screen showing your brand. Splash screen is especially important for apps that take longer time to launch.  
Splash Screen sample
Different model of iPhone has different screen resolution
  • 320 x 480 (for iPhone 2G / 3G / 3GS) 
  • 640 x 960 (for iPhone 4 / 4S)
  • 640 x 1136 (for iPhone 5)


WebRep
currentVote
noRating
noWeight

Objective-C > Persistent Storage

  • According to Model-View-Controller (MVC) model, data is the controller [C].
  • If your app has data, and if that data is to presist between uses, your app will probably save the data to disk as a file or files.
  •  At a minimum, you'll probably save your data to disk when your app goes into the background, so that if your app is terminated in the background, you can load your data from disk when your app launches.
  • If your data is large, you might also release it when your app goes into the background, so as to use less memory in the background and reduce your chances of being terminated while suspended;
  • What is Sandbox?
  • Basic File Operations
    • To create folder MyFolder inside the Documents directory.
 <NSFileManager>
  • A file or directory is uniquely identified to NSFileManager using a pathname to the file. A pathname is an NSString object that can either be a relative or full pathname. A relative pathname is one that is relative to the current directory. The filename ch16/copy1.m is also a relative pathname, identifying the file copy1.m stored in the directory ch16, which is contained in the current directory.
  • Full pathnames, also known as absolute pathnames, begin with a leading /. Slash is actually a directory, called the root directory. On my Mac, the full pathname to my home directory is /Users/stevekochan. This pathname specifies three directories: / (the root directory), Users, and stevekochan.
  • We ask NSFileManager instance to create the folder if it doesn't exist already:
    • NSURL* myfolder = [docsulr URLByAppendingPathComponent:@"MyFolder"];
    • NSError* err = nil;
    • BOOL ok = [fm createDirectoryAtURL:myfolder
      • withIntermediateDirectories:YES attributes:nil error:nil];
    • // ... error-checking omitted

 <NSData / NSMutableData>
  •   When working with files, you frequently need to read data into a temporary storage area, often called a buffer.
  • When collecting data for subsequent output to a file, a storage area is also often used.
  • Foundation's NSData class provides an easy way to setup a buffer, read the contents of file into it, or write the contents of a buffer out to a file.


Exercises:

1:Modify the copy program developed in Program 16.6 so that it can accept more than one source file to be copied into a directory, like the standard Unix cp command. So, the command
90

$ copy copy1.m file1.m file2.m progs
        

should copy the three files copy1.m, file1.m, and file2.m into the directory progs. Be sure that when more than one source file is specified, the last argument is in fact an existing directory.
2:Write a command-line tool called myfind that takes two arguments. The first is a starting directory to begin the search, and the second is a filename to locate. So, the command line
90

         $ myfind /Users proposal.doc
         /Users/stevekochan/MyDocuments/proposals/proposal.doc
         $
        

begins searching the file system from /Users to locate the file proposal.doc. Print either a full path to the file if it's found (as shown) or an appropriate message if it's not.
3:Write your own version of the standard Unix tools basename and dirname.
4:Using NSProcessInfo, write a program to display all the information returned by each of its getter methods.
5:Given the NSPathUtilities.h function NSTemporaryDirectory and the NSProcessInfo method globallyUniqueString described in this chapter, add a category called TempFiles to NSString and in it define a method called temporaryFileName that returns a different, unique filename every time it is invoked.
6:Modify Program 16.7 so that the file is read and written kBufSize bytes at a time, where kBufSize is defined at the beginning of your program. Be sure to test the program on large files (that is, files larger than kBufSize bytes).
7:Open a file, read its contents 128 bytes at a time, and write it to the terminal. Use FileHandle's fileHandleWithStandardOutput method to obtain a handle for the terminal's output.
Sources: 
 http://my.safaribooksonline.com/book/programming/objective-c/0672325861/working-with-files/ch16lev1sec3#X2ludGVybmFsX0h0bWxWaWV3P3htbGlkPTAtNjcyLTMyNTg2LTElMkZjaDE2bGV2MXNlYzQmcXVlcnk9


http://www.techotopia.com/index.php/Working_with_Files_in_Objective-C


http://www.tutorialspoint.com/ios/ios_objective_c.htm

http://www.tutorialspoint.com/objective_c/objective_c_file_handling.htm

Monday, December 16, 2013

iOS7 > Lesson#18 - Static Table View Application

Background

In this lesson, we will learn:

  • Introduction to Static Table View
  • Create a static table view application



<Introduction to Static Table View>

Static cells can be defined a table view with fixed sets of cells, section header and section footer.

Like the Maps setting page for iPhone 5.0, there are three sections and each has its header:




<Create a static table view application>

Step#1 - Create a new project with Single View Application Template

Different from iOS7 > Lesson#13b - Single Table View Application, we use Single View Application to create a Static Table View Application.



Step#2 - Name the new project as StaticTable


Step#3 - Storyboard

By default, there has a View Controller object. But we no need to use it at this moment, so just delete it.

Drag a Table View Controller object as the initial one.

By default, Xcode sets the table view content with "dynamic content". We can change it to "Static Cells". Once changed, the table view will be included three empty static cells.

But we cannot view these three empty static cells under Xcode 5.0 clearly, they can be shown clearer when we change the Interface Builder (IB) to Xcode 4.6.

Select the Table View Section, we can change the row number, header and footer.

Drag a Label object with Font size "17.0", a Label object with Font size "10.0" and a Switch object for each table cell.

Step#4 - Compile & Run


Step#5 - Storyboard

Select the Table View and change the number of sections from 1 to 2.
Change the number of Section from 1 to 2
We can also change the state from "On" to "Off" as default state.

Step#6 - Compile & Run


iOS7 > Lesson#17 - Single Table View Application with plist

Background

In this lesson, we will learn:

  • Create a single table view application (with plist)
  • Pass data from Master scene to Detail scene


<Create a single table view application (with plist)>

Step#1 - Create a new project with Master-Detailed Application Template

Follow iOS7 > Lesson#13b - Single Table View Application but use .plist to store the array objects.














Step#2 - Editing TableViewMasterViewController.m

Edit the array object in method viewDidLoad with course.plist


TableViewMasterViewController.m (viewDidLoad)



Step#3 - Run & Compile

You can see the table view contents from plist.

Master scene


Detail scene



<Pass data from Master scene to Detail scene>

Step#1 - Edit plist

course.plist

course.plist

Step#2 - Edit TableViewMasterViewController.m

TableViewMasterViewController.m



Step#3 - Edit TableViewDetailViewController.h





Step#4 - Edit TableViewMasterViewController.m

TableViewDetailViewController.m

Step#5 - Run & Compile

Master Scene

Detail Scene



iOS7 > Lesson#16 - Single Table View Application

Background

In this lesson, we will learn:

  • Create a single table view application (with Master-Detailed Template)


Step#1 - Create a new project with Master-Detailed Application Template

To create a new Xcode project name "TableView" with a "Master-Detailed Application" template.


Master-Detail Application Template


Save project name as "TableView"
project file structure
default storyboard



Step#2 - Run & Compile


Master scene


Add a new record (row) by clicking the add button "+" in the right of navigation bar


Clicking the Edit button in the left of navigation bar  so that "-" icon will be shown in the left of each record (row)


Clicking the "Delete" button in the right of specific record (row) to confirm the deletion

Step#3 - Storyboard

Change the Master Title in storyboard


Step#4 - Edit xxxMasterViewController.h

TableViewMasterViewController.h


Step#5 - Edit xxxMasterViewController.m


1. To import #import "TableViewDetailViewController.h" in TableViewMasterViewController.m, so that all variable objects declared in Detail class can be viewed in Master class.



2. To declare a NSMutableArray object named "*_objects" in @interface of .m class.

* Notes:
The variable declaration in @interface of .m class is as same as that declared in .h class. The only difference between two ways is no need to code @synthesize in .m class when those variables declared in @interface of .m class and cannot be called by other ViewController classes.

3. To hardcode the array objects inside the method -(void)viewDidLoad of  TableViewMasterViewController.m class.



4. When the table is created, it will return the number of rows in sections from _objects.count.
TableViewMasterViewController.m (numberOfRowsInSection:)


Step#5 - Run & Compile again

Master Scene

Detail Scene

Wednesday, December 11, 2013

iOS7 > Lesson#15 - Table View

In this lesson, we will learn:

  • Introduction to Table View
  • Sections
  • Static VS Dynamic Tables
  • UITableView Class


Introduction to Tab View

Table Views present the user with data in a list format and are represented by the UITableView class of the UIKit framework.

When implementing a View Controller that will control a TableView, you can subclass the UITableViewController class instead of UIViewController.

The data is presented in rows, whereby the content of each row is implemented in the form of a UITableViewCell object


Sections

A table view presents data in a scrollable list of multiple rows that may be divided into sections.

A table view has only one column and allows vertical scrolling only. It consist of rows in sections. Each section can have a header and a footer that displays text or an image.

The UIKit framework identifies rows and sections through their index number: Sections are numbered 0 through n - 1 from the top of a table view to the bottom; rows are numbered 0 through n - 1 within a section.

By default, each table cell can display a text label (textLabel), a subtitle (detailedTextLabel) and an image (imageView).



Static VS Dynamic View

Static tables are useful in situations when a fixed number of rows need to be displayed in a table. 

Dynamic tables (also known as prototype-based tables), on the other hand, are intended for use when a variable number of rows need to be displayed from a data source. Within the storyboard editor, Xcode allows you to visually design a prototype table cell which will then be replicated in the dynamic table view at runtime in order to display data to the user.

Each table view in an application needs to have a delegate and a dataSource associated with it (with the exception of static tables which do not have a data source).

The dataSource implements the UITableViewDataSource protocol, which basically consists of a number of methods that define title information, how many rows of data are to be displayed, how the data is divided into different sections and, most importantly, supplies the table view with the cell objects to be displayed. 

The delegate implements the UITableViewDelegate protocol and provides additional control over the appearance and functionality of the table view including detecting when a user touches a specific row, defining custom row heights and indentations and also implementation of row deletion and editing functions.


Tuesday, December 10, 2013

[節錄] 把專案當做創業,談「1-MAN-STARTUPS」團隊架構

本文編譯自體育社群平台 Bluefields 的 CEO Andrew Crump 刊於 Medium 的文章「1-Man-Startups」,Bluefields 為針對體育團隊與聯盟組織設計的平台與管理工具,提供使用者更便捷的方式管理組織、相互溝聽並調整賽事,曾參與美國 500 Startups 與歐洲 Seedcamp 的育成計劃。
多數的新創團隊長期致力於找出最有效率的團隊運作模式,以期在最適當的時機產出高品質的產品,並在工作與生活間達到最適平衡。Bluefields 的 CEO Andrew Crump 同樣在團隊中嘗試過各種方法以達成上述目的,接下來將分享 Andrew Crump 認為截至目前為止,最能強而有力地對新創團隊造成影響的方法。
時間拉回今年 10 月,由於獲選為 Seedcamp 育成計劃的新創團隊之一,CEO Andrew 踏上育成計劃的美國之旅,正搭乘前往舊金山的班機與幾位朋友以及新創團隊碰面。旅程中,Andrew 在參訪 AngelList 辦公室時聽見來自 Ash Fontana 對於「1-Man-Starups」的團隊架構概念分享,以及他們如何專注於 Leverage 與 Velocity,意即找到對的支點發揮槓桿作用與提升整體效率。這對當時正計劃對團隊組織架構進行變動的 Andrew 來說如獲至寶,隨即將「1-Man-Starups」的團隊架構帶進團隊,並獲得相當顯著的成效。「1-Man-Starups」的定義如下:
1-Man-Starups」意即每位團隊成員都能把專案當作一個新創事業來對待。當團隊成員有了產品想法,他必須獨自進行設計、寫程式、行銷市場、支援顧客並回收來自企業內部與外部的意見回饋,最後進行新版本的開發。
Bluefields 採用「1-Man-Starups」的團隊架構之前,Andrew 認為他是團隊中唯一懷抱遠見、策略並懂得安排事情優先順序的人,「我想我有更好的知識與洞察力」他說道,於是整個團隊面對的挑戰就是確保整個團隊能準確執行 Andrew 提出的策略。
缺乏洞察的策略代表:許多微小的決定會經常被不適合的人決定。
上述的團隊架構存在的最大問題在於:無法有效管理時間,團隊必須時常校正策略執行方向以確保沒有偏離原定策略。事實上,由一人決定多數策略時,策略很有可能會缺乏更宏觀的洞察,而缺乏洞察的策略代表:許多微小的決定會常態性地被不適合的人決定,但錯誤的決定造成的後果卻會被管理階層的職權掩蓋。

過去 BLUEFIELDS 採用的團隊架構:

  • 花費兩個禮拜的時間為某個專案進行衝刺。
  • 團隊會向 CTO(Piers)與 CEO(Andrew) 回饋他們對產品的想法。
  • CTO 與 CEO 負責制定商業模式與產品策略--當時的 CEO Andrew 還同時負責 UX 設計。
  • CTO 認為產品技術規格比 UX 重要。
  • 產品一旦完成,要花費近兩個禮拜的時間重複向各開發部門展示。

過去團隊架構遇到的問題:

  • 每個專案衝刺的過程中都會因為一些無法預期的錯誤而進行修正。
  • 儘管無法預期的錯誤不斷出現在各個專案中,但由於產品開發部門只遵從CTO 與 CEO 的指示開發產品,故當產品方向錯誤出現問題時,產品開發部門很難了解問題根源,最後問題只能交回給 CTO 與 CEO 解決。
  • CTO 發現很難同時掌握產品開發與團隊規範。
  • 在專案執行過程中,團隊間傳遞溝通的想法比原先預期的少。
  • 儘管產品持續開發,但團隊整體運作不如預期的有效率。
  • 顧客開發、行銷與產品開發這三件事與整個團隊無法有效連結。
過去 Bluefields 採用的團隊架構屬於有管理階層主導的組織架構,新創團隊最需要的是能快速成長、即時作決策並在需要時改變策略方向,然而在有管理階層主導的組織架構中,上述新創團隊的特點往往要耗費許多時間,無法及時完成。

無管理階層的「1-MAN-STARUPS」團隊架構:

  • 團隊成員為共同的企業目標專注於專案執行。
  • 每個專案執行的不同階段都讓顧客開發、行銷業務與 UX 設計等各個部門共同參與。
  • 任何對於專案的想法都公開在專案管理工具 Trello,鼓勵團隊成員交流分享。
  • 沒有人是直接地為他人工作,成員間的工作自主負責。
  • 任何成員都有變動產品設計的權利。
  • 沒有 Deadlines
  • 沒有制式的會議

「1-MAN-STARUPS」團隊架構帶來的影響

  • 整體團隊更有創意
  • 問題更及時迅速地被專案團隊解決
  • 減少浪費在冗長會議的時間
  • 成員間的調度配置更加頻繁
  • 整體團隊更加了解產品商業模式
上述的「1-Man-Starups」團隊架構需要專案團隊與多工的團隊成員才能有效率地團隊運作,提出此一概念的 Ash Fontana 來自 AngelList,而 AngelList 的每位成員都有過創業經驗。要準確執行此團隊架構,每個專案都需要顧客開發、業務、策略、設計與前後端的技術配合。這影響了新創團隊的成員組成,有過創業經驗、懂得寫程式又了解市場分析的成員更有助於新創團隊加速成長。