一个实习程序员的笔记


  Posted on 20 Feb 2017

在2015年的暑期,我开始了人生中的第一次实习。实习的这家公司叫葫芦(Hulu),是一家美国的网络视频公司,位于美国加州圣莫妮卡,在洛杉矶市附近。它的特点是公司规模不大,且拥有一切美国科技公司的先进管理模式和自由的企业文化。下面我就来简单的分享一些实习期间的见闻与思考,希望能让读者一窥美国科技公司的概况。同时对自己所学到知识的总结。

###软件工程

最重要的放在最前面。先来讲讲,软件工程的管理模式。一言以蔽之,敏捷开发(Agile),我在课本上见过无数次的概念,这次终于得以亲身实践。它所使用的敏捷开发模式及其接近SAFe 4.0。从时间上来看,最大的管理周期是以PI(Program Increment)为单位的。通常一个PI的周期是三个月。而一个PI会继续划分为12个sprint,每个sprint持续两周。如果有剩余的星期则作为该PI的补充时间,用来完成之前的sprint中未完成的任务。一个sprint即为一个10人左右小团队管理和汇总的小周期。每个人在每个sprint中会被分配若干个任务,任务以ticket的形式呈现。每个ticket有对应的story points。一个story points对应了一个人在一个工作日所能完成的任务。下面我们来分别细说一下每个部分。

关于PI

每个PI都是从一个叫Big Room Planning(有些词实在不知道中文是啥,大家见谅)的大会开始的。在这个大型会议中,每个团队会制定接下来一个季度的所有任务,有些任务需要团队间协作完成,所以要给其他团队推送任务。这也是为什么要把大家拉到一起来开这个会的原因。在制定计划时,给每个人分配的任务量是该员工预计总工作时间的70%左右。因为在开发过程中一定会遇到一些不在预料之内的问题,另外30%用作解决问题的缓冲时间。工作时间和任务量都是以stroy points来进行计算的。

关于sprint

下面我们来仔细看看一个sprint的两个星期是如何进行管理的。首先,第一周的周一会开一个会议,叫做sprint planning。这个会议的主要内容就是总结上一个sprint的任务完成情况,制定新的sprint的任务分配。在任务分配过程中,每个任务被称作一个ticket。其中大部分ticket是在之前的big room planning的时候制定的,而现在只是针对当前任务的完成状况,将上一个sprint遗留下来的,以及在项目进展过程中新产生的ticket与原来就写好的ticket进行合理地分配到个人。 在一个sprint中,每个人大约受到7个story points。每个人真正的工作时间应该是10个story points,即每周五个工作日。因为有一部分时间要用来开会和解决一些预想不到的问题,所以要少分配一些。

在这两周期间,每周二和周四会进行一次会议,叫做stand up meeting。就是一群人聚集在团队管理者的工位上,看一下每个人的任务完成情况,主要目的是解决一些任务被阻塞的情况,合理分配团队资源以便顺利完成任务。

在每个sprint的最后,会进行一次grooming,即为了下一周能更好地开始新的sprint planning,对当前任务列表进行优化。关闭该关闭的,整理新出现的。然后一个sprint就算结束了。在新的一个sprint planning上会对上一个sprint的完成情况进行评价,主要观察两个图表,velocity chart和burnt down chart,有兴趣的话可以自己查一下。

关于ticket

每个ticket都有对应的母任务,有任务的完成者和检查者。这样我们就可以清晰的看到每个大任务是如何被一点点划分成小任务的了。小团队的领导者会通过每天观察大家ticket的进度的方式来了解,整个团队的任务完成情况。每个ticket分为四个阶段:制定了但没开始做时Open阶段,开始做了之后变为In progress阶段,做完了等待别人来审核是Code review阶段,review完了就是Close阶段。

这里有几个关于ticket的建议。

  1. 及时更新ticket的状态阶段,方便老板了解你的工作进度,以便他对整个团队的把控。
  2. 要根据自己的精力来决定是否要接别人发来的ticket,不要为了表现自己任劳任怨而全部接受,否则做不完会导致团队的整体计划受到影响。
  3. 每个ticket的story points不要太高,最好小于等于2,这也是能更细致地跟进任务完成状态的一种方式。
  4. ticket应该有明确的是否完成的检验标准和详细的内容描述,在jira上的排列也应按照预想的完成顺序,这样做起来也有动力,方便管理。
  5. 如果ticket完成过程中需要他人介入或遇到任何问题,记得在该ticket下的留言板中记录下相关信息,便于事后查阅。

###企业文化 公司内部非常重视企业文化的构建,鼓励大家能够自由快乐地工作。在我的感受中,公司并没有非常严格的管理,工作中也没有太大的压力,基本出于自愿。每天的上班和下班时间也很自由,只要上午11点之前到办公室就可以。晚上的下班时间也很自由,基本四点半以后就可以自由离去了。

在企业文化中比较引起我注意的一点是它非常鼓励员工们之间建立联系。其中一个体现就是各个部门紧密合作,任何团队有需求都可以直接向其他团队提出,并列入双方的工作计划。公司里有很多会议室,为了方便大家开会和进行协作。公司还建立了一个内部的货币系统,每月有指定数量的虚拟货币可以赠与自己的同事以表示感谢,每次感谢都会被公开发表,大家都能看得见。该货币积累到一定数量即可兑换成现实生活中的礼品卡。也是以此来鼓励大家在遇到自己难以解决的问题时勇于向他人寻求帮助。

这两点企业文化都与《失控》一书中的观点不谋而合,一是去中心化的社会结构关系已经成为趋势,别再想着通过硬性的管理来控制员工。二是个体的价值,由他和这个系统连接的数量和质量来决定。个体价值的提升,自然促进企业价值的提升。

企业文化中我还看到的一点就是排除干扰,提升效率。公司的休息区有很多零食和饮料,全都免费,还有非常高级的咖啡机,甚至还有各种药品和急救包,可以保证员工的很多需求都能在若干米的活动范围之内解决。不用出门买药,不用去咖啡店买咖啡,不用去买各种零食。每天的早餐都可以在公司解决,这样就能让员工节省在外买早餐或自己做早餐的时间,更早的来工作。这样就为员工的工作排出了很多干扰。对于开发团队,所有的设备,如显示器键盘等等,都可以随意增加。每人配备高级的座椅和升降桌,避免长期工作对脊椎的影响。所有开发中使用的软件都可以由公司购买。这样就保证了使用最优的工具,以提高产出的效率。