The beauty of open source software and libraries is that you're not stuck with a single option some vendor is offering.
This is especially true when that support is poor or antiquated.
Almost any capability you can think of has multiple options, even for a single language such as Python.
Just think about how many web frameworks you can pick from today.
But therein lies a new problem.
If there are 10 options, how do you choose?
Do you go for the oldest and potentially most stable?
How about the most up-to-date one?
Maybe the hot new version that has the fastest adoption curve is the right one for you.
It's not easy, but luckily we have an excellent panel here to discuss exactly that.
You'll hear from Emily Morehouse, Cecil Phillip, Kim VanWijk, Lucas Schlinge, Gareth Thomas, and Dan Garland.
This is Talk Python to Me, episode 397, recorded December 7th, 2022.
Welcome to Talk Python to Me, a weekly podcast on Python.
This is your host, Michael Kennedy.
Follow me on Mastodon, where I'm @mkennedy, and follow the podcast using @talkpython, both on fosstodon.org.
Be careful with impersonating accounts on other instances.
There are many.
Keep up with the show and listen to over seven years of past episodes at talkpython.fm.
We've started streaming most of our episodes live on YouTube.
Subscribe to our YouTube channel over at talkpython.fm/youtube to get notified about upcoming shows and be part of that episode.
This episode is brought to you by Cox Automotive.
Use your technical skills to transform the way the world buys, sells, and owns cars at talkpython.fm/cox.
And by Sentry.
Don't let those errors go unnoticed.
Use Sentry.
Get started at talkpython.fm/sentry.
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.
To learn more, visit talkpython.fm/assemblyai.
Hey, y'all.
Welcome to Talk Python to Me.
Gareth, Kim, Lukasz, Cecil, Emily, and Dan.
I've got a bunch of you here, and I'm so excited to have you all on the show.
Thanks for being here.
Sure thing.
Yeah, I'm excited, man.
We have a nice little party going on.
Yeah, we do.
We definitely do.
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.
You know, we have this paradox of choice type of problem, and especially in the Python space.
You know, I haven't even looked.
Are we over 400,000 packages on PyPI?
There's many, right?
We are over 14 terabytes of storage on PyPI that I know.
Oh, my goodness.
Yeah.
Jack, look.
It's mostly machine learning, but, you know, Kenneth, there's a lot of packages.
Yeah, there's definitely a lot of packages.
Okay, well, how do you pick?
How do you go to that list and say, I'm going to search for a web framework, and look, there's 100 results.
How do I pick?
Or I'm going to find a way to talk to a database.
What database should it be?
So that's going to be our topic for the show today.
And let's just start real quick with the elevator pitch of who you are and your background.
You know, 30 seconds or less.
We'll go around the Brady Bunch squares here.
Gareth.
Hi, I'm Gareth.
I've been programming for probably 40 years, I guess, and now, because I started when I was about three.
I'm on a Dragon 64.
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.
And now I'm doing CTO stuff the whole time.
Fantastic.
And I think CTO positions are very much in this role.
You've got to set a little bit of guidance for the company and the teams, right?
Yes.
And I don't get to do code anymore.
I just get to watch people write code.
You just get to make decisions for them and watch whether they enjoy it or don't enjoy it.
Kim, welcome back.
Thanks.
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.
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.
Yeah, fantastic.
Lukash, welcome back.
Hi, I'm the core developer in residence for CPython.
So actually getting money from the Python Software Foundation to help develop Python.
Just yesterday, we released six simultaneous versions of Python at the same time, which I think is a record.
Yeah.
So I mostly do that.
I don't program for 40 years.
I'm 37 at the moment.
Still maintaining 37 because my birthday is March.
So like approaching quickly, but you know.
Don't let 38 get you.
Yes.
I'm not almost 40.
I'm 37, you know.
Awesome.
Well, congratulations on all the great work.
I know you've done a ton of work to keep CPython moving forward.
Yeah.
Thank you.
There seems to be like more and more to do, actually.
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.
So, you know, kind of, we have so much kind of velocity right now that I have never seen before.
So a lot of change.
Amazing.
I talked to Ned Batchelder on another podcast that we were doing.
We'll come out before this one.
And we looked.
The change log for CPython is 175,000 words.
A typical novel is 80,000.
So that's a lot.
That's nuts.
Cecil, always good to have you on the show.
Welcome back.
Sure.
Thanks for having me.
Hi, everyone.
I'm Cecil Phillip, developer advocate at Stripe.
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.
So not fully there yet, but I'm still working on it.
Primarily been doing a lot of .NET stuff, some Python stuff.
Recently started playing around with Go.
Maybe we'll talk about that, you know, in the midst of this conversation as well.
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.
So I kind of feel like my job is to learn stuff to an extent.
You know what I mean?
There's a lot of that that happens.
And, yeah, I kind of have a lot of fun doing it both, you know, for work and, you know, outside of work.
Yeah.
That sounds like a great job.
Emily, welcome back.
Hi there.
I'm Emily Morehouse.
I'm the director of engineering at a company called Cuddlesoft.
We are a kind of digital product consultancy focusing on, you know, user experience for full stack applications.
But we also get into some of the nitty gritty stuff.
So we kind of do that full spectrum DevOps, firmware, middleware development, web applications, all the way through design.
So I get to touch a lot of different pieces of technology.
A lot of my work is in Python, but not all of it.
I write a lot of Ruby, a lot of JavaScript kind of across the spectrum.
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.
I found world and the Ruby world and kind of down that stack.
So, yeah.
So this topic is right down right in your wheelhouse.
And I think also the consulting side, the agency side is interesting because you work with one group.
You say, here's what we recommend for you.
Oh, another group has another company has a different set of software skills.
So you might recommend something different in that case, right?
Yeah, absolutely.
And the technical expertise that our clients come with is very wide reaching, right?
So some people are completely non-seqtical, don't want to touch it, don't want to know anything about it.
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.
And there's a lot more kind of risk management for this, right?
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.
So it also gives us a chance to start fresh a lot, right?
Like most of our projects are greenfield.
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.
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.
Right.
You also were the chair of PyCon.
Is that the right title?
Yeah, I forgot to mention that.
I'm the recovering chair.
I'm chair emeritus now.
Yeah.
So I was going to ask.
I heard that there's a support group somewhere.
I'm sure there is.
Not overseeing 2023, are you?
No.
I'm taking a break.
Yep.
Fantastic.
All right.
Well, thanks for that.
Dan, welcome to the show.
Thanks.
I'm Dan Gerlank.
I've been doing software development professionally for 20 years to some degree, more in one capacity or another.
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.
Prior to that, I actually ran my own consulting job for a decent amount of time.
So I've worked on that agency side a bit and also started my career in quant finance.
I've worked across a wide range of things.
And I'm pretty involved with the Asara project these days on the open source side.
I can also do a bit of teaching on the side.
I've taught on O'Reilly about pandas and different things from time to time.
So.
Fun.
Yeah.
Teaching.
Teaching is always a great way to kind of learn these technologies a little bit deeper as well.
For sure.
Then you definitely learn it for real when you go out to teach it.
The fear of having to stand in front of a bunch of people and not know the answer.
Motivate you.
That's right.
I guess conference speaking kind of works that way, but it's not as back and forth as well.
All right.
So let's kick off this conversation with maybe a story from some of you.
So I wanted to start with just maybe a story how you've chosen some tech stack or some database
or some new framework.
You know, a lot of leeway in the scope there.
But, you know, whoever wants to jump in, just, you know, what?
Give us a story of something you've sort of gone down that path recently.
Well, I'll jump in and talk a little bit about like the strategy of how I choose to learn
stuff.
And I think it's important that you have a learning or a choice strategy, at least for me, because
like there's just so much stuff to play with.
And like there's only so many hours in the day.
And so you always have to be like surgical with your time about like what you choose to
do.
And so one of the things for me is like, I don't build production applications.
And I think that's an important thing to note.
So, you know, everyone else's perspective might be a little bit different.
But like most of the apps that I'm building, I am beta testing stuff.
I'm creating things for other folks, you know, doing proof of concepts with companies and
stuff like that.
So now when you think about the things that I have to learn, I usually have to learn things
to like get it to work for a little bit.
And then I'll walk away and I'll go do something else.
Right.
Like I don't learn it with the perspective of I have to maintain it over a long period of
time.
Now, that is not important that I do it the right way.
But again, you know, the perspective is just a little bit different.
So for me, one of the things that I often try to do is, you know, try to find the thing
that like, I'm really interested in doing.
I like the thing that'll be useful at work and try and like plug those things together.
Right.
And like try and see how we can find some symmetry there.
And so an example would be like one of the things I'm playing with right now is open telemetry.
Right.
Now, I don't work for an open telemetry company.
And, you know, that's not a thing that we have libraries or extensions for.
But at the same time, too, like, you know, we think about as we're building apps, right?
Like, you know, inspection is an important thing.
Right.
And being able to give folks guidance is an important thing.
And so when people come to me as an advocate and ask questions, I might not have to know
everything in detail, but I try and know things enough so that I can at least have an opinion
and have a conversation about it.
You know, be able to speak intelligently about it, even though I might not know like all
the knobs and whistles and like dials I have to turn to like get the thing to work.
You know, one of the things that I think would be really important for that role is really
carefully tracking where's the momentum in frameworks.
Maybe it's not the most important or widely used thing at the moment, but in six months, you
know, a little bit of the Gretzky quote, you know, where is this thing going and what
is the advice you're going to give to people?
Yeah, I agree with that.
And that also, again, kind of goes into the strategy, right?
Of like, what am I learning this thing for?
You know what I mean?
Like, am I learning it to, again, like, am I learning it specifically to achieve like a
particular personal goal?
Is there something that I'm trying to fix?
Am I trying to, am I trying to like explore technology so I could pick and choose the thing
that I want to do, right?
Like, like what exactly am I learning this thing?
Am I learning it to teach it to someone else, right?
Like, no, that's, that's a completely different perspective as you're trying to figure out,
well, how do I kind of zone into the thing that I'm trying to do?
Yeah, I was going to add something to what Cecil was saying there.
One of the important things that you point out that you often end up doing is maybe helping
people select a framework or a piece of tech stack or something to use.
And the kind of thing that always, that used to strike a lot of the teams I've worked on,
and I certainly was guilty as anybody else, is spending a heck of a lot of time going back
and forth thinking, well, we could use this one or we could use this one and let's try
this one.
Well, if I take three days to try this one, and then next week we'll take three days to
try that one.
And ultimately, if somebody's paying you to write software, it's kind of an important
lesson to remember that ultimately you have to pick something and it'll be good enough.
Your job isn't actually to pick the right thing and spend a month on it.
There are other things they're paying you to do.
So one of the important things to think to take stack selection is basically, if it's good
enough, that's fine.
If it's not good enough, then obviously it must go.
And it's useful to have somebody like Cecil to be able to tell you if it's good enough.
But we can make them step seeking out kind of perfect.
Is there absolutely anything wrong with this?
Now we'll use this one.
Let's try that one and stick it.
Maybe it'll be better.
And three weeks later, they're saying to you, why haven't you met the deadline?
Ah, but we have the perfect tool.
Haven't used it yet.
It's taken us a month to find that.
We have the perfect tool now.
Yeah.
It's an easy trap to fall into.
It is.
And I think a lot of people probably fall into it.
And you got to decide, is this a one-way door or a two-way door?
Is it the gate at the exit of the airport?
Like if I make this choice, how committed am I to this thing?
Because if you try it for a week and it's not what you thought it would, you could come
back and try something else.
Then why spend three weeks before you even start, right?
You've learned a lot in that quote failure, right?
This portion of Talk Python Nemy is brought to you by Cox Automotive.
With brands like Kelly Blue Book, Autotrader, Dealer.com, and more, Cox Automotive flips the
script on how we buy, sell, own, and use our cars.
And now the team at Cox Automotive is looking for software engineers, data scientists, scrum
masters, and other tech experts to help create meaningful change in the industry.
Do you want to be part of a collaborative workplace that values your time and work-life balance?
Consider joining Cox Automotive.
Visit talkpython.fm/cox today.
Thank you to Cox Automotive for sponsoring the show.
I would even go further and say that technology choice doesn't really matter that much.
The experience I had with large companies I worked for was that they often would choose
technology that was utterly boring and not interesting even at the time when they did choose it, but
became dated very quickly.
And it didn't matter one bit.
Like Facebook was PHP, MySQL, and Linux, right?
Only when they already grew, it wasn't really Linux, it wasn't really MySQL, and it wasn't really PHP.
But at that point, you already have enough infrastructure and enough employees and everything to actually,
you know, keep it going anyway.
Same with like Instagram that was purchased by Facebook, but it was Django, right?
And still Django.
But it's not really Django.
It doesn't matter.
Like it brought them to where they are through it being an established technology.
And I would in fact kind of err on the side of boring because it's going to be there for you,
you know, going forward.
And that's important, especially like, you know, if you're choosing a data store, like you want to
choose something that, you know, like you're not going to have to migrate from in a year or two,
because that's not something that is a productive use of your time.
So I'm going to kind of contradict what I'm saying now very often as part of my job and say,
you shouldn't be an early adopter.
But well, in case of CPython, you absolutely should.
And you should test our alphas and test our betas.
But you know, you have your CI for that.
So it's a safe environment.
Like don't run 3.12 in production right now.
Do test with it, right?
So this sort of thing.
And Python, yeah, it's already like you can use 3.11.1 just fine.
It should be okay.
Since we are with our annual release cycle, a kind of in sync with Linux distributions,
which are doing testing of a new Python version as part of their release for October.
So Fedora and Ubuntu test our newest Python.
So it's kind of best tested as it ever was.
But when it comes to your data store, when it comes to your web framework, you know,
choosing something that is extremely new.
And well, we're not sure if it's going to stay forever.
It's maybe, maybe a kind of a bold choice.
Unless it's like a 10, 10 X multiplier of your productivity.
I would just choose the boring thing.
Well, your advice about CPython, you know, 3.10 versus 3.11.
It's not the same as Django versus FastAPI, right?
It's like the evolution of the thing, but you could always roll back a little bit, right?
It's, it's a little bit different.
Oh yes, absolutely.
So it's like, I don't know, Postgres 13, 14 and so on and so on.
At the same time, like, you know, kind of obviously technology changes.
And even if we're not talking bugs, but just plant deprecations, that there might be some disruption
when, whether, you know, upgrading to a newer Python version.
Nowadays, much smoother than it was between Python 2 and Python 3.
So it shouldn't be a big deal.
But it might be a deal depending on what third party libraries you're using.
So yeah, obviously there's considerations for you,
which is why we would like you to test with 3.12, like in your CIs and so on and so on.
It's already there.
Just put it as a run target.
Yes.
But you know, kind of when it, when it comes to third party projects, I am usually very boring.
And, you know, kind of, I was the last person from my friends to actually adopt VS Code and
the last person to adopt Phish.
You know, like I was happily with Bash and then I switched to ZSH just at the time when it started
being boring, you know, and I was like, come on, really?
I kind of like my work to actually not depend on something that is extremely volatile.
Yeah, that makes sense.
Yeah.
And I think it goes back to what Cecil was saying earlier about needing to have some sort of like
framework for how you make these decisions.
And so I think that it's important to call out that a lot of times you need, you need a base set
of criteria when you're evaluating a tool, right?
Like, please like check the license, make sure that you're even allowed to use this thing for
whatever you're doing.
And then a lot of it kind of gets into that risk tolerance where it sounds like Lukash probably
is on like the very stable side of it versus the leading edge side, you know?
And so you've got to say, do I care about doing the new and exciting thing?
Or like, should I make the obvious choice to make sure that I have that long-term stability
that you would get from, you know, choosing Django over FAPS API sort of situation?
Yeah, absolutely.
Gareth, how about you?
You got some examples of decisions you had to make as your CTO role?
I'm just thinking I'm very much in Lukash's world of boring is good.
So, you know, it's, you always want to go for the tried and tested.
If it's product, there's a marked difference between working in production and working in
the, in the wider, in, in learning mode.
So you've got Cecil's world of pulling the latest stuff, trying out new technology and playing.
But if you're going to build a web frame, build a web app, then it's going to be hard
not to choose Flask or Django still, because it's there, it's around.
And at the moment, all my, all my current examples.
So I, I'm currently at a company called My Energy and we process huge amounts of user data
and we paid a company to write a platform for us.
And it feels like they just went through NPM and installed anything they ever wanted all
the time.
And now we're unpicking a load of...
NPM install star, let's go.
Yeah.
And it, you know, and it feels like they're playing a drinking game with type, with TypeScript
and this bit's functional and this bit's object orientated.
And so, you know, picking technologies, not just picking technologies, picking paradigms.
So it's TypeScript.
That's great.
But is it functional?
Is it object orientated?
Is it procedural?
And the answer is this bit is, and this bit isn't, and this bit's over here.
And then we need a type boat.
We need an ORM.
So it feels like they pull in the only ORM that they've seen in a tutorial that somebody,
somebody's written.
So we've got TypeORM, which doesn't do migrations and you're stuck.
And we've got a massive pile of technical debt on a brand new project, which you're having
to unpick because no one consciously chose the projects.
Or is it known?
In my last gig, we spent a lot of time because I've got horror stories about Zoop.
But there's, you know, we spent a lot of time choosing the right framework and having the
right reasons and put in a lot of effort into writing proof of concepts because we knew the
traffic demands.
We knew what we were doing.
And we went Flask and we went certain technologies in AWS.
We went Docker.
We went and just follow this route through choosing things to be stable and scalable, not necessarily
the latest and greatest, not necessarily the most cutting edge.
We just wanted to make sure it was, we could develop on it.
And even then we chose, badly chose a library because somebody followed tutorial.
We didn't really think about end up using a REST framework that got deprecated.
And so, you know, there's, you have to put the effort into choosing the right things and
be okay with going, I don't care if we're not cutting edge.
We let Cecil be cutting edge and go and play in his dev advocate role.
And then once it's in production in other places, then you use it.
Yeah.
This distinction between like, what do you choose in production and what you choose other
places.
Also, you know, it doesn't necessarily have to be just learning, right?
It could be, well, here's some tools that just like kind of pull in data and process it.
But if it's not perfect, it, the website is not going to go down and we're not going to
lose, you know, a thousand dollars a second until somebody fixes that type of situation,
right?
It's, oh, somebody's got to fix the ETL.
Well, and I think that's another big part of it is in most companies, your job or your
function with the company is not supporting a web framework or building out features within
a web framework.
You're trying to implement whatever business logic you need beyond that.
So going to something tried and true or older is going to let you do that.
And it may not exactly meet your use case.
But like Lukash was saying, once you have enough, once that's, if you have enough revenue,
that that's a problem.
If you're Instagram or Facebook, well, that's a good problem to have.
You can deal with it at that point.
Yeah.
Yeah, absolutely.
Well, and for you, Dan, the situation might be a little bit different as well.
Being more doing like ML type of things.
There's less tried and true, right?
Yeah.
The ML of two years ago is laughed at by the ML of today, right?
Yeah.
It's changing so fast.
It's hard to say we're going to pick stable because you give up a lot by doing that.
Yeah, for sure.
A lot of stuff we worked on.
And I think some of it is that I've spoken with folks who are building ML companies and
they're like, yeah, the scale you're operating at is like 10 times or 100 times anything
we've run for something that's an ML as a service platform.
So we've had to build out some things where kind of existing frameworks didn't cut it for
us, but it was first, can we actually use those existing frameworks?
Because we ideally, we're not an ML platform company.
We want to use whatever the framework is we can because that will get us our job done.
Only when we can't do that, did we really need to go custom and kind of build things
out for scale.
It's easy to get into thinking like my job is to put this to work and make this framework
as awesome as possible or to get it going just right.
And really it's to deliver functionality to a business, right?
That's just a means to an end.
So yeah, for sure.
I could maybe, maybe just a thought on that that began to be when we were talking about
boring.
The other thing that kind of can be very tempting is if me or I, the team, I come across
a new fantastic tool.
I think this looks great.
Let's use this.
I've been half an hour reading a tutorial that's going to point it out.
I know everything there is to know about it.
It must be great.
I work it into the project.
We don't touch it.
You know, we make it work.
We don't touch it for a week after that.
Then I'm on leave three weeks from now on the beach somewhere and it goes wrong.
Have I bothered to tell the rest of my team how this thing works?
Because I've chosen something that isn't boring, you know, that doesn't fit in with
the stuff the rest of us all know.
And now there's a huge problem there.
So there's, you want to give a bit of thought to that as well.
You want to be consistent with the stuff you use.
Sometimes, as Gareth was saying, in terms of paradigm, there might be shiny toys that
don't fit in with the rest of it.
And I'm afraid you've got to leave the shiny toy behind.
Unless, I mean, for, again, we are talking in the, what you're paid to do.
So it's obviously the toy you own and your own bat, shiny toy away.
Yeah.
You got to think about the team buy-in as well.
If our group's going to be using it, right?
We fund development sprints and we fund hack days to play with things.
So let's get, if you've got an idea for, you know, do you fancy using FastAPI?
Then let's build a small thing in it and we'll put a small project in, see how it works, see
how it deploys.
But don't bet the farm on it until you're certain about it.
That's a great, great way to do it, right?
It's sort of a more structured way to experiment.
So I'll share a quick story with you all here.
Recently, I wanted to re-kindle my blogging.
I don't know.
Social media and places are a little scrambled these days.
So I thought it might be a good idea to have something written as well that I can point to.
So I went to make this website and I thought it's something simple, something marked down,
something static.
And I don't know, I've done that.
My last blog was on WordPress.
I don't want to use WordPress anymore.
I don't want to have a database for my blog.
That seems like overkill.
So I'm like, all right, well, what do I do to decide?
So I went out to the community and I asked, hey, I'm thinking about this static website blog thing.
Python tools preferred, but I'm open for anything.
And Kim, I think you even maybe weighed in on this thread over here.
I think I did, you know.
Yeah, I think you did.
And I got a bunch of different feedback.
And so my solution to sort of exploring this place where I felt a little unqualified,
I didn't have really much experience with, was to go out and ask.
And the answer I got back really surprised me.
I thought, well, maybe it's going to be Pelican or Ghost.
But a bunch of people started saying, Hugo, Hugo, this thing is Hugo.
It's amazing.
Obviously, there were people saying Pelican and Sphinx and whatnot.
So I ended up going with Hugo, which was a bit of a struggle for me to decide because it's unbelievably good.
Kim, are you using Hugo as well?
Yes, yeah, for a couple of things.
It's glorious.
It's so nice for writing, but it's written in Go.
And so it's like, well, can I?
I can't really fix it or tweak it as easily.
But in the end, I decided, you know what?
It's more important to have something that works really, really good that has got a lot of popular support
than having something that is in a language I'm an expert in.
So I'd kind of like to hear your all thought.
If you're in that kind of situation, what's your process?
How do you come to these decisions?
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.
So I went through a similar process.
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.
And obviously everybody writes their own static site generator.
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.
Like you're not, you're not writing strings of HTML into a file.
Like, you know, like all of those kind of building blocks are done for you.
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.
And it's like what, and it's under 2000 lines of code at the moment, like the entire thing.
So it's like, it's not super big.
And it was growing like, you know, in time when I was adding new stuff to it.
For example, at first I just did not have RSS at all because I was like, this thing is dead.
Like nobody needs RSS anymore.
And then a bunch of people just told, tell me like, Hey, like, why don't you have RSS?
So I just added it like later on, you know, and it's just what, like, oh, we have XML in the standard library.
And there's actually like, yeah, RSS libraries too.
But like, this is so simple.
You just have like, you know, this one template that you need to output.
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.
I should just recreate the virtual.
And so I'll, I'll be able to say 3.11, but you know, kind of.
Then you'll be cutting edge.
So yes.
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.
So I'm kind of crazy about having notes.
So like, I have a lot of them, right?
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.
So I can always just access them in a plane or whatever.
So those are just tagged hashtag public in the Markdown text and they appear on the website and it's kind of automatic.
So I don't actually have like a CMS for this.
I just have my notes app that I'm using is FS notes is open source.
It works on the Mac.
It's glorious.
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.
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.
So it was really, it really took me no time to get this up there.
And it kind of works on the phone and it's okay.
It's not, it's not going to kind of wow you, but it's a perfectly functional website, you know.
Yeah.
Jay out of the audience says, building your own static site generator is a great way to learn a lot about language.
I learned a lot for you just maintaining my own static.
I mean, choosing static sites is an interesting choice on its own, right?
It's the DevOps story is incredibly nice that you don't have to worry about, you know, will the database go down?
What, what kind of problem is, you know, it's, it's either going to be there or it's just not there.
Will the database go down?
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.
Now you've got to get database exports across into a different database, or you've got to get migrations going.
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.
There you go.
I would never do that.
Of course, of course.
This portion of Talk Python To Me is brought to you by Sentry.
How would you like to remove a little stress from your life?
Do you worry that users may be encountering errors, slowdowns, or crashes with your app right now?
Would you even know it until they sent you that support email?
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?
With Sentry, this is not only possible, it's simple.
In fact, we use Sentry on all the Talk Python web properties.
We've actually fixed a bug triggered by a user and had the upgrade ready to roll out as we got the support email.
That was a great email to write back.
Hey, we already saw your error and have already rolled out the fix.
Imagine their surprise.
Surprise and delight your users.
Create your Sentry account at talkpython.fm/sentry.
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.
Create better software, delight your users, and support the podcast.
Visit talkpython.fm/sentry and use the coupon code Talk Python.
But it's also unhackable.
That's an interesting...
There is that.
Yeah, the worst thing that could happen is it could deface.
It could get defaced.
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.
You're right.
That's a good point.
Hard to hack.
Very hard to hack.
Well, for me, the most important thing that this literally just runs on the free tier, like on Netlify, and, you know, it just...
Yeah.
It's good.
Mine is on Netlify as well, and I gotta say, it's really, really a relieving nice thing.
One comment that we were making about picking a library, something that you pointed out and that Luke was just saying as well.
There is something to be said for making sure you can fix it if it breaks.
But I think to the large degree, it depends on how...
I suppose it depends on several things.
How important the thing is to you, how quickly you can change it if it does break.
And how kind of big the thing is.
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.
But I've got pretty simple needs.
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.
Because maybe I need to be able to tweak it or otherwise.
It also depends on what you need the thing for.
How much does it matter?
Whether you can tweak it or not.
It's supposed to depend largely on how important it becomes to your project.
The downside, of course, when you do that decision six months later and it's super important, now you're stuck.
Now you're on the hook.
I'm like you.
I don't know any go.
Not really.
I mean, I've read like a paragraph of sample code to know what it looks like.
But that's about it.
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.
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.
Here's the thing I run on the command line and it either makes the static site or it doesn't.
So it's not, you know, in the important path of interactions.
You could swap it out without your website breaking.
The end result will still be up and live on the website while you're replacing Hugo with something else if you want to.
Yeah, exactly.
There's a consideration there.
Go down the Lucas route and try to recreate the same look and feel.
Yeah.
So unlikely it would break and not be fixed by core Hugo devs or like the surface of the application is relatively well defined.
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?
Like, okay, if it breaks, someone else will fix it.
Not my problem.
If it had six stars and it breaks, it might be my problem if it breaks, even though it's not my project.
How do you all think about that when you are choosing projects or Emily or Cecil in your case is recommending technologies?
Yeah, I think for me, this is just my personal opinion.
Like things like forks and stars are like vanity metrics for me.
Like I don't really care, to be honest with you.
I do care if, you know, it, one, it solves the problem I'm trying to deal with.
You know, can I submit an issue and get, you know, relatively like within six months, like someone answered me fairly quickly.
Like I don't want to wait for a response.
And, you know, is it, is it, you know, are there commits being, even to that too, right?
Like when I say, are there commits being made?
You don't need to be making commits like every day and every hour or every week or every month.
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.
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.
Sure.
So I'm going to use you as an example, Michael.
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?
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.
Right.
But, you know, like, what do you, what do you do?
I think I'd rather rewrite it from scratch than learn go.
Well, see, so see.
Not that I hate go or anything.
I just like, you know, I think thinking of just a time effort sort of trade off, you know?
Yeah.
So again, for me, it's mainly just about like, how do we like, does it solve the thing that I want to solve?
And then can I get like some level of support, you know, questions answered and documentation and stuff like that?
Yeah.
So when I looked at this, you know, commit last commit yesterday, there's a bunch of issues.
But if you look at, say, the closed ones, there were issues closed a couple hours ago.
Full requests, I suspect probably those are linked together.
Right.
So there's clearly the life in this project.
And to me, that probably is enough.
How about the rest of you?
Emily, what do you think?
Yeah, I totally agree.
I think these are exactly the things that I look at is, you know, are things getting updated or commits getting in?
You know, if it hasn't had a commit in a year or two, sometimes that's still okay.
Right.
Like sometimes you're looking at Django reset password library that like, yeah, it's just, it's continued to work over time.
And you don't necessarily need new features added to a reset password kind of thing.
So knowing kind of what you're looking at and what you need out of it, I think is still important.
But I totally agree.
You know, forks and stars, even downloads are kind of vanity metrics.
I also think that something else that I always look at is, what is the audience of the tool, right?
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.
But it's not going to be a tool for the message.
We have a visual decline.
Just a, hmm, no, enough projects.
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.
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.
And just using that as part of your metrics for deciding if that tool fits your needs.
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?
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.
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.
And if they do good.
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.
Because obviously if you are installing a package with pip install, unlike with CPAN in the Perl universe, you run no tests.
So you kind of only the only thing you know is that the files were put in the right place.
But whether they are going to work, well, you're just going to find out like at runtime, I guess.
So yeah.
So like every now and again, I would just try to build something when I actually depend on it.
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.
Well, there's also a project that you have a little involvement with that it's got a few downloads, right?
Yeah.
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.
Like it's awesome.
I have never expected this to go so big.
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?
It's just, you know, it's mind blowing.
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?
Like uncompromising code formatter, like it's very clear that it's very opinionated and that a lot of it came from you.
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.
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.
This is just something that's here.
If you like it, use it.
Great.
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.
For Black maintenance in particular, the fun thing was that I gathered like a team of people who are maintaining it now.
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.
We will never get there.
And, you know, like over 2021, we churned out a lot of releases and now like, yeah, Black is stable.
It's amazing.
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?
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?
You know, like, is there more than one person with the keys to the kingdom?
Because sometimes if you lose the keys for whatever reason, like it's, you know, very disruptive.
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.
So, you know, things, things happen.
I cannot really say that, you know, I did anything like that, like, you know, kind of, well, like I planned for it.
Like it mostly happened by accident because it just had like nice contributors that I liked.
So I just shared the right access with them and they ended up being very trustworthy.
But, you know, a maintainer should do that at some point because you cannot just do everything, you know, by yourself.
It's just impossible.
The bus factor is interesting.
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.
And it was really frustrated that companies were using the project and not paying for it.
It was open source under like MIT or something.
But, you know, that was his take.
But then had a full on breakdown and got arrested for creating bombs in Queens, New York.
That's an extreme example.
But it can happen.
Something could happen, right?
Like, or, you know, somebody could just get actually in an accident or they could have a health crisis, right?
Like, could be a place where it stops.
So, considering that is...
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?
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.
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.
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.
There's a consideration there for the complexity of a tool as well.
Sometimes it's unavoidable.
Sometimes some things that you have to do are complex.
But if the tools are...
If you're constantly picking the hardest thing there is...
Well, hardest.
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.
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.
Yeah.
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.
And everyone was like, great, it works.
I love it.
Yeah.
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.
Which as technologists, it's just not a thing that we do.
So again, like the bus factor, right?
Like something bad happens to the person and now what do we do now, right?
Like what is the next step, right?
Yeah.
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.
Right.
So I'll give you an example.
Like, so I go to a lot of like senior design showcases at colleges and universities and so on and so forth.
And when I kind of look and I say, oh, well, why did you pick this language?
Or why did you pick this cloud?
Or why did you pick this framework?
It's usually because the people around them are doing it too.
Right.
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?
I have people that I could go ask the question.
You know what I mean?
So now I'm going to choose that thing, not because of any technical reason.
I mean, obviously it has to do the thing I want it to do.
But like the main reason I chose it is because like socially speaking, like I have people that I could go ask the question.
And so now my confidence level in that project is a little bit higher because of that reason.
Yeah, that's a really good, really important factor.
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.
And that person is no longer around.
And now like we obviously can still, we have access to the code, like we have tests that are passing.
We can still maintain the code, right?
We can still mutate it.
We can still make it to different things if we need to.
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.
Because that kind of informs where we should go next, right?
Like if something is kind of uncharacteristically convoluted and you see this and you're like, oh, I would simplify this, right?
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.
But if there's nobody to ask the question to, like that complicates things a lot.
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.
It's definitely a challenge.
Gareth, were you trying to jump in there?
Often as well.
We make decisions because then it sounds cool.
But actually the best decision you can make around framework or language is the one your team already knows.
So your default thing should be, don't change unless there is a really good reason to change.
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.
But all they were was Perl and PHP devs.
And so suddenly you have an entire stack that your developers can't maintain.
So it might be the most perfect Java application in history, but no one you employ can actually do anything to it.
Going a bit back to Cecil's thought, right?
Keep the humans.
You've got to deal with it in mind, not just the technology.
Yeah.
All right.
I want to move on to another topic.
We're getting short on time here.
So maybe I'll throw this first to you, Dan.
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.
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.
So what I wanted to ask you all is how important do you see the open source side of things versus a closed source?
Like let's say there's some project for a database.
It's twice as good, but it's closed source.
Choose it, not choose it, putting money aside.
Suppose it's free.
I mean, I guess I generally say is how hard is it to change out for something else?
Okay.
Like is it Postgres, but 2x is fast Postgres or Postgres.
Right.
Or is it Microsoft SQL server, but it's still relational and you probably just migrate that data to Postgres or something.
Yeah, I think the risk is really if you're using this and it goes away and then you're stuck.
That is definitely a real risk.
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.
Stopped.
There's one specifically.
It's not profitable enough.
So your project stops.
Exactly.
Yeah.
This one, it was called QA Studio.
It was a finance, quant finance language, actually by Palantir.
There was a hedge fund I knew that had fully adopted it.
And then they actually made the reverse migration to Python after the fact.
How about the SEO?
What do you think?
Well, where is that bar that you cross over?
Yeah.
I was reminded about kind of somewhat horrifying experience from my own career that Dan's just reminded me of.
I've seen it happen with the third party software that the company's bought and then it's no longer available.
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.
Nobody knows how to do it.
It doesn't do what we need to do anymore, but we don't have the source.
Even if we did have the source, we don't have a Visual Basic 4 compiler.
Nobody understands it.
We don't know how he built it.
Bob is long gone.
You need Windows 95 to build it.
How do we get that?
Well, exactly.
All those things add up.
And at the time, it's not to make you sound like Bob was an idiot.
Bob did what Bob knew.
Bob knew Visual Basic 4 and somebody said, let's turn out a tool as fast as possible.
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.
So there's an argument to be had for where do the libraries and so forth you pick.
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.
But as I say, not to maliciousness, just through, you know, I need it done fast.
If you ask Bob to do it fast, Bob's going to do it in Visual Basic 4 because that's what Bob knew.
And that's fine.
And that might have been a totally decent choice in 1995.
Exactly, yeah.
But it's not in 2022 or, you know, now.
And code rots.
It does.
Over time.
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.
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?
CPU architectures change, right?
So you have to rebuild at some point, and so on and so on.
Exactly.
Yeah, absolutely.
That only helps if you kept up with the ability to do that.
You decided to keep yourself alive.
Now we need to make it run on 64 bits.
That's what Visual Basic runtime and WebAssembly is all about.
Let's get going.
Emily, what's your thought on this?
Open source.
I mean, my tendency, obviously, is to choose it as the first choice, but where's the threshold there?
Yeah, I think a lot of what we do very much lives in that realm of open source.
But for me, I think it really comes down to portability.
If it's something that can be easily swapped out, I'm all for it.
But I see this a lot more with system architectures, right?
So if you're going to decide to go with AWS RDX, it's Postpress, right?
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.
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.
But that barrier to portability is a lot higher.
So that's kind of where I look at it.
If this thing goes away or for us, a lot of it's like looking at client budgets, right?
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.
Is that something that our client is going to be willing to take on from a financial perspective?
So yeah, there's a lot to it.
I try to...
Yeah, you're sort of touching on another angle that's interesting as well.
We don't really have time to go into it, unfortunately.
But even if you have an open source thing, maybe your code is in Python and it's talking to Postgres,
you can get locked into commercial clouds, right?
Like RDS or Lambda, right?
While it might still be running your Python, like you can't, like you said,
you can't just take it and run it somewhere else without rethinking all the little roots of things
it's going into to hook into the other parts of the cloud there.
And that's clearly not something you can take as an open source thing and run with.
So I'll give you the final word on this and then we'll wrap it up.
Yeah.
One way I kind of think about it is, you know, like there's some things that I care that they're open source
and other things that I just don't.
Like as an example, like I use MongoDB randomly.
I've never looked at the source code.
I probably am never going to.
Like whether it's open source or not, when I can see the source code or not, like, is it important?
I don't know.
Is it the fact that I appreciate that there's community contributions and the discussion happening?
Maybe that's the important part of the open sourceness that I do care about.
When I think about smaller projects, when I mean smaller projects, I mean like utility libraries and things of that nature.
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.
And I'm like, I don't understand what this means.
Let me try and navigate through, you know, let me get cloned and navigate through it and see what's happening.
Right.
In that case, sure.
I totally care to this open source because I have a problem and I want to try and figure it out.
Right.
So I think it really just depends.
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.
But, you know, major things like, again, I think about Mongo or RabbitMQ or Redis or anything like that.
Like, I'm never going to look at that source code.
You know what I mean?
I'm with you on that.
Yeah.
I appreciate that they're open source, but I'm not going to try to change it.
Yeah.
I'll just probably break it.
All right.
Well, this has been a great conversation.
I'm looking at the notes that we all put together to talk and like we're halfway through it.
We could just keep going and going.
But we only have so much time.
So what I want to do is I want to close out.
Normally I ask about editors and cool packages and stuff.
I want to close this out with a lightning round on one other thing.
And this final thought is, you know, how much does it matter that we have like really beautiful, say, like landing pages?
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.
And even, you know, poetry in the Python space has kind of got like a cool little landing page.
So we're top to bottom here.
Final thought.
Give me a, you know, a couple of thoughts real quick on this and then we'll call it a show.
Dan?
I think it definitely helps in terms of getting people involved.
Not necessarily a requirement.
And in some cases may mask issues with the underlying library.
Okay.
Like, I mean, the only thing I can think of is like profit kind of, which had a lot of Facebook.
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.
So I think it's just can be an entree even without full evaluation.
Right.
It might actually, maybe the effort should just be put to the code or somewhere else.
Gareth, what do you think?
You've seen the Tailwind CSS site.
Are you ready to swap all your stuff over?
All I care about is how quickly I get to a demo of it and the documentation.
So I'm old school.
So if it's got a man page, I'm probably happier.
I often find myself looking at them going, that's great.
I have no idea what it does.
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.
Although I'm paying a lot more in JavaScript at the moment.
They seem to have a lot more fancy landing pages.
You've got to stand out when there's a new library every week.
Kim?
Sure.
I'm pretty much with Gareth there.
It would be hypocritical of me to expect an open source project to have a pretty page before I can use it.
Because frankly, I can't do that.
And that's just not reasonable to expect other projects I might consider using to do that.
The one thing I would agree with Gareth on one thing, what I want to see basically is as fast as possible.
What is it?
And how do I use it?
You know, the marketing dump and stuff is all very nice and well written, but it's less relevant to me.
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.
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.
You can't skip it easily, no.
Equivalent text, exactly.
I could have read the equivalent text six times in the time it took me to watch your video.
So maybe that's a personal quick, but that's the thing I don't like.
Yeah, I hear that a lot too.
For video heavy, it doesn't work for me, I must say.
Emily, you probably have clients that come with fancy landing pages that they're going to recommend that you start with.
Yeah, for sure.
For me, I think, you know, documentation is paramount.
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.
So for me, it's like, yeah, I can look at this stuff in the code if I need to.
So having something that, you know, is either a playground, quick start guide, how to use it, that sort of thing is really important.
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?
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.
It at least gives me sort of a starting point for, you know, why would I use this tool?
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.
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.
That does matter. Yeah.
It matters, but it's also something that kind of can make you raise an eyebrow, right?
So like Vue is great because it's very diverse.
It's not, you know, a single large company that is sort of powering everything.
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?
Cool. Cecil?
Yeah, I think like a lot of other folks on this panel, I am not a designer.
And so I do appreciate the aesthetics of being able to like see things clearly and read them clearly.
I'm not here for all like the marketing stuff and I'm better because stuff.
You know what I mean?
Like I'm usually going to come in and I'm going to look for that getting started button.
I'm going to look for that docs button.
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.
But then I also recognize the fact that like really nice documentation takes time.
And, you know, a lot of open source folks don't always have the time to create that, right?
Yeah.
It is a signal.
Yeah.
But is that like a metric that we judge them by?
You know what I mean?
Yes or no.
I mean, is that fair?
You know what I mean?
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.
But like, does that mean that this is not a good project?
I don't know.
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.
But, you know, for me, like I'm just going in really quickly to see, hey, how can I start the thing?
How could I run it, install it, execute it, Docker compose it, whatever.
And then kind of just get going.
All right, Lukas, you got the final word here.
Sure.
Well, I don't think you can really go wrong with an ugly website for a project that is open source.
Like it's very rarely hinders the project.
Just look at Python.org.
I'm being unfair, but you know, like in perfect fairness, like the last redesign was like some 10 years ago or something.
So like, you know, kind of it doesn't look exactly like as flashy as like Tailwind or Viewer or whatever.
And it doesn't really matter because it does kind of let us all PyPI is nice.
Like Python.org.
Yeah, and I was going to say PyPI actually did get that treatment though.
Yeah, exactly.
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.
And we use it every day.
It's nice.
I personally like if there was a designer that actually sat on the, you know, on the project and made the website work.
There's a bunch of things that, you know, like until recently nobody thought about.
So all those outdated websites don't have this.
We're like dark mode, white mode, looking good on a phone screen or whatever.
Like those things end up being quite useful to me now.
Like the job I do, like I work with people in different time zones.
So every now and again, they would catch me when I'm like, you know, away from a keyboard.
And if I can actually go and check something, you know, on the phone, it's very helpful.
It's not always possible or it's at least like, you know, complicated sometimes when, you know, like scroll.
A white background.
Yes.
Or like a white background is going to glare at you like at like 3 a.m. or whatever.
You know, so like I appreciate good design.
It's obviously not something I do personally as well.
Just like everybody else I think here.
However, there are people that are great at it and I appreciate it when, you know, kind of people like this get contacted.
And, you know, those sorts of websites look good and are functionally better that way.
Thank you all for being here.
It's been a great conversation.
Thanks for taking the time and being part of the group.
Thanks.
Thanks, everyone.
Thanks.
This has been another episode of Talk Python to Me.
Thank you to our sponsors.
Be sure to check out what they're offering.
It really helps support the show.
Join Cox Automotive and use your technical skills to transform the way the world buys, sells, and owns cars.
Find an exciting position that's right for you at talkpython.fm/cox.
Take some stress out of your life.
Get notified immediately about errors and performance issues in your web or mobile applications with Sentry.
Just visit talkpython.fm/sentry and get started for free.
And be sure to use the promo code TALKPYTHON, all one word.
Want to level up your Python?
We have one of the largest catalogs of Python video courses over at Talk Python.
Our content ranges from true beginners to deeply advanced topics like memory and async.
And best of all, there's not a subscription in sight.
Check it out for yourself at training.talkpython.fm.
Be sure to subscribe to the show.
Open your favorite podcast app and search for Python.
We should be right at the top.
You can also find the iTunes feed at /itunes, the Google Play feed at /play,
and the direct RSS feed at /rss on talkpython.fm.
We're live streaming most of our recordings these days.
If you want to be part of the show and have your comments featured on the air,
be sure to subscribe to our YouTube channel at talkpython.fm/youtube.
This is your host, Michael Kennedy.
Thanks so much for listening.
I really appreciate it.
Now get out there and write some Python code.
Bye.
you
Thank you.