Readers/Web/Team/Team norms

This page is intended to document norms adopted by the team.

If it didn't happen on the mailing list, then it never really happened.

 * In other words, all decisions or things of substance must find their way onto the team's public mailing list. Since we're juggling communication between multiple teams, and many folks are remote, it's difficult to ensure that changes and decisions are communicated effectively - particularly when requirements/designs/etc change. It is not enough for these things to be communicated and known between two people, even if they appear to be the only two people working on something, as other folks may wind up continuing with the same work, or there may be implications to the changes that are only known to someone else on one of the teams. This is not to say that hallway conversations, IRC, and so on are not acceptable venues for discussions and decisions, it's just that we should capture these things and post them to the mobile-l@lists.wikimedia.org list (or the appropriate internal list for administrivia, standup status if missed standup, or internal confidential topics) to ensure everyone stays in the loop.
 * If something has permanence, put it on the appropriate wiki project page, with rationale and links to previous discussion if appropriate, and follow up on email.
 * When a private email is sent to team members, the team members should ask each other if it's something that could go to the public list, the task management system, an internal list, or somewhere else where the communication will be archived for multiple people.

Standup

 * If you are an engineer and you miss standup, send an email to the team with your answers to the standup questions and any other news you may have to share.
 * We reserve the right to address repeated tardiness or standup absenteeism.

Communication
This is particularly crucial with non-face-to-face communication, as tone becomes even more difficult to decipher.
 * The way we communicate with one another is critical, and has very big impacts on the health of the team. Remember that everyone has their own communication style and ways of thinking about things. As a result, be careful about taking things too personally or reading too deeply into someone's comments.
 * If there is ambiguity in someone's tone, or if it is putting you on the defensive, or making you feel any sort of discomfort, politely and explicitly share that with the person to whom you are speaking.
 * Always approach conversations by giving the other person the benefit of doubt, and with the same honesty, humility, respect, and trust that you expect (or desire) from them.

Rule of 3
The "Rule of 3": If there is a meeting happening that concerns more than one discipline, if decisions are being made, make sure that there is at least one representative from engineering, design, and product.

This helps ensure that three disciplines are represented in any decision making process, and are more likely to stay on the same page.

Working practices

 * If your laptop is on and you are working, you should be on IRC. This gives all team members, particularly remote ones, the ability to get in touch with you quickly in the event you are needed for something urgent.

Workflow practices

 * Projects tackled by the team must be documented on a wiki page in the Reading Web Projects page before it can be scheduled.
 * Tasks are stored in the backlog in Phabricator.
 * Prioritize working on tasks in the current sprint. If a task is not in the current sprint, the team shouldn't work on it. If the team wants to work on that task, then it needs to be identified publicly and brought into the sprint, an action made visible to the whole team and the PO.
 * If a card in ready for sign off meets the acceptance criteria but has a problem, it should be moved to done and bugs filed for any issues. If card does NOT meet acceptance criteria, it should be moved back to the appropriate workboard column for re-work. (per Retrospective_2014-01-21)
 * Add tests when fixing regressions.

Code review

 * We strive to review submitted patches submitted by team members within 2 business days. Fast feedback is very important.
 * If linters on Jenkins jobs don't complain we do not get hung up on code styling. If we feel strongly we will +1 rather than +2 with comments.
 * We strive to only -2 in exceptional cases where discussion seems to have broken down and the involved parties are not being heard.
 * Dog piling and discouraging participation is not okay. Motivation is precious.

Working with others

 * If we have committed to a task, then we ask that the acceptance criteria are not edited without sign off from the team.
 * If the acceptance criteria of a task are changed, then the task should be moved back to needs analysis to ensure it doesn't derail work.
 * We strive to share our code as libraries (npm/composer packages), upstream code to core when it makes sense, and group functionality in specific Mediawiki extensions to keep our code focused and properly organized, avoiding monolithic software components.
 * We will only start the sprint with tasks that are well defined, with clear design specifications.
 * Teams needing our help should sync with the tech lead two weeks before they need a change, so we can coordinate the work and align on expectations.

Conflicts on technical discussions

 * Be aware of deadlock and stop to cool off and re-discuss later
 * Include tech lead on technical discussions that don't reach agreement
 * Tech lead to state rules of good design and specify trade-offs to help move the discussions forward
 * Ask for help from TPG to facilitate when conflicts come to a halt