| .. _feature-tracking: | 
 |  | 
 | Feature Tracking | 
 | ################# | 
 |  | 
 | For feature tracking we use Github labels to classify new features and | 
 | enhancements. The following is the description of each category: | 
 |  | 
 | Enhancement | 
 |   Changes to existing features that are not considered a bug and would not | 
 |   block a release. This is an incremental enhancement to a feature that already | 
 |   exists in Zephyr. | 
 |  | 
 | Feature request | 
 |   A request for the implementation or inclusion of a new unit of functionality | 
 |   that is not part of any release plans yet, that has not been vetted, and needs | 
 |   further discussion and details. | 
 |  | 
 | Feature | 
 |   A committed and planned unit of functionality with a detailed design and | 
 |   implementation proposal and an owner. Features must go through an RFC process | 
 |   and must be vetted and discussed in the TSC before a target milestone is set. | 
 |  | 
 | Hardware Support | 
 |   A request or plan to port an existing feature or enhancement to a particular | 
 |   hardware platform. This ranges from porting Zephyr itself to a new | 
 |   architecture, SoC or board to adding an implementation of a peripheral driver | 
 |   API for an existing hardware platform. | 
 |  | 
 | Meta | 
 |   A label to group other GitHub issues that are part of a single feature or unit | 
 |   of work. | 
 |  | 
 | The following workflow should be used to process features:. | 
 |  | 
 | This is the formal way for asking for a new feature in Zephyr and indicating its | 
 | importance to the project.  Often, the requester may have a readiness and | 
 | willingness to drive implementation of the feature in an upcoming release, and | 
 | should assign the request to themselves. | 
 | If not though, an owner will be assigned after evaluation by the TSC. | 
 | A feature request can also have a companion RFC with more details on the feature | 
 | and a proposed design or implementation. | 
 |  | 
 | - Label new features requests as ``feature-request`` | 
 | - The TSC discusses new ``feature-request`` items regularly and triages them. | 
 |   Items are examined for similarity with existing features, how they fit with | 
 |   the project goals and other timeline considerations. The priority is | 
 |   determined as follows: | 
 |  | 
 |   - High = Next milestone | 
 |   - Medium = As soon as possible | 
 |   - Low = Best effort | 
 |  | 
 | - After the initial discussion and triaging, the label is moved from | 
 |   ``feature-request`` to ``feature`` with the target milestone and an assignee. | 
 |  | 
 | All items marked as ``feature-request`` are non-binding and those without an | 
 | assignee are open for grabs, meaning that they can be picked up and implemented | 
 | by any project member or the community. You should contact an assigned owner if | 
 | you'd like to discuss or contribute to that feature's implementation | 
 |  | 
 |  | 
 | .. _rfcs: | 
 |  | 
 | Proposals and RFCs | 
 | ******************* | 
 |  | 
 | Many changes, including bug fixes and documentation improvements can be | 
 | implemented and reviewed via the normal GitHub pull request workflow. | 
 |  | 
 | Many changes however are "substantial" and need to go through a | 
 | design process and produce a consensus among the project stakeholders. | 
 |  | 
 | The "RFC" (request for comments) process is intended to provide a consistent and | 
 | controlled path for new features to enter the project. | 
 |  | 
 | Contributors and project stakeholders should consider using this process if | 
 | they intend to make "substantial" changes to Zephyr or its documentation. Some | 
 | examples that would benefit from an RFC are: | 
 |  | 
 | - A new feature that creates new API surface area, and would require a feature | 
 |   flag if introduced. | 
 | - The modification of an existing stable API | 
 | - The removal of features that already shipped as part of Zephyr. | 
 | - The introduction of new idiomatic usage or conventions, even if they do not | 
 |   include code changes to Zephyr itself. | 
 |  | 
 | The RFC process is a great opportunity to get more eyeballs on proposals coming | 
 | from contributors before it becomes a part of Zephyr. Quite often, even | 
 | proposals that seem "obvious" can be significantly improved once a wider group | 
 | of interested people have a chance to weigh in. | 
 |  | 
 | The RFC process can also be helpful to encourage discussions about a proposed | 
 | feature as it is being designed, and incorporate important constraints into the | 
 | design while it's easier to change, before the design has been fully | 
 | implemented. | 
 |  | 
 | Some changes do not require an RFC: | 
 |  | 
 | - Rephrasing, reorganizing or refactoring | 
 | - Addition or removal of warnings | 
 | - Addition of new boards, SoCs or drivers to existing subsystems | 
 | - ... | 
 |  | 
 | The process in itself consists in creating a GitHub issue with the :ref:`RFC | 
 | label <gh_labels>` that documents the proposal thoroughly. There is an `RFC | 
 | template`_ included in the main Zephyr GitHub repository that serves as a | 
 | guideline to write a new RFC. | 
 |  | 
 | As with Pull Requests, RFCs might require discussion in the context of one of | 
 | the `Zephyr meetings`_ in order to move it forward in cases where there is | 
 | either disagreement or not enough voiced opinions in order to proceed. Make sure | 
 | to either label it appropriately or include it in the corresponding GitHub | 
 | project in order for it to be examined during the next meeting. | 
 |  | 
 | Roadmap and Release Plans | 
 | ************************* | 
 |  | 
 | Project roadmaps and release plans are both important tools for the project, but | 
 | they have very different purposes and should not be confused. A project roadmap | 
 | communicates the high-level overview of a project's strategy, while a release | 
 | plan is a tactical document designed to capture and track the features planned | 
 | for upcoming releases. | 
 |  | 
 | - The project roadmap communicates the why; a release plan details the what | 
 | - A release plan spans only a few months; a product roadmap might cover a year | 
 |   or more | 
 |  | 
 |  | 
 | Project Roadmap | 
 | ================ | 
 |  | 
 | The project roadmap should serve as a high-level, visual summary of the | 
 | project's strategic objectives and expectations. | 
 |  | 
 | If built properly, the roadmap can be a valuable tool for several reasons. It | 
 | can help the project present its plan in a compelling way to existing and new | 
 | stakeholders, to help recruit new members and it can be a helpful resource the | 
 | team and community can refer to throughout the project's development, to ensure | 
 | they are still executing according to plan. | 
 |  | 
 | As such, the roadmap should contain only strategic-level details, major project | 
 | themes, epics, and goals. | 
 |  | 
 |  | 
 | Release Plans | 
 | ============== | 
 |  | 
 | The release plan comes into play when the project roadmap's high-level strategy | 
 | is translated into an actionable plan built on specific features, enhancements, | 
 | and fixes that need to go into a specific release or milestone. | 
 |  | 
 | The release plan communicates those features and enhancements slated for your | 
 | project' next release (or the next few releases). So it acts as more of a | 
 | project plan, breaking the big ideas down into smaller projects the community | 
 | and main stakeholders of the project can make progress on. | 
 |  | 
 | Items labeled as ``features`` are short or long term release items that shall | 
 | have an assignee and a milestone set. | 
 |  | 
 | .. _`RFC template`: https://github.com/zephyrproject-rtos/zephyr/blob/master/.github/ISSUE_TEMPLATE/rfc-proposal.md | 
 | .. _`Zephyr meetings`: https://github.com/zephyrproject-rtos/zephyr/wiki/Zephyr-Committee-and-Working-Group-Meetings |