#448: Full-Time Open Source Devs Panel Transcript
00:00 So you've created a Python-based open source project, and it's starting to take off.
00:04 You're getting contributors, lots of buzz in the podcast space, and more.
00:08 But you have that day job working on Java still.
00:12 How do you make that transition from popular hobby project to a full-time job?
00:17 After all, you're giving away your open source project for free, right?
00:21 Well, on this episode, I put together an amazing panel of guests who all have done exactly this.
00:27 Turned their project into full-time work and even companies in some cases.
00:31 We have Samuel Colvin, Gina Huska, Sebastian Ramirez, Charlie Marsh, Will McGugan, and Eric Hulsher on to share their stories.
00:40 This is Talk Python to Me, episode 448, recorded December 7th, 2023.
00:46 Welcome to Talk Python to Me, a weekly podcast on Python.
01:03 This is your host, Michael Kennedy.
01:05 Follow me on Mastodon, where I'm @mkennedy, and follow the podcast using @talkpython, both on fosstodon.org.
01:13 Keep up with the show and listen to over seven years of past episodes at talkpython.fm.
01:18 We've started streaming most of our episodes live on YouTube.
01:22 Subscribe to our YouTube channel over at talkpython.fm/youtube to get notified about upcoming shows and be part of that episode.
01:30 This episode is sponsored by BaseDash.
01:33 BaseDash uses AI to build a dashboard for your database.
01:37 Get a custom admin view in your Postgres, Microsoft SQL Server, MySQL, MariaDB, or Redshift database.
01:45 Get started for free at talkpython.fm/BaseDash.
01:49 And it's brought to you by Sentry.
01:51 Don't let those errors go unnoticed.
01:53 Use Sentry.
01:54 Get started at talkpython.fm/sentry.
01:57 Hello, everyone.
01:58 Charlie, Will, Eric, Sebastian, Gina, and Samuel.
02:02 What a big group of people we have here today.
02:04 An awesome, awesome group.
02:05 Thanks for being here, everyone.
02:06 It's going to be super fun to have you on the show.
02:09 You know, I know there's so many people out there that are dreaming of an open source project
02:14 or even working on open source and contributing to it, but it's something they squeeze in the last hour of their day.
02:21 And at some point, all of you have made this amazing transition to where there's enough support, there's enough interest in what you all built that becomes your full-time thing, right?
02:32 Which is, I know for many out there, living the dream.
02:34 So you all are living the dream.
02:36 I'm hopefully you feel that way.
02:39 But it's going to be really great to kind of just explore your projects, how do you make that transition, and, you know, what you're up to.
02:45 So we have Samuel Colvin on from Pydantic, and he has the tightest schedule.
02:52 He's squeezing us in on a far-flung trip, a work trip.
02:56 So let's go to you first, Samuel.
02:58 Just, you know, tell people a bit about who you are and what your project is to get started.
03:03 Yeah, I'm Samuel.
03:03 I maintain Pydantic, which is a data validation library for Python that uses PyTynx.
03:08 So those weird things you've seen after colon and Python that mostly do nothing unless you run mypy or PyWrite.
03:15 Pydantic basically enforces them.
03:17 Almost exactly a year ago, I was sort of working on Pydantic full-time back then, but really spending my own money to do so.
03:24 And a big American VC got in touch.
03:26 And fast forward, I raised some money and started a company at the beginning of this year.
03:31 I hired now 10 people.
03:34 And I'm actually, as you mentioned, I'm in Istanbul at the moment with the whole team.
03:37 It turns out if you have a team with Americans, Iranians, and Russians, that Istanbul is one of the few places that you can actually meet efficiently.
03:44 So, yeah, we're having a really fun week in Istanbul, mostly working together, and then going after dinner, which is where we are at the moment.
03:50 I hope that's a good summary.
03:52 Absolutely.
03:53 And what a cool experience that you get to hang out with all these people talking about your project in Istanbul.
03:59 I just had, by the way, I just had...
04:01 I mean, just think that the other thing I would add is that one of the best bits of it has been being able to hire friends of mine from open source, people who had, I think, all but two of the people here have contributed to Pydantic before we started the company, which is how I hired the first, I think, six people.
04:17 And then a few more.
04:23 being able to pay the property.
04:25 Yeah, awesome.
04:26 I see a lot of people shaking their head out there as well.
04:29 Just coincidentally, I recently had Sydney Runkle on Who Works With You, and she's such an inspiration.
04:35 That show is not out yet, but has already been done yet through the weird time shifting of podcasting.
04:41 So it'll be out before this, but it's not out yet.
04:43 So anyway, very, very cool team you got there.
04:46 I guess we'll go around the order of the video.
04:49 Pretty bunch pictures here.
04:51 So Charlie, you're up next.
04:53 Quick, quick bit about you.
04:55 Hey, so I'm Charlie.
04:56 I am the author of Ruff, which is a Python linter code formatter and code transformation tool written in Rust.
05:04 I started working on Ruff about a year ago, maybe like October last year.
05:09 Similar time frame to Samuel, yeah.
05:11 Yeah, and I worked on it full time for a while, similar to Samuel, although probably not for quite as long.
05:17 I was working on it full time without any funding.
05:19 And then similarly, I started a company around Ruff and really around the vision of trying to build high performance Python tools.
05:27 So take some of the things that make Ruff nice to use and popular and well-liked and try to apply those principles to other parts of the Python tool chain.
05:36 Yeah, we're a team of six and we're fully remote.
05:40 So no two of us live in the same place.
05:43 I guess a couple of us live in the same country, but most of us live in different countries.
05:48 And we span basically U.S. central time to, I don't know, we have one person in India and one person in Minneapolis.
05:57 And that kind of stretches like the full time zones of the team.
06:00 That's a good stretch.
06:01 That's a good stretch there.
06:02 Well, absolutely.
06:03 Congratulations on Ruff.
06:04 It is really, really taken off.
06:06 And I know the guy right below you and this squares, Sebastian, I saw him saying nice things about it with FastAPI and so on.
06:15 Yeah, yeah, I know.
06:16 Thanks a lot.
06:17 It's just funny because I think I was saying before I started recording, I think when I came on Talk Python last time, I think that might have been my first time ever on a podcast.
06:25 And it was to talk about Ruff.
06:26 And so I was like, oh, wow, people care about what I'm doing.
06:28 That's super cool.
06:30 And Pydantic and FastAPI were some of the earliest adopters that people had heard of.
06:36 So they were like very early on in the life cycle and helped a lot with, you know, getting people to see Ruff and sort of care about Ruff and know that smart people are using it.
06:47 That's awesome.
06:47 Well, when you visit Talk Python or the course's website or others, it's all Ruff-ified.
06:54 I don't know what the adjective of Ruff is, but it's been Ruff.
06:58 It's whatever you want to say.
06:59 It's amazing.
07:00 It's been Ruff-ed up and it works great.
07:02 It's really amazing.
07:03 That makes the code sound really bad.
07:05 But yeah.
07:06 True.
07:06 Yeah.
07:07 That's maybe not the best.
07:08 It's like saying it's sick.
07:09 Like, oh, that was a sick trick they did.
07:10 It means good.
07:11 Yeah, that code is rough.
07:12 Yeah, that code is rough, man.
07:13 All right.
07:14 Will, is your code rough?
07:15 Who are you?
07:16 It's got some rough edges, certainly.
07:18 Welcome.
07:19 Yeah.
07:19 I'm Will.
07:20 I'm probably best known for a library called Rich.
07:23 And Rich is a library for writing formatted content in Terminal.
07:27 You can write tables and progress bars and syntax highlighted code, all sorts of things.
07:32 And then that became quite popular in the Python world.
07:36 I think there was a need for it.
07:37 And two years ago, I founded Textualize, which is a company which builds on Rich to produce a library called Textual, which allows you to build user interfaces inside Terminal.
07:49 And these are kind of more like web interfaces and less like Cursus applications.
07:54 Yeah, I was just thinking almost like Flexbox.
07:56 You can dock stuff to the side and that's part of a UI.
07:59 But it's pretty amazing what you've built.
08:01 I think it's pushed the Terminal far beyond what many people thought the Terminal should be doing.
08:06 It's been very cool.
08:06 It's been a process of discovery.
08:08 It's kind of strange.
08:09 You've got technology that's been around for decades and are still discovering things they can do, which people haven't tried before.
08:17 So, yeah, it's been a lot of fun.
08:19 And it's been great to work with a small team of developers.
08:22 We've got a small core here in Edinburgh, Scotland, and we've got one developer in Portugal.
08:26 So, yeah, it's been great.
08:28 And I love the reception and I love what people are building with it.
08:32 Yeah.
08:32 It's so many people are interested in using Rich.
08:36 And there's a ton of plugins, right?
08:38 There's like Rich Click and there's pytest Rich and all these things like, well, whatever we're doing, it should also have what you've built, you know?
08:45 Yeah.
08:45 I love to see that.
08:46 I love to see the ecosystem building.
08:48 Our adjective is richified, which is not as good as possible.
08:51 Richified.
08:51 Okay.
08:51 Yeah.
08:52 Yo, that's rich.
08:53 My code is rich.
08:54 Okay.
08:55 Richified.
08:55 Got it.
08:56 I love it.
08:57 We all have adjectives that we've got to put on things.
08:59 Yeah.
09:00 I'm a big fan of you and your team's work, by the way.
09:03 I mean, I'm sure you hear it all the time that you build awesome stuff.
09:06 Cheers.
09:06 I appreciate it.
09:07 Yeah, indeed.
09:07 We all are.
09:08 Eric, welcome.
09:09 You and I are coming in somewhat local here out of Portland, not Istanbul.
09:14 I'm actually out in Bend at the moment.
09:15 So yeah.
09:16 I absolutely love Bend.
09:17 Lots of mountains and whatnot.
09:19 But yeah, so my background in Eric Holscher, folks probably know me from kind of the Read the Docs ecosystem.
09:23 I feel like I've been doing this for a while compared to everyone else here.
09:27 The project actually started in 2010, which is kind of amazing.
09:30 And then we actually started the company around it in 2014.
09:34 So coming up next year, that'll be 10 years.
09:36 And so, yeah, and we're all bootstrapped.
09:38 So we haven't done any venture capital.
09:40 It's all been kind of just built up the open source and then kind of turned it into a company on top of that.
09:45 We kind of have a business model of doing paid for private hosting, you know, companies as well as advertising on open source.
09:51 And we spun out a kind of a separate business called Ethical Ads that we built kind of to basically make, you know, better advertising on the internet, not doing any of the creepy tracking stuff.
10:00 Read the Docs is so critical to the open source space, not just Python, but especially Python.
10:05 Yeah.
10:06 Yeah.
10:06 Yeah.
10:06 I mean, so awesome work on that.
10:08 And then just, you know, good job on the ad stuff as well.
10:11 It's the tendency of the whole ad space is to be super creepy.
10:15 And just like, how much can we resell and how much can we buy to mix in to like create these shadow profiles?
10:21 And it's not a good social trend.
10:23 It's not good for people.
10:24 And it's not really necessary, right?
10:26 Like if I want to, you know, I've sponsored ads on Read the Docs or had run ads on Read the Docs before.
10:31 And we had a Flask course.
10:32 And let's just, you know, run that ad on Flask instead of like, let's see if we can track somebody through Instagram over to Facebook.
10:40 Who knew, right?
10:41 Yeah, exactly.
10:42 We call it, yeah, newspaper advertising.
10:43 And it's sort of been really cool with the advances of ML.
10:46 Like the content targeting has gotten pretty good, right?
10:48 So it's definitely a lot easier technically these days to kind of do that content matching.
10:53 But yeah, I think in terms of the kind of open source, maybe the way that I'm a little different than other folks here is we're actually running something more akin to a service.
10:59 So Read the Docs, all the code is open source, but a lot of the usage is open source projects using our hosted service.
11:04 We do obviously ship a lot of code.
11:06 Probably our Sphinx theme is probably the most kind of well-known actual software that people are running.
11:11 A little bit similar to the folks here, the kind of sidebar on the left.
11:14 And yeah, so I think that's kind of the background is, yeah, we have a little bit of everything.
11:18 But yeah, it's a little more akin to something like a SaaS app, I would say.
11:21 But the code is all open source.
11:22 We do get a contribution in that way as well.
11:24 Yeah, awesome.
11:25 And, you know, it sounds a little similar to what Textualize is working towards as well, hosting.
11:30 I mean, it's more hosting people's apps than hosting people's docs, but not terribly different.
11:35 Paying for services is a classic open source monetization strategy, right?
11:38 Like you have some way to kind of build the monetization on top.
11:41 Yeah, it's like what you build is great, but it's kind of hard for me to run.
11:44 Could you just do that?
11:44 Like, yeah, sure, we can do that.
11:46 Sebastian, always good to see you.
11:47 Welcome back.
11:48 Thank you very much for having me.
11:50 Hello, everyone.
11:50 I'm Sebastian Ramirez or Tiangelo.
11:53 I created this little tool for building web APIs that is called FastAPI.
11:58 And it has been growing quite a bit.
12:00 People have liked it, fortunately.
12:02 And like, yeah, that's it.
12:04 I'm probably the only one that hasn't built a company here, I guess.
12:08 Okay, baby.
12:11 Okay.
12:11 There are two of us.
12:13 Nice.
12:14 I want to hear that.
12:15 Okay, so this year I have been able to work full-time on open source because Sequoia Capital, the VC firm, started this open source fellowship.
12:22 And I am the first fellow, so I am kind of the test trial of the program.
12:27 So I get, you know, just to work full-time on open source.
12:30 And that's how I've been able to just, yeah, release that stuff in FastAPI and the ecosystem, like the other libraries.
12:36 FastAPI, SQL model, type, and a couple of other things.
12:39 But yeah, that's pretty much it.
12:41 Yeah, awesome.
12:42 Well, FastAPI is definitely the poster child for modern Python on the web.
12:48 You know, and Samuel's work, obviously, is central to that as well, right, with Pydantic being such a core element there.
12:55 So very awesome.
12:56 Yeah, and like, I mean, FastAPI is built on top of like great open source tools and their needs.
13:01 So Pydantic does all the data validation, serialization, documentation.
13:04 And on the other side, Starlette does all the web parts.
13:08 Yeah, it's like, and like, you know, like it's a very close, how do you call it?
13:12 Like a close friendship between all the projects.
13:15 Pydantic, Starlet, Ubicorn, FastAPI.
13:17 Like, you know, like we actually know each, by this point, we actually know each other in person.
13:22 Like the current maintainer of Starlette and Ubicorn works for the Pydantic company.
13:27 And he's like the top FastAPI expert right now.
13:31 But, you know, like it's very nice because helps the dynamism of like the speed of building stuff.
13:39 It's great.
13:39 Yeah, I imagine a lot of people don't realize the interconnections between these different projects that are at play here.
13:46 Yeah, it's definitely super fun.
13:48 Absolutely.
13:48 And then it's worth saying we in Pydantic use FastAPI as well as contributing to the libraries that build it.
13:53 We also use FastAPI for the services that we're building.
13:56 So we're like consumers both directly and indirectly of the things that we maintain in open source.
14:00 Awesome.
14:01 Chat point off and splash is awesome.
14:03 It's turtles all the way down, basically.
14:04 Exactly.
14:06 This portion of Talk Python to me is brought to you by BaseDash.
14:09 BaseDash is the custom admin panel for your database that you don't have to build.
14:15 We've all dealt with endless ad hoc requests for data access.
14:19 Your support team wants user records, your non-technical co-founder needs to see charts,
14:24 or your engineering team needs an easy way to share your SQL queries.
14:28 These all sound like relatively simple tasks, but between building an internal tool,
14:33 setting up an analytics product, and then switching back and forth between that and your SQL client,
14:38 you've lost so much time.
14:40 BaseDash gives you that time back.
14:42 With BaseDash, you can instantly generate a visual UI for your database.
14:47 All you have to do is connect your data source.
14:50 It uses AI under the hood to generate the perfect admin panel for your data.
14:54 Voila!
14:55 Now anyone in your company has access to the data they need.
14:59 They're rolling out a ton of new features like the ability to create charts
15:03 using only natural language.
15:04 You're going to get hours back in your day, and I promise you won't want to build an internal tool ever again.
15:11 Check them out by visiting talkpython.fm/BaseDash.
15:15 That's talkpython.fm/BaseDash.
15:18 The link is in your podcast player show notes.
15:21 BaseDash is free for small teams, so give it a try.
15:24 You've got nothing to lose.
15:25 Thank you to BaseDash for supporting the podcast.
15:29 Gina, also awesome to have you back.
15:31 Welcome in.
15:32 Very happy to be back.
15:34 That's really, really great to be here now, I think, for the second time.
15:36 And the third if we call Python Bytes.
15:39 So, yeah, my name is Gina Heuske, and I'm probably, yeah, I don't know if I'm that well-known throughout the Python community,
15:46 but I'm quite well-known in the 3D printing community for having created Octoprint,
15:50 which is the snappy web interface for U3D printer, and the server part of that is all written in Python.
15:56 And I started a project back in 2012 when I got my first 3D printer as your regular pet project on the side after hours vacation, blah, blah, blah.
16:05 In 2014, I got hired by a 3D printing company to work on it full-time, and in 2016, that company ran out of money,
16:13 and I suddenly found myself with a full-fledged, full-grown open-source project
16:17 and no funding whatsoever.
16:20 So I tried this whole crowdfunding stuff with Patreon, and that is pretty much how I've been working ever since.
16:26 So I'm self-employed under German law.
16:30 I'm a freelancer.
16:31 And, yeah, all my income comes from people who just sent me money for working on Octoprint.
16:38 Did you say since 2016?
16:39 Since 2016, yeah.
16:41 Wow, okay, cool.
16:42 So full-time since 2014, and self-employed and crowdfunded since 2016.
16:47 So it's been a while.
16:49 That's awesome.
16:49 I also went full-time on all my stuff here in 2016, although it's technically not open-source.
16:55 It talks a whole lot about open-source stuff.
16:57 So awesome.
16:58 It's been a while.
16:59 Congratulations.
16:59 Thank you.
17:00 I'm still surprised it works, to be honest.
17:02 I'm waiting every day that it stops working.
17:04 And, yeah, actually, this year it came a bit close, and then I put out a blog post basically along the lines of,
17:10 you know, the income is going this, but the usage numbers are going that,
17:13 so something is amiss here and we need to talk.
17:16 And then the community rallied and stuff fixed itself again.
17:20 So that is pretty amazing.
17:21 That's really awesome.
17:22 Congratulations.
17:22 It's easy for people to just go, oh, it's free, and there's some people supporting it,
17:26 and just kind of assume that things are taken care of.
17:30 But, yeah, really good.
17:31 Really good.
17:32 Yeah, you have a ton of supporters on GitHub sponsors as well, right?
17:37 Actually, I've diversified over the years.
17:38 In the beginning, it was only Patreon and PayPal, and then I started adding new payment platforms and options
17:44 because people prefer to be able to use the stuff that they know, and some people don't like Patreon,
17:49 some people don't like and don't know GitHub sponsors and stuff, and so you just give them the options to choose
17:54 whatever they feel comfortable with, and this increases the likelihood that they actually will go through
17:59 with throwing something in your head, so to speak.
18:01 At least that's my feeling.
18:03 I don't know.
18:03 I think that GitHub sponsors has been really positive for open source.
18:07 I think it's made it pretty easy to just check a box.
18:10 They already have your credit card, potentially, and you just want to give a little support
18:13 instead of a one-time PayPal donation here that you forget about after once and all that.
18:19 Before we move on here, there's a funny comment, nice comment out.
18:22 Kanishk says, this group, look at all of you.
18:26 You guys are the Avengers of Python open source, right, which is kind of like the superheroes.
18:30 I love it.
18:31 It's somewhat actually true, it seems.
18:33 Okay.
18:34 So the next thing I want to ask is a little bit of an origin story.
18:37 Just what projects did you try and they didn't really get traction, and then how do you think that your project got traction here?
18:44 And I know, Samuel, you might vanish any minute, so you're next.
18:47 You're up first on this one.
18:48 That's a really interesting.
18:49 I've built a number of things in open source.
18:51 I started something last week.
18:53 I open source on Friday that has got more stars over the last three days or, I guess, week now.
18:59 as the first project I started, ARQ'd, has over, I think, coming up on six years.
19:04 So, I mean, that's front end, and front end gets a lot more traction than like queuing an RPC does.
19:11 But, yeah, I don't know how, obviously there were some things I played with back then
19:16 that never took off.
19:16 But, yeah, it was this, like, I think having the right time, right place for Titans.
19:20 They'd obviously been around in Titans for a long time, but back in 2017 when I started Pydantic,
19:24 their usage was growing really fast.
19:26 And I think there were lots of people like me who found it kind of frustrating
19:29 that they were there and didn't do anything.
19:30 So, yeah, I think being the right time, right place was super valuable for me.
19:34 And, obviously, like, great projects like FastAPI, adopting Pydantic, has made a big difference.
19:40 But I don't know.
19:41 What's weird, if you look at the download chart, it's like there was a protection point
19:44 at the beginning of 2021.
19:46 So then we had, like, 5 million downloads a month.
19:49 And since then, there's been kind of almost exactly linear growth to now 125 million downloads a month.
19:55 So something weird happened in 2021, not after the project started, I don't know.
19:59 But, yeah, I think it was right place, right time.
20:01 And that frustration was the starting point.
20:04 On that note, I'm going to have to rush guys a bit.
20:06 It's great to see everyone.
20:07 And I'm sure I'll meet you all in a conference soon.
20:09 Bye-bye.
20:10 Thanks for dropping in.
20:10 Good to see you.
20:11 Bye-bye.
20:11 All right.
20:12 Charlie, keep going around the circle here just so I don't...
20:15 Yeah, you know, it's interesting because I, like, this is...
20:19 Ruff is really my first time being a maintainer, like, publishing open...
20:25 Like, I've been a consumer of open source, right, for my whole career, but I was never really, I guess,
20:31 a creator or a publisher or a maintainer of open source.
20:33 You know, around the time that I started working on Ruff, I was working on, like, a couple different projects.
20:39 And they all...
20:39 I was kind of trying to figure out what I wanted to do next.
20:41 I'd left my job recently.
20:42 And Ruff was kind of motivated by a lot of the experiences I had at my job,
20:46 where I was, like, maintaining a large Python code base.
20:48 Did you leave your job with the intent of going to work on Ruff?
20:51 Or were you just like, I'm going to leave, and then I'm going to figure something out.
20:54 And you're kind of like, well, what is the process there?
20:57 I left my job with the intent of starting a company, but I did not think it would be Ruff.
21:01 And Ruff was, like, this distracting side project that I was working on while I was, like...
21:06 I was working with a friend, and we were, like, trying to figure out, like,
21:09 the Venn diagram of interests, of, like, what should we...
21:12 What are we willing to work on full-time together?
21:14 What makes sense, given, like, our interests?
21:16 And then, you know, in all my free time, I was like, I just want to work on developer tools.
21:20 And, like, I worked on...
21:21 I built Ruff, or I started building Ruff.
21:24 I worked on, like...
21:25 Yeah, I worked on a lot of different...
21:26 Not a lot, but, like, I did...
21:28 We were working on a couple of different projects.
21:29 I did, like, a sort of CICD thing where you, like, write Docker files and, like, CI files in TypeScript,
21:36 and they, like, transpile down.
21:37 And I was like, oh, I think that has a lot of cool ideas.
21:40 I worked on, like...
21:41 It was pretty early in a lot of the LLM stuff.
21:44 I worked on, like, a code-based-wide refactoring tool where you, like, give it examples of, like, before and after,
21:50 and then it tries to find examples.
21:51 It was, like, a co-pilot for your entire code base.
21:53 Kind of...
21:53 It didn't work that well, like, at scale, but it was, like, a cool idea.
21:56 So I was, like, working on the stuff that was all open source.
21:58 Maybe it could have been a timing thing.
22:00 Like, maybe today that would be all the business.
22:03 Yeah, I mean, it's also, like, an...
22:05 Yeah, it's also an effort thing, I guess.
22:07 Like, I put a lot more into Ruff.
22:09 And it was interesting because I kept viewing Ruff as, like...
22:12 You know, it was probably open source at that point, but I don't think I had launched, like, launched it.
22:16 And I kept viewing it as, like...
22:18 Like I said, like, a little bit of a distraction.
22:19 And my friend was, like...
22:21 You know, I think you should really, like, push to, like, release this because, like, if you think it's, like, interesting,
22:26 then, like, other people will probably think it's interesting.
22:28 And he was the person that really, like, motivated me to actually, like, see it through
22:32 to doing the release.
22:33 And then I did the release and, like, a lot of people were actually interested in it.
22:37 So that kind of gave me, like, the energy to, like, really start working on it full-time
22:41 and just kind of see where it went.
22:43 And it was really, like, projects like Pynantic and, like, Sebastian started, like, commenting on issues and stuff.
22:48 And I was like, wow, like, real serious projects are looking at this, like, crazy tool.
22:52 And let me just see.
22:54 I'm just going to do whatever it takes to make it, like, a feasible choice
22:56 and just started, like, cranking through, like, all the issues and all the things that we were missing.
23:00 It escalated pretty quickly, I think.
23:03 Did it surprise you?
23:04 Oh, yes.
23:04 Yes.
23:05 Absolutely.
23:06 I was convinced that I had faced, like, this problem around tooling as, like, our code base got large in my last company
23:13 and that there was an opportunity to, like, build, like, better, more performant tooling.
23:17 I genuinely wasn't sure, like, how widely that message would resonate with people.
23:21 And so, I don't know, it's like a little bit of luck, right?
23:24 Like, sometimes you work on great projects and then, like, they go nowhere
23:27 and, like, just no one happens to see it.
23:29 And then sometimes you work on a good thing and, like, it does go somewhere.
23:32 And so, there are certain things that are within your control, certain things that aren't.
23:35 I feel like I did a good job of, like, communicating the project and, like, why it was interesting and why it was exciting.
23:40 But I also feel like I got a little bit lucky that it just, like, gravitated towards the right people
23:44 and got attention in the right ways.
23:46 Sure.
23:46 Also, maybe that Black had existed, which is a little ironic because Black kind of solves a real similar problem.
23:52 But, like, people were, okay, we embrace the idea of the thing that Ruff does really well.
23:57 You know, you just convince them to use Ruff in that sense.
23:59 Yeah.
24:00 I mean, we have a little bit, I mean, it gets back to this.
24:02 Like, we have a little bit of, like, a second mover advantage, right?
24:06 Yes, exactly.
24:07 There's a lot of existing tools that people use already and, like, a lot of those practices,
24:11 like, the idea of using a format or the idea of running code mods, like, the idea of using a linter
24:16 and, like, the knowledge of, like, what kinds of rules are valuable and, like, what kinds of analysis we can do.
24:21 Like, all this stuff existed.
24:23 And that was part of the story, really, was I was, like, these tools are great
24:27 and I get a lot of value out of them, but I want them to be, like, easier and faster.
24:31 And so, yeah, there's definitely a strong timing thing.
24:34 I think, like, I think Rust, too, this is maybe, like, a little bit more specific to what we're doing.
24:38 But, like, you know, I think, like, the intersection between Python and Rust has,
24:42 or the, I guess, the interoperability between them and sort of the ecosystem around it has just grown a lot.
24:48 I mean, still, I would say, like, pretty early, but it's, like, matured and grown a lot over the past few years.
24:53 And so even just the fact that, like, at my last company, we started to introduce Rust
24:57 and we started to, like, move some of our core systems into Rust and expose them over PyO3.
25:02 Like, the fact that that existed and the fact that I was, like, exposed to that,
25:05 like, that's all just, like, pure chance.
25:07 Otherwise, I never would have thought to do this.
25:09 Very cool. Well, congrats.
25:10 Well-deserved.
25:11 We're all doing the, all using Ruff, as we said, is excellent.
25:15 Will, Rich is awesome.
25:16 How, why do you think it took off?
25:18 Did you try stuff before?
25:19 What's the story?
25:20 I tried a lot of stuff before, before GitHub.
25:23 You know, coding has always been my hobby.
25:25 You know, I'd do it for work and I'd come home and work on a hobby project.
25:29 And it just seemed natural to want to share it.
25:31 Pre-GitHub, I would just put stuff on my blog and get some feedback from it there.
25:35 I quite enjoyed that.
25:37 And yeah, I have a number of open source projects.
25:39 Pre-Rich had a BB code parsing library.
25:42 I had a chess library.
25:44 I had a web toolkit.
25:46 So yeah, when Rich came along, it was another hobby project, something to keep me entertained.
25:51 Why is this terminal so boring?
25:53 Come on, see what we can do about that.
25:54 You know, I'd always use the terminal and I'd always struggled when you've got a page of white text
25:58 on black background and you're trying to pick out an IP address from somewhere.
26:03 And, you know, I'd always wished, oh, I wish it would just format it and colorize it for me.
26:08 I know this is possible, but it doesn't happen.
26:10 So then, yeah, I just, I started it and it came together quite well.
26:14 When I released it, it was like, boom, the stars just started accumulating.
26:19 Got lots of feedback.
26:20 It was very exciting.
26:21 And I kept building on it.
26:23 It was kind of like issue-driven development.
26:26 So people would just ask for something.
26:27 Oh, that's a good idea.
26:28 And go ahead and implement it.
26:31 And it grew from there and it became really large.
26:34 I did actually, prior to Rich, I had a library called PyFileSystem.
26:38 And this is kind of like a wrapper to file systems.
26:41 So you can have the same interface for your FTP server as a hard drive for a zip file, S3 bucket.
26:47 And that got some use in the community.
26:50 It wasn't enormous.
26:51 But that taught me a lot about building open source, you know, managing feedback issues, et cetera.
26:58 So that was a great experience when I started working on Rich.
27:02 And I was very surprised, actually, how successful it became.
27:05 I remember the first time I realized that this was bigger than just a hobby project
27:10 is when someone told me off for violating Semver, I released a clear, a clear breaking change
27:16 because I thought, nobody's using that yet.
27:18 But they were.
27:19 So the next day I got told off quite appropriately.
27:23 And then I thought, okay, I'll have to take this more seriously.
27:25 If people are using this in their day job, they can't just have someone who's just like throwing new bits of code
27:32 and changing functionality.
27:33 They had to treat it like it was an actual my day job.
27:37 Yeah, well, everyone on the call here probably has a little bit of nervousness about like,
27:42 if I break this, there are a lot of people that depend on this thing.
27:46 And it's so different.
27:47 It just changes so much.
27:48 When you were talking about the issue-driven development thing too, I just remember that phase of Ruff
27:54 where it was like, anyone who cared all about the project, all I wanted to do was make them happy.
27:59 And I was like, oh, wow, that seems like a cool idea.
28:02 Let's definitely do it.
28:03 And I was just like, it was the point in time where I could fix the bug,
28:07 cut a release the same day, and then their thing is fixed.
28:10 And then it's like, okay, great.
28:11 Now we have a relationship.
28:12 Thanks for using my thing.
28:14 I just think like, but that's changed so much.
28:17 Right?
28:18 Because then I went through the same experiences of like, I ship a release with a breaking change
28:22 that I didn't really document.
28:23 A lot of people get upset.
28:24 And then you realize, okay, I actually have some more responsibility now.
28:28 Yeah, these days, it's more like trying to find the balance between saying no to stuff
28:33 that you then have to end up maintaining and not like disappointing people too much
28:38 because you say no or things like that.
28:40 And then trying to keep this whole interaction with people nice, even though you don't want to do stuff
28:47 that they want you to do because you know it's better for the project.
28:53 This portion of Talk Python to me is brought to you by Sentry.
28:56 You know Sentry for the air monitoring service, the one that we use right here at Talk Python.
29:00 But this time, I want to tell you about a new and free workshop.
29:04 Heaming the Kraken, managing a Python monorepo with Sentry.
29:08 Join Salma Alam Nayour, senior developer advocate at Sentry, and David Winterbottom,
29:14 head of engineering at Kraken Technologies, for an inside look into how he and his team develop,
29:20 deploy and maintain a rapidly evolving Python monorepo with over 4 million lines of code
29:26 that powers the Kraken utility platform.
29:28 In this workshop, David will share how his department of 500 developers,
29:32 who deploy around 200 times a day, use Sentry to reduce noise, prioritize issues,
29:38 and maintain code quality without relying on a dedicated Q&A team.
29:42 You'll learn how to find and fix root causes of crashes, ways to prioritize the most urgent crashes and errors,
29:49 and tips to streamline your workflow.
29:50 Join them for free on Tuesday, February 27th, 2024, at 2 a.m. Pacific time.
29:56 Just visit talkpython.fm/sentry-monorepo.
30:01 That link is in your podcast player show notes.
30:03 2 a.m. might be a little early here in the U.S., but go ahead and sign up anyway
30:07 if you're a U.S. listener, because I'm sure they'll email you about a follow-up recording as well.
30:12 Thank you to Sentry for supporting this episode.
30:18 PRs are like cake or puppies.
30:20 If it's a simple bug fix, that's like cake.
30:22 You'd like, thank you.
30:23 I enjoyed that cake.
30:25 Then move on.
30:26 But some PRs are like a puppy.
30:27 It's like terrific.
30:29 You like puppies, but you've got to feed them and clean up after them.
30:32 Why am I standing in the rain with this puppy on like a Friday night?
30:35 How do I get here?
30:36 Collecting the book is poop.
30:38 Yes, exactly.
30:39 Sometimes you say thank you, but I just can't, I just can't look after another puppy right now.
30:43 That's a difficult thing to come to terms when the project gets a bit more mature.
30:46 Because previously, you're accepting all the puppies, but then you have to start saying no,
30:50 no to puppies.
30:51 And Rich definitely got there because it accumulated.
30:54 Do you hate puppies?
30:55 Come on, that's a pretty hard stance.
30:56 I'm kind of a cat person, to be honest with you.
30:59 But yeah, I mean, you have to say no.
31:01 Unacceptable.
31:02 Eventually, yeah.
31:03 I think this is where plugins always kind of like take the center stage, right?
31:07 You're like, just, oh, that sounds like a great idea for you to maintain
31:10 external to my library.
31:11 That was exactly my approach to the whole situation.
31:14 Yep.
31:14 Here's a plugin API.
31:16 Have fun.
31:16 But also the probability of some little change breaking someone's code and like being considered
31:23 a breaking change grows as the project grows in usage.
31:27 And like, you know, like at some point it's like almost any change will end up
31:32 breaking someone in very unexpected ways because they are doing something really,
31:36 really weird.
31:37 But you know, like someone is doing it.
31:39 So like it becomes more and more difficult to know like, is this a breaking change
31:44 or not?
31:45 Like no one should be using this variable here or this parameter, but like,
31:49 you know, there's someone out there doing that.
31:51 So I feel defining what is actually a breaking change and what is, what is this trick
31:56 somewhere gets more difficult as things grow.
32:00 Yeah, I don't know.
32:01 One of the things I like that the Django project did was kind of basically
32:04 only things that are documented are supported.
32:06 Basically, that was kind of the line they drew and I thought that was a pretty good,
32:09 pretty good way to draw it.
32:10 But yeah, you're always, you know, that never actually works.
32:12 That doesn't make people happy.
32:13 It just gives you plausible deniability.
32:15 Don't yell at me.
32:17 It's not my fault.
32:18 I think adding a formal like versioning policy is one of the best things that we did
32:23 because for a long time rough was just we only used patch releases.
32:26 So we got to like zero, zero, like 285 or something.
32:30 And we had basically no guarantees about what would or wouldn't change like across releases.
32:35 And as the project got more and more popular, like that started to cause more and more problems.
32:40 And so Zany, someone on our team, like when they joined, one of the first few things
32:43 they did was like create an actual formal versioning policy and we added like
32:47 preview behavior.
32:48 So like you can opt similar to what block has kind of opt in to like breaking
32:52 or more experimental changes.
32:54 and so now we have like clear expectations around what it means to like bump a minor release,
32:58 et cetera, et cetera.
32:58 And like that has made our lives a lot easier, like actually having clear expectations
33:03 around that that are communicated and respected.
33:05 But it's the kind of thing that you just don't think about at all until at least I didn't.
33:08 Until I checked on figure.
33:10 Yeah.
33:11 Some people's code runs things like FastAPI or Octoprint or whatever.
33:16 Your stuff rewrites people's code.
33:20 Yeah, but at least it doesn't run at runtime.
33:22 I don't know.
33:22 I actually think it's easier.
33:23 Yeah.
33:25 Indeed.
33:26 All right.
33:26 I find you talk about the plugins thing because like I've actually very intentionally
33:30 taken the opposite approach, which is we have like almost no public API because like the only
33:35 public API is the CLI and like we don't expose our API in any other way.
33:39 And that's because like we know we're going to change like everything internally,
33:43 like pretty dramatically.
33:44 And so we wanted to have like full control over that without having to worry
33:47 about breaking people's stuff yet.
33:48 But it's like it's starting to become more of a problem because more and more people
33:51 want to use it as a library in like different ways.
33:53 But it's sort of a counterintuitive way to like make our lives easier as maintainers
33:58 was like not expose any public API apart from the CLI.
34:01 Yeah, very interesting.
34:02 That's a funny, funny sort of anecdote.
34:05 I'm rewriting a lot of the documentation for SQL model because I want to have examples.
34:10 Right now I have examples that are compatible with Python 3.7 and above,
34:14 but actually 3.6 and above.
34:15 But I want to have also the syntax for 3.9 and 3.10.
34:19 3.10, you can have like the unions using the vertical bar and these things.
34:23 And I want to have examples for each one of those.
34:25 So the approach I did was to write a script that will automatically update each one of the files
34:30 by calling rough as a soup process.
34:32 So that's the API.
34:33 And then like, you know, like I mean, the process is like doing all that stuff.
34:37 But like, yeah, it's like another fanboy of trying to use it as an API before it's available.
34:45 Yeah, with lack of an API, right?
34:47 An API will be created.
34:48 Exactly.
34:49 I've heard this before as like Hiram's law, which is like with a sufficiently
34:53 large number of users, like any implementation detail become someone will eventually rely
34:58 on an implementation detail.
35:00 Like any arbitrary implementation to someone is probably relying on that behavior,
35:03 which is basically the behavior of the program is the API.
35:05 And unfortunately, they'll find the underscore functions.
35:08 You've tried to dissuade them from using and all the things, you know, Eric,
35:12 what's the origin story for Read the Docs and what did you try and how do you think
35:17 it caught on?
35:17 Yeah, so I mean, this was kind of way back in the day, but yeah, I kind of got started
35:21 writing Django plugins, you know, apropos to the conversation.
35:25 You know, I was working at the Lawrence Journal world where Django came from
35:30 and it was kind of early in my career and I was just kind of getting excited
35:32 about open source and blogging and just basically built a few of these kind of testing related
35:37 open source projects and then that was kind of where I got started with open source
35:40 and then basically it was the classic scratch-on-itch thing, right?
35:44 Like it's like I have a bunch of open source projects I want to write documentation.
35:47 How do I solve that problem?
35:49 And back in the day that was a much harder problem to solve, right?
35:52 It was basically just like build a zip file and upload it to packages.python.org
35:56 if folks remember that one or was it packages or whatever the docs, there was a docs hosting
36:02 on PyPI basically.
36:03 And yeah, basically just wanted to kind of build a better version of that
36:06 that in the integrated with GitHub.
36:07 I feel like web hooks were like the cool new thing back in 2010.
36:11 And so that was really kind of the insight, right?
36:14 It's like let's build this kind of like CICD workflow on top of web hooks
36:18 and actually did build kind of a version of that the previous year around kind of like
36:22 code quality stuff.
36:23 So it actually ran kind of like a linter and built a website on commit and had a similar
36:27 kind of workflow, right?
36:29 Where it like gave you a grade and did all this kind of stuff, which is like 2009.
36:33 And yeah, that didn't really catch on at all.
36:35 But then I think Read the Docs just we built it and then I was using it for my own projects
36:39 and I actually had the need to kind of maintain it and keep it updated.
36:42 And then I think people just kind of grew naturally, you know, gave some conference talks,
36:46 that kind of stuff.
36:46 But I think it just solved a problem that people had and that's always going
36:49 to be the best way to grow a thing.
36:52 Yeah, absolutely.
36:53 Awesome.
36:54 What's Read the Docs written in?
36:55 Is it Django?
36:56 Yeah, it's all Django and Python.
36:57 Funny coincidence.
36:59 I went to college in Lawrence at the University of Kansas.
37:02 Oh, nice.
37:03 I was right there, right at the heart of Django, but I moved off to grad school
37:08 like a couple years before all that happened.
37:10 So I missed, missed the excitement.
37:13 I grew up in Virginia and everyone was like, you're going to Kansas?
37:15 You graduated school?
37:16 Like, how are you going there?
37:18 Like, what?
37:19 Everybody thought it was the weirdest decision, but yeah, like I really do think,
37:22 you know, ending up in that Python and Django ecosystem has been pretty transformative
37:25 to my life.
37:26 So, you know, worked out.
37:27 Lawrence is a pretty cool little town, actually, of all the places.
37:30 Yeah.
37:30 Sebastian, how did you come about this crazy idea to put types into our web apps?
37:36 You know, Python, that's dynamic.
37:38 It doesn't have types.
37:38 What are you doing?
37:39 Yeah, I don't know.
37:40 It's so crazy.
37:41 It's so fun to see it said Michael Larson in the chat, like, they maintain
37:45 our URL E3 and the Python security developer in Resilience just, like, chatting along with us.
37:52 Like, he probably has had to deal with so much stuff as us.
37:56 Yeah, I'm sure.
37:57 So, like, some of the first things that I did in open source were actually
38:01 Docker images for deploying Flask because I was working with Flask and deploying Flask
38:07 was difficult and I needed to be able to combine Nginx with UWSGI and, like,
38:12 a bunch of things and, like, they all had their own custom configuration files
38:16 and it was, you know, like, so difficult.
38:17 I didn't like doing that and then I just had to study how to do that stuff
38:22 and then after going through all that I wanted to save everyone else's time
38:26 doing that.
38:27 So, we're like, well, let's just put a Docker image with this and a lot of documentation
38:31 of how this Docker image works and how you can use it with some sensible defaults.
38:35 So, you know, it was just like a weird contraption that was it but it actually grew
38:40 and, like, got, like, a few stars, like, a bunch of stars.
38:43 For me, it was a lot, you know, like, 100 stars.
38:45 Oh, my gosh, I have an open source developer.
38:47 And then, like, at some point it had, like, a thousand stars or something like that.
38:51 I was so happy about that.
38:52 And at some point it was kind of the de facto standard for doing Flask, Docker,
38:57 Flask-indocker.
38:58 that was the first thing that I did.
38:59 I ended up with FastAPI.
39:01 I was avoiding building FastAPI for a long while and I was trying all the other frameworks
39:06 and all the other tools.
39:07 I was convinced that there was something that would do the things that I wanted.
39:11 I just had to find it.
39:12 And as I was trying different frameworks, also in different languages, I was extending
39:17 the list of things that I wanted to have and also the list of things that I wanted
39:21 not to have.
39:22 For example, I didn't want to...
39:23 That takes you farther and farther away from any framework so you're out.
39:27 having one that would tickle the boxes.
39:28 So it was like, ah.
39:29 But then I realized I really like this thing of having types because you get out
39:34 of completion and inline errors and this is so cool.
39:37 It's so cool to be able to have this.
39:38 I want to have this in Python and then Python added type annotations and it was like,
39:42 this is great.
39:43 How do I use them?
39:44 There's no way to use them with the current frameworks.
39:46 So at some point I actually found the right framework.
39:50 It was called API Star by the same author of Django REST framework.
39:53 It was just missing some authentication stuff.
39:55 I said like, okay, I'm going to contribute to the other stuff.
39:58 When I was about to jump into the code, he said, I have to deprecate this.
40:02 I will go focus full on Starlet.
40:04 And then he went to build Starlet.
40:06 This is Tom Christie, which is super prolific and an amazing open source person
40:10 in general.
40:11 And then at that point is when I said like, ah, just have to try it.
40:15 Let's just do it.
40:16 So I'm just going to try to build something that will be kind of a spiritual successor
40:20 to API Star built on top of Starlet.
40:23 So I was, you know, like I was actually narrating all the learnings from Flask,
40:27 Django, Django REST framework and all the ecosystem and just like bringing
40:31 all those ideas together.
40:32 At least that was my intention.
40:33 And then I wanted to have a bit of better type annotations.
40:36 So I saw that Pydantic was using standard type annotation.
40:39 So people wouldn't have to learn this like, you know, from FastAPI for special string
40:44 or something like that.
40:45 Just instead of that, just use pure string.
40:46 So I wanted to have something based on standards like OpenAPI, JSON schema
40:51 and all that stuff and based on standard Python and to have like the simplest syntax possible
40:56 and to, you know, like give the best developer experience possible while,
41:00 you know, like not adding like any additional steps for developers to build something
41:05 that by default will have all the best practices built in.
41:08 That was the intention.
41:09 And I was just like trying to solve it for the things that I was working on.
41:12 I was supposed to be doing AI and machine learning and stuff, but like I had to stop
41:17 for a bit to solve APIs.
41:18 I got stuck in APIs.
41:20 That's how I ended up with FastAPI.
41:22 Oh, I think you made a pretty decent choice.
41:24 It seems like FastAPI is doing all right.
41:26 Yeah.
41:27 Yeah, I just saw you.
41:28 It's much better than what I ever had expected.
41:31 Yeah, I know.
41:31 Congratulations.
41:32 Well, it's also deserved, but I also just saw an X, I don't know, a post on X Twitter,
41:38 whatever you, however you, addressed these things, where you said you showed a graph
41:43 where the number of GitHub stars for FastAPI just passed Flask.
41:48 And, you know, I have a lot of respect for Flask and the Palette team and David Lord
41:52 and all those folks, but, you know, awesome, awesome that your stuff has taken off so much.
41:56 That's really cool.
41:57 It's super cool.
41:57 It's amazing.
41:58 And, you know, like Flask was one of the big inspirations for FastAPI, and I've been able
42:02 to be at this point.
42:04 It's crazy.
42:05 Like, yeah, I still can't get over it.
42:07 Yeah, super cool.
42:08 super cool to be able to build all this and to keep building more stuff.
42:11 So, yeah, super nice.
42:13 one final comment before we move on to Octoprint.
42:16 But, one of the things I kind of see you doing in the world is you're like
42:21 the combiner.
42:22 You're like, oh, we've got this cool stuff with Pydantic and Starlet, and how can we combine it
42:27 in this way to make this, you know, and Swagger.
42:29 And, like, similarly with SQL model, you're like, well, Pydantic is cool,
42:32 but SQLAlchemy is kind of cool, but it could be more or better, you know,
42:36 like, it could be better, right?
42:37 So, anyway, good job.
42:38 Yeah, and also, like, Typer, that is the library for building command line applications.
42:42 It just click with the type annotations, the same ideas from Pydantic, and now with,
42:46 you know, like, integrated building support for reach.
42:48 So, like, also, picking Will's work, trying just to put a bunch of things together.
42:54 I'm just, you know, like, I'm just making cocktails everywhere.
42:57 Yes, exactly.
42:58 It's more than that, but there is a lot of value in combining things in a smart way
43:02 and accessible way.
43:03 Yeah, awesome.
43:04 All right, Gina, you told us a little bit about the origin story, but like,
43:08 what did you try before?
43:08 And then I have a follow-up question that I think is unique to your project.
43:12 I wouldn't necessarily say that I tried anything before because the whole thing
43:16 was completely unintentional.
43:18 I basically bought myself a 3D printer in late 2012.
43:21 I wanted to be able to put it in my spare bathroom and monitor it from afar
43:25 because back then this thing was tying up my PC.
43:28 You had to constantly keep it connected so it could operate and that for hours
43:32 and hours and it made noises and it produced fumes and I just wanted it out of my office
43:37 and to be able to play games on my PC again instead of having it basically communicate
43:43 constantly with a 3D printer.
43:44 And so I bought myself a Raspberry Pi and I was looking online for something
43:48 to be able to just put on this Pi and attach to the printer and throw a Wi-Fi dongle in
43:52 because back then the Pi didn't have Wi-Fi built in and throw that in the spare bathroom
43:56 but there wasn't anything.
43:57 So over the course of my Christmas break in 2012 I sat down and changed that
44:02 and this is basically the origin story of Octoprint.
44:05 I just wanted to scratch my own itch.
44:07 I wanted to put my printer in my spare bathroom.
44:09 This is all.
44:10 And apparently a lot of people had the same problem because I just you know
44:14 like how we like to do these things.
44:16 We build something that we think might be interesting.
44:19 We throw it up on GitHub and go just like here go nuts enjoy have fun with that
44:23 and I suddenly started getting emails from all around the world like hey
44:27 I have this in this printer can you also make it work with that and so this escalated
44:31 and I went like oh someone is using it of course I'm going to add this support
44:36 and of course I'm going to add this feature and it just grew and grew and grew
44:40 and grew and apparently I just hit a nerve so this was utterly unplanned
44:44 this was never my intention at all and I just wanted to solve my own problem
44:49 and have continued to solve my own problems and the problems of other people
44:53 ever since.
44:54 Before Octoprint I actually was also quite active in a little project called DocuViki
44:58 where I was developing some plugins for that and I even did open source before I knew
45:04 what open source was with some PHP scripts when I was 18 or so that I threw up
45:09 on my website but yeah Octoprint was like it took over my life it just was an accident
45:15 a happy little accident maybe.
45:17 How did you decide okay this is a job for me rather than just a thing you worked on?
45:23 The thing is by mid-2030 2013 I went to 80% on my regular day job I used to be a
45:30 software architect slash consultant with big corporation Java World all the enterprise stuff
45:35 and to be able to dedicate one day per week fully to Octoprint plus of course
45:40 the weekends and the after hours and the vacations and all of that and that still
45:44 didn't suffice anymore by 2014 and I noticed that it was impacting my health
45:49 it was impacting my relationships and that was actually quite perfect timing
45:54 really when this company that hired me initially approached me and said hey do you want
45:59 to maybe fly out to us and we'll chat and if you like all of that what we have to propose
46:03 then we can just do that and this is how it then continued to go from 2014
46:08 until 2016 and yeah it was never my intention to become self-employed I'm a quite
46:14 risk-averse person actually so when this point came where I was like okay either
46:19 I find a way to keep funding this or I have to really drop it because it was
46:24 way too big by then to be kept as a pet project without being utterly utterly unhealthy
46:29 yeah I decided to jump into the cold water and have been trying to keep up
46:33 at the surface ever since basically so yeah all of that really completely
46:38 unplanned cool what an adventure indeed yeah and the good thing is even if people don't
46:43 understand what open source is or what code is I always have quite a topic
46:46 at parties so that is fun because yeah like people give you money for something
46:51 they can get for free what exactly yeah if you're not familiar with open source
46:56 then it definitely is a weird it was tricky to find a text consultant who understands
47:00 the concept so yeah I can imagine that's interesting I'm sure all right I was very
47:06 recently I was like what do you do what is your day oh I'm a software developer
47:10 so you work for a company not really what is it that you build well I build
47:15 a platform that is free for others to use and who's paying you a company
47:20 that pays money to companies to build companies so you're building a company
47:23 no it's actually you know like it was a long conversation they got bored
47:27 and later this doesn't make any sense yeah I've just taken to say I'm a software
47:32 developer and I work with 3D printers and then people usually stop asking questions
47:37 because 3D printers are this mysterious thing that no one understands anyhow
47:40 usually at least and then yeah unless they say oh 3D printers and then I say
47:45 yeah do you know 3D printers and they go yeah yeah I have one and then I can say
47:49 oh do you know Octoprint yes oh yeah I made that and then oh yeah it's tricky to explain
47:53 to people I'm sometimes not even sure my parents understand what I do so
47:57 I'm sure that my parents don't understand what I do that's okay I'm sure
48:03 they're still proud of you anyway it's fine yeah my definitely are proud of you
48:06 I would like to just maybe getting a little short on time you're coming up
48:09 to the end of our Avengers meeting let's close it out with this go around
48:13 one more time let y'all or maybe just as a group kind of chime in on this
48:17 speaking to the people out there listening who want to start an open source project
48:20 or want to contribute to open source or somehow kind of get involved in similar ways
48:24 what would you do different if you started now many of you have been working
48:28 on this for a long time you've had a lot of experience like if somebody said
48:31 well the world is somehow the memory has been erased from the fact that rough
48:37 or rich or octafrid or whatever existed to start over what would you do different
48:42 or the same I would use FastAPI yay good use of a time machine there everybody
48:48 I've had multiple conversations over the years where people are like why don't
48:51 you use this library I'm like oh it didn't exist exactly yeah this is the
48:55 problem exactly when you actually have a plug-in system then swapping out
48:59 stuff like that can become very tricky absolutely when I get asked what to work
49:04 on what to study what to focus how to get into open source or like almost any
49:09 of those questions I always say that the main advice I give is just to focus
49:13 on a problem that is important to you more than you know like innovation
49:18 market disruption or war whatever just like focus on a problem that is actually
49:22 important to you hopefully that is important to others as well and if it's not
49:26 a problem that affects you directly hopefully it affects someone that is
49:29 very close to you so you can get like a very tight feedback loop of what
49:33 you are building and then try to solve it and then use that as the guide
49:37 of what to do what to learn what to focus on what to do in many cases it's just
49:42 learning a framework that is already there you know like why would I go and build
49:46 a system to control 3D printers instead of just like learning how to use
49:50 auto print in many cases solving the problem is just like using the tool
49:54 that is already there but then in some cases you end up figuring out that there's
49:58 no tool and you just have to build it there's actually no lint there and formatter
50:03 that can be super fast so you can run it every time you just hit save so then
50:07 you just have to build it in Rust and create rough or like you know like
50:10 there's always like this thing that you are trying to solve that is just
50:15 not solved there yet and that is what gives you the best value and the best
50:19 outcome in many cases it can be just like you know contributing to another
50:23 open source project or building something new but the thing is like for me
50:28 it's just like focusing on a problem that is important that is what has worked
50:33 for me at least good advice I would add to that that you really shouldn't
50:36 try to you need to be really passionate about the thing as well right it
50:40 needs to be something that is really something you're into something that
50:43 will that you will want to spend a lot of time on that is actually not your
50:48 working hours and such because otherwise the whole jog until this becomes
50:53 anything viable anything big enough to support you in any kind of way even
50:57 if it's just being able to drink a coffee per week or something that will
51:02 be a quiet long slog and a lot of work and a lot of blood and sweat and tears
51:07 and so you really need to be into this so that you want to do that if you
51:11 are just in that for the end goal of I don't know becoming rich through open
51:15 source which by the way will probably not work only will I go rich then this
51:21 will not work out you need to focus on the path to the goal a lot of people
51:26 try to reach for the end goal before they are willing to walk the path I
51:32 happen to be in the GitHub star program and I've had a lot of people ask
51:37 me how do you become a GitHub star and that is the wrong question to ask
51:41 how do you become an open source maintainer of a popular project you just
51:46 have to do whatever you are interested in you have to do work and you have
51:51 to be passionate about your work and then maybe if you hit the right nerve
51:54 then that will happen and maybe it won't I think it's very interesting that
51:58 none of us had a career path to where we are now we didn't set out to be
52:04 where we are now it just feels like we followed our intuition and it worked
52:09 out which means it's very difficult when someone asks me how do you become
52:12 an open source developer how do you start a company I'm not quite sure I can
52:16 tell you my path to there but it's very hard for me to articulate to someone
52:20 else how to get there I think there's a lot of luck involved as well right
52:24 it's like you have to do all this stuff and roll this dice if it gets a six
52:27 you can be successful there's an element of luck but it's kind of luck you
52:31 make for yourself and it might take you to somewhere else or it might not
52:36 but as long as you're passionate about it and you enjoy it then great things
52:39 will happen I think also Will and Charlie you both took some specific time
52:43 on your own money to really level up what you're working on which is pretty
52:48 brave not a lot of people would say I'm just going to spend my savings to
52:53 work on this project and see if I can make it go so you've earned some of
52:56 that through taking that chance and putting that time and effort I think
52:59 for me that didn't last long because I'm after 15 months I was living on
53:02 GitHub sponsorship VCs came along and then there was cash everything changed
53:07 and you had to learn a whole new set of skills I'm sure I do feel lucky that
53:15 like I said this is my first time being a maintainer and it was very clear
53:18 to me quickly that for Ruff to have the pace of development and the scope
53:23 that it had to be a full time thing and that was pretty obvious to me quickly
53:27 and I have a lot of respect for people who have been maintainers for longer
53:31 periods of time and in a way where it's not their full time job or they have
53:35 to do it on the side I have been in that position but it's already clear
53:39 to me that that takes a lot of dedication and commitment so I feel very lucky
53:44 that I get to work on open source full time I know it's not all entirely
53:47 luck right like you increase your luck surface area and opportunities come
53:51 your way but I do think it's a fortunate position that these kinds of opportunities
53:56 do exist because maintaining popular stuff is a lot there are privileges
54:00 that come with it 100% but it's a lot of work and a lot of stress and a lot
54:06 of responsibility and you don't necessarily have to start your own right
54:09 away I didn't have gray hair before this you don't have to start your own
54:12 either you could contribute to a really popular one and get into the scene
54:16 and you know like Eric that sounds a little bit like your story like you
54:18 were in the Django scene and then spun off from that what you are doing right
54:22 yeah definitely and you know part of an open source community and definitely
54:26 going to PyCon and just being surrounded by those people because that was
54:29 always the it's very lonely work just to have an inbox of github issues and
54:34 no inbox thank you you know and like going to conferences and that kind of
54:38 stuff was really where you feel the appreciation and you really kind of actually
54:42 feel the value that you're providing as well as just the stress of the things
54:47 you're breaking so absolutely the conferences are great to really feel the
54:53 appreciation rather than just the request they'll say thank you and then
54:57 they'll give you a bug report but at least the thank you I'm talking to you
55:02 there is this can I just show you this an interesting observation for me
55:08 a year ago I didn't know anyone in Python open source at all I was a user
55:15 of Python in my day job every day but I was not interacting with Python in a
55:19 year now like Sebastian we've interacted a bunch there's a lot of people
55:23 that I've come to know and think of as friends so I think especially if you're
55:28 interested in getting involved and putting in work I really don't think there
55:31 are significant barriers and you get out of it what you put in so I think
55:37 I've been very impressed with just how welcoming and friendly the community
55:39 has been especially other maintainers yeah absolutely talk to a lot of people
55:43 who show up at PyCon and they're like I was really nervous to come here or I feel
55:46 like it didn't fit in and they're you know just had such a great experience
55:50 and I said well did you feel like that was my first PyCon this year I'd never
55:54 been to a fight on conference and so I was like we did up at such an amazing
55:57 party that's true that was interesting all right guys well I think we are
56:06 pretty much out of time anyone want to have some final thoughts for listeners
56:10 before we wrap it up go and build some cool stuff who's brave enough how
56:15 can maintain it today I think give cake not puppies let's leave it with that
56:18 huh all right give cake not puppies and be really careful before you start a
56:22 popular source project it might take over your life if you want this great
56:27 but if not then yeah careful what you wish for you might get it exactly Gina
56:31 Sebastian Eric Will Charlie thank you all for being on the show this has
56:36 been a a ton of fun thank you very much for having us a pleasure and honor
56:39 to be with these amazing people thank you for the invitation I agree honestly
56:43 I had a blast just hearing everyone's stories because I hadn't heard any
56:46 of this before so thanks thanks to everyone else and thanks Michael yeah
56:49 you bet bye bye bye bye bye this has been another episode of talk python
56:53 to me thank you to our sponsors be sure to check out what they're offering
56:57 it really helps support the show this episode is sponsored by base dash base
57:03 dash uses AI to build a dashboard for your database get a custom admin view
57:08 in your postgres Microsoft SQL server my SQL Maria DB or Redshift database
57:14 get started for free at talkpython.fm/base dash take some stress out of
57:20 your life get notified immediately about errors and performance issues in your
57:24 web or mobile applications with Sentry just visit talkpython.fm/sentry
57:30 and get started for free and be sure to use the promo code talkpython all one
57:34 word want to level up your python we have one of the largest catalogs of python
57:39 video courses over at talkpython our content ranges from true beginners to deeply
57:44 advanced topics like memory and async and best of all there's not a subscription
57:48 in sight check it out for yourself at training.talkpython.fm be sure to subscribe to
57:53 the show open your favorite podcast app and search for python we should be right
57:57 at the top you can also find the iTunes feed at /itunes the Google play
58:02 feed at /play and the direct RSS feed at /rss on talkpython.fm
58:07 we're live streaming most of our recordings these days if you want to be part of the show and have your comments featured on the air
58:13 be sure to subscribe to our YouTube channel at talkpython.fm/youtube
58:18 this is your host Michael Kennedy thanks so much for listening I really appreciate it now get out there and write some Python
58:24 code Music Music Music Music Music Music