MegaEase 远程工作团队协作协议 v1.3
Principles
0)Ownership & Leadership
每个人都是 Owner,都是 Leader,如果看到团队或是项目有问题的时候,不要等,也不忍,请马上说出来,并给出相应的方案,自己跳出来召集开会,及时调整。不要闷在那里,自己憋!
1)Initiative
每人个都必需是主动的,都需要自己发起要做的事,或是自己要认领要做的事,如果发现自己没有事情了, 需要学会主动发现问题,主动找到可以 improve 的地方,创新来源于此。没有路要学会自己造路!
2)Objectives Oriented
每个人都是产品经理,也都是项目经理,每个人都必需把自己的工作和我们大的目标连接在一起,知道什么是重点,重点的东西就是两件事:一)从用户的角度出发;二)从产品的角度出发。这意味着我们要随时观察整个产品的样子,而不只是自己这一块东西 。
3)Insists on High Standard
举法其上,得乎其中,举法其中,得乎其下,举法其下,法不得也。我们要坚持用高的标准要求自己,对于高标准的目标不妥协,但是在实施路径和策略上可以妥协。
Practices
0)Online
工作的时候必需在线。如果不在线了,需要说一下不在线的时长。目前我们工作的事宜在通讯工具上采用 Slack, 如果需要请假,如果不是紧急情况,需要提前一天在 MegaEase 的 Slack #random 频道中提前说明。如果是紧急情况,也需要提前在 random 频道中告知大家。
1) Documentation Driven
面对面交谈、电话语音、微信、Slack 虽然是比较实时的反馈工具,但是只有文档是可以把重要信息结构化的,而且写文档其实比起前面的方式来说是更为深度的思考,因为会让你自己审视自己的想法。所以,对于一些重要 “功能”、“流程”、“业务逻辑” 、“设计”、“问题”,以及“想法”,最好都以文档化的方式进行。请使用 GitHub 的 wiki、project、issue 这些工具或是使用 Google Doc。
2)Design Review
对于一些重要的问题或是工作(每个人都能够判断什么是关键问题和工作), 需要先把自己的想法 share 出来,而不是先实现 。
一个好的 Design 文档需要包括如下项:
Background。交待这个事的背景、需求和要解决问题。
Objectives。说明这个事的目标和意义。
Alternative Solutions。给出多个解决方案,并能够进行 Pros/Cons 对比。Reference——方案需要有权威引用支持;Data——方案需要有相关数据数据支持。
Conclusion。结论是什么。
3) Simplification & Automation
简化和自动化是软件工程所追求的两大目标,简化不是简陋,简化是对事物一种抽象和归纳能力,能够提升软件的复用能力和扩展性。自动化是工程能力的重要体现,一方面远程工作中自动化的能力可以让整个团队更高效地协作;另一方面,自动是规模化的前得条件。所以,我们要无时无刻地思考如何简化和自动化现有的事情。
4)Review & Re-factory
无论是代码还是工作都是需要反思和重构的。反思是进步的源泉,项目告一段落时,出现问题时,都应该召集团队做集体反思,把好的东西坚持下去,把不好的东西优化掉,这样才能进步和改进。但是任何的优化措施都是可执行的。
5)Milestone Commitment
对于一个项目,每个人都需要有自己的 milestone 计划, 这个计划最好是在 2 周以内,1 周内是最好的,而且要承诺到 。
6)Evidence Driven
任何讨论和分析都要基于权威的证据、数据或是引用。在我们做设计的时候,或是有争论的时候,说服对方最好的方式就是拿出证据、数据或是权威引用。比如:我的 XX 设计参考了 TCP 协议中的 XX 设计,我的 XX 观点是基于 XX 开源软件的实现……如果争论不休就停止争论,然后各自收集和调查自己观点的佐证。
7)Demo Day
把自己做的东西跟团队做一次实时的演示。这样有助于开发人员从产品角度思考自己的工作。除了演示产品功能,还可以演示算法、设计甚至代码。
8) Effective Meeting
会议主要处理三件事:提出议案、发现问题、共识结论。
会议不仅仅要有议题,最好还有议案。
会议期间不解决问题,只发现问题,和跟踪问题。
会议必需要有共识和结论,如果不能达到共识和结论,那就当成问题处理,由问题的负责人跟进问题。
关于周会或是临时性的团队会议(私下讨论不属于会议),会议组织者需要在事前收集会议议题,其中包括如下分类:
项目类:需要事先有项目进度计划表(任何分项最好控制在 1-2 人周内)
方案类:需要事先写好相关的方案和设计才能讨论(参看 Design Review 章节)
问题类:需要事先写好相关的问题和解决提案(参看 Design Review 章节)
决策类:需要事先写好整事的前因后果以及利弊分析信息类:需要事先写好相关的事宜说明
组织者需要在周五的时候发出会议议题收集,其中包括:
自己知道的项目的进度跟进(需要相相关的项目负责人准备相关的项目计划)
方案和问题类的需要各个项目负责人提出来,并有相关的设计文档可供 Review
信息类和决策类的事宜可以写在 Google Doc 上,也可以写在 Team 的 Issue 里
其它负责人可以在会议上加入自己团队的东西,或是要求其他团队提供更多的信息。
9)1-2-3 Escalation遇到问题的时候
自己一个人处理 1 小时内没有思路,请找他人小范围讨论,如果与他人 2 小时内没有结果,请上升到团队范围,如果在团队范围 3 小时内没有思路,我们就需要借助外部力量了。
A)3PS Update
每个人每天在签到的时候,不要只是一个 check-in,而是需要更 meaningful 的说一下今天的工作内容,在每天工作完全的时候,希望简单的说一下当天的工作总结。这里的 practice 是:3PS – Plan,Proirity,Problem,Summary, – 你的计划是什么?优先级是什么?遇到了什么问题?一天的工作摘要 。
B) Disagree and Commitment
在我们开发的时候,团队的成员都会有自己的风格,必然会对同一个问题产生较大的争议(Disagree),我们鼓励有争议,但是是在团队的决议作出之前。一旦团队形成决议,团队的成员就必须支持这个决议,并在这个方向上做出贡献。
但是关于决议的形成过程肯定充斥着各种争论,对于这些争论,我们可以按照下面的 Guidline 来处理争议:
- Owner 要负责对重大的讨论推进,尽快形成结论。
- 在决议过程中,要有纪要,要更新到 Github 相关项目的 Issue 或 Pull
Request 里,并且要让整个团队知道,信息平等很重要。 - 不要妥协,坚持高的标准。第一标准是工业标准,第二标准是国外的大公司标准(如:Google, Facebook, GitHub,
AWS…),第三标准才是国内的标准。 - 哪怕再复杂,只要是标准,就可以说服用户。用户再无理,也不可能反对工业级的标准。
- Release出去的东西,只要被用户用上了,要改就难了,所以要谨慎而果敢