Podchaser Logo
Home
Full-Time Open Source Devs Panel

Full-Time Open Source Devs Panel

Released Thursday, 8th February 2024
Good episode? Give it some love!
Full-Time Open Source Devs Panel

Full-Time Open Source Devs Panel

Full-Time Open Source Devs Panel

Full-Time Open Source Devs Panel

Thursday, 8th February 2024
Good episode? Give it some love!
Rate Episode

Episode Transcript

Transcripts are displayed as originally observed. Some content, including advertisements may have changed.

Use Ctrl + F to search

0:00

So you've created a Python-based open source project

0:02

and it's starting to take off. You're

0:04

getting contributors, lots of buzz in the

0:07

podcast space and more. But

0:09

you have that day job working on

0:11

Java still. How do you

0:13

make that transition from popular hobby project

0:15

to a full-time job? After

0:18

all, you're giving away your open source

0:20

project for free, right? Well,

0:22

on this episode, I put together an amazing

0:24

panel of guests who all have done exactly

0:26

this. Turn their project into full-time

0:28

work and even companies in some cases.

0:31

We have Samuel Colvin, Gina

0:34

Huska, Sebastian Ramirez, Charlie

0:36

Marsh, Will McGugan and Eric Holscher

0:38

on to share their stories. This

0:40

is Talk Python to Me, episode 448, recorded December 7th, 2023.

0:48

Welcome to Talk Python to

0:50

Me, a

1:02

weekly podcast on Python. This is

1:04

your host, Michael Kennedy. Follow me

1:06

on Mastodon, where I'm at mkennedy

1:09

and follow the podcast using at

1:11

TalkPython, both on bastodon.org. Keep

1:13

up with the show and listen to over

1:15

seven years of past episodes at talkpython.fm. We've

1:19

started streaming most of our episodes live

1:21

on YouTube. Subscribe to our YouTube channel

1:23

over at talkpython.fm slash YouTube to get

1:26

notified about upcoming shows and be part

1:28

of that episode. This

1:30

episode is sponsored by Base Dash. Base

1:33

Dash uses AI to build a dashboard

1:36

for your database. Get

1:38

a custom admin view in

1:40

your Postgres, Microsoft SQL Server,

1:42

MySQL, MariaDB or Redshift database.

1:46

Get started for free at talkpython.fm slash

1:48

base dash. And

1:50

it's brought to you by Sentry. Don't

1:52

let those errors go unnoticed. Use

1:54

Sentry. Get started at talkpython.fm slash

1:56

Sentry. Hello

1:59

everyone. Charlie, Will, Eric. Sebastian, Gina, and Samuel.

2:01

What a big group of people we

2:03

have here today. An awesome, awesome group.

2:05

Thanks for being here, everyone. It's gonna

2:07

be super fun to have you on

2:09

the show. You know, I know there's

2:11

so many people out there that are

2:13

dreaming of an open source project or

2:15

even working on open source and contributing

2:17

to it, but it's something they squeeze

2:19

in the last hour of their day.

2:22

And at some point, all of you

2:24

have made this amazing transition to where

2:26

there's enough support, there's enough interest in

2:28

what you all built. That

2:30

becomes your full-time thing, right? Which is, I know

2:33

for many out there, living the dream. So you

2:35

all are living the dream. Hopefully

2:37

you feel that way. But it's

2:39

gonna be really great to kinda just explore

2:41

your projects, how do you make that transition,

2:44

and you know, what you're up to.

2:47

So we have Samuel Colvin on from

2:49

Titanic, and he has the

2:51

tightest schedule. He's squeezing us in on

2:53

a far-flung trip, a work trip. So

2:56

let's go to you first, Samuel. Tell

2:58

people a bit about who you

3:00

are and what your project is to

3:02

get started. Yeah, I'm Samuel. I maintain

3:04

Titanic, which is a data validation library

3:06

for Python that uses Python. So

3:09

those weird things you've seen after K-long

3:11

in Python that mostly do nothing unless

3:13

you run my Py or Playwright. I've

3:15

actually been in the whole system almost

3:18

exactly a year ago. I

3:20

was sort of working on PyDantic full-time back then,

3:22

but really, my mom used to do so. And

3:24

a big American VC got in touch. And

3:27

fast forward, I've raised some money and

3:29

started a company beginning of this

3:31

year. I hired now 10 people. And

3:33

I'm actually, as you mentioned, I'm an Istanbul, and I'm

3:35

not going to the whole team. It

3:37

turns out if you have a team with

3:40

Americans, Iranians, and Russians, that Istanbul is one

3:42

of the few places that you can actually

3:44

meet efficiently. So yeah, having a really fun

3:46

weekend Istanbul, mostly working together and then going

3:48

off to dinner, which is where we are

3:50

at the moment. I hope that's a good

3:52

success, I'm really excited. Absolutely, and what a

3:55

cool experience that you get to hang out

3:57

with all these people. Talking about your project

3:59

in Istanbul. I just had, by the

4:01

way, I just had. I was just thinking about

4:03

the other thing I would add is that one

4:05

of the best bits of them being able to

4:07

hire friends of mine from open source, people who

4:09

have, I think, all but similar to people here

4:11

have come to be quite empty before we started

4:14

the company, which is how I hired the first,

4:16

I think, six people, and then a few more.

4:18

So one of the best bits has been hiring

4:20

other people to come and work on open source

4:22

with me while still being able to like, get

4:24

paid abruptly. It's been really fun. Yeah, awesome. I

4:26

see a lot of people shaking their head out

4:28

there as well. I just coincidentally, I recently had

4:31

Sydney Runkle on who works

4:33

with you and she's such an inspiration. That

4:35

show is not out yet, but has already

4:37

been done yet through the weird time shifting

4:40

of podcasting. So it'll be out before this,

4:42

but it's not out yet. So anyway,

4:44

very, very cool team you got there. I

4:47

guess we'll go around the order of the

4:49

video. Pretty bunch

4:51

pictures here. So Charlie, you're up next. Quick,

4:54

quick, what about you? Hey, so I'm

4:56

Charlie. I am the author

4:58

of Rough, which is a Python,

5:00

Linter, code formatter and code transformation

5:02

tool written in Rust. I started

5:04

working on Rough about a year

5:07

ago, like maybe like October last

5:09

year. Similar timeframe to Samuel. Yeah.

5:11

Yeah. And I worked on

5:13

it full time for a while, similar to

5:15

Samuel, although probably not for quite as

5:17

long. I was working on it full

5:19

time without any funding. And then similarly,

5:21

I started a company around Rough and

5:23

really around the vision of trying to

5:25

build high performance Python tools. So take

5:27

some of the things that make Rough

5:30

nice to use and popular and well

5:32

liked and try to apply those principles to

5:34

other parts of the Python tool chain. Yeah.

5:36

We're a team of six and

5:38

we're fully remote. So no, no two of

5:40

us live in the same, in

5:42

the same, I guess a couple of us live

5:45

in the same country, but most of us live

5:47

in different countries. And we span

5:49

basically US central time to, I don't

5:51

know what we have one. We

5:53

have one person in India and

5:56

one person in Minneapolis. And that kind

5:58

of stretches like the full taxes. In

6:00

African stretch to concerts there was

6:02

yes Absolutely congratulations on Ruff It

6:04

is really really taken off and

6:06

I know the guy right below

6:08

you Anna. Where's

6:10

Sebastian when I saw him say nice things about

6:13

it with fast a P, I N and so

6:15

on. Yeah yeah I know I think slot is

6:17

funny because I think are saying before so recording

6:19

I think when I came on Talk Python last

6:21

time I think that might have been my first

6:24

time ever on a podcast saw and us to

6:26

talk Iraq and Cyrus like go out to be

6:28

careful what I'm doing that super. Cool and

6:30

pedantic. an Sos if ya or some

6:32

other earliest adopters that people had her

6:35

does so they were like very early

6:37

on in the in the life cycle

6:39

and help a lot with them. You

6:41

know getting people to to see Ross

6:43

and for care are awesome and know

6:46

that smart people are using it's that's

6:48

awesome. Well when you visit talk Python

6:50

or the courses website or others it's

6:52

it's all rust's side and a know

6:54

what the the adjective of ruff is

6:57

but it's been rice whatever. your recently

6:59

at over moved. Into a rough Now

7:01

it's been roughed up in hours. Grades

7:03

is really amazing. Eleven suckered Sunderland adds

7:05

to our efforts made in at the

7:07

base. I say that sick like I

7:09

was a sick trick they did. admit

7:12

it. Me I go to the route

7:14

of code is rough man or a

7:16

well of your code ruff who are

7:18

you is go some rough edges. Certainly

7:20

welcome in I'm well. I'm probably best

7:22

known for Library called I Rinse and

7:24

Riches or my Be for writing for

7:27

mattered content, terminal, Amd, Apu, Tables and

7:29

Progress bars and. sometimes how to code

7:31

all sorts of things and then that

7:33

became quite popular in the python world

7:35

a thing that was a there was

7:37

a need for it and two years

7:39

ago i found it's tax wise i

7:41

would say company which bills on reds

7:43

to produce a lie be called takes

7:46

to i which allows you to build

7:48

user interfaces inside terminal and the they're

7:50

kind of moonlight web interfaces unless like

7:52

courses up case yeah just the gum

7:54

was like selects box you can doc

7:56

stuff to the side and that's part

7:58

of you i bet it's It's pretty

8:00

amazing what you've built. I think it's pushed

8:02

the terminal far beyond what many people thought

8:04

the terminal should be doing. It's

8:06

been very cool. It's been a process of

8:08

discovery. It's kind of strange. We've got technology

8:10

that's been around for decades and

8:13

are still discovering things like they can do

8:15

which people haven't tried before. So yeah, it's

8:17

been a lot of fun. And

8:19

it's been great to work with a small team

8:21

of developers. We've got a small core here in

8:24

Edinburgh, Scotland. And we've got

8:26

one developer in Portugal. So yeah, it's been

8:28

great. I love the reception and I love

8:30

what people are building with it. Yeah. So

8:33

many people are interested in using

8:35

Rich. And there's a ton of plug-ins, right?

8:37

There's like Rich Click and there's PyTest Rich

8:40

and all these things like, well, whatever we're

8:42

doing, it should also have OIE built, you

8:44

know? Yeah, I love to see that. I

8:46

love to see the ecosystem building. Our

8:49

adjective is richified. Richified, okay. Yeah.

8:52

Yo, that's rich. My code is rich. Okay. Richify,

8:55

got it. I love it. We all

8:57

have adjectives we've got to put on things. Yeah.

9:00

I'm a big fan of your, you and your team's

9:02

work, by the way. I mean, I'm sure you hear

9:04

all the time that you built awesome stuff. Cheers. I

9:07

appreciate it. Yeah, indeed. We all are. Eric,

9:10

welcome. You and I are coming in somewhat local

9:12

here out of Portland, not Istanbul. I'm actually out

9:14

in Bend at the moment. So

9:16

yeah. I absolutely love Bend. So lots

9:18

of mountains and whatnot. But yeah, so my background in

9:20

agriculture, folks probably know me from kind of the read

9:22

the docs ecosystem. I feel like I've been doing this

9:25

for a while compared to everyone else here.

9:27

The project actually started in 2010, which is

9:29

kind of amazing. And then we actually built

9:31

the, started the company around it in 2014.

9:34

So coming up next year, that'll be 10 years. And

9:36

so yeah, and we're all bootstrapped. So we haven't done

9:39

any venture capital. It's all been kind of just built

9:41

up the open source and then kind of turned it

9:43

into a company on top of that. We

9:45

kind of have a business model of doing

9:48

paid for private hosting companies as well as

9:50

advertising on open source. And we spun out

9:52

a kind of a separate business called ethical

9:54

ads that we built kind of to basically

9:56

make better advertising on the internet, Not

9:59

doing any of the creepy. tracking stuff so

10:01

read the docs is so critical to the

10:03

open source space. Not just Python but especially

10:05

Python. yeah Yemeni. so awesome work on that

10:07

and then to secure. Good job on that

10:10

the and stuff as well. It's the tendency

10:12

of the whole ad space has to be

10:14

super creepy and just like how much can

10:16

we reseller? How much can we buy to

10:18

mix in to like creepy shadow profiles? And

10:20

it's not a good social trends, it's it's

10:23

not good for people and it's not really

10:25

necessary right? Like if I wanna your i've

10:27

sponsored ads are now read: the docs are

10:29

bad. Run ads and read the docs for

10:31

and I we're forced course and let's just

10:33

you know run that add on for ask

10:35

him sit or lie goods the week. Track

10:37

somebody through Instagram over to Facebook who knew

10:39

over at lack of yeah exactly. We call

10:41

your newspaper advertising and and it's or been

10:43

really caught the advances of ammo like the

10:45

content targeting has gotten pretty good traits or

10:47

it's it's just a lot easier technically distaste

10:49

have to kind of do that content matching

10:51

be I think in terms of the kind

10:53

open source of maybe the way that I'm

10:55

a little different than other folks years were

10:57

actually running something more akin to a service

10:59

three. The dots ah the code is open source

11:02

but a lot of the usage is open source.

11:04

projects using are hosted service I would you obviously

11:06

subplot a code probably or sphinx theme is he

11:08

started most kind of well known as or software

11:10

the people running a little bit similar to folks

11:12

here the and aside by the west and and

11:14

yeah so I think that's kind of the background

11:16

as yeah we have a little bit everything but

11:18

yeah it's a little more akin to something I

11:20

guess ass up I would say but a code

11:22

is open source. We do get a contribution in

11:24

that way as both yeah awesome at the sounds.

11:27

a little similar to what Tesla is is is

11:29

working towards as well. hosting i mean it's more

11:31

hosting people's absence of us in people's dogs

11:33

but not terribly different paying for services as

11:35

a classic open source modernization strategy right like

11:37

you have some way to kind of build

11:39

them under se sont ops aka sega way

11:41

bill is great but it's kinda hard for

11:43

me to run could you just do that

11:45

i guess or we can do that sebastian

11:47

always good to see a welcome back danger

11:49

and was for signing hello everyone says here

11:51

i'm yes or the look a i created

11:53

this is a deal to for building where

11:55

they'd be ice that he school fuck they'd

11:57

be a and you have been growing people

12:01

have liked it fortunately and like

12:03

yeah that's it. I'm probably the

12:05

only one that hasn't built a

12:07

company here I guess. Okay,

12:11

okay, so

12:16

this year I have been able to work

12:18

full-time on open source because Sequoia Capital, the

12:20

VC firm started this open source fellowship and

12:22

I am the first fellow so I am

12:25

kind of the trial of like the program

12:27

so I get you know like just to

12:29

work full-time on open source and that's how

12:31

I've been able to just yeah release that one

12:33

just stuff in fast API and the ecosystem like

12:36

the other like fast API, SQL model, hyper and

12:38

a couple of other things. But

12:40

yeah, that's pretty much it. Yeah, awesome.

12:42

Well, fast API is definitely the poster

12:44

child for modern Python on the web,

12:46

you know, and Samuels work obviously is

12:49

central to that as well right with

12:51

pedantic being such a core element there.

12:53

So very awesome. Yeah, like I mean,

12:55

fast API is built on top of

12:57

like great open source tools underneath so

13:00

it's like I think those all the

13:02

data validation, validation, documentation and on the

13:04

other side, startleth does all the web

13:06

parts. So yeah, it's like, I like,

13:08

you know, like it's a very close

13:11

how do you call it like close

13:13

friendship between all the projects by Dante

13:15

starlet uvcorn fast API like you know,

13:17

like we actually know each by this

13:20

point, you actually know each other in

13:22

person like the current container of started

13:24

on uvcorn works for the by Dante

13:27

company. And he's like

13:29

the top class API experts right

13:31

now. Like, you know, like it's

13:33

a it's very nice because helps

13:35

the dynamic the dynamic of like,

13:37

yes, absolutely. All these stuff is

13:39

great. Yeah, I Imagine a lot of

13:41

people don't realize the interconnections between these different

13:44

projects that are at play here. Yeah, definitely

13:46

super fun. Absolutely. And Then it's worth saying

13:48

we in pedantic use Fast API as well

13:50

as contribution for the library for building. We

13:53

also use Fast API for the services that

13:55

we're building for where like consumers, both directly

13:57

and indirectly and for things that we made.

14:00

It is an author chat fight off as

14:02

fast as they saw his turtle's all the

14:04

way down basically vaccine. This.

14:07

Portion of top by the enemy is brought. You

14:09

might be das. Ist. Das is

14:11

the custom admin panel for your database

14:13

that you don't have to build. We've.

14:16

All dealt with endless ad hoc request

14:18

for data access. Your. Support Team:

14:20

Once user records, your non technical cofounder

14:22

needs to see charts or your engineering

14:25

team needs an easy way to share

14:27

your sequel queries. These. All sound

14:29

like relatively simple task, but between building

14:32

an internal tool, setting up an analytics

14:34

product, and then switching back and forth

14:36

between that and you're sequel clients, you've

14:38

lost so much time. Based.

14:41

As gives you that time back. With.

14:43

Base as you can instantly generate

14:45

a visual you I for your

14:47

database. Or. You have to do is

14:49

connect your data source. It uses a I

14:51

under the hood to generate the perfect admin

14:53

panel for your data. While. Are

14:55

now? anyone in your company has access to

14:58

the data they need. The. Rolling out

15:00

a ton of new features like the ability

15:02

to create charts using only natural language. You

15:05

gonna get hours back in your

15:07

day and I promise you want

15:09

to build an internal to ever

15:12

again. Check them out by visiting

15:14

Puck Python.a family/base ass that's tough

15:16

Python that a femme/based asks the

15:18

link isn't your podcast player. Show

15:20

Notes: Basis. Is free for

15:22

small teams so give it a try. It's

15:24

got nothing to lose. Think. Youtube a

15:26

stash for supporting the park s. G

15:29

Now! So awesome the have you back they'll

15:31

come in. A Very happy to be that

15:34

that's really really great to be here now

15:36

I think for that sentence so I decide

15:38

if we can't patent. But so yeah, my

15:40

name is T. nice girl and I'm probably

15:42

yeah, I don't know. It's an active and

15:44

that well known throughout the pies and a

15:46

community but I'm quite well known in the

15:48

City printed community for having created Octa Print

15:50

which is the snazzy web interface for you

15:52

for different a ends the sun a part

15:54

of that are written in Python and I

15:57

started a project back in twenty twelve when

15:59

I got myself. The deeper into as

16:01

your regular pet project on the side

16:03

after hours the case and blah blah

16:05

blah. In Twenty fourteen I got hired

16:07

by us Are You Printing company to

16:10

work on it fulltime and in twenty

16:12

six to in that company ran out

16:14

of money and ice on default myself

16:16

with a full fledged full grown open

16:18

source projects and no funding our whatsoever.

16:20

So I tried this whole crowd funding

16:23

stuff with Patreon and that is pretty

16:25

much how I've been working ever since.

16:27

So I'm self employed, it's under German

16:29

law. And the freelancer ends. Yeah,

16:32

oh, my income comes from

16:34

people. Who just sent the money

16:36

for working on oct of friends and

16:38

so generous. And twenty six years since,

16:40

Twenty Six Senior on a Cross. Or

16:42

full time since twenty fourteen and self

16:45

employed and crowd. Funded since twenty sixteen,

16:47

so it's been a while. That's awesome. Also

16:49

went full time on all my stuff here

16:51

and Twenty sixteen. although it's technically not open

16:53

source, it puts a whole lot about opensource

16:56

stuff, so on and off of that says

16:58

in our congratulations thank You and Susan Rice

17:00

it worth to be honest. I'm I'm

17:02

awaiting every day that it stops working.

17:04

And yeah, actually, this year. It came up

17:07

with clothes and then I put out like of look

17:09

both basically along the lines of you know like. The

17:11

income is going this but the use it's

17:13

numbers are going that saw something is and

17:15

this year and we need to talk and

17:17

then the community ready it's and stuff six

17:19

itself again So. That's pretty amazing as

17:21

really awesome. Congratulations is easy for people.

17:23

Xisco always free and there's some people

17:26

supporting and and just kind of assume

17:28

that things are taken care of. Fact

17:30

that they're really good. Really good. Yeah,

17:32

you have a ton of supporters on

17:35

get hub sponsors as well, right? Actually,

17:37

As diversified over the years and in the

17:39

beginning it was on the Patron, the Paypal

17:41

and then they started adding new payment platforms

17:43

and options because people prefer to be able

17:45

to use the stuff that they know and

17:47

some people don't like, Patrons will keep it

17:49

on like and to get our. Sponsors and

17:51

stuff and so you just give them the

17:53

options to choose. Whatever they feel comfortable

17:55

with and this increases the likelihood that

17:58

they actually will go through with. something

18:00

in your head, so to speak. At least

18:02

that's my feeling, I don't know. I think

18:04

the GitHub sponsors has been really positive for

18:07

open source. I think it's made it pretty

18:09

easy to just check a box. They already

18:11

have your credit card potentially, and you just

18:13

want to give a little support instead of

18:15

a one-time PayPal donation here that you forget

18:18

about after once and all that. Before we

18:20

move on here, there's a funny comment, nice

18:22

comment out. Kanishka says, the

18:24

group, look at all of you. You guys

18:26

are the Avengers of Python open source, which

18:29

is kind of like the super heroes. I love it.

18:31

It's somewhat actually true, it seems. The

18:34

next thing I want to ask is a little bit

18:36

of an origin story. What

18:38

projects did you try and they didn't really get

18:41

traction? How do you

18:43

think that your project got traction here? I know,

18:45

Samuel, you might vanish any minute. You're up first

18:47

on this one. That's a really interesting. I feel

18:49

that a number of things that I could do

18:51

is I started something last week. I

18:54

actually saw it on Fridays. It has gotten more

18:56

stars over the last three days or I guess week

18:58

now. The first project

19:00

I started, AR Feud, has been

19:02

coming up on six years. I

19:05

mean, that front end and the front end

19:07

gets a lot more traction than

19:09

queuing in RPC does. I

19:12

don't know how, obviously there were some things I

19:14

played with back then and then I took off.

19:17

I think I was at the right time and

19:19

right place with Python. They'd obviously been around in

19:21

Python for a long time. I think 2017 when

19:23

I started PyLantic, their usage was going really fast.

19:25

I think there were lots of people I knew

19:27

who sounded kind of frustrated that they were there

19:29

and didn't do anything. I think being

19:31

the right time and right place was super valuable for me.

19:34

Obviously, great projects like FastAPI

19:37

adopting PyLantic has made a

19:39

big difference. I don't know.

19:42

What's weird if you look at the download chart, is like

19:44

this is actually going at the beginning of 2021. Then

19:48

we had like five minutes download a month and

19:50

since then it's been almost exactly linear growth to

19:52

now 125 million downloads a month. Something

19:55

weird happened in 2021. No,

19:57

after the project started, I don't know. It

20:00

was like my first time I I

20:02

love frustration as a starting point. I'll

20:04

not know I'm gonna have said Russia

20:06

headsets the everyone and I'm sure I'm

20:08

in New Orleans a conference A but

20:10

I think a dominant it is here

20:12

are all right Charlie keep going around

20:14

the circle here just it's item and

20:16

among the I used to. as interesting

20:19

because I like this is Ross is

20:21

really my first time being a mean

20:23

Chino like publishing open Wheel like I've

20:25

been a consumer of open source trade

20:27

for my whole career, but I was

20:29

never really. Yeah I guess in the creator

20:31

of publisher him and to an air of

20:33

open source. yeah around the time that I

20:35

started work on Roth iras work out like

20:37

a couple different projects and they all as

20:39

can try to fair when I want to

20:41

do not Said Lost my job recently and

20:43

and Ruff was kind of motivated by allied

20:45

experience I had at my job rise of

20:48

Beating Large by unconvinced did you leave your

20:50

job with the intent to going to work

20:52

and referees like I'm alleys and them on

20:54

a figure something out and kind of I

20:56

was the process. I left my job with

20:58

the intent of starting a company but. I

21:00

did not think it would be. Ross and Ruff

21:02

was like this distracting side project that I was

21:04

working on while I was laid eyes were hit

21:06

with a friend and we were like trying to

21:08

figure out like the Venn diagram of interests of

21:10

like what should we what are we willing to

21:13

work on full time together? what makes sense given

21:15

like our interests and and then l a free

21:17

time I was laid eyes on work on developer

21:19

tools and like I worked on i don't I

21:21

don't wrath I am I started building Ross I

21:23

I worked on my garden yeah what a lot

21:25

of as of now lot the like and it

21:27

was around a cupboard and projects I did late

21:29

as. a sort of see i see d

21:32

thing where you like right soccer files and blades

21:34

see i thousand tied scrapped in the like

21:36

transvaal down i was dialing i think i have

21:38

one cool idea as i worked on my car

21:40

he was pretty early in the law the l

21:43

and stuff i worked on like i could

21:45

be slide recycling to over you like giving examples

21:47

of like before and after and that tries to

21:49

find examples he was like a copilot for your

21:51

entire code base time i didn't work out well

21:54

like a scale that it was like cool idea

21:56

sounds like organs up his of open source that

21:58

maybe could have enough time I mean, maybe

22:00

today that would be all the other day. Yeah,

22:02

I mean, it's also an effort thing. I

22:06

put a lot more into

22:08

rough and it was interesting because I kept

22:10

viewing rough as like, you know, it

22:13

was probably open source, but at that point, I don't think I had

22:15

launched it. And I kept

22:17

viewing it as like, like I said, like a little

22:19

bit of a distraction. And my friend was like, you

22:21

know, I think you should really like push to like

22:23

release this because like, if you think it's like interesting,

22:26

then like other people will probably think it's interesting. And

22:28

he was the person that really like motivated me

22:30

to actually like see it through to doing

22:32

the release. And then I did the

22:34

release and like a lot of people were actually interested

22:36

in it. So that kind of gave me like the

22:39

energy to like really start working on full time and

22:41

just kind of see where it went. And

22:43

it was really like projects like Pydantic and

22:45

like Sebastian started like commenting on issues and

22:48

stuff. And I was like, wow, like real

22:50

serious projects are looking at this like crazy

22:52

tool. And let me just see,

22:54

I'm just going to do whatever it takes to make

22:56

it like a feasible choice and just started like cranking

22:58

through like all the issues and all the things

23:00

that we are missing. It escalated pretty quickly.

23:02

I think it didn't surprise you. Oh, yes.

23:05

Yes. Absolutely. I was convinced

23:07

that I had faced like this problem

23:09

around tooling as like our code base

23:11

got large in my last company and

23:13

that there was an opportunity to like

23:15

build like better and more performant tooling.

23:17

I genuinely wasn't sure like how widely

23:19

that message would resonate with people. And

23:22

so I know it's like a little bit of luck,

23:24

right? Like sometimes you work on great projects and then

23:26

like they go nowhere and like just no one happens

23:28

to see it. And then sometimes you work on a

23:30

good thing and like it does go somewhere. And so there

23:33

are certain things that are within your control, certain things that

23:35

aren't. I feel like I feel like we did I did

23:37

a good job of like communicating the project and like why

23:39

it was interesting and why it was exciting. But I also

23:41

feel like I got a little bit lucky that it just

23:44

like gravitated towards the right people and got attention the right

23:46

ways. Sure. Also, maybe that

23:48

black had existed, which is a little ironic

23:50

because black kind of solves a real similar

23:52

problem. Like people were okay, we embrace the

23:54

idea of the thing that rough does really

23:56

well. You know, you just commit them to

23:58

use rough in that sense. Yeah, I mean, we have

24:01

a little bit, I mean, it gets back to

24:03

this, like we have a little bit of like

24:05

a second mover advantage, right? Exactly. There's

24:07

a lot of existing tools that people use

24:09

already and like a lot of those practices,

24:11

like the idea of using a format or

24:13

the idea of running code mods, like the

24:15

idea of using a linter and like the

24:17

knowledge of like what kinds of rules are

24:19

valuable and like what kinds of analysis we

24:21

can do, like all that stuff existed. And

24:24

that was part of the story really was I was like, these

24:26

tools are great and I get a lot of value out of

24:28

them, but I want them to be like easier and

24:30

faster. And so, yeah, there's definitely

24:32

a strong timing thing. I think like, I

24:34

think Rust too is maybe like a little

24:37

bit more specific to what we're doing. But

24:39

like, you know, I think like the intersection

24:41

between Python and Rust has already, I guess

24:44

the interoperability between them and sort of the ecosystem

24:46

around it has just grown a lot. I

24:49

mean, still, I would say like pretty early, but it's

24:51

like matured and grown a lot over the past few

24:53

years. And so even just the fact that like at

24:55

my last company, we started to introduce Rust and we

24:57

started to like move some of our core systems into

25:00

Rust and expose them over PIO3.

25:02

Like the fact that that was existed and the fact that

25:04

I was like exposed to that, like that's all just like

25:06

pure chance. Otherwise, I never would have thought to do this.

25:09

Very cool. Well,

25:11

congrats. Well deserved. We're all doing the all

25:13

using rough as we said is excellent. Will,

25:15

Rich is awesome. How, why do you think

25:17

it took off? Did you try stuff before?

25:20

What's the story? I tried a lot of stuff

25:22

before, before GitHub, you know, coding has always been

25:24

my hobby. You know, I do it for work

25:26

and I come home and work on a hobby

25:28

project and it just seemed natural to want to share

25:30

it. Pretty GitHub, I would just put

25:32

stuff on my blog and get some

25:35

feedback from it there. I quite enjoyed that. And

25:37

yeah, they have a number of open source projects.

25:39

Pretty Rich had a bbcode

25:41

parsing library. I had a

25:43

chess library. I had a

25:45

web toolkit. So yeah, when Rich

25:48

came along, it was another hobby project. Something to

25:50

keep me entertained. Why is this terminal so boring?

25:52

Come on, see what we can do about that.

25:54

You know, I'd always used the terminal and it

25:56

always struggled when you've got a page of white

25:59

text on black background. and you're trying

26:01

to pick out an IP address from somewhere. And

26:03

I'd always wished, oh, I wish it would just format

26:06

it and colorize it for me. I know this is

26:08

possible, but it doesn't happen. So

26:10

then, yeah, I just started it, and it

26:12

came together quite well. When I released it,

26:14

it was like, boom. The

26:16

stars just started accumulating. Got lots of

26:19

feedback. It was very exciting. And I

26:21

kept building on it. It was kind

26:23

of like issue-driven development, so people would

26:25

just ask for something. Oh, that's a

26:28

good idea. And go ahead and implement

26:30

it. And it grew from

26:32

there, and it became really large. I did

26:34

it actually prior to Rich. I had a

26:37

library called Py File System, and this is

26:39

kind of like a wrapper to file systems.

26:41

So you can have the same interface for

26:43

your FTP server as a hard drive or

26:45

a zip file, SD bucket. And

26:48

that got some use in the

26:50

community. It wasn't enormous, but that

26:52

taught me a lot about building

26:54

open source, managing

26:56

feedback. Issues, et cetera. So that

26:58

was a great experience when I

27:00

started working on Rich. And

27:02

I was very surprised, actually,

27:04

how successful it became. I remember the

27:06

first time I realized that this is

27:09

bigger than just a hobby project is

27:11

when someone told me off for violating

27:13

SemVer, I released a clear, a clear

27:15

breaking change because I thought, nobody's using

27:17

that yet. But they were. So

27:20

the next day, I got told off quite

27:22

appropriately. And then I thought, okay, I've got

27:24

to take this more seriously. If people

27:26

are using this in the day job, they

27:28

can't just have someone who's just like throwing

27:31

new bits of code and changing functionality. They

27:34

had to treat it like it was

27:36

an actual, my day job. Yeah, well,

27:38

everyone on the call here probably has

27:40

a little bit of nervousness about like,

27:42

if I break this, there are a lot of people that

27:45

depend on this thing. And it's so

27:47

different. Like it just changes so much. Like

27:49

the early, like when you were talking about

27:51

the issue-driven development thing too, I was like,

27:53

I just remember that phase of like, for

27:55

anyone who cared at all about the project, all I

27:57

wanted to do is like make them happy. Oh,

28:00

wow, that seems like a cool idea. Like let's

28:02

definitely do it I'm just like, you know, it's

28:04

the point time where I could like fix the

28:06

bug cut release the same day And then like

28:08

their thing is fixed and then it's like, okay

28:11

great now we have a relationship Like

28:13

thanks for using my thing like blah blah blah

28:15

I just think like but that change that's changed

28:17

so much right because then I went through those

28:19

same Experiences of like I I ship a release

28:21

with the breaking change. I didn't really document what

28:24

we'll get upset and then do your eyes Okay,

28:26

I actually have some more responsibility now These

28:28

days it's more like trying to find

28:30

the balance between saying no to stuff

28:32

that you then have to end up

28:35

Maintaining and not like disappointing people

28:37

too much because you say no or

28:39

things like that and then trying to

28:41

keep this whole Interaction

28:44

with people nice even though you

28:46

don't want to do stuff that they want you

28:48

to do because you know, it's better for the

28:50

project You This

28:53

portion of talk by the enemy is brought to you

28:55

by century You know century for the air monitoring service

28:57

the one that we use right here at talk by

28:59

thon But this time I want to

29:02

tell you about a new and free workshop He

29:05

mean the Kraken managing a python

29:07

mono repo with century join

29:09

Salma alam Nayor senior developer advocate

29:11

at century and David Winterbottom head

29:14

of engineering at Kraken technologies for

29:16

an inside look into how he and

29:19

his team develop deploy and maintain a

29:21

rapidly evolving Python mono repo with

29:24

over 4 million lines of code

29:26

that powers the Kraken utility platform

29:28

in This workshop David will

29:30

share how his department of 500 developers

29:32

who deploy around 200 times a day

29:36

Use century to reduce noise prioritize issues

29:38

and maintain code quality without relying on

29:40

a dedicated Q&A team You'll

29:42

learn how to find and fix root

29:44

causes of crashes ways to prioritize the

29:47

most urgent crashes and errors and

29:49

tips to streamline your Workflow join

29:51

them for free on Tuesday, February 27th 2024

29:54

at 2 a.m. Civic time just

29:57

visit talk by thon.fm slash century

29:59

down That link is

30:01

in your podcast player show notes. 2am

30:04

might be a little early here in the

30:06

US, but go ahead and sign up anyway

30:08

if you're a US listener because I'm sure

30:10

they'll email you about a follow-up recording as

30:12

well. Thank you to Sentry

30:14

for supporting this episode. PRs

30:18

are like cake or puppies. If it's a

30:20

simple bug fix that's like cake, you'd like

30:22

thank you. I enjoyed that

30:25

cake, then move on, but some PRs are like

30:27

a puppy. It's like perfect, you like

30:29

puppies, but you've got to feed them and clean

30:31

up after them. Why am I standing in

30:33

the rain with this puppy on like a

30:35

Friday night? How do I get here? Collecting

30:37

the bulky spooks. Yes, exactly. Sometimes you say

30:40

thank you, but I just can't look after

30:42

another puppy right now. That's a

30:44

difficult thing to come to terms with when the project gets

30:46

a bit more mature because people say you're accepting all the

30:48

puppies, but then you have to start saying no to

30:50

puppies. And Rich definitely got

30:53

there because it accumulated. Do you hate puppies? Come

30:55

on, that's a pretty hard stand. I'm

30:57

a bit of a cat person to be honest with you. But

31:00

yeah, I mean, you have to say no eventually. I

31:03

think this is where plugins always kind of

31:05

like take the stutter stage, right? You're like,

31:07

just, oh, that sounds like a great idea

31:09

for you to maintain external to my library.

31:11

That was exactly my approach to the

31:13

whole situation. Yeah, here's a

31:15

plugin API. Have fun. But also

31:18

the probability of some little change

31:20

breaking someone's code and like being

31:22

considered a breaking change grows as

31:24

the project grows in usage. And

31:26

like, you know, like at some

31:28

point, it's like almost any change

31:30

will end up breaking someone in

31:32

very unexpected ways because they are

31:34

doing something really, really weird. But

31:36

you know, like someone is doing

31:38

it. So like it

31:40

becomes more and more difficult to know like,

31:42

is this a breaking change or not? Like

31:45

no one should be using this variable here

31:47

or this parameter, but like, you know, there's

31:50

someone out there doing that. So I feel

31:52

defining what is actually a breaking change and

31:54

what is what is what is this trick

31:56

symbol? It's more difficult

31:59

as things grow. Yeah, I don't know

32:01

one of the things I like that the Django project did

32:03

was kind of basically only things that are documented Are

32:05

supported basically that was kind of the line they drew

32:07

and I thought that was a pretty good pretty good

32:10

way to draw it But yeah, you're always you know,

32:12

that never actually works. That doesn't make people happy. It

32:14

just gives you plausible deniability Don't

32:17

yell at me. It's not my fault I think

32:19

adding a normal like reversioning policy is one of

32:21

the best things that we did because for a

32:23

long time Rough was just

32:25

we only use patch releases So we got like

32:28

0 0 like 285 or something and

32:31

we had basically no Guarantees about what

32:33

water wouldn't change like across releases and

32:35

as the project got more and more

32:37

popular like that started to cause Problems

32:40

and so they need someone on our team Like

32:42

when they joined one of the first few things

32:44

they did was like create an actual form formal

32:46

versioning policy and we added like preview behavior So

32:48

like you can opt similar that what black has

32:51

kind of opted into like breaking or more experimental

32:53

changes And so now we have like clear expectations

32:55

around what it means to like bump a minor

32:57

release Etc, etc And like that has

32:59

made our lives a lot easier like actually having

33:01

clear expectations around that that are connected and respected

33:04

But it's the kind of thing that you just

33:06

don't think about it all until it at least

33:08

I didn't Yeah,

33:11

some people's code runs things

33:13

like fast API or octopin

33:16

or whatever your Stuff rewrites

33:18

people's code Yeah,

33:20

I believe doesn't run at runtime. I don't know. I actually

33:22

think it's easier Yeah

33:26

Indeed. Alright, Eric. I finally talked about the plugins

33:28

thing cuz like I've actually very intentionally taken the

33:30

opposite approach Which is we have like almost no

33:32

public API Because

33:34

like the only public API is the CLI and

33:37

like we don't expose our API in any other

33:39

way And that's because like we

33:41

know we're gonna change like everything internally like

33:43

pretty dramatically And so we wanted to have like full

33:45

control over that without having to worry about breaking stuff

33:47

yet But it's like it's starting to become more of

33:50

a problem because more and more people want to use

33:52

it as library and like different Ways but

33:54

it's sort of a counterintuitive way to like

33:56

make our lives easier as maintainers was like

33:58

not expose any public apart from

34:01

the CLI. Yeah, very interesting.

34:03

Funny, funny sort of anecdote.

34:05

I'm rewriting a lot of

34:07

the documentation for SQL model because

34:09

I want to have examples. Right now I

34:11

have examples that I can buy with Python 3.7 and above,

34:14

but actually 3.6 and above. But I want

34:16

to have also the syntax for 3.9 and

34:18

3.10. In 3.10 you

34:20

can have like the unions using the vertical bar

34:22

and these things. And I want to have examples

34:24

for each one of those. So the approach I

34:26

did was to write a script that will automatically

34:28

update each one of the files by calling

34:31

rough as a soup process. So

34:33

that's the API. And then like,

34:35

you know, like having the process like doing

34:37

all that stuff. But like, yeah, it's like

34:39

another farm boy of rough trying to write

34:41

that. This is an API

34:44

before it's available. Yeah, with the lack of

34:46

an API, right? An API will be created.

34:49

Exactly. I've heard this before as like

34:51

Hiram's Law, which is like with a

34:53

sufficiently large number of users, like any

34:56

implementation detail become someone will eventually rely

34:58

on an implementation detail. Like any arbitrary

35:00

implementation, someone is probably relying on that

35:02

behavior, which is basically the behavior of

35:05

the program is the API, unfortunately. Go

35:07

find the underscore functions you've tried to

35:09

dissuade them from using and all the

35:11

things. Eric, what's the

35:14

origin story for Read the Docs and what did

35:16

you try and how do you think it caught

35:18

on? Yeah, so I mean, this was kind of

35:20

way back in the day, but yeah, I kind

35:22

of got started writing Django plugins, you know, apropos

35:24

to the conversation. You know, I was working at

35:26

the Lawrence Journal world that where Django came from,

35:28

and it was kind of early in my career.

35:30

And I was just kind of getting excited about

35:32

open source and blogging, and just basically

35:34

built a few of these kind of testing

35:36

related open source projects. And then that was

35:38

kind of where I got started with open

35:40

source. And then basically it was the classic

35:42

scratch, scratch own itch thing, right? Like it's

35:44

like, I have a bunch of open source

35:46

projects, I want to write documentation, how do

35:48

I solve that problem? And back in the

35:50

day, that was a much harder problem to

35:52

solve, right? It was basically just like, build

35:54

a zip file and upload it to packages.python.org,

35:56

if folks remember that one. or

36:00

whatever the docs, there was a docs hosting on

36:02

PyPI basically. And yeah, basically just wanted to kind

36:04

of build a better version of that that integrated

36:06

with GitHub. I feel like web hooks were like

36:08

the cool new thing back in 2010. And so

36:10

that was really kind of the insight,

36:13

right? It's like, let's build this kind of like

36:16

CI CD workflow on top of web hooks. And

36:18

actually did build kind of a version of that

36:20

the previous year around kind of like code quality

36:22

stuff. So it actually ran kind of like a

36:24

linter and built a website on commit and had

36:27

a similar kind of workflow, right where it like

36:29

gave you a grade and did all this kind of

36:31

stuff, which is like 2009. And yeah, that

36:33

that didn't really catch on at all. But then

36:35

I think read the docs just rebuilt it. And

36:37

then I was using it for my own projects

36:39

and actually had the need to kind of maintain

36:41

it and keep it updated. And then I think

36:44

people just kind of kind of grew naturally, you

36:46

know, give some conference talks, that kind of stuff.

36:48

But I think it just solved a problem that

36:50

people had. And that's always going to be the

36:52

you know, the best way to grow a thing.

36:54

So yeah, absolutely. Awesome. What's read the docs written

36:56

in and said Django? Yeah, it's all Django and

36:58

Python. Funny coincidence, I went to college

37:00

in Lawrence, at University campus. So I was

37:03

right there right at the heart of Django,

37:05

but I moved off to grad school like

37:07

a couple years before all that happened. So

37:09

I missed missed the excitement. I grew up

37:11

in Virginia, and everyone's like, you're going to

37:14

Kansas, you graduated school? Like, what? How are

37:16

you going there? Like what everybody thought is

37:18

the weirdest decision. But yeah, like, I really

37:20

do think, you know, ending up in that

37:22

Python and Django ecosystem has been pretty transformative

37:24

to my to my life. So you know,

37:27

worked out. Lawrence, a pretty cool little town,

37:29

actually, of all the places. Yeah. Sebastian,

37:32

how do you come about this crazy idea to

37:35

put types into our web apps? You know, Python

37:37

that's dynamic, it doesn't have types. What are you

37:39

doing? Yeah, I don't know. So

37:41

crazy. It's a fantasy set Michael Larson in

37:43

the chat like the maintainer

37:45

of your early three on the bottom

37:48

security developer in residence, just like chatting

37:50

along with us like he probably has

37:52

had to deal so much

37:54

stuff as us. So like some

37:57

of the

37:59

first things that I did in open source

38:01

were actually Docker images for deploying Flask because

38:04

I was working with Flask and deploying Flask

38:06

was difficult and I needed to be able

38:08

to combine Nginx with you with Gui and

38:10

like a bunch of things and like they

38:13

all have their own custom configuration files and

38:15

it was you know like so difficult. I

38:17

didn't like doing that and then I just

38:19

had to study how to do that stuff

38:22

and then after going through all that I

38:24

wanted to save everyone else's time doing that.

38:26

They were like well they just put a

38:28

Docker image with this and a lot

38:31

of documentation of how this okay might works and

38:33

how it how you can use it with some

38:35

sensible defaults. So you know it was just like

38:37

a weird contraption that was it but it actually

38:39

grew and like a few stars like a bunch

38:42

of stars. For me it was a lot like

38:44

you know like hundred stars oh my gosh I

38:46

have an open source and I

38:48

like at some point have like a thousand stars

38:50

or something like that I was so happy about

38:53

that and at some point it was kind of

38:55

the five to standard for doing class docker back

38:57

in that was the first thing that I did.

39:00

I ended up with fast API I was I

39:02

was avoiding building fast API for a long while

39:04

and I was trying all the other frameworks and

39:06

all the other tools. I was convinced that there

39:09

was something that would do the things that I

39:11

wanted I just had to find it and as

39:13

I was trying different frameworks also in different languages

39:15

I was extending the list of

39:17

things that I wanted to have and also a

39:19

list of things that I wanted not to have

39:22

for example I didn't want to have. It

39:24

takes you farther and farther away from any framework.

39:26

Having one that would tick all the voices. So

39:28

I was like oh but then I realized

39:30

like I really like this thing of having types. I

39:33

think types because you get out the completion and inline

39:35

errors and this is so cool it's so cool to

39:37

be able to have it. I want

39:39

to have this in Python and then Python added type

39:41

annotations and it is like this is great how

39:43

do I use them there's no way to

39:45

use them with the current phone. So at

39:47

some point I actually found their right framework

39:49

it was called API star by the same

39:51

author of Django REST framework. It was just

39:53

missing some authentication stuff. I said like okay

39:55

I'm gonna contribute to the out stuff when

39:57

I was about to jump into the code.

40:00

he said, I have to deprecate this,

40:02

I will go focus full on Starlit.

40:04

And then he went to build something, this

40:06

is Tom Christie, which is super prolific and

40:09

an amazing open source person in general. And

40:11

then at that point is when I said

40:13

like, I just have to try

40:15

it, let's just do it. So I'm just going

40:17

to try to build something that will be kind

40:19

of a spiritual successor to API start

40:21

built on top of Starlit. So I was,

40:23

you know, like I was actually narrating all

40:26

the learnings from Flask, Django, Django REST framework

40:28

and all the ecosystem and just like bringing

40:30

all those ideas together, at least that was

40:32

my intention. And then I wanted to have

40:35

a bit of better type annotations. So I

40:37

saw that Pythonic was using standard type annotations.

40:39

So people wouldn't have to learn these like,

40:41

you know, from past API for special string

40:44

or something like that. Just instead of just

40:46

pure string. So I wanted to have something

40:48

based on standards, like open

40:50

API, JSON, schema and all that stuff. And

40:52

based on standard Python and to have like

40:54

the simplest syntax possible and to give

40:57

the best developer experience possible while,

40:59

you know, like not adding like

41:02

any additional steps for developers to

41:04

build something that by default will have all

41:06

the best practices built in. That was the intention.

41:08

And I was just like trying to solve it

41:10

for the things that I was working on. I

41:13

was supposed to be doing AI and machine learning

41:15

and stuff, but like I had to stop for

41:17

a read to solve APIs. I got

41:19

stuck in APIs. And that's how I ended

41:21

up with the last API. Oh, I think

41:23

you made a pretty decent choice. It seems

41:26

like fast API is doing all right. Yeah,

41:28

I just saw you much better than what

41:30

I ever had expected. Yeah, I know. Congratulations.

41:32

Well, it's also deserved. But I also just

41:35

saw an ex I don't know, a post

41:37

on ex Twitter, whatever you have, you address

41:39

these things where you said you showed a

41:42

graph where the number of GitHub stars for

41:44

fast API just passed flask. And, you know,

41:46

I have a lot of respect for flask

41:48

and the pallets team and David Lord and

41:51

all those folks. But, you know, awesome. Awesome

41:53

that your stuff is taken off so much.

41:55

That's really cool. It's super cool. It's amazing.

41:58

And, you know, like fast was when. of

42:00

the big inspirations for FastAPI and I've been able

42:02

to be at this point, it's

42:04

crazy. I stay calm to

42:06

get over it. Super cool to

42:08

be able to build all this and to

42:11

keep building more stuff. So yeah, super nice.

42:13

Yeah, one final comment before we

42:15

move on to Octoprint. But one

42:18

of the things I kind of see you doing

42:20

in the world is you're like the combiner. You're

42:22

like, oh, we've got this cool stuff with the

42:24

pedantic and starlet. How

42:26

can we combine it in this way to

42:28

make this and swagger? And similarly with SQL

42:30

model, you're like, well, pedantic is cool, but SQL

42:32

alchemy is kind of cool, but

42:35

it could be more better. It could be better, right? So

42:37

anyway, good job. And also like type,

42:39

that is the language for the command line

42:41

applications, they just click with the type annotations,

42:43

the same ideas from pedantic, and

42:45

now with integrated building support

42:48

for rich. So also picking Will's

42:50

work, trying just to put a

42:52

bunch of things together. I'm

42:55

just making cocktails everywhere. Yes,

42:58

exactly. It's more than that, but there

43:00

is a lot of value in combining things

43:02

in a smart way, an accessible way. Awesome.

43:05

All right, Gina, you told us a little bit about

43:07

the origin story, but what did you try before? And

43:09

then I have a follow-up question I think is unique

43:11

to your project. I wouldn't necessarily

43:13

say that I tried anything before because

43:15

the whole thing was completely unintentional. I

43:18

basically bought myself a 3D printer in

43:20

late 2012. I wanted to

43:22

be able to put it in my spare bathroom and monitor

43:24

it from afar, because back

43:26

then this thing was tying up my PC. You

43:28

had to constantly keep it connected so it could operate,

43:31

and that for hours and hours, and it made

43:33

noises, and it produced fumes, and I just wanted

43:35

it out of my office, and

43:37

to be able to play games on my PC again

43:39

instead of having it, yeah, basically

43:42

communicate constantly with a 3D printer. And

43:44

so I bought myself a Raspberry Pi, and I was

43:46

looking online for something to be able to just put on this Pi

43:50

and attach it to the printer and throw a Wi-Fi dongle in, because

43:52

back then the Pi didn't have Wi-Fi built in, and throw

43:54

that in the spare bathroom, but there wasn't anything.

43:56

So over the course of

43:59

my Christmas break, back in 2012, I sat

44:01

down and changed that. And this is basically

44:03

the origin story of Octoprint. I just wanted

44:05

to scratch my own itch. I wanted to

44:07

put my printer in my spare bathroom. This

44:09

is all. And apparently, a lot

44:11

of people had the same problem because I just

44:13

you know, like how how we like to do

44:16

these things, we build something that we think might

44:18

be interesting, we throw it up on GitHub and

44:20

go just like here, go nuts, enjoy, have fun

44:22

with that. And I suddenly started getting emails from

44:25

all around the world like, Hey, I have this

44:27

in this printer, can you also make it work

44:29

with that? And so this escalated. And

44:31

I went like, Oh, someone is using it.

44:33

Of course, I'm going to add this support.

44:36

And of course, I'm going to add the

44:38

feature and it just grew and grew and

44:40

grew and grew. And apparently, I just hit

44:43

a nerve. So this was utterly unplanned. This

44:45

was never my intention at all. And I

44:47

just wanted to solve my own problem and

44:49

have continued to solve my own problems and

44:52

the problems of other people ever since. Before

44:55

Octoprint, I actually was also quite active in

44:57

a little project called Dokoviki, where I was

44:59

developing some plugins for that. And I

45:02

even did open source before I knew what

45:04

open source was with some PHP scripts when

45:06

I was 18 or so that

45:09

I threw up on my website. But

45:11

yeah, Octoprint was like it

45:13

took over my life. It just was an

45:15

accident. A happy little accident, maybe. How

45:18

do you decide, okay, this is a

45:20

job for me rather than just a

45:22

thing you worked on? The thing is by

45:24

mid 2013, I went to 80% on my regular day

45:26

job. I used to be a software architect

45:31

slash consultant with big corporations,

45:33

Java world, all the enterprise

45:35

stuff. And to be able

45:37

to dedicate one day per week fully to Octoprint plus,

45:39

of course, the weekends and the after hours and the

45:41

vacations and all of that. And

45:43

that still didn't suffice anymore by

45:46

2014. And I noticed that it

45:48

was impacting my health, it was

45:50

impacting my relationships. And that was

45:52

actually quite perfect timing really when

45:54

this this company that hired me initially approached me

45:56

and said, Hey, do you want to maybe fly

45:59

out to a company? us and we'll chat.

46:01

And if you like all of that, what we

46:03

have to propose, then we can just do that.

46:05

And this is how it then continued to go

46:07

from 2014 until 2016. And yeah,

46:11

it was never my intention to become

46:13

self employed. I'm a quite risk versus

46:15

person actually. So when this point came

46:17

where I was like, Okay, either I

46:19

find a way to keep funding this,

46:21

or I have to really drop it

46:23

because it was way too big by

46:25

then to be kept as a pet

46:27

project without being utterly, utterly unhealthy. Yeah,

46:30

I decided to jump into the cold water and have

46:32

been trying to keep up at the surface

46:35

ever since basically. So yeah, all

46:37

of that really completely unplanned. Cool.

46:39

What an adventure. Indeed. Yeah. And the

46:41

good thing is, even if people don't understand

46:43

what open sources or what code is, I

46:45

always have quite a topic at parties. So

46:48

that is fun because yeah, like people give

46:50

you money for something they can get for

46:52

free. Exactly. Yeah. If

46:54

you're not familiar with open source, then it definitely

46:56

is a weird weird thing to say. It was

46:58

tricky to find a text consultant to understand the

47:00

concept. So yeah, I can imagine how the reality

47:02

is. Interesting. I'm

47:05

sure. All right. I was there recently. I was

47:07

like, What do you do? What is your day?

47:09

Oh, I'm a software developer. So you work for

47:11

a company that's not really free for others to

47:13

use. And who's saying

47:18

you a company that pays money to

47:21

companies to build companies. So you're really

47:23

going to go back. No, it's like, you know, like

47:25

it was a long conversation. They got bored and they.

47:29

This doesn't make any sense. Yeah. I've just taken

47:31

to say I'm a software developer and I work with

47:33

3D printers and then people usually

47:36

stop asking questions because 3D printers are

47:38

this mysterious thing that no one understands

47:40

anyhow, usually at least. And then

47:42

yeah, unless they say, Oh, 3D printers, and then

47:44

I say, Yeah, do you know 3D printers? And

47:46

they go, Yeah, yeah, I have one. And then

47:48

I can say, Oh, do you know Octoprint? Yes.

47:50

Oh, yeah, I made that. And then, oh, yeah,

47:52

it's tricky to explain to people. I'm sometimes not

47:54

even sure my parents understand what I do. So

47:57

I'm sure that my parents don't understand what I do.

48:00

But that's okay. I'm

48:03

sure they're still proud of you anyway. It's fine.

48:05

Yeah, my definitely proud of me. I would like

48:07

to just maybe get a little short on time.

48:09

You're coming up to the end of our Avengers

48:11

meeting. Let's close it out with this. Go

48:13

around one more time and let you all, or

48:15

maybe just as a group, chime in on this.

48:17

Speaking to the people out there listening who want

48:19

to start an open source project or want to

48:21

contribute to open source, or somehow get involved in

48:23

similar ways. What would you do different if you

48:25

started now? Many of you have been working on

48:27

this for a long time. You've had a lot

48:29

of experience. If somebody said, well, the

48:32

world is somehow, the memory has

48:34

been erased from the fact that

48:36

rough or rich or Octopred or

48:38

whatever existed. Just start over, what

48:40

would you do different or the

48:42

same? I would use fast API. Yeah.

48:47

Good use of a time machine there. Everybody has like

48:49

I've had multiple conversations over the years where people are

48:51

like, why don't you use this library? I'm like, it

48:53

didn't exist. Exactly. Yeah, that is

48:55

the problem. Exactly. When you actually

48:57

have a plug-in system, then swapping out

49:00

stuff like that can become very tricky.

49:02

Absolutely. When I get asked what to work

49:04

on, what to study, what to focus, how

49:06

to get into open source, or like almost

49:09

any of those questions, I always say that

49:11

the main advice I give is just to

49:13

focus on a problem that is important to

49:15

you more than innovation, market

49:18

disruption or whatever. Just like focusing on a

49:20

problem that is actually important to you. Hopefully,

49:22

that is important to others as well. If

49:25

it's not a problem that affects you directly,

49:27

hopefully it affects someone that is very close

49:29

to you, so you can get a very

49:31

tight feedback loop of what you are

49:33

building. Then try to solve that and then

49:36

use that as the guide of what to

49:38

do, what to learn, what to focus on,

49:40

what to do. In many cases, it's just

49:42

learning a framework that it's already there. Why

49:45

will I go and build a system to

49:48

control 3D printers instead of just

49:50

learning how to use auto-print? In many

49:52

cases, solving the problem is just using the tool that

49:54

is already there. But then in some cases, you end

49:56

up figuring out that there's no tool and you just

49:58

have to build it. There's actually no

50:01

link there on format that can be super fast, so

50:04

you can run it every time you just hit save.

50:06

So then you just have to build it in Rust

50:08

and create Rust. Or there's

50:11

always this thing that you are trying

50:13

to solve that is just not solved

50:15

there yet, and that is what gives

50:17

you the best value and the best

50:20

outcome. In many cases, it can be

50:22

just contributing to another open source project

50:24

or building something new. But the thing

50:26

is, for me, it's just focusing on

50:28

a problem that is important. That

50:31

is what has worked

50:33

for me at least. Good advice. I would add

50:35

to that that you really shouldn't try to... You

50:37

need to be really passionate about the

50:39

thing as well, right? It needs to

50:41

be something that is really something you're

50:43

into, something that you will want to

50:46

spend a lot of time on that

50:48

is actually not your working hours and

50:50

such, because otherwise the whole jock until

50:52

this becomes anything viable, anything big enough

50:54

to support you in any kind of

50:56

way, even if it's just being able

50:58

to, I don't know, drink a traditional

51:00

coffee per week or something, that will

51:02

be a quiet long slog and a

51:05

lot of work and a lot of blood and sweat

51:07

and tears. And so you really need to be into

51:09

this so that you want to do that. If you

51:11

are just in that for the end goal of, I

51:13

don't know, becoming rich through open source, which by the

51:15

way, will probably not work. Only will I go

51:18

rich. Then

51:21

this will not work out. You need to

51:23

focus on the path to the goal and

51:25

not the goal. A lot of people try

51:27

to reach for the end goal before they

51:29

actually are willing to actually walk the path.

51:31

I also get this along. I happen to

51:33

be in the GitHub star program and

51:36

I've had a lot of people ask me, how do you

51:38

become a GitHub star? And that is just the wrong question

51:40

to ask. That's just the same as it

51:42

is. How do you become an open source maintainer of a

51:44

popular project? Like you just have

51:46

to do whatever you are interested in. You

51:49

have to do work and you have to

51:51

be passionate about your work. And then maybe

51:53

if you hit the right nerve, then that

51:55

will happen and maybe it won't. I

51:57

think it's very interesting that none of us.

52:00

had like a career path to where we are

52:02

now. We didn't set out to be where we

52:04

are now. It just feels like we were kind

52:06

of followed our own intuition and it worked out.

52:08

Which means it's very difficult when someone asks me,

52:10

well, how do you become an open source developer?

52:12

How do you start a company? It's like, I'm

52:14

not quite sure. I can tell you my path

52:16

to there, but very hard for me to articulate

52:18

to someone else how to get there. I think

52:20

there's a lot of luck involved as well, right?

52:22

It's like you have to do all this stuff

52:24

and then roll this dice. If it gets a

52:26

six, then you can be successful. Yeah,

52:29

there's an element of luck, but it's kind of like a luck

52:31

you make for yourself. Yeah. And it

52:33

might take you to somewhere else or it might

52:35

not. But as long as you're passionate about it

52:38

and you enjoy it, then great things will happen,

52:40

I think. Well, also Will and Charlie, you both

52:42

took some specific time on your own

52:44

money to really level up what you're working on,

52:46

which is pretty brave, right? Not a lot of

52:48

people would say, I'm just going to spend my

52:51

savings to work on this project and see if

52:53

I can make it go. So you earned some

52:55

of that through taking that chance and putting it

52:57

in that time and effort, I think. For me,

52:59

that didn't last quite long because after 15

53:01

months, I was living on GitHub sponsorship. We

53:03

each came along and then there was cash

53:05

and everything changed. So your world changed and

53:07

you had to learn a whole new set

53:09

of skills, I'm sure. Yeah, and then I

53:11

had a job and responsibilities. I do feel

53:13

really lucky that, like I said, this is

53:15

my first time being a maintainer. And it

53:18

was very clear to me quickly that for

53:20

Rust to have the pace of development and

53:22

the scope that it has, it had to

53:24

be a full-time thing. And that was pretty

53:26

obvious to me quickly. And I just, I

53:28

have a lot of respect for people who

53:30

have been maintainers for longer periods of time, and

53:32

in a way where it's not their full-time job

53:34

or they have to drill out the side. I

53:36

think I haven't really been in that

53:38

position, but it's already clear to me that that

53:40

takes a lot of dedication and commitment. So I

53:43

feel very lucky that I get to work on

53:45

open source full-time. I know it's not all entirely

53:47

luck, right? Like you were saying, you increase your

53:49

luck surface area and then opportunities come your way.

53:52

But I Do think it's just a very

53:54

fortunate position that these kinds of opportunities do

53:56

exist. Because Maintaining popular stuff is a lot.

53:59

It's a lot. Their privileges the come with

54:01

at one hundred percent but I mean yeah it's

54:03

a tough fitted it lot of work and watch

54:05

stress our responsibility for and you don't as fast

54:07

as start your own right away. I

54:09

disagree. Heavy sauces, thousand. Dollars have

54:11

to start your own either. You could contribute to

54:14

really popular one and kind of get into the

54:16

scene. and yeah like Eric that's a little bit

54:18

like your story like you are in the Jenga

54:20

see and then spun off from that. what you

54:22

guys are doing right now definitely and you know

54:24

part of an open source community and definitely kind

54:26

of going to break on and and just can

54:28

have been surrounded by the people that was always

54:30

the it. It's very lonely work to still have

54:32

a and inbox of get have issues and the

54:34

know inbox. thank you So. You

54:36

know and like going to conferences not kind

54:38

of stuff was really worried you feel the

54:40

appreciation and you've really kind of actually feel

54:43

that the but valued ever you're providing as

54:45

well as justice the stress of idea of

54:47

the things you're breaking some totally agree with

54:49

the absolutely the conferences or grade to really

54:51

feel the a person rather than just for

54:53

the requests and I'll say thank you and

54:55

then know give you a bug report but

54:57

at least to they it. A

55:00

was the was talking to. Yes, there is

55:02

is just so you. There's one thing. Order

55:04

And as now organize our last. Year

55:06

ago in interesting observation from years than the

55:08

Oig. A year ago I didn't really know

55:11

anyone in Python open source like at all

55:13

and I was a user of Python in

55:15

my day job every day but like I

55:17

was not in her interact with I am

55:19

a year yeah now like Sebastian we've interacted

55:21

a bunch like this is a lot of

55:23

people that I've come to know that they

55:25

give us like friends so I think they're

55:27

really your such as you're interested in getting

55:29

involved and like putting in work. I really

55:31

don't think there are significant barriers and like

55:33

you get out of it what you put

55:35

and so. i think i've been very impressive

55:38

just how alchemy and friendly in the community has

55:40

been especially at the beach and snow absolutely talk

55:42

to our people show up at pike on and

55:44

are like i was really nervous come here or

55:46

i feel like it didn't fit and in there

55:48

you know just had such a great experience and

55:50

asimov did you feel i like other thousand for

55:52

a fight on the cia nerve and if i'd

55:55

i'd never even if i non conference the size

55:57

limited up at such an amazing party for available

55:59

on a That's true.

56:01

I love the banniana. That was interesting.

56:03

Alright guys, well I think we are pretty

56:05

much out of time. Anyone want to have

56:07

some final thoughts for listeners before we wrap

56:09

it up? Go on and build some cool

56:12

stuff. Who's great enough? How come maintainer today,

56:14

I think. Give

56:16

cake, not puppies. Let's leave it with that, huh?

56:18

Alright, give cake, not puppies. And

56:20

be really careful before you start a

56:23

popular source project. It might take over

56:25

your life. If you want this, great, but

56:27

it's not that easy. Careful what you wish for,

56:29

you might get it. Exactly. Gina, Sebastian, Eric,

56:31

Will, Charlie, thank you all for being on the

56:33

show. This has been a ton of fun. Thank

56:35

you very much for having us. Thank you so

56:37

much. A pleasure and honor to be with these

56:40

amazing people. Thank you for the invitation. I agree.

56:43

Honestly, I had a blast just like hearing everyone's stories

56:45

because I hadn't heard any of this before. So thanks

56:47

to everyone else and thanks Michael. Yeah, you bet. Bye

56:49

all. Bye. This

56:51

has been another episode of Talk Python to Me.

56:54

Thank you to our sponsors. Be sure to check out

56:56

what they're offering. It really helps support the show. This

57:00

episode is sponsored by BaseDash. BaseDash

57:03

uses AI to build a dashboard

57:05

for your database. Get a

57:07

custom admin view in your

57:10

Postgres, Microsoft SQL Server, MySQL,

57:12

MariaDB, or Redshift database. Get

57:15

started for free at talkbython.fm slash BaseDash.

57:18

Take some stress out of your life. Get

57:21

notified immediately about errors and performance issues

57:23

in your web or mobile applications with

57:25

Sentry. Just visit

57:28

talkbython.fm slash Sentry and

57:30

get started for free. And be sure

57:32

to use the promo code talkbython, all one

57:34

word. Want to level up

57:36

your Python? We have one of the largest catalogs

57:39

of Python video courses over at Talk Python. Our

57:41

content ranges from true beginners to deeply advanced topics

57:43

like memory and async. And

57:46

best of all, there's not a subscription in

57:49

sight. Check it out for yourself at training.talkbython.fm.

57:52

Be sure to subscribe to the show, open your

57:54

favorite podcast app, and search for Python. We should

57:56

be right at the top. You can

57:58

also find the iTunes feeder. at slash iTunes,

58:01

the Google Play feed at slash

58:03

Play, and the direct RSS feed

58:05

at slash RSS on talkpython.fm. We're

58:08

live streaming most of our recordings these days.

58:10

If you wanna be part of the show

58:12

and have your comments featured on the air,

58:14

be sure to subscribe to our YouTube channel

58:17

at talkpython.fm slash YouTube. This

58:19

is your host, Michael Kennedy. Thanks so much for

58:21

listening. I really appreciate it. Now get out there

58:23

and write some Python code. We'll

58:26

be right back. Thanks everybody. Bye.

58:29

Bye. Bye bye. Bye. Bye

58:32

bye. Bye bye. Bye. Bye

58:34

bye. Bye. Bye bye.

Unlock more with Podchaser Pro

  • Audience Insights
  • Contact Information
  • Demographics
  • Charts
  • Sponsor History
  • and More!
Pro Features