分享 一个拖延症患者的精益 (Lean Startup) 实践

xmonkeycn · March 26, 2013 · Last by seeyoup replied at July 17, 2013 · 7298 hits

上周,我的第一个 Rails 网站上线了,关于跑步比赛的。提供上周六举行的杭州西湖跑山赛的实时成绩发布。功能很简单,但用户反应非常热烈,收获远远超出我的预期。有些东西想写下来分享给 ruby 社区的朋友们。

http://www.bisaikong.com

缘起

我是 2003 年非典的时候开始跑步了,从此一发而不可收,喜欢上了运动,喜欢上了跑步,从 04 年开始每年都跑马拉松/半程马拉松,08 年开始铁人三项,到今年已经跑了 10 年。家里积攒的奖牌已经放满了一个小储物箱,ikea 5L 的那种。(p.s.我高中长跑不及格,各位沙发土豆们不要说自己没天赋!)

大概是 08 年底上海马拉松的时候想起来可以做个比赛相关网站,大家上去查询交流比赛信息照片啥的。网站无关的东东有靠谱的人很快搞定了。网站这块自己啥也不会,当时网站相关的东西找了一个喜欢跑步的朋友一起做,技术很强,就是两个人都拖延了好久。墨迹到 10 年底说不想弄了,还是你自己弄吧。我 xxxxx!好吧,自己弄。

2010 年到 2011 年,工作转换和家里的事情有点多,这个就暂时放下了。

2011 年底,我觉得这个比赛网站这个事情再不做不行了,决定重新开始。一开始还是打算找外包,有相熟的同学是做外包的,谈了一下,觉得像我这样需求不明确的,外包很难接,最好还是自己搞。正好也看到 quora 上的这篇: Where is the best place to find a rockstar developer to bring an idea to life? http://qr.ae/TgiRg 嗯,还是自己做靠谱。那么开始学 Rails 呗。2012 年 2 月 23 日,注册 rubychina 社区。

Rails

大家都说 Rails 开发快,其实是个伪命题。对于熟手来说,Rails 的确很快。但是对于新手,Rails3 的学习曲线,上来很缓,按照教程上手很容易,但是一旦你有些非标准定制需求,找到应该怎么实现不是那么容易了-,- 不瞒您说,我第一次写 nested resource 花了两天才 debug 出来,form 的 post path 搞了好久才搞定。

Rails 学习资料

中文资料里面@xdite 大神的 blog 很赞,写的两本书我也都买过以示支持,可惜现在内容有点落后了。 英文资料推荐订阅 Railscast,一个月几美金不贵的。Codeschool 课程很精美,不过内容覆盖的比较窄,适合入门了解,一个月的订阅费也不贵。 为什么只推荐付费的东东,因为付费的东东的确好,而且你花钱了更有动力学!

一个人做的很慢,做了一些小功能之后还是不满意,前端也完全没搞。做的乱七八糟的东东始终没有上线。不过所幸尝试过了很多东西,不少东东略懂了。

Tealeaf

@knwang 在 rubychina 上开公开课的时候去听了一下,觉得还不错。他开中文班的时候就报名去上了,收获蛮大的。课程编排的很合理,live session 互动的效果很好。就是比较花时间,每周至少 16 个小时,10 个小时候真心不够用。推荐自学 rails 觉得有难度的同学可以去上上看。应该不后悔的:P http://ruby-china.org/topics/6717

课程结束收到提高班的邀请,虽然要 1k 多美刀,也毫不犹豫的报名了!目前还在上课中,总体非常满意。

First Protype

2012 年 11 月的杭州跑山赛,是朋友办的。本来想让我帮忙做一下芯片计时系统(专业的芯片计时太贵了,要 1w 多一次),我做芯片读取到 pc 这块。后来测试下来通用的 RFID 没法用在比赛上,这个方案就放弃了。不过做的过程我想到可以手机人工计时,就简单做了一个原型,手机记录下号码和时间,比赛后手工汇总到电脑上。跑山赛的时候进行了测试,能 work,数据导出来传给的组织者,网站也没上线。比赛完了,这些东西也就丢在一边了。

Lean Startup

去年底终于看了 Lean Startup,里面 MVP 的概念很赞。不过拖延症患者还是没怎么实践啊! @xiaolai 老师的 Knewone 上线第一天就看了,我的感觉就是:“这个评测好没有深度啊”,顺便回帖推荐了比 Jawbone up 检测睡眠准 N 倍的 Zeo,不过好像没有任何人注意到这个 Zeo。。。(p.s. 本月最新消息 Zeo 即将关闭服务,又是太细分的市场没法支持公司生存的例子。(我想做的是还要细分的市场-,-)) http://ruby-china.org/topics/8335

没想到后来 Knewone 后来会这么火啊,@xiaolai@lilu 的分享都有很多干货,触动很大。 http://ruby-china.org/topics/9120 http://ruby-china.org/topics/9585

Go live!

过年前的是杭州的另一朋友给我打电话,说他们 3/24 要办比赛,问我能不能再帮他们搞计时系统。想想最坏情况就是想去年一样做成离线的呗,就答应下了。后面也没继续做啥。直到看了@xiaolai 老师的分享…

比赛前一个周末要去现场测试了,想想还是把实时发布加上吧,因为这个功能对我来说很有用。 周六一天写好手机端上传和服务器端上传的 code,因为时间有限,登陆功能不做,就用个 token 来做授权验证。(Token 这个是 Kevin 课上刚刚学的,现学现卖) 晚上部署到 linode 的时候发现悲剧了,总是 pipleline 编不过,debug 了一会儿也没排除干净。 干脆就用 Kevin 上课用的那个程序的架子,把代码移植过来,部署到 heroku 上。折腾到快三点,搞定。睡觉。 早上爬起来去杭州跟跑山赛组织者现场测试,没问题,数据都能收到,写好志愿者培训文档,收工回家。 这个时候,前端啥也没写,就是几个 scafold 出来的页面,稍微改了一点点。

周二的时候,想想前端实在拿不出手,就临时找了做前端的跑友@bullockzhou ,请她帮忙做一下前端,只有 html 和 css 啦,其他任何复杂的不要,晚上画好 mockups 发过去。

周三开始改前端的东东,周四拿到第一版前端代码,整合,还不支持 flow。@bullockzhou 觉得手机端实在太差,在周四生日那天还加班帮忙改好支持流式布局,各种感谢。。。

周四晚上拿到新版的前端代码继续整合,基本上可以见人了,加上 Google Analytics,new relic。半夜发现性能有严重问题,sql 请求实在太多,又看了一边 railscast 上的 eager loading,并改写 view 的一些代码,分组成绩列表页面的时间从 2904.7ms 降到 25.9ms。不过比赛那天才发现 erb 忘了写“=”,啥都没显示!幸好对大部分人来说不重要。比赛当天晚上才修正过来。TDD 很重要啊-,- 等下一版就 TDD 重写一边了。

另外组委会还提了个需求,本来需要增加个 has_many through 的,不想动数据库,直接条件判断 hard code 搞定。还有一堆各种小问题,忙到 6 点多才搞定,多年没这么通宵了。

上午起来申请微信公众账号,设置自动回复查询成绩的 url。 微博发布第一条信息,宣布上线,并提供 url 和微信二维码。因为发的实在太晚了,比赛前一天被只被转 40 多次。(一共四百多参赛选手) http://weibo.com/3178513797/zoAPurN0Y

比赛当天还是碰到一些问题的,比如前面提到的全部成绩列表没内容,有一个打卡点的手机时区设置不对,导致这个点部分成绩差了 8 小时。但是不影响查询单个选手成绩,是否经过哪个打开点之类的信息。我也跑在山里,没空处理。

跑完回来,看看网站情况,看起来还不会挂掉,有问题等赛后结束处理吧。

微博上的反馈非常好,除了表扬就是表扬。比如这条: “很给力啊,我老婆在酒店悠闲的刷网页,实时跟踪我,刚到终点线她就打来电话祝贺” http://weibo.com/1692963072/zoO1PB0Vx

比赛结束的当天晚上,整理数据,fix bug。搞干净了以后分组成绩终于可以用了。

总结

@比赛控 微博两天一共被转发大概 70 次左右,从 0 开始到 78 个粉丝。微信公众账号两天涨了 70 多个用户,比微博还快,你懂得。这还是我只在微博和比赛网站上挂了微信二维码而已,没有在比赛前后做任何线下推广,当时怕搞砸了太丢人,还是太保守了。

网站最近四天 636 people visit, 1,170 visits, 7,708 views.对于 400 人的小比赛来说。我觉得覆盖率够高了。

需求是硬需求,要认真去做了,晚上跟@bullockzhou 谈,决定一起做下去了。 就酱紫。。。。

最后上线的网站情况:

没有用户系统,输入只支持比赛号码搜索,没有新建、没有编辑、没有删除,没有分页,不支持排序,一共四个页面就有一个没有内容,不支持 IE。

每个人都说,这个网站好棒!

嗯,MVP,m 可以很小很小很小的。有想法就赶紧上线验证吧!

感谢 ruby-china, 感谢 kevin 老师,感谢@xiaolai@lilu ,感谢@bullockzhou

最后 插播两个广告:

  1. Kevin @knwang 的 Tealeaf 课程非常好,没有 kevin,我不可能只花这么点时间就做出一个能用的网站并部署到 heroku 上线的。推荐自学 rails 觉得太慢或者碰到障碍的人都去上他的课。虽然他的课对于我们赚人民币的人来说有点小贵,但是,你自己时间更贵! https://www.gotealeaf.com

  2. 有没有爱跑步、爱马拉松、爱铁人三项的同学或者打算跑马拉松的 Ruby 爱好者愿意加入我们。我们先只是为跑友自己服务,先解决自己的硬需求,做有用的东西。 p.s. @bullockzhou 是设计出身的前端 mm 哦,自己会给 mbp 换 ssd 和内存,目前已经开始学 ruby 了。ruby-china 的众多男童鞋你们懂得!

我也喜欢跑步 :) 如何加入你们贡献点代码?

#1 楼 @keating 强烈欢迎啊:P

界面挺简洁的,后端还用了各种云服务,赞。 快拓展业务吧,搞个骑车,或者和学校合作直播运动会:bowtie:

@xmonkeycn 聊的结果就是需要学 ruby,一张白纸的人好焦虑......

支持!@xmonkeycn 太棒了,我也想贡献代码!

great!~好怀念和你一起写代码的日子哈哈=.= 没有时间继续学 kevin 老师的课程很遗憾~执行力比我强太多了~

:)有想法能实现,没啥比这个更幸福的了!

楼主在下一局很大的棋啊,搞好了,会很火的,强烈支持

原来你跑步这么厉害 我还想着要练练这个 到时候向你请教了啊

2013Asics杭州山地马拉松, 是 ASICS 组织的吗? http://www.asics.com.cn/trail-running-marathon/

#3 楼 @ywencn 前端全是@bullockzhou 同学的功劳 #4 楼 @camel 用又拍云也是没办法,一个是 assets pipleline 编不过,另外 heroku 国内访问实在太慢了。 #5 楼 @bullockzhou @knwang 老师。你的新学员已经来了! #7 楼 @flypiggys 其实我也没有执行力,全是逼出来的。 #8 楼 @xiaolai @knwang 非常感谢两位老师。海上明灯啊! #9 楼 @loxeyer 我也不知道这棋盘到底多大,走一步是一步吧。谢谢支持 #12 楼 @bullockzhou asics 赞助的,实际的主办方都是一群跑友。

LZ 厉害,我也很喜欢晚上去跑步,坚持了大半年

@bullockzhou 武大的妹子哦。

@xmonkeycn 有木有什么活动联系方式的。

好赞啊,同是拖延症的表示要回去思过了。

#13 楼 @xmonkeycn 新手想问一下 LZ 是怎么部署的,还有备案……?

很赞啊,加油啊!

做自己喜欢做的事,太棒了

大学坚持跑步跑了四年

#16 楼 @bpw11320 以后会有的 #17 楼 @richard020389 加油 #18 楼 @cqcn1991 heroku 不需要备案的,部署相对是最简单的,网站上文档很清楚,或者看 railsgirls http://guides.railsgirls.com/heroku/ https://devcenter.heroku.com/articles/rails3

#19 楼 @cris #20 楼 @rainchen 谢谢支持哦。

#21 楼 @uudui 还在跑不?欢迎入伙啊!

#22 楼 @xmonkeycn LZ 是部署在 heroku?可是我觉得这个网站速度不慢啊……(heroku 速度感觉好慢诶)

#23 楼 @cqcn1991 heroku 时快时慢的,比赛那天 new relic 的数据 Browser page load time 3.61 sec App server response time (ms) 246 ms 反正我是不太满意。

#24 楼 @xmonkeycn 是啊,所以我就想换个啥的……不知道能不能加你 QQ 之类的交流一下……等你弄好了我抄一下就好了哈哈

26 Floor has deleted

#25 楼 @cqcn1991 linode 的部署可以看这个,虽然稍微有点老了,但是可以用。 http://ruby-taiwan.org/wiki/deploy_to_production_practice

#26 楼 @ghprince 欢迎欢迎!给我们发 mail 吧。

@xmonkeycn 汗颜。这个今天才看到,强烈支持!

楼主的体会和我一样,我是自学,喜欢 ruby 的语法,不过刚开始学习 rails 的曲线是蛮大的,目前还在一边学习一边开发自己的网站中 ing,^_^

xmonkeycn in 运动起来,赢取 RubyConf China VIP 门票 mention this topic. 03 Apr 10:57
You need to Sign in before reply, if you don't have an account, please Sign up first.