Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
155 changes: 155 additions & 0 deletions rfcs/0229-mnemos-technical-readiness-levels.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,155 @@
# RFC - MnemOS Technical Readiness Level

MnemOS will for a long time have a wide variety of capabilities in a wide variety of different levels of "done".

## Overview

In order to better signal how far along an implementation or idea is, this RFC proposes establishing the following levels as somewhat of a standard:

* A: Production Level - paid support available
* B: Ready for general usage
* C: In wide usage
* D: In Implementation
* E: In Design/RFC/Experiment
* F: Early proposal
* G-W: Reserved
* X: Deprecated
* Y: Retired
* Z: Declined
Comment on lines +9 to +18
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

i'm not convinced that letters are the best naming scheme here. they do indicate an ordering of states, which is valuable, and give the states a very short name, which is also potentially valuable. however, it's not super obvious what they mean if documentation just states that something has TRL "A" --- the reader has to then go look at the docs to see what TRL "A" means. it might be better to indicate that the names of the TRLs should be used in documentation, rather than the letters, and the lettering/numbering scheme should be used primarily internally to this document?

so, for example, the docs for a component maybe should generally say:

Technical Readiness Level: Production-Ready (A)

rather than

Technical Readiness Level: A

what do you think?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah, I think there's something to be said about abbreviations being convenient for those in the know, and confusing for those that aren't.

We could also ditch the letters and give each level a punchy one word name to keep things easy to include and repeat.


These levels apply to a "component", which could be a crate, or a feature/module of a crate.

Although these levels exist to set and manage expectations, no contractual guarantee of support or stability exists
based on these ratings alone - if you need guarantees, please contact a MnemOS team member to establish a contractual
agreement. All other support is provided on a best effort and volunteer basis.

## Level Details

### A: Production Level - paid support available

This is the highest level of readiness, and is mature enough that "off the shelf" support for these components
is available from a member of the MnemOS team, including Long Term Support.

Developers should feel very comfortable using MTRL "A" components for any projects.

Components with an "A" MTRL:

* Strictly follow semver and have a version >= 1.0.0
* Have extensive documentation
* Have extensive testing
* Are widely used across the MnemOS project and platforms

### B: Ready for General Usage

This level is considered very mature, but may not be stable enough for active or long term support. These
components are likely mature enough that support or improvements could be made on a contract basis.

Developers should feel generally comfortable using MTRL "B" components for any projects. It is likely possible
to sponsor efforts to move a component from MTRL "B" to MTRL "A".

Components with a "B" MTRL:

* Strictly follow semver and have a version >= 1.0.0
* Have basic documentation
* Have some testing
* Are used across the MnemOS project and platforms

### C: In Wide Usage

This level is considered general mature, though it may have "rough edges" or may not be mature when used outside
of the way it is currently employed.

This level is intended for components that are already used and seem to be working fine, but have not yet been
thoroughly documented or tested for robustness. They are likely in use in one or more places in the MnemOS
repository, and likely have been mostly stable for a reasonable amount of time.

Developers should expect that components with a "C" MTRL are likely to work, but may require additional care
and verification, particularly when integrating into a new application or platform. It is likely possible to
sponsor efforts to move a component from MTRL "C" to "B" or "A".

Components with a "C" MTRL:

* May not strictly follow semver, and may have a version < 1.0.0
Comment on lines +52 to +72
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

it occurs to me that we have a TRL that's like, "follows semver, and is >1.0" and "doesn't follow strict semver, and is < 1.0". it might be worth having something for "follows semver strictly but is pre-1.0"?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's maybe worth noting that an MTRL C could be pre-1.0 and strictly follow semver.

Basically: if there is a meaningful stratefication you can think of here, happy to insert a C+/C- category, but I'd rather have a specific reason for stratefying them that way, rather than just to fill the 2x2 matrix of "follows semver" and "is >= 1.0".

1.0 and not-1.0 could also maybe be better described as "actually cares about version number and/or is published" and "lol whatever's at the tip of main goes".

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think that "follows semver" vs "may break at any time" and "follows semver, with frequent semver changes" vs "follows semver, is 1.0 and won't churn versions frequently" are maybe two different level distinctions, but honestly, 🤷‍♀️

* Have some documentation
* Have some testing
* May have some original design documentation
* Has numerous examples of usage in public code

### D: In implementation

This level is for things that should generally work, but may still have rough edges, and may not be suitable
for "production" usage. They may not be fully feature complete, and may not be "generalizable" to other
platforms or applications.

Developers should take care before using these components in new designs, unless they intend to assist in the
development or verification of these features.

It may be possible to sponsor the development of MTRL "D" components to a more mature level, if there are not
still open design questions.

Components with a "D" MTRL:

* May not strictly follow semver, and may have a version < 1.0.0
* May not have documentation
* May not have testing
* May have some original design documentation
* May be used in one or more places in the MnemOS project

### E: In Design/RFC/Experiment

This level is for components that are still being actively designed and implemented.

Developers should not generally use these components unless they are assisting with the design or implementation
of the component.

It may or may not be possible to sponsor work to complete MTRL "E" components.

Components with an "E" MTRL have no quality requirements.

### F: Early Proposal

This level is for speculative and imagined proposals. MTRL "F" components likely do not exist, though they may
be used as an "aspirational" goal or expressed future intent.

It may or may not be possible to sponsor work to complete MTRL "F" components.

Components with an "F" MTRL have no quality requirements.

### X: Deprecated

This level is for components that have been marked as deprecated, but have not yet been removed. Components
marked as Deprecated are not recommended for new designs.

It may be possible to sponsor work to continue long term support of deprecated components, depending on the reason
for deprecation, and MTRL prior to being moved to "X".

Components with an "X" MTRL:

* Should have a written explanation of the reason for deprecation
* May have a suggested upgrade/replacement path

### Y: Retired

This level is the "terminal state" for components marked as Deprecated. Retired components have been removed from the
MnemOS project, and documentation only exists for historical reasons. Retired components are not recommended for any
usage.

It is not likely to sponsor work to continue long term support for retired components.

### Z: Declined

This level is the "terminal state" for components that never reached MTRL levels A, B, or C, and were abandonded.
Components marked as "declined" were likely rejected due to unaddressable design issues, or some other disqualifying
reason.

It is not likely to sponsor work towards implementing declined components, without significant redesign and/or
reimplementation.

## Open questions:

* How do we handle "is this component good on this platform"?
* Just take the "highest level" from any platform?
* Make a matrix of components and platforms?
* Is it worth doing this now, when everything is D/E, with maybe C for the next long time?
* How do we handle "this component doesn't even make sense on this platform"?
* Should we have something else for tracking platform readiness (e.g. tier 1-3, like rustc?) compared to components/features? Is platform support just a "component"?