Skip to content

Latest commit

 

History

History
240 lines (185 loc) · 7.35 KB

ISSUE-LABELLING.md

File metadata and controls

240 lines (185 loc) · 7.35 KB

libp2p issue labelling taxonomy

r0, 2020-01-04; author: @raulk

Table of contents

Motivation

This document describes the issue/ticket labelling taxonomy that is being adopted in the libp2p project.

This taxonomy will be initially rolled out within the domains of go-libp2p, where it'll be trialled, adjusted and iterated upon. We hope it'll enhance navigability, searchability, discoverability and accessibility of issues, features, demands, requests, discussions, etc. on a path towards better organisation, structure, and, ultimately, accountability within, between and towards the community and implementation teams.

"Why is this important?", you may ask. A taxonomy is the basic building block that makes it possible to create workflows for triaging, discussing, development, and ultimately, delivery. In fact, issue classification is only the start of a set of methods and tools we desire to ship to help facilitate ecosystem alignment, foster collaboration, bolster transparency, streamline planning, and ultimately, reduce friction to keep the libp2p community engaged, vibrant, and excited about what's to come.

We are fans of iterative experimentation. In the next weeks/months, as we roll this out and adjust it, we will gather feedback and input from stakeholders across the ecosystem.

Our endgame is to converge on a system that pleases all language implementers, so that we can normalise this taxonomy across all language repos, and plan features and changes in total inter-alignment. We are convinced that by creating a cohesive and seamless experience across libp2p implementations, we'll unlock tremendous value for our beloved downstream users and developers.

Global labels

These labels are an exception to the taxonomy below, but for a good reason: they are often searched by new contributors looking to get initially involved in a project, and are default across GitHub. (See GitHub help for details.)

  • bounty
  • help wanted
  • good first issue

Descriptive labels

These labels describe some aspect of the issue itself. They can generally be set when the issue is first filed, or as discoveries are made. We will adopt tools that allow submitters to set these labels.

Functional area (area/)

Defines the functional area of the libp2p stack an issue, report, question, etc. addresses. These labels refer to abstraction layers; to contextualise the issue to a specific implementation, also add a "component" label.

  • area/conn-manager
  • area/connection-bootstrapping
  • area/nat-traversal
  • area/peer-routing
  • area/content-routing
  • area/discovery
  • area/identity
  • area/multiplexing
  • area/negotiation
  • area/peerstore
  • area/pubsub
  • area/relay
  • area/security-channel
  • area/transport
  • area/universal

Component (comp/)

Specifies the actual component (implementation) an issue refers to. Used when it's clear that an issue affects one or many specific components.

  • comp/floodsub
  • comp/gossipsub
  • comp/kad-dht
  • comp/noise
  • comp/quic
  • comp/secio
  • comp/tcp
  • comp/tls
  • comp/webrtc
  • comp/wss
  • comp/yamux

Kind (kind/)

Describes the nature of the issue.

  • kind/bug
  • kind/test
  • kind/tracking-issue
  • kind/question
  • kind/enhancement
  • kind/architecture
  • kind/discussion

Difficulty (dif/)

Subjectively estimates the difficulty of resolution of an issue, based on prior expertise about libp2p and its constructs, p2p networking, systems programming, etc.

Values and calibration guidance:

  • dif/trivial: Can be confidently tackled by newcomers, who are widely unfamiliar with libp2p.
  • dif/easy: A prexisting libp2p user should be able to pick this up.
  • dif/medium: Prior experience in having developed libp2p modules is likely helpful.
  • dif/hard: Suggests that having worked on the specific component affected by this issue is important.
  • dif/expert: Requires extensive knowledge of the history, implications, ramifications of the issue, as well as deep understanding of the libp2p stack and experience with systems and network programming.

Effort (effort/)

Estimates the amount of work. This axis is distinct to the complexity, e.g. something can be easy but require a lot of work, or vice versa.

Values and calibration guidance:

  • effort/hours: one or multiple hours.
  • effort/days: one or multiple days.
  • effort/weeks: one or multiple weeks.

Impact (impact/)

Contextualises the impact, and therefore the perceived/derived severity, of the issue.

  • impact/regression
  • impact/api-breakage
  • impact/quality
  • impact/dx
  • impact/test-flakiness

Topic (topic/)

Classifies issues pertaining to particular themes. Topics can be created to refer to epics, larger bodies of work, or ad-hoc endeavours.

  • topic/interoperability
  • topic/docs
  • topic/infra

Execution labels

These labels describe some aspect of the execution on the issue. These labels are dynamic; they change as a result of planning, analysis, scoping, and generally applying the development workflow. They are usually set by maintainers.

Priority (Pn)

Indicates the current implementation priority; used for planning and roadmapping purposes.

  • P0: Critical.
  • P1: High.
  • P2: Medium.
  • P3: Low.

Need (need/)

Surfaces observations and facts about issues, facilitating progress to be made.

  • need/contributor
  • need/participation
  • need/decision
  • need/triage
  • need/analysis
  • need/author-input
  • need/team-input
  • need/community-input
  • need/review

Status (status/)

Marks the current status of the issue.

  • status/done
  • status/deferred
  • status/in-progress
  • status/blocked
  • status/inactive
  • status/ready
  • status/rotten

Implementation plan

  1. Create labels on go-libp2p declaratively.
  2. Write script to bulk transfer issues from inner repos to top-level go-libp2p repo via the transferIssue GraphQL mutation, attaching the appropriate area/component labels during the process.
  3. Disable issue tracker in inner repos.
  4. Triage all issues to assign the remaining labels.
  5. Profit! We can finally start implementing workflows and using tools like ZenHub.

Inspiration