智慧鎖產品開發感悟

陳其發表於2015-11-15

1 引言

很高興能夠終於邁出第一步,開始寫自己的部落格文章。多年前就曾經打算這樣一個計劃,每隔一小段時間更新一篇部落格文章,但是自己給自己找了種種還不寫的理由(專案太忙,我沒時間/我還有更多重要的事情要做/我要陪老婆/我要學習,現在還不是時候),然後一不小心,已經過了四年了,這就是拖延症的力量。

恰好,在準備深圳的離別之際,我覺得有必要真正是去實施這個計劃了,畢竟,我其實不是真的有拖延症或者懶惰之人(拖延症自己表示懷疑)。在此,我主要想談一下較為成功的專案,當然後背有很多陣亡的失敗的專案,不管成功還是失敗,我們的專案只是大千世界小小的一個,並不特殊,也不驚奇,甚至我寫出來可能都無人問津,沒關係,我就想靜靜的寫一寫。

2 回顧

2.1 新人畢業

2011年我大學畢業,畢業之前已經校招時順利進入一家公司實習半年,畢業後即可直接去上班。每個畢業生應該都會憧憬美好的工作,幻想自己在喜愛的公司上班,悠然自得。可惜現實往往太骨感,它會無情擊碎每一個人的稚氣和不成熟的想法以及見聞。公司並非想象的和他們自詡的那麼美好,工作並非百無聊賴,卻也是打下手之類的簡單重複性工作,並非有高深的理論需要學習,也不能把自己學習東西在實踐中應用,頓時感覺大失所望,漸生離職換公司想法。

後來畢業後,還是堅持自己的想法,辭職重新找了新的工作,畢竟不是什麼大難事,深圳那麼大,即便是水錶工,臨時工都有它存在的價值,胡八一說的好,我們都是社會主義的螺絲釘,哪裡需要我們就往哪裡擰。

寫了那麼多,我差點忘記一個最重要的點,那就是我的職業:我是一個程式猿。

2.2 改換工作

換工作還算進行的順利,每個剛畢業新人的第二份工作我想可能都會參雜一種東西,叫做不適應。不適應的表現和方面我就不細述了,你應該自己更懂,如果你經歷過的話。另外,其實我一開始計劃的是現找一份Android手機開發職業,並非我上一個工作的職業,這就是我為什麼要離職換工作,我現在依然慶幸我的抉擇是正確的。但是誤打誤撞,我卻成為一個嵌入式開發程式猿,這是我始料未及的。看來人生真的很多時候並非出於自己的掌控,我們要做的事情就是,把近在眼前的事做的足夠好,談什麼十年計劃二十年計劃,那都是吹牛逼,這是Linux創始人linus教我的,他自己就宣稱Linux核心就沒有什麼十年計劃五年計劃,那都是胡扯。

略過如同每一個兢兢業業、勤勤懇懇的工作的大眾人民中的一個我的工作內容(都是對於大多人來說非常無聊的事情,好在我樂在其中),一不小心就說到了重點。公司內部開發一個創新性智慧鎖專案(現在取名為核桃智慧鎖),我做嵌入式端Linux平臺應用開發和簡單的驅動開發,與另一個Android開發的同事協同進行,大約三個月後,原型開發完成,我又被分配做雲端計算方面的研究,從此工作中遠離了嵌入式。誰想後來,我又換了一次平臺,iOS移動開發,小平臺都不值一提。敢情上司真的把我當做了螺絲釘,哪裡需要把我釘哪裡。

2.3 產品開發

我之所有不承認自己是一個懶惰的人,那是因為我有一個自認為的好習慣,非常愛看書(大部分程式猿都有的好習慣,不學習就被淘汰)。對於初入社會懵懂的新人,迫切需要用時代的專業知識和經驗來武裝自己。有些人選擇廣交朋友,我選擇廣涉獵書籍,為什麼?因為並非每一個朋友都是摯友諍友,交到那麼一個豬隊友,有時候會害死你,我選擇有那麼一兩個好朋友足矣。廣交朋友還不是時候,但是社交是需要的,這是我忽略的,可惜當初沒有人來諄諄告誡自己,即便說了也沒有那個領悟吧。

在自己不斷學習的努力下,我也快速成長起來,同時,公司的產品專案也是一波多折,做一個創新性的專案比想象中的要難很多,我有幸從專案的一個想法到最後生產銷售營銷都參與,目前該專案雖然成為產品,但還在激烈的市場上掙扎和自我成熟,是否成功還是未知數。即便如此,有怎麼一個過程,也不枉多年深圳的打工和耕耘嘛,因此有必要記錄一下其中遇到的坑。

我們創新性專案是一個智慧鎖,屬於一個非常傳統的產品的升級(不敢說革新,怕被淹沒在口水中)。我們本來是一個科技公司,缺乏相應的銷售渠道和市場,因此選擇和一個傳統制鎖廠商合作,利用他們的渠道,我們的技術,一拍即合,然後未來大家有肉一起吃(這是我給老闆設計的對白,這是後來看清事實的我猜測的,畢竟我只是一個程式猿,戰略原因會告訴我嗎,並且有肉也沒有我的份)。可惜合作一開始就邁入了一個大坑,制鎖廠商就是想要一個WiFi鎖,至於為什麼他們也不知道,我們的各種勸說都是徒勞,反正就是要(看來我們公司處於被動狀態)。因此我們花了三個月時間做出了原型,只是為了驗證他們的想法錯誤的。至於為什麼是錯誤的,是因為技術上的一些原因限制,讓它作為一個消費者的產品使用者不會買賬。

可能有人會嘲笑說就是一個簡單的手機控制鎖的功能,一兩週就可以實現出來,沒有難度。我要說的是,做一個簡單的可以開鎖的玩具程式碼當然沒有難度,但是當做成一個半工業級別的產品,軟體和硬體要求穩定性、安全性、可靠性必須不能出現紕漏,這不是一個簡單的玩具能比擬的。比如現在的大疆的無人機買那麼貴,它的競爭者的無人機買幾百塊,幾十塊的都有,但是無人問津,為什麼?因為後者是玩具,誰敢生產環境中空中作業用。怎麼說你應該能夠理解它的難度。

即便是原型產品,走得非常不順利。軟體磕磕絆絆,算是完成了,雖然只是一個Demo,離產品性的軟體還有很大一段距離。可惜硬體設計上遇到了一個非常難以除錯和排查的錯誤,硬體電路板有時候無法啟動,花了一個月找不到原因,上司和我已經在討論了下一個新專案的想法了,因為要放棄這個專案了,我眼中盡是不捨和失望,感覺不再愛了。轉機出現在放棄該專案第二週,硬體團隊又說找到了原因並解決問題了,現在可以工作正常了。然後團隊又拉回到該專案來,後來我們分析原因,發現其實是和硬體團隊由於有地域關係,存在溝通不足,然後才導致的這個問題,多麼深刻的領悟。這樣的直接後果是那個單獨的硬體團隊被解散了,然後我們部門專門成立新的硬體團隊協同開發專案。最後,令人啼笑皆非的是,目前所有的這些努力,都是證明給專案合作伙伴,他們的想法是錯的,產品的想法和開發必須由我們來主導。

如您所料,家庭使用者不會買一個還要連線家庭交流電的鎖,開鎖過程繁瑣還不如掏出金屬鑰匙開鎖簡單的鎖。因此,切換到藍芽鎖開發就被提上日程。藍芽鎖具有幾個絕對選擇的競爭力,第一,低功耗省電意味著無需連線交流電,是喲高電池供電即可;第二,硬體成本降低很多;第三、軟體開發可控性增強且複雜度降低。另外還有一些技術必選性不一一列舉。後來我們回顧了這個過程,分析認為在這種合作模式下,這一步這樣走有它的必要性和好處:

  • 在合作模式中取得話語權和主動權,否則未來還是會犯錯踩坑來證明。
  • 驗證了一些產品的想法和可實現性,規避下次專案中遇到的重大錯誤和方向偏差。
  • 基本開發模式和軟體架構確定,安全方案模型初步建立。

步子總要往前邁,藍芽鎖的開發在我顫顫巍巍的技術面試下,招聘了幾個新人進來後持續進行,一個差不多十人的團隊,包括了軟體和硬體開發,軟體還包括了iOS和Android兩個移動端,就這樣又進行下去了。我不再做嵌入式開發,由招聘的新人進行,我轉作雲端的一些研究和專案。說得好聽的,我們的鎖網際網路鎖哦,是要連線因特網的哦,這是未來營銷說要準備的,我則嗤之以鼻,程式猿都這樣。過程持續進行,考驗人的意志力的時候到了,不斷往前走,跌入深坑淺坑後被迫都做一些選擇,其中我覺得最艱難的抉擇之一是,由於我們一個創新性的功能不能捨棄,平衡鎖端的功耗、iOS客戶端應用退到後臺永久可以開鎖和功耗,我們暫時砍掉了Android客戶端。這對Android客戶端成員極大的心理傷害,其中兩個陸續選擇離職。我們押寶未來Android版本會支援我們想要特性,但是目前它沒有,同時,我們營銷上已經開了一個經銷商產品釋出大會,對外宣稱已經有了Android版本。

我們在大會上演示的版本在大會完成後面臨重新推倒大部分成果然後重來的尷尬境地,同時,大會上也宣佈了產品釋出時間,留給我們時間只剩下兩個月左右。兩個月後要把嵌入式端、iOS端、雲端重構成產品級程式碼,硬體也要重新設計並完成小批量量產的準備工作,寥寥可數的幾個人背後揹負著巨大的心理壓力。連續兩個月的加班是必須的,週六週日也別想休息,並且,對不起加班沒有錢。本來工作有張有弛,這無可厚非,所以大家還是選擇咬牙堅持下來了,我負責的雲端以及嵌入式端都已完成,iOS也是潦草的完成了(為什麼潦草,因為上線之後一直出現很多大問題)。我繼續負責深化雲端,並且我招聘更多雲端人員和我協同工作,我作為技術負責人和管理者,向上司彙報工作。iOS剛釋出,出現了一個重大問題後,它修改了釋出,然後離職跳槽。留下完全半成品的爛攤子,新招聘的iOS開發者剛來,小心翼翼的都沒有修改程式碼釋出一個遺留版本又出了大問題,每次出的大問題都導致一個結果:使用者不能開鎖,沒有金屬鑰匙的情況下智慧砸門破門了,所有的損失由公司負責。因此他被罵一頓後直接走人。我就是在這種爛攤子下放下雲端,又轉到iOS端開發的。轉過去,遺留版本又出現幾個問題,還是導致了一個結果:使用者又不能開鎖,打電話給客服馬爹罵娘,公司全權負責,砸門換門換鎖道歉少不了的,幸虧是小批量生產釋出,造成損失不大。

我放棄了一年的雲端開發,雲端人手不足只能擱置,完全轉入iOS,首先就要收拾爛攤子,同時要招聘人員開發Android版本,因為我們之前的豪賭押寶正確了,Android新的版本支援了我們想要的特性。此種情況下,我日以繼夜的學習iOS的同時,還要做一部分移動端的人員管理。好在有點小基礎,轉過去後,釋出了幾個版本,解決了重大的問題且本身沒有出現什麼問題,心理石頭稍微落下,另外,Android客戶端也一同釋出了,後續又開發更多的新功能上線。同時,產品也在不斷進化和成熟,公司戰略上也在規劃了新一代鎖產品。天可憐見,付出了大家心血的產品,還是得到一部分投資人以及央視的青睞,中央電視臺也做了兩次專題採訪,似乎前路並不全是昏暗的天空。但是我個人未來發展等不了,是時候離開了。因此,到最後,我也選擇離開,雖然上級主管極力勸說,我也堅定了主意。

3 總結

畢業四年多了,走到現在感覺不易,之前也從來沒有總結過技術之外的東西,把有感而發的經歷和感悟寫下來,如果有不妥之處,請見諒。

  • 畢業新人不要太過強求工作實質,培養工作態度和方法更重要。
  • 在很多重大抉擇面前你比任何人都清楚方向,如果還是猶豫那種狀態,那就不要做出改變。
  • 不要做十年計劃二十年計劃,遙遠的未來是難以確定的,需要做的就是把近在咫尺的事做的足夠好。
  • 軟體開發過程頻換平臺對自己未來公司打工不利,當老闆(無論大小)隨意。
  • 廣交朋友大可不必,但是積極的社交非常有必要,不要做一個孤獨的屌絲程式猿。
  • 做創新性的專案就是不斷試錯踩坑,看運氣,某一個坑太大一下子踩進去出不來就死翹翹了,拯救方案是,提前做好安全措施,下一次摔進去了可以用繩子吊著爬起來,專案中就意味著,是要放棄重新開始的時候了。
  • 專案中難度最大的有時候並非技術的可實現性和難度,有時候改變一個人偏離的的態度和觀念更讓人抓狂。
  • 根據開發產品型別、團隊以及公司背景歷史,制定符合團隊的管理過程和流程,我們總體思想是:使用剛剛夠用的流程和工具,不束縛團隊成員的創新力,前提是這一套過程要持續關注和演變。
  • 花哨和複雜的技術不能作為程式猿炫技的解決方案,簡單、適合且穩定的方案才是能力的體現。
  • 專案前期不太適合精於架構的設計,因為需求變化太快,架構和設計模式著眼於未來的變化,未來完全無法預料,也就失去了意義。

相關文章