智能锁产品开发感悟

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 总结

毕业四年多了,走到现在感觉不易,之前也从来没有总结过技术之外的东西,把有感而发的经历和感悟写下来,如果有不妥之处,请见谅。

  • 毕业新人不要太过强求工作实质,培养工作态度和方法更重要。
  • 在很多重大抉择面前你比任何人都清楚方向,如果还是犹豫那种状态,那就不要做出改变。
  • 不要做十年计划二十年计划,遥远的未来是难以确定的,需要做的就是把近在咫尺的事做的足够好。
  • 软件开发过程频换平台对自己未来公司打工不利,当老板(无论大小)随意。
  • 广交朋友大可不必,但是积极的社交非常有必要,不要做一个孤独的屌丝程序猿。
  • 做创新性的项目就是不断试错踩坑,看运气,某一个坑太大一下子踩进去出不来就死翘翘了,拯救方案是,提前做好安全措施,下一次摔进去了可以用绳子吊着爬起来,项目中就意味着,是要放弃重新开始的时候了。
  • 项目中难度最大的有时候并非技术的可实现性和难度,有时候改变一个人偏离的的态度和观念更让人抓狂。
  • 根据开发产品类型、团队以及公司背景历史,制定符合团队的管理过程和流程,我们总体思想是:使用刚刚够用的流程和工具,不束缚团队成员的创新力,前提是这一套过程要持续关注和演变。
  • 花哨和复杂的技术不能作为程序猿炫技的解决方案,简单、适合且稳定的方案才是能力的体现。
  • 项目前期不太适合精于架构的设计,因为需求变化太快,架构和设计模式着眼于未来的变化,未来完全无法预料,也就失去了意义。