Skip to content

Commit a56049f

Browse files
authored
doc: add minutes for mini-summit Jan 27 2022 (#114)
Signed-off-by: Michael Dawson <mdawson@devrus.com>
1 parent f21ea05 commit a56049f

1 file changed

Lines changed: 284 additions & 0 deletions

File tree

meetings/summit-jan-2022.md

Lines changed: 284 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,284 @@
1+
# Next-10 Mini Summit 27 Jan 2022
2+
3+
## Links
4+
5+
* zoom: <https://zoom.us/j/99950131676>
6+
* stream: <http://www.youtube.com/watch?v=8t6HZfBZck0>
7+
* issue: <https://github.com/nodejs/next-10/issues/108>
8+
9+
## Attendees
10+
11+
* Michael Dawson (@mhdawson)
12+
* Robert Nagy (@ronagy)
13+
* Christophe El-Khoury (@christopheEK)
14+
* Michael Zasso (@targos)
15+
* Manish Kumar (@manishprivet)
16+
* Joe Sepi (@joesepi)
17+
* Wes Todd (@wesleytodd)
18+
* Jean Burellier (@sheplu)
19+
* Beth Griggs (@BethGriggs)
20+
* Ruy Adorno (@ruyadorno)
21+
* Tierney
22+
* Richard Lau (@richardlau)
23+
* Matteo Collina (@mcollina)
24+
* James
25+
* Ethan
26+
* Bradley Farias
27+
28+
## Agenda
29+
30+
* Intros
31+
* Modern HTTP - 90 mins
32+
* Break 15 mins
33+
* Documentation - 90 mins
34+
* Break 15 mins
35+
* Wrap up and capture next actions
36+
37+
## Minutes
38+
39+
### Modern HTTP
40+
41+
#### Key questions to answer
42+
43+
1. Is the state of our http implementations good enough to ensure future success or are there things the project should be doing to improve them
44+
2. If the answer to 1) is that significant improvements are needed, document specific things that we should do to improve the current state.
45+
46+
#### Discussion
47+
48+
* Matteo
49+
* HTTP 1 and HTTP 2
50+
* HTTP 1 API - has new http parser which is better than what we had (llhttp), challenges is that
51+
previous design decisions hold it back
52+
* HTTP 2 API a bit more modern but don’t have many people maintaining it, and has a number
53+
of issues, but they don’t seem to be being progressed.
54+
* On client side, one of the major issues is performance. Old request module to Undici, 50%
55+
reduction in latency. 750k weekly downloads.
56+
* Ronag
57+
* quite wide HTTP1, HTTP2, HTTP3, client server side, good to break up discussion
58+
59+
* HTTP 1/2/3
60+
* We need http1 and probably do for a while
61+
* Do we need http2 or should we just focus on http3?
62+
* Wes express still does not support it, not enough interest from user, maintainers. At netflix
63+
as a user don’t care, don’t think we really use it and abstracted away. My take is
64+
* Matteo -> GRPC stack uses it to avoid binary addon.
65+
* Wes, not sure GRPC is enough to prioritize unless GRPC team gets more engaged and
66+
drives specific needs.
67+
* HTTP 2 - no major features, but bug fixing is important
68+
* HTTP 1 - Foundation for future application development (ex GraphQL)
69+
* Ronag, any plans to move GRPC over to HTTP2, James may happen but cannot count
70+
on that. Wes also depends on other platforms having HTTP3 support.
71+
* Ronag make HTTP 1 and HTTP 3 to be primary focus. ?
72+
* James, agree making HTTP 2 stable, HTTP 1 features stable as well, but APIs for using
73+
* Michael, different aspects protocols (1,2,3) and then the APIs that we use to support them
74+
* James, We had to change for HTTP2, but unfortunately HTTP3 changed things all over again.
75+
* have taken a step back socket api, looking to see if we can unify under one API.
76+
* Matteo, with respect to unified API we need to look at our users. Client/Server. Client typically modules authors who build on top of API. Server side target users are module users as well that build on top of API. On client, main request is put fetch in core which should be agnostic in protocol.
77+
* HTTP 2 in “maintenance mode” both protocol and API
78+
* HTTP 1 stable protocol, but innovation in API
79+
* HTTP 3 is the future need to plan in support
80+
* Client - Should Fetch be our focus?
81+
* Don’t want to think about protocols (1/2/3) etc.
82+
* They want good defaults that would perform well
83+
* James either want fetch or really low level API. Wes don’t want just fetch, may want something in the middle. Have looked at moving onto Got but could not due to perf issues. From Netflix would be using library interface on top of Fetch, unfortunately promise based APIs adds performance concerns. Ideally would not want to have to use low level APIs, instead the APIs provided by undici would be a better level.
84+
* Michael -> undici level, low level possible to be agnostic to HTTP 1/2/3. Matteo not an issue for undici.
85+
* James there are some complications like being able to survive switch of network
86+
* Wes, if interest is the problem, then driving from end-user perspective is the right way to go. Where we went wrong with HTTP is that there was nobody interested, so nobody interested in maintaining it.
87+
* James, disagree a bit, the reason it never really picked up due to IETF and the way browsers handled it. Browsers wanted it to be hidden so users would not have to know about it and IETF immediately moved on to talking about HTTP3 and then benefits from HTTP2 never materialized.
88+
* Michael, strategic to move to APIs where you don’t need to know what protocol is being used.
89+
* Wes, earlier comments were about having user focus versus protocol focus
90+
* James fact that people have to think about APIs is what has held people back.
91+
* Ronag, part of HTTP2 is that lots of people are on HTTP1 and have to use both.
92+
* Would like to have APIs that are similar on the server/client side
93+
94+
* Perfect world
95+
* Fetch
96+
* intermediate level
97+
* socket
98+
99+
* Matteo - undici
100+
* Client which can do request on single socket
101+
* Pool, same API as client (low level API) allows you to manage multiple sockets with some dispatching
102+
* Agent, same API as other 2 that supports more than one target destination, adds routing to the right pool
103+
* Need at least 2 of those if you want to generalize across protocols
104+
* API surface is very nimble, developer experience is layered on top of this
105+
* Ronag, would make sense to have undici as low level then ship Fetch on top
106+
* James he would look for socket API and then toolkit to build on top off
107+
* would like to see innovation on top of outside of Node.js ?
108+
* Ronag it comes back to the to be or not to be in core
109+
* does not matter so much where the work is done
110+
* Matteo, but does matter to state what we would support
111+
* James developer outside of Node core lets us develop faster, and then later we can pull them
112+
in once more stable.
113+
* Wes, the outside core then pull in later is being pursued in a few places, that is great. Maybe part of 10 year plan is to go from experiment to being part of core. Should invest in that process. Not a problem to be in a vendored in state for a long time. Is important that the project provide code of conduct support, etc. from Node.js project while letting projects innovate quickly. Path for external library to getting bundle with core path/
114+
* Michael Z - could include undici without exposing in core to support a fetch implementation
115+
* Bradley, need to be careful. If exposed in node core then automatically forces stability on API.
116+
117+
* Michael key goal, APIs that end users don’t need to know about HTTP protocol.
118+
* only introduce new APIs that can support all HTTP protocols
119+
* be able to surface low level details, need to ship safe defaults but allow configuration
120+
* Wes, providing some options that configure the high level API, is a good API/layering choice
121+
* Fetch + some little tweakables would hit the 99% case
122+
* James for QUIC/http there will always be need for QUIC specific api, other protocols build
123+
on top of QUIC in addition to HTTP 3
124+
* Tierney -> path forward for undici to consume it, if not QUIC 3 is not exposed. If external then
125+
no, but more flexibility if we
126+
* Bradley, like idea of being able to pull in without exposing for internal use. Has been used to
127+
slow things down. James if no immediate use then people have resisted.
128+
* Bradley we have talked about modules that have extra privileges.
129+
* Matteo, wanted to say if we want to use undici to validate apis but then we need to expose
130+
some way to validate.
131+
132+
* Wes
133+
* most people will likely use node-fetch etc. as they would likely never use fetch.
134+
* should focus on APIs that library authors can use to build fetch compatible APIs
135+
Bradley
136+
* For many apps, for requests don’t need more than fetch. For servers yes. Main reason people want fetch is that usability is much more difficult to learn to use properly. For example undici is much harder to use even though it’s a great improvement
137+
* Ethan agree that there is a need for fetch base on what he’s seen people struggling with
138+
* James agrees we need fetch in core.
139+
* Matteo, from marketing/position we have to have fetch in.
140+
Bradley
141+
* least common denominator API works the same even if less features
142+
* more specific features are exposed in intermediate (variants for protocols).
143+
* Michael undici approach is single API, that tries to cover/support all protocols.
144+
* James at intermediate level can result in surprises if support is not there.
145+
146+
* socket (likely to be very protocol dependent, tcp, quic) (this might be separate from HTTP priority)
147+
148+
* Matteo, on server side existing APIs have not been as big an issue
149+
150+
* socket (likely to be very protocol dependent, tcp, quic) (this might be separate from HTTP priority)
151+
Client
152+
* Here is some previous discussion on the server apis: <https://github.com/nodejs/web-server-frameworks/issues/60>
153+
154+
#### Summary of what we agreed
155+
156+
* Longer term goal
157+
* http protocol independent (support http1,2,3)
158+
* client/server APIs should be consistent and allow easy integration
159+
* Things like piping out from client API to server APIs should be easy
160+
* Client - need two levels
161+
* Fetch level (and should be Fetch)
162+
* intermediate level (undici) - client only
163+
* Server - need
164+
* integration with client APIs is important
165+
* high level, here is request give me response
166+
* Specific goals
167+
* Ship Fetch implementation as experimental in 18
168+
* built on top of undici without exposing undici
169+
170+
* Robert, we may have too many APIs in undici, may want to filter down. Goal is to have something like undici on both server/client.
171+
172+
### Documentation
173+
174+
#### Key questions to answer
175+
1)Is the state of the current documentation good enough to ensure future success or are there things the project should be doing to improve them
176+
2) If the answer to 1) is that significant improvements are needed, document specific things that we should do to improve the documentation.
177+
178+
#### Discussion
179+
180+
* Joe
181+
* Rich left a good set of things for us to discuss
182+
* Other aspect is integration of to website docs
183+
184+
* Some notes from Rich to start:
185+
* Search functionality (or is Google/Bing/Yandex/etc. sufficient?)
186+
* Automated generation from JSDoc in a consistent format (or is JSDoc not something that provides all the information we need?)
187+
* Separation of "here's the API reference" and "here's a breezy explanation of how to use the thing" (or maybe it's good that they appear in the same place?)
188+
* More consistent layout/organization and editorial voice
189+
* Is the one-page-per-module approach working? Or should we adopt something more like an MDN approach where it's one-page-per-function? (I like our current approach but I find it hard to imagine the alternative so I might not be comparing it against anything.)
190+
* Stuff is in surprising places if you don't know where to look. If I see `process.stdin.unref()` in code, I'm going to look in the `process` doc. It won't be there. If I know a thing or two about how Node.js works under the hood (which I shouldn't have to in order to use the docs), I might look in `streams` where I will also have no luck. Maybe I'd eventually find it in `net` and wonder why I had to go on the wild goose chase.
191+
* Let us please get rid of the knowledge base. Leave tutorials to the community. There are some things in the knowledge base that should be preserved on the site. Let's move them to the docs.
192+
* The team splintering of nodejs.org (website team), docs in core (core team), and nodejs.dev (website redesign team) is a problem. (And yet, is it?)
193+
194+
* Bradley
195+
* Right now feel page per module is getting unwieldy. Especially since we have pages which
196+
are not related to modules.
197+
* If you have single pages per API, it also lets you link from many places
198+
199+
* Richard has different scopes
200+
* API documentation - part of core repo
201+
* Knowledge base is part of website
202+
* As part of builds we have json doc,
203+
* End user formatting, stuff on top, should be it be layered differently
204+
205+
* Documentation Categories
206+
* API Documentation
207+
* Guides (knowledge base), getting started, debugging, profiling etc.
208+
* <https://nodejs.org/en/docs/guides/>
209+
* Learning path
210+
* Learn (nodejs.dev) - <https://nodejs.dev/learn>
211+
* Release Notes/Change logs <https://github.com/nodejs/node/tree/master/doc/changelogs>
212+
* Internal documentation (contributing, etc) <https://github.com/nodejs/node/tree/master/doc>
213+
* Roadmaps/efforts
214+
* Security model, processes etc.
215+
* Operations - Observability/tracing/monitoring
216+
* Deployment in production
217+
* How to upgrade between versions
218+
* How to install Node.js
219+
220+
* Existing docs, style guide
221+
222+
* How are they built/delivered
223+
* Consistency across packages
224+
* Separating content from presentation would allow different presentations, help make them
225+
Consistent. Writing in something like JSON would not be manageable.
226+
* What is out scope
227+
* JavaScript standard itself
228+
229+
* Prioritization
230+
* Priority 1
231+
* API Documentation
232+
* Release Notes/Change logs <https://github.com/nodejs/node/tree/master/doc/changelogs>
233+
234+
* Priority N
235+
* Guides (knowledge base), getting started, debugging, profiling etc.
236+
* <https://nodejs.org/en/docs/guides/>
237+
* Learning path
238+
* Learn (nodejs.dev) - <https://nodejs.dev/learn>
239+
* Release Notes/Change logs <https://github.com/nodejs/node/tree/master/doc/changelogs>
240+
* Internal documentation (contributing, etc) <https://github.com/nodejs/node/tree/master/doc>
241+
* Roadmaps/efforts
242+
* Security model, processes etc.
243+
* Operations - Observability/tracing/monitoring
244+
* Deployment in production
245+
* How to upgrade between versions
246+
* How to install Node.js
247+
248+
* Tierney have not been able to maintain guides over time
249+
* would be good to focus on APIs for now
250+
* we should keep learn
251+
* syndicate guides from community
252+
253+
#### Summary of what we agreed
254+
255+
* Focus on
256+
* API documentation
257+
* Release documentation
258+
* Syndicate everything else guides, etc.
259+
* lower priority than improving in focus area
260+
* grandfather some good content
261+
262+
* APIs docs
263+
* What is in scope
264+
* Node.js additions on top of JavaScript
265+
* API specs
266+
267+
* Key things to work on
268+
* Documentation documentation strategy
269+
* Document metadata and what it supports
270+
* Consistency across packages
271+
* Document metadata and what it supports
272+
* Add examples
273+
* Every method has example
274+
* Example is in-line
275+
* More complete explanation for methods
276+
* Better links between different concepts
277+
278+
* Next actions
279+
* Document documentation strategy/get consensus
280+
* Document metadata and what it supports
281+
* Add examples
282+
* Every method has example
283+
* Example is in-line
284+
* Explore how we would validate that examples exist

0 commit comments

Comments
 (0)