|
| 1 | +# ADR #306: Performance Working Group |
| 2 | + |
| 3 | +## Status |
| 4 | + |
| 5 | +Proposed |
| 6 | + |
| 7 | +## Submitters |
| 8 | + |
| 9 | +- @wesleytodd |
| 10 | + |
| 11 | +## Decision Owners |
| 12 | + |
| 13 | +- @expressjs/express-tc |
| 14 | + |
| 15 | +## Context |
| 16 | + |
| 17 | +Express has traditionally taken a very lax approach to performance. Historically this has meant poor outcomes with |
| 18 | +and lack of visibility around how changes impact performance. The goal of this working |
| 19 | +group is to centralize discussion so the whole ecosystem of packages can benefit from targeted performance work. The |
| 20 | +scope of this WG would be all active packages in the `expressjs`, `pillarjs` and `jshttp` orgs with an initial focus on |
| 21 | +the ones which are direct dependencies of `express` itself. |
| 22 | + |
| 23 | +**Why do we need a working group?** |
| 24 | + |
| 25 | +The current state is we have many open PRs, in flight initiatives, and planned future work. With a loose approach we |
| 26 | +can easily have duplicated work, conflicting approaches, or focus on the wrong outcomes. By giving this WG scope over |
| 27 | +this we can centralize the discussion and plans so that we unlock better and faster work in the individual packages. |
| 28 | + |
| 29 | +Additionally, there will be continued long term work to monitor and maintain the tooling. The WG structure gives a clear |
| 30 | +place for users, contributors, and other interested parties to go so it is less difficult to find across the many org's |
| 31 | +and repositories the project owns. |
| 32 | + |
| 33 | +## Decision |
| 34 | + |
| 35 | +Similar to the Security WG, we will setup a new repo (expressjs/perf-wg) and corresponding plan of action. The WG will |
| 36 | +be delegated responsibility for driving concensus on initiatives within scope. This group will have three primary goals: |
| 37 | + |
| 38 | +1. Organize the effort. We want to make sure we are not rebuilding the same things or having the same disucssions in |
| 39 | + many package repos at once. |
| 40 | +2. Provide and maintain tooling for all the packages/repos to produce reliable performance metrics and benchmarks. |
| 41 | + Examples include: workflows, infra and guidelines on types of benchmarks |
| 42 | +3. Proritize and execute performance improvements across the packages. These do not need to be done *by* the members of |
| 43 | + the WG, but it would be good if we could get reviews by the team we will setup to ensure folks with most experience |
| 44 | + can help address performance issues across the project. |
| 45 | + |
| 46 | +We will need to take a few actions to get this started: |
| 47 | + |
| 48 | +1. Create a new `perf-wg` repo |
| 49 | +2. Create teams: `@expressjs/perf-wg`, `@pillarjs/perf-wg`, `@jshttp/perf-wg` |
| 50 | +3. Write charter/goals doc in the new repo |
| 51 | +4. Schedule a recurring (monthly) meeting |
| 52 | + |
| 53 | +### Relation to STF |
| 54 | + |
| 55 | +Lastly, this kicko-off work is being funded by the STF program. It is a part of our larger work around security |
| 56 | +improvements for the project. There are two parts of that program which fall under this WG's purview: |
| 57 | + |
| 58 | +1. Milestone 6: Monitor performance across Express and direct dependencies |
| 59 | + - Owner: @wesleytodd |
| 60 | + - Delivery Date: Dec 31, 2025 |
| 61 | + - Estimated Budget: €25,200 |
| 62 | +2. Milestone 9: Improve performance for Express and critical dependencies |
| 63 | + - Owner: @wesleytodd & @blakeembrey |
| 64 | + - Delivery Date: Jun 30, 2026 |
| 65 | + - Estimated Budget: €46,200 |
| 66 | + |
| 67 | +This funding does not mean the work can only be done by the owners, it just means that we are responsible for organizing |
| 68 | +and executing on the deliverables. This is our first attempt at doing a program like this, so feedback is welcome. |
| 69 | + |
| 70 | +## References |
| 71 | + |
| 72 | +- https://github.com/expressjs/express/pull/6129 |
| 73 | +- https://github.com/expressjs/express/issues/5998 |
| 74 | +- open-telemetry/opentelemetry-js-contrib#2437 |
| 75 | +- openjs-foundation/infrastructure#5 |
0 commit comments