追求 C/P 值才是最沒有 C/P 值的一件事

Published on:

最近一年來最清楚的頓悟就是拋棄追求 C/P 值這件事。

雖然身為台灣人,這件事相當困難。(笑)

我觀察到並深刻體悟到的一件事是 "Everything comes with a price"。而這個 Price 其實是固定範圍的一個值。

但是追求 C/P 值會造成幾個後續效應

1. 不是不報,是時候未到

嘗試把多件事情捆綁在一起,試圖維持同一個 Price。做到的當下心情會很愉悅。但是報應通常會等在後面。(可能是 delay,可能是合作對象不爽,可能是對方有隱藏地雷)

2. 增加事務本身的複雜性

A 和 B 本身是不同的兩件事。綁在 a 的價格。其實綜合效應下的賬單可能會是 a + 3b。或 a + 30b。

3. 時間才是最大的成本

嘗試找尋 C/P 值最高的那一點,會因為「Price 其實是固定範圍的一個值」,所以最後的價格其實通常會差不多。但這當中會損失了大量時間。而且更可能因為時間的浪費帶來更大的後續成本。

4. 喪失心情的愉悅

達到高 C/P 值本身是一件很愉悅的事。但是後面發現 C/P 值其實沒有那麼高的時候,失落感反而會淹沒愉悅。

5. 喪失了把 P 做大的機會

追求 C/P 值的第一本能通常是 把 C 往下降。而不是把 P 往上昇。

  • 假設成本是 2 元, P 是 10 元。所以本益比是 5,賺 8 元。
  • 提升 C/P 值的往往是把成本降成 1,這樣本益比就會變成 10,可以變成賺 9 元。(但管理成本其實可能會變成 3, 最後變成 10-(1+3) = 6 )

但是忽略了其實可以玩 20 / 100 或者是 40 / 500 的可能性。

結論

所以最後結論是,需要什麼就去買什麼,不要想包裹什麼 package 上,也不要把重點放在 C/P 值上。

這樣是最可以達成目的、省時、且保持心情愉悅(因為達成目標)的方法。

2013 回顧

Published on:

我只能說:

非常感謝公司每一個同事,沒有你們努力,公司不可能成長到現在這樣子。

也感謝今年一路上幫忙過我的朋友。非常謝謝你們。

雖然我不太會說話,有時候也突然反應不過來,忘了當面說謝謝。但是我是真心的感謝你們。

Lean SaaS : Build SaaS From Small Ideas

Published on:

https://leanpub.com/lean-saas

Lean SaaS : Build SaaS From Small Ideas

這是我最新的一本書。書的內容是綜合我過去幾年開發以及營運中型網站, 以及在過去六個月內,實際運營一個 SaaS 網站所得到的寶貴經驗。

( 可以省下技術創業者非常多的冤枉路)

本書將會以連載的方式進行。以每週一篇的方式進行內容發行。

連載期間價格為 $30 USD。連載結束後的價格會是 $45 USD。

目前的(暫定)內容有:

  • MVP 的 M 最低尺度
  • 寄信,大量的寄信給你的用戶
  • 作產品應不應該寫測試
  • 如何決定要不要實現一個功能
  • 該聽用戶的還是聽自己的聲音
  • 如何拓展用戶
  • 何時找外包 (外部資源篇)
  • 產品定價策略
  • B2C 與 B2B
  • 產品的包裝
  • 行銷包裝自己的團隊
  • SaaS 產品 checklist
  • SaaS Podcast 及資源

其他

我在這期 TeaHour 與 @knwang 與 @yedingding 做了一期節目:SaaS 血淚史

http://teahour.fm/2013/11/18/lessons-learned-from-running-saas-products.html

如果你聽完對於 SaaS 的拓展擁有強烈的興趣。我將會在這本書內逐一深入各式的主題。

我對 Issue Tracking System 的需求

Published on:

剛剛又「重新」註冊了玎玎他們的 Pragmatic.ly。主要是想重新學習怎麼用,還有重新考察他們的動線。所以我又再次接到玎玎的 Greeting 信 XDD。

這次我有認真的回他了。經他同意把我的內容貼上來。

Greeting Mail

Hey xdite.

非常感谢你的再次注册,XD! 如果你有任何使用上的问题和建议,请随时联系我。我在这里提供任何帮助,谢谢!

目前我们也有不少台湾的用户。除了 Redmine,你还用过其他什么的吗?你对协作工具有哪些主要需求,我们能怎么更好的为你服务,谢谢!

致,
玎玎

Reply Mail

其實我用過 JIRA, REDMINE, ASANA, TRELLO, TRAC , BASECAMP 還有你們 XD....

會一直選擇留在 Redmine 是覺得。只有 Redmine 才...Scale。

為什麼說 Redmine 才 Scale 呢?我想這要從我的背景談起。我的生涯經歷是幹了幾年工程師之後開始管 project,接下來當主管,然後當 bussiness owner。

所以常發生在我身上的情況是我常常一次就是背不只一個 project。所以我對必須一目了然我現在在追誰的 project 有很強烈的需求,誰剛剛要求我辦事了也是很需要的。

這一點只有 Redmine 做得好。

我的做事方法也蠻 lean 的。我習慣把 project break 成 milestone, 大 ticket break 成小 ticket。redmine 有「project」的概念(trac 沒有)

加上 Redmine 的 ticket 可以 nested ( 這一個很少 issue tracking 有)

Redmine 的子母票,也相當清楚的看見子母票完成的比例。(這一點 basecamp 很差)

我們公司某些項目是嚴格計鐘點開發的。issue trcking 上只有 redmine 可以有預估以及紀錄。

再來是 ticket number。我們因為高度交叉開發,為了命名便捷,所以 feature branch 一律以 ticket number 作 name。這樣非常的便捷不需溝通。某些少數 issue tracking 才有明顯的 ticket number.....。

如果是 project 協作的如 asana 多半沒有 ticket number。我不喜歡 asana 是因為他讓我感到不安全感。要

做的事非常「散亂」沒有方向性。redmine 可以讓我們很有方向性的 get things done。當然,這就比較犧牲了 innovation。

不過 inoovation 的部份我們是在辦公室裡面用紙筆協作討論出來的。確定要作什麼方案了才開上去。

你們的聊天軟體不錯。剛剛在 issue 不小心聊了起來。我們還是用 hipchat。
不確定包在一起是件好事還壞事。我是很習慣了拆開....

總之。我想我的需求是

  1. 要能看到大家與我的任務關係。而且要一目了然
  2. 隨便跳進一個 project 就可以知道所有人的進度。我該從哪裡幫忙。
  3. 開發方向要高度組織性。散亂很容易完成不了一個 component。而這是我相當介意的地方。
  4. 方便我跟客戶算錢。(不過這個還好)
  5. 能夠整合開發流程。

大概是這樣。

為什麼 Rails 101 的新版拖這麼久...

Published on:

這篇文章主要是寫給有興趣知道為什麼 Rails 101 區區一兩百頁,但是為什麼更新拖這麼久的關係。

寫這本書的難度非常非常之高,所以最後一刻我決定這本書如果不漲價,實在是....

寫作工具

首先是寫作工具的問題,技術書籍寫作門檻非常的高。我在 [電子出版] Rails 101 的兩年來的一些數據 提過:為了寫這本書,我換了好幾個平台,重寫了好幾遍。最後才選定 Leanpub 作為最後一次發佈的平台。

新 Feature 的問題

Rails 101 第一次的發佈是在 2011 的 6 月。那時候 Rails 是 3.0。

坦白來說後面的更新帶給我很大的壓力,主要是 Rails 3.0 -> Rails 3.2 新增了很多主題,有一些主題很不穩定(如 asset pipeline, strong parameter),不知道如何以「簡單的方式」更新進去書裡面。

Rails 安裝環境 的問題

再來就是安裝環境,這其實是最討人厭的,MacOSX 上的架構從 10.6 -> 10.7 -> 10.8 -> 10.9,每一個世代的 command line 安裝方式都不一樣,而且竟然還從 gcc 改到 clang。而 10.6, 10.7, 10.8 是「並存」的作業系統。我完全對如何寫一個「不太會爆炸的 ruby 環境建構」沒什麼頭緒。

Yehuda Katz 當時要解決這個問題的野望 rails.app,到現在還沒 Official Release : http://www.kickstarter.com/projects/1397300529/railsapp/posts。而這兩年時間,Rails 從 3.0.0 衝到了 4.0.1,Ruby 從 1.8.7 改朝換代到 2.0.0。

同樣的問題也發生在 production deploy。從單一版本 ree 到 rvm 到 rbenv ...。很難為了系統環境變一次,書就改版一次。

Ruby 與 Rails 改朝換代的 dependency hell

對舊開發者沒太大影響

說實話,Ruby 與 Rails ,自從 Ruby 進了 1.9.2+ 之後,Ruby syntax 接近相當穩定。Rails 3.2 以後,Rails syntax 也很穩定。基本上如果單就「內容」來說,沒什麼要改的。所以如果已經是 Rails developer,根本沒什麼影響。

版本跳躍的連鎖反應

但問題就在於 Ruby 1.9.2 -> Ruby 2.0.0 與 Rails 3.2 -> Rails 4.0 的 jump 版所造成的 dependency hell。這本書是一本教學書,作者(應該)有責任讓這本書的程式碼能動。

Ruby 版本的跳躍,導致了很多 gem 改版,因為 require 的方式與位置不一樣了。加上 Rails 3 -> Rails 4 的 gem 架構不太一樣,gem 之間可能有 dependency 關係...

所以 Rails 101 v2 裡面首次發佈的 pdf 裡面 Gemfile 裡面幾乎都是 github 上的 trunk 版。讓特定版本在當時那個特定時間點會動...

熱門 Gem 偷改版

因為 Framekwork 改主板號 3->4 ,所以熱門 gem 也跟著流行改自己的主板號,同時偷偷「大改版」。如 simple_form 跳到 3.0。devise 也跳到 3.0。

這跳一個版號通常就是架構大變更。然後有一些 hack 就不能用了 -_-

Compass 與 Sprocekt 間無止盡的戰爭

compass 傳說中與 sprocket (asset pipeline 底層),兩個官方 team 素來有世仇。(只要你解過 asset pipeline 上的 issue, 追過幾串討論串, 你應該會聞得出來那種火花味, 雙方應該接近見面可能會打起來...)

但問題是:兩個都是超熱門套件。sprocket 佔了 Rails 內建的先天優勢,一直偷整 compass。但 compass-rails 幾乎也是一個 Rails developer 幾乎離不開的 gem。為了「與 Rails4相容」,從 Rails 4.0.0beta1, Rails 4.0.0rc1, Rails 4.0.0 official,compass-rails能夠動的版本,「完全不一樣」,甚至只存在討論串上的某個 fork 的某個 rev。

不過這不是 compass-rails 的錯,因為耐心追討論串你會發現從頭到尾都是 sprocket team 接近在整人。

Anyway 這問題不解,在 Rails project 不要說 deploy 了,連掛 compass 都有困難...

書裡面只要有 compass-rails,我就要保證它能動...-_-

Deploy Setting

sprocket 改了底層,於是在 deploy 時一些設定完全與 Rails 3 不同。從 Gemfile 擺放位置的順序到 production.rb 上的設定完全不一樣...

為了解決這些問題我花了好幾天時間在追討論串並且想辦法找 fix。

新觀念的引進與 Hack

Rails 3.0 -> Rails 4.0 間引進了一些新觀念以及新寫法,如

  • Asset Pipeline
  • Strong Parameter

這些都是其他 Framework 聞所未聞的設計,要在相當短的篇幅裡面寫出一篇 introduction,難度很高...
(還好以前寫過一些文章)

新觀念的引進與熱門 Gem 的糾葛

Strong Parameter 現在是預設的設計,但是會與 devise 衝突,解法是在 devise 的 issue 上翻到的...-_-

還要解釋為什麼要這樣繞過去...

舊的熱門 Feature 被改成詏手的 syntax

scope 從原先漂亮的 scope :recent, order("id DESC") 改成 scope :recent, -> { order("id DESC"}

link_to("Destroy", post_path(post), :method => :delete, :confirm => "Are you sure ?")

改成

link_to("Destroy", post_path(post), :method => :delete, :data => { :confirm => "Are you sure ?" } )

routing 的 secure 設計

以往 Rails 3

  match "/pages/welcome", :to => "pages#welcome"

改成

  get "/pages/welcome", :to => "pages#welcome"

這些變更有些可以穩定支援,跳 warning,有些 Rails 4 直接禁用 或行為不同。

Summary

而這些的 solution 都要去翻幾十個 issue 才知道發生什麼事,找出一個可以動的版本。然後在自己實驗的 project 上跑步驟確認這些 hack 真正能動,再整理成一本「不會爆炸」的指南。

嗯,我想我真的在做良心事業...-_-

全球應該沒人像我這麼神經病了。

Remote 讀後筆記

Published on:

剛看完 Remote。大致上有幾個心得。書 50% 以後才是重點。

(如果你需要被說服 Remote 是好的,前面可以看。如果你已經相信 Remote 應該是很好的。前面 50% 可以不用看)

Remote 其實是可行的,不過在幾個前提之下:

1. Remote 的 worker 必須是一個 100% 你會信任的員工。

如何 hire 一個你 100% 信任的人?很簡單,hire 非常厲害的人。後面所有的好事會自己發生

如果你無法相信一個員工,不如直接請他回家,才會是對大家最好的方式。不要認為 hire 一個能力不夠的人,還能玩 Remote,0% chance。

為什麼需要緊盯一個員工?說穿了...就是他能力不足,你不相信他。

2. 如何辨認誰是厲害的員工。還是老話一句,看他的 Copy Writing...

3. 找到疑似可以 hire 的員工,如何作最後決定把他捕獲進來?

先花點小錢外包,把一部分的工作外包給他。無業的人給 1 week。正在上班的人給 2week ...

從外包的部份你可以完全看到他的能力足不足夠。

4. 除了信任之外,公司應該內部要有自己的 remote rules 和 workflow

( 書中沒有明指,但是透露出 37signals 應該有很多這種東西...)

5. hire Ace in cheap way

不一定要 hire local 或者是覺得 remote 很貴。你可以去別的薪資比較低的地方去找 Ace player ....應該也是可行...

如何看似勇敢的 take risk

Published on:

前幾天跟一個在事業上掙扎許久的朋友(是一個 RD)吃飯,他希望我能夠對他的處境給一點建議。

我聽完他自己的故事,希望他不介意的話,我直接就跟他講在我的看法中,我認為的原因,如果他也同意的話,我再講解法。

他的問題是他對於他的人生過於小心,到了一些事業轉折點,看到了卻不敢 take risk 邁往人生的下一個篇章,間接的逼他到了現在自己一個相當不喜歡的局面。

他非常同意我的看法。也同意了如果想要為生活做出點不同,必須要適時的 take risk。於是他問了我在這方面有沒有什麼特殊技巧,因為我「看起來」是一個「勇於 take risk」的人,而且我的確似乎都在「正確的時間點」做了「正確的決定」。

我不太同意這幾句話(有空在其他文章再聊這些背後的代價...)。但是關於 take risk 方面,我的確是有一些自己的特殊想法。我想也可以在這邊分享出來...

其實我一直不算是個「勇於 take risk」的人。有一些決定我的確自己也要考慮很久。我之所以 take risk 的機率「看起來」比別人機率高一點,是因為一個契因。

我在十四五歲時,曾經看過侯文詠的一本書,書名我已經忘記了。但裡面一個小故事我記得很牢,這個故事是關於恐怖箱的故事。

綜藝整人節目中,常邀請藝人來玩恐怖箱。恐怖箱裡面的東西,其實通常也不怎麼恐怖,可能是一些無害的小動物。但是那些藝人就是會大聲的尖叫,看得觀眾很樂。

觀眾很樂的原因是他們知道謎底,所以覺得這到底有什麼好害怕的。而藝人在知道謎底之後,也會覺得自己剛剛幾十分鐘前,到底在怕什麼,叫成那樣很丟臉。

這個故事帶給人的啟發,在於人對於未知的事情是非常恐懼的,恐懼的程度甚至到了 panic 的程度。但是通常你知道謎底之後,卻幾乎能夠接受眼前的事實。如果給你一個已經沒有黑布的恐怖箱,給你摸,你會害怕嗎?當然不會。

這個故事當時讓我的印象非常非常的深刻。

換句話說,如果你把人生的一切都當成恐怖箱呢?如果你對未知的結果先進行了猜測,猜測了最爛的程度,問自己是否能接受。那麼事情會不會讓你好消受一些呢?你會不會因此可以相對的客觀做出你的判斷呢,而不是害怕的什麼事情都不作。

我想,這就是我為什麼「看起來」比人家「勇於 take risk」的關係吧。

當主管應該看的三本書...

Published on:
Tags: management

早上看到一篇文章在講管理。也說說我在這方面的想法好了...

如果你是主管或想當主管,我個人會推薦你看以下這三本書。這是我看了幾十本管理書後,我覺得寫的最棒的三本。

這三本,把管理的幾個大重點講的非常清楚。很多人對管理的印象一直停留在:「擁有很多控制權」「可以叫人去做事」「以後可以優先挑最喜歡的事情去作」「爛攤子終結者」。當管理者「很爽」,事實上剛好相反:....

事實上,管理者的責任應該是:

管理者的責任

  • 1. 讓整個團隊能夠表現最佳狀態

管理的「重點」從來不是在「權」或者是「當最後的 cleaner」,而是在於「讓整個團隊能夠表現最佳狀態」。管理者要做的事是要負責辨別「這件事在誰手上能發揮的最好」,然後負責提供你手上最好的支援,幫隊員剷除路上的荊棘,從而能隊員能發揮最好的表現....就像教練一樣。

  • 2. 樹立團隊風氣與 Policy...
  • 3. 協助團隊成長

即使你可以去收爛攤子,你也要避免自己下去收爛攤子。你要幫助大家成長而不是顧著自己成長。( 不過真的快 GG 了還是得預先看出來然後趕快下去收..)

  • 4. 保護整個團隊不受傷害

如果有人一直救不起來也無法成長,那麼就應該把他踢掉。即使你想救他,但他的存在會一直傷害其他成員,回到第一點,你應該去保護其他成員,而不是他...

  • 5. 管理的重點在於「團隊戰力」,而不是 Indiviual

=====

為什麼會特別講這三本,是因為幾十本書看下來,幾年管理經驗操下來,會發現管理學的最高境界就是「僕人式管理」,而「管理」的重點在於「團隊戰力」...

而這三本是把這個想法整理發揮最好的三本書。不過可惜托瑞那本現在絕版了...

然後「僕人式管理法」是很累的一條路...

Logdown 開發甘苦談....

Published on:

這篇沒什麼甘,就是苦而已 XDDD

趁要「正式」上線聊一下為什麼這次的 major 更新會隔這麼久...。剛好也有人在問 XD

其實這次的更新完全就是一個 dependency chain。在商務決策上:像 Logdown 這樣的產品如果要收費,最重要讓使用者付錢的一個關鍵 Feature就是:「Custom Theme」。

做 Custom Theme 不是開個 db 欄位存就好了,一旦開 Custom Theme 就馬上會面對的就是 security issue。因為使用者什麼碼都能插,所以在實作上就是要把 cookie 與 domain 拆開。

實作 SSO 架構

所以第一件事就是要實作一個登入 application 做 SSO 架構把登入跟主 Application切開。這沒有很簡單,實務上大概寫了 1-2 工作天,但找資料測試就花了一個多禮拜。

(這個工程是我做的)

真正 Custom Theme

第二件事就是真正的 Custom Theme,之前的 Theme 是深深焊在 Rails 的 View 裡面。所以我們要先 (1) 整理 code (2) 把整理完的 code 搬到 Template Language 上去跑。

這件事比較簡單,但也花了三天左右。因為我們能夠使用的選項:熱門 template language: Liquid,資料很少而且實戰 Example 很少( 沒太多人有這種需求)。

接著就是把 Template Language 拆成讓使用者可以自行 Customize 的架構。這也花了幾天。做好了以後又要測 security 架構( 因為 Liquid 用法都在網路上,一些 public api 讓使用者自己用會有 security issue),所以我們自己重寫了整個架構,只開放特定語法(like Tumblr)。這件事又搞了一個多禮拜。

(這個工程是同事做的)

實際套版測試 Theme

第三件事是找網路上的一些現成 Template 直接來套 API,來看我們設計的 API 合不合理。因為這些 API 是出去就不能再被更改的。要更謹慎。同時因為實際套版,也會知道我們少了哪一些語法沒有加上去。這件事又搞了三天。

然後做好了以後,我們又要做 Theme switch 後台的 UI 設計來側切換流程。這件事也搞了三天。

收費架構與財務架構

第四件事是寫收費架構

我們在財務上把 Logdown 與接案公司 Rocodev 整個切開。跑申請公司花了一點時間。申請相對應的銀行帳戶,然後再申請金流(決定先接 paypal )。光這件事也搞了兩三個禮拜...

這次後面接的是 Paypal 全新 API。雖然不是第一次寫付費 solution,但最後整套的 Logdown soluion 做完也花了我整整 15 個 hr ( 22:00 一直寫到 13:00)...

這四件事情有些是平行跑的,有些是順序先後關係。但總之用一句總結就是這些事並不簡單...

即便用最 Lean 的決策去做完這些工程,還是要花上這麼多時間。我相信其他團隊要做同樣事情會花更多時間...

在這個月中間,我們還是有很多其他正職的事情要做(因為我們是接案公司)。能在一個月內通通搞定,讓我真是太佩服太感謝一起搞 Logdown 的同事了,特別是主席和小強...。

不過這些都快弄完了。下禮拜二就是 Logdown的 Launch Party,我們會在這一天宣布收費 Plan 以及開放 Custom Theme Feature。

當初會辦在這一天是因為我們第一批的 Beta User 到期日是 8/26。所以我們決定要在 Beta end 的前後幾天上 Premium 正式收費。而 8/27 是我 30 歲生日。所以我也有一點小私心地把 Logdown Party 跟我的 30 歲生日 Party 合在一起了。希望 30 歲以後的人生會因為這個產品變得更不一樣...

Party 網址:http://registrano.com/events/logdown-party