In this episode I chat with Kent C. Dodds, an engineer at PayPal and member of the TC-39 committee about work life balance, education, open source, life as a TC-39 member, and more.
const T = 'Tyler McGinnis' const K = 'Kent C. Dodds'
T: Hello hello hello! Welcome to the first episode of the Tyler McGinnis podcast. Because this is the very first episode, I want to take some time before we dive into it to talk about what this is all about. There are so many people in our community that I admire and almost all of these people have incredibly interesting stories. Whether about a specific project they’re working on, career failures and successes, how they got to where they are today, or just their thoughts on the future of writing software - most of these stories go untold. So, I guess this podcast is about us discovering the implementation details of those we all admire in our community.
T: Not a lot of people realize that you haven’t been doing software your entire life, right? Like you have a really interesting story because you’ve gotten to a place that’s pretty, I mean you’re at PayPal right? You’ve been pretty successful but you’ve done it in a pretty short amount of time. So most of the questions I want to start off with early on are related to that. [2:20] So the first question I have for you is if you were giving a conference talk about a new technology and you knew nothing about that technology, what would be your approach?
K: I’ve kind of done this, and it’s actually a really great learning technique. I probably wouldn’t want to do a conference talk at a conference with people who actually pay money about a topic I only had a week to learn. But for a meetup or for teaching your coworkers, that’s like a super way to learn a new technology. My approach to learning, is I would try to build something as fast as I could with that technology. And my talk would effectively be about the learnings of the beginner at that technology. I have given a talk before I was really into React, I gave a talk called “using React.js in an Angular.js application” where I effectively start rewriting a piece of a angular directive in React and then like eat the whole app from the inside out. And that was like a whole live coding thing, and I actually think that live coding can be successful in that way if you practice a lot. But yeah, as far as like preparing, basically it would be me learning as fast as I could by building something, and then teaching the things I learned from building that thing. But yeah, hopefully I am never asked to give a talk at a conference a week before or something like that. Well, actually I have been notified two days before “no, actually we did select you to speech”
T: Oh yeah, was that forward.js?
K: Uh Huh , so I had to prepare that talk in two days, but it actually turned out to be a good talk and lots of people ended up watching that.
T: And that talk was about getting started in open source.
K: That talk was called “Zero to Sixty in Software. How to Jumpstart your Career”
T: What’s interesting about what you mentioned, is as you get more experienced, those are always the conclusions. But as you’re a beginner building something is the scariest thing. Cause you’re like I could go and take this course, or I could go watch this Youtube tutorial. And you get this illusion that you feel like you’re learning fairly quickly, but it’s such a trap, because just as you mentioned, doing it and failing and failing just like being terrible at the thing, and eventually you just get good at it. Another thing you mentioned too, was teaching it, that’s something that I have had a lot of success with in my career too. I mean you just nailed the formula, which is basically build something, and find someone to teach it. And if you can do it that way you can learn things incredibly quickly.
K: Yeah people ask me how do you learn and my process is you have this giant funnel of information and it comes from twitter, and newsletters, and podcasts, and you just get very surface level information. And that helps you determine what technologies could enable me to build a certain thing. Oh GraphQL is a thing, so I log that away and I know that I can use GraphQL to build a blog platform or whatever. And when it comes time when you want to actually learn something, actually learn something, then you come up with a project idea, or maybe a project idea lands in your lap and you want to have ideas for the technologies to use. So that large funnel of information, shallow levels of information, kicks in there and then the building is where the learning actually happens. So I think that I am an instructor, and I do that for a reason. Because I feel like I am helping other people, and you are an instructor and certainly feel the same way. So I don’t think that there’s necessarily a problem with the tutorials and videos and stuff. But you are right, it kinda does just gives you an illusion that you are learning this stuff. And the instruction that we do for people, shouldn’t be the only experience that people have with these technologies. So we give these workshops or these course and people are supposed to get their hands on these keyboards and get working on actually building things, otherwise all of that information goes in one ear and out the other and they’re not actually learning it. And then once you have actually built something like you drove home a little bit by teaching, that really solidifies your learning. And I love the quote from Ashley Williams, and I don’t know if the quote is originally from her, but she is the one I heard it from first. But she said “teaching is nature’s way of showing you how sloppy your understanding is” and that is so true. Hopefully you see how sloppy your understanding is before you actually teach it to people, but the process of preparing is how you realize “oh I don’t actually understand what the temporal dead zone is” or “ I don’t understand how to use a REDIS database or something like that” You really learn as you are teaching other people because you don’t want to give them miss information. You want to be prepared for questions. So I think that the best thing for my career has been realizing early on has been the best way for me to learn things is to teach. And I started doing that even before I even graduated, I started teaching Angular to my co-students, and my classmates, and that really just accelerated my learning.
T: I agree
T: [8:00] So on a similar note, knowing what you know now if you had to learn to program all over again and start from scratch, so you don’t know the technical side of things but you understand the bigger picture of everything basically just talk about, what would be your approach basically to get back to where you are right now.
K : hmm I wouldn’t of started in Java thats for sure, haha no I’m just kidding. Java’s good. But I had a lot of good experience with that. But I would of probably started learning with more fundamentals, but like I think that having a good mix of fundamentals and like that good kick that you get whenever you see your work being used by other people or when you refresh the screen and poof your changes are visible. There’s a good balance there cause you can use frameworks and you can do amazing things and we can us React to do some really amazing awesome stuff. Like I can scan a QR code with my phone and start editing with an editor and poof right from my phone right into the browser and use snack.io or whatever I think. It is this really super cool thing from expo and that I think is really awesome and that kinda helps motivate you to learn but also like the fundamentals of the programming language, but getting an understanding of that can not be overstated. It is so valuable.
T: Yeah this is interesting coming from you because you do not have a technical computer science degree right?
K: uh huh
T: You were Information Systems but lately you’ve been working alot with ASTs, [9:36] So how would you say someone coming from a bootcamp background or even someone from Information Systems, where they are techincal but they are not like heavy data structures like ASTs, all of those. Would you recommend or what’s the path that you would recommend them. And I know there’s this balance between pragmatic and hard core CS technical. But if you were to define a path for a that person maybe like three to six months. Where would you start?
K : Kinda like a curriculum?
T: Yeah I think that’s a good point, that’s interesting because it’s the same with business, you always hear people say that they want to a business but they don’t know what to do. And the biggest thing even with technology is just do something and then you will get ideas. Like find a random book about Canvas, or whatever and just start reading it and you will have ideas and explore your ideas and eventually you will learn a ton.
K: Yes, actually when I was first starting ideas were so hard for me. I always had a hard time thinking of an idea. But now I have a bunch of different projects and all of these different projects have needs. And it all kinda builds on itself like “ oh I wish I had a app that had a way to manage all of these projects in some way” or something. The ideas will start coming once you start.
T: [13:32] What are two or three decisions that you have made that have had the biggest positive impact on your career?
K: Yeah I am glad you asked that question. I have a couple things in particular. Um the first is making sure that as much as I do is public. If I am going to have a conversation with someone about something and solong as that conversation isn’t about a personal nature or has sensitive information as part of it, I will try to record that conversation in some way. And most of that for me is going to be a video chat, so I can just use google hangout or google hangouts on youtube and it is automatically recorded and put on youtube for me. That has made a really positive impact on my career. It just makes you more visible and it just shows people what you really know. It also shows people what you don’t know, and it is OK to not know everything. So a couple of things that I do, I do this type chat thing where if I have a question about a particular technology or someone has a question about me it is recorded on Youtube. And you can find all of those things on my Youtube channel. And so just like on this last weekend, I went on a really long drive and I was just driving by myself and set up an uber conference call and uh had people call in just to keep me awake. I recorded it. It’s not up yet but it should be up eventually. So that what we’ve created now is something that is useful to people now. And when you do things like that people are more interested in joining you in a conversation. Especially busy people, their valuable time isn’t going to be used up, their very valuable time isn’t going to be used up just talking to one person. But that impact is going to be wider, so I can talk to ten more people who are busy because they know that they are making a bigger impact. I also do live stream so if I am working with open source I try to do as much as I can. I’ll just live stream it because it is open source anyway. Except for today I accidently revealed my github personal access token.
T: Is that the first time you have done that?
T: The first time really???
T: At least it wasn’t like James Kyle on stage at React Rally.
K: That was hilarious
K: But yeah that kinda leads into the second one I wanted to talk about and that is I gave a meetup talk at the angular.js Utah meetup a couple of years ago and it was you know it was the classic learn something build something with that, and then teach what you learned. But that was recorded and put up on Youtube, made publicly available and John Lindquist, the egghead.io guy, saw that and asked me to make a course out of it. And that was the first thing I did for Egghead and that was a huge benefit to my career. That made a huge difference and as part of that I felt more confident in my teaching ability and with that I started reaching out and talking at more conferences and I became a much more public figure as someone who can teach and who people can learn from and so that was another thing that just made a huge positive impact on my career. I feel like, I thought of a third one.
T: You can get back to me.
K: Yeah, I’ll get back to you.
T: Yeah I think that we keep on coming back to what is so foundational, which is just sharing what you learn. But even like, even what’s interesting what you just described is I always learned something and then shared it, where you share it as you learn it. Which I think is beneficial for everybody because then they see your thought process as you are learning it too.
K: Yeah that’s for sure, I do, I do try to avoid miss information and I have like I have given a talk where I gave misinformation about ES6 modules. And that was embarrassing and I wrote a whole blog post about how it actually worked, and I went back to the recording and I apologized for everything because I do not want to spread misinformation. But yeah, I would agree with that because I do try to teach as I am learning and I do think that that is valuable because someone once said once you learn functional programming, you cease being able to teach it. And so , whether that is true or not, Dr. Boolean is pretty good at teaching functional programming and I think that there is some truth in that and you do get detached from like the context and the understanding of how people are feeling when they are learning something. So the teachings as you go can help you stay connected as that.
T: What was the third thing?
K: The third thing was open source. That has been a huge thing for me. And so far I have been really lucky to be able to contribute to open source and have my own open source libraries and that kinda goes back to make as much as you do public. And so if I am building something for work and it is generally useful for my work project then it is generally useful for other people. And so if you can just put a little more work into making it generic enough to be useful to people but simple enough to be useful, then open source that, and what you will find is the end result is going to be better anyway because it is easier to test in isolation, the documentation will be better because you care about other people being able to use it. It is good for your career as well, because people will be able to see it. And I don’t hold it against somebody if they don’t have a whole green github contribution chart but it is nice to be able to look at someone’s github chart and see what kind of things they are involved in, so it is a plus. So those things are intriguing.
T: [19:20] The one question I hear a lot which you probably hear a 10 times more than me is “How do I get started with open source?”
K : Yeah yeah so I wrote a blog post, I do get asked that a lot and so you can find it at kcd.im/what-oss It’s what open source project should I get started with or contribute to. The basic idea there is you’re using open source. I would be surprised if you weren’t using open source. So that would be your first step make sure you are using open source. And then based off of your usage, you probably run into things that are counterintuitive to you or confusing, maybe the docs aren’t very good. And then you finally come up with the aha moment where you understand now. And then you can probably contribute to the documentation to make that process a little easier. And contributing to docs is what I did. My first open source contribution was to the Play framework Play 2.0. It’s a Java framework and I was debugging, stepping through their code and I noticed a typo in javadoc and I went and fixed it. And I think that’s the real challenge, is the first contribution ever is not easy. And I have a talk about that as well I gave at Fluent last year about getting your first pull request in and how to go about that and as a maintainer, how to make it easier for people to do that. And yeah, getting started is really just a matter of identifying a project, one that you use that you found confusing, contributing documentation, or identifying a feature that you’d really like to have. Then I have a whole course on eEgghead that is totally free about the process of making a pull request and getting it merged into your project.
T: Yeah, I think I’ve heard you mention this before and one thing I completely agree with is that there’s no pull request that’s too small. I think that even with small README fixes gets you in the mindset of contributing back. I think that I told you this on Twitter before but my very first pull request was, I don’t know it was like 5 years ago or something but it was to Socket.IO and it was a missing comma and Guillermo was like “Hey, thanks so much I really appreciate it” And I was like “Oh my gosh. I did it!“. You know! And it was just like literally a comma, but even from then it’s like you plant this seed and then it just grows!
K: Yeah and Github makes it really easy. If you go to one of those files you can click on the little pencil and edit it right there inline. Yeah github has done wonders for the open source world. It’s been amazing just the last two years the couple of features that they have implemented have really changed the game for maintainers. I’m not going to say that it is easy to get into open source. It is hard, it is not easy to get into open source. It’s not easy to get into coding, coding is not easy. But you put in the work and and things happen and it’s really cool. So I definitely recommend people get into open source it will make you a better coder.
T: So one thing I have noticed that you are really good at, and there’s this interesting balance, whenever you come out with a project, typically that project is repliacing an existing framework or library, and there is this temptation to kinda just poop on the other library and talk bad about it. Because essentially what you’re doing is saying my product is better than this other product, so use my product. But, with that said, behind that other project is a human being who spent their nights and weekends for a months building it. So one thing you are really good at is talking good and saying what you like about your own project without dismissing or talking bad about other projects. And I think that’s something that everyone can learn from. So I’m wondering if you have any advice, or tips to give.
T: What were those trade offs?
K: staff components, I love the api’s. It’s for those who unaware staff components lets you create components that carry their styles with them. And this is in the context of react, so if you say you want a button and that button should have a background color of blue and all of these other styles and anywhere you use that button it is going to have that. Those styles abid and then you can kinda compose these things together or override styles and stuff. It’s a nice api. So I loved that api, and I thought it was great. And then I also loved the jsx style api which effectively doesn’t create a style component it has components built in and then you apply styles free of props. So you say Margin -top equals ten as a props. And so I , I, liked both of those but I wanted to9,I liked the js6 api kinda as it was but I liked the style components of the api because I made it really easy to create style components that carries those styles with them, except at the time style components was like 75 kilobytes it was very very large because it ships post css. It doesn’t do that anymore but it did at the time, and then I also it uses string for your css, so it’s like normal css I personally don’t like objects for my css. When I am doing css in js, it is in js, so I just like it as a object. Um and so iI created a library and there are other libraries like react.js, sass, cxc, and styletron, there are a couple other libraries that do this but I wasn’t really into there like the way that they expose the api. So I yeah, that’s why I created Glamourous so I could have something that was super fast or and um oh and another thing was my app that work we had to support our conversion for our css. So right to left languages. You know if you say left:0 it switches to right:0, its kinda magic stuff, its really hard. I had created a project called rtl css that will do that for css and jsx objects. Cause I was using it with aphrodite and I wanted to use that with whatever styles components like solution that I have and style components didn’t support that at the time. Um I don’t even know if it even does now. So there were like, again it was all about the trade offs you were making and communicating those trade offs so people understand what the shortcoming or benefits are to using your library.
T: what does building the web look like in three to five years?
T: You are a member, delegate (I’m not sure what the correct term is) on TC-39 for PayPal. Can you explain what TC-39 is, why it’s important, and more specifically, what does a typically TC-39 meeting look like? From the outside world it is a little bit magical looking.
T: Lawyers Man.
K: Yeah seriously they just ruin it for everybody, so uh Yeah my brothers a lawyer
T: So is my dad
T: So I think that it is pretty clear that you are a really busy man. And I think one thing not a lot of people know either is that you have a lot of little kids running your house. You have three?
T: Three and almost one more?
K: Yeah, in almost one month
T: So it will be almost four kids, what does the average day in the life of ken look like?
K: Well we are sitting here in my office, nobody else can see it. Yeah my office is a bedroom in the basement of my house, yeah there is a walkout basement so my window looks out to the backyard and I can see the garden that is so full of weeds and that kind of stresses me sometimes. But sometimes I will see my kids running around out there and I work from home so it is just amazing. Um I can’t, like I can understand that some people don;t work from home very well, like maybe they don’t have support from their family in some ways or they just fell uncomfortable feeling alone. But I can of make up for the loneliness by hanging out with people at meetups and going out to have lunch with people. Day in the life of Ken, I get up at 7:30am every morning cause that’s when my kids clocks turn green. And they can come out when the clocks turn green and they immediately at 7:30am
T: Do they sit there and watch it
K: I’m sure they sit there and watch it. And yeah, mostly my son, he will come running out and say “dad let’s go make breakfast” And we will make breakfast and then you know it’s pretty like uh slow of a morning because I don’t have to make a commute, I don’t have to get a head of traffic, I just have to walk downstairs. And I get myself ready and then I walk downstairs. And I try to, paypal is really great, because they let me do this. When I get a story one of the first things I do is ask myself how can I take the stuff I am building and turn that into an open source for paypal? And so that what glamourous uh was and that’s what downshift is that I am working on right now. And Yeah so then if I can get something where I am working on opensource during working hours that’s like awesome. And then I try to live stream it, or do whatever and it’s so fun, when I livestream I am so productive, and I just stay so focused, cause I can’t get distracted. So uh other than that I am just working on stuff I do plenty of email sometimes I feel like a project manager, I am a team Lead so I spend a lot of time helping my team. I spend a lot of time working on the open source projects and my silly amount of pull request because I work really really hard on my projects easy to contribute to and very inviting for contributions. Umm and so I spend a lot of time reviewing pull request and stuff like that. Um but yeah, and then lunch time rolls around and oh before lunch I have to stand up like normal agile everyday stand up. And then I go have lunch with my family and my youngest son is still taking naps, so I read him a book and put him to bed. And you know I love coworkers I really do, but I would so much rather read a story to my son than just like shoot the breeze with my coworkers. I’m sorry, like you just can’t beat that. So yeah, and then I work the rest of the day and then I do up stairs and have dinner and hangout and when the kids go to bed at seven I hangout with my wife and we spend the next hour just keeping our kids in their rooms. Hah and then we will just hangout, my wife and I and often I will be working on something like a course for frontend masters array, or an open source project. I am really trying to get rid of these, and so I will take some time in the evening to do that while she is working on a project or watching a show or something. But yeah we try to, my wife and I try to do a dater every week and my family does family home evening thing every monday night and yeah. So that’s kinda the day in the life of Ken.
T: So one thing I was going to ask you was how do you manage burnout and how do you manage , but it sounds like and I guess this is a new question. Have you found that with that schedule which seems very balanced, is that essentially the answer to the question of how you manage burnout?
K: Work life, and balance and burnout I will answer those two separately. So work life balance I think requires a good schedule. So when I am done with work I go upstairs and hang out with my family. And when the day is over and I hangout with my wife. Sometimes I am not really good with this, but I try to be explicit with my wife about what the expectations of the even are and so if I am working with something, then I say ehy hun is it ok if I go work on this thing for a couple of hours and that’s the end of the day for us. Cause then I can work on stuff and then she would say oh no not tonight because I would really like to do this thing together. And that is totally fine and last night we were playing games together and stuff. So it really just kinda depends on the night but having a schedule and begin explicit with if you’re married or with somebody or with your partner than that is really helpful. And there is the burnout which I will talk about here in a second.
Daughter: The quail are down there again.
K: Oh they are under the tramp?
Daughter: Yeah I saw them
K: Ok when I am done talking with my friend I will come help get them out. I saw them walking around by the tramp, I thought they might fall down there.
K: Yeah so for burnout, I think one of the reasons people burn out is not really the project becomes not fun to work on anymore, maybe it’s the amount of work they are putting into it. But often I find that burnout coming from just feeling so stressed that so many people are waiting in line for you to speak. Nolan has a great blog post about this where he describes the feeling of he has hundreds of issues and that represents hundreds of people waiting in line and you work with each one of them one at a time and he keeps looking at the rest of the line thinking oh my goodness this is so stressful. And that is a constant leaving burnout. It’s just that guilt so I think pretty much for me. It amounts looking down at the line and yelling i’m sorry I don’t care. And like I do care, but I don’t and just realizing that you don’t own them anything. And I think a lot of people realize that but you still kinda feel guilty so that is something to kinda get over. That you don’t own the world anything, like it if has to be this way then you just like turn off your notifications for a particular project or maybe add a note explaining hey I am not changing this. Or just taking a step away from it, you don’t have to respond to any issues. And you have a code of conduct and people are jerks than you block that. And that’s the way that it works, I’ve luckily never, i’ve honestly, it’s surprising to me. I have seen other people people be total jerks on other projects but I have a fair number of pretty widely used projects and I rarely have people be rude or unkind to me. And I think Dan Abramov is very good at responding to people who are rude and unkind so yeah watch his example. But yeah not feeding the trolls and just being, you know, if somebody isn’t going to play nice, you let them exit your community in a forceful way. But yeah, I’ve not really had to deal with that. So burnout for me is if I don’t want to work on it, then I don’t work on it. I satisfy the use cases that I want. And if a project ceases to become something you’re excited about. Ceases to bring you happiness, then stop working on that project and find something that brings you happiness and no one can blame you for that.
T: Who are your heroes?
J: So I mentioned Dan Abramov, I’m really inspired by Dan and how good he is, and friendly he is to people. He just really cares and I’m inspired by that. I’m also inspired by Ryan Florence and the way that he teaches. I’ll watch his workshops or just see talks from him and I’m just amazed at how clearly he explains things. Kyle Simpson is the same way. I’m just always blown away by how well they teach stuff. I’ll watch stuff that they’re teaching about things that I know, things that I could also teach, just so that I can learn from their teaching methods because they’re just really really good. With regards to career specific heroes, I have other like life heroes, for the developing career, those are some people that really inspire me. Another is Henry Zhu, he is the maintainer of Babel. Holy cow that guy is just so cool. He’s a religious person, very faithful, he’s also just an incredible maintainer. He gets a ton of people being total jerks on his projects and he responds with laughter honestly. He’ll take a screenshot, not of the particular person but of like the comment and just like “LOL at this thing”, it’s hilarious. And for some people that would be a total drag and would hurt their feelings, he just kind of laughs it off. He just works so hard and just wants to be helpful to people. So I’m really inspired by him as well. So there are a lot of people, but those are some.
T: Who are your non technical ones, if you don’t mind me asking?
K: Jesus Christ for sure. So I am religious. I’m a member of the Church of Jesus Christ of Latter Day Saints. So yea, I definitely look up to Jesus Christ. And my Dad was and still is a very inspirational person to me. He taught me the value of work and that work should be your best friend and that with work as your friend, you can accomplish a lot of really great things and bring happiness. You shouldn’t be afraid of work. My Wife, definitely is an inspiration to me. She is my hero because when I’m off at these TC39 meetings, she’s left at home with three kids and she’s pregnant. I can’t even speak to that honestly, it’s just incredible. My Mom, also. She taught me that one thing that she always said is that “heart is good”. So just having a positive attitude about the difficulties we have and just making the most out of the challenges we have. I think that’s a very valuable skill for people to have. She was also the mother of 12 children and if that doesn’t qualify for hero status, I don’t know what does. And all 12 of the kids, all my siblings, we all still love each other and everybody is living good happy lives. So yeah, I’m just inspired by many people but those people in particular.
T: What’s one question I should have asked you, or, on that note, one thing you wanted to say that you didn’t get to say.
K: Yeah. I just wanted to say that, anyone listening to this podcast is probably interested in advancing their careers in some way or just becoming better as a developer wanting to hear the stories of other developers. I would just say that nobody is a God in the, you know, the software world. There’s nothing that I’ve done that should be worshipped, certainly. Nothing that I, like I literally started being actively involved in coding like three or four years ago. When I came to this earth, I knew nothing. Basically what I’m saying is that you can do it. There’s really nothing special about me in particular. I’ve been really privileged for sure. I definitely want to emphasise that. People roll their eyes when I talk about privilege but I think it’s very important and it motivates me to share the things that I create with other that may have not have grown up in a happy healthy family with very few stereotypes places on me and been able to get the jobs that I wanted and not have to worry about getting paid enough because I’m a heterosexual white male. I am definitely privileged, but outside of that, it really comes down to working hard and learning as much as you can, and giving back to the community. You can do it!
T: Beautiful. I think we’ll wrap up with that. I really appreciate it. Always, always a pleasure talking to you.
K: Yeah. Thank you so much Tyler.