Devographics / Monorepo

Monorepo containing the State of JS apps
surveyform-sigma.vercel.app
Other
134 stars 52 forks source link

State of JS 2021 Outline Discussion #56

Closed SachaG closed 1 year ago

SachaG commented 2 years ago

(Outline WIP available here).

Deletions

The two big changes I'm planning are to remove the "JavaScript Flavors" and "Data Layer" sections.

JavaScript Flavors

TypeScript has almost 100x the usage of any other options, so setting aside a whole section for this category feels a bit superfluous at this point. Technologies like Reason or Elm are still very interesting but maybe they have their place in a more targeted survey?

Data Layer

This has always been a somewhat nebulous category, and would probably be better served by library-specific surveys (how to manage state in React, how to manage state in Svelte, etc.).

Features

(These are removed because they're pretty much at 100% usage and/or awareness so it doesn't make a ton of sense to keep asking about them)

Libraries

Other Deletions

Additions

Since the deletions free up space, maybe we could add a new category such as Animations and Graphics? Or else just keep the survey shorter.

Features

Libraries

I also want to open the discussion regarding which features/browser APIs should be included.

foolip commented 2 years ago

For testing tools, it would be good to list Selenium, meaning https://www.npmjs.com/package/selenium-webdriver. https://www.npmjs.com/package/webdriverio is listed, but I don't think it's as widely used based on npm stats. (Suggested by @jgraham.)

jgraham commented 2 years ago

I think listing the Selenium WebDriver npm package is a good start, but I think the underlying question I have is what the testing questions are trying to address. As far as I can tell, the 2020 data only includes js-based testing tools. That makes sense if the idea is to find out about preferred choices for unit tests, since for unit tests the test and implementation language are almost always the same. However in that case it's unclear why Cypress / Puppeteer / Playwright / WebdriverIO are included, because they aren't used for unit testing. It also makes sense if the aim of the question is to find out how much people use/like various js-based libraries. However I don't know what the use case for that specific data would be.

If we want to know how people test their webapps in general we should probably include tools where the test authoring language isn't js. Selenium is the obvious example here, since there are various different language bindings, but there are others, like Rspec. At least for my use cases, having some sense of how much people use/like the full spectrum of end to end testing tools would provide much more actionable insights than just having data about the js-implemented subset. I understand that might seem strange for a survey specifically about js, but all languages exist in the context of the larger computing ecosystem, and I think it makes sense to ask about things that cross that boundary.

SachaG commented 2 years ago

I have to say I don't know enough about the testing ecosystem to have an informed opinion on that specific topic. Maybe let's see what others think?

redbar0n commented 2 years ago

JavaScript flavors:

I would argue that it is still interesting to know, for someone surveying what flavor to invest in. To see the various satisfaction ratings and that TS has 78% usage whereas the next contender Elm has 6 % usage isn't apparent from any other place. So the StateOfJS survey provides a good data point to orient oneself. It is also interesting to track the satisfaction, interest, usage and awareness of these flavors over time.

I would even add ReScript to the list, since it focuses on web, and split off from Reason (which focuses on native) at around Aug 2020.

Data Layer:

If you remove this category, where would you put XState for instance, then? A lot (most?) of state management solutions work cross-framework.

But from looking at the datalayer examples, I think this category should be split into:

SachaG commented 2 years ago

We could put both Flavors and Data Layer libraries in the "other tools" section (basically just a have used/have not used checkbox), which doesn't give us the granular would use/not use again/interested/etc. data but does let us judge the relative popularity of different options in the same category?

SachaG commented 2 years ago

Currently working on the "JavaScript pain points" and "JavaScript missing features" questions, which need 8 items each. Would love some suggestions, here's what I have currently:

JS Pain points

Missing features

martinheidegger commented 2 years ago

Some suggestions for topics of which I am not sure where to put them:

For the utilities: volta has been the biggest improvements for me this year, maybe worth adding?

redbar0n commented 2 years ago

JS pain points:

bergus commented 2 years ago
SachaG commented 2 years ago

After some more thinking I think it makes sense to split out the "other tools" section in two categories: Tooling and Other Tools.

Tooling

Utilities

babel
prettier
eslint
nvm
n
nx
zx
volta

Runtimes/Execution Environments

browser_environment
node
deno
chakracore
hermes
service_workers
serverless_workers

Package Management

npm
pnpm
yarn

Package Registries

npm
github
jspm
private_registry

Monorepo Tools

rush
turborepo
yarn_workspaces
lerna
npm_workspaces
nx

Other Tools

Libraries

Flavors

Non-JS Languages

Browsers

Form Factors

Tool Evaluation Bracket

SachaG commented 2 years ago

OK, pretty happy with the latest outline. I'm still waiting for feedback from some folks but it's a good starting point at least!

redbar0n commented 2 years ago

Looks good! I would also put "State management" and "Client server comms." as headlines under "Other Tools".

SachaG commented 2 years ago

@redbar0n oh, what would you put in "Client server comms"? Things like Relay and Apollo? The reason I'm hesitant to add this (and state management as well) is because these libraries are so framework-dependent… in practice a lot of them are mostly used with React tbh.

redbar0n commented 2 years ago

yeah, those plus more. In my initial comment I outlined the ones you already have noted. But I know of plenty more, if need be. I would argue most of them are not actually framework dependent, even though many of them are used with React, since React has no scalable state management solution of its own. I see them used with Preact, Solid, Svelte, Vue, etc.

SachaG commented 2 years ago

Actually I will promote monorepo tools to a "full" category at the same level as build tools. They're pretty niche but it's a very dynamic category so I think it'll be worth fully tracking them sooner rather than later so have historical data.

eric-burel commented 2 years ago

It sounds rather good, I would add "yalc" alongside pnpm and stuff https://github.com/wclr/yalc, as a competitor to pnpm

I would maybe add a section about open source visual builders and maybe various headless tools:

Collaborative coding tools :

It would basically replace your Text editor section, with instead what tools people use to generate some code visually

Maybe what turn-key backend people use?

You may want to add Bedrock to librairies, it's not open source though

snowystinger commented 2 years ago

Adding to the headless tools React Aria https://react-spectrum.adobe.com/react-aria/index.html

I know up above you were saying that a few sections have been cut. Maybe there's space for a more nuanced section about accessibility? To name a few potential topics

Thanks for opening this discussion :)

SachaG commented 2 years ago

@snowystinger a11y is super important but I have to confess I'm not sure how to approach it in this survey, since it covers a lot of tools where it's not really applicable (example: back-end frameworks, testing tools, etc.). So I think a11y questions are more at home in the State of CSS survey.

SachaG commented 2 years ago

OK, the survey is now live! https://stateofjs.com/

Thanks to everybody for your contributions!

snowystinger commented 2 years ago

Great news! Maybe in the next iteration we can figure out a11y questions. I hope you don't mind me following up here for now.

@SachaG I had that thought too, however, I've done enough work now (on React-Aria) to know there is a ton that you have to both do and know in javascript combined with HTML and CSS to make an accessible application. I think I see a gap between the State of CSS and State of JS, which is neither of them really include libraries such as React-Aria, MaterialUI, etc. Meanwhile, simply putting it into CSS does it a big disservice I believe. I think it has a place there as well, but it also has a place here.

I'm not sure why testing tools or back-end frameworks would negate its inclusion in this survey. Could you explain more?

Maybe it'd be better to sprinkle it throughout? I do like how it was included in the brackets for evaluation. And maybe that is enough. Though I think it'd be useful to know if people know about the accessibility tree which they manipulate by rendering and various accessibility patterns.

For instance, in questions about Browser API's, when setting aria-labelledby or aria-label or roles such as group, you can inspect the accessibility tree to see what an assistive technology such as VoiceOver on Mac will read. There's also LiveRegions, which you typically create with Javascript, and once they've finished announcing, you remove them. I think of them almost as indirect JS API's from the Browser.

Or there are a ton of patterns that people should follow when implementing various components. So when asking about frameworks, maybe also asking about design systems that help implement many of these. Here's a link to a bunch of the patterns https://www.w3.org/TR/wai-aria-practices-1.1/#grid

Do you coordinate with the State of CSS folks?

SachaG commented 2 years ago

I think I see a gap between the State of CSS and State of JS, which is neither of them really include libraries such as React-Aria, MaterialUI, etc. Meanwhile, simply putting it into CSS does it a big disservice I believe. I think it has a place there as well, but it also has a place here.

I agree, and I think a State of React (or Vue, or Svelte, etc.) survey could be a great way to fill that gap :)

I'm not sure why testing tools or back-end frameworks would negate its inclusion in this survey. Could you explain more?

I just meant that a chunk of respondents might not find that accessibility questions apply to them, or might not know how to answer them. I was worried it might make the data misleading (e.g. "50% of JS developers don't care about accessibility" when it turns out those 50% were all strictly back-end Node.js developers).

snowystinger commented 2 years ago

Ah, very fair reasoning. Thank you for taking the time to explain it.

Felienne commented 2 years ago

Hi @SachaG!

Sorry for the late reply. I was wondering whether we can include a question about the other (non-JS) languages that people are familiar with. In the committee, we sometimes struggle to predict whether concepts of syntax will feel weird to js developers and knowing what they in general know could be helpful!

SachaG commented 2 years ago

@Felienne sorry the survey is already finalized and open! But there is in fact a question about non-JS languages so don't worry :)

shadowings-zy commented 2 years ago

Hi @SachaG I notice that you remove koa from libraries, but npmtrends shows koa has more users than nestjs and fastify. https://www.npmtrends.com/express-vs-fastify-vs-koa-vs-@nestjs/core

So I wonder why koa was removed from the investigation?

SachaG commented 2 years ago

I looked at other metrics like recent commits, github stars added by month, etc. and it seemed like Koa didn't have the same kind of momentum. And it's also an older framework, so I thought it was better to leave room for new entrants like Remix, Blitz, etc. even if they're way smaller in terms of userbase.