Hacker News new | ask | show | jobs
by atemerev 3489 days ago
Dear James,

I understand that hearing rants about your brainchild that took so much hard work is hard and depressing. I was in your shoes, too. And being a head of popular open source project is very emotionally unrewarding, to say the least. And thank you for your hard work — like nearly every front end developer out there, I used Babel, and it did it job, eventually.

However, I am one of those people who think that Babel6 is terrible, that it "broke the web", and it marked the beginning of the entire JavaScript fatigue era. Babel6 transition took three days of my life, filled it with misery and rage, lost me a customer, and led to my desire to never touch JavaScript again if I can help it. (I moved to ScalaJS eventually).

I ranted about it, too. Like nearly everyone else, I forgot that there are live people behind every project, with their dreams, hopes and justifications for every decision. I didn't want to attack you personally — I just vented my (very real) rage against Babel6 itself, without thinking anything about its author. So, well, nice to meet you.

And I still stand by what I said. Despite your good intentions, it is still terrible, and unintuitive, and definitely not a "something for everyone", unless frustration is something. And I can't think of any way of fixing it, except of moving to another stack (which I did). If there were many people ranting about Babel6 like I did, (and I can imagine), I am truly sorry for the mental suffering you had to endure.

You are cool. You are significantly more competent developer than I am. I use your software, not the other way around. And it is free. But Babel6 is still terrible, and no input from your side can change my opinion. Or perhaps it could, if you provided some technical justification for what you did. But this article is the request to stop ranting about your work, as it hurts you.

For that, I am sorry.

6 comments

> However, I am one of those people who think that Babel6 is terrible, that it "broke the web", and it marked the beginning of the entire JavaScript fatigue era. Babel6 transition took three days of my life, filled it with misery and rage, lost me a customer, and led to my desire to never touch JavaScript again if I can help it. (I moved to ScalaJS eventually).

Bad news: you are not a special snowflake deserving of attention, the web is still here and doing just fine, and it was your incompetence that lost a customer (Babel 5 is still around for use even today).

Many mistakes can be made by open source teams, and something should not be immune to criticism just because it is open source. But this is a great example of noise that harms engagement in a community because you want to feel good on the off chance that lashing out will make someone somewhere feel bad.

Maybe try to learn from a piece instead of trying to be cute next time?

I do sincerely apologize if something I had said sounded offensive to you or anybody else.

However, I can't help but ask the question: am I the one who resorts to personal attacks here?

Yeah, that's bullshit.

> But Babel6 is still terrible, and no input from your side can change my opinion. Or perhaps it could, if you provided some technical justification for what you did. But this article is the request to stop ranting about your work, as it hurts you.

> For that, I am sorry.

So you get what he's asking (stop the sniping without substance), you're (supposedly) contrite about it, and yet in the same breath you continue to do what you acknowledge is exactly that behavior.

Either there's some fundamental disconnect in your mind that you need to address or you should just say what you mean.

I do not attack or blame the author, I say that the work (Babel6) is no good. This doesn't imply anything about the author.

You, on the other hand, attack _me_ personally. You don't even say "your words sound rude" — that I would understand.

Or there is no difference to you?

Your comment reads (to me) as more attacks sandwiched between slices of insincere apologies. You likely did not mean it to read that way, but it does.
I just tried to note that I am not surprised by the amount of rage that Babel6 transition had caused, as well as that it has nothing to do with its author's person at all.

Inalienable right of the author: at any moment in time, they can say "this is my vision and my art — take it as is or leave it".

Inalienable right of the user/reader/consumer: judging author's work in whatever way or form they want, misunderstanding it, and generally abusing it in the ways never intended by author.

Corollary 1: a user has no right to demand anything from the author. If anything crosses their mind, they might ask the author. Politely. Very. And author has the right to refuse anytime, without explanation.

Corollary 2: an author has no right to demand that user has to be happy about their work, or use it the one correct way, or that ranting should stop. The author can only make suggestions and give advice. Politely.

>However, I am one of those people who think that Babel6 is terrible, that it "broke the web", and it marked the beginning of the entire JavaScript fatigue era.

Granted, I wouldn't consider this a personal attack. But it definitely qualifies as negative and nonconstructive.

I literally can't imagine how one could argue that they "broke the web"; that's completely ridiculous. If the migration path wasn't explained very well, why not say that? Or if you find configuring the tool confusing, and would prefer it to have "sane defaults" in the absence of configuration, why not say that? Instead of calling it terrible and blaming it for the "javascript fatigue era".

They realized that what had once been "sane defaults" were no longer sane, so they removed them. That's it. I can accept that there were legitimate complaints to be made, but the hyperbole and general negativity was over the top on this one.

The migration path wasn't explained at all.

This is fine, if there would be a nice documentation for new version. There wasn't, except for some scattered blog posts.

This is fine, if new version offered some exciting new features or simplified thing a lot. But no, everything became significantly more complicated.

This is fine, if Babel was a production library packed into final build, and modularity is necessary to save precious bytes from web-transmitted JS. But no, it is a development tool. Nobody cares about its size or one-size-fits-all.

I just don't understand. What is the use case that required such a big sacrifice?

To address the other points you raised; I personally found Babel 6 easier to use and understand than Babel 5. I suspect this is because I needed to configure Babel 5 anyway to meet my needs, so I was required to understand the configuration either way. Babel 6 made it much easier to understand what I was asking Babel to do; no magic, everything explicit.

With version 5, the default settings were a moving target (which I found confusing), and explicitly configuring it was more complex. Apparently the Babel team had great difficultly deciding what should be included by default as well.

Basically anybody that used Babel for something other than "6to5" had to jump through hoops to overwrite the defaults. Seeing as how the Babel team were trying to position it as a general purpose Javascript compiler, that was a problem for them.

So, maybe it's worse off for most people because of the change (because it doesn't work with zero configuration anymore), but plenty of people were better off because of it. The library became easier to maintain, and easier to use for a non-negligible number of users.

The major point of frustration was JSX preprocessing for React.

Need JSX? You have to use Babel. There is no zero configuration for Babel anymore, so you have to spend time learning it and resolving numerous build conflicts with cryptic error messages.

Todo list example with React+Redux+Babel6 takes 14 JS files, Babel configuration file, Webpack configuration file and Node package file to be written anew. This is what "Javascript fatigue" is about: when you get to the working first example from the documentation, you will be completely exhausted.

The amount of boilerplate with this "standard" setup is worse than with Java/Maven, and this is quite an accomplishment. :(

No arguments about the poor documentation on how to migrate; that's fair.

But we're straying from the point I was trying to make; your feedback was overly negative and hyperbolic.

We're all guilty of doing this at times, but it's not a constructive activity to engage in. I don't fault you personally for making one overly negative comment, but en masse it's harmful for the community.

Did babel force you to upgrade right when version 6 came out? They bumped the major version, that should be a pretty clear indicator that existing workflows will break.

Whenever you use a tool, you're accepting risk for the reward you're getting from it. If I run Gentoo on my servers, it's not really fair to complain when an update breaks something.

JavaScript world is known by moving fast and breaking things (which is fine for me, I learned to respect this culture). So, when a new version of some popular framework or tool comes out, there's a very real risk that the previous version will be abandoned really soon and left without support from developers and community (I was burned by it quite a few times). So no, had to move forward like everyone else.
That's total BS. Even if it was abandoned, it was already in a stable state with no significant bugs. It wouldn't just cease to be supported. Your workflow wouldn't have to change. And losing a customer over it? That sounds like complete incompetence on your behalf, which your customer probably figured out. Even assuming that Babel 5 would be abandoned, why move to Babel 6 so quickly instead of waiting a month or so while the nice guides, gulp plugins, etc are made?

Your whole situation and outlook really seems to be blaming anything but yourself for mistakes that you made.

Now I apologise if you've explained this elsewhere, but nowhere in your comment did you point out specific problems that you had with Babel 6.

You called it "unintuitive", "terrible", "frustrating", and said that it "broke the web", but you never explain how or why.

And I think that's part of the problem. It's one thing to suggest improvements, explain why something hurt, or how it caused an issue. It's another entirely to say again and again how much you personally dislike the project without offering anything of substance.

Personally, I think that you can suggest improvements, changes, fixes, or say how you would have prefered a change happen without the extra parts about how much you disliked or even hated the project.

Again, you could have explained this elsewhere, but without a link, a reference, or just reiterating the bullet points, it's going to come across as just more "bitching" which helps nobody.

As for another point of view, for me Babel 6 was a breath of fresh air. I waited a good couple months before updating, and found that it was easier to configure, easier to remove the parts I didn't need, quicker to setup, and overall just nicer to work with. To me it was a welcome change that I saw as Babel giving you an "out", paving the way for a day when you can incrementally remove babel from your pipeline and not have to deal with it again (opposed to the Babel 5 setup which was "all or nothing" unless you dove deep into the configuration hell). It had some fuckups (documentation was difficult at the beginning which is why I held off, and I still believe it has some holes with regards to exactly what some of the plugins do and what each one requires in terms of "polyfills" or other plugins), but nothing is free of problems, and despite all of the complaining about how it "broke the web" everything seems to have moved on fine. Even you yourself admitted it took you 3 days. While everyone involved thinks that's too long, and you are just one of many who had a similar story, in the long run is not that big of a deal.

I think there were things that everyone could have done better, and talking about those things specifically is going to be infinitely more helpful than any venting or rage will ever be.

But why anybody even need a modular build tool? It's not like it is packed into final build, we don't need to shave off bytes. One size fits all works perfectly here. What is the killer use case for modularity?
You don't want to compile everything every time.

We target a platform that has arrow functions, we don't need to compile them in any more. Not a big deal for arrow functions, but a HUGE deal for async/await, or for-of statements (both of which will compile to a LOT of code which includes a pretty large amount of runtime-checking to work).

But there's also the fact that you do pack some of it into the final build. Many transformations include a lot of boilerplate, "helper" code, and in some cases big polyfills. Getting rid of those when possible is a huge bonus. And Babel 6 paved the way to allow you to incrementally remove those plugins one at a time as your target platform supported the feature natively (and at a speed that you are comfortable with). We currently only transpile async/await in one of our codebases, once that lands in node.js and is stable, babel will no longer be part of our pipeline. That's not something that we could have done easily with the Babel-5 system.

But it also takes babel from a "ES6 -> ES5" tool and makes it a general compiler. Babel now has plugins that will minify the code, plugins that will drop dead code, plugins that can perform "GCC style" optimizations in terms of IIFE removal, constant inlining, loop-unrolling, and more. Before the Babel-6 change, all of that would either need to package it's own AST parsing, or it's own bastardized version of babel. Now it's as easy to write plugins that do things like remove the prop-type code from a React project [0], or eliminate unnecessary closures [1].

There's also the ability to save space and install time on the developer machine. Not that big of a deal to me, but I hear others complain about it from time to time.

But those are just the reasons why I like that it's modular.

[0]https://github.com/oliviertassinari/babel-plugin-transform-r...

[1]https://github.com/codemix/babel-plugin-closure-elimination

Thank you, this is actually a great explanation.
> Babel6 transition took three days of my life, filled it with misery and rage, lost me a customer,

No it didn't. Technical issues arise all the time, in all manner of projects, and are fixed all the time without losing business. _You_ lost the customer because either a) you didn't properly communicate the technical problems being resolved, and/or b) did a major version deploy without verifying and testing beforehand. Stop projecting your failures as a developer on someone else.

Open source software is powerful and comes with no guarantee - we are all provided with enough rope to hang ourselves. This freedom is what enables us to build really cool stuff. But it also means we're all responsible for using it correctly in our particular project contexts.

Ummm... You do know that you don't have to use Babel to use JS, right? ES5 is here, it was here then, and it works very well. It might have some pointy ends, but they are very well documented at this point.
Yes, of course, unless you had invested a lot into React/JSX, and Babel is the only "official" way (documented and blessed by Facebook) to run React and JSX in production.
Ooh. Forgot about that. Sorry.