WEBVTT

00:00:00.001 --> 00:00:06.040
The beauty of open source software and libraries is that you're not stuck with a single option some vendor is offering.

00:00:06.040 --> 00:00:09.940
This is especially true when that support is poor or antiquated.

00:00:09.940 --> 00:00:16.020
Almost any capability you can think of has multiple options, even for a single language such as Python.

00:00:16.020 --> 00:00:19.760
Just think about how many web frameworks you can pick from today.

00:00:19.760 --> 00:00:22.140
But therein lies a new problem.

00:00:22.140 --> 00:00:24.640
If there are 10 options, how do you choose?

00:00:24.640 --> 00:00:27.580
Do you go for the oldest and potentially most stable?

00:00:27.940 --> 00:00:30.100
How about the most up-to-date one?

00:00:30.100 --> 00:00:34.640
Maybe the hot new version that has the fastest adoption curve is the right one for you.

00:00:34.640 --> 00:00:39.580
It's not easy, but luckily we have an excellent panel here to discuss exactly that.

00:00:39.580 --> 00:00:45.860
You'll hear from Emily Morehouse, Cecil Phillip, Kim VanWijk, Lucas Schlinge, Gareth Thomas, and Dan Garland.

00:00:45.860 --> 00:00:51.680
This is Talk Python To Me, episode 397, recorded December 7th, 2022.

00:00:51.680 --> 00:01:08.220
Welcome to Talk Python To Me, a weekly podcast on Python.

00:01:08.220 --> 00:01:09.960
This is your host, Michael Kennedy.

00:01:09.960 --> 00:01:17.440
Follow me on Mastodon, where I'm @mkennedy, and follow the podcast using @talkpython, both on fosstodon.org.

00:01:17.640 --> 00:01:20.060
Be careful with impersonating accounts on other instances.

00:01:20.060 --> 00:01:21.020
There are many.

00:01:21.020 --> 00:01:26.080
Keep up with the show and listen to over seven years of past episodes at talkpython.fm.

00:01:26.580 --> 00:01:30.140
We've started streaming most of our episodes live on YouTube.

00:01:30.140 --> 00:01:37.660
Subscribe to our YouTube channel over at talkpython.fm/youtube to get notified about upcoming shows and be part of that episode.

00:01:37.660 --> 00:01:40.820
This episode is brought to you by Cox Automotive.

00:01:40.820 --> 00:01:47.840
Use your technical skills to transform the way the world buys, sells, and owns cars at talkpython.fm/cox.

00:01:48.000 --> 00:01:49.020
And by Sentry.

00:01:49.020 --> 00:01:50.860
Don't let those errors go unnoticed.

00:01:50.860 --> 00:01:51.640
Use Sentry.

00:01:51.640 --> 00:01:55.060
Get started at talkpython.fm/sentry.

00:01:55.060 --> 00:02:06.780
Transcripts for this episode are sponsored by Assembly AI, the API platform for state-of-the-art AI models that automatically transcribe and understand audio data at a large scale.

00:02:06.780 --> 00:02:10.620
To learn more, visit talkpython.fm/assemblyai.

00:02:11.160 --> 00:02:11.760
Hey, y'all.

00:02:11.760 --> 00:02:12.980
Welcome to Talk Python To Me.

00:02:12.980 --> 00:02:16.240
Gareth, Kim, Lukasz, Cecil, Emily, and Dan.

00:02:16.240 --> 00:02:19.360
I've got a bunch of you here, and I'm so excited to have you all on the show.

00:02:19.360 --> 00:02:20.260
Thanks for being here.

00:02:20.260 --> 00:02:20.680
Sure thing.

00:02:20.680 --> 00:02:22.000
Yeah, I'm excited, man.

00:02:22.000 --> 00:02:23.400
We have a nice little party going on.

00:02:23.400 --> 00:02:24.320
Yeah, we do.

00:02:24.320 --> 00:02:25.880
We definitely do.

00:02:25.880 --> 00:02:34.740
Yeah, so I'm really excited to talk about choosing technology, choosing libraries for programming, or maybe a database that we might use for a project.

00:02:34.740 --> 00:02:40.920
You know, we have this paradox of choice type of problem, and especially in the Python space.

00:02:40.920 --> 00:02:42.220
You know, I haven't even looked.

00:02:42.220 --> 00:02:45.120
Are we over 400,000 packages on PyPI?

00:02:45.120 --> 00:02:46.100
There's many, right?

00:02:46.100 --> 00:02:50.880
We are over 14 terabytes of storage on PyPI that I know.

00:02:50.880 --> 00:02:52.100
Oh, my goodness.

00:02:52.100 --> 00:02:52.800
Yeah.

00:02:52.800 --> 00:02:53.540
Jack, look.

00:02:53.540 --> 00:02:58.320
It's mostly machine learning, but, you know, Kenneth, there's a lot of packages.

00:02:58.320 --> 00:03:00.680
Yeah, there's definitely a lot of packages.

00:03:00.680 --> 00:03:02.860
Okay, well, how do you pick?

00:03:02.860 --> 00:03:08.540
How do you go to that list and say, I'm going to search for a web framework, and look, there's 100 results.

00:03:08.940 --> 00:03:09.560
How do I pick?

00:03:09.560 --> 00:03:11.980
Or I'm going to find a way to talk to a database.

00:03:11.980 --> 00:03:13.200
What database should it be?

00:03:13.200 --> 00:03:16.600
So that's going to be our topic for the show today.

00:03:16.600 --> 00:03:24.060
And let's just start real quick with the elevator pitch of who you are and your background.

00:03:24.060 --> 00:03:25.960
You know, 30 seconds or less.

00:03:25.960 --> 00:03:28.460
We'll go around the Brady Bunch squares here.

00:03:28.460 --> 00:03:28.820
Gareth.

00:03:28.820 --> 00:03:29.920
Hi, I'm Gareth.

00:03:30.180 --> 00:03:35.440
I've been programming for probably 40 years, I guess, and now, because I started when I was about three.

00:03:35.440 --> 00:03:37.320
I'm on a Dragon 64.

00:03:37.320 --> 00:03:44.340
But it was only recently I got into Python, really, when I took up a job as a CTO of a company that did everything in Python and haven't looked back.

00:03:44.340 --> 00:03:47.040
And now I'm doing CTO stuff the whole time.

00:03:47.040 --> 00:03:48.300
Fantastic.

00:03:48.880 --> 00:03:53.280
And I think CTO positions are very much in this role.

00:03:53.280 --> 00:03:57.420
You've got to set a little bit of guidance for the company and the teams, right?

00:03:57.420 --> 00:03:57.760
Yes.

00:03:57.760 --> 00:03:59.680
And I don't get to do code anymore.

00:03:59.680 --> 00:04:01.500
I just get to watch people write code.

00:04:01.880 --> 00:04:06.100
You just get to make decisions for them and watch whether they enjoy it or don't enjoy it.

00:04:06.100 --> 00:04:07.560
Kim, welcome back.

00:04:07.560 --> 00:04:08.040
Thanks.

00:04:08.040 --> 00:04:14.640
I must be roughly the same age as Gareth, but I have been writing code for probably about 25 years because I didn't start when I was three.

00:04:14.640 --> 00:04:30.660
Professionally, I've been doing some Python, some C, some otherwise for 20-odd years, writing software for embedded systems, doing DevOps work, and at the moment doing dot engineering work with, I guess, in the American sense, you'd fall a mortgage provider in South Africa, my current employer.

00:04:30.660 --> 00:04:31.340
Yeah, fantastic.

00:04:31.680 --> 00:04:32.480
Lukash, welcome back.

00:04:32.480 --> 00:04:35.700
Hi, I'm the core developer in residence for CPython.

00:04:35.700 --> 00:04:40.560
So actually getting money from the Python Software Foundation to help develop Python.

00:04:40.560 --> 00:04:47.140
Just yesterday, we released six simultaneous versions of Python at the same time, which I think is a record.

00:04:47.140 --> 00:04:47.840
Yeah.

00:04:47.840 --> 00:04:48.880
So I mostly do that.

00:04:48.880 --> 00:04:50.640
I don't program for 40 years.

00:04:50.640 --> 00:04:52.460
I'm 37 at the moment.

00:04:52.460 --> 00:04:56.240
Still maintaining 37 because my birthday is March.

00:04:56.240 --> 00:04:58.440
So like approaching quickly, but you know.

00:04:58.440 --> 00:04:59.460
Don't let 38 get you.

00:04:59.460 --> 00:04:59.860
Yes.

00:04:59.860 --> 00:05:01.160
I'm not almost 40.

00:05:01.280 --> 00:05:02.560
I'm 37, you know.

00:05:02.560 --> 00:05:03.640
Awesome.

00:05:03.640 --> 00:05:05.880
Well, congratulations on all the great work.

00:05:05.880 --> 00:05:10.300
I know you've done a ton of work to keep CPython moving forward.

00:05:10.300 --> 00:05:10.500
Yeah.

00:05:10.500 --> 00:05:10.860
Thank you.

00:05:10.860 --> 00:05:13.040
There seems to be like more and more to do, actually.

00:05:13.300 --> 00:05:24.100
So just looking at 3.1.1 that we released yesterday, it had like almost 500 comets since 3.11.0, which is kind of unprecedented as a rate of change.

00:05:24.100 --> 00:05:30.640
So, you know, kind of, we have so much kind of velocity right now that I have never seen before.

00:05:30.640 --> 00:05:31.760
So a lot of change.

00:05:31.760 --> 00:05:32.160
Amazing.

00:05:32.320 --> 00:05:35.980
I talked to Ned Batchelder on another podcast that we were doing.

00:05:35.980 --> 00:05:37.140
We'll come out before this one.

00:05:37.140 --> 00:05:38.360
And we looked.

00:05:38.360 --> 00:05:42.600
The change log for CPython is 175,000 words.

00:05:42.600 --> 00:05:45.580
A typical novel is 80,000.

00:05:45.840 --> 00:05:46.900
So that's a lot.

00:05:46.900 --> 00:05:47.620
That's nuts.

00:05:47.620 --> 00:05:49.980
Cecil, always good to have you on the show.

00:05:49.980 --> 00:05:50.460
Welcome back.

00:05:50.460 --> 00:05:50.820
Sure.

00:05:50.820 --> 00:05:51.640
Thanks for having me.

00:05:51.640 --> 00:05:52.020
Hi, everyone.

00:05:52.020 --> 00:05:54.120
I'm Cecil Phillip, developer advocate at Stripe.

00:05:54.120 --> 00:05:59.540
I will not tell you how old I am, but I will tell you that my programming grid beard is just starting to come in.

00:05:59.620 --> 00:06:02.280
So not fully there yet, but I'm still working on it.

00:06:02.280 --> 00:06:05.420
Primarily been doing a lot of .NET stuff, some Python stuff.

00:06:05.420 --> 00:06:07.280
Recently started playing around with Go.

00:06:07.280 --> 00:06:10.680
Maybe we'll talk about that, you know, in the midst of this conversation as well.

00:06:10.680 --> 00:06:17.000
But other than that, you know, I, you know, as an advocate, I spent a lot of time doing video and going to conferences and doing demos and stuff.

00:06:17.000 --> 00:06:20.440
So I kind of feel like my job is to learn stuff to an extent.

00:06:20.440 --> 00:06:21.000
You know what I mean?

00:06:21.000 --> 00:06:22.080
There's a lot of that that happens.

00:06:22.080 --> 00:06:27.100
And, yeah, I kind of have a lot of fun doing it both, you know, for work and, you know, outside of work.

00:06:27.100 --> 00:06:27.300
Yeah.

00:06:27.300 --> 00:06:28.840
That sounds like a great job.

00:06:29.220 --> 00:06:30.200
Emily, welcome back.

00:06:30.200 --> 00:06:30.520
Hi there.

00:06:30.520 --> 00:06:31.860
I'm Emily Morehouse.

00:06:31.860 --> 00:06:34.980
I'm the director of engineering at a company called Cuddlesoft.

00:06:34.980 --> 00:06:44.200
We are a kind of digital product consultancy focusing on, you know, user experience for full stack applications.

00:06:44.200 --> 00:06:47.600
But we also get into some of the nitty gritty stuff.

00:06:47.600 --> 00:06:55.660
So we kind of do that full spectrum DevOps, firmware, middleware development, web applications, all the way through design.

00:06:56.040 --> 00:06:59.080
So I get to touch a lot of different pieces of technology.

00:06:59.080 --> 00:07:02.460
A lot of my work is in Python, but not all of it.

00:07:02.620 --> 00:07:06.280
I write a lot of Ruby, a lot of JavaScript kind of across the spectrum.

00:07:06.280 --> 00:07:14.920
So I get to kind of see how different ecosystems handle open source, which is really interesting because I feel like the JavaScript world is very different.

00:07:14.920 --> 00:07:17.920
I found world and the Ruby world and kind of down that stack.

00:07:17.920 --> 00:07:18.560
So, yeah.

00:07:18.780 --> 00:07:21.540
So this topic is right down right in your wheelhouse.

00:07:21.540 --> 00:07:28.360
And I think also the consulting side, the agency side is interesting because you work with one group.

00:07:28.360 --> 00:07:29.960
You say, here's what we recommend for you.

00:07:29.960 --> 00:07:35.100
Oh, another group has another company has a different set of software skills.

00:07:35.100 --> 00:07:37.920
So you might recommend something different in that case, right?

00:07:37.920 --> 00:07:38.680
Yeah, absolutely.

00:07:38.680 --> 00:07:43.320
And the technical expertise that our clients come with is very wide reaching, right?

00:07:43.320 --> 00:07:48.380
So some people are completely non-seqtical, don't want to touch it, don't want to know anything about it.

00:07:48.540 --> 00:07:55.820
We're going to be able to connect to very technical teams where we're kind of coming in as a specific partner on a specific piece of their tech that they are eventually going to take over.

00:07:55.820 --> 00:07:59.580
And there's a lot more kind of risk management for this, right?

00:07:59.580 --> 00:08:05.560
Like we can't build something for our client that then we're going to say, you know, your library isn't supported in six months.

00:08:05.560 --> 00:08:09.000
So it also gives us a chance to start fresh a lot, right?

00:08:09.000 --> 00:08:10.840
Like most of our projects are greenfield.

00:08:10.840 --> 00:08:19.060
So we do get to say, hey, look, like we've been doing our due diligence on this new framework or this new library or whatever it is.

00:08:19.060 --> 00:08:32.460
And we think that this is a really good place for you to be and get a chance to like actually build something with a new library more so than like convincing, you know, a company to rewrite their Django application and something else.

00:08:32.460 --> 00:08:33.040
Right.

00:08:33.040 --> 00:08:35.760
You also were the chair of PyCon.

00:08:35.760 --> 00:08:36.960
Is that the right title?

00:08:36.960 --> 00:08:39.420
Yeah, I forgot to mention that.

00:08:39.420 --> 00:08:41.140
I'm the recovering chair.

00:08:41.140 --> 00:08:42.940
I'm chair emeritus now.

00:08:42.940 --> 00:08:43.280
Yeah.

00:08:43.280 --> 00:08:43.700
Yeah.

00:08:43.700 --> 00:08:45.020
So I was going to ask.

00:08:45.020 --> 00:08:45.900
I heard that there's a support group somewhere.

00:08:45.900 --> 00:08:47.540
I'm sure there is.

00:08:47.540 --> 00:08:49.660
Not overseeing 2023, are you?

00:08:49.660 --> 00:08:50.180
No.

00:08:50.180 --> 00:08:52.620
I'm taking a break.

00:08:52.620 --> 00:08:53.080
Yep.

00:08:53.080 --> 00:08:53.480
Fantastic.

00:08:53.480 --> 00:08:54.440
All right.

00:08:54.440 --> 00:08:55.120
Well, thanks for that.

00:08:55.120 --> 00:08:56.660
Dan, welcome to the show.

00:08:56.660 --> 00:08:57.180
Thanks.

00:08:57.180 --> 00:08:58.640
I'm Dan Gerlank.

00:08:58.640 --> 00:09:07.640
I've been doing software development professionally for 20 years to some degree, more in one capacity or another.

00:09:08.000 --> 00:09:22.380
I'm currently the director of engineering for the data science and ML engineering team at Ampersand, which probably the simplest way to think of it's kind of like a brokerage for television advertising.

00:09:22.380 --> 00:09:28.220
Prior to that, I actually ran my own consulting job for a decent amount of time.

00:09:28.220 --> 00:09:34.600
So I've worked on that agency side a bit and also started my career in quant finance.

00:09:34.960 --> 00:09:38.840
I've worked across a wide range of things.

00:09:38.840 --> 00:09:44.880
And I'm pretty involved with the Asara project these days on the open source side.

00:09:44.880 --> 00:09:47.180
I can also do a bit of teaching on the side.

00:09:47.180 --> 00:09:52.580
I've taught on O'Reilly about pandas and different things from time to time.

00:09:52.580 --> 00:09:52.880
So.

00:09:52.880 --> 00:09:53.720
Fun.

00:09:53.720 --> 00:09:53.980
Yeah.

00:09:53.980 --> 00:09:54.300
Teaching.

00:09:54.300 --> 00:09:58.620
Teaching is always a great way to kind of learn these technologies a little bit deeper as well.

00:09:58.680 --> 00:09:59.080
For sure.

00:09:59.080 --> 00:10:04.700
Then you definitely learn it for real when you go out to teach it.

00:10:04.700 --> 00:10:07.600
The fear of having to stand in front of a bunch of people and not know the answer.

00:10:07.600 --> 00:10:08.600
Motivate you.

00:10:08.600 --> 00:10:10.320
That's right.

00:10:11.460 --> 00:10:15.700
I guess conference speaking kind of works that way, but it's not as back and forth as well.

00:10:15.700 --> 00:10:16.380
All right.

00:10:16.380 --> 00:10:21.760
So let's kick off this conversation with maybe a story from some of you.

00:10:21.760 --> 00:10:29.200
So I wanted to start with just maybe a story how you've chosen some tech stack or some database

00:10:29.200 --> 00:10:31.800
or some new framework.

00:10:31.800 --> 00:10:35.180
You know, a lot of leeway in the scope there.

00:10:35.180 --> 00:10:37.820
But, you know, whoever wants to jump in, just, you know, what?

00:10:37.820 --> 00:10:40.700
Give us a story of something you've sort of gone down that path recently.

00:10:40.700 --> 00:10:45.620
Well, I'll jump in and talk a little bit about like the strategy of how I choose to learn

00:10:45.620 --> 00:10:45.920
stuff.

00:10:45.920 --> 00:10:51.280
And I think it's important that you have a learning or a choice strategy, at least for me, because

00:10:51.280 --> 00:10:53.520
like there's just so much stuff to play with.

00:10:53.520 --> 00:10:54.960
And like there's only so many hours in the day.

00:10:54.960 --> 00:10:58.880
And so you always have to be like surgical with your time about like what you choose to

00:10:58.880 --> 00:10:59.040
do.

00:10:59.040 --> 00:11:03.520
And so one of the things for me is like, I don't build production applications.

00:11:03.520 --> 00:11:05.680
And I think that's an important thing to note.

00:11:05.680 --> 00:11:08.880
So, you know, everyone else's perspective might be a little bit different.

00:11:08.880 --> 00:11:12.460
But like most of the apps that I'm building, I am beta testing stuff.

00:11:12.460 --> 00:11:16.420
I'm creating things for other folks, you know, doing proof of concepts with companies and

00:11:16.420 --> 00:11:17.020
stuff like that.

00:11:17.020 --> 00:11:20.940
So now when you think about the things that I have to learn, I usually have to learn things

00:11:20.940 --> 00:11:22.700
to like get it to work for a little bit.

00:11:22.700 --> 00:11:24.540
And then I'll walk away and I'll go do something else.

00:11:24.540 --> 00:11:24.720
Right.

00:11:24.720 --> 00:11:29.320
Like I don't learn it with the perspective of I have to maintain it over a long period of

00:11:29.320 --> 00:11:29.680
time.

00:11:29.680 --> 00:11:31.500
Now, that is not important that I do it the right way.

00:11:31.500 --> 00:11:33.860
But again, you know, the perspective is just a little bit different.

00:11:34.000 --> 00:11:39.120
So for me, one of the things that I often try to do is, you know, try to find the thing

00:11:39.120 --> 00:11:41.000
that like, I'm really interested in doing.

00:11:41.000 --> 00:11:45.520
I like the thing that'll be useful at work and try and like plug those things together.

00:11:45.520 --> 00:11:45.720
Right.

00:11:45.720 --> 00:11:47.720
And like try and see how we can find some symmetry there.

00:11:47.720 --> 00:11:52.320
And so an example would be like one of the things I'm playing with right now is open telemetry.

00:11:52.320 --> 00:11:52.760
Right.

00:11:53.120 --> 00:11:55.120
Now, I don't work for an open telemetry company.

00:11:55.120 --> 00:11:58.460
And, you know, that's not a thing that we have libraries or extensions for.

00:11:58.460 --> 00:12:02.080
But at the same time, too, like, you know, we think about as we're building apps, right?

00:12:02.080 --> 00:12:04.040
Like, you know, inspection is an important thing.

00:12:04.040 --> 00:12:04.260
Right.

00:12:04.260 --> 00:12:06.940
And being able to give folks guidance is an important thing.

00:12:06.940 --> 00:12:12.160
And so when people come to me as an advocate and ask questions, I might not have to know

00:12:12.160 --> 00:12:16.100
everything in detail, but I try and know things enough so that I can at least have an opinion

00:12:16.100 --> 00:12:17.840
and have a conversation about it.

00:12:17.960 --> 00:12:21.660
You know, be able to speak intelligently about it, even though I might not know like all

00:12:21.660 --> 00:12:25.600
the knobs and whistles and like dials I have to turn to like get the thing to work.

00:12:25.600 --> 00:12:30.720
You know, one of the things that I think would be really important for that role is really

00:12:30.720 --> 00:12:34.220
carefully tracking where's the momentum in frameworks.

00:12:34.220 --> 00:12:40.120
Maybe it's not the most important or widely used thing at the moment, but in six months, you

00:12:40.120 --> 00:12:43.820
know, a little bit of the Gretzky quote, you know, where is this thing going and what

00:12:43.820 --> 00:12:45.220
is the advice you're going to give to people?

00:12:45.220 --> 00:12:46.180
Yeah, I agree with that.

00:12:46.300 --> 00:12:48.820
And that also, again, kind of goes into the strategy, right?

00:12:48.820 --> 00:12:51.740
Of like, what am I learning this thing for?

00:12:51.740 --> 00:12:52.640
You know what I mean?

00:12:52.640 --> 00:12:58.140
Like, am I learning it to, again, like, am I learning it specifically to achieve like a

00:12:58.140 --> 00:12:59.300
particular personal goal?

00:12:59.300 --> 00:13:00.800
Is there something that I'm trying to fix?

00:13:00.800 --> 00:13:05.020
Am I trying to, am I trying to like explore technology so I could pick and choose the thing

00:13:05.020 --> 00:13:05.920
that I want to do, right?

00:13:05.920 --> 00:13:07.600
Like, like what exactly am I learning this thing?

00:13:07.600 --> 00:13:09.740
Am I learning it to teach it to someone else, right?

00:13:09.740 --> 00:13:13.260
Like, no, that's, that's a completely different perspective as you're trying to figure out,

00:13:13.260 --> 00:13:15.860
well, how do I kind of zone into the thing that I'm trying to do?

00:13:15.960 --> 00:13:18.840
Yeah, I was going to add something to what Cecil was saying there.

00:13:18.840 --> 00:13:22.280
One of the important things that you point out that you often end up doing is maybe helping

00:13:22.280 --> 00:13:26.000
people select a framework or a piece of tech stack or something to use.

00:13:26.000 --> 00:13:30.300
And the kind of thing that always, that used to strike a lot of the teams I've worked on,

00:13:30.300 --> 00:13:34.720
and I certainly was guilty as anybody else, is spending a heck of a lot of time going back

00:13:34.720 --> 00:13:37.340
and forth thinking, well, we could use this one or we could use this one and let's try

00:13:37.340 --> 00:13:37.720
this one.

00:13:37.800 --> 00:13:40.840
Well, if I take three days to try this one, and then next week we'll take three days to

00:13:40.840 --> 00:13:41.320
try that one.

00:13:41.320 --> 00:13:45.080
And ultimately, if somebody's paying you to write software, it's kind of an important

00:13:45.080 --> 00:13:48.380
lesson to remember that ultimately you have to pick something and it'll be good enough.

00:13:48.380 --> 00:13:51.420
Your job isn't actually to pick the right thing and spend a month on it.

00:13:51.420 --> 00:13:53.100
There are other things they're paying you to do.

00:13:53.100 --> 00:13:57.320
So one of the important things to think to take stack selection is basically, if it's good

00:13:57.320 --> 00:13:58.040
enough, that's fine.

00:13:58.040 --> 00:13:59.720
If it's not good enough, then obviously it must go.

00:14:00.060 --> 00:14:03.660
And it's useful to have somebody like Cecil to be able to tell you if it's good enough.

00:14:03.660 --> 00:14:06.860
But we can make them step seeking out kind of perfect.

00:14:06.860 --> 00:14:09.380
Is there absolutely anything wrong with this?

00:14:09.380 --> 00:14:10.040
Now we'll use this one.

00:14:10.040 --> 00:14:11.500
Let's try that one and stick it.

00:14:11.500 --> 00:14:12.280
Maybe it'll be better.

00:14:12.280 --> 00:14:14.820
And three weeks later, they're saying to you, why haven't you met the deadline?

00:14:14.820 --> 00:14:16.080
Ah, but we have the perfect tool.

00:14:16.080 --> 00:14:17.120
Haven't used it yet.

00:14:17.120 --> 00:14:18.500
It's taken us a month to find that.

00:14:18.500 --> 00:14:19.740
We have the perfect tool now.

00:14:19.740 --> 00:14:19.980
Yeah.

00:14:19.980 --> 00:14:22.040
It's an easy trap to fall into.

00:14:22.040 --> 00:14:22.500
It is.

00:14:22.500 --> 00:14:24.360
And I think a lot of people probably fall into it.

00:14:24.360 --> 00:14:27.820
And you got to decide, is this a one-way door or a two-way door?

00:14:27.820 --> 00:14:30.040
Is it the gate at the exit of the airport?

00:14:30.040 --> 00:14:33.280
Like if I make this choice, how committed am I to this thing?

00:14:33.280 --> 00:14:38.200
Because if you try it for a week and it's not what you thought it would, you could come

00:14:38.200 --> 00:14:39.140
back and try something else.

00:14:39.140 --> 00:14:42.420
Then why spend three weeks before you even start, right?

00:14:42.420 --> 00:14:45.000
You've learned a lot in that quote failure, right?

00:14:45.000 --> 00:14:50.740
This portion of Talk Python Nemy is brought to you by Cox Automotive.

00:14:50.740 --> 00:14:57.260
With brands like Kelly Blue Book, Autotrader, Dealer.com, and more, Cox Automotive flips the

00:14:57.260 --> 00:15:01.240
script on how we buy, sell, own, and use our cars.

00:15:01.240 --> 00:15:07.500
And now the team at Cox Automotive is looking for software engineers, data scientists, scrum

00:15:07.500 --> 00:15:12.020
masters, and other tech experts to help create meaningful change in the industry.

00:15:12.020 --> 00:15:17.420
Do you want to be part of a collaborative workplace that values your time and work-life balance?

00:15:17.420 --> 00:15:19.740
Consider joining Cox Automotive.

00:15:20.300 --> 00:15:23.600
Visit talkpython.fm/cox today.

00:15:23.600 --> 00:15:26.720
Thank you to Cox Automotive for sponsoring the show.

00:15:28.100 --> 00:15:33.520
I would even go further and say that technology choice doesn't really matter that much.

00:15:33.520 --> 00:15:39.820
The experience I had with large companies I worked for was that they often would choose

00:15:39.820 --> 00:15:47.760
technology that was utterly boring and not interesting even at the time when they did choose it, but

00:15:47.760 --> 00:15:49.600
became dated very quickly.

00:15:50.080 --> 00:15:51.440
And it didn't matter one bit.

00:15:51.440 --> 00:15:55.460
Like Facebook was PHP, MySQL, and Linux, right?

00:15:55.460 --> 00:16:00.920
Only when they already grew, it wasn't really Linux, it wasn't really MySQL, and it wasn't really PHP.

00:16:00.920 --> 00:16:08.100
But at that point, you already have enough infrastructure and enough employees and everything to actually,

00:16:08.100 --> 00:16:09.820
you know, keep it going anyway.

00:16:09.820 --> 00:16:13.860
Same with like Instagram that was purchased by Facebook, but it was Django, right?

00:16:13.860 --> 00:16:14.780
And still Django.

00:16:14.920 --> 00:16:15.820
But it's not really Django.

00:16:15.820 --> 00:16:16.520
It doesn't matter.

00:16:16.520 --> 00:16:21.900
Like it brought them to where they are through it being an established technology.

00:16:21.900 --> 00:16:27.580
And I would in fact kind of err on the side of boring because it's going to be there for you,

00:16:27.580 --> 00:16:29.020
you know, going forward.

00:16:29.020 --> 00:16:33.420
And that's important, especially like, you know, if you're choosing a data store, like you want to

00:16:33.420 --> 00:16:37.760
choose something that, you know, like you're not going to have to migrate from in a year or two,

00:16:37.760 --> 00:16:41.420
because that's not something that is a productive use of your time.

00:16:41.840 --> 00:16:47.640
So I'm going to kind of contradict what I'm saying now very often as part of my job and say,

00:16:47.640 --> 00:16:49.400
you shouldn't be an early adopter.

00:16:49.400 --> 00:16:52.340
But well, in case of CPython, you absolutely should.

00:16:52.340 --> 00:16:55.440
And you should test our alphas and test our betas.

00:16:55.440 --> 00:16:58.000
But you know, you have your CI for that.

00:16:58.000 --> 00:16:59.280
So it's a safe environment.

00:16:59.280 --> 00:17:01.820
Like don't run 3.12 in production right now.

00:17:01.820 --> 00:17:03.340
Do test with it, right?

00:17:03.340 --> 00:17:04.680
So this sort of thing.

00:17:04.680 --> 00:17:08.700
And Python, yeah, it's already like you can use 3.11.1 just fine.

00:17:08.700 --> 00:17:09.640
It should be okay.

00:17:09.640 --> 00:17:16.660
Since we are with our annual release cycle, a kind of in sync with Linux distributions,

00:17:16.660 --> 00:17:23.280
which are doing testing of a new Python version as part of their release for October.

00:17:23.280 --> 00:17:26.840
So Fedora and Ubuntu test our newest Python.

00:17:26.840 --> 00:17:29.920
So it's kind of best tested as it ever was.

00:17:30.020 --> 00:17:33.780
But when it comes to your data store, when it comes to your web framework, you know,

00:17:33.780 --> 00:17:35.480
choosing something that is extremely new.

00:17:35.480 --> 00:17:39.560
And well, we're not sure if it's going to stay forever.

00:17:39.560 --> 00:17:42.520
It's maybe, maybe a kind of a bold choice.

00:17:42.520 --> 00:17:46.280
Unless it's like a 10, 10 X multiplier of your productivity.

00:17:46.280 --> 00:17:48.720
I would just choose the boring thing.

00:17:48.720 --> 00:17:52.380
Well, your advice about CPython, you know, 3.10 versus 3.11.

00:17:52.380 --> 00:17:55.680
It's not the same as Django versus FastAPI, right?

00:17:55.680 --> 00:18:00.140
It's like the evolution of the thing, but you could always roll back a little bit, right?

00:18:00.140 --> 00:18:01.580
It's, it's a little bit different.

00:18:01.580 --> 00:18:02.360
Oh yes, absolutely.

00:18:02.360 --> 00:18:06.400
So it's like, I don't know, Postgres 13, 14 and so on and so on.

00:18:06.400 --> 00:18:09.620
At the same time, like, you know, kind of obviously technology changes.

00:18:09.620 --> 00:18:14.520
And even if we're not talking bugs, but just plant deprecations, that there might be some disruption

00:18:14.520 --> 00:18:17.840
when, whether, you know, upgrading to a newer Python version.

00:18:17.840 --> 00:18:22.940
Nowadays, much smoother than it was between Python 2 and Python 3.

00:18:22.940 --> 00:18:24.540
So it shouldn't be a big deal.

00:18:24.540 --> 00:18:29.460
But it might be a deal depending on what third party libraries you're using.

00:18:29.460 --> 00:18:31.940
So yeah, obviously there's considerations for you,

00:18:31.940 --> 00:18:37.020
which is why we would like you to test with 3.12, like in your CIs and so on and so on.

00:18:37.020 --> 00:18:37.520
It's already there.

00:18:37.640 --> 00:18:40.440
Just put it as a run target.

00:18:40.440 --> 00:18:41.340
Yes.

00:18:41.340 --> 00:18:46.040
But you know, kind of when it, when it comes to third party projects, I am usually very boring.

00:18:46.040 --> 00:18:52.300
And, you know, kind of, I was the last person from my friends to actually adopt VS Code and

00:18:52.300 --> 00:18:54.180
the last person to adopt Phish.

00:18:54.180 --> 00:19:00.320
You know, like I was happily with Bash and then I switched to ZSH just at the time when it started

00:19:00.320 --> 00:19:02.740
being boring, you know, and I was like, come on, really?

00:19:03.100 --> 00:19:08.180
I kind of like my work to actually not depend on something that is extremely volatile.

00:19:08.180 --> 00:19:09.740
Yeah, that makes sense.

00:19:09.740 --> 00:19:10.020
Yeah.

00:19:10.020 --> 00:19:14.620
And I think it goes back to what Cecil was saying earlier about needing to have some sort of like

00:19:14.620 --> 00:19:16.560
framework for how you make these decisions.

00:19:16.560 --> 00:19:22.240
And so I think that it's important to call out that a lot of times you need, you need a base set

00:19:22.240 --> 00:19:24.700
of criteria when you're evaluating a tool, right?

00:19:24.700 --> 00:19:29.280
Like, please like check the license, make sure that you're even allowed to use this thing for

00:19:29.280 --> 00:19:30.080
whatever you're doing.

00:19:30.080 --> 00:19:35.160
And then a lot of it kind of gets into that risk tolerance where it sounds like Lukash probably

00:19:35.160 --> 00:19:39.380
is on like the very stable side of it versus the leading edge side, you know?

00:19:39.380 --> 00:19:43.280
And so you've got to say, do I care about doing the new and exciting thing?

00:19:43.280 --> 00:19:47.920
Or like, should I make the obvious choice to make sure that I have that long-term stability

00:19:47.920 --> 00:19:53.680
that you would get from, you know, choosing Django over FAPS API sort of situation?

00:19:54.260 --> 00:19:55.140
Yeah, absolutely.

00:19:55.140 --> 00:19:56.540
Gareth, how about you?

00:19:56.540 --> 00:20:00.740
You got some examples of decisions you had to make as your CTO role?

00:20:00.740 --> 00:20:05.220
I'm just thinking I'm very much in Lukash's world of boring is good.

00:20:05.220 --> 00:20:08.500
So, you know, it's, you always want to go for the tried and tested.

00:20:08.500 --> 00:20:14.080
If it's product, there's a marked difference between working in production and working in

00:20:14.080 --> 00:20:16.960
the, in the wider, in, in learning mode.

00:20:16.960 --> 00:20:21.220
So you've got Cecil's world of pulling the latest stuff, trying out new technology and playing.

00:20:21.640 --> 00:20:25.280
But if you're going to build a web frame, build a web app, then it's going to be hard

00:20:25.280 --> 00:20:29.340
not to choose Flask or Django still, because it's there, it's around.

00:20:29.340 --> 00:20:32.280
And at the moment, all my, all my current examples.

00:20:32.280 --> 00:20:37.720
So I, I'm currently at a company called My Energy and we process huge amounts of user data

00:20:37.720 --> 00:20:40.860
and we paid a company to write a platform for us.

00:20:40.860 --> 00:20:44.780
And it feels like they just went through npm and installed anything they ever wanted all

00:20:44.780 --> 00:20:45.300
the time.

00:20:45.300 --> 00:20:47.740
And now we're unpicking a load of...

00:20:47.740 --> 00:20:49.020
NPM install star, let's go.

00:20:49.420 --> 00:20:49.620
Yeah.

00:20:49.620 --> 00:20:54.420
And it, you know, and it feels like they're playing a drinking game with type, with TypeScript

00:20:54.420 --> 00:20:57.780
and this bit's functional and this bit's object orientated.

00:20:57.780 --> 00:21:02.400
And so, you know, picking technologies, not just picking technologies, picking paradigms.

00:21:02.400 --> 00:21:03.300
So it's TypeScript.

00:21:03.300 --> 00:21:04.000
That's great.

00:21:04.000 --> 00:21:05.100
But is it functional?

00:21:05.100 --> 00:21:06.060
Is it object orientated?

00:21:06.060 --> 00:21:07.280
Is it procedural?

00:21:07.280 --> 00:21:10.640
And the answer is this bit is, and this bit isn't, and this bit's over here.

00:21:10.680 --> 00:21:12.520
And then we need a type boat.

00:21:12.520 --> 00:21:13.620
We need an ORM.

00:21:13.620 --> 00:21:18.340
So it feels like they pull in the only ORM that they've seen in a tutorial that somebody,

00:21:18.340 --> 00:21:19.500
somebody's written.

00:21:19.500 --> 00:21:22.380
So we've got TypeORM, which doesn't do migrations and you're stuck.

00:21:22.380 --> 00:21:27.760
And we've got a massive pile of technical debt on a brand new project, which you're having

00:21:27.760 --> 00:21:31.180
to unpick because no one consciously chose the projects.

00:21:31.180 --> 00:21:32.180
Or is it known?

00:21:32.180 --> 00:21:40.120
In my last gig, we spent a lot of time because I've got horror stories about Zoop.

00:21:40.660 --> 00:21:45.440
But there's, you know, we spent a lot of time choosing the right framework and having the

00:21:45.440 --> 00:21:50.280
right reasons and put in a lot of effort into writing proof of concepts because we knew the

00:21:50.280 --> 00:21:51.000
traffic demands.

00:21:51.000 --> 00:21:52.080
We knew what we were doing.

00:21:52.080 --> 00:21:56.640
And we went Flask and we went certain technologies in AWS.

00:21:56.640 --> 00:21:57.480
We went Docker.

00:21:57.480 --> 00:22:03.100
We went and just follow this route through choosing things to be stable and scalable, not necessarily

00:22:03.100 --> 00:22:05.580
the latest and greatest, not necessarily the most cutting edge.

00:22:05.580 --> 00:22:09.080
We just wanted to make sure it was, we could develop on it.

00:22:09.080 --> 00:22:13.500
And even then we chose, badly chose a library because somebody followed tutorial.

00:22:13.500 --> 00:22:18.120
We didn't really think about end up using a REST framework that got deprecated.

00:22:18.120 --> 00:22:23.440
And so, you know, there's, you have to put the effort into choosing the right things and

00:22:23.440 --> 00:22:25.820
be okay with going, I don't care if we're not cutting edge.

00:22:25.820 --> 00:22:29.740
We let Cecil be cutting edge and go and play in his dev advocate role.

00:22:29.740 --> 00:22:33.380
And then once it's in production in other places, then you use it.

00:22:33.380 --> 00:22:33.660
Yeah.

00:22:33.660 --> 00:22:37.540
This distinction between like, what do you choose in production and what you choose other

00:22:37.540 --> 00:22:37.880
places.

00:22:37.880 --> 00:22:40.980
Also, you know, it doesn't necessarily have to be just learning, right?

00:22:40.980 --> 00:22:44.540
It could be, well, here's some tools that just like kind of pull in data and process it.

00:22:44.540 --> 00:22:48.980
But if it's not perfect, it, the website is not going to go down and we're not going to

00:22:48.980 --> 00:22:53.520
lose, you know, a thousand dollars a second until somebody fixes that type of situation,

00:22:53.520 --> 00:22:53.760
right?

00:22:53.760 --> 00:22:55.500
It's, oh, somebody's got to fix the ETL.

00:22:55.680 --> 00:23:01.360
Well, and I think that's another big part of it is in most companies, your job or your

00:23:01.360 --> 00:23:05.680
function with the company is not supporting a web framework or building out features within

00:23:05.680 --> 00:23:06.780
a web framework.

00:23:06.780 --> 00:23:12.480
You're trying to implement whatever business logic you need beyond that.

00:23:12.840 --> 00:23:17.560
So going to something tried and true or older is going to let you do that.

00:23:17.560 --> 00:23:20.940
And it may not exactly meet your use case.

00:23:20.940 --> 00:23:26.900
But like Lukash was saying, once you have enough, once that's, if you have enough revenue,

00:23:26.900 --> 00:23:27.800
that that's a problem.

00:23:27.800 --> 00:23:31.800
If you're Instagram or Facebook, well, that's a good problem to have.

00:23:31.800 --> 00:23:33.480
You can deal with it at that point.

00:23:33.480 --> 00:23:34.000
Yeah.

00:23:34.000 --> 00:23:35.000
Yeah, absolutely.

00:23:35.000 --> 00:23:38.660
Well, and for you, Dan, the situation might be a little bit different as well.

00:23:38.660 --> 00:23:40.960
Being more doing like ML type of things.

00:23:41.100 --> 00:23:43.360
There's less tried and true, right?

00:23:43.360 --> 00:23:43.620
Yeah.

00:23:43.620 --> 00:23:48.400
The ML of two years ago is laughed at by the ML of today, right?

00:23:48.400 --> 00:23:48.820
Yeah.

00:23:48.820 --> 00:23:49.940
It's changing so fast.

00:23:49.940 --> 00:23:52.800
It's hard to say we're going to pick stable because you give up a lot by doing that.

00:23:52.800 --> 00:23:53.660
Yeah, for sure.

00:23:53.660 --> 00:23:55.340
A lot of stuff we worked on.

00:23:55.340 --> 00:24:01.960
And I think some of it is that I've spoken with folks who are building ML companies and

00:24:01.960 --> 00:24:07.360
they're like, yeah, the scale you're operating at is like 10 times or 100 times anything

00:24:07.360 --> 00:24:11.180
we've run for something that's an ML as a service platform.

00:24:11.180 --> 00:24:17.280
So we've had to build out some things where kind of existing frameworks didn't cut it for

00:24:17.280 --> 00:24:21.720
us, but it was first, can we actually use those existing frameworks?

00:24:21.720 --> 00:24:26.800
Because we ideally, we're not an ML platform company.

00:24:26.800 --> 00:24:32.940
We want to use whatever the framework is we can because that will get us our job done.

00:24:32.940 --> 00:24:40.180
Only when we can't do that, did we really need to go custom and kind of build things

00:24:40.180 --> 00:24:40.860
out for scale.

00:24:40.860 --> 00:24:46.760
It's easy to get into thinking like my job is to put this to work and make this framework

00:24:46.760 --> 00:24:49.000
as awesome as possible or to get it going just right.

00:24:49.000 --> 00:24:52.300
And really it's to deliver functionality to a business, right?

00:24:52.300 --> 00:24:53.580
That's just a means to an end.

00:24:53.580 --> 00:24:54.880
So yeah, for sure.

00:24:54.880 --> 00:24:58.400
I could maybe, maybe just a thought on that that began to be when we were talking about

00:24:58.400 --> 00:24:58.840
boring.

00:24:58.840 --> 00:25:03.860
The other thing that kind of can be very tempting is if me or I, the team, I come across

00:25:03.860 --> 00:25:05.120
a new fantastic tool.

00:25:05.120 --> 00:25:06.080
I think this looks great.

00:25:06.080 --> 00:25:06.860
Let's use this.

00:25:06.860 --> 00:25:10.420
I've been half an hour reading a tutorial that's going to point it out.

00:25:10.420 --> 00:25:11.880
I know everything there is to know about it.

00:25:11.880 --> 00:25:12.580
It must be great.

00:25:12.580 --> 00:25:13.980
I work it into the project.

00:25:13.980 --> 00:25:14.980
We don't touch it.

00:25:14.980 --> 00:25:16.080
You know, we make it work.

00:25:16.080 --> 00:25:17.420
We don't touch it for a week after that.

00:25:17.420 --> 00:25:21.300
Then I'm on leave three weeks from now on the beach somewhere and it goes wrong.

00:25:21.300 --> 00:25:24.020
Have I bothered to tell the rest of my team how this thing works?

00:25:24.080 --> 00:25:27.460
Because I've chosen something that isn't boring, you know, that doesn't fit in with

00:25:27.460 --> 00:25:28.660
the stuff the rest of us all know.

00:25:28.660 --> 00:25:30.240
And now there's a huge problem there.

00:25:30.240 --> 00:25:32.240
So there's, you want to give a bit of thought to that as well.

00:25:32.240 --> 00:25:33.880
You want to be consistent with the stuff you use.

00:25:33.880 --> 00:25:38.040
Sometimes, as Gareth was saying, in terms of paradigm, there might be shiny toys that

00:25:38.040 --> 00:25:39.180
don't fit in with the rest of it.

00:25:39.180 --> 00:25:41.040
And I'm afraid you've got to leave the shiny toy behind.

00:25:41.040 --> 00:25:44.280
Unless, I mean, for, again, we are talking in the, what you're paid to do.

00:25:44.280 --> 00:25:47.460
So it's obviously the toy you own and your own bat, shiny toy away.

00:25:47.460 --> 00:25:47.860
Yeah.

00:25:47.860 --> 00:25:50.300
You got to think about the team buy-in as well.

00:25:50.300 --> 00:25:52.100
If our group's going to be using it, right?

00:25:52.260 --> 00:25:57.560
We fund development sprints and we fund hack days to play with things.

00:25:57.560 --> 00:26:02.720
So let's get, if you've got an idea for, you know, do you fancy using FastAPI?

00:26:02.720 --> 00:26:07.840
Then let's build a small thing in it and we'll put a small project in, see how it works, see

00:26:07.840 --> 00:26:08.400
how it deploys.

00:26:08.400 --> 00:26:13.420
But don't bet the farm on it until you're certain about it.

00:26:13.500 --> 00:26:15.180
That's a great, great way to do it, right?

00:26:15.180 --> 00:26:17.580
It's sort of a more structured way to experiment.

00:26:17.580 --> 00:26:20.820
So I'll share a quick story with you all here.

00:26:20.820 --> 00:26:24.720
Recently, I wanted to re-kindle my blogging.

00:26:24.720 --> 00:26:25.500
I don't know.

00:26:25.500 --> 00:26:28.540
Social media and places are a little scrambled these days.

00:26:28.540 --> 00:26:32.140
So I thought it might be a good idea to have something written as well that I can point to.

00:26:32.140 --> 00:26:36.260
So I went to make this website and I thought it's something simple, something marked down,

00:26:36.260 --> 00:26:36.960
something static.

00:26:37.460 --> 00:26:39.760
And I don't know, I've done that.

00:26:39.760 --> 00:26:41.620
My last blog was on WordPress.

00:26:41.620 --> 00:26:43.720
I don't want to use WordPress anymore.

00:26:43.720 --> 00:26:47.340
I don't want to have a database for my blog.

00:26:47.340 --> 00:26:48.460
That seems like overkill.

00:26:48.460 --> 00:26:51.780
So I'm like, all right, well, what do I do to decide?

00:26:51.780 --> 00:26:59.380
So I went out to the community and I asked, hey, I'm thinking about this static website blog thing.

00:26:59.380 --> 00:27:02.460
Python tools preferred, but I'm open for anything.

00:27:02.620 --> 00:27:05.100
And Kim, I think you even maybe weighed in on this thread over here.

00:27:05.100 --> 00:27:05.840
I think I did, you know.

00:27:05.840 --> 00:27:06.760
Yeah, I think you did.

00:27:06.760 --> 00:27:09.360
And I got a bunch of different feedback.

00:27:09.360 --> 00:27:15.560
And so my solution to sort of exploring this place where I felt a little unqualified,

00:27:15.560 --> 00:27:18.940
I didn't have really much experience with, was to go out and ask.

00:27:18.940 --> 00:27:22.100
And the answer I got back really surprised me.

00:27:22.100 --> 00:27:24.620
I thought, well, maybe it's going to be Pelican or Ghost.

00:27:24.620 --> 00:27:28.380
But a bunch of people started saying, Hugo, Hugo, this thing is Hugo.

00:27:28.380 --> 00:27:29.160
It's amazing.

00:27:29.740 --> 00:27:32.980
Obviously, there were people saying Pelican and Sphinx and whatnot.

00:27:32.980 --> 00:27:41.420
So I ended up going with Hugo, which was a bit of a struggle for me to decide because it's unbelievably good.

00:27:41.420 --> 00:27:42.900
Kim, are you using Hugo as well?

00:27:42.900 --> 00:27:44.280
Yes, yeah, for a couple of things.

00:27:44.280 --> 00:27:45.260
It's glorious.

00:27:45.260 --> 00:27:48.400
It's so nice for writing, but it's written in Go.

00:27:48.520 --> 00:27:50.520
And so it's like, well, can I?

00:27:50.520 --> 00:27:53.720
I can't really fix it or tweak it as easily.

00:27:53.720 --> 00:27:55.720
But in the end, I decided, you know what?

00:27:55.720 --> 00:28:00.200
It's more important to have something that works really, really good that has got a lot of popular support

00:28:00.200 --> 00:28:03.540
than having something that is in a language I'm an expert in.

00:28:03.540 --> 00:28:05.760
So I'd kind of like to hear your all thought.

00:28:05.760 --> 00:28:08.480
If you're in that kind of situation, what's your process?

00:28:08.480 --> 00:28:09.680
How do you come to these decisions?

00:28:09.680 --> 00:28:17.860
Well, I kind of redesigned my own blog when I kind of got the new job because it's like, oh, I need to communicate.

00:28:17.860 --> 00:28:19.960
So I went through a similar process.

00:28:19.960 --> 00:28:28.240
What I ended up doing is, and you know, obviously it's a super anti-pattern, but it turned out to be super successful, which is just write your own.

00:28:28.320 --> 00:28:31.880
And obviously everybody writes their own static site generator.

00:28:31.880 --> 00:28:43.680
But like, I'll be honest with you, like with Python in 2020 and 2021 and 2022 now, like it is so simple because they're like all the building blocks are there.

00:28:43.680 --> 00:28:47.800
Like you're not, you're not writing strings of HTML into a file.

00:28:47.800 --> 00:28:51.320
Like, you know, like all of those kind of building blocks are done for you.

00:28:51.460 --> 00:29:04.820
And just let me bring up like for you how big my huge site generator is because it's like, it's super tiny, but it actually handles like everything I wanted to the extent where I'm using it for a couple of sites right now.

00:29:04.820 --> 00:29:11.440
And it's like what, and it's under 2000 lines of code at the moment, like the entire thing.

00:29:11.440 --> 00:29:13.320
So it's like, it's not super big.

00:29:13.320 --> 00:29:17.300
And it was growing like, you know, in time when I was adding new stuff to it.

00:29:17.300 --> 00:29:22.440
For example, at first I just did not have RSS at all because I was like, this thing is dead.

00:29:22.440 --> 00:29:24.340
Like nobody needs RSS anymore.

00:29:24.340 --> 00:29:28.660
And then a bunch of people just told, tell me like, Hey, like, why don't you have RSS?

00:29:28.660 --> 00:29:34.860
So I just added it like later on, you know, and it's just what, like, oh, we have XML in the standard library.

00:29:34.860 --> 00:29:37.360
And there's actually like, yeah, RSS libraries too.

00:29:37.360 --> 00:29:38.700
But like, this is so simple.

00:29:38.700 --> 00:29:42.000
You just have like, you know, this one template that you need to output.

00:29:42.280 --> 00:29:48.700
So, you know, kind of, I did my own thing and I can now write on the footer of the site that was generated with Python 3.10.

00:29:48.700 --> 00:29:51.040
I should just recreate the virtual.

00:29:51.040 --> 00:29:54.500
And so I'll, I'll be able to say 3.11, but you know, kind of.

00:29:54.500 --> 00:29:55.660
Then you'll be cutting edge.

00:29:55.660 --> 00:29:56.260
So yes.

00:29:56.260 --> 00:30:08.820
But like the reason why I actually did this was that all the notes that you're seeing there, you know, kind of, if you feel like click through the thing, like they are in fact, like in Markdown in my notes.

00:30:08.820 --> 00:30:10.820
So I'm kind of crazy about having notes.

00:30:10.820 --> 00:30:13.200
So like, I have a lot of them, right?

00:30:13.200 --> 00:30:20.880
So I have like thousands of them and they're like all in Markdown and like in a Git repository, synchronized over to my phone and whatever.

00:30:20.880 --> 00:30:23.640
So I can always just access them in a plane or whatever.

00:30:23.640 --> 00:30:31.360
So those are just tagged hashtag public in the Markdown text and they appear on the website and it's kind of automatic.

00:30:31.360 --> 00:30:34.220
So I don't actually have like a CMS for this.

00:30:34.220 --> 00:30:38.680
I just have my notes app that I'm using is FS notes is open source.

00:30:38.680 --> 00:30:39.740
It works on the Mac.

00:30:39.740 --> 00:30:41.020
It's glorious.

00:30:41.020 --> 00:30:49.360
And it's also, you know, on iOS and, you know, and you just kind of generate HTML out of that, which is pretty simple.

00:30:49.640 --> 00:30:59.340
And I can automate a bunch of stuff with this just kind of custom made, which with Hugo, I probably could do, but, you know, I would have to learn how, and I already know Python.

00:30:59.340 --> 00:31:03.880
So it was really, it really took me no time to get this up there.

00:31:03.960 --> 00:31:06.800
And it kind of works on the phone and it's okay.

00:31:06.800 --> 00:31:11.340
It's not, it's not going to kind of wow you, but it's a perfectly functional website, you know.

00:31:11.340 --> 00:31:11.600
Yeah.

00:31:11.600 --> 00:31:16.120
Jay out of the audience says, building your own static site generator is a great way to learn a lot about language.

00:31:16.120 --> 00:31:19.280
I learned a lot for you just maintaining my own static.

00:31:19.280 --> 00:31:23.140
I mean, choosing static sites is an interesting choice on its own, right?

00:31:23.140 --> 00:31:29.220
It's the DevOps story is incredibly nice that you don't have to worry about, you know, will the database go down?

00:31:29.220 --> 00:31:33.580
What, what kind of problem is, you know, it's, it's either going to be there or it's just not there.

00:31:33.580 --> 00:31:35.420
Will the database go down?

00:31:35.420 --> 00:31:48.400
The unspoken, the unconsidered problem until you're in the DevOps space on a non-static site is when your internal department would like us version of the site, they can change the CMS on to make sure it all looks good before they roll it to production.

00:31:48.400 --> 00:31:52.920
Now you've got to get database exports across into a different database, or you've got to get migrations going.

00:31:52.920 --> 00:32:02.640
But I had, not that I would ever do a thing like this, but you might have to have two versions of Docker running in direct production so that you can do a live MySQL copy of MySQL files from one to the other.

00:32:03.200 --> 00:32:03.560
There you go.

00:32:03.560 --> 00:32:04.620
I would never do that.

00:32:04.620 --> 00:32:05.640
Of course, of course.

00:32:08.420 --> 00:32:11.400
This portion of Talk Python To Me is brought to you by Sentry.

00:32:11.400 --> 00:32:14.260
How would you like to remove a little stress from your life?

00:32:14.260 --> 00:32:20.260
Do you worry that users may be encountering errors, slowdowns, or crashes with your app right now?

00:32:20.260 --> 00:32:23.300
Would you even know it until they sent you that support email?

00:32:23.300 --> 00:32:33.720
How much better would it be to have the error or performance details immediately sent to you, including the call stack and values of local variables and the active user recorded in the report?

00:32:34.160 --> 00:32:37.120
With Sentry, this is not only possible, it's simple.

00:32:37.120 --> 00:32:40.700
In fact, we use Sentry on all the Talk Python web properties.

00:32:40.700 --> 00:32:47.240
We've actually fixed a bug triggered by a user and had the upgrade ready to roll out as we got the support email.

00:32:47.240 --> 00:32:49.220
That was a great email to write back.

00:32:49.720 --> 00:32:52.620
Hey, we already saw your error and have already rolled out the fix.

00:32:52.620 --> 00:32:54.040
Imagine their surprise.

00:32:54.040 --> 00:32:56.240
Surprise and delight your users.

00:32:56.240 --> 00:33:00.300
Create your Sentry account at talkpython.fm/sentry.

00:33:00.580 --> 00:33:11.980
And if you sign up with the code Talk Python, all one word, it's good for two free months of Sentry's business plan, which will give you up to 20 times as many monthly events as well as other features.

00:33:11.980 --> 00:33:16.380
Create better software, delight your users, and support the podcast.

00:33:16.380 --> 00:33:21.360
Visit talkpython.fm/sentry and use the coupon code Talk Python.

00:33:24.040 --> 00:33:25.500
But it's also unhackable.

00:33:25.500 --> 00:33:26.720
That's an interesting...

00:33:26.720 --> 00:33:27.180
There is that.

00:33:27.180 --> 00:33:30.140
Yeah, the worst thing that could happen is it could deface.

00:33:30.140 --> 00:33:30.940
It could get defaced.

00:33:30.940 --> 00:33:39.200
I guess somebody could put some JavaScript malware on it if they took it over, but it's not open to little Bobby tables or denial of service to a large degree.

00:33:39.200 --> 00:33:39.700
You're right.

00:33:39.700 --> 00:33:40.440
That's a good point.

00:33:40.440 --> 00:33:41.320
Hard to hack.

00:33:41.320 --> 00:33:42.420
Very hard to hack.

00:33:43.220 --> 00:33:49.440
Well, for me, the most important thing that this literally just runs on the free tier, like on Netlify, and, you know, it just...

00:33:49.440 --> 00:33:49.580
Yeah.

00:33:49.580 --> 00:33:50.280
It's good.

00:33:50.280 --> 00:33:56.300
Mine is on Netlify as well, and I gotta say, it's really, really a relieving nice thing.

00:33:56.300 --> 00:34:01.620
One comment that we were making about picking a library, something that you pointed out and that Luke was just saying as well.

00:34:01.620 --> 00:34:04.900
There is something to be said for making sure you can fix it if it breaks.

00:34:04.900 --> 00:34:08.120
But I think to the large degree, it depends on how...

00:34:08.120 --> 00:34:09.500
I suppose it depends on several things.

00:34:09.500 --> 00:34:12.720
How important the thing is to you, how quickly you can change it if it does break.

00:34:13.120 --> 00:34:16.020
And how kind of big the thing is.

00:34:16.020 --> 00:34:25.600
It never occurred to me, for example, using Hugo, it didn't worry me too much that I don't know any go and I can't fix it because it's a big enough tool that I can probably make it do what I want.

00:34:25.600 --> 00:34:27.360
But I've got pretty simple needs.

00:34:27.360 --> 00:34:40.180
If I was picking a very fast, something really low level in kind of my previous C life, for example, to talk to the flash memory as fast as I can, I'd probably want to write that because, or at least know that I can fix the thing I got.

00:34:40.180 --> 00:34:42.620
Because maybe I need to be able to tweak it or otherwise.

00:34:43.020 --> 00:34:44.680
It also depends on what you need the thing for.

00:34:44.680 --> 00:34:46.560
How much does it matter?

00:34:46.560 --> 00:34:48.100
Whether you can tweak it or not.

00:34:48.100 --> 00:34:50.980
It's supposed to depend largely on how important it becomes to your project.

00:34:50.980 --> 00:34:56.180
The downside, of course, when you do that decision six months later and it's super important, now you're stuck.

00:34:56.180 --> 00:34:57.200
Now you're on the hook.

00:34:57.760 --> 00:34:58.360
I'm like you.

00:34:58.360 --> 00:34:59.180
I don't know any go.

00:34:59.180 --> 00:34:59.940
Not really.

00:34:59.940 --> 00:35:03.180
I mean, I've read like a paragraph of sample code to know what it looks like.

00:35:03.180 --> 00:35:03.840
But that's about it.

00:35:03.840 --> 00:35:12.020
But for me, it was okay to pick Hugo that is a go tool because it's not actually running while you interact with my website.

00:35:12.420 --> 00:35:20.260
If I was picking a go alternative to Flask, that would be a really big consideration because I'd have to kind of write code and live in it.

00:35:20.260 --> 00:35:24.080
Here's the thing I run on the command line and it either makes the static site or it doesn't.

00:35:24.180 --> 00:35:28.040
So it's not, you know, in the important path of interactions.

00:35:28.040 --> 00:35:29.920
You could swap it out without your website breaking.

00:35:29.920 --> 00:35:35.280
The end result will still be up and live on the website while you're replacing Hugo with something else if you want to.

00:35:35.280 --> 00:35:35.640
Yeah, exactly.

00:35:35.640 --> 00:35:36.880
There's a consideration there.

00:35:36.880 --> 00:35:40.580
Go down the Lucas route and try to recreate the same look and feel.

00:35:40.580 --> 00:35:41.480
Yeah.

00:35:41.480 --> 00:35:51.580
So unlikely it would break and not be fixed by core Hugo devs or like the surface of the application is relatively well defined.

00:35:51.900 --> 00:36:04.360
That brings me to the next thing here is when you go to an open source project and you find it on GitHub, how much does stuff like this Hugo thing has been forked 7,000 times and has 64,000 stars?

00:36:04.360 --> 00:36:06.800
Like, okay, if it breaks, someone else will fix it.

00:36:06.800 --> 00:36:07.820
Not my problem.

00:36:07.820 --> 00:36:13.480
If it had six stars and it breaks, it might be my problem if it breaks, even though it's not my project.

00:36:13.480 --> 00:36:20.920
How do you all think about that when you are choosing projects or Emily or Cecil in your case is recommending technologies?

00:36:21.240 --> 00:36:23.760
Yeah, I think for me, this is just my personal opinion.

00:36:23.760 --> 00:36:27.120
Like things like forks and stars are like vanity metrics for me.

00:36:27.120 --> 00:36:29.100
Like I don't really care, to be honest with you.

00:36:29.100 --> 00:36:34.800
I do care if, you know, it, one, it solves the problem I'm trying to deal with.

00:36:34.800 --> 00:36:42.420
You know, can I submit an issue and get, you know, relatively like within six months, like someone answered me fairly quickly.

00:36:42.420 --> 00:36:43.940
Like I don't want to wait for a response.

00:36:44.160 --> 00:36:48.040
And, you know, is it, is it, you know, are there commits being, even to that too, right?

00:36:48.040 --> 00:36:49.440
Like when I say, are there commits being made?

00:36:49.440 --> 00:36:53.800
You don't need to be making commits like every day and every hour or every week or every month.

00:36:53.800 --> 00:37:04.060
If I see the, like the last commit was like five years ago, I'm like, okay, well, if I have a problem, I don't know if this is the thing that I need to dump into because I don't know if I'm going to be able to get the support that I need.

00:37:04.120 --> 00:37:10.240
Well, you still might take it, but then you would have to take it on the assumption that you might have to write the fix or add the feature.

00:37:10.240 --> 00:37:10.660
Sure.

00:37:10.660 --> 00:37:13.040
So I'm going to use you as an example, Michael.

00:37:13.040 --> 00:37:19.500
So if you decided to go with Hugo and there was an issue with Hugo and you don't know go and you're like, oh shoot, what am I going to do?

00:37:19.500 --> 00:37:24.660
Now you're going to be in a position that you can either learn go or you're going to swap it out and go with something else.

00:37:24.660 --> 00:37:24.880
Right.

00:37:24.880 --> 00:37:27.280
But, you know, like, what do you, what do you do?

00:37:27.280 --> 00:37:30.200
I think I'd rather rewrite it from scratch than learn go.

00:37:30.200 --> 00:37:31.080
Well, see, so see.

00:37:31.080 --> 00:37:32.720
Not that I hate go or anything.

00:37:32.820 --> 00:37:37.540
I just like, you know, I think thinking of just a time effort sort of trade off, you know?

00:37:37.540 --> 00:37:37.860
Yeah.

00:37:37.860 --> 00:37:43.040
So again, for me, it's mainly just about like, how do we like, does it solve the thing that I want to solve?

00:37:43.040 --> 00:37:48.740
And then can I get like some level of support, you know, questions answered and documentation and stuff like that?

00:37:48.740 --> 00:37:48.880
Yeah.

00:37:48.880 --> 00:37:53.440
So when I looked at this, you know, commit last commit yesterday, there's a bunch of issues.

00:37:53.440 --> 00:37:58.880
But if you look at, say, the closed ones, there were issues closed a couple hours ago.

00:37:58.880 --> 00:38:02.400
Full requests, I suspect probably those are linked together.

00:38:02.400 --> 00:38:02.700
Right.

00:38:02.700 --> 00:38:04.940
So there's clearly the life in this project.

00:38:04.940 --> 00:38:06.780
And to me, that probably is enough.

00:38:06.780 --> 00:38:07.740
How about the rest of you?

00:38:07.740 --> 00:38:08.760
Emily, what do you think?

00:38:08.760 --> 00:38:09.820
Yeah, I totally agree.

00:38:09.820 --> 00:38:14.980
I think these are exactly the things that I look at is, you know, are things getting updated or commits getting in?

00:38:14.980 --> 00:38:19.960
You know, if it hasn't had a commit in a year or two, sometimes that's still okay.

00:38:19.960 --> 00:38:20.320
Right.

00:38:20.360 --> 00:38:28.320
Like sometimes you're looking at Django reset password library that like, yeah, it's just, it's continued to work over time.

00:38:28.320 --> 00:38:31.940
And you don't necessarily need new features added to a reset password kind of thing.

00:38:31.940 --> 00:38:35.680
So knowing kind of what you're looking at and what you need out of it, I think is still important.

00:38:35.680 --> 00:38:37.000
But I totally agree.

00:38:37.000 --> 00:38:40.460
You know, forks and stars, even downloads are kind of vanity metrics.

00:38:40.720 --> 00:38:45.560
I also think that something else that I always look at is, what is the audience of the tool, right?

00:38:45.560 --> 00:39:02.680
So Hugo is very much geared towards a community of people building for, you know, mass numbers to use it versus a tool that maybe, you know, Lukash's static site generator is probably very tuned to the things that he needs to do with it, that he could opt to open source it.

00:39:02.680 --> 00:39:05.880
But it's not going to be a tool for the message.

00:39:05.880 --> 00:39:07.480
We have a visual decline.

00:39:07.480 --> 00:39:09.460
Just a, hmm, no, enough projects.

00:39:10.960 --> 00:39:18.980
Knowing what you're getting out of it and knowing like what that sort of feature roadmap is going to be, either it's like, it is at a stable point and it's not going to change.

00:39:18.980 --> 00:39:29.220
This is something that is going to be very opinionated for someone's specific use case versus like Hugo is going to continue adding functionality that would serve a broader group of people.

00:39:29.220 --> 00:39:33.920
And just using that as part of your metrics for deciding if that tool fits your needs.

00:39:34.140 --> 00:39:44.860
One thing that I used to do is I look if the last comment on the thing doesn't need to be super recent, but like, is the build red or green?

00:39:44.860 --> 00:39:51.980
And if it's red and like, I'm like, you know, I don't like seeing red in the last comment on the project I want to use.

00:39:52.200 --> 00:40:02.320
And often if that would be a critical dependency, I would in fact just clone it locally and just try to just build it and see if tests pass on my end.

00:40:02.320 --> 00:40:03.300
And if they do good.

00:40:03.300 --> 00:40:12.500
And if I cannot download some dependencies or like pytest has like 15, you know, failures or whatever else, then I'll be like kind of more skeptical now.

00:40:12.500 --> 00:40:21.440
Because obviously if you are installing a package with pip install, unlike with CPAN in the Perl universe, you run no tests.

00:40:21.440 --> 00:40:26.340
So you kind of only the only thing you know is that the files were put in the right place.

00:40:26.340 --> 00:40:30.740
But whether they are going to work, well, you're just going to find out like at runtime, I guess.

00:40:30.740 --> 00:40:31.320
So yeah.

00:40:31.320 --> 00:40:35.360
So like every now and again, I would just try to build something when I actually depend on it.

00:40:35.360 --> 00:40:48.260
But, you know, kind of that's if it's really critical because all of the dependencies like, yes, like even downloads are a vanity metric because if, you know, push comes to shove, I can just vendor in the dependency and fix it myself.

00:40:48.260 --> 00:40:52.620
Well, there's also a project that you have a little involvement with that it's got a few downloads, right?

00:40:52.620 --> 00:40:53.400
Yeah.

00:40:53.400 --> 00:41:02.220
So like when Emily said that it's a vanity metric, like my heart was, you know, like kind of hit like right in the middle because, yeah, I live by those downloads, man.

00:41:02.220 --> 00:41:03.160
Like it's awesome.

00:41:03.360 --> 00:41:06.240
I have never expected this to go so big.

00:41:06.240 --> 00:41:12.320
So like, you know, it's still sometimes like I would just like sit and drink coffee and just suddenly think, how did that ever happen?

00:41:12.320 --> 00:41:13.760
It's just, you know, it's mind blowing.

00:41:13.760 --> 00:41:22.420
But actually, so I didn't mention it, but I think that this is a really good example of a library that is very clear about what you're getting from it, right?

00:41:22.420 --> 00:41:29.540
Like uncompromising code formatter, like it's very clear that it's very opinionated and that a lot of it came from you.

00:41:29.820 --> 00:41:43.500
And, you know, the joke that I was going to make is like, you know, with Black, like, even if you need setups.cfg support, you are not going to be able to just add it and open a PR and get it merged in.

00:41:43.620 --> 00:42:01.280
So like, again, knowing what you're getting into of and I think that a lot of this opens up a conversation on the other side of this for open source maintainers of being aware and being cautious and being clear to your users of what you're putting out there to say, look, hey, I'm not going to maintain this.

00:42:01.340 --> 00:42:02.600
This is just something that's here.

00:42:02.600 --> 00:42:04.300
If you like it, use it.

00:42:04.300 --> 00:42:04.600
Great.

00:42:04.600 --> 00:42:11.780
But, you know, taking that extra step to make sure that you're telling people what you are willing to take on as a maintainer as well.

00:42:11.780 --> 00:42:18.600
For Black maintenance in particular, the fun thing was that I gathered like a team of people who are maintaining it now.

00:42:18.680 --> 00:42:34.500
And like, I do relatively little these days, honestly, like there's a bunch of people who are super like, you know, active and they make, they actually kind of shook me out of this kind of psychological block to like, you know, a stable version has to be perfect.

00:42:34.500 --> 00:42:35.620
We will never get there.

00:42:35.620 --> 00:42:41.920
And, you know, like over 2021, we churned out a lot of releases and now like, yeah, Black is stable.

00:42:41.920 --> 00:42:42.440
It's amazing.

00:42:42.440 --> 00:42:51.560
So another kind of consideration that you might have when you're looking at a library or a tool that you might use is like, is the bus factor one?

00:42:51.560 --> 00:42:59.760
Is there just like one stressed guy who just tries to kind of make it work after hours or like, are there a few people responding on the issues?

00:42:59.760 --> 00:43:02.580
You know, like, is there more than one person with the keys to the kingdom?

00:43:02.580 --> 00:43:08.260
Because sometimes if you lose the keys for whatever reason, like it's, you know, very disruptive.

00:43:08.260 --> 00:43:18.860
Like we had a bunch of libraries like that in the Python world where forks were necessary because, you know, the original maintainers like lost interest or life or whatever else.

00:43:18.860 --> 00:43:20.780
So, you know, things, things happen.

00:43:20.780 --> 00:43:27.500
I cannot really say that, you know, I did anything like that, like, you know, kind of, well, like I planned for it.

00:43:27.500 --> 00:43:32.080
Like it mostly happened by accident because it just had like nice contributors that I liked.

00:43:32.080 --> 00:43:36.720
So I just shared the right access with them and they ended up being very trustworthy.

00:43:36.720 --> 00:43:43.820
But, you know, a maintainer should do that at some point because you cannot just do everything, you know, by yourself.

00:43:43.820 --> 00:43:44.800
It's just impossible.

00:43:44.800 --> 00:43:46.300
The bus factor is interesting.

00:43:46.300 --> 00:44:04.900
There was this guy who had an npm project, JavaScript project, who had done some kind of like protesting thing, like swapped out his project to just print stuff infinitely and some kind of just really frustrated that it was Color.js and Faker.js.

00:44:04.900 --> 00:44:09.260
And it was really frustrated that companies were using the project and not paying for it.

00:44:09.400 --> 00:44:11.780
It was open source under like MIT or something.

00:44:11.780 --> 00:44:13.440
But, you know, that was his take.

00:44:13.440 --> 00:44:18.680
But then had a full on breakdown and got arrested for creating bombs in Queens, New York.

00:44:18.680 --> 00:44:20.140
That's an extreme example.

00:44:20.140 --> 00:44:21.300
But it can happen.

00:44:21.300 --> 00:44:22.360
Something could happen, right?

00:44:22.360 --> 00:44:27.400
Like, or, you know, somebody could just get actually in an accident or they could have a health crisis, right?

00:44:27.440 --> 00:44:28.900
Like, could be a place where it stops.

00:44:28.900 --> 00:44:30.440
So, considering that is...

00:44:30.440 --> 00:44:48.840
On the topic of bus factor for that matter, which, I mean, I think fairly obviously what it means, just in case anybody needs a definition, you know, if you're the guy, if you're the only person who knows how it works and you get hit by a bus tomorrow and you spend four weeks in hospital in the somewhat sanitized version of the theory, can somebody pick it up after you?

00:44:48.840 --> 00:44:57.400
And I think one of the things that does feed into picking tech stacks and tech stacks and so forth is the bus factor on the libraries and so forth is quite important.

00:44:57.400 --> 00:45:08.220
But what's also important is if it's a really complicated, super hard to use library or something that you need to be an expert in and you have one of those experts, you suddenly made a bus factor issue there too.

00:45:08.220 --> 00:45:15.400
Because now you need that expert to know what he's doing and be around and not choose to go to another company or be hit by a bus or any of those things.

00:45:15.580 --> 00:45:18.940
There's a consideration there for the complexity of a tool as well.

00:45:18.940 --> 00:45:20.300
Sometimes it's unavoidable.

00:45:20.300 --> 00:45:22.780
Sometimes some things that you have to do are complex.

00:45:22.780 --> 00:45:24.540
But if the tools are...

00:45:24.540 --> 00:45:26.740
If you're constantly picking the hardest thing there is...

00:45:26.740 --> 00:45:27.240
Well, hardest.

00:45:27.240 --> 00:45:32.460
If you're picking the most challenging thing to use because it's the most fun, you might want to be considering that as well.

00:45:32.460 --> 00:45:41.560
How simple is it for somebody else to sit down, pick up your work and keep going with the libraries you've chosen to use is a consideration you should probably be keeping in mind as well.

00:45:41.560 --> 00:45:41.760
Yeah.

00:45:41.760 --> 00:45:54.680
Sounds like Gareth's projects of these hackathons or these group experimental projects might help a little bit to give a little exposure to some of the new tech rather than somebody figured it out in their corner and then just added it.

00:45:54.680 --> 00:45:55.880
And everyone was like, great, it works.

00:45:55.880 --> 00:45:56.340
I love it.

00:45:56.340 --> 00:45:57.300
Yeah.

00:45:57.400 --> 00:46:09.380
One of the things I think is interesting there, just talking about the bus factor, it makes me think a lot of times when we're learning stuff, we don't often think about or when we're choosing things, we don't think about the human aspect that's attached to it.

00:46:10.060 --> 00:46:12.300
Which as technologists, it's just not a thing that we do.

00:46:12.300 --> 00:46:13.740
So again, like the bus factor, right?

00:46:13.740 --> 00:46:18.120
Like something bad happens to the person and now what do we do now, right?

00:46:18.120 --> 00:46:19.860
Like what is the next step, right?

00:46:19.860 --> 00:46:20.120
Yeah.

00:46:20.200 --> 00:46:34.380
Another thing that I've noticed a lot, again, like kind of thinking about like the humanity of learning is a lot of the times people choose things because the person to their right and their left, the person, the people that are in their circle of influence are using that thing.

00:46:34.380 --> 00:46:34.760
Right.

00:46:34.760 --> 00:46:36.000
So I'll give you an example.

00:46:36.000 --> 00:46:41.620
Like, so I go to a lot of like senior design showcases at colleges and universities and so on and so forth.

00:46:41.620 --> 00:46:45.380
And when I kind of look and I say, oh, well, why did you pick this language?

00:46:45.380 --> 00:46:46.800
Or why did you pick this cloud?

00:46:46.800 --> 00:46:48.040
Or why did you pick this framework?

00:46:48.040 --> 00:46:50.900
It's usually because the people around them are doing it too.

00:46:50.900 --> 00:46:51.440
Right.

00:46:51.440 --> 00:46:59.160
And the reason that is, is now, hey, if I pick the thing that like Michael is using or Emily is using or Kim is using, you know what?

00:46:59.160 --> 00:47:01.180
I have people that I could go ask the question.

00:47:01.180 --> 00:47:01.980
You know what I mean?

00:47:01.980 --> 00:47:05.660
So now I'm going to choose that thing, not because of any technical reason.

00:47:05.660 --> 00:47:08.660
I mean, obviously it has to do the thing I want it to do.

00:47:08.660 --> 00:47:14.340
But like the main reason I chose it is because like socially speaking, like I have people that I could go ask the question.

00:47:14.340 --> 00:47:18.240
And so now my confidence level in that project is a little bit higher because of that reason.

00:47:18.240 --> 00:47:20.800
Yeah, that's a really good, really important factor.

00:47:20.800 --> 00:47:31.960
Yeah, I think this hits the nail on the head because like even in Python, like a popular programming language, right, by all standards, we have parts of the standard library that was written by a person.

00:47:31.960 --> 00:47:33.660
And that person is no longer around.

00:47:33.820 --> 00:47:39.040
And now like we obviously can still, we have access to the code, like we have tests that are passing.

00:47:39.040 --> 00:47:41.320
We can still maintain the code, right?

00:47:41.320 --> 00:47:42.360
We can still mutate it.

00:47:42.360 --> 00:47:44.820
We can still make it to different things if we need to.

00:47:44.820 --> 00:47:54.260
But the one missing piece, which is sometimes needed and we don't have it anymore, is why certain, you know, choices were made originally.

00:47:54.680 --> 00:47:58.640
Because that kind of informs where we should go next, right?

00:47:58.640 --> 00:48:06.440
Like if something is kind of uncharacteristically convoluted and you see this and you're like, oh, I would simplify this, right?

00:48:06.440 --> 00:48:16.900
Like, you know, after a while of core development, you're like, every time you want this, there is a reason behind like every kind of, you know, like weird, weird part that you're going to find.

00:48:17.060 --> 00:48:22.040
But if there's nobody to ask the question to, like that complicates things a lot.

00:48:22.040 --> 00:48:35.960
And, you know, we have a bunch of situations where like that, where there's like a stalemate between a few possible approaches because we don't really have an opinion of the original author to go by to, to kind of make a choice.

00:48:36.240 --> 00:48:37.280
It's definitely a challenge.

00:48:37.280 --> 00:48:38.480
Gareth, were you trying to jump in there?

00:48:38.480 --> 00:48:39.460
Often as well.

00:48:39.460 --> 00:48:42.400
We make decisions because then it sounds cool.

00:48:42.400 --> 00:48:48.000
But actually the best decision you can make around framework or language is the one your team already knows.

00:48:48.000 --> 00:48:53.280
So your default thing should be, don't change unless there is a really good reason to change.

00:48:53.280 --> 00:49:00.900
Because you introduce, you know, I've seen companies have gone, we need to write a thing in Java because the industry does it in Java.

00:49:00.900 --> 00:49:04.600
But all they were was Perl and PHP devs.

00:49:04.600 --> 00:49:08.120
And so suddenly you have an entire stack that your developers can't maintain.

00:49:08.120 --> 00:49:13.720
So it might be the most perfect Java application in history, but no one you employ can actually do anything to it.

00:49:13.720 --> 00:49:15.740
Going a bit back to Cecil's thought, right?

00:49:15.740 --> 00:49:16.520
Keep the humans.

00:49:16.520 --> 00:49:18.900
You've got to deal with it in mind, not just the technology.

00:49:18.900 --> 00:49:19.160
Yeah.

00:49:19.160 --> 00:49:19.980
All right.

00:49:19.980 --> 00:49:21.700
I want to move on to another topic.

00:49:21.700 --> 00:49:23.040
We're getting short on time here.

00:49:23.040 --> 00:49:24.480
So maybe I'll throw this first to you, Dan.

00:49:24.900 --> 00:49:37.140
So when we were talking about the bus factor, obviously that's a person who is a maintainer of an open source project in the context we were saying before, or as Kim brought in that to like somebody at the company who has that expertise.

00:49:37.140 --> 00:49:51.260
But a really common and big bus factor is a company has a closed source project and they either go out of business or they get disinterested in continuing that project and you're in a bad place.

00:49:51.260 --> 00:49:59.560
So what I wanted to ask you all is how important do you see the open source side of things versus a closed source?

00:49:59.680 --> 00:50:01.880
Like let's say there's some project for a database.

00:50:01.880 --> 00:50:03.840
It's twice as good, but it's closed source.

00:50:03.840 --> 00:50:06.340
Choose it, not choose it, putting money aside.

00:50:06.340 --> 00:50:07.380
Suppose it's free.

00:50:07.380 --> 00:50:12.360
I mean, I guess I generally say is how hard is it to change out for something else?

00:50:12.360 --> 00:50:12.940
Okay.

00:50:12.940 --> 00:50:18.460
Like is it Postgres, but 2x is fast Postgres or Postgres.

00:50:18.460 --> 00:50:18.660
Right.

00:50:18.660 --> 00:50:24.180
Or is it Microsoft SQL server, but it's still relational and you probably just migrate that data to Postgres or something.

00:50:24.180 --> 00:50:31.280
Yeah, I think the risk is really if you're using this and it goes away and then you're stuck.

00:50:31.280 --> 00:50:33.580
That is definitely a real risk.

00:50:33.580 --> 00:50:43.420
And I have seen that happen with companies that actually had to rewrite their entire code base because they use something proprietary that then was decided.

00:50:43.420 --> 00:50:43.960
Stopped.

00:50:43.960 --> 00:50:45.220
There's one specifically.

00:50:45.220 --> 00:50:46.540
It's not profitable enough.

00:50:46.540 --> 00:50:48.780
So your project stops.

00:50:48.880 --> 00:50:49.320
Exactly.

00:50:49.320 --> 00:50:49.700
Yeah.

00:50:49.700 --> 00:50:51.740
This one, it was called QA Studio.

00:50:51.740 --> 00:50:56.660
It was a finance, quant finance language, actually by Palantir.

00:50:56.660 --> 00:51:01.000
There was a hedge fund I knew that had fully adopted it.

00:51:01.000 --> 00:51:06.140
And then they actually made the reverse migration to Python after the fact.

00:51:06.140 --> 00:51:06.700
How about the SEO?

00:51:06.700 --> 00:51:07.300
What do you think?

00:51:07.300 --> 00:51:10.060
Well, where is that bar that you cross over?

00:51:10.280 --> 00:51:10.520
Yeah.

00:51:10.520 --> 00:51:16.560
I was reminded about kind of somewhat horrifying experience from my own career that Dan's just reminded me of.

00:51:16.560 --> 00:51:21.060
I've seen it happen with the third party software that the company's bought and then it's no longer available.

00:51:21.060 --> 00:51:33.620
But the other time I've seen it, and it ties into what we were saying about kind of picking things the team knows, is I've come across bits of software where somebody says, well, that's the app that Bob wrote 15 years ago using Visual Basic 4 or whatever it is.

00:51:34.120 --> 00:51:35.280
Nobody knows how to do it.

00:51:35.280 --> 00:51:38.480
It doesn't do what we need to do anymore, but we don't have the source.

00:51:38.480 --> 00:51:41.120
Even if we did have the source, we don't have a Visual Basic 4 compiler.

00:51:41.120 --> 00:51:42.300
Nobody understands it.

00:51:42.300 --> 00:51:43.720
We don't know how he built it.

00:51:43.720 --> 00:51:44.840
Bob is long gone.

00:51:44.840 --> 00:51:47.380
You need Windows 95 to build it.

00:51:47.380 --> 00:51:48.000
How do we get that?

00:51:48.000 --> 00:51:48.580
Well, exactly.

00:51:48.580 --> 00:51:50.140
All those things add up.

00:51:50.140 --> 00:51:54.200
And at the time, it's not to make you sound like Bob was an idiot.

00:51:54.200 --> 00:51:55.940
Bob did what Bob knew.

00:51:55.940 --> 00:51:59.720
Bob knew Visual Basic 4 and somebody said, let's turn out a tool as fast as possible.

00:51:59.900 --> 00:52:09.260
Bob can do it for us today, and Bob did, and the tool works, and it's fine, and you don't think anything about it until way down the line, and nobody knows how to maintain the thing.

00:52:09.260 --> 00:52:13.620
So there's an argument to be had for where do the libraries and so forth you pick.

00:52:13.620 --> 00:52:20.120
If you're not picking things that everybody knows, or at least that huge chunk of you know, sooner or later you run out of people who know how to maintain these things.

00:52:20.120 --> 00:52:24.340
But as I say, not to maliciousness, just through, you know, I need it done fast.

00:52:24.340 --> 00:52:27.900
If you ask Bob to do it fast, Bob's going to do it in Visual Basic 4 because that's what Bob knew.

00:52:27.900 --> 00:52:29.100
And that's fine.

00:52:29.100 --> 00:52:31.340
And that might have been a totally decent choice in 1995.

00:52:31.340 --> 00:52:32.140
Exactly, yeah.

00:52:32.140 --> 00:52:35.660
But it's not in 2022 or, you know, now.

00:52:35.660 --> 00:52:36.760
And code rots.

00:52:36.760 --> 00:52:37.300
It does.

00:52:37.300 --> 00:52:38.340
Over time.

00:52:38.340 --> 00:52:43.580
So, you know, it was the current compiler, but if you don't keep moving it forward, you get to a point you can't move it forward.

00:52:43.580 --> 00:52:51.420
Even if the code would work fine in that old platform, the OS has changed, and it somehow kind of gets a little out of line with that, right?

00:52:51.420 --> 00:52:53.420
CPU architectures change, right?

00:52:53.420 --> 00:52:55.940
So you have to rebuild at some point, and so on and so on.

00:52:55.940 --> 00:52:56.180
Exactly.

00:52:56.180 --> 00:52:57.100
Yeah, absolutely.

00:52:57.100 --> 00:52:59.840
That only helps if you kept up with the ability to do that.

00:52:59.840 --> 00:53:01.440
You decided to keep yourself alive.

00:53:01.440 --> 00:53:03.620
Now we need to make it run on 64 bits.

00:53:03.620 --> 00:53:08.640
That's what Visual Basic runtime and WebAssembly is all about.

00:53:08.640 --> 00:53:09.300
Let's get going.

00:53:09.300 --> 00:53:13.620
Emily, what's your thought on this?

00:53:13.620 --> 00:53:14.560
Open source.

00:53:14.560 --> 00:53:19.480
I mean, my tendency, obviously, is to choose it as the first choice, but where's the threshold there?

00:53:19.480 --> 00:53:24.200
Yeah, I think a lot of what we do very much lives in that realm of open source.

00:53:24.200 --> 00:53:26.680
But for me, I think it really comes down to portability.

00:53:26.680 --> 00:53:30.040
If it's something that can be easily swapped out, I'm all for it.

00:53:30.100 --> 00:53:32.960
But I see this a lot more with system architectures, right?

00:53:32.960 --> 00:53:38.940
So if you're going to decide to go with AWS RDX, it's Postpress, right?

00:53:38.940 --> 00:53:46.760
You can use the fancy versions and whatnot, but under the hood, it's still Postpress, and you can move that wherever you want to.

00:53:47.180 --> 00:53:55.740
Whereas if you're going to make the decision to go all in on serverless and you're going to write lambdas, that's definitely something that you can theoretically move someplace else.

00:53:55.740 --> 00:53:58.580
But that barrier to portability is a lot higher.

00:53:58.580 --> 00:54:01.080
So that's kind of where I look at it.

00:54:01.080 --> 00:54:06.820
If this thing goes away or for us, a lot of it's like looking at client budgets, right?

00:54:06.820 --> 00:54:13.900
So if this thing costs $10 a month now, but they decide to up their costs and now it's going to cost $1,000 a month.

00:54:14.120 --> 00:54:18.500
Is that something that our client is going to be willing to take on from a financial perspective?

00:54:18.500 --> 00:54:20.520
So yeah, there's a lot to it.

00:54:20.520 --> 00:54:21.960
I try to...

00:54:21.960 --> 00:54:25.540
Yeah, you're sort of touching on another angle that's interesting as well.

00:54:25.540 --> 00:54:27.840
We don't really have time to go into it, unfortunately.

00:54:27.840 --> 00:54:33.440
But even if you have an open source thing, maybe your code is in Python and it's talking to Postgres,

00:54:33.440 --> 00:54:36.520
you can get locked into commercial clouds, right?

00:54:36.520 --> 00:54:40.340
Like RDS or Lambda, right?

00:54:40.340 --> 00:54:43.560
While it might still be running your Python, like you can't, like you said,

00:54:43.620 --> 00:54:49.540
you can't just take it and run it somewhere else without rethinking all the little roots of things

00:54:49.540 --> 00:54:53.040
it's going into to hook into the other parts of the cloud there.

00:54:53.040 --> 00:54:56.880
And that's clearly not something you can take as an open source thing and run with.

00:54:56.880 --> 00:55:00.160
So I'll give you the final word on this and then we'll wrap it up.

00:55:00.160 --> 00:55:00.480
Yeah.

00:55:00.480 --> 00:55:05.720
One way I kind of think about it is, you know, like there's some things that I care that they're open source

00:55:05.720 --> 00:55:07.860
and other things that I just don't.

00:55:07.860 --> 00:55:11.160
Like as an example, like I use MongoDB randomly.

00:55:11.160 --> 00:55:12.760
I've never looked at the source code.

00:55:12.760 --> 00:55:13.840
I probably am never going to.

00:55:13.840 --> 00:55:18.320
Like whether it's open source or not, when I can see the source code or not, like, is it important?

00:55:18.320 --> 00:55:19.060
I don't know.

00:55:19.060 --> 00:55:24.500
Is it the fact that I appreciate that there's community contributions and the discussion happening?

00:55:24.500 --> 00:55:28.460
Maybe that's the important part of the open sourceness that I do care about.

00:55:28.460 --> 00:55:35.060
When I think about smaller projects, when I mean smaller projects, I mean like utility libraries and things of that nature.

00:55:35.060 --> 00:55:41.300
A lot of the times I'll find myself like debugging and actually looking in the code because I might have seen like a weird error message.

00:55:41.300 --> 00:55:43.180
And I'm like, I don't understand what this means.

00:55:43.180 --> 00:55:48.800
Let me try and navigate through, you know, let me get cloned and navigate through it and see what's happening.

00:55:48.800 --> 00:55:49.080
Right.

00:55:49.080 --> 00:55:50.260
In that case, sure.

00:55:50.260 --> 00:55:54.080
I totally care to this open source because I have a problem and I want to try and figure it out.

00:55:54.080 --> 00:55:54.380
Right.

00:55:54.380 --> 00:55:55.820
So I think it really just depends.

00:55:55.900 --> 00:56:02.060
Again, for me more so, like, I really appreciate like when those utility libraries that I'm using are open source so I can figure out what's happening.

00:56:02.060 --> 00:56:07.780
But, you know, major things like, again, I think about Mongo or RabbitMQ or Redis or anything like that.

00:56:07.780 --> 00:56:09.120
Like, I'm never going to look at that source code.

00:56:09.120 --> 00:56:09.760
You know what I mean?

00:56:09.760 --> 00:56:10.780
I'm with you on that.

00:56:10.780 --> 00:56:11.180
Yeah.

00:56:11.180 --> 00:56:14.500
I appreciate that they're open source, but I'm not going to try to change it.

00:56:14.500 --> 00:56:14.680
Yeah.

00:56:14.680 --> 00:56:15.860
I'll just probably break it.

00:56:15.860 --> 00:56:17.260
All right.

00:56:17.260 --> 00:56:19.120
Well, this has been a great conversation.

00:56:19.120 --> 00:56:23.420
I'm looking at the notes that we all put together to talk and like we're halfway through it.

00:56:23.420 --> 00:56:24.560
We could just keep going and going.

00:56:24.840 --> 00:56:27.260
But we only have so much time.

00:56:27.260 --> 00:56:29.200
So what I want to do is I want to close out.

00:56:29.200 --> 00:56:32.260
Normally I ask about editors and cool packages and stuff.

00:56:32.260 --> 00:56:34.760
I want to close this out with a lightning round on one other thing.

00:56:34.760 --> 00:56:41.940
And this final thought is, you know, how much does it matter that we have like really beautiful, say, like landing pages?

00:56:41.940 --> 00:56:49.380
You know, some of these open source projects like Vue.js or Tailwind, they could be, you know, a high end marketing budget spent on them.

00:56:49.380 --> 00:56:52.960
And even, you know, poetry in the Python space has kind of got like a cool little landing page.

00:56:52.960 --> 00:56:55.220
So we're top to bottom here.

00:56:55.220 --> 00:56:56.060
Final thought.

00:56:56.060 --> 00:57:00.320
Give me a, you know, a couple of thoughts real quick on this and then we'll call it a show.

00:57:00.320 --> 00:57:00.860
Dan?

00:57:01.020 --> 00:57:05.200
I think it definitely helps in terms of getting people involved.

00:57:05.200 --> 00:57:07.440
Not necessarily a requirement.

00:57:07.440 --> 00:57:12.600
And in some cases may mask issues with the underlying library.

00:57:12.600 --> 00:57:12.980
Okay.

00:57:13.100 --> 00:57:18.300
Like, I mean, the only thing I can think of is like profit kind of, which had a lot of Facebook.

00:57:18.300 --> 00:57:28.280
It was very fancy Facebook marketing, but there's been some, I think like the Zillow stories and things like that of cases where it wasn't necessarily appropriately used, but it was very fancily marketed.

00:57:28.280 --> 00:57:33.080
So I think it's just can be an entree even without full evaluation.

00:57:33.080 --> 00:57:33.400
Right.

00:57:33.400 --> 00:57:37.600
It might actually, maybe the effort should just be put to the code or somewhere else.

00:57:37.600 --> 00:57:39.660
Gareth, what do you think?

00:57:39.660 --> 00:57:41.800
You've seen the Tailwind CSS site.

00:57:41.900 --> 00:57:44.000
Are you ready to swap all your stuff over?

00:57:44.000 --> 00:57:48.380
All I care about is how quickly I get to a demo of it and the documentation.

00:57:48.380 --> 00:57:50.360
So I'm old school.

00:57:50.360 --> 00:57:53.120
So if it's got a man page, I'm probably happier.

00:57:53.120 --> 00:57:56.980
I often find myself looking at them going, that's great.

00:57:56.980 --> 00:57:58.740
I have no idea what it does.

00:57:58.740 --> 00:58:06.400
And I think the fancier the landing page, usually it actually puts me off a bit because I worry that they're putting a lot into it.

00:58:06.400 --> 00:58:08.960
Although I'm paying a lot more in JavaScript at the moment.

00:58:08.960 --> 00:58:11.240
They seem to have a lot more fancy landing pages.

00:58:11.660 --> 00:58:15.140
You've got to stand out when there's a new library every week.

00:58:15.140 --> 00:58:15.560
Kim?

00:58:15.560 --> 00:58:15.880
Sure.

00:58:15.880 --> 00:58:17.740
I'm pretty much with Gareth there.

00:58:17.740 --> 00:58:22.640
It would be hypocritical of me to expect an open source project to have a pretty page before I can use it.

00:58:22.640 --> 00:58:23.880
Because frankly, I can't do that.

00:58:23.880 --> 00:58:28.160
And that's just not reasonable to expect other projects I might consider using to do that.

00:58:28.540 --> 00:58:33.680
The one thing I would agree with Gareth on one thing, what I want to see basically is as fast as possible.

00:58:33.680 --> 00:58:34.680
What is it?

00:58:34.680 --> 00:58:35.940
And how do I use it?

00:58:35.940 --> 00:58:40.340
You know, the marketing dump and stuff is all very nice and well written, but it's less relevant to me.

00:58:40.720 --> 00:58:47.460
The only thing I would argue that turns me off immediately on a big project are ones that go very video heavy without much text.

00:58:47.620 --> 00:58:56.240
If you have angled your project towards here's a video to show you everything you need to know, that's 10 minutes I'm never going to get back if I decide I don't want to use your library.

00:58:56.240 --> 00:58:57.540
You can't skip it easily, no.

00:58:57.540 --> 00:58:58.700
Equivalent text, exactly.

00:58:58.700 --> 00:59:01.900
I could have read the equivalent text six times in the time it took me to watch your video.

00:59:01.900 --> 00:59:05.600
So maybe that's a personal quick, but that's the thing I don't like.

00:59:05.600 --> 00:59:06.600
Yeah, I hear that a lot too.

00:59:06.680 --> 00:59:09.460
For video heavy, it doesn't work for me, I must say.

00:59:09.460 --> 00:59:14.800
Emily, you probably have clients that come with fancy landing pages that they're going to recommend that you start with.

00:59:14.800 --> 00:59:15.340
Yeah, for sure.

00:59:15.340 --> 00:59:18.100
For me, I think, you know, documentation is paramount.

00:59:18.100 --> 00:59:35.840
And I think that a lot of, especially in the Python world, there are a lot of pieces of documentation that feel a little bit, you know, antiquated at this point where it is very much generated off of, you know, maybe some doc strings or, you know, argument types and all that stuff that sometimes it's not the most user friendly.

00:59:36.060 --> 00:59:40.200
So for me, it's like, yeah, I can look at this stuff in the code if I need to.

00:59:40.200 --> 00:59:47.040
So having something that, you know, is either a playground, quick start guide, how to use it, that sort of thing is really important.

00:59:47.040 --> 00:59:58.880
For the landing pages, I feel like it's not necessary, but I think that when a tool does a little bit of the work to show how it's differentiated, that helps me, right?

00:59:58.940 --> 01:00:08.880
So if I can look at something and go, all right, I'm going to look at poetry and they provide some great examples for, you know, why it's faster than this thing, why it looks better than this thing, whatever it is.

01:00:08.880 --> 01:00:13.580
It at least gives me sort of a starting point for, you know, why would I use this tool?

01:00:13.940 --> 01:00:21.840
Obviously, it's all sort of taken with a grain of salt because each tool is going to say that, you know, here are the things that they're best at and kind of hide the things that they're maybe not best at.

01:00:21.840 --> 01:00:27.560
I also think, you know, as you're sitting here on this page and you kind of scroll down and you can see all these sponsors.

01:00:27.560 --> 01:00:29.180
That does matter. Yeah.

01:00:29.340 --> 01:00:34.000
It matters, but it's also something that kind of can make you raise an eyebrow, right?

01:00:34.000 --> 01:00:37.260
So like Vue is great because it's very diverse.

01:00:37.260 --> 01:00:41.960
It's not, you know, a single large company that is sort of powering everything.

01:00:41.960 --> 01:00:49.940
But I do think that that is something to sort of watch for is, you know, who is driving this and what is the reason why it's here?

01:00:49.940 --> 01:00:50.900
Cool. Cecil?

01:00:51.020 --> 01:00:54.420
Yeah, I think like a lot of other folks on this panel, I am not a designer.

01:00:54.420 --> 01:01:01.080
And so I do appreciate the aesthetics of being able to like see things clearly and read them clearly.

01:01:01.080 --> 01:01:05.500
I'm not here for all like the marketing stuff and I'm better because stuff.

01:01:05.500 --> 01:01:06.100
You know what I mean?

01:01:06.100 --> 01:01:10.280
Like I'm usually going to come in and I'm going to look for that getting started button.

01:01:10.280 --> 01:01:11.860
I'm going to look for that docs button.

01:01:11.860 --> 01:01:18.200
I'm going to look for the little code sample that I can copy, paste into VS Code and run kind of thing for the most part.

01:01:18.520 --> 01:01:22.560
But then I also recognize the fact that like really nice documentation takes time.

01:01:22.560 --> 01:01:26.540
And, you know, a lot of open source folks don't always have the time to create that, right?

01:01:26.540 --> 01:01:27.040
Yeah.

01:01:27.040 --> 01:01:28.060
It is a signal.

01:01:28.060 --> 01:01:28.420
Yeah.

01:01:28.420 --> 01:01:31.180
But is that like a metric that we judge them by?

01:01:31.180 --> 01:01:32.100
You know what I mean?

01:01:32.100 --> 01:01:32.640
Yes or no.

01:01:32.640 --> 01:01:33.440
I mean, is that fair?

01:01:33.440 --> 01:01:34.020
You know what I mean?

01:01:34.020 --> 01:01:40.560
Like you can have a really good project, but if you don't have the good documentation, obviously I can't use it the way it's intended to use.

01:01:40.560 --> 01:01:42.480
But like, does that mean that this is not a good project?

01:01:42.480 --> 01:01:42.980
I don't know.

01:01:43.380 --> 01:01:50.640
So I feel like, you know, that's obviously a good opportunity for folks to, you know, contribute and send PRs and things of that nature.

01:01:50.640 --> 01:01:55.460
But, you know, for me, like I'm just going in really quickly to see, hey, how can I start the thing?

01:01:55.460 --> 01:02:00.360
How could I run it, install it, execute it, Docker compose it, whatever.

01:02:00.360 --> 01:02:01.700
And then kind of just get going.

01:02:01.700 --> 01:02:03.160
All right, Lukas, you got the final word here.

01:02:03.160 --> 01:02:03.460
Sure.

01:02:03.460 --> 01:02:09.180
Well, I don't think you can really go wrong with an ugly website for a project that is open source.

01:02:09.180 --> 01:02:11.820
Like it's very rarely hinders the project.

01:02:11.820 --> 01:02:13.360
Just look at Python.org.

01:02:13.360 --> 01:02:19.820
I'm being unfair, but you know, like in perfect fairness, like the last redesign was like some 10 years ago or something.

01:02:19.820 --> 01:02:26.220
So like, you know, kind of it doesn't look exactly like as flashy as like Tailwind or Viewer or whatever.

01:02:26.220 --> 01:02:30.420
And it doesn't really matter because it does kind of let us all PyPI is nice.

01:02:30.420 --> 01:02:31.440
Like Python.org.

01:02:31.440 --> 01:02:34.140
Yeah, and I was going to say PyPI actually did get that treatment though.

01:02:34.140 --> 01:02:35.080
Yeah, exactly.

01:02:35.080 --> 01:02:43.700
So yeah, like Python.org might get updated at some point as well, but it doesn't hinder us in one bit because, you know, it's a functional Django, in fact, website.

01:02:43.700 --> 01:02:45.000
And we use it every day.

01:02:45.000 --> 01:02:46.060
It's nice.

01:02:46.060 --> 01:02:54.800
I personally like if there was a designer that actually sat on the, you know, on the project and made the website work.

01:02:54.800 --> 01:02:59.460
There's a bunch of things that, you know, like until recently nobody thought about.

01:02:59.720 --> 01:03:02.160
So all those outdated websites don't have this.

01:03:02.160 --> 01:03:07.260
We're like dark mode, white mode, looking good on a phone screen or whatever.

01:03:07.260 --> 01:03:11.580
Like those things end up being quite useful to me now.

01:03:11.580 --> 01:03:15.700
Like the job I do, like I work with people in different time zones.

01:03:15.880 --> 01:03:19.440
So every now and again, they would catch me when I'm like, you know, away from a keyboard.

01:03:19.440 --> 01:03:23.620
And if I can actually go and check something, you know, on the phone, it's very helpful.

01:03:23.620 --> 01:03:30.320
It's not always possible or it's at least like, you know, complicated sometimes when, you know, like scroll.

01:03:30.320 --> 01:03:30.860
A white background.

01:03:30.860 --> 01:03:31.020
A white background.

01:03:31.020 --> 01:03:31.740
A white background.

01:03:31.740 --> 01:03:32.340
Yes.

01:03:32.340 --> 01:03:36.020
Or like a white background is going to glare at you like at like 3 a.m. or whatever.

01:03:36.020 --> 01:03:38.900
You know, so like I appreciate good design.

01:03:38.900 --> 01:03:42.400
It's obviously not something I do personally as well.

01:03:42.400 --> 01:03:45.160
Just like everybody else I think here.

01:03:45.760 --> 01:03:52.040
However, there are people that are great at it and I appreciate it when, you know, kind of people like this get contacted.

01:03:52.040 --> 01:03:57.560
And, you know, those sorts of websites look good and are functionally better that way.

01:03:57.560 --> 01:03:58.560
Thank you all for being here.

01:03:58.560 --> 01:03:59.600
It's been a great conversation.

01:03:59.600 --> 01:04:02.100
Thanks for taking the time and being part of the group.

01:04:02.100 --> 01:04:02.440
Thanks.

01:04:02.440 --> 01:04:03.140
Thanks, everyone.

01:04:03.140 --> 01:04:03.960
Thanks.

01:04:03.960 --> 01:04:07.860
This has been another episode of Talk Python To Me.

01:04:07.860 --> 01:04:09.680
Thank you to our sponsors.

01:04:09.680 --> 01:04:11.280
Be sure to check out what they're offering.

01:04:11.280 --> 01:04:12.700
It really helps support the show.

01:04:13.260 --> 01:04:20.160
Join Cox Automotive and use your technical skills to transform the way the world buys, sells, and owns cars.

01:04:20.160 --> 01:04:25.260
Find an exciting position that's right for you at talkpython.fm/cox.

01:04:25.260 --> 01:04:27.400
Take some stress out of your life.

01:04:27.400 --> 01:04:33.200
Get notified immediately about errors and performance issues in your web or mobile applications with Sentry.

01:04:33.200 --> 01:04:38.180
Just visit talkpython.fm/sentry and get started for free.

01:04:38.180 --> 01:04:41.780
And be sure to use the promo code TALKPYTHON, all one word.

01:04:42.400 --> 01:04:43.640
Want to level up your Python?

01:04:43.640 --> 01:04:47.700
We have one of the largest catalogs of Python video courses over at Talk Python.

01:04:47.700 --> 01:04:52.880
Our content ranges from true beginners to deeply advanced topics like memory and async.

01:04:52.880 --> 01:04:55.540
And best of all, there's not a subscription in sight.

01:04:55.540 --> 01:04:58.460
Check it out for yourself at training.talkpython.fm.

01:04:58.460 --> 01:05:00.360
Be sure to subscribe to the show.

01:05:00.360 --> 01:05:03.140
Open your favorite podcast app and search for Python.

01:05:03.140 --> 01:05:04.440
We should be right at the top.

01:05:04.440 --> 01:05:09.620
You can also find the iTunes feed at /itunes, the Google Play feed at /play,

01:05:09.620 --> 01:05:13.800
and the direct RSS feed at /rss on talkpython.fm.

01:05:13.800 --> 01:05:17.240
We're live streaming most of our recordings these days.

01:05:17.240 --> 01:05:20.640
If you want to be part of the show and have your comments featured on the air,

01:05:20.640 --> 01:05:25.020
be sure to subscribe to our YouTube channel at talkpython.fm/youtube.

01:05:25.580 --> 01:05:26.920
This is your host, Michael Kennedy.

01:05:26.920 --> 01:05:28.220
Thanks so much for listening.

01:05:28.220 --> 01:05:29.380
I really appreciate it.

01:05:29.380 --> 01:05:31.280
Now get out there and write some Python code.

01:05:31.280 --> 01:05:32.080
Bye.

01:05:32.080 --> 01:05:33.080
Bye.

01:05:33.080 --> 01:05:34.080
Bye.

01:05:34.080 --> 01:05:35.080
Bye.

01:05:35.080 --> 01:05:36.080
Bye.

01:05:36.080 --> 01:05:37.080
Bye.

01:05:37.080 --> 01:05:38.080
Bye.

01:05:38.080 --> 01:05:39.080
Bye.

01:05:39.080 --> 01:05:40.080
Bye.

01:05:40.080 --> 01:05:41.080
Bye.

01:05:41.080 --> 01:05:42.080
Bye.

01:05:42.080 --> 01:05:43.080
Bye.

01:05:43.080 --> 01:05:44.080
Bye.

01:05:44.080 --> 01:05:45.080
Bye.

01:05:45.080 --> 01:05:46.080
Bye.

01:05:46.080 --> 01:05:47.080
Bye.

01:05:47.080 --> 01:05:48.080
Bye.

01:05:48.080 --> 01:05:48.580
you

01:05:48.580 --> 01:05:49.080
you

01:05:49.080 --> 01:05:49.580
you

01:05:49.580 --> 01:05:51.580
Thank you.

01:05:51.580 --> 01:06:21.560
Thank you.