We have had difficulty talking about the status of our converged components. If they are done, inprogress, what is done, whether they are ready to use or not, etc. The reality is that convergence is not just a single step, it's a long effort with multiple checkpoints along the way that all may be in varying states of progress. Therefore simply tracking a single component's status is not sufficent.
We also need to, as a team, both focus on and scale out the component convergence effort. If things go well, we will have many components in flight at the same time. For this to work, we will need a way to know what is in progess, and what will be needed to keep the progress moving.
TODOs
[ ] Need a wiki for preparation steps - [Ben overall wiki]
To solve the above problem, we propose a few things
The phases of convergence
A component spec template and review process
A GitHub issue template to track detailed component status
An update to the existing component spreadsheet to track high level status
1. The Phases of convergence
The purpose of the phases of convergence is to give us both a common langauge to discuss both what needs to be done to "converge" a component, as well as to understand how far along we are.
Preparation
Design spec
Open UI Research complete - Mak
Comparison on v7 and v0 complete (react native encourage alignment?)
Gather open GitHub issues related to component in epic issue
Package scaffolded with /next folder
Component Spec authored and reviewed - Justin
Including what has been tried/done so far
Including example usage for key scenarios
Including migration steps from v7 and v0
Including accessibility spec
Token names
Deliverable: Reviewed component spec
Implementation
Implement component
Add storybook stories
Add tests - Conformance, Unit, and VR
Deliverable: Experimental component ready for partner use
Has README covering basic usage or add to docsite if we have it
Has initial migration guide from v7 and v0
Validation
Add and validate in UI Builder
Validate with token pipeline
Validate in product
Finalize migration guide
Author codemods
Deliverable: Preview component ready for broader/3rd party use
2. Spec review process and Template [TODO]
The goals of the spec review process are to enable asynchronous reviews, authors of components not within our immediate team, and unblocking incremental progress on implementing the component.
Preqs:
Package is scaffolded (where API.md will be added)
Research, comparison, issue analysis can be performed ahead of time
Steps:
Spec should be added as API.md file in component package folder
Spec review takes place async in PR
PR is for adding API.md and other files to the package folder
Schedule an initial meeting to review spec
Initial spec review meeting should focus on progress through spec and track contenious issues in PR for follow up later
Follow up offline on open issues from initial review
It's fine to schedule follow up discussions or meetings as needed
[ ] Gather open GitHub issues related to component in epic issue
[link to issue]
[ ] react-* package scaffolded
[link to package]
[ ] Component Spec authored and reviewed
[link to spec in component package]
[ ] Deliverable: Reviewed component spec
Implementation
[link to react-* package folder]
[ ] Implement component
[ ] Add storybook stories
[ ] Add tests - Conformance, Unit, and VR
[ ] Write README.md covering basic usage
[ ] Write initial MIGRATION.md guide (include v7 and v0)
[ ] Deliverable: Experimental component ready for partner use
Validation
[ ] Add and validate in UI Builder
[ ] Add and validate in docs site
[ ] Validate with token pipeline
[ ] Validate in product
[ ] Finalize migration guide
[ ] Author codemods
[ ] Deliverable: Preview component ready for broader/3rd party use
4. Tracking sheet
Pros and Cons
:+1: Gives structure and clarity to convergence
:+1: Allows us to provide status and rough ETAs to partners
:-1: Has the risk to just add more overhead tracking things
Discarded Solutions
This is the first try at a solution. We did iterate on some small choices around where we put the spec.
Contributors: @khmakoto, @behowell, @joschemd, @aneeshack4, @dzearing, @paulgildea
Summary
This RFC covers a proposal for a process to track and bring clarity to the engineering work required to build a Fluent UI Next component
Prior art
This proposal is based on the existing component specs here: https://github.com/microsoft/fluentui/tree/master/specs
Problem statement
We have had difficulty talking about the status of our converged components. If they are done, inprogress, what is done, whether they are ready to use or not, etc. The reality is that convergence is not just a single step, it's a long effort with multiple checkpoints along the way that all may be in varying states of progress. Therefore simply tracking a single component's status is not sufficent.
We also need to, as a team, both focus on and scale out the component convergence effort. If things go well, we will have many components in flight at the same time. For this to work, we will need a way to know what is in progess, and what will be needed to keep the progress moving.
TODOs
Proposal
To solve the above problem, we propose a few things
1. The Phases of convergence
The purpose of the phases of convergence is to give us both a common langauge to discuss both what needs to be done to "converge" a component, as well as to understand how far along we are.
2. Spec review process and Template [TODO]
The goals of the spec review process are to enable asynchronous reviews, authors of components not within our immediate team, and unblocking incremental progress on implementing the component.
Preqs:
Steps:
Proposed Sections of Spec
Based on: https://github.com/microsoft/fluentui/tree/master/specs
Recomendation: Write a component.types.ts file instead of documenting props in markdown table
3. GitHub Issue template
Below is the propose GitHub Issue template. We would have 1 per component. This is the source of truth for status on component convergence.
From: #15759
4. Tracking sheet
Pros and Cons
:+1: Gives structure and clarity to convergence :+1: Allows us to provide status and rough ETAs to partners :-1: Has the risk to just add more overhead tracking things
Discarded Solutions
This is the first try at a solution. We did iterate on some small choices around where we put the spec.
Open Issues