by Sacha Greif
In advance of the 2017 State of JS survey results, our panel of experts looks back on the past year
This year, we took a slightly different approach and decided to let the data speak for itself.
Meet the Panelists
- Michael Shilman: Testing
- Jennifer Wong: Build Tools
- Tom Coleman: State Management
- Michael Rambeau: Full-Stack Frameworks
- Extra Special Guest Panelist #1: Wes Bos
- Extra Special Guest Panelist #2: Raphaël Benitte (creator of Nivo)
Looking back at what you wrote last year, what are your thoughts on how that specific domain has evolved since?
Among the survey choices from last year, Jest has exploded and has surpassed Jasmine in NPM downloads.
Jest supports snapshot testing, I’ve seen lots of people using snapshotting as a cheaper alternative to unit tests for basic input/output behavior. This is especially popular in the UI space, with Storyshots, as well a whole ecosystem of related tools such as Loki, Percy, Screener, and Chromatic.
Last year’s survey has definitely predicted some of the trends of 2017. With the continued popularity of all things shiny and new, it’s no wonder Webpack’s still going strong. Yarn wasn’t even part of the survey last year, but has been picking up steam since its first full release in September. I’m curious to see what happens as Yarn and npm fight it out.
I’m not sure a real competitor to Redux has emerged, but perhaps in the community there has been a movement to what the creator Dan Abramov has always said: “not every app needs Redux, and in many cases it brings more complexity than it solves”.
With the increasing usage of server data management tools, especially for GraphQL data (see Apollo and Relay Modern), the need for complex client-side data tools has probably lessened somewhat. It’ll be interesting to see how the movements of those tools towards supporting local data also plays out.
My biggest testing discovery of 2017 was Cypress as a very convenient OSS/commercial option for end-to-end testing, though I find it to be still rough around the edges.
Also, I’m maintaining Storybook, which is the most popular UI development tool for React, React Native, and Vue.
We’re in the process of transitioning much of our frontend code at work to React, Redux, Webpack, and Yarn. It’s been an interesting and complicated transition, but many hands have made lighter work. This was in part prompted by the creation of a shared design system and component library.
Prettier! I can’t write code anymore I am so reliant on this tool. I’ve used Jest a lot more and have been really happy with it. I’ve really gotten into Storybook and have made more and more use of it (and started helping maintain it!)
Otherwise I’ve been heads down developing Chromatic a visual regression testing tool for Storybook. Really exciting to see some companies start finally getting their front end tested properly (ourselves included!)
The favorite tool I found in 2017 was Prettier. It makes me save a lot of time when I write code, since I don’t worry about “styling” my code anymore.
I don’t care about tabs or semi-columns anymore… Just Ctrl S in the IDE and everything is well formatted! Moreover, it reduces friction with other teams members when working on the same code base.
Working both on several open-source projects and at work, it’s really important to be able to improve automation. Using Prettier, ESLint, Jest, Validate-commit-msg with Lint-staged really helped in that.
I also built Nivo, a data visualization library for React.
Finally, with the rise of Async/Await and its now native support in Node.js I have also tried Koa. While its ecosystem is narrower than Express, I found it easy to get started with, and if you’re familiar with Express you won’t be lost.
- React for UI.
- Webpack for build.
- Apollo for networking.
Any framework, any build tool, and Node. Many of the concepts translate between frameworks and build tools, so hopefully learning one well can help map to others. If I had to choose one of each, perhaps React and Webpack because they’re trending — and trending technologies present well to people in the industry.
Certainly React, although the other frontends are interesting, the mindshare of React is getting pretty huge these days. A must have.
GraphQL, I think most experienced front-end devs recognize that the problems it solves are pretty universal, and it’s a pleasure to work with.
Storybook, I think building from components their states up is the future of app development, and Storybook is the leading tool to do this with.
- React, as the front-end layer
- Express, as the back-end server
- Jest, as the testing solution for both front-end and back-end code.
If you are just learning, you need to have small wins to keep you excited about the language. So, I’d say along with the fundamentals, learn the DOM API, Learn Async + Await, and learn a new visual API like web animations.
- Obviously, React for building UIs
- GraphQL, which is becoming mature and is now used by big companies Facebook, GitHub, Twitter and many more…
Hoping a best practice and library-of-choice emerges for CSS-in-JS. While there are lots of good choices, it still feels fragmented, and a lot of the world is still doing CSS-in-CSS, so lots of confusion unless that’s your focus.
Webpack. Extraordinarily powerful tool that lies way too far over on the “configuration over convention” spectrum.
It’s very hard to avoid having to learn its intricacies to work on JS apps, but often times they are details you shouldn’t really need to care about. I’m still hoping that Meteor can regain the throne as the best way to build a modern JS app.
The lack of standard, the fact that you have a lot of things to consider when you pick your stack before starting a new project. But things are improving!
checking && checking.for && checking.for.nested && checking.for.nested.properties. I know there are utility functions out there to do this, but it looks like we might get this in the language soon.
There are too many tools… It’s difficult to pick the right one, and we must be really careful about trends as they can move really fast in the JS ecosystem.
Wishlist (no idea whether any of these will happen in 2018):
- GraphQL reaches Meteor’s level of convenience for data sync.
- Universal (web/mobile) stabilizes and takes off for React Native.
- Cypress or a competitor emerges for end-to-end testing.
The end of Babel! I love Babel but with Node 8 I pretty much don’t need babel any more. It’s great to be working so close to the interpreter again.
Obviously the ES standards will keep moving forward but with modules and async/await a lot of the more frustrating corners of JS have been ironed out and many projects will probably be fine with the JS version shipped with node and all modern browsers pretty soon!
I’m curious to see how GraphQL will grow. Will it become the new standard when releasing an API?
Now that Node stable and all the browsers have Async+Await, I’m looking forward to native promises becoming common place in frameworks, utility libraries and the code that you write day to day.
Which is exactly what we were trying to address in the first place when we did that survey!
We’ll be launching our results site very soon. One week from now in fact, on December 12.
We’ll hold a launch livestream + Q&A so you can ask us all the questions you want - or just hang out! And who knows, we might even have special guests drop in… ;)
If you want to know when the results are live and get a notification for the hangout, you can leave us your email and we’ll let you know.