Jump to content

Abstract Wikipedia team/Phabricator style guide

From mediawiki.org

Some thoughts about how we want our Phabricator tasks to be written and managed:

Title concerns

[edit]
Tasks … Guideline Good and bad examples
Should be something the team can do; focus on the change. Titles should start with a verb around the change. ✔️ Align the function editor design palette to the 2021 Wikimedia standard

❌ The function editor is blue

❌ Happiness in errors

Should be something the team can control. Titles should be scoped to things we can change. ✔️ Invite people to try out Wikifunctions

❌ Solve the Halting Problem so that our code monitoring always works

❌ Win a Turing award for our work

Should be finishable. Titles should have a completion concept.

(Use a project for endless work.)

✔️ Launch the Wikifunctions site

❌ Continue to keep the site running

Should be easy to understand what it's about.

Should be easy to find tasks and distinguish them.

Titles should be specific to the change that occurs. ✔️ Extend the function editor tests to also check it works in RTL interfaces

❌ Fix the thing

Lifecycle and stakeholder concerns

[edit]
Decisions Guideline
The team uses work board columns on the team board for work scope management. Tasks should be in the current Quarterly milestone column if they are required work in its scope.

Tasks should be in one of the "Backlog" columns if the team is expecting to need to work on it in the next few Quarters.

Tasks should be in the "No current plans" column if that work is not currently planned.

The team uses work board columns on the current Quarter for work state management. All new tasks should come into the Incoming column before being sorted:
  • If the task is a bug, it goes into "Bugs to investigate"
  • If the task is part of the planned Quarterly work, it goes into Ready, Quarterly work
  • If the task is otherwise work that the team agrees to do this Quarter, it goes into Essential work.
  • If a task isn't any of these three, it shouldn't be on the Quarterly board.

When a colleague is looking for their next task, they should generally feel free to take anything from Ready, and move it into In Engineering. When it's ready for design or code review, it should be moved to that column, and then to Ready to deploy.

Once a task has been deployed, it should be moved to Ready for Sign-off, and later Resolved by the appropriate owner.

The team uses the 'priority' field to schedule work. Tasks that should be done very soon or now should be tagged High; next up, Medium; later, Low; much later, Lowest.
Task state represents reality, it doesn't define it. Tasks should be in the status and priority that they're going to be worked on by the team.
Task acceptance can affect all stakeholders. Incoming tasks should generally be accepted into the Quarter only in the team's task triage meeting.

Existing tasks should only be de-scoped from the Quarter in the appropriate work planning meeting.

Work shouldn't generally start on tasks that we have not yet accepted from "To Triage", except for urgent bugs.

Task disposal can affect all stakeholders. Incoming tasks should generally be declined only in the team task triage meeting.

Existing tasks should only be declined in the task triage meeting.

Team members should be able to tell at a glance if a task is something on which they could work. Task titles should be specific to the change they want to see happen.

Task titles should be short enough they can be easily understood, but not so short that they can't be.

Tasks should specify the before and after state desired by the task.

Team members should be able to tell for themself if a task is still a concern, and whether they have fixed it. Tasks should be labelled as feature changes, bugs, or engineering/technical changes.

Definition of done:

  • Feature tasks should specify what the outcome state should be, in terms of functionality & UX/design, and non-functional requirements.
  • Bug tasks should specify what the outcome state change requirement, and implicitly that no functionality or UX/design change occurs.
  • Technical debt tasks should specify the non-functional change requirement, and implicitly that no functionality or UX/design change occurs.

How to use tags

[edit]
Tag Name Tag Use Example
function-schemata For tasks that will impact function-schemata code Create JS classes and builders for ZObjects in function-schemata
function-orchestrator For tasks that will impact function-orchestrator code Resolve Z18s, Z9s, and Z7s Which Are Not at the Top Level of an Argument
function-evaluator For tasks that will impact function-evaluator code Use Content-type to Determine How to Parse Evaluator Requests
WikiLambda For tasks that will impact WikiLambda code, including WikiLambda APIs. Make `ApiFunctionCallTest.php` compare expected vs. received values
WikiLambda Front-end For tasks that will impact Vue components and/or the Vuex store, within the Wikilambda code.

NOTE: this is a subtag of WikiLambda; all tasks that have this tag must also have the WikiLambda tag.

Integration Tests: Look into factory methods for generating zObjects across production code + tests
Abstract Wikipedia Fix-It Tasks For tasks that are good candidates for team fix-it week, a week every two months dedicated to code cleanup, documentation, and the elimination of tech debt.

NOTE: this tag can be paired with any of the above tags.

replace existing Tooltip with CODEX version
Abstract-Wikipedia-Digital-Garden For tasks that are in our general brainstorming queue; no direct action is required, but we may continue to revisit them and eventually decide to turn them into executable tasks. Digital Garden: Given an input(s), an input label(s), and an output generate function name
Epic For tasks that document an epic unit of work; it may have many children tasks As a member of one of Wikifunction's target communities, I want the outcomes of Wikifunctions to be desirable for me, so that I can benefit from Wikifunctions
Design For tasks that are owned by a designer Alter the view for instances of user-defined types (fallback UX)