Missed the AMA? You can still connect with James Kyle and ask questions on their Hashnode profile
Alright, I guess it's all over now. Thanks for your questions everyone
Hi James, Thanks for the AMA.
I have a little weird question. Something which has been bugging me for a long time. I see many popular and capable developers join big companies like Facebook and Microsoft. Most of you then leave these companies in 1-2 years. What's the most common reason for this? What was your reason? I personally wouldn't leave companies like these (beautiful offices, great minds and big projects).
I’m not sure I really agree with that assessment anymore than the fact that developers tend to move between jobs more quickly than other professions. I know plenty of open source developers who have worked at the same place for 5-10 years and have no plans to leave.
There’s probably a lot of reverse survivor bias (surely someone will label it better than me) involved in what you’re noticing. The people that leave are the people you hear about.
I left Facebook because I hated it there. Other people love it there. We’re different and we want different things. Nothing weird about it.
I didn’t really like Facebook when I was joining either. I joined because I thought I needed to go to a big company to do open source at the scale I wanted to do it at in a sustainable way. Turns out it really doesn’t matter how big your company is, it’s really not that expensive for a business to invest in open source.
Also, "beautiful offices, great minds and big projects" aren't really good reasons to work for a company in my opinion. Some of my favorite jobs were at companies with shitty offices, they didn't have any "super geniuses", and their projects in of themselves weren't all that exciting. But I still learned a lot at them, I grew as a developer, I made great friends, and I enjoyed my time there.
I already said this in my response to another question: I don’t want to hire and work with the “smartest people”, I want to work with a group of people that gives each other confidence taking on bigger and bigger challenges.
I didn’t get that at Facebook and so I didn’t enjoy it.
James, I follow you on Twitter and appreciate your raw honesty in how you approach many subjects. I noticed a while ago you were Tweeting things about Australia, saying how you hated it. It seemed as though you had some horrible encounters. Can you elaborate on your experience thus far working in a different country, the good and the bad?
Australia is homophobic. I was told that ahead of time and I didn’t listen. Moving to a new country is tough. Especially on your own. Especially when you struggle with anxiety and depression.
Work has actually been great, I love the work that I’m doing. I would like to continue doing it. I’m just not enjoying living here.
I use Yarn in most of my projects and at work. What is one thing that you feel still sets yarn apart from npm 5?
(which tbh has taken some inspiration from yarn)
- Yarn still performs better than npm in most scenarios.
- npm 5 has a lot of bugs at the moment, which I encourage people to go get involved and contribute fixes back to them.
- Adding dependencies in npm is still non-deterministic. The lock file is designed to keep things in consistent places once they are there, but they are not placed deterministically to start off with.
- Yarn is the better place to experiment with new features like workspaces.
There’s plenty of people who will get angry at me for saying the above things. Do I want Yarn to continue to exist? Yes, of course. I would want it to exist even if I was using npm, for the same reason I want Firefox to continue to exist even though I mostly use Chrome. Same for npm.
There’s a whole bunch of idiots who for some reason want Yarn to cease to exist because npm has addressed a number of the original concerns. That’s such a stupid thing to think I really have no other comment other than to call them idiots.
What's the "big plan" if there's one that is driving all theses changes?
What kind of features you really miss from it?
There isn’t really a “big plan” here, people want a lot of different things out of the language and the standards groups are just there to address them as they come up. The reason you’re seeing a lot more activity today is because the TC39 has changed it’s process so that it can evolve more incrementally.
In terms of what I want for the language, it’s mainly about embracing some of the tools in the ecosystem more. TC39 only recently started having Babel involved and it’s had a pretty immediate effect on their process.
I want to see more of that. I want to see TC39 addressing problems that library and tooling authors are having.
Have mistakes been made in the process? Sure. Recent example from a Twitter debate:
const probably shouldn’t have have been added. But it is what it is, and it’s really not doing that much harm.
What stopped you from contributing to Babel.js?
As you were one of the initial contributors of Babel.js, what was the motive behind creating the library? How it become a separate project? Please share the story. :)
Seb really deserves all the credit for the creation of Babel/6to5. I joined in early on, but it’s really his story. He’ll probably cringe at my response to this, but I’ll share the story anyways.
When I first found 6to5 (which was Babel’s original name), I was really excited because I had been a bit frustrated with other tooling that existed at the time.
My friend Jason Laster had been talking about AST transformations a few months before and remember thinking “that shit is magic which can’t possibly work reliably, regex replacement is much easier to deal with”
When I came across the Babel codebase a bunch of things clicked. At the time it only did like 4 things and it was very small and easy to follow along with. But I was still convinced that Seb must’ve been some computer science grad that I couldn’t keep up with.
I reached out to Seb via email because I wanted to contribute to his project. It was fairly small things, but I spent hours writing those emails because I was terrified to get something wrong.
Then I found out he was still in high school and had far less experience than me. I was confused.
It’s easy to then think that Seb is some super young genius, but that’s really the wrong thing to take away. Seb’s no genius, having been friends for a few years now I could tell you all sorts of dumb shit he’s done.
But when he started 6to5, Seb came at it with a really great attitude and really strong motivation. Something that I’ve since tried adopting for myself.
Babel’s really not that complicated. If you want to learn about it I have all sorts of resources for you:
Complexity isn’t that hard to deal with if you come at it with the right attitude. Don’t be afraid to get involved because something seems above you. It’s really not, and the people who try to claim that it is are stupid assholes.
A bit offtopic: What are you playing on your gaming PC?
What’s your experience learning Go lang? Why do you think the developer adoption is very slow?
Lol, I’m gonna get so much shit if certain people see that tweet.
I actually don’t like Go that much… or really at all. It doesn’t really address any of the problems that I have with other languages. It’s nice they put so much effort into their stdlib (standard library), but the npm ecosystem completely crushes it in my opinion.
Also, the argument that something being in a stdlib is somehow better than having installable libraries is not interesting.
I don’t know that Go’s adoption has been very slow. Languages don’t get adopted overnight, it takes years and years before most people even start to take notice. I think Go is doing fine for itself.
How can you possible manage working on so many open source projects and having a full time job as well? How do you get time to attend so many conferences?
Well today my job is to work on open source. My only other responsibilities are justifying their existence/development/maintenance and integrating them with tooling inside the company.
But before that was my job, I kinda just overworked myself. I’d work my normal job during the week and on night, weekends, and holidays I would do open source. I would be in a bar with friends and I’d be responding to issues on GitHub.
It was a stupid and very privileged thing I did. I don’t want anyone else to try or be forced to do that.
I’m trying to find new ways to address this in our industry. I joined Thinkmill because Jed Watson and I had ideas on how we could reteach companies what open source meant. It’s actually very easy to justify open source within a company… It’s an investment in the quality of life of your codebase. It pays off bigger than a lot of other investments you could make in maintenance.
I also used to burn myself out on conferences. I had this idea in my head that every conference talk had to be completely new. But after awhile I started making “conference friends”, other speakers who speak so often we’ll end up at the same events all the time. I noticed that their talks tended to bleed into each other, often repeating the same exact content.
So speakers should feel free to give the same exact talk a dozen times and evolve it over time. Stop stressing about creating new content constantly.
Also, I get time to attend so many conferences because I’m privileged as hell. I don’t deserve to go more than anyone else. Which is part of the reason I don’t submit talks to conferences anymore (there are other reasons). There’s a limited number of spots, and throwing myself in there is disadvantaging someone else.
One thing I admire greatly about your work is how you blend design and engineering together. You mentioned in one of your responses that your work is like drawing out an idea. What are some ways that engineers can grow as a designer (both visual and architectural) and what are some ways that designers can grow as engineers?
I think every developer should spend a significant amount of time learning about the job's of the people around them. If you're working with designers all day, you should understand the fundamentals of design. Same thing in reverse for designers.
I really don't understand how you can expect to work well with someone without understanding the job that they do and the perspective they are coming from.
For me, I actually started out trying to be a designer. I was terrible at it, but it got me started.
There was an interesting discussion on Hashnode recently on TDD. What's your opinion on it?
Do you do test-driven development (TDD)?
I don’t do TDD. A lot of people who obsess about testing would probably be horrified by how/how often I write tests. I do some functional testing for most packages and only go deeper when I need to get stuff out of my head.
I tried to to TDD/BDD, but I really never got any value out of it. It didn’t really help me figure out what I wanted to do, and often times it caused me to do something I later regretted.
If my development is “driven” by anything, it’s actually drawing. We have these massive whiteboard walls at work and I fill them up all the time.
Lately the work that I’m doing is much more high-level. I’m doing “architectural” design work which gets implemented by one of like six people. Oftentimes I’m not even part of figuring out all the implementation details. I spend most of my time trying to explain an idea and justify it’s existence/design decisions.
But, my answer isn’t necessarily the right answer for everyone. If people get value out of TDD, then they should do it. Is it right for everyone? Absolutely not. People have very different processes for figuring stuff out. So if you were to say “everyone on our team has to do TDD”, I’d think you’re a dumbass. If you were to say “TDD can be a really useful tool for a lot of people, and everyone should at least try it”, I’d wholeheartedly agree with you.
How did you become involved with TC39? I always wondered who are these people who push these standards down my throat, and here you’re 😄
I don't think anyone on TC39 is trying to push standards down your throat. They're just trying to address problems people have in the ecosystem.
I was semi-involved with TC39 because of my work on Babel for a few years. When I was at Facebook I started to go to the TC39 meetings as well. I'm hoping to return to them soon enough with a couple spec I've started to write.
How is the startup scene like in Australia?
Developers have to learn new technologies very often. Whats your technique to learn new tech or stuff ?
Learning is itself a skill worth focusing on. I learn new tools, languages, and concepts all the time even though I often don't do anything with them.
I think that fear plays a lot into our ability to learn new things. Fear of change. Fear of failure. Fear of starting over.
But things are always going to be changing, it's worthwhile to figure out how you can best adapt and keep moving. It's not reasonable to think that you're aren't going to have to learn new things throughout your career, developer or not.
At the same time, don't worry too much about keeping up with the latest thing. Spread yourself out a bit and learn lots of very different topics. They tend to reinforce one another.
To give you an example, if you look at Flow, it’s sort of a static type checker that helps you catch bugs on the fly.
I’m not entirely certain what you’re trying to ask so I’ll reword the question to my understanding: “What new tools/libraries/etc would you like someone to create that solves problems developers are facing today?”
I can’t really think of anything that I would like to exist that I’m not already trying to create. My
~/Projects folder is filled with dozens of repos not on GitHub yet which I’m halfway through.
These days, most of my focus is on design systems. Which break down UIs into small components/elements/atoms/symbols (whatever you want to call them) so that they can be composed together to create very complicated designs easily. I’m focusing more on the developer side, but a lot of it is designed so that developers can work more closely with designers and product managers.
There’s a bunch of people at Airbnb who are working in a similar place, but a little bit more from the design side. I hope to meet them in the middle and create the next generation of tooling. I’m doing it so that small companies can innovate at the speed of some of these larger corporations.
Have you faced dependency hells when it comes to using different frameworks in your projects?
I don’t find “dependency hell” to be a really a very meaningful term in of itself, I’ve seen it mean everything from the “left-pad” problem to an individual function which has too many dependencies.
So I take it as meaning “complexity”, and most of the time I think it’s one of those bullshit excuses we use to disable ourselves and give up.
Let me first be clear that I don’t intend to shame people or come from a place of more experience and look down on those that don’t have it. I’m saying this because I would kick my formal self if I could, but I can’t, so I’m kicking everyone else.
Everyone fears complexity because they think it’s too much for them to deal with. They give up just looking at it and turn off the part of our mind that breaks down problems. You need to recognize when you’re doing it and consciously stop yourself.
I believe that fear plays a bigger part in our ability to achieve things than any kind of technical ability. I often say to people: I don’t want to hire and work with the “smartest people”, I want to work with a group of people that gives each other confidence taking on bigger and bigger challenges.
I’m working closely with this other developer right now (sorry for calling you out buddy) who has a lot less experience than me creating open source tools and build systems stuff. Every now and then, I go on and on about all this things we should build and I cause them to panic about taking too much stuff on at once and not being able to hit deadlines.
Two things happen here:
- Sometimes it’s a reality check for me to realize I’m going off on a tangent and not solving the immediate problem. This is actually a really good reason why you should surround yourself with people with different experiences and difference levels of experience.
- Sometimes I have to stop and break down all the work we’re doing so they have a clear picture in their mind and kick that part of their brain that sees complexity and wants to panic.
Obviously you can make a lot of mistakes when designing your library/app/etc which tangle themselves throughout your codebase and make it near impossible to replace.
It might suck, but if you look it as hell and throw your hands up, you stop maintaining your codebase. Eventually it leads you to the natural conclusion “we should rewrite this from scratch” which is almost always bullshit (sometimes it’s not, but that’s a whole other question).
How do you create new npm packages? All files manually? Or use some automation?
I’ve sat down a number of times and automated the process. I’ve made yeoman generators, I’ve made my own custom tools and scripts to automate the process. They were all shit, every last one was a waste of time and I threw them all out almost immediately.
Automation can improve a lot of things, but it can also get in the way of reevaluation. I’m constantly changing my mind about different tools. For example, since Prettier came out I've gone back and forth several times the value of adding it to every project. I’ve done this with tons of things.
A couple years ago I would setup a dozen or so tools for every single project I started. Babel, ESLint, Gulp, Browserify, Uglify, Mocha/Chai/Sinon, Karma, Travis, Code Climate, Istanbul. For most projects, I didn’t get value out of any of them.
Today, I’ve trimmed all of that down to two tools: Flow & Jest. Everything else is left out until I have a concrete need for it.
Starting a new project looks like this:
git init project && cd project yarn init yarn add --dev jest flow-bin yarn flow init flow-typed install jest@21 touch README.md LICENSE index.js test.js .travis.yml .gitignore
I paste the content for the
.travis.yml, I make a couple edits to the
package.json and add
.gitignore and I start working. It takes me less than a minute every time. When I’m done I run:
hub create user/repo -d "description" npm version major npm publish git push origin master --follow-tags
I wait until a need for a tool arises before I add it. I don’t add Babel even though I use Flow because I can just use the
/*: comment */ syntax which is fine.
I don’t really try to optimize my workflow with all sorts of automation, keyboard shortcuts, and fancy tools. If I’m not getting enough value out of something I cut it, even if I once thought it was awesome.
Hi James! What are the few things you hate about the current state of Open Source Ecosystem? How can I, as a beginner developer, contribute to improve those things?
As a individual contributor to the ecosystem, the immediate thing you can focus on is your attitude. A friend of mine, Jacob Bass, said something really great a couple months ago that I keep quoting him on.
“The second you start using an open source project is the second you become a contributor to the project and just as responsible for it as the existing maintainers.”
That’s not a direct quote, but I can tell you that’s what he meant.
Assuming you (the reader) are not an needy asshole, you’d probably be surprised how demanding people are. I’ve received a number of issues, emails, even people coming up to me in person at events, from people who will insult my intelligence, mock me for my mistakes, tear me down for my shortcomings, and attack my integrity.
I look at them and I’m just disappointed. They clearly don’t understand how far I would have gone for them if they had just treated me with kindness and mutual respect. I’ve spent thousands of hours doing things for strangers, but this selfishness stops me in my tracks because I know I can never satisfy them.
You asked what I hate about the ecosystem. I could go on about how I hate that companies don’t do enough to support open source. But I don’t think that’s what’s going to make me happy.
The open source ecosystem can be such a beautiful place. When it is good, it is fucking great. It changes lives in really tangible ways. It’s a growing foundation for our future which we can all be a part of and make a huge difference. Excuse me while I go soft because I’m really passionate about this.
If you’re looking to get started, just know this: We’re all just people here just trying to help other people. It might surprise you that this isn’t a meritocracy. You can become open source “famous” and never have a “brilliant” idea. All you have to do is participate and come in with the right attitude towards helping and understanding one another.
The number one thing you can do for the open source community is to come in with the attitude: “This is my community and I’m responsible for the health of it.”
Take the time to understand and learn from other people. It’s easy to come in and be selfish about what your needs are, but nothing will annoy contributors more. You really won’t get anywhere with that attitude.
What's your opinion on React MIT License? Is it a boon or bane according to you.
Apologies, but I’m really tired of talking about this now. I was never worried about Facebook doing something shitty with their licenses, I’m still not worried.
Most of the people who were stirring shit up about it are known assholes in our community. Several members of the Ember core team once ganged up on me about React PATENTS at EmberConf and starting shouting at me even though I didn’t have anything to do with Facebook at the time. They were so angry it worked me into a panic attack. I only got an “apology” from one of them which was basically “Sorry, I didn’t know you would respond that way.”
I have been angry at Facebook for many other things, I think it’s fair to attack them for not doing enough and for the things they do wrong. Just don’t go after the people for fucks sake.
Hi James, I hope you are well.
Today I had a problem testing flow + react with Jest. I was trying to test an invalid input in component's Props (In that case, I was testing a component with "color" props as a number, which should call "console.error" with something), although I used this props in the render function like "this.props.color.replace(...)". My code threw an exception about color don't have a replace function and don't even check type before.
I tried to use flow-runtime in babel without success. Do you suggest anything?
What are the biggest (technical or non-technical) problems you have experienced?
Who are some Internet developers you admire?
I admire many of my friends. In order of which ones I found in my DMs first: Ryan Florence, Ken Wheeler, Bradley Farias, Jason Laster, Tim Disney, Jordan Harband, Daniel Ehrenberg, Tracy Lee, Emelia Smith, Sarah Drasner, Franziska Hinkelmann, Ashley Williams, Devon Lindsey, Brian Terlson, Michelle Tilley... I could probably go on for awhile.
What's your view on the recent developments in the design system space with sketch, airbnb and invision building tooling around it?
What do you think the future of design+dev look like?
I think Airbnb and others are creating the future right now. They had a demo the other day where they were sketching out UIs on paper and generating mocks using their actual components.
I think we're going to see UI development become a lot more about running experiments with designers.
Hope you're having a great morning!
What's your submitting for writing CFPs that get selected?
Bonus: What's your favorite food thing?
Hey Siddharth, my morning is going good so far. Isn't this like 3 am for you?
I'm not sure what you mean about CFPs. Are you asking how I write CFPs?
Favorite food right now is literally anything Mexican. Mexican food barely exists in Australia and when it does it's crap. I miss the Mexican food in SF so much.
Do you recommend working at Facebook at all? As a developer having worked in smaller companies, I imagine that the challenges behind working at Facebook or Google must be even more interesting. But then that the outside view, how is it from the inside? If you don't want to answer this don't :)
My comfort zone ends when I stop knowing everyone in the company. While I'm okay being a bit out of my comfort zone, Facebook was way too far out of it. Some people thrive in that environment. I really can't say anything other than it not being the right place for me.
I like working with like 20-40 people and being able to jump around and being able to get my hands on everything. I really value being able to just create repos on GitHub and starting new shit. That's what I look for in a job.
Follow up on my question:
I meant do you have any advice on picking topics / key points of the proposal / having a conversation with the organisers of the conference before submitting, that kind of stuff that has worked for you in the past?
We have an Indianised version of mexican food here, it's like spicier if you're into that
Yeah it's past 3 😅 Have to catch a flight soon!
These days I'm mostly invited to speak at conferences. I turn down the majority of them because I don't want to overwhelm myself, and I don't think people need to hear me speak that much.
When I do submit proposals, it's usually because something has been bothering me and I think a talk is the best way to address it. The best talks are driven by problems the speaker is currently embedded in.
I'll need to head to India soon, I love spicy food
Thanks for taking the time to answer questions, it's been a very interesting discussion.
I was wondering about your advice for occasional contributors to OSS. I've sent pull requests and documentation to different projects over the years, but I've never had the opportunity to get fully involved with any particular project. (the projects I have maintained I never found enough time for and ended up having to abandon, which I still feel guilty about).
Does it hinder a project when people only submit small patches without taking on maintainer responsibilities, or can a project thrive on a set of occasional contributors?
Hi James! Any advice for developers that are beginners? I mean, what do you think they should focus on that will make them become proficient ? Lastly, what has been your biggest achievement so far as a developer?
I don't really have much advice for learning (people learn in many different ways). I would suggest learning lots of very different topics, even ones that might not seem applicable for what you want to be doing in and out of your job. Different programming topics tend to reinforce one another.
Biggest achievement? I have no idea... I'm pretty proud of all the open source work I've been able to do.
Hi James, I work on side-projects and working on something now as well but often the tricky part is getting the word out to the right people who would benefit from the project. I tend to rely on twitter most of the time to get the word out. What's would be your advice?