Brought to you by Michael and Brian - take a Talk Python course or get Brian's pytest book

#463: 2025 is @wrapped

Published Mon, Dec 22, 2025, recorded Mon, Dec 22, 2025
0:00
00:43:19
Watch this episode on YouTube
Play on YouTube
Watch the live stream replay

About the show

Sponsored by us! Support our work through:

Connect with the hosts

Join us on YouTube at pythonbytes.fm/live to be part of the audience. Usually Monday at 10am PT. Older video versions available there too.

Finally, if you want an artisanal, hand-crafted digest of every week of the show notes in email form? Add your name and email to our friends of the show list, we'll never share it.

HEADS UP: We are taking next week off, happy holiday everyone.

Michael #1: Has the cost of building software just dropped 90%?

  • by Martin Alderson
  • Agentic coding tools are collapsing “implementation time,” so the cost curve of shipping software may be shifting sharply
  • Recent programming advancements haven’t been that great of a true benefit: Cloud, TDD, microservices, complex frontends, Kubernetes, etc.
  • Agentic AI’s big savings are not just code generation, but coordination overhead reduction (fewer handoffs, fewer meetings, fewer blocks).
  • Thinking, product clarity, and domain decisions stay hard, while typing and scaffolding get cheap.
  • Is it the end of software dev? Not really, see Jevons paradox: when production gets cheaper, total demand can rise rather than spending simply falling. (Historically: the efficiency of coal use led to the increased consumption of coal)
  • Pushes back on “only good for greenfield” by arguing agents also help with legacy code comprehension and bug-fixing. I 100% agree. #Legacy code for the win.

Brian #2: More on Deprecation Warnings

  • How are people ignoring them?
    • yep, it’s right in the Python docs: -W ignore::DeprecationWarning
    • Don’t do that!
    • Perhaps the docs should give the example of emitting them only once
      • -W once::::DeprecationWarning
  • See also -X dev mode , which sets -W default and some other runtime checks
  • Don’t use warn, use the @warnings.deprecated decorator instead
    • Thanks John Hagen for pointing this out
    • Emits a warning
    • It’s understood by type checkers, so editors visually warn you
    • You can pass in your own custom UserWarning with category
  • mypy also has a command line option and setting for this
    • --enable-error-code deprecated
    • or in [tool.mypy] enable_error_code = ["deprecated"]
  • My recommendation
    • Use @deprecated
    • with your own custom warning
    • and test with pytest -W error

Michael #3: How FOSS Won and Why It Matters

  • by Thomas Depierre
  • Companies are not cheap, companies optimize cost control. They do this by making purchasing slow and painful.
  • FOSS is/was a major unlock hack to skip procurement, legal, etc.
  • Example is months to start using a paid “Add to calendar” widget!
  • It “works both ways”: the same bypass lowers the barrier for maintainers too, no need for a legal entity, lawyers, liability insurance, or sales motion.
  • Proposals that “fix FOSS” by reintroducing supply-chain style controls (he name-checks SBOMs and mandated processes) risk being rejected or gamed, because they restore the very friction FOSS sidesteps.

Brian #4: Should I be looking for a GitHub alternative?

Extras

Brian:

Michael:

  • PyCharm has better Ruff support now out of the box, via Daniel Molnar
    • This is from the release notes of 2025.3: "PyCharm 2025.3 expands its LSP integration with support for Ruff, ty, Pyright, and Pyrefly.
    • If you check out the LSP section it will land you on this page and you can go to Ruff.
    • The Ruff doc site was also updated. Previously it was only available external tools and a third party plugin, this feels like a big step.
  • Fun quote I saw on ExTwitter: May your bug tracker be forever empty.

Joke:

Episode Transcript

Collapse transcript

00:00 Hello and welcome to Python Bytes, where we deliver Python news and headlines directly to your earbuds.

00:05 This is episode 463, recorded December 22, 2025.

00:10 I'm Brian Okken.

00:11 And I am Michael Kennedy.

00:12 And this episode is sponsored by us.

00:14 So support us by heading over to Michael's courses, my courses, Talk Python Training or python test.com,

00:24 or just go over and see what we got at the pythonbytes.fm.

00:29 Let me add one more thing real quick there, Brian. Sorry to hijack your intro, but hey,

00:34 we're coming up on 2026 and it's about time to be scheduling sponsors on the ad calendar for the

00:41 next year. So if companies out there, if you're listening, you're like, why does my company not

00:45 support Python Bytes and sponsor it? Yes, a fine question you should be taking up with your

00:50 marketing team. Have them reach out to me. And right now there's a bunch of openings. We'll see

00:54 if they get bought up or not as things go.

00:57 But yeah, just send me an email.

00:58 Yeah, actually, that'd be great.

01:00 I'd love to have more sponsors on the show.

01:04 If you want to reach us for sponsoring or any other ways,

01:11 there's links on the show page, pythonbytes.fm.

01:16 You can also find links to all of our socials.

01:19 We're at Mastodon and Fosstodon, both us individually and the show.

01:24 And also, if you'd like to watch us live, you can go to pythonbytes.com/live

01:31 and see what it is and find the links.

01:33 And then as well, while you're there, sign up for the mailing list

01:37 so we can send you all the links we talk about directly to your inbox.

01:41 Alrighty, oh, one more thing before we get started.

01:44 We are taking, normally we record on Monday mornings and we are taking next week off

01:51 and we will be back in 2026.

01:54 All right. Kick us off, Michael.

01:56 It's end of the year. As you said, we'll be back first week of January.

02:02 But it's a little bit of an introspective end of the year is what I want to leave people with.

02:07 So people may have noticed I usually cover tools, libraries, or updates to those kinds of things and so on.

02:14 But on this episode, I want to cover two articles that I came across recently that I think they'll make you think.

02:20 They'll make you really evaluate the situation.

02:23 One has to do with agentic coding and one has to do with why open source won and continues to win.

02:30 But more importantly, what is one of the really key ingredients?

02:34 So as we look towards the future for more sustainability, let's not kill the golden goose by changing that thing.

02:40 So the first one is, has the cost of building software just dropped 90 percent?

02:46 That's a pretty stark headline, isn't it?

02:48 Yeah.

02:49 And what are the consequences? Right.

02:50 Does that mean, does that mean like, well, you thought it was hard to get a job earlier as a junior and just hang on to your pants now?

02:57 Or does it mean something else?

02:58 We'll see.

02:58 Well, at least we'll see what Martin Alderson said, because that's the article.

03:02 He wrote this article and I think it is super insightful and interesting.

03:06 So I kind of want to just pull out some highlights and put it out there for you all to think about as you got some downtime.

03:10 So the premise is basically that many of the recent programming quote advancements that are like gonna change the world, gonna actually absolutely change the way things work, haven't really.

03:23 For example, test-driven development, cloud computing, especially hyperscale clouds, microservices, complex front ends like React and so on, Angular, whatever.

03:33 Kubernetes, sure, they're advancements and they help in some way or another for various things,

03:38 but they're not bending the curve dramatically on how we write software, how much more we get done,

03:43 and so on. Somewhat, but not massively. But they say, let me see if I can find it. Yeah, here we go.

03:50 The economics have dramatically changed now with agentic coding. And I agree. I think it really

03:57 has. And I know a lot of people are frustrated with AI or they don't want to use AI and so on.

04:02 I'm not here to make people do that, but I am here to put on your radar that this is something you're going to have to be paying attention to.

04:08 And Martin thinks so as well.

04:09 Says in 2026 is going to catch a lot of people off guard.

04:13 And I think so too.

04:14 So it kind of goes through the history a little bit of like changes, how open source actually made a huge change, how cloud was supposed to make a big change, but it just added a crap ton of complexity.

04:25 A lot of other things.

04:26 So in a lot of just sort of how complexity has grown over time, instead of these things

04:31 making us able to write more software or better software, a lot of times it's just handle

04:35 more complex software or kind of doing the same thing.

04:37 So where's the 90% savings come from?

04:41 So he says, like you, probably I was incredibly skeptical of a lot of AI coding tools at the

04:46 beginning of the year, but things are changing fast.

04:49 And previously, if I want to, let's say I want to add some small capability to my app.

04:55 How do you do it?

04:55 Well, you're going to assemble a team of people.

04:57 You're going to set up continuous integration.

04:59 You're going to build out data access patterns, and you're going to plan that out in an architecture meeting.

05:03 Really, it's just a bunch of crud, but people make a big deal out of it.

05:06 So you're going to over-engineer it probably.

05:10 And you're going to set up some testing and so on.

05:12 And that's just direct labor, right?

05:13 You've got all the management.

05:14 And one of the things that's really interesting about this article

05:17 is the mythical man month aspect of this.

05:20 Like, okay, well, that's going to take two weeks.

05:21 Well, what if we add four people to it?

05:23 Well, it'll take one and a half weeks.

05:24 Like, wait, why is that not half a week?

05:26 You know, it's like the coordination, the communication,

05:29 the in factorial ways in which there can be like blocking

05:33 or communication or meetings or coordination and so on.

05:37 And so these coding tools have got really, really good.

05:39 And as you add one of these coding tools in, you don't have to have meetings with it.

05:45 You don't have to have it working with three other ones of them

05:48 so that it can coordinate different skill sets and so on.

05:51 And so in a sense, it really lowers the number of connections in that mythical man month,

05:56 but still adds a lot of capabilities.

05:57 So pretty interesting.

05:58 So final takeaway is like on the face of it, this seems like incredibly bad news for the

06:02 software development industry.

06:04 Indeed.

06:05 But a look at history.

06:07 Let's see.

06:08 So Jevons paradox comes from back in the day when coal usage became super efficient, right?

06:16 Instead of just burning it in an open pit or whatever to like heat something, we put it

06:21 know the steam engines and it does way more work per you know joule of energy or whatever right

06:27 it says look at least this guy martin thinks this applies jevon's paradox also is going to apply to

06:32 software that when something becomes cheaper to produce it's not that we just use it less it's

06:37 like well we've got five developers but now they're way more efficient so let's get rid of four of them

06:42 that's one possible outcome the other is like let's just build five times as much software

06:46 as we used to, right?

06:47 And so an example is from history is when coal became way cheaper,

06:52 its use skyrocketed, not cheaper, efficient, right?

06:56 Like you didn't need to spend as much coal to get stuff done.

06:59 But in fact, it actually blew up way, way more.

07:02 So super interesting.

07:03 And I think there's something to that.

07:04 I think there's a ton of latent demand for software.

07:08 So anyway, there's a whole section on that that's pretty interesting, I think.

07:12 Yeah, I think there is a lot of, I've mixed emotions about this.

07:17 I think there is a lot of light in demand.

07:19 I am dealing with both agent-driven or agent-developed software on a professional basis,

07:27 both from experts and from novices in a company.

07:33 And it's producing five times as much code, but you get five times as much bad code from

07:39 bad developers.

07:41 I'm just saying, there is a, like, let's say we have five times the amount of code or five times the product, you know, do more things.

07:50 That's 5xing your code base that you have to maintain in the future, too.

07:55 And we really haven't figured out how to deal with the increased maintenance cost of this agent-driven software yet.

08:04 Yeah, I agree with that.

08:06 Also, the test-driven development, I think we didn't get the gains out of that because people were teaching it wrong.

08:14 Just kind of a point from my book.

08:16 Of course.

08:17 But I think also there's a difference between full-on extreme programming and just, hey, let's make sure we have tests for our code.

08:25 Yeah, there's also, should we test our code and should we unit test it?

08:28 And that's the big part that I get.

08:32 But also, can we scroll up to that complexity chart?

08:36 or the little graph, I think that AI agents are going to not drive down complexity.

08:42 I think we might get efficiency gains, but I don't think,

08:47 I think we're going to get some, the complexity is going to go up just like it did with cloud.

08:52 You know, what's really interesting about all this discussion,

08:54 and I'm not disagreeing with you on this.

08:56 I think it's, if people have the opinion that are just going to like cut,

09:01 set these things loose on code bases, or especially on greenfield projects,

09:05 you're going to end up with all sorts of mishmashes of stuff.

09:09 Like, oh, this time it decided it wanted to react, but last time it used Vue.

09:12 Like, now I have to know two frameworks.

09:13 Like, why am I doing this, right?

09:15 Yeah.

09:16 There are a bunch of engineering practices and tools to apply to this stuff to get much more constrained,

09:23 uniform output out of it than just letting it go free, right?

09:26 And also, to Martin's defense, he says, like, look, this is not vibe coding.

09:30 This is not just letting the thing go.

09:32 This is, like, engineer plus...

09:34 Working with it.

09:35 these tools right like human in the loop all the way and even if we can get like your expert

09:40 engineers at your company to work twice as fat like get twice as much productivity out of them

09:44 and they're going to actually be happier because they're um it's like they've got a second brain

09:50 working with them even 2x like is incredible to get incredible yeah to get your best engineers

09:58 um to get to figure out stuff faster also um even not generating code but even just having stuff

10:05 explain it to you. Like, how does this algorithm work? What should I care about?

10:09 Asking it what tests you should write, asking it where the problem areas might be. Those are

10:15 incredible things that we couldn't do before without trying to pull other people off of their

10:20 own projects. So, yeah. Yeah, absolutely. So two more thoughts before we wrap this up quickly.

10:27 One down at the bottom here talks about, hold on before I lose track of where I was. Yeah,

10:33 Greenfield. Okay. So one objection is just not in a header sort of thing. One objection that I hear

10:37 a lot is LLMs are only good at Greenfield projects. And you were kind of talking about that as well,

10:43 Brian, but I actually strongly disagree with this based on my experience. And so does Martin,

10:48 by the way. Yeah, I do too. So I think when you turn an agentic LLM loose on a Greenfield project,

10:55 it just does whatever is popular on the internet that it's done, or it thinks it's trained on or

11:00 whatever, when you turn it loose on a greenfield project, if you're careful and you set up the

11:04 guidelines, it can follow the same patterns that are already established in the code and use the

11:08 same libraries and use the same techniques. And I just used, I spent, I would say probably an hour

11:15 coming up with a prompt to do a security review for some of my code, an hour before I started,

11:22 even before I try that, working on exactly what I wanted it to do, how I wanted to do it,

11:28 how I wanted to go about fixing it.

11:30 And I got what looks like top tier security pen testing analysis on a code base.

11:36 And I thought that is awesome.

11:38 And that's because it was not a greenfield project.

11:40 It was thousands and thousands of lines of code that had been around for a long time

11:44 with established patterns of solving things.

11:46 And it was very, very, very good.

11:48 So yeah, I would like to put it on the world that that is when done right.

11:53 That is not, I think greenfield projects are less good, not better.

11:56 Yeah.

11:57 Because they have nothing to go on.

11:58 right they just go on whatever they feel like i haven't really done a lot of greenfield on

12:03 stuff i think greenfield for for throwaway code or for just like uh like scripts that you it just has

12:10 to get the job done sort of the internal thing i think those are fine but um oh gosh i had an

12:16 incredible recent experience with just um getting stuck on an algorithm that was too slow and uh

12:23 i spent an hour with an llm uh and an agent um trying to um get it faster and it was like an

12:31 intense hour you know yeah exactly and then i just threw it in a branch and slept on it and

12:37 came back the next day and made spent another hour trying to make sure i understood all of it

12:43 and i and um and tweaking it more there were some non-pythonic things that i got rid of it had

12:48 recursion in there and i'm like let's get rid of that and we actually made it faster than we did

12:53 before so spending a like don't don't stop with it works go a little bit further to make sure that

12:59 you can maintain it in the future it doesn't take that much extra time and you're going to still be

13:03 proud of it and it was an incredible experience and i'm definitely going to do that again so yeah

13:09 definitely should be partners like a like a super excited coding buddy not not just a junior you just

13:16 send stuff to and make it go and then i but i also spent some time an hour recently or two

13:22 reviewing some test code from a junior developer and i obviously this stuff was just spit out by a

13:30 agent and um and it didn't make sense and i and so it just took time away for me to review bad code

13:39 and that's going to take away from your experts as well so yeah yeah that's a very good

13:44 Good point.

13:45 It is indeed.

13:47 All right.

13:47 We should have a warning or something about that, Brian.

13:49 A warning, yeah.

13:50 So last episode, we talked about deprecation warnings.

13:55 And I have to admit, I didn't do enough research on that.

13:59 So I'm glad that listeners chimed in.

14:01 We got a couple of listener feedbacks.

14:03 One of them I'm going to credit because we got his email right up here.

14:06 John Hagan mentioned you should totally use from warnings, import deprecated,

14:12 And instead of calling your own, calling warn, use the decorator deprecating.

14:17 And I totally, now after playing with it, totally agree.

14:21 It's awesome.

14:21 So let's back up a little bit.

14:23 We started with this Seth Larson article about deprecations via warnings don't work for Python libraries.

14:29 And I kind of agree after experimenting because I played with it a bit.

14:35 And one of the things that I found out was in, so in the Python documentation, one of the things that's cool.

14:42 somebody mentioned this and I didn't really know about it is development mode.

14:45 So there's dash X dev and you can also set it with a Python dev mode environmental variable.

14:52 And it sets a bunch of stuff, including setting the default warnings to W.

14:57 And the reason why that's important, I'm like, why is that important?

15:00 The reason is important in Seth alludes to it, but doesn't point it out directly,

15:05 is in the dash WR argument for Python, you could say just ignore,

15:11 like ignore all warnings.

15:13 And I think it's just, you can either ignore all warnings

15:16 or it even tells you, for example, to ignore all your deprecation warnings,

15:20 do this.

15:21 Ouch, I kind of wish they hadn't mentioned that.

15:25 Don't encourage people, come on.

15:27 Don't encourage people.

15:28 Instead of ignore, somebody else, and then again, sorry for whoever mentioned this,

15:33 but somebody mentioned just use once.

15:36 Ignore, like dash W once makes any warning in your code show up once and not a whole bunch of times.

15:43 And it's the whole bunch of times that I think people turn it off for because it fills up

15:47 your CI logs and everything like that.

15:49 But you really should see it at least once.

15:51 I like the once.

15:51 You know what else I like about once?

15:53 The W once is the pronunciation is the same as just once.

15:57 That's just once.

15:58 Yeah.

16:00 Okay.

16:00 So I played with it.

16:01 I looked at this deprecation warning thing.

16:04 And we'll link to the documentation in Python as well.

16:10 But you can do it, combine both solutions, which I love.

16:15 So you can just go ahead and declare your own warning and use the deprecated.

16:20 And so I tried this out.

16:24 So what you do is you just say, create your own, just a class and derive it from user warning.

16:31 And you don't have to import anything for this.

16:32 This is just built in.

16:34 It doesn't have to do anything, just a passing class.

16:36 But then if you use this deprecated decorator and pass your new warning category as deprecated,

16:49 and this sounds complicated on the air, it's not.

16:53 We'll do a code example.

16:55 But what you get is this, I had it, warning both.

17:01 Oh, yeah, it's over just right on the same screenshot.

17:04 The cool thing is that mypy and other type checkers, when you use the deprecated, will flag that it's a problem.

17:13 And I was doing it.

17:14 I think PyCharm does the same thing, but I was doing it in VS Code.

17:19 And what happens if you've got this deprecated decorator is that the IDE will just cross it out.

17:25 And they're like, why is this crossed out?

17:26 And if you hover over it, it'll say, oh, this is deprecated.

17:29 Yeah, it's like a strikethrough.

17:30 It says, don't use it.

17:31 I love it.

17:32 Yeah, it's very visual and it will make you like look at it.

17:36 So I think that instead of just calling more and yeah, please use the deprecated.

17:42 And then I was playing with pytest as well.

17:45 And what did we get?

17:47 I wrote it down in the show notes.

17:50 Yeah, you want to pass in the dash W just like you would for Python.

17:54 If you do dash W error within pytest, at least in one of your tests to find out actually all of the tests.

18:02 So that'll turn.

18:03 Well, even by default, pytest will warn you and do the warnings.

18:07 But if you're in CI, maybe you're not watching those.

18:10 So in CI, having a check for those deprecation warnings with dash W error will flag all those failures.

18:18 So anyway, lots of great information from readers.

18:22 So thank you for listening.

18:24 We got, if they read the newsletter you send, they could be readers.

18:29 Yeah, they could be readers.

18:31 John pointed out that you can set an environment variable,

18:34 and people may be hesitant to just set an environment variable for their computer

18:40 to turn Python into dev mode, which makes it slower potentially.

18:44 But if you create a virtual environment, which you should be doing,

18:48 there's an activation script in that virtual environment,

18:51 And you can just go and export that environment variable

18:56 set to debug or whatever mode you want to set it to.

18:59 - Oh yeah.

19:00 - Only when you activate that virtual environment.

19:02 So if you're on a particular project, you're like this one really,

19:05 I don't care about speed right now, I just care about getting things right.

19:08 Tweak its virtual environment, that doesn't have really many knock on effects.

19:11 So that's a cool hack I think.

19:13 - Yeah, it's a great place to throw in temporary pytest flags as well or any runtime flags.

19:19 - Exactly, it's not just about This dev thing, like it's like a little shell script basically.

19:24 Yeah.

19:25 Indeed.

19:26 You could do it for open source things, Brian.

19:27 I love open source.

19:29 So, oh yeah.

19:30 So here's another article.

19:31 And this one is by Thomas Dupree called How Foss One and Why It Matters.

19:36 This is a pretty interesting article.

19:38 And what it looks at open source, free and open source software angle from is not just

19:44 why do people like writing open source software?

19:46 Why do they like it better than having locked away software or having to pay or having bugs you can't fix or black box security issues potentially?

19:56 As we've seen lately, open source has its whole supply chain story on that.

20:00 That's different in a different way.

20:02 But anyway, it really looks at it from why has it won from a company perspective, especially large companies.

20:09 Okay.

20:10 Okay.

20:10 So it's really interesting.

20:13 So it says like, look, why did it win?

20:16 Well, people want to pay less.

20:19 So paying less, aka free software, that's great, right?

20:23 Well, how do companies make more money?

20:25 They either make more profit or they have fewer expenses for a fixed level of profit.

20:30 So not paying for software is great.

20:32 But that's not just open source software.

20:34 That's for everything.

20:35 And so companies implement what's called cost control.

20:38 So business term for making buying things painful, hard, and time consuming as possible.

20:44 So employees will either not or hate doing it.

20:47 All right.

20:48 So an example is like, hey, I need a cool date picker for our site that imagine open source doesn't exist.

20:54 Well, someone's going to have to start by creating a ticket to get this date picker.

21:00 And then, well, we have to research the various commercial options.

21:05 We could go to procurement and have them find it.

21:07 But what do they know about date pickers?

21:08 So we're going to do that ourself.

21:09 We're going to get a report.

21:10 We're going to bring it to procurement.

21:13 And when we get there, then procurement says, okay, great.

21:16 You're going to go with this company? Fine.

21:17 So what we're going to do is first we're going to need to set up a vendor agreement with them

21:21 because it turns out they're not currently a vendor of ours.

21:24 So we have contracts, we have reviews, we have negotiations, all for a stupid date picker, right?

21:30 It's just like, what is going on?

21:32 And then on top of it, there's all these copyright laws like indemnification of like,

21:37 you prove you haven't stolen from another company then to resell this to me in like some other way

21:42 of that stuff, it's like eventually you get permission to buy the thing and then you could

21:47 start using it. So open source software enters the scene. It says this comes with a pre-agreed,

21:52 pre-reviewed license, MIT, Apache, whatever. And so the lawyers are already like, yep,

21:57 we know what that is. We know how to deal with that. There's no pain. So there's no

22:01 vendor research, vendor approval, contracts, copyright, all that kind of stuff. And so it

22:07 really interesting like is this hack to skip around this like make buying stuff at companies

22:13 super hard right so it wasn't always that way though it took a long time for companies to

22:19 realize that open source was fine yes that's for sure i mean they did have to work through it but

22:24 i think once they kind of it feels like they had to go through this the same process we're kind of

22:28 describing once in a sort of an abstract sense like okay then well now you can just go you know

22:33 know what I mean? It says, Hey, look, it also works both ways. If you're a FOSS maintainer,

22:39 the miracle of your software passing, bypassing copyright laws and liabilities and procurement

22:44 means that you can get your software out there and have people use it pretty easy, right? Because

22:49 your stuff is much easier to adopt because it's open source. I mean, I've been on the vendor side

22:55 of these negotiations and paperwork and accounting and legal more than once. And it sucks. It sucks.

23:03 I mean, look, Hey, people want to put me in as a vendor and buy stuff.

23:06 I'm here for it.

23:06 But at the same time, it is not fun.

23:08 Right.

23:09 And there needs to be like, if you're just a hobbyist, like, well, no.

23:12 All right.

23:12 So the final bit of this article, the final bit of this thought piece is you can't go back.

23:16 So if we're trying to solve, if we're trying to solve the sustainability of open source

23:22 software, you have to keep in mind the reason, one of the main reasons it's so popular is

23:27 it skipped the copyright rule stuff.

23:30 It skipped the vendor onboarding and all these things.

23:33 So if your solution to fix sustainability is to recreate any of the supply chain framework problem, your solution is dead on arrival.

23:41 So I think that's what this is why I wanted to bring up this article.

23:45 I put it at the end of the year.

23:46 It's kind of like I would love to see more sustainability options for open source.

23:51 But I do think that this guy is on to something here.

23:54 I do think that Thomas is on to something with his skipping the legal, skipping the procurement.

23:59 And if we put it back and say, well, you got to set up a vendor agreement with us again.

24:02 And then you're unraveling a lot of the things that made it a really good fit.

24:07 Yeah.

24:08 The article does a lot more detailed explanation than I did,

24:11 but they're for people to think about.

24:13 I hope this, yeah, I hope we don't go back.

24:17 There are pressures to push it back.

24:20 Like you were saying, there's the projects that just, they can't,

24:24 they know that enterprise is using it and they're not getting paid.

24:27 And that isn't as a bummer.

24:31 And if you're not charging anything, you can't just make it up in volume.

24:37 We've tripled our revenue from what it was last year.

24:39 Still zero.

24:40 With things like trying to secure the supply chain, we are, I mean, even open source is part of the supply chain, whether or not you want to believe it is.

24:51 And so there are pressures to, you know, put SBOMs on or the software bill of materials to verify all your subcomponents and all that stuff.

25:01 Python is helping to make that easier for individual maintainers of projects, which is cool.

25:08 But it's still some extra work.

25:10 And I don't think it's fair that maintainers are having to do that work.

25:15 And they don't benefit from it.

25:17 The companies benefit.

25:19 And we do need to find a way to get money to vendors better or money to contributors.

25:27 Yeah, I 100% agree.

25:28 I do.

25:30 But yeah.

25:31 I don't have a great direct, like force them to do it type of answer.

25:35 But yeah.

25:36 Hopefully many of them will see like, hey, we benefit from this thing.

25:39 If we were a major sponsor of this project, we could have the ear of the maintainer team

25:46 to get the thing that we really want.

25:47 I think that's a possibility.

25:50 Yeah, there might also be some like maintenance agreements sort of stuff.

25:55 It's definitely open source, but also whoever the main maintainer is,

26:02 is for a small fee promising to look at your defect reports

26:08 or things like that.

26:09 Yeah, there's this whole productized consulting sort of thing

26:13 I think would be pretty good, where it's like you're going to pay,

26:15 basically I'm going to pay you a retainer and you have a certain amount of credits you can redeem

26:20 that expire at the end of the month for me to potentially come and do exactly like what you're suggesting.

26:24 And if you don't use it, that's fine.

26:25 but I'm here at the drop of a hat if you need me, sort of.

26:29 Yeah.

26:30 You pay me $5,000 a month and I may or may not have to work for you that month,

26:33 but you know what, that'd be good.

26:35 But at the very least, or even having lower ones so more people do it

26:38 and to make sure that things are actually stayed maintained

26:43 because there's a lot of stuff that's just done and you can't tell whether or not it's really maintained.

26:48 Anyway.

26:49 Yeah, that's 100%.

26:51 100%.

26:52 In fact, you might even want to go and find just a complete,

26:55 I don't even put it on GitHub anymore.

26:56 That's how much I'm changing my mind about open source.

26:59 Yeah, so this next topic was going to be about looking for GitHub alternatives.

27:09 And so I just left it as the title.

27:12 Should I be looking for GitHub alternatives?

27:14 And why am I talking about that?

27:16 I mean, GitHub's awesome.

27:17 Why would you?

27:18 Anyway, I think it's great.

27:19 I'm still happy with GitHub.

27:21 But they sort of fumbled recently.

27:23 Did you hear about all this, Michael?

27:25 yes with the billing oh yes I heard about oh yeah so so what happened what bothers me more even is

27:31 the the clear lack of craftsmanship and care around the code that runs these it's like you get janky

27:38 code and we're gonna charge you oh and our bug is also gonna sometimes make it run for hours and

27:42 then we'll charge you still for that too yeah so there's some pricing changes and the message

27:49 pricing changes and they like released it on December 15th and then they they think and then

27:53 just recently updated it i can't i don't know when the update was on oh the original announcement

27:59 was on the 16th um there's an update to it so they um the gav actions it's way popular than they

28:08 thought it would be and actually like just tons of people just switched from and it happened at a

28:13 similar a lot of times where people were like travis was imploding so people were trying to

28:17 uh leave travis and were like oh you have actions is here let's just use that um that's part of it

28:24 But it also benefited GitHub a lot.

28:26 A lot of projects started using it more.

28:31 However, I get that they have to pay for that compute somehow.

28:35 However, they've said, let's see, they're going to have GitHub or hosted runners

28:43 are going to reduce their price by 39%.

28:46 And I actually didn't realize that they were charging because apparently I don't use it enough to get billed for it.

28:52 But in the announcement, they also said that you could see the hosted the non hosted runner.

28:58 So like the code that you you've got your own computer set up to run your stuff.

29:03 They were going to charge for that, too.

29:05 Look, I think that's insane.

29:09 It was not a lot.

29:09 It was like two tenths of a cent per minute or something like that.

29:14 But but that's like it's just sitting there waiting for your GitHub runner, your get runner to finish.

29:21 Why would they charge for that?

29:23 Anyway, I don't know.

29:24 There's been a change.

29:25 So we're going to link to the announcement of the pricing change.

29:29 I didn't get too much into the details of the pricing change,

29:34 but it's kind of weird to charge the same amount for both,

29:37 whether or not you're using a hosted runner or your own runner.

29:41 That's weird.

29:41 So they've actually backed off.

29:43 So they're going to postpone the billing for the self-hosted.

29:49 They didn't say they're going to not do it, though.

29:51 It's just postponed.

29:52 Yeah, that's weird.

29:53 So I get the argument like, wow, we thought we'd have to buy 100 computers and we're on our 100,000th VM.

30:00 We've set up this as a little out of control.

30:02 That doesn't apply to self-hosted.

30:04 Well, I mean, the actions are still running, so they're not really charging that much for the actions.

30:10 Just the, I mean, all the rest of the stuff is mostly coming for free.

30:17 It's just.

30:17 Right, right.

30:18 But I mean, if you have a self-hosted GitHub Action runner,

30:21 they're not paying for the compute to run it because you're self-hosting.

30:26 Yeah.

30:27 Like maybe, like, and if they are having to, I mean, they have to have something that sits around

30:32 and like waits for it or something.

30:33 I don't know.

30:34 But figure out how to do that way cheaper.

30:37 It should be like super cheap.

30:40 Anyway, because that's like, that's one of the reasons why people have their own runner

30:43 is to save on compute.

30:45 So yeah, that was weird.

30:47 So I went ahead and like, you know, why not look at other stuff?

30:50 So let's look at some other.

30:52 That's the warning thing.

30:53 Some other alternatives.

30:55 So I found this article.

30:56 I just searched for it.

30:57 There's four GitHub alternatives that are just as good or better.

31:02 And there's some that I hadn't heard of.

31:03 So this is kind of fun.

31:05 I hadn't heard of Codeberg.

31:06 So nonprofit community-led effort that provides Git hosting and other services for free and open source projects.

31:14 Okay, so it's not for private projects or something, but there's a lot here.

31:19 So maybe something to look into.

31:21 But I don't think that GitHub is charging that much for open source either.

31:26 But it's fun to look at some of these alternatives.

31:28 Yeah, I think Codeberg only lets you have open source.

31:32 Just only open source.

31:33 Yeah, it's like free.

31:34 You almost got to apply to a join sort of thing.

31:39 And then Bitbucket.

31:40 I mean, like, I didn't, I guess I forgot it's around.

31:44 Sorry, Bitbucket.

31:45 I did too.

31:46 I use SourceTree all the time, which was, I believe, made sort of as the front end of Bitbucket if you want to desktop thing.

31:53 Yeah.

31:54 And still, I forgot Bitbucket exists.

31:57 So, Bitbucket, yeah, it's not, oldest established competitor of GitHub.

32:03 I think it predates GitHub.

32:05 I'm not sure.

32:06 But it launched around the same time in 2008.

32:09 it's still maintained it's still there so you can um and the interface is a lot better than it was

32:14 way back in the 2008 9 10 time frame when i was using it but uh bit bucket git lab and actually

32:21 git lab's a solid alternative i use uh git lab at work and um the thing that yeah i like git lab

32:28 uh definitely a an option to look into it uh git ea g g-i-t-e-a haven't heard of this before but

32:37 it's around as well and then while i was looking around for this i also came up came around some

32:42 some comments on socials about tangled it's an alpha it's a new it's a new thing it came out

32:48 this year i think um a uh tightly knit social coding so they're really trying to um and they're

32:57 launching as a lightweight lightweight github repo get repo hosting but the way they're

33:04 dealing with it, I think, is the pipelines and the runs are running. I don't know if they have

33:09 runners in the cloud. I think it looks like they're mainly trying to get you to run your own runners.

33:15 So it's interesting. I could be wrong, but there are definitely some different options around there

33:21 if you really do want to get off GitHub. I like GitLab and GitHub mostly.

33:28 I'm always tempted to do some self-hosted thing. I love the idea of it so much.

33:33 Yeah.

33:34 So I have to talk myself off the ledge periodically.

33:37 And if you're doing something just for you, I think it's cool to pick something based on features, right?

33:43 Or some kind of philosophy of the company.

33:46 Like this one is only open source, or this one is super privacy,

33:48 or this one is European-based or whatever, right?

33:52 However, if you're doing open source and you actually want it to be used by people,

33:57 there's no other option than GitHub.

33:59 Well, okay.

34:00 I think if you really want people to interact with it, GitHub, and contribute.

34:07 I mean, contributors, yes, exactly.

34:09 And file defects and all that sort of stuff, GitHub.

34:14 But I've seen a lot of projects that a lot of the community

34:17 is just complaining, either complaining or asking for features that aren't even part of it.

34:24 So you're doing, basically, if you don't want interact, if you want people to use it, it needs to be on PyPI for Python.

34:32 But if you really don't want people to file defects and contribute junk,

34:39 yeah, I think switching to GitLab or something like that totally makes sense.

34:42 Yeah.

34:43 I mean, it's like saying, I don't like that Twitter went away,

34:45 so I'm going to set up my own private social media and then invite my friends to join.

34:50 They may or may, they probably are not going to come.

34:52 If they do, they're probably going to not visit it after three days.

34:55 You know what I mean?

34:55 It's like, even though these things are awesome in GitHub

34:58 as being not ideal in some ways.

35:00 Yeah.

35:01 The truth of social stuff is you got to be where the people are.

35:04 Otherwise, it's tough to work with.

35:05 So anyway, that's mostly a note to myself in the future.

35:08 Anyway, okay.

35:11 All right.

35:12 How are we feeling about extras?

35:13 I have a couple extras, but why don't you go?

35:16 Okay.

35:16 Let's talk about PyCharm for a second.

35:19 So I'm a big fan of Ruff.

35:21 No doubt about that.

35:22 I'm also a fan of Pyrefly, which I've been using a lot lately,

35:26 And ty, which I believe ty just went into beta.

35:29 Shouldn't that be one of our items?

35:30 I believe it should be.

35:31 It probably should.

35:33 But ty, the one from Astral, that is sort of the high-performance companion or frenemy of Pyrefly,

35:40 they both are now in beta mode.

35:44 And with the latest release of PyCharm, it expands its LSP support

35:49 so that it has native integration for Ruff, ty, and Pyrefly plus Pyrite.

35:55 And this news comes to us from Daniel Muldmer, if I haven't said so.

35:57 So thanks, Dean, for sending that in.

35:59 And there's actually a whole link, a page which I'll link to about the LSP support and how you turn that on if you want.

36:06 So you can have, like, native Ruff integration and so on.

36:09 So anyway, shout out.

36:11 Shout out to that.

36:12 Also, RUF's page has a setup for how to do it in reverse.

36:15 The LSP being for language servers always throws me.

36:19 So I'm like, PyCharm now supports LISP, but that's weird.

36:22 I know.

36:24 Also, it feels redundant, an LSP server.

36:28 It's already a language server.

36:29 I guess a language server, protocol server.

36:31 Shouldn't it just be a language server?

36:33 I don't know.

36:33 It's like saying it's an HTTP website or something.

36:38 I don't know.

36:39 It's HTTP protocol.

36:41 Yeah.

36:42 Right.

36:42 It's an HTTP protocol website that you access with your browser now.

36:45 Okay.

36:45 Last thing.

36:46 I didn't save the link to this, but I thought this was a fun...

36:52 I saw this on xTwitter, and it's just like a little sign off,

36:55 like sort of wishing you well or like, take care till next time I see you.

36:59 But here's the developer version.

37:01 May your bug tracker be forever empty.

37:03 Oh, nice.

37:03 Yeah, very nice.

37:04 It's a little bit of a play on Hunger Games, I believe.

37:07 May the odds be forever in your favor.

37:08 You know, that sort of thing.

37:09 Yeah, and like I was saying, if you really want your bug tracker to be empty, move it away from GitHub.

37:15 Yep.

37:17 A couple of things, just a reminder to people, I am taking this the rest of December off from updates to the lean TDD book,

37:25 but, but this is an attempt to explain to people how to actually get productivity

37:30 gains from test driven development.

37:32 But I'll pick it up in January.

37:34 I'm hoping actually to finish the, finish the entire first draft in January.

37:37 That's the goal.

37:37 That's a, that's an aggressive goal, but,

37:40 but I have all the stuff I want to do.

37:41 So we'll see.

37:43 Okay.

37:44 Finally, pie, the pie test course.

37:46 I just had somebody asked me this morning, sent me an email and said, hey, I bought the book.

37:51 Love the Python Testament by this book.

37:54 And I'd like the course.

37:56 Can I get a discount?

37:57 And I just love people that just ask.

37:59 So I gave him a discount, of course, but also so you can always email and ask.

38:04 But I also just decided to throw a 50% off sale for the Christmas time.

38:10 So last minute Christmas shopping for yourself.

38:13 I'll put this in the show notes, But if you use the code Xmas, X-M-A-S 2025,

38:19 I'll give you 50% off.

38:21 Very, very nice.

38:22 And I'm looking forward to a more efficient and error-free 2026 Christmas

38:28 after Rudolph and team use your discount, learn test-driven better.

38:33 And then, you know, next year round, their deliveries will be more error-free.

38:36 You're doing a service for all the kids.

38:39 Yeah.

38:41 All right.

38:41 All right.

38:42 We got a couple of funny things.

38:43 We do.

38:44 One is mine, one is yours.

38:46 So what if you have errors in your code?

38:49 Well, that's what structured error handling is for.

38:53 Exceptions, you know, try, catch, try, accept, depending on your language.

38:57 But what do you do when the error happens, Brian?

38:59 What do you do when the error happens?

39:01 One possibility is to log it.

39:02 You've got to already have your login set up.

39:04 So, you know, there's a few steps.

39:05 I guess you could print it.

39:06 That's a bit of a help.

39:07 Maybe you just have a beep, play the beep sound when an exception happens.

39:11 I don't know.

39:12 Well, this person decided to write a simple two-liner.

39:17 This is in JavaScript in the example, but it could be just as well.

39:20 It says, if I catch an exception, I'm going to create a string that's

39:25 HTTP colon slash slash stackoverflow.com slash search question mark Q equals.

39:30 And you put the exception message in the end and then you open a browser to that.

39:34 Wow.

39:35 Problem solved.

39:36 Old school.

39:37 That's old school.

39:37 I think the modern version is to just call an open AI API.

39:41 Yeah, just ask your agent to run it, catch all exceptions, and fix it for you with PRs.

39:48 Exactly.

39:49 Yeah, just feel free to go ahead and auto-commit and publish it at production.

39:52 I don't need to review it.

39:53 Yeah, but be sure to label it with the prompt for that we discussed last week.

39:58 Exactly.

40:00 Let's see.

40:01 Any good comments?

40:02 Is this real?

40:02 This is hilarious, whether or not.

40:04 This is perfectly fine for local prod as well, as far as I'm concerned, production as in live.

40:10 Cutting out the middle, man.

40:12 Literally saves a precious three seconds.

40:14 3.531, actually.

40:18 Oh, and someone literally did write a ChatGPT alternative in the comments.

40:23 Nice.

40:24 Yeah, there you go.

40:25 Yeah, perfect.

40:26 So it even came up with a prompt for you.

40:28 Following error, it's occurred in my JavaScript application.

40:30 Please write code that resolves this issue.

40:31 Respond only with code.

40:33 Here's the exception.

40:35 Oh, yeah.

40:36 Pretty good.

40:37 Pretty good stuff.

40:37 All right.

40:38 This one's for you.

40:39 You got it.

40:40 Okay.

40:40 So last week, what did we title our podcast episode?

40:44 Something like LinkedIn something?

40:47 Anyway, somebody responded with, oh, LinkedIn Cringe.

40:53 Somebody called Archtoad said, LinkedIn Cringe made me think of this.

40:59 It's AI blockchain kombucha startup.

41:02 Anyway, this comes from Archtoad referring to a post by Tim Kellogg

41:10 using nano banana prompt, create a super annoying LinkedIn profile, which is amazing.

41:17 So the profile is great.

41:19 The with a with a like a hero image with somebody giving a speech and the on the screen is disrupt

41:26 or die, which is great, great screen capture.

41:30 But the let's see, let's read his profile.

41:33 He's a visionary, 10X growth ninja, chief evangelist at stealth mode, at a stealth mode AI blockchain kombucha startup.

41:43 That's awesome.

41:45 Helping Fortune 500 CEOs maximize human synergy means nothing.

41:51 A TEDx speaker applicant.

41:56 Not even TED, just like a TEDx.

41:58 Yeah, sure, TEDx, which is like the original.

42:01 I applied to speak.

42:03 I didn't get it, but I applied.

42:06 Forbes 30 Under 30 nominee.

42:08 Oh, my gosh.

42:09 A dog dad, coffee addict.

42:12 Why are you still reading this?

42:13 Let's connect.

42:17 About Bryden just doesn't just work.

42:19 Bryden shifts paradigms.

42:22 That's awesome.

42:24 Anyway, really good things I'd like to see in a LinkedIn profile.

42:30 This is pretty good.

42:31 I didn't realize that this originally came from Nana Banana.

42:34 I feel like the challenge is on for the follow-ups.

42:39 Yeah.

42:40 Pretty amazing.

42:40 Pretty amazing.

42:43 Anyway, it's been an amazing run for us and an amazing 2025, I think.

42:49 Things are going good.

42:50 And, I mean, aside from, like, you know, our entire country imploding.

42:55 But, you know, other than that, things have been going pretty good for you and I.

42:58 So it's been a, you know, the backhanded compliment curses, may you live in interesting

43:04 times while things are interesting.

43:06 Definitely interesting.

43:07 I do want to say though, thank you to everyone for listening this year, all the years and

43:11 here's to 2026.

43:13 Yeah.

43:14 happy holidays and hope everybody has a good new year.

43:17 Yep.

43:17 Bye.

43:17 Bye.

43:18 Thanks, Brian.


Want to go deeper? Check our projects




Subscribe to Python Bytes