大型公司开发软件的流程是怎样的?

大型公司开发软件的流程是怎样的?

一 背景

时间太久,不为本文中的任何一句话的真实性负责。

08年的时候刚刚加入搜狐,刚刚有工作经验7个月,很快就开始做白社会的项目。

可以说是一个几乎什么都不懂新人,特别感谢琳姐带我走入编程的世界。

那时候开心网的偷菜正火,Facebook如日中天,Twitter刚刚起步,新浪和搜狐刚刚在博客上打的热火朝天。

同组的师兄刚刚从搜狐奥运组撤出,刚刚经历过奥运高峰期的考验,特地分享了架构,可惜当时才疏学浅,大部分都只能听一个皮毛,当然现在也很菜。

方老大带着我们做SNS,Mark带着琳姐,吉子哥他们闭门会开了好久-据说是好久,反正多久我不知道,我是小兵兵一个,这些都是后来他们告诉我们的。

终于他们决定了,要做白社会。从他们决定做白社会开始,就决定了太多人一生命运的改变。

用我六年前的话来说,就是在白社会的时候,没觉得有什么,可是在现在看来,60人的团队有条不紊,如同军队般整齐,条理清楚的做一个项目,是多么难得的一件事情。

更不用说在当时的白社会里,对于各种技术的调研和应用如雨后春笋。

这就是我经历过的最大的项目了~跟众多大牛比起来,大概微不足道,但是对我这种小兵兵来讲,回忆起来已经是感慨万千。毕竟当年的白社会团队,60多个人,最菜的就是我,其他人几乎全部是各个一线公司的CTO,副总裁,核心架构师,CEO等等等等。

我记得很清楚,要做这个项目的时候,第一次参加项目动员会,也是到今天为止最让我受震动的一次动员会。

二 启动

熊杰那个时候是PM组的Leader(后来一个新浪的朋友说,她们在做微博的时候,那个时候其他行业都没有产品经理这个岗位,新浪就有了。听我有点目瞪狗呆,这么算起来搜狐有产品经理这个岗位比新浪至少多了两年吧?)

做的PPT很漂亮,怎么漂亮的我不知道,反正就是讲一个人,经受着各种各样的压力,然后早上七点起床,开始挤地铁,上午被老板骂,下午被客户骂,晚上十点又要挤地铁什么的。

然后说他们需要一个地方,让他们释放压力--虽然我到现在都没太明白,一个单纯的网站能够释放这么多压力么?

总之,一屋子大概三十,或者是四十个人,聚在一起。

嗯。在开心网偷菜,抢车位,真心话最红火的时候,搜狐入场了SNS的领域。

然后,Mark他们定了一个很清晰的框架,这个框架,在未来半年到一年内,几乎没有变过。

整个网站的功能,被分解成三个模块。FrameWork,App,Common,到现在我都在延用这种模块结构。Framework是白社会的主要框架,Home,User什么的都在这里。App是预留的网站的应用,如真心话,池塘边等。Common是公共服务,邮件啊IM啊通知啊神马的都在这里面。

跟着对下面的员工做了一个分组。

两人一个组,做一个小的功能模块。吉子和琳姐好像军中大将,总共差不多十几个组。每个组领命而去,两周或者是三周交工,嗯,这是后话。

当时的目标就是,三个月左右,将白社会核心的功能做出来。包括:

用户,好友,消息,通知,任务,推荐,Feed等等等等。

三 开发

在此之前,就有了一周一次的技术分享,提前做了很多的技术储备。白社会是一个全新的架构,所以琳姐他们也决定要做一个全新的技术体系。

首先,是在项目中正式使用maven。

我在之前的项目中,用到过一点点的Maven,琳姐给了我任务,让我给大家讲一下maven.第一次技术分享就奉献给了白社会的团队,还是有很多东西不太懂,可能也讲不清楚,但是收到了申总的鼓励,说我讲的知识点可能不够深,可是条理很清楚,能像我一样把东西讲清楚的人不多。

实际上,后来各个牛人在项目里用到的maven,都比我讲的东西深的多。

其次,是在项目中推行敏捷开发。

在此之前,两人一个组,需求评审,需求讲解,方案评审,Demo,发布。

用Jira做Story的分解,每天早上跟着胡哥三人小组去茶水间开晨会。

当时的敏捷开发还有很多不完善的地方,但是已经给我留下了很深的印象,除了敏捷开发,我想我大概以后不会采用任何的开发流程了。

特别是需求评审的时候,我记得很清楚,琳子和吉子他们会争的很厉害,为了一个功能要不要做,有没有必要做,经常会吵得非常非常凶。可是我很喜欢这种氛围,很喜欢他们思考问题的方式。

印象最深的一句话就是:琳姐说,为什么要花费80%的工作量去满足了1%的用户的需求?池明想了想,说:可是用户会因为这1%的需求得不到满足而离开。

这个问题我到现在都在思考,虽然我现在思考的角度有了很大的不同,但是仍然会遇到同样的问题。

嗯。特别是在做方案评审的时候,我在一周之内,为了拿出一个为用户推荐二度好友的功能,做出了7种方案。

读研的时候我们的老师就说,我们那个年龄,22岁~28岁,是最容易出成果的年龄,现在想想也确实是,如果再次能回到那个年龄段该有多好,如果你在看这篇贴子,如果你处在这个年龄段,好好珍惜吧~

方案评审比较随意,不太在乎格式,只在乎能否把事情讲清楚,把要做的事情列清楚。我的第一次方案评审,也是交给了搜狐。

这是一件很开心的事情,那么多技术大牛告诉你方案中哪里做的不合理,告诉你需要怎么做,怎么解决高并发的问题,怎么去做算数据量,怎么去估算占用的内存大小,怎么去利用缓存,怎么去防止数据不同步。

Demo也是一件很开心的事情。整个搜狐的团队,没有测试。是的,搜狐60多人的研发团队,没有一个是测试。所有的程序员,自己就是测试。我们能确保,每一组工程师,做出来的程序,在Demo之后,几乎是零Bug的。

第三 是在项目中用了DAL

这是一个通用的,封装了缓存的DB访问框架。无数次我们都讨论过开源事情,只是一拖再拖~到现在,嗯。

申总和康总负责这个框架的研发,是的,你没看错,在我们做项目的同时,他们只比我们早启动了不到两个月。

然后DAL支撑了绝大多数情况下的并发压力,而且用起来很方便,很简单。

也直接影响了我对于DB使用的喜好,从此以后再也无法接受联表查询。

第四 是在项目用到了Tuscany

Tuscany是我至今仍然非常喜爱的框架,非常非常喜欢。Tuscany的设计哲学很经典,很开阔,又很简洁。看完Tuscany之后,再看Dubbo,有点无法忍受这种山寨版的Tuscany,虽然Dubbo有他自己的优点,也是国内很多公司正在使用的东西,但是几乎 没有什么思想,或者说我已经掉进Tuscany的坑里面根本不想出来了。

可惜Tuscany更新到2.0就不再更新了。

不仅仅是Tuscany的使用,Tuscany本身并不支持负载均衡。胡总神一样的花了两周时间,重新写了一个Scallop的框架,用于做负载均衡。

嗯。当时还没有Zookeeper,即便现在有了,我也更喜欢Scallop这种简单直接明了的方案。

第五 是在项目中用到了JMS

ActiveMQ确实有很多坑,我们遇到过不少的情况,折腾了好久才把他搞定。

用ActiveMQ来做解耦,也确实是让代码简洁了很多。比如说用户注册,要算积分,要算推荐,要加好友,要初始化任务,要做很多很多事情。这些东西,用JMS来解耦是最合适的。

而且还封装了Tuscany和JMS组件,这是我一直很佩服的地方,这些开源框架,在这些大牛手里就是一个个可以任意组装的玩具,三两下就明白别人怎么做的,然后自己要怎么改进。

第六 是在项目中用到了Comet&Erlang

最早听到Erlang的消息机制,进程的概念的时候还不太了解,直到后来被迫自己也要这么做的时候,才重新温习了一下Erlang的东西。

Erlang的语法也是真心醉了,如果不是看过一点Drools,还真的。。学不会。

白社会用Erlang来做五子棋,那时候对Comet也是一知半解,直到后来自己用Comet来做在线多人扫雷的时候,才深刻体会到重新打开Http连接是一件多么废时间的操作,才真正转向到WebSocket-可惜,白社会那时候没有WebSocket。

第七 是在项目开发了自己的标记语言

马丹是叫SML还是叫什么来着,我不记得了。仿照Fackebook的做法,解决第三方App怎么和我们的FrameWork交互。看到他们当时去推测和分析Facebook的技术原理的时候,福尔摩斯都不过如此。

很快,一个小的示例程序就做出来了~

第八 是在项目中使用了Groovy

Groovy用在了任务上,用户接受任务,完成,领取奖励,这些东西是通用的,但是每个任务的完成机制不一样,所以我们需要一个轻巧的,简单的动态语言来解决这个问题。

嗯。后来我在我们自己的项目中,把Groovy用到了后台统计各种复杂的计算公式算法中,可以在线编辑。

这是我记得,或者是我知道的,在当时三个月里,几乎全部出来的新技术和新框架。

而这一切,丝毫没有影响整个项目的开发进度,这么多人做出来的程序,几乎是没有Bug的。

嗯。我一直不知道该怎么描述。

四 内测

要上线之前,苏菲设计了一版粉红的UI,还有一个冬天雪人的UI。我更喜欢那个雪人的设计。

他们还加了小彩蛋,关灯,老板键。

先是开始内测,内测的时候,很快就发现了Feed里到处都是加好友的信息。然而,以我的感觉来看,搜狐内部其他部门对于这个产品,几乎是带着嘲讽的角度去看的。

并不会如我想像的一样,大家都是搜狐的员工,出了一个新的产品都会去开开心心的用,然后开开心心的提问题,大多数都会说:这什么鬼东西,怎么设计的这么烂?

因为都是同行的原因?我猜不透~也不想知道。

不过,白社会大部分的时候口碑都很好,UI的设计,交互的体验,简洁的功能,都是我做过的系统中最舒服的一个。

内测开始后,安全性,用户体验有了一波新的改进。跟着就进了公测了~

五 公测

公测之后,对于绝大多数的人,白社会的口碑都很好。特别是生活在别处,特别是小白这种亲切的称呼。

后续又出来了白社会小报,池塘边,梦幻城,绿光森林等几款很有特色的产品或者是游戏。

只是当时大家所谈的都是一件事情,想要复制开心网偷菜应用的成功,所有的人都认为,白社会只是缺少一个杀手级应用。

他们说,当时新浪在做新浪朋友。然后搜狐抢先上线了白社会,当白社会出来之后,新浪朋友的团队直接解散,放弃了新浪朋友,转做微博。

嗯。我不知道具体是怎么样的,白社会的产品研发团队都很赞,可是在运营上,在大的方向上或者还是差了一截。

只有北京的公交车似乎有过白社会的痕迹,搜狐主页上曾给白社会留过一个很值钱的广告位。

天天向上那时候也只是张朝阳大人一个人去了,似乎并未能展示白社会的团队。

六 最后闲谈一下发布流程

当时,白社会也是没有运维的,运维是胡总和洪涛两个大神负责。每周二,每周五,半夜十二点,每一个项目的工程师,都在自己的电脑面前,完全不需要聚在一起,完全不需要在一起加班,只需要在自己的家里,电脑面前,等着胡总说一句:发布了~检查一下有没有发布成功。然后开开心心的等着晚上第一个使用的用户,检查有没有问题。

嗯。每次发布,白社会就会写上一句:白社会正在进行日常卫生打扫.

现在发布一次程序,跟打仗一样。

现在安排60个人去做一个项目,在三个月之内做出这么多东西,又能几乎没有任何损耗的去有序开发,好难。

白社会战友群,写的是那些年,你上过的白社会。群里大概80多个人,有很多是在我离职之后才加入的,现在都混的很好很好。

最后,贴几张截图。

马丹,上传不了图片。