summaryrefslogtreecommitdiffstats
path: root/toolkit/components/telemetry/docs/internals/review.rst
diff options
context:
space:
mode:
Diffstat (limited to 'toolkit/components/telemetry/docs/internals/review.rst')
-rw-r--r--toolkit/components/telemetry/docs/internals/review.rst144
1 files changed, 144 insertions, 0 deletions
diff --git a/toolkit/components/telemetry/docs/internals/review.rst b/toolkit/components/telemetry/docs/internals/review.rst
new file mode 100644
index 0000000000..80a3bd57de
--- /dev/null
+++ b/toolkit/components/telemetry/docs/internals/review.rst
@@ -0,0 +1,144 @@
+===========================
+Telemetry review guidelines
+===========================
+
+General guidelines for reviewing changes
+========================================
+
+These are the general principles we follow when reviewing changes.
+
+- *Be constructive.* Both reviewers and patch authors should be allies that aim to get the change landed together.
+- *Consider the impact.* We deliver critical data that is processed and used by many systems and people. Any disruption should be planned and intentional.
+- *Be diligent.* All changes should be tested under typical conditions.
+- *Know your limits.* Defer to other peers or experts where sensible.
+
+Main considerations for any change
+========================================
+
+For any change, these are the fundamental questions that we always need satisfactory answers for.
+
+- Does this have a plan?
+
+ - Is there a specific need to do this?
+ - Does this change need `a proposal <https://github.com/mozilla/Fx-Data-Planning/blob/master/process/ProposalProcess.md>`_ first?
+ - Do we need to announce this before we do this? (e.g. for `deprecations <https://github.com/mozilla/Fx-Data-Planning/blob/master/process/Deprecation.md>`_)
+
+- Does this involve the right people?
+
+ - Does this change need input from... A data engineer? A data scientist?
+ - Does this change need data review?
+
+- Is this change complete?
+
+ - Does this change have sufficient test coverage?
+ - Does this change have sufficient documentation?
+
+- Do we need follow-ups?
+
+ - Do we need to file validation bugs? Or other follow-up bugs?
+ - Do we need to communicate this to our users? Or other groups?
+
+Additional considerations
+=========================
+
+Besides the basic considerations above, these are additional detailed considerations that help with reviewing changes.
+
+Considerations for all changes
+------------------------------
+
+- Follow our standards and best practices.
+
+ - Firefox Desktop:
+
+ - :ref:`The Mozilla coding style <Coding style>`
+ - `The toolkit code review guidelines <https://wiki.mozilla.org/Toolkit/Code_Review>`_
+
+ - Mobile:
+
+ - `Android/Kotlin code style <https://kotlinlang.org/docs/reference/coding-conventions.html>`_
+ - `iOS/Swift code style <https://github.com/mozilla-mobile/firefox-ios/wiki/Swift-Style-Guides>`_
+
+- Does this impact performance significantly?:
+
+ - Don't delay application initialisation (unless absolutely necessary).
+ - Don't ever block on network requests.
+ - Make longer tasks async whenever feasible.
+
+- Does this affect products more broadly than expected?
+
+ - Consider all our platforms: Windows, Mac, Linux, Android.
+ - Consider all our products: Firefox, Fennec, GeckoView, Glean.
+
+- Does this fall afoul of common architectural failures?
+
+ - Prefer APIs that take non-String types unless writing a parser.
+
+- Sanity checking:
+
+ - How does this behave in a release build? Have you tested this?
+ - Does this change contain test coverage? We require test coverage for every new code, changes and bug fixes.
+
+- Does this need documentation updates?
+
+ - To the :ref:`in-tree docs <Telemetry>`?
+ - To the `firefox-data-docs <https://docs.telemetry.mozilla.org/>`_ (`repository <https://github.com/mozilla/firefox-data-docs>`_)?
+ - To the `glean documentation <https://github.com/mozilla-mobile/android-components/tree/master/components/service/glean>`_?
+
+- Following up:
+
+ - Do we have a validation bug filed yet?
+ - Do all TODOs have follow-up bugs filed?
+ - Do we need to communicate this to our users?
+
+ - `fx-data-dev <https://mail.mozilla.org/listinfo/fx-data-dev>`_ (Main Firefox data list)
+ - `firefox-dev <https://mail.mozilla.org/listinfo/firefox-dev>`_ (Firefox application developers)
+ - `dev-platform <https://lists.mozilla.org/listinfo/dev-platform>`_ (Gecko / platform developers)
+ - `mobile-firefox-dev <https://mail.mozilla.org/listinfo/mobile-firefox-dev>`_ (Mobile developers)
+ - fx-team (Firefox staff)
+
+ - Do we need to communicate this to other groups?
+
+ - Data engineering, data science, data stewards, ...?
+
+Consider the impact on others
+-----------------------------
+
+- Could this change break upstream pipeline jobs?
+
+ - Does this change the format of outgoing data in an unhandled way?
+
+ - E.g. by adding, removing, or changing the type of a non-metric payload field.
+
+ - Does this require ping schema updates?
+ - Does this break jobs that parse the registry files for metrics? (Scalars.yaml, metrics.yaml, etc.)
+
+- Do we need to involve others?
+
+ - Changes to data formats, ping contents, ping semantics etc. require involving a data engineer.
+ - Changes to any outgoing data that is in active use require involving the stakeholders (e.g. data scientists).
+
+Considerations for Firefox Desktop
+----------------------------------
+
+- For profiles:
+
+ - How does using different profiles affect this?
+ - How does switching between profiles affect this?
+ - What happens when users switch between different channels?
+
+- Footguns:
+
+ - Does this have side-effects on Fennec? (Unified Telemetry is off there, so behavior is pretty different.)
+ - Is your code gated on prefs, build info, channels? Tests should cover that.
+ - If test is gated on isUnified, code should be too (and vice-versa)
+
+ - Test for the other case
+
+ - Any code using `new Date()` should get additional scrutiny
+ - Code using `new Date()` should be using Policy so it can be mocked
+ - Tests using `new Date()` should use specific dates, not the current one
+
+ - How does this impact Build Faster support/Artifact builds/Dynamic builtin scalars or events? Will this be testable by others on artifact builds?
+ - We work in the open: Does the change include words that might scare end users?
+ - How does this handle client id resets?
+ - How does this handle users opting out of data collection?