Skip to content

Latest commit

 

History

History
140 lines (85 loc) · 8.23 KB

Remote_Work_Culture.md

File metadata and controls

140 lines (85 loc) · 8.23 KB

OpenIM Remote Team Collaboration Protocol v1.3

Principles

0) Ownership & Leadership

When you see issues with the team or project, don't wait or endure. Speak up immediately, propose solutions, initiate a meeting yourself, and adjust promptly. Don't suppress your concerns!

"Every team member embodies the roles of both Owner and Leader. When issues arise, be proactive in pointing them out and offering solutions. Don’t just wait or stay silent."

1) Initiative

Everyone must take the initiative. Whether it’s about starting something or claiming a task, if you find yourself idle, proactively identify problems and areas of improvement. Innovation stems from this. If there’s no path, pave one yourself!

"Drive innovation and improvements for the team."

2) Objectives Oriented

Everyone is a product manager and project manager. Everyone needs to link their work to our broader objectives, understanding what's crucial. Two main things matter: 1) From the user's perspective, 2) From the product's perspective. This means we must always observe the entire product, not just our specific segment.

"Always maintain a dual perspective of users and products, ensuring that work aligns with the overarching goals."

3) Insists on High Standards

Aim high, achieve the middle; aim for the middle, fall short; aim low, miss altogether. We must persistently hold ourselves to high standards, not compromising on these high objectives, but being flexible in our approaches and strategies.

"Always maintain high standards, ensuring quality. Be flexible during the execution, but never compromise on the ultimate high standards."

Practices

0) Online

You must be online when working. If you go offline, notify others about the duration. For communication, we use Slack. If you need time off, unless it's urgent, inform a day in advance on MegaEase's Slack #random channel. In urgent situations, notify the insider channel.

"When working, ensure you are online. If you need to go offline, notify in advance on Slack's #insider channel."

1) Documentation Driven

Face-to-face conversations, calls, WeChat, and Slack provide real-time feedback, but only documentation offers structured vital information. Writing documents also facilitates deeper thinking as it allows you to scrutinize your ideas. Hence, crucial "functions", "processes", "business logic", "designs", "issues", and "ideas" should ideally be documented. Use tools like Github's wiki, project, issue, or Google Doc.

"Ensure key information is persistent and traceable."

2) Design Review

For critical tasks or issues (everyone can discern what’s vital), share your ideas first before implementing.

A good design document should include:

  • Background: Context, requirements, and problem description.
  • Objectives: Aim and significance of the task.
  • Alternative Solutions: Provide various solutions and compare their pros and cons.
    • Reference: Solutions must have authoritative references.
    • Data: Solutions must be backed by relevant data.
  • Conclusion: Final takeaways.

"Before initiating, ensure that you share your ideas with the team and gain consensus."

3) Simplification & Automation

Simplification and automation are two main goals in software engineering. Simplification isn't about being simplistic but about abstraction and induction, enhancing software reusability and scalability. Automation showcases engineering prowess. In remote work, automation boosts team efficiency, and on the other hand, it's a prerequisite for scaling. Therefore, we must always think about how to simplify and automate existing tasks.

4) Review & Re-factory

Everything, be it code or work processes, requires introspection and refactoring. Introspection is the key to improvement. At the end of a project or when issues arise, call a team meeting for collective reflection. Keep the good practices and optimize the rest. But any optimization must be actionable.

5) Milestone Commitment

For every project, everyone should have their own milestone plans. These plans ideally should be within a week, but definitely within two weeks. And they must be committed to.

"Ensure milestones are set and adhered to for every project."

6) Evidence Driven

All discussions and analyses should be based on authoritative evidence, data, or references. When designing or in disagreements, the best way to persuade others is by presenting evidence, data, or authoritative references. If debates go on endlessly, stop and collect supporting evidence for your arguments.

7) Demo Day

Show and tell with the team what you've created. This helps developers think about their work from a product perspective. Besides product features, you can also showcase algorithms, designs, and even codes.

"This encourages team members to learn from and share with each other."

8) Effective Meeting

Meetings primarily deal with three things: proposing agendas, identifying problems, and reaching conclusions.

  • Meetings should have more than just topics; agendas are even better.
  • Meetings shouldn't solve problems, just identify and track them.
  • Meetings must reach a consensus and conclusion. If not, treat it as a problem for the responsible individual to handle.

For weekly or ad-hoc team meetings (excluding private discussions), the meeting organizer should gather topics in advance, categorized as:

  • Project-Based: A prior project progress plan is required.
  • Solution-Based: Relevant designs must be prepared before discussions.
  • Problem-Based: Problems and solutions must be documented.
  • Decision-Based: The context, repercussions, and a pros-cons analysis should be available.
  • Information-Based: Necessary details should be prepared.

Meeting organizers should send out meeting topics by Friday.

"Ensure that every meeting is efficient and productive."

9) 1-2-3 Escalation

When facing problems, if you can't find a solution within 1 hour, discuss with others. If after 2 hours of discussion there's no resolution, elevate it to the whole team. If after 3 hours the team hasn't found a solution, it's time to seek external assistance.

"When encountering problems, if you can't resolve them within 1 hour, discuss with colleagues. If it's unresolved after 2 hours, escalate it to the team. If after 3 hours the team can't find a solution, consider seeking external help."

A) 3PS Update

When updating progress, make it more meaningful than just a check-in. At the end of a task, summarize your work. Practice the 3PS – Plan, Priority, Problem, Summary – What's your plan? What's the priority? What problems did you face? What's your current task summary?

"During progress updates, share your Plan, Priority, Problem, and a Summary of your work."

B) Disagree and Commitment

During development, team members will have different styles and opinions, leading to disagreements. We encourage disagreements, but only before a team decision is made. Once a decision is made, all must support and contribute towards it. However, the decision-making process can be filled with debates. Guidelines to handle disputes include:

  • Owners must push forward significant discussions, aiming for swift conclusions.
  • During decision-making, minutes must be updated to Github's related project Issue or Pull Request