Michael Kennedy · talkpython.fm

Are you new to open source? Maybe been using it for a long time and never got around to contributing to it? Wondering how to get started?

In this episode, you'll meet Anthony Shaw, Dan Bader, and Ronald Maravanyika. All of these guys have been successful open source developers. I speak with them about how to find a welcoming project and what you need to know to get started.

We also cover what open source project maintainers can do to help attract new and experienced contributors.

Collapse transcript

00:00 Are you new to open source? Maybe you've been using it for a long time and never got around

00:04 to contributing to it? Wondering how to get started? In this episode, you'll meet Anthony

00:08 Shaw, Dan Bader, and Ronald Maravanica. All of these guys have been successful open source

00:13 developers. I speak with them about how to find a welcoming project and what you need to know to

00:18 get started. We also cover what open source project maintainers can do to help attract

00:23 new and experienced contributors. This is Talk Python To Me, episode 132, recorded July 27th, 2017.

00:31 Welcome to Talk Python To Me, a weekly podcast on Python, the language, the libraries, the ecosystem,

00:50 and the personalities. This is your host, Michael Kennedy. Follow me on Twitter where I'm at

00:55 mkennedy. Keep up with the show and listen to past episodes at talkpython.fm and follow the show on

01:01 Twitter via at Talk Python. This episode is brought to you by Linode and Talk Python Training. Be sure to

01:07 check out what the offers are for both of these segments. It really helps support the show.

01:11 Hey, everyone. Before we get to the interview, I just want to share a little bit of the backstory

01:15 with you real quick here. So right before the show started, something happened in Zimbabwe that made

01:21 this really difficult for Ronald to be on the show. There was a citywide power outage where he lives.

01:27 Unfortunately, that's something that happens every now and then. And right before we started recording,

01:32 he had to scramble to find a place where he could just get in touch with us and get online. His audio

01:39 might not be as good as he had planned. And I just want to let you know so you don't think,

01:43 know, he didn't set up for this. Like he made heroic efforts to get onto the show. And I just want to say

01:48 thank you, a special thank you to Ronald for that. And also, if you're thinking about the challenges of

01:53 being a software developer sitting in the US or Europe or somewhere like that, where the power is on 99.99%

01:59 of the time, and it's all a matter of just the code, think about battling things like power outages just

02:05 to contribute to open source. Once again, Ronald, thanks for being on the show along with Dan and Anthony.

02:11 And I want to make sure you guys got the backstory because we lose Ronald for a moment as he has to

02:16 work around to find this some way to be on the show. Dan, Anthony, Ronald, welcome to Talk Python.

02:22 Thanks. Thank you so much.

02:24 Hi, Mike.

02:25 Hey, everyone. It's great to have you here. It's going to be an adventure. We have, you know,

02:30 three of you on the call. So we'll try to do our best to not step on each other's toes. But I'm really

02:35 looking forward to our conversation about contributing to open source. And we want to take this

02:41 from basically two perspectives. We're going to spend the first half of the show on how do you get started

02:46 as a new person or a relatively new person to open source? How do you, how do you find a project? How do you

02:54 just what are the steps of getting started at all? All right, when are you ready? Things like that. And the second

02:59 half is about running an open source project and getting contributors and welcoming new people to your project.

03:05 So that's sort of the roadmap for our project. But let's start with your story. Anthony, we'll go with you first. How do you get into programming in Python?

03:15 Yeah, programming was probably pretty early on. I think I was 13 when I started coding for the first time. Python was definitely a lot more recently. It's three years ago now. I think it was.

03:25 And I was actually working on an open source project called Lib Cloud. And I've been working on that ever since. And I wanted to make a contribution to the project, realized it was in a language that I didn't know how to write. So I sat down over what was a long weekend and basically took a few courses and learned Python, which was a great experience, really easy to learn.

03:45 That has taken it to a whole nother level. Like I want to contribute to this project. I don't know this technology.

03:49 I wouldn't I wouldn't I wouldn't generally recommend that path.

03:53 That's awesome. It works well for you. OK, Ronald, how about you?

03:57 Titan for me started is something which was very new. At that point, I was an intern and engineering intern at one of the international companies here called Unilever.

04:10 When I was there, there was a project of people having problems with capturing downtime and stuff like that.

04:18 So when I looked around, the only language that could fix that was Python.

04:24 And it meant that I had to be involved in programming.

04:29 So I looked around and then there was a scholarship where people were being taught Python for free by Equinite Wireless, which is a mobile company.

04:41 Yeah. And six months later, I joined in the program.

04:47 And that's how I started coding with Python since then.

04:51 Right now, I'm a bit mixing the two, the engineering aspect and the developer aspect.

04:59 But yeah, pretty much that's how I started with Python.

05:03 Oh, yeah, that sounds sounds really cool.

05:05 So doing networking type stuff, you're like, I got to talk to these devices.

05:09 Maybe something more than bash is required or something.

05:12 Cool. Dan, how about you?

05:15 Hey, so I got into Python on a ski trip.

05:19 I was going to university for computer science at the time.

05:22 And a group of friends were going on the ski trip.

05:26 And obviously, we were all a bunch of nerds.

05:28 We didn't have any computers with us.

05:29 But one of my friends, he brought this tiny little book like Learn Python in 20 days or something.

05:35 Those ones that make all these promises that never really work out.

05:38 Learn Python on your ski vacation.

05:41 Yeah, exactly.

05:43 And I just, you know, I've been programming for a while.

05:46 And I just fell in love with this language.

05:49 And funny enough, you know, the same friend also later on introduced me to who is now my wife.

05:55 So, you know, this is quite the impact.

05:58 It was a heck of a trip.

06:00 Not on the same trip, though.

06:01 But, you know, Python and got married.

06:03 So, yeah.

06:03 Got a lot of mileage out of that.

06:05 Yeah, yeah.

06:05 That's very cool.

06:06 All right, guys.

06:07 So, let's start on the very beginning.

06:10 Just how do we get started contributing to open source?

06:14 So, let's maybe start at a high level.

06:17 Start from why maybe do you want to get involved in open source at all?

06:22 Anthony, you want to take that to the first one?

06:24 Yeah, yeah, sure.

06:25 So, I guess how many of you out there actually use open source software?

06:30 Well, everybody, I'd hope.

06:32 I mean, Python itself is open source.

06:34 All the packages that you use day-to-day are open source.

06:37 And someone's got to maintain those projects.

06:39 So, I don't think it's an obligation.

06:42 But I think everyone really should think about the software that they're using, the software

06:47 that they use every day, and actually think about giving something back.

06:51 So, you know, maybe that's contributing a bug fix or doing some documentation.

06:55 There's various different ways you can contribute to open source projects.

06:59 But most of the projects on PyPI, for example, are all open source.

07:04 So, yeah, I really think people should get into it as a way of helping improve the whole Python

07:09 ecosystem.

07:10 It's an interesting thought that you really, you don't exactly owe it, but you almost do.

07:16 Like, you owe it to yourself to be a little more committed to the tools that run your life

07:22 as a developer, right?

07:24 Or someone in software.

07:25 Like, if you were that involved to work with software every single day, a particular piece

07:29 of software, maybe you should help a little.

07:32 Just so much so that you, like, actually learn a little bit how it works and have a little

07:37 bit more control over it.

07:39 Yeah.

07:39 And if you use a project in particular to a sort of very advanced level, I think at some

07:44 point you're going to be frustrated with things which are missing or don't work properly.

07:48 And contributing back to the project is a great way to fix it.

07:51 Yeah, for sure.

07:52 Ronald, how about you?

07:53 What do you think some of the benefits of getting involved in open source are?

07:56 Taking from, I would say, the African side of things.

08:01 Yeah, just so everyone knows, you're in Zimbabwe, right?

08:03 Yeah, I'm in Zimbabwe.

08:05 Okay, great.

08:06 So, I'd love to hear that perspective.

08:08 Yeah.

08:08 Yeah.

08:09 So, most of the software that we use on this side, they come from other countries like

08:17 India and the UK.

08:21 So, what happens is companies pay a lot of money to use those softwares every month.

08:30 And in here, we got experienced developers that can actually build those softwares.

08:36 But there's this notion here that foreign is always best.

08:40 So, to me, I got into open source trying to, like, show these guys that these softwares that

08:50 you're buying, we are contributing to those softwares.

08:53 So, that way, people can now try to look at you with the other eye that, wow, this guy

09:01 is actually serious.

09:02 Because the notion has been there for a long time that foreign is always best.

09:08 But I believe that software should be meant for Africans, by Africans, if you know what I

09:18 mean.

09:19 So, basically, at the African side, the Zimbabwean side, that's why people should contribute into

09:27 open source.

09:27 I think that's a really interesting point.

09:29 I think open source has this ability to basically make this software something that everybody can

09:37 use.

09:37 It's not, like, half a million dollar Oracle installation.

09:40 It's something that you can go to the internet and you can get and you can get the source code

09:46 and adapt it to whatever you need.

09:47 And so, I think it's really interesting to think about how that works in places like Africa

09:53 where it's not a little bit of money to buy some software.

09:58 Like, because of the currency, this other software is extremely expensive.

10:02 And this is also a way to, like, empower people there to say, like, we are building this software

10:07 and if we need to or want to, we can fork it and make it our own, right?

10:11 Yeah, that's exactly it.

10:12 Get to that stage where we can build off software that can be, as Africans, build software that

10:19 can be used worldwide and people are comfortable with them.

10:24 So, there's a big push for tech startups in Africa.

10:49 How do you think open source is affecting that?

10:52 Do you think this is pretty much uniformly used within the tech startups around there and it

10:57 makes it more possible for that whole thing to work?

10:59 Okay.

11:00 So, here the situation is different because, like I said before, the economic situation here is very harsh

11:08 and people literally don't have time to do something that is not feeding their families, you know.

11:18 So, for someone to contribute into open source and they are not being paid for anything for it, to them it's like they'll be wasting time.

11:31 Of which, that's not the case.

11:35 So, for tech startups, I think open source is helpful to, like, getting the experience and trying to get that quality that will meet the global standards.

11:54 So, this is how open source now is affecting the tech startups.

11:59 And now I have a little bit of some guys who I have joined into the open source community.

12:06 And you can see from their project that things are moving forward.

12:11 Because when you are in open source, you definitely need a lot of help from a lot of people, right?

12:19 So, along the way, you get the experience and you get where you are messing things up, you know.

12:25 So, to me, I think that's how open source can contribute to tech startups.

12:32 Sure.

12:33 Okay.

12:33 Very cool.

12:34 Let's see.

12:35 Dan, I'll ask this question to you.

12:38 I think one of the biggest challenges for people getting started in programming, or maybe they've been programming for a while,

12:45 but in a more constrained environment, you know, standard corporate America, or something like this.

12:52 They don't necessarily feel like they're open source developers, right?

12:56 This imposter syndrome is a pretty real thing, especially for people learning a new technology or learning a programming language for the first time.

13:05 What do you think about this imposter stuff?

13:07 Well, first of all, I think it exists.

13:09 And I think you're touching on a really important problem that's holding people back from contributing to open source.

13:16 And, you know, either because they want to give back to society or because they just want to work on something cool.

13:22 And, well, I guess the idea of this imposter syndrome, or what imposter syndrome is, is that, well, like you said, you don't feel worthy.

13:30 And you're scared to put yourself out there.

13:33 And this is exactly how I felt when I published my first open source project, you know, that I started and pushed it to GitHub and then actually posted the link to Reddit and Hacker News.

13:46 And I was just sitting there, you know, I remember going to bed because I was in a different time zone.

13:52 I remember going to bed and just like almost like lying there and shaking and like just in anticipation what would happen, you know.

13:58 And I got up the next morning, checked my email.

14:01 And it was almost like, you know, at the time I perceived it as my worst case scenario.

14:06 You know, I had some like really experienced people shoot me down.

14:10 And someone said, you know, this should have never been written.

14:13 And like, who would use something like that?

14:15 And I was like, oh, my God, like, sorry, guys.

14:18 Like, what did I do here?

14:19 And, you know, now looking back, I obviously have a way different experience or like a way different perspective.

14:25 And I'm glad that I went through this.

14:27 But, you know, the struggle is real.

14:28 Like, absolutely.

14:29 Yeah.

14:30 Well, I also feel like part of the problem is when people are new, they look at the things that they know that are major.

14:37 And you probably start using Django or Python or, you know, something really big and mature that there's no like low hanging fruit left.

14:49 It is like all hard work.

14:51 And like every little change has to be considered over all these use cases.

14:54 And so it looks really, really hard.

14:57 But there's thousands of projects out there that could use a little help, even with things like documentation or something.

15:01 Right.

15:02 Yeah.

15:02 Yeah.

15:02 No, I totally agree.

15:03 I mean, what we're seeing there is like the equivalent of, you know, Elon Musk building his rocket ship.

15:09 Or, you know, like we're seeing like the super fancy like cruise ship or the latest like BMW car and whatnot.

15:15 And of course, like you can't compete with that because that stuff, you know, the Linux kernel was built on probably like millions of hours of work by hundreds of thousands of different people.

15:26 It's highly polished.

15:27 Yeah.

15:27 And it's highly polished, you know, and it's the barrier to entry there is so high.

15:31 But really what you should be aiming for is like the equivalent of building your own bicycle.

15:36 Right.

15:36 And then riding that around town.

15:38 And like maybe you get like one or two other people are like, oh, yeah, that's a nice bike.

15:42 Can I ride that?

15:43 That's a good point.

15:43 Oh, I saw your bike had a flat.

15:45 So I fixed its flat tire.

15:46 Yeah.

15:47 Yeah.

15:47 Yeah.

15:49 Awesome.

15:49 Yeah.

15:49 So I'll put in the show notes something by Adriana Friend.

15:53 She put a has a basically an imposter syndrome disclaimer, which is a markdown file you can include in your GitHub project that says, no, no, I really want you even if you're new.

16:03 And here's the way in which I can help you.

16:04 And we're going to switch to that just a second.

16:07 But Anthony, let me ask you, what do you do you think you need to know Git or like how you talked about learning technology?

16:14 Like maybe you have to learn how to do Git.

16:15 Maybe you have to learn Git flow.

16:16 You have to learn what GitHub is like.

16:18 How do you get started in all that?

16:19 Yeah, there's some great videos out there already.

16:21 There's one that Scott Hanselman put together about getting involved in open source that talks about the workflow to create an account on GitHub, for example, how to raise a pull request and kind of some of the basics, the basic steps you would take.

16:36 I'd say that you definitely need to know a basic level of Git because most of the projects, pretty much all of the projects that you'll come across will be based on Git for their source control.

16:47 So I think if you don't know that already, I would go and learn a very basic level.

16:51 Don't get into any of the advanced features and functionality of Git yet.

16:55 That's definitely a minefield.

16:56 But once you've kind of learned that, then, yeah, pick something simple.

17:00 And the other thing I recommend people do is create a sandbox project first.

17:03 So once you've created a GitHub account, then just create a project that's got nothing useful in it.

17:08 You know, just add some files, make some changes, do some commits and use it kind of like as a bit of a sandbox to learn how to use Git and be familiar with it.

17:16 And also raise a pull request against your own project, which you can do.

17:19 And that gives you a good place to practice, I guess, and experiment with things without having to do it in your life.

17:27 Yeah.

17:27 Or make that part of your contribution, which then you have two different things you're trying to learn at the same time.

17:32 Yeah.

17:33 And there's a bunch of nice GUIs as well.

17:35 Like, it doesn't have to be all CLI, command line driven stuff.

17:38 It could be, you know, source tree or the GitHub tools or things like that.

17:43 So that's nice.

17:44 Yeah.

17:45 There's maybe one great tool to throw in the mixture.

17:47 It's called GitUp.

17:48 GitUp.

17:49 Personally, I feel like it doesn't get the recognition at this source.

17:52 I think it's a great UI.

17:53 It's a free open source tool.

17:55 I think it's available for Windows and Mac.

17:58 Maybe just Mac.

17:58 But still a great tool.

18:00 Yeah.

18:00 Nice.

18:00 Awesome.

18:01 All right, Ronald.

18:02 You talked about contributing to open source and some of the challenges people in Africa are facing.

18:09 This kind of gives you a chance to equally show up in the international tech world, if you will.

18:16 If you have a popular project or you make a big contribution, that can really make a big difference.

18:21 How do you see, do you think contributing to open source will help you get a job there?

18:25 Or is it just better for learning and then you've got to do something else?

18:28 What do you see from your perspective?

18:29 Okay.

18:30 So one of the people that really encouraged me to get into open source is Mike Place.

18:38 He works for SoftTech.

18:41 And SoftTech, their business model is around open source software.

18:49 So when he came here for our mentorship week, December 5th, mentorship week, we were just talking to each other.

18:57 And he showed me all these emails of companies asking him if he wants a job.

19:05 And these were like huge companies, you know, like Amazon, really huge companies.

19:11 And what they would say is that they saw his GitHub account and they liked what he did.

19:19 So despite the fact that open source, you can do it to get your skills to that level.

19:29 I'm also doing it so that in the near future, I can get a good job.

19:35 Honestly, I don't believe in moving in from the continent, going to other continents.

19:44 Personal life, it's not fair for the people that live in that country.

19:48 So open source is a way that you can stay in your country, but still do your project.

19:53 And most of the time, the job you get, it will be a remote job.

19:57 You don't require to relocate or stuff like that.

20:01 Yeah.

20:01 Open source definitely leads to more remote work.

20:04 Just the nature of it.

20:06 People are more willing to accept that rather than a standard developer job or something.

20:10 Yeah.

20:10 Yeah.

20:10 Yeah, definitely.

20:11 So to me, it's about getting the experience and also trying to get noticed out there.

20:18 Okay.

20:19 That makes a lot of sense.

20:20 This portion of Talk Python To Me is brought to you by Linode.

20:24 Are you looking for bulletproof hosting that's fast, simple, and incredibly affordable?

20:28 Look past that bookstore and check out Linode at talkpython.fm/Linode, L-I-N-O-D-E.

20:34 Plans start at just $5 a month for a dedicated server with a gig of RAM.

20:39 They have 10 data centers across the globe.

20:41 So no matter where you are, there's a data center near you.

20:43 Whether you want to run your Python web app, host a private Git server, or a file server,

20:48 you'll get native SSDs on all machines, a newly upgraded 200 gigabit network,

20:53 and 24-7 friendly support, even on holidays, and a seven-day money-back guarantee.

20:57 Want a dedicated server for free for the next four months?

21:00 Use the coupon code python17 at talkpython.fm/Linode.

21:05 Dan, I know you're asked frequently through your Pythonista cafe, through other things

21:11 that you're doing, how do I get started in Python?

21:14 How do I make my first big step so that I can get noticed and get a job?

21:18 And you and I both answer these questions fairly often.

21:21 What do you think?

21:21 In my last position, the last job that I had, I spent time every week reviewing resumes and

21:27 doing phone screenings and just interviewing engineers.

21:30 And I would say that having a solid open source portfolio or just anything up there, it's

21:37 definitely a credibility indicator.

21:39 But I don't think it will ever fully tip the scales.

21:44 I think rarely will people get hired purely based on their open source contributions.

21:50 I mean, I'm sure you're always going to have the top 1% of people.

21:54 If Linus Torwells is looking for a new job, well, I'm sure he's not going to have to look

22:00 for a long time.

22:02 But the average person...

22:04 Yeah, I think it's similar.

22:04 If you create something major like Django, Flask, or I mean, if there are like SQLAlchemy,

22:12 for example, like Michael Bay, Bayer doesn't probably need to go and look for a job if

22:17 he doesn't want to, right?

22:18 You could lever those types of things.

22:20 But, you know, fixing, adding a minor feature to even a popular project is not enough alone,

22:26 probably, right?

22:27 But it's one of the building blocks, maybe.

22:29 Yeah, exactly.

22:29 Like, it's not going to be enough alone, but it's still going to be helpful.

22:33 And it's going to be...

22:34 It's more of a long-term play, I think.

22:37 You know, I get...

22:38 Almost every week, I get a question of like, okay, how can I get more stars or likes on

22:42 my GitHub project?

22:43 And how can I do...

22:45 Like, how can I promote this so that it will lead to me getting a job?

22:49 And I think that is probably not the optimal way to go about it.

22:54 I think, you know, what's probably vastly going to increase your chances is just to apply to

22:58 like five jobs every day.

23:00 You know, like, I would rather spend my time with like almost this prospecting work and reaching

23:04 out to people and building relationships and meeting people for coffee.

23:07 rather than thinking like, oh, how can I get 50 more likes on my open source project?

23:11 But I can totally see where that motivation comes from, right?

23:15 Because I feel like when you're from the outside looking in, it can seem like, oh, you know,

23:19 obviously, this person got a job because they have a well-liked or popular open source project.

23:24 But I would see it as a decent signal, but it's not going to be the only thing that's going

23:31 to make you successful.

23:33 Sure.

23:33 Like social proof.

23:34 Like, I applied to a job.

23:35 And when they go to look at my resume and think about what I've done, like, here is proof that

23:41 I actually have done the things I said I've done.

23:43 You can check out the quality and so on.

23:45 Yeah.

23:45 Yeah.

23:45 And it can also backfire, right?

23:47 Like, if you, you know, I've reviewed a bunch of resumes where people, they just had

23:51 forked another project and then put their name in as the author.

23:55 And you could actually see that in the commit history.

23:58 And so that is not a positive signal that you want to give off, right?

24:02 And so, yeah.

24:04 So you've got to balance it with that.

24:05 But in general, I would say, yeah, it's, you know, it's great work.

24:08 It's very rewarding.

24:09 And it can help you find the job of your dreams for sure.

24:12 It's definitely a way that you can get experience in some part of technology where you can't

24:17 immediately find a job.

24:18 But then after you can say, yes, I have experience in this thing.

24:21 So, Anthony, you are in a place where you maybe review some resumes and think about giving

24:27 people jobs.

24:27 What do you think about this kind of briefly?

24:29 Yeah, I've probably interviewed about 300 developers in my lifetime.

24:33 Yeah, I'd say if they include a GitHub profile on their CV, then I'll definitely have a look

24:39 at it.

24:39 And I'll see what kind of projects they work on.

24:42 And look at some of their code styles and stuff like that.

24:44 But that's not a requirement.

24:46 I mean, that will come up in developer interviews anyway.

24:49 We'll talk about, you know, how you break down problems and how you address things.

24:53 But it is good to see people actually, what it tells me more is not that they contribute

25:00 to projects.

25:00 It's that they have a passion outside of their work.

25:04 Yeah.

25:04 So if someone really cares about, I mean, I was interviewing C# developers.

25:09 If someone's really passionate about C#.net or the technology that they work in, they

25:14 will probably have lots of pet projects on the side or maybe just one or two.

25:19 And they probably have other things they want to tinker with.

25:21 And that tells me more about what they're going to be like at work, because if they really care

25:26 about their profession, then they're going to be a great developer.

25:29 Right.

25:29 So I think that's more about what it's about for me.

25:32 Yeah.

25:32 And it's like a signal that this person is something of a self-starter, self-learner and passionate.

25:36 I think that's a huge signal.

25:38 Maybe this is a good point to talk about the website you shared with us a little bit ago.

25:41 Firstpr.me.

25:42 Yeah.

25:44 Yeah.

25:45 Yeah.

25:45 Sure.

25:45 So I found this one.

25:46 Yeah.

25:47 This is a part of First Timers website.

25:50 So there's a couple of really cool links you can look at.

25:52 One is firstpr.me.

25:54 And you can type in someone's GitHub username and it will show you the first pull request

25:58 that they raised.

25:59 So yeah, we had a look.

26:00 Mike, yours was in C#.

26:02 It was.

26:03 Yeah.

26:03 Something with MongoDB.

26:05 Yeah.

26:06 Yeah.

26:06 MongoDB link queries.

26:07 Dan, I was pretty impressed.

26:09 Yours was Python 3 support for a project called PipRot.

26:13 And yeah, mine was the learning Python over a long weekend contribution.

26:21 Yeah, that's really cool.

26:23 And yeah, you can actually, you put in a name there and then there's a link to say,

26:26 show me every pull request that this person has ever made in GitHub, which is a pretty

26:31 good research if you're looking to work with someone.

26:34 Yeah, definitely.

26:34 Yeah.

26:35 There's some other great ways as well to do some background research on people and look

26:39 at what their contributions are.

26:41 It's not just about code commits.

26:42 It's a lot more than that.

26:43 For sure.

26:43 All right.

26:44 So that's a ton of information on like why getting started is good, what it can give you,

26:49 maybe what it won't give you.

26:51 Things like that.

26:52 Now, Dan, I know you've done a lot of work trying to help people basically evaluate open

26:59 source projects.

27:00 And you did some of this around the concept of like packages.

27:04 Like so at PyPI, we have, gosh, I haven't looked for a while, well over 100,000 packages.

27:09 Virtually every one of those is open source and is a thing you could contribute to.

27:13 But, you know, how do I go to find something like that would be good for me if I was looking

27:20 for this, especially if I was somewhat new.

27:21 Yeah.

27:22 That's a huge problem, right?

27:23 Because there's so much stuff.

27:25 It's like a whole forest of packages.

27:27 How do you find the one tree that is just perfect for you?

27:31 It's not too tall and too hard, but it's also not like a weed.

27:34 You want to make your bed out of or whatever.

27:39 And because it's a big liability issue as well, right?

27:43 If you pick the wrong project there, potentially if you're working for a company and that becomes

27:49 part of the code base you're working on, you may have to support this for several years in

27:54 the worst case.

27:55 So, yeah.

27:56 So I've just, you know, just been thinking about the process that I used, that I used,

28:01 that I evolved over time, how to go from, you know, I have a need for like some problem

28:07 that I'm facing.

28:08 Let's say I'm working on, you know, a Django app and I want to add, you know, some special

28:13 form validation or whatever.

28:14 How do I go from having identified this problem to actually finding a good package that I could

28:21 pull in and it would solve my problem?

28:22 I don't have to write it myself.

28:24 I don't have to reinvent the wheel.

28:25 And I think it comes down, you know, from a high level perspective, it comes down to coming

28:30 up with a pool of candidates there, like candidate packages that sort of kind of do what would

28:35 help you, what you're looking for.

28:36 Before you go on, I think one of the things that you touched on there that's interesting is

28:40 it will do what you need to do.

28:42 Like, so I wouldn't necessarily think just randomly hunting GitHub for projects and then

28:48 trying to contribute to them necessarily makes sense.

28:49 But if it's something that you can use, that you can basically, because you need that experience

28:56 of consuming and using the software to even be reasonably able to contribute to it, I think.

29:01 Yeah, absolutely.

29:01 I think it's not, like open source isn't a silver bullet, right?

29:05 Where you can just go in and it's like going to a candy store and like whatever you get

29:11 there will be great for you.

29:13 I mean, it's, well, not even in a candy store.

29:15 It's like that, right?

29:15 It feels great.

29:16 But then, you know, a day later, you're going to pay the price for that.

29:20 Oh my God, all these horrible analogies.

29:23 But yeah, no, it really, I think it really, it really comes down, like really identifying

29:27 this need and also having the knowledge to know what you're really looking for, because

29:31 otherwise it's just impossible to find a good solution.

29:34 Yeah, for sure.

29:36 Okay.

29:36 So you talked about checking the package popularity as one of the things.

29:41 Yeah.

29:41 Yeah.

29:42 And I think it all comes, for me, all comes down to these, having these heuristics because

29:46 there's so many packages there.

29:47 You got to have some heuristics to just cut that list down to size so that you can ideally

29:53 select something that works for you.

29:55 And I think there's a good way to do that is, for example, to go through a curated list.

29:58 For example, there's awesome, awesome Python at awesome-python.com.

30:03 Yeah.

30:04 And they have a curated list of packages and that's also an open source project where

30:08 people can add new projects that they liked.

30:11 And it's sort of a filtered view of everything that's out there.

30:14 But obviously it's not going to cover everything.

30:17 So this is also not a panacea, right?

30:18 So you got to do some legwork and look at Stack Overflow and maybe see if you can find some

30:23 Reddit comments on a particular package just to get a feel for the quality of it.

30:28 Yep, absolutely.

30:29 I think the project homepage and the readme, those kind of play similar roles.

30:34 Those give big indicators of does the person who created this project really care about it?

30:41 So is it worth my time to contribute?

30:45 You only want to contribute to a project where the maintainer actually cares about the thing.

30:49 Yeah.

30:49 Or where you're confident actually becoming the maintainer yourself, right?

30:53 Yeah.

30:54 That's why I always want to spot check the source code and think about it.

30:58 Would I feel comfortable making changes to this project myself?

31:01 Would my team feel comfortable making changes to this project?

31:04 Because otherwise you have, it's almost like you're pulling in this binary blob that no one really

31:10 understands, right?

31:11 And it is Python source code.

31:12 But if it's a really complicated project, then that could really derail things.

31:17 And you might be better off going with a different solution or coming up with a custom solution.

31:22 So I think it's always, it's all about these trade-offs and really scrutinizing what you're

31:27 bringing in into your system there.

31:29 Sure.

31:30 Absolutely.

31:31 Ronald, what do you use as a way to find projects that you can contribute to?

31:37 It was really hard to get into open source.

31:40 I asked around on social media because I just wanted to get involved in open source.

31:46 Most people recommended OpenShift as one of the projects.

31:50 So I went there and to be honest with you, I understood nothing about everything.

31:59 Yeah, that's a big project, right?

32:01 Yeah.

32:02 Yeah.

32:03 Yeah.

32:03 Yeah.

32:04 And people were saying this is the easiest project to start on and stuff like that.

32:08 So I backed up a little bit and tried to start with local projects.

32:16 So for example, I started with contributing for the Taikon Zimbabwe website and the Thai ladies

32:27 website, stuff like that, the symbol stuff.

32:30 Yeah.

32:31 So that makes a lot of sense to start there.

32:32 Yeah.

32:33 So still now I'm trying to get into bigger projects, but the choices like how to choose

32:41 the best project, which is too young, which is not too deep.

32:46 It's a little bit hard.

32:48 It's still very hard for me to find out that.

32:52 Yeah.

32:52 It is a challenge.

32:53 One thing I'll throw in there is I mentioned Adriana Lowe's imposter syndrome disclaimer.

32:59 I went and I took just that text, like a piece of text, the title of that, and I threw it into

33:06 GitHub and I searched for projects that had adopted that disclaimer, which is like, hey,

33:11 you're welcome to get started.

33:12 So I thought that's, I found 23 projects so far that have that in there.

33:17 So those are places where newcomers are welcome, I guess.

33:20 Anthony, it's not just writing code necessarily that people can help with.

33:26 There's documentation, there's examples, there's evaluating issues and PRs, like a first pass

33:32 to see if they make sense, things like that, right?

33:33 Yeah, yeah, sure.

33:34 So I think the kind of case that you're talking about is quite typical.

33:38 It's the sort of Goldilocks and the GitHub projects.

33:41 Like you're trying to find one that's not too big and too complicated, that's not too small

33:45 and doesn't get maintained and maybe find something in the middle.

33:48 And I think people have this expectation that their first open source contribution would be

33:54 like this killer PR where they like, you know, improve.

33:58 Oh, I fixed this bug or, you know, I've added 20% performance improvement.

34:03 And it's, and really as a project maintainer as well, whilst I would love those pull requests,

34:08 there's a lot of other stuff that we do need.

34:10 And it's contributions to an open source project and not just about code.

34:15 So this is simple stuff like code reviews.

34:18 Like you don't have to be a maintainer of the project to do code reviews.

34:22 So if you see a fairly popular open source project and, you know, you're pretty good at

34:27 reviewing, reviewing other people's code, maybe you do that as part of your job, then

34:31 there's nothing stopping you going in someone else's project and doing code reviews.

34:35 Obviously you have to understand their style guidelines, you know, what the rules are for

34:40 that particular project and what their preference is.

34:42 But, you know, code reviews, I'd love more people to, to do code reviews on projects that

34:47 I work on.

34:49 Documentation is also a really popular one.

34:50 So quite recently I contributed some to the Beware project.

34:55 Russell Keith-Magee, he's been a guest in a past episode.

34:59 Yeah.

34:59 And he's very welcoming.

35:00 That project is very welcoming to newcomers as well, by the way.

35:03 Yeah, definitely.

35:04 And my first contribution was to write a blog article about how to use it.

35:07 And then whilst doing that, I think I learned more about the project and how it worked.

35:11 And then my other contributions were all documentation because that was kind of the gap that I saw

35:17 at the time was that, you know, for me to get up and started with the project, there were

35:21 a few things which weren't super clear.

35:22 So taking that learning and sharing that back with the project.

35:26 This is really about where you want to be an experienced user of the project in order to make valuable

35:34 contributions.

35:35 So to start off with, those contributions could be testing and documentation.

35:39 And I don't think people should be making drastic code changes to a project if they can't at least

35:47 document the thing they're changing or they can't write a test to prove that it already works.

35:51 So, yeah, especially for big, complicated projects, you know, you might find that maintainers are

35:56 not going to be very comfortable with someone coming in to a project and making some drastic

36:01 changes because you've got, you don't know what other expectations there might be for the

36:05 users.

36:06 So, yeah, documentation and the tests are really great.

36:08 And also contributions, more softer contributions.

36:11 So this could just be presenting at your local Python meetup about a project.

36:16 This could be, you know, blogging about it, tweeting about it, sharing it on social media,

36:20 like as well as a maintainer of projects.

36:23 Like I really value those contributions because those are people helping out with the whole

36:28 community.

36:28 They're not just helping out on the code base.

36:30 And sometimes that's actually most of the work.

36:33 This portion of Talk Python is brought to you by us.

36:37 As many of you know, I have a growing set of courses to help you go from Python beginner

36:42 to novice to Python expert.

36:43 And there are many more courses in the works.

36:45 So please consider Talk Python training for you and your team's training needs.

36:50 If you're just getting started, I've built a course to teach you Python the way professional

36:54 developers learn by building applications.

36:56 Check out my Python jumpstart by building 10 apps at talkpython.fm/course.

37:01 Are you looking to start adding services to your app?

37:04 Try my brand new consuming HTTP services in Python.

37:07 You'll learn to work with RESTful HTTP services as well as SOAP, JSON, and XML data formats.

37:13 Do you want to launch an online business?

37:15 Well, Matt Makai and I built an entrepreneur's playbook with Python for Entrepreneurs.

37:19 This 16-hour course will teach you everything you need to launch your web-based business with

37:24 Python.

37:24 And finally, there's a couple of new course announcements coming really soon.

37:28 So if you don't already have an account, be sure to create one at training.talkpython.fm

37:32 to get notified.

37:34 And for all of you who have bought my courses, thank you so much.

37:37 It really, really helps support the show.

37:40 One of the issues, I guess I didn't bring this up in the finding the right project, but one

37:44 of the things that I look at, it's not a deal killer if it's in a bad state, but something

37:49 I think is a really strong signal of the health of an open source project is how many open PRs

37:55 are there and how many open issues are there, especially unaddressed?

38:00 Like how many people have tried to contribute a feature to this and it wasn't even responded

38:04 to?

38:05 How many people have filed an issue and tried to ask for an improvement and it wasn't even

38:09 responded to?

38:10 I don't know.

38:11 How do you feel about that?

38:12 Yeah, there's a few projects that I work on where I've tried to fix things in the past

38:17 and the maintainers have maybe written the project as part of their day jobs and then they've

38:23 moved companies or they're just not interested in maintaining it.

38:26 And the solution was actually to raise an issue saying, this is a notice for anyone else.

38:30 I'm taking this party somewhere else.

38:32 And then basically just maintaining a fork and publishing a separate package on PyPI.

38:37 So that's actually kind of taking it on really and forking a project.

38:42 And open source is, if you go and look at the Linux distro graph, it's a sort of history

38:48 of Linux distributions.

38:50 Now you can see how they've gone the same way in OSS.

38:54 Yeah, it's pretty interesting.

38:55 It's kind of like the nuclear option, but sometimes it has to be done if it really is abandoned.

39:01 Yeah, give them a chance, give them an opportunity.

39:03 But if you're still using software and you need things fixed and you need bugs updated or you

39:09 need it to work with Python 3, for example, then absolutely I'd encourage building a fork,

39:14 but then also maintaining a fork and publishing it as well so other people can access it.

39:18 Yeah.

39:18 Ronald, what advice do you have for like, are there things that you do that you found that

39:24 like when you're filing a new issue or issuing a PR to an open source project that you do

39:29 that make it more likely to be accepted or received well by the person running the project?

39:34 One of the things that I do is I don't want people to suspect what my PR will solve.

39:44 So on the comment, I will state exactly what the PR is doing.

39:50 This way, it's easier for the maintainer to either accept or reject your pull request.

39:58 It's actually a very easy way for dealing with small projects.

40:05 When they get to bigger projects, maintainers may not read those comments, you know.

40:11 So it just depends with the type of project that you're involved in.

40:16 Yeah.

40:16 I guess having a really clear, well thought out, well structured message or comment associated

40:23 with the PR or the issue or whatever, it makes it seem like you're serious and it makes it

40:27 easier to understand what's going on.

40:29 Like some people just throw out like a sentence or some like very small thing and, you know,

40:34 how serious do you want to take that work, right?

40:36 Yeah.

40:37 Yeah.

40:37 That's it.

40:38 Sure.

40:39 Dan, how about you?

40:40 When you're evaluating a PR or issues or things like that, what do you look for?

40:45 I think for me, you know, when I became a maintainer of an open source project and I started getting

40:51 PRs, for me, the key realization was at some point, hey, this is really more, this is a social

40:57 project and not so much, not only a technical project, you know, where we're just looking for

41:05 technical solutions for things.

41:06 And I think it is really important, like whether you're running a project, an open source project,

41:12 or whether you're contributing to one, or maybe you want to get the foot in the door there,

41:16 just to be very careful around the social dynamics there and basically just, you know, being friendly,

41:22 like introduce yourself and just say hi.

41:25 And instead of, you know, maybe just instead of throwing a bunch of code over the wall,

41:30 actually try and understand to see where, which direction this project is going.

41:35 Right.

41:35 That's a good point.

41:35 We talked about before we hit record, like how we've all submitted PRs and actually we had

41:42 solved a problem, but it was actually taking the project in a direction that wasn't part

41:47 of the roadmap.

41:47 They weren't interested in going that way.

41:49 And so we did all this work and threw it at them and they're like, you know, this is really

41:52 cool, but it's, we're not going to take it because it's just not where we're trying to

41:56 go with this.

41:56 Right.

41:57 Yeah.

41:57 Yeah.

41:57 And it feels bad on both, both sides.

41:59 Right.

42:00 Like as a contributor, it feels not that great if you're putting in all that work and you feel

42:04 rejected.

42:04 And as a maintainer, you feel horrible because you have to reject someone's potentially very

42:09 good work.

42:10 You know, we can see they invested a lot of time into this, but it just takes the project

42:15 into a different direction.

42:16 And what's also important to realize is that as a maintainer, you have a lot of responsibility

42:21 to actually be able to maintain the project.

42:24 If there's a new feature that you don't fully understand yourself, maybe that hasn't been

42:29 requested by other people before.

42:30 I'm always leaning towards not bringing that feature in because I want to be very careful

42:36 that I actually know what's going on with the project.

42:39 It's very easy to get a mixture of different code styles and just a mixture, like just,

42:44 you know, architecturally to have a quickly very unmaintainable project or very unmaintainable

42:51 code base.

42:51 And it's just so much harder to go back and rewind and then say, oh, you know what?

42:55 Now we're going to spend like some time on rebuilding this thing.

42:58 And I feel like that's harder to do than just being very careful about what contributions you

43:05 take on in which direction you grow the project.

43:08 Sure.

43:08 How do you feel about things like continuous integration, you know, Travis CI and that

43:12 kind of stuff that sort of evaluates from a correctness standard, the PRs initially?

43:18 Yeah.

43:18 Yeah.

43:19 Oh, it's great that you're bringing that up.

43:21 I think it's these days it's table stakes for any open source project, right?

43:25 It's so easy to set that up.

43:27 If you just have a circle CI or Travis CI, they all have free plans for open source projects.

43:33 So they're like free build server farms where you can build your project and then you get,

43:38 you know, you get a notification via email and a comment on your pull requests.

43:42 And you can set it up so that it runs a PEP 8 check or a linter check on your project and

43:47 runs all of the tests.

43:48 And that's going to make it easier also for you as the maintainer and also for a contributor

43:52 just to cut down on some of that back and forth.

43:55 You know, we're not following the code style here.

43:57 Like it just reduces the code review time.

43:59 I think any open source project should take advantage of that, that kind of technology.

44:04 Yeah, I totally agree.

44:05 I think one of the interesting things is you mentioned this is a social experience.

44:09 There were some studies done that said people are less frustrated by getting this nitpicky

44:17 feedback from a machine rather than from another person.

44:22 So let it, let it say, no, your indentation is wrong.

44:25 No, this doesn't have a doc string.

44:27 Whatever, as like before the thing is accepted, just like I'll, I'll review it once you pass

44:33 the continuous integration.

44:34 Right.

44:35 That's really nice.

44:35 Yeah.

44:36 Yeah.

44:36 And then I'm a very nitpicky code reviewer.

44:38 And, you know, when I, when I became a team lead, like one of the things that I realized

44:42 very quickly is that you got to absolutely pick your battles, right?

44:45 Because you're just going to be upsetting people.

44:47 Yeah.

44:48 So having a linter in place on your CI infrastructure, continuous integration infrastructure, it should

44:53 take, it just takes away some of those, those discussions.

44:57 Yeah.

44:57 Yeah.

44:57 Everybody got to make the test green.

44:59 It's not my fault.

45:00 The machine says.

45:01 I can't, sorry.

45:03 I can't do that, Dave.

45:04 That's right.

45:05 Sorry, Dave.

45:06 Anthony, you know, another thing that's worth talking about when we're talking about running

45:11 a project is, is burnout.

45:13 So it's one thing to, you know, I talked about the, like the unanswered PRs, the unanswered

"https://talkpython.fm/episodes/show/132/contributing-to-o

Read the original on talkpython.fm ↗