$customHeader
Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 18 Next »

This is still work on progress

Component/Feature - Attributes

Note: I might use component/feature interchangeably, I will stick with the component, essentially I am referring to a building block of our product.

Intro

Design is an iterative process, and thus product is expected to be always in a continus process of change. A change in product is not only in regard of its features but also in regard of its characteristics and this document focus is on the later.

What is the goal of this

  • To define how to measure product characteristics

  • To provide a mechansim to measure where a component/feateur of the product is on our quality bar.

  • To detect/predict weakness or area of imporvment in component(s) of the product.

  • To suggest list of attributes which can help in mesuring quality of product component(s).

Open Questions:

  • Data Sources: Making data drivin decision is easy, but getting the data might not be that simple for some attributes, mainly usage.

  • What is our quality bar. Does this document needs to define it, or shuold it rely on external resources, like other estabilied OEPs, and in case such reference doesn’t, what to do about that…

  • What what is the smallest unit or building block of the product, and how does it relate or mapped to the techical product. (While I try to call it componenet, no matter if we agree about the name/notion it would be important to explicity define it, and list it… Can it be taken from mindmap, and if yes then at which level

    • Do We need to group them per technical context to group them per technical core it would simplify the measurability of attributes,( i.e. you measure an attribue of techncial core componenet, then it would affect all product compoenent that uses that technical core compoenent)

  • In case when different stackholders have different priority, or would optimize for different attribute, how can that be resolved?

    • For example enterprise scale provider of Open edX might not be concern if a change/featuer increase maintainability cost in terms of (human or/and IT resources), because they can afford that however other porivder would find it a blocker.

  • How does this relate to different use cases (ref Use Cases and MindMaps )

  • How does this relate to different use bases ( small scale, higher scale…etc)

In order to convert product components into artifact we propose to create a list of attributes, that would belong to product componenets. Just as Open edX Proposal #57: Core Product is defining what are the componenets of the product are, this is defining their attributes.

What do we mean by an Attribute:

An attribute can be though of as a signal, a character of the component, or for the product as a whole. As the product is a compostion of its componenets, its attrubtue or characteristics are a composistion of its every componenet. Simply put on other words, an attribute can be defined eitehr at the compoenent or level or at the product level.

Characteristics of Attributes

Just as each compoenet product has a collection of attributes, each of its attribute can be defined as its attributes, or meta attribute, those are just

An attribute must be measurable so that we can define its criteria. We should aim for the quantitative nonsubjective type of data. But it might not be always the case; i.e. what does the UX look like? might be a subjective opinion, in such cases, we can try to revert to the census agreement or/and for the subject matter expert.

  1. Attributes might conflict with each other, for example optimizing for modularity might affect the performance or/and maintainability.

    1. We might try to overcome this by setting the importance of each attribute relative to other attributes.

    2. Rearchitecture: Can we rebuild it in a way that is try to take the best of each attribute…does the overall cost worth the outcome

  2. When developing new features/components it's important to take the previous point into consideration, i.e. we should strive to that adding a new component does not affect attributes of other components in a negative way, unless there is a strong need to. i.e. Adding more MFEs improves the modernity of UX but decreases the efficacy/performance of the dev tool.

  3. Some attributes might have well-defined OEP, which is a good thing, in that case, we don’t want to redefine that OEP but rather utilizes for PoV

Component Attributes

Below are example of suggested list of attribute.

  1. Performace

  2. Modernity

  3. a11y

  4. i18n/l10n

  5. Modularity

  6. Maintainability

  7. Adoption Rate

  8. Usability

  9. Scalability

  10. Developer Friendliness

  11. Can it be deployed and enabled in the stable releases? (cf MFEs)

  12. Is development active on it?

  13. How many different community members depend on it? Is there collaboration on it?

  14. Documentation - does it exist? Is it up to date?

  15. User awareness - do users know about it?

 Old suggested list

A suggested list of Attributes:

This list is not complete, nor is it accurate, it's still not meant to be consumable yet

  1. Performance/Effieciy

    1. Importance: 8/10

    2. Goal: To make sure our product performs well, is efficient, and doesn’t consume more resources than it needs to

    3. Measured by:

      1. Speed/Core web vitals

    4. criteria:

      1. Takes X seconds to load at least.

      2. doesn’t load or request resources that it needs to not use.

  2. Modernity

    1. Importance: 8/10

    2. Goal: To ensure it looks modern

    3. Measured by: This is a subjective signal

  3. A11y: Already has its own OEP

    1. Goal: To ensure it complies with our standard of A11y

    2. Measured by: Lighthouse, subject matter experts

  4. Modularity

    1. Importance: 7/10

    2. Goal: So that our product can be extended, without the lowest effort possible.

    3. Measured by:

      1. Need to be forked (Boolean)

  5. Maintainability

    1. Importance: 7/10

    2. Goal: To ensure a particular component doesn’t take too much time and hassle to be maintained. This might be relative, that is a component that provides many functionalities would expect to have high maintenance. On the other hand, if take a relatively high time and is getting complicated that it would be subject to Rearchticure.

    3. Measured by: A ratio of how long it takes to maintain it / How impactful is it

  6. Adoption Rate

    1. Importance 5/10 Should be

    2. Goal: An important metric to influence future decisions; i.e. a component with a low adoption rate but with high maintainability might be subject to a lower tier. On the other hand, a component with an increasing adoption rate might be subjected to a higher tier… However, the adoption rate might be low because it's not useable, or is not discoverable.

    3. Measured by:

      1. Learner/Author: Average usage among the instances

      2. Instance: (Total of instances using it / Total Instance)

  7. Usability

    1. Importance: 8/10

    2. Goal: To ensure it's easy to use, not too complicated,

    3. Measured by:

      1. A number of steps are needed to use it.

      2. Does its target audience has the leverage to use it? i.e. Do the course author needs support from the operator?

      3. How easy is it to discover that such a feature exists?

  8. i18n/l10n

    1. Importance: 8/10

    2. Goal: To ensure a component complies with our minimum

    3. Measured by:

      1. Number of languages it supports

      2. Translation completion rate.

      3. How easy is it to add an unsupported language?

      4. Is it customizable in terms of local requirements?

  9. Scalability

    1. Importance 6/10

    2. Goal: How easy is it to use for different use cases or installation sizes?

    3. Measured by: (Is subjective)

  10. Developer Friendliness

    1. Importance: 7/10

    2. Goal: How easy is it to develop, install/set up, and maintain

  11. Component health/ Product health

    1. Goal: Is a meta attribute that can be calculated relative to all other attributes per component, then we can take that index per component to calculate overall product health.

    2. Measured by: Come up with a math equation all the above attributes into consideration,

      1. Component health Ch = Sum of (attribute[i] * importance[i]) / Total attributes; where a is attribute

      2. Product health Ph = Sum (compoenet[c] * importance[c] / total components ) ; where c is componenet

        1. I assume some components might be more important than others.

  • Act: Based on the above signals we would define the status of a component, and we can then have a systematic way of suggesting action items. To ultimately improve the overall healthiness of the product.

  • Map: We should strive to map the current weak points and pain points of the product to its corresponding attribute, if a common weak/pain point doesn’t have an attribute that measures it, then try to create it.

  • Prevent: Try to find common attribute deficiencies among components, i.e if a particular attribute is usually low among many components, then why did we fail at this, do we need to change something in our workflow?

Refs

  • No labels