Hello friends 👋! I'm Henry, an engineer on the Behance team at Adobe in NYC. I started with an interest in data visualization but then moved to tooling.
I luckily got an interview at Behance because of my contributions to JSCS. I helped to merge it with ESLint and along the way discovered Babel and learned about "compilers". Now I get to spend about 50% of my time working on Babel at work. I am looking forward to the time when projects are able to work on OSS part/full time though!
Recently I gave some talks on what it's like to be a maintainer, how Babel is more than just the code itself, and dealing with burnout and the community. I did post I was going to spend less time on it to focus on health, so hopefully some people/companies will step up!
I enjoy playing ping pong, board games like 7 wonders, video games (a lot of Mario Odyssey lately 😊)
Ask me about OSS (its myths, its community, and its relationship to community/faith) or about the nature of Babel: it's difficult role in the ecosystem trying to glue it all together: spec compliancy with TC39, code speed/size complaints, JS fatigue, and handling it all as a group of volunteers.
Top comments (67)
A bit personal, but... Does someone with your accomplishments not have to worry about "imposter syndrome" at all?
Have you ever had someone explain how babel really works and what it's for before discovering who you are?
--Do web-programmers behave differently towards you--once they do?
I think when you are learning new things, you discover how much you don't know and it may give the feeling of "imposter syndrome". I remember reading a post about it (maybe someone remembers) that a lot of us don't actually have imposter syndrome but it's something else.
There are different levels of progression: maybe it's first issue/comment, first PR, first publish, first repo, etc and the next thing always seems so overwhelming. It's helpful to remember that it just means you are learning more. I think I just have a confidence issue, starting from knowing nothing doesn't mean you are unqualified, if you are there than someone wanted you to be. Like feeling nervous about giving a talk or even attending TC39. Everyone has different things to bring to the table, we shouldn't have to live up to the stereotype of what we think a developer or whatever is, it's just an average/typical thing that doesn't describe the diversity of people and their journey to where they are today.
I try to put my efforts into getting others involved in the project: it's the part of open source I appreciate the most (the people part), it is in my interest to make sure I don't become the only person involved and to make make all of our efforts as a team better, and it brings in different ways of thinking. We've tried many kinds of efforts like participating in Rails Girls Summer of Code and Google Summer of Code, talking with various companies, joining meetups, etc. Of course I'd like to be able to spend full time doing these efforts because none of this community effort is usually what you would be paid to do at a company given it isn't as direct a benefit
Yeah that happens haha. It's kind of like how people are mean to your online (twitter/github) because they don't understand it's a person behind the username/project. Once they know you everything changes. I think it's like how open source can be a victim of it's own success: being a popular project doesn't do anything to help the sustainability of the project and only increases the burden. The same small amount of people are helping improve it while more and more people are using/consuming it, and it creates this cycle of burnout in maintainers. People think that Babel is a company, that I work at Facebook or Google, or various other things because of their assumptions.
wow... awsome. Lots of food for thought. thanks, Henry!
Hey! I’m often seeing that I should contribute to Babel, but when using it I don’t see anything that I can improve. Do you notice that it’s harder for a project that seems “complete” to get contributions than something small?
Hey Haroen, good question!
It's not something that projects do a good job at in general. Making beginner-friendly (good first issue) issues is hard, takes lots of time, and scales inefficiently. And I've made a lot of those: github.com/babel/babel/labels/good first issue.
It is hard because it seems overwhelming. I was intending to make a better guide with real issue/PR examples but haven't one it yet.
It's ironic because on my side I think it's not even close to being "complete" as a project but I need to figure out how to express that in the right way 🙂. That should probably be my priority instead of trying to fix all these specific bugs/issues myself.
That's maybe because very rarely when I have a problem with Babel it's a problem in the project itself, but usually it's something I set up wrong, rather than being wrong. For you to notice that things aren't following specs needs you to 1. know the specs very good, and 2. actually care about the differences.
Thanks for your answer!
Yeah I think the scope of the issues I think about aren't really about the syntax/output but how it affects the ecosystem.
When did you feel like you were ready to become the maintainer of a major project like Babel?
This is a really good question Ben! The "were ready" part of the question is funny because I don't think I ever felt I was ready? I (and everyone else on the project, and probably a lot of other open source projects) didn't really have previous knowledge about compilers or ES6. It was mostly an interest in the project and it's vision that got me involved and staying involved. I don't think there are any hard qualifications to do it.. after Sebastian got burned out he gave me and some others access to the repo/publish rights and I was like woah I guess we have to just figure it out? I had never published my own npm package before or explored much of the codebase, but slowly (sometimes really slowly) you get used to it. Sometimes you have to kind of ignore the fact everyone is using it and complaining and all that, else yeah you might get depressed on the burden that's involved. I could probably write a lot for this question 😂 since I feel like I'm just rambling now.
I speak a bit on this in one of the talks I did: maybe
I basically thought that I realized I became a maintainer like maybe a year after I was already doing the role and all that? I remember Kent saying that if you want to be a maintainer of a project, just act and do the things that maintainers do. Of course that is a difficult thing to know, but you learn as you go. There aren't really a list of things to do (I wish someone would just tell me), but you just have to find out the things a project needs and what you are willing/wanting to commit to.
Dan had a good answer on this twitter.com/dan_abramov/status/787...
Hey Henry! How do you maintain a healthy 50% time split on Babel and Behance? Do you..talk..about Babel at work with your colleagues?
Yeah it's certainly not as easy as that sentence sounds but we try to make it work. I work with my boss to determine the kinds of issues I work on in my sprint just like with other work. Sometimes it's difficult in the day to day to split time, so it's not easy to literally do 50% on both every day, but maybe it's every other day or every other week depending on what we need. In the end it averages out to 50% though. Of course personally, I do admit I have a burden that I want to work on it full time despite having this opportunity but that's something I have to deal with, whether it's trying to push for that across the team/company or something else.
We try to have an attitude across the team that open source (and also things like technical debt, bug fixes, refactoring) should be argued for just the same as features. This means that open source shouldn't be like a "reward" for making a feature or something, but that it's vital to the success of our team/product all the same. This is kind of the attitude that Jon expresses in twitter.com/jkup/status/9098870661..., where open source is a part of the DNA of our team.
We encourage open source contributions: my coworker Kai is a core-team member on ESLint. Erin, Matt, and Yuriy have all contributed a lot to the Vue ecosystem, whether giving talks or writing docs, and coming up with testing strategies and more. Mike was a jQuery team member and recently had many multiple PRs to both npm/webpack to improve everyone's build performance significantly. I think we are willing to contribute back, make patches, and get involved if we have a problem/issue instead of just waiting around or complaining about.
So yes I talk about Babel at work a lot with my colleagues (maybe they might think too much). Not everyone is always as interested in it as me but I think they still like to listen and give feedback 🙂).
Wow, that's awesome. Sounds like you have a really great team!
Since you've been and are so involved with OSS, what are some reflections you have on what contributing to OSS is like now compared to what it was like when you first started (with JSCS, for example)?
I think you mean what it's like for someone new back then vs. now?
I only started around 2 years ago which isn't too long ago. I think there are definetely some differences but not sure on the whole if it's easier/better to contribute now than before. I don't think we really have a grasp/handle on how to make it sustainable to continue to grow new contributors?
There are a lot of new things like the interest in bots like github.com/probot/probot, twitter.com/greenkeeperio to handle some of the tasks and to lessen burden. Github has done a lot like the license changes: github.com/babel/babel/blob/master..., start of a community standard/guidlines, opensource.guide/, talking with maintainers and being more active. There is more of an emphasis on getting more people involved with things like the
good first issuelabel and other things and people caring more about having a good readme/website/etc.
In the end it's just a lot of work to get plugged in and I know that. Not sure the best way to move forward other than better mentorship and then via that better docs/guides via that process which takes a lot of time/mental effort/scheduling. I'd like to do more of that but just not always in the best situation to do so unless it becomes part of your job. And even with that, you might not be able to help more than a handful of people (which is plenty), since even having a single extra maintainer/collaborator is a huge deal.
So the effort to grow new contributors is certainly welcome and we shouldn't stop doing it, but we should be cautious to make sure we don't burn out new contributors since that is happening all the time with old ones (I will admit some level of "burnout" is ok in the sense people should take breaks and are not obligated to do any of the work, and that sense of personal commitment may/may not cause that). Would love if we had a better grasp on how to make it sustainable as a consistent, healthy thing to take part in: not about getting stars, likes, medium posts, downloads, resume building, etc (all can be fine and fun) but doesn't satisfy in the long run. If you are feeling the burden, the overwhelming sense that you have to do it, we should provide help, guidance, etc.
And hope I don't sound like it's all bad at the moment. I started without any guidance and it ended up working out but it took forever to learn a lot of it on my own (and that's ok). Having a friend, class, club, meetup to do it with would probably make it more enjoyable and maybe projects should be doing more (I hesitate to say we should do more 😂) in that direction. And for me a lot of it is providing an environment where people can express better ideas instead of just submitting a PR to someone else's issue or fixing a basic thing. Problem is people have no context, names are hard, it seems like you have to know so much up front to be able to be in a position to contribute ideas? I really don't know where it's supposed to go either and would love if someone else could tell me. Right now it's just trying to find patterns and overall issues are learning (the hard way) of trying prioritize over just answering questions on twitter/slack over and over but actually moving things forward while helping people in the now as well. And all that should be documented too but then I'm just tired 😄. Another thing I want to continue doing (I'm not sure if this even works) is make it more fun like how we have the whole "guy fieri" meme, now the Babel song, etc. Of course that has to come naturally but I think it can bring in a lot of people who otherwise would be turned off by the nature of the project itself.
Thanks for the answer! I recently wrote about my first attempt at putting some fun in code in the dev.to codebase:
Hi Henry! Thanks for doing the AMA.
How was the decision made to bundle Babel with Webpack instead of another build tool?
Thanks for the question. So to clarify I don't think we have tied Babel to any particular build tool. Technically since Babel is split into various modules, you can create an integration with Babel with
babel-corefor various tools like testing (mocha, ava, jasmine, jest), or a bundler (webpack, browserify, etc).
It's probably since Webpack is the most popular bundler that we tend to use Babel and Webpack together a lot (and that's totally true).
babel-loaderis the thing most people are using for front-end development and it's used in a lot of other tools like create-react-app, etc. And yeah it's important for us to figure out how to integrate better, and I talk to Sean a lot about these kinds of things 🙂.
Hello Henry! What are some important etiquettes for maintaining any kind of OSS?
Hello Mac! Sorry this is kind of long 😂
Github is maintaining a nice guide on open source at opensource.guide/ if you haven't checked that out yet! Although maybe most of that is for contributing rather than maintaining.
I guess you are asking for the other side of things? I might of gone over some things in github.com/hzoo/maintainer-heal-th...?
One thing that can be helpful is responding in a positive way. At Behance, we try to start our PR reviews with a "good job" or something instead of just writing comments about what to fix or make better. "Thanks for contributing" can go a long way as my coworker Mike says. And maybe you could just pre-prend all responses automatically but you can go further and actually just say something nice about the issue/PR submitted, it will take some effort to get used to. If I don't I try to just add an emoji or two, and if you really want to go all out add some GIF 🙂.
Be humble and remember where you started from. People of all backgrounds are going to use this OSS, and learning to be nice can be difficult especially when people treat you in the wrong way. It's true that saying something nice is "easier" when there is a reason to, but doing despite of that can bring the conversation around.
We can try all we want to convince/remind people that maintainers are volunteers and deserving of respect (and they are), but people are going to continue to act the way they are. I wish people would think of the people behind the projects they use rather than just a black box or thinking it's an abstract/un-emotional/stoic/robot "project". Although I agree we should try to "detach" ourselves from our work and that it doesn't define you as a person, but sometimes it's just hard. Sometimes if you insult the project and it's only you and a few people, how is it not an insult to the person directly?
But it's difficult to really change others by asking or shouting back (some may say impossible). It takes a lot of work to understand where people are coming from, to meet them where they are at, and to bring them to an understanding of your position via their framework. Sometimes you got to remember that we can just as easily act the same way and be hypocrites. I do have that fear a lot, but I have to remember that there is grace for that as well.
And when all that just feels overwhelming, you just need to take a break. Maybe don't answer that issue when you get the notification in like 1 second and just chill a bit. Maybe wait till you've calmed down when a user posts an issue with no description and demands for help. Sometimes not responding is the best action in the moment, and learning to work on open source when you actually feel good about it is the right way to go.
I'm "trying" to do this now: twitter.com/left_pad/status/938041..., and reflecting on the kinds of things I want to work on and help out with as I try to prioritize health and other things.
I guess this is now more of a side-point about keeping OSS fun for newcomers and yourself, but it depends on the overall state of your project and the kind of culture it fosters. For Babel we are obviously a "serious"/"popular" project that a lot of companies/individuals use but we want to bring a spirit of fun/whimsy/welcoming as well. This is reflected (I hope) in our writing/actions.
Like when Jordan posted his infamous medium article about node_modules and we took it farther by actually opening/merging a PR to add an ASCII guy fieri in the codebase github.com/babel/babel/pull/3641, I documented part of the story in github.com/open-source/stories/hzo....
And it's not something we are intentionally always trying to bring in, but just trying to keep it real but enjoyable. Sometimes having some non-practical, fun activities is what it takes to bring people into a community to show it's not as difficult as it seems (or really that it's difficult in different ways than you initially believe).
This kind of idea was reflected most recently by Angus: twitter.com/angustweets/status/938.... He on his own made an awesome parody song with Babel as the subject and I thought it was pretty funny, so maybe I surprised him and thought we can just make it our "song". I just thought it was an amazing way to contribute to the project: github.com/babel/babel/#is-there-a....
Thank you for you! This is one of the best answer I ever received on this topic.
What's your relationship with the huge companies using Babel?
Really good question as well. Most of the relationship is just that they use the project. Not everyone posts at our users page: babeljs.io/users/.
TL;DR is that they consume it but no one is really helping drive it forward. People will step up in certain areas here and there but ultimately the coordination/vision effort is all on us. It's hard to push things when we are the volunteer led effort though, although I have to be ok with that since it's been that way since the beginning, (Babel is 3 years old: babeljs.io/blog/2017/10/05/babel-t...).
And engineers that work at those companies might know who were are on the team and I might have contact with them from conferences/etc. Most people aren't always asking for feature x/y or even in the issues. They might be one-off DM's on twitter/slack but in the day to day we don't have too much contact with that many companies, and it's really mostly a volunteer thing. No one is really pushing for anything on our roadmap so it's mostly just us trying to figure out what exactly we need for the community (it can be a lot 😂, I really don't know either).
So Adobe: I work at Behance so I have somewhat of a relationship there, I think companies still aren't really putting in the resources there because they might not see the benefits given past history etc. When I gave talks earlier I had a lot of employees tell me they didn't know I worked there (and I mentioned in another thread people think Babel is a Facebook project when it's always been a community project, although Sebastian did work on it at Facebook for sure).
Google: talk to them a lot since although they might use it for their own stuff, they'll use it for OSS projects like github.com/GoogleChrome/workbox, and their users will probably be using Babel. I think browser vendors have a good incentive to make sure Babel is well supported because a lot of the code being sent to the browser is going to be compiled with Babel (so things like code output/speed should be important).
Recently github.com/jridgewell on the AMP team joined as a collaborator team and has been contributing a lot of PRs, and they also donated to the project. Justin has recently joined to represent us at TC39 as well. There's an issue with being an "invited guest" if you don't work at a "TC39" member company so that has honestly been an issue for being able to go.
Facebook: they hired Sebastian to work/make Babel 6, both Yuriy and Amjad made/worked on babel-minify (babili before), and the Flow/React teams help with JSX/Flow PRs sometimes. They recently donated $1k a month to the project which is a nice gesture: twitter.com/left_pad/status/923696... but we still don't have enough for 1 person to be full time atm.
Microsoft/LinkedIn: had some help/contact with the Ember team, like twitter.com/rwjblue, twitter.com/nathanhammond who helped with setting up Babel meetings, and a lot more. We recently collaborated with the TypeScript team to at @babel/preset-typescript after making sure they would help with the PRs and helping keep them in sync (we try to do the same with Flow).
There's a lot of other companies like Airbnb, Netflix, etc too.
Point is that I can recall times we might of talked and stuff but don't really have any sort of regular communication with that many folks or do calls/meetings.
So I don't think Babel "won't" be needed soon, and it's not because I happen to work on it 😂.
I think that is a result of thinking it is still "6to5". I'll admit that yes ES6/ES2015 was a huge change that lead to this kind of thinking/tool, but I think maybe we all need to think a bit longer-term?
github.com/babel/babel-preset-env shows the change in thinking that I had. Babel doesn't do a static thing of just turning your ES6 code to ES5, but it actually will move forward as the language progresses and browsers update. As long as we need to support old browers, and the language continues to update with new syntax, AND all of us continue to want to use that new syntax (that's key), then something like Babel seems to be necessary?
If you think ES6 is good enough and you only support evergreen browsers, then yeah Babel isn't necessary and lucky for you! Or if you are in Node and are able to update to the later versions than the same thing there.
It's a fine balance though, people don't really understand what Stage 0 means, and that's actually understandable too. There's an education problem there. As much as I try to push for better docs, codemods to remove killed proposals or to upgrade in between proposals (decorators, etc), it's just a lot of work, and a lot to manage for a few people, let alone the whole community.
Hi Henry, can you expand on OSS and how you view it's relationship to community and faith?
Thanks for everything you do! 🙌🏽
Definitely want to answer this one! Getting lunch now though 😁
Hey Henry! Since most of your work is being a maintainer, how often do you get burned out? And what do you find is the best way to deal with it?
Hey @lianafelt ,
Thanks for the question, sorry for the later response. Just going to type out quick thoughts!
I guess it depends on the definition (or if it's a severity level before you get to burn out)? If it's just a matter of not wanting to work on the project then that happens often and at least in that case I know that's pretty normal. Even for your hobbies, your work/job, or your passion it's possible to want to take a break. When you are thinking about something all day every day you lose sight of a lot and sometimes simply not doing it helps so much. Maybe it's easier with a job if you can take off weekends or not have to work late, if it's a startup it does seem like it consumes your life?
It's funny since open source may seem like a startup too: you don't get paid, you may work on it with a few people, you are trying to grow and get usage etc. Except you don't care about raising money or making a living off of it so you are free to leave. It's really an interesting thing where to me when we feel this burden as a maintainer it's this trap I put on myself. Nothing is forcing me to continue working other than the fact I choose to continue to do it. That self-motivating factor this negative idea that if you stop working on this the "world will end" or everyone's lives will be worse doesn't help and contributes to the further working and frustration of working. I kind of talk about this in github.com/hzoo/maintainer-heal-th... (there's a stream link but kinda low quality).
I still deal with this all the time (even now so I should take my own advice 😂), but I think maybe in a few ways.
Simplest/obvious solution that we don't want ever want to do - stop working on whatever is taking time that isn't actually priority/necessary (in this case open source). Free up the time and get the rest of life in order because most likely something else is suffering as a result (could be work, relationships, money, or in my case health). So that is more of a lifestyle/physical change?
Maybe next is probably more of a change in attitude/motivation. Really think about why you are doing open source in the first place and the reason it feels like everything is falling down. Are you scared that the project will die, or it will become useless, or that if you stop then who else will take over, etc? I think it's an opportunity to look at yourself and see the pride you may have: do I really think I'm the only own capable of doing it? Maybe I should solely focus on training someone else, asking the community, learning to delegate, learning to trust? Maybe remember why you started doing open source in the first place and why you aren't feeling or doing that anymore. Maybe you just need to focus on the things you are interested in, after all you can decide that as a maintainer?
Ultimately for me it's about understanding where the feeling of burden/exhaustion/lack of passion lies. That I feel compelled to continue working despite me not actually wanting to because of various things: negativity in the community, barrage of issues, overwhelming feeling of "things" that need to be done + lack of the sense of any sort of control. But I must remember there is grace in all of that. We shouldn't be defined by our work; our identity isn't in this "thing" and I shouldn't think of myself as the "x person", otherwise I really am trapping myself and cannot leave. I think about whether I'm feeling some sort of entitlement/pride/unfairness and bring that up to God. Sometimes you can get lost in yourself trying to help others and forget what it's all about in the first place, that the work itself becomes the source of joy and not people. If all this "doing" is causing more trouble, maybe it's the source of trouble in the heart? Maybe all these activities and busyness shows that it's impossible to keep up and that a certain focus/clarity is absolutely necessary, that "no" is also a viable answer. Maybe in trying to doing everything you end up being able to do nothing, and the core of what it's all about is lost. Rest!
"Come to me, all who labor and are heavy laden, and I will give you rest. Take my yoke upon you, and learn from me, for I am gentle and lowly in heart, and you will find rest for your souls. For my yoke is easy, and my burden is light."
How is "JS fatigue" evolving? Are things settling down in any way? What's your sense on the current state?
Dan had a nice talk/post about this.
I'm probably too fatigued with "js fatigue" to talk about it that much in depth, but I'll say that tool authors have a lot to deal with, and use-cases to handle that not everyone cares or thinks about.
This is a similar situation with TC39 and how people complain why there are so many OO features and that JS should be a "functional" language. But JS is used by a lot of people, and in many different situations/environments.
In a similar way tools should try to work "out of the box" but defaults can be hard, and not everyone will agree on what those are. It does seem to go back an forth in this cycle of "being able to do everything, everything is configurable" and "no config, only the basic use case is supported and you have to fork otherwise". Convention and configuration happens, and people have different views on whether you should build on top of tools, create new ones, integration, make "plugins", etc. I think we should admit it's a difficult problem? Something can be a lot faster, have less config but there are tradeoffs being made. But having new ideas can bring change to the larger/fatigued projects too.
Personally babel-preset-env has been my try at beginning to combat this kind of thing. Even though that itself is complicated it helps to make decisions easier for the end-user. It helps the project since there's less choice in the presets, and allows for other decisions to be made instead. Reducing the amount of choices is a goal for us, so there's always improvements to be made.
Does Babel have explicit "governance"? How often do you get together and talk non-code stuff related to the health of the project?
Yeah governance is a big topic for open source, especially as a project gets bigger. I think for those that are non-linux/big ones it just starts with a single person and grows organically from there. Babel itself isn't that structured unlike ESLint or Node.
We did make a team page and have definetely discussed trying to do a more formalized structure but that's hard to enforce/commit to all the time when people are coming and going, having a mostly volunteer time, people taking weeks off, burnout etc.
We talk about it periodically in our slack channel and we started doing "weekly meetings" and posting them at github.com/babel/notes. I was doing it for a while and trying to schedule it. Our GSoC intern Karl puts it well: babeljs.io/blog/2017/08/16/contrib.... It's hard to do meetings when people are across the globe and literally not a good time for everyone in some cases.
I'm kind of tired of doing them so it went to 2 times a week and now I feel like it's better sometimes to just do a weekly summary of what's been going on in the community and the repo (notable PRs, issues, talks, etc). And if someone wants to do a call we can do that. I'd like to ask other members in the community for some calls to talk as well. Recently I joked maybe our meetings should just be playing Mario Kart on the Switch (we just played some yesterday finally).
I just added Angus to the team because he made an awesome song, and why not just make it the "Babel" song. twitter.com/left_pad/status/938956...
I was looking for other ways for people to get involved in OSS/Babel, especially in non-code ways and this is certainly one of them 👏!
Or Jordan with his awesome medium post which lead to the whole Guy Fieri meme: medium.com/friendship-dot-js/i-pee...
How is "Babel" pronounced?
Lol this is always the best question haha. So many great conversations about it: twitter.com/sarah_edo/status/82434..., etc.
I pronounce it "babble" myself, but don't really care if you say "bay-bel" 😊. It's probably just where you grew up/located
It's definitely "babble". Unless of course you're Wes Bos. 😄
Am I allowed to pronounce it like "bubble"?
haha yeah twitter.com/wesbos/status/61921048...
@wesbos you got a shoutout!
lol I can't not call it baebull
I've always pronounced it as if it were a French word: translate.google.com/#fr/it/Babel
(hit play on the french side)
Do you enjoy working with me?
haha Brandon sits across from me, and is a great engineer! Sometimes to be honest you can be a bit
weirdbut I really appreciate you 🤗