← Blogs
Blog · English

Recommended Issue/PR Structure to Strengthen Express Organization

Proposal

A matching algorithm that connects every issue/pr to the right person

Definitions:
pr = pull request
entry = issue or pull request

Why a structure matters

Open source grows fast. With growth comes noise. In the Express organization, new issues and pull requests arrive every day. Without a shared structure, good work gets buried. Contributors lose time searching for a useful task. Maintainers struggle to route work to the right person.

A small structure fixes most of this. Every entry gets a label. Every label has a parent. The long flat list becomes a small map. When you open an entry you first find its area, then its detail.

The label tree is alive

Labels are grouped into a few clear branches. Each branch holds a family of related topics. This keeps the tree short and easy to read.

  • community
    • governance
      • membership
      • team membership
    • meetings
      • meeting notes
      • agenda
      • scheduling
    • working group
      • perf group
  • performance
    • benchmarking
    • load testing
    • profiling
    • observability
  • maintenance
    • ci
    • tooling
    • code quality
  • documentation
    • readme
    • license
  • issue kind
    • bug
    • feature
    • question
The main branches of the recommended label tree

The tree is not static. It grows through a simple loop. An AI reviews every issue and proposes labels that fit. A moderator then decides. Approved proposals join the tree. Rejected ones disappear. Nothing joins without a human decision, so the tree stays small and honest.

AI proposes labels Moderator decides Approved joins the tree
Moderator decides Rejected is discarded
How a new label enters the tree

What the labels mean

A label should tell a story in one glance. The parent gives the area. The label gives the detail. Here are a few examples from the tree.

LabelParentWhat it means
benchmarkingperformanceCompare how fast the server runs
meeting notesmeetingsRecord of what the group decided
load testingperformanceTest the server under heavy traffic
code qualitymaintenanceKeep the codebase clean and clear
licensedocumentationState how the project may be used
perf groupworking groupThe performance working group

Skills are maintained too

Labels describe issues. Skills describe people. A skill shows what a contributor knows, such as benchmarking or profiling. Skills also grow through AI, but in a different way.

An optimization run reviews the whole skill tree from time to time. It can merge two similar skills into one. It can rename a skill. It can move a skill under a better parent. Every change carries a short reason. Every step is shown live while it happens, so a human can watch and stop the run at any moment.

Merge similar skills Rename a skill Move under a better parent
What a skill optimization run can do

Matching people to work

Labels and skills alone are not enough. The real goal is to connect each issue to the person who should look at it. This is where the matching algorithm helps.

The profile

Every contributor has a profile built from their past behavior. The profile records the skills they showed and the repos where they showed them. Nothing is guessed. Everything comes from real work.

Time and place matter

Recent work weighs more than old work. Work inside the same repo weighs the most. Work in a sibling repo inside the same organization weighs a bit less. Work outside the organization weighs the least. This keeps every recommendation local and honest.

How much each source of evidence counts toward a match

The algorithm

The core ranking is pure data. First the issue text is matched to the skill tree. Then each profile is compared with those skills. The result is a short ranked list of people who can help. AI is used only for the final choice between the top few names. This keeps the system fast and cheap while staying accurate.

Roles follow behavior

A contributor who writes code is suggested as an implementer. A contributor who reviews and discusses is suggested as a reviewer. The role comes from what the person actually does, not from a guess.

1.0
Same repo
0.6
Same organization
0.3
Outside
The score in plain math
score(d, e) = skillMatch(d, e) + engagement(d, e) + volume(d)
skillMatch(d, e) = Σk ∈ S(e) Σr ∈ R(d, k) A(d, k, r) × w(repo(e), r)
A(d, k, r) = A0(d, k, r) × e−λΔt , λ = ln 2 ÷ 365
w(repo(e), r) = 1.0 if r is repo(e) , 0.6 if same owner , 0.3 otherwise
engagement(d, e) = 2 if d wrote e , 1 if d commented , 0 otherwise
volume(d) = min(commits(d), 20) ÷ 20
Rank every contributor, keep the top few, and let AI pick the final role from them.

The first runs tell a story

A small pilot on two real repos shows the shape of the data. In three months the express repo produced 104 issues and pull requests. The perf group repo added 84 more over its lifetime. From these 188 entries the system learned 203 skills and 625 contributor profiles. The label tree now holds 133 labels.

RepoWindowIssuesPull requests
expressjs/expressLast 3 months1391
the perf group repoAll time4935
203
Skills learned
625
Contributor profiles
133
Labels in the tree

A real example

Here is a real open issue from the express repo. The steps below show how the issue moves through the system.

Step 1 The issue
expressjs/express #7391 the body parser library fails open on an invalid limit value, a tracked CVE
Step 2 Skills matched
Security Dependencies Node.js Express
Step 3 Profiles ranked
UlisesGasconreviewer
13.6
dougwilsontop pick
8
wesleytoddreviewer
8
Step 4 The suggestion
A security minded reviewer first, with the long time maintainer close behind
How issue #7391 becomes a short list of people

The ranking took about 12 milliseconds and used no AI to order the list. The AI final choice between the top names took about 1 second.

A simple flow for every issue

When a new issue arrives the flow stays the same. The text is matched to the skill tree. Each profile is compared with those skills. The result is a short ranked list. A moderator reviews the label proposals. The issue finds the right eyes and the contributor finds the right task.

Labels make work findable. Profiles make routing fast. The issue finds the right eyes and the contributor finds the right task.

Conclusion

This draft gives the Express organization a common language. The label tree grows with human approval. Skills stay clean with AI help. Profiles and a simple algorithm route every issue to the right person. The structure is simple enough to adopt today and strong enough to grow with the organization.

Proposal for the Express organization. Based on a pilot on expressjs/express (last 3 months) and the performance working group repo (all time).