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.
Podchaser is the ultimate destination for podcast data, search, and discovery. Learn More