Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Create OpenIM_Remote_Work_Culture_Guide-zh_CN.md #12

Merged
merged 1 commit into from
Aug 11, 2023
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
165 changes: 165 additions & 0 deletions OpenIM_Remote_Work_Culture_Guide-zh_CN.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,165 @@
# OpenIM 远程工作团队协作协议 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* 频道中提前说明。如果是紧急情况,也需要提前在*insider*频道中告知大家。

“工作时,请确保在线。若需离线,务必在Slack *#insider* 频道提前通知。”



### 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小时内没有思路,我们就需要借助外部力量了。

“当遇到问题,如果1小时内不能自己解决,请与同事讨论。2小时内与同事未能解决,提升至团队讨论。若3小时内团队未能解决,考虑寻求外部帮助。”



### A)3PS Update

每个人更新进度的时候,不要只是一个check-in,而是需要更 meaningful 的说一下工作内容,在工作告一段落的时候,希望简单的说一下工作总结。这里的practice是: **3PS – Plan,Proirity,Problem,Summary, – 你的计划是什么?优先级是什么?遇到了什么问题?当前的工作摘要** 。

“3PS进度更新”和调整描述:“在更新工作进度时,分享你的计划(Plan),优先级(Priority),遇到的问题(Problem),以及工作摘要(Summary)。”



### B) Disagree and Commitment

在我们开发的时候,团队的成员都会有自己风格,必然会对同一个问题产生较大的争议(Disagree),我们鼓励有争议,但是是在团队的决议作出之前。一旦团队形成决议,团队的成员就必须支持这个决议,并在这个方向上做出贡献。

但是关于决议的形成过程肯定充斥着各种的争论,对于这些争论,我们可以按照下面的Guidline 来处理争议:

- Owner要负责对重大的讨论推进,尽快形成结论。
- 在决议过程中,要有纪要,要更新到 Github 相关项目的 Issue 或 Pull Request 里,并且要让整个团队知道,信息平等很重要。
- 不要妥协,坚持高的标准。第一标准是工业标准,第二标准是国外的大公司标准(如:google, fb, github, aws…),第三标准才是国内的标准。
- 那怕再复杂,只要是标准,就可以说服用户。用户再无理,也不可能反对工业级的标准。
- Release出去的东西,只要被用户用上了,要改就难了,所以要谨慎而果敢。

“在团队决定之后,即使有不同意见,也需要全力支持团队的决策。”

Loading