"Last commit date" is not a good metric in a vacuum

Published 2025-10-16

(A few edits for clarity 2025-10-17)

tag(s): #yell-at-cloud #programming

The context

I am not a user of RSS feeds. I only added one to my site after a couple people asked, via email.[1] But...lately I follow enough blogs that checking for new posts in my bookmarks has been a bit of a chore. In particular for rarely-updated blogs.

If I had to use a reader, I would go for either Newsticker (built in Emacs reader) or Elfeed (by far the most popular Emacs reader).

The problem is...I read blogs in my personal laptop and my phone. Sometimes at work too. So I need a way to "share the state" between Emacs instances, plus a solution to sync with an iOS reader. What to do?

Well, I could use a third party service! And then all devices would share the same "state". But since I now have a VPS, I could instead host my own RSS aggregator! Looking at lists of self-hosted software, there's a ton of them. Which one to choose?
I want something minimal, that "just works". I don't care if it has extensions, or it is super configurable. And ideally built with Python...

Victoria David Beckham meme template.
(direct link to image)

The trigger

I was checking out a blog post that compared a few of these self-hosted readers, and the guy did an OK job.
Except that every single review started with the GitHub stars count and date of last commit. And points were deducted from the review if the commit date was "not recent enough".

Since I can only be a curmudgeon once per night, I am picking on "date of last commit" for today's rant.

An eye opener (via Lisp)

I was guilty of those crimes too[2], until I read a few years ago the excellent, and still relevant, "A road to Common Lisp" by Steve Losh. In particular the sections "Escaping the Hamster Wheel of Backwards Incompatibility" and "Practicality Begets Purity".
Sure, Common Lisp is blessed with being particularly immune to bit rot, because of the curse of its specification being untouched since 1990.
And it gets away with it because the language (and ecosystem) has the ability to add new features without touching said spec, in ways that no other can.

But there's a deeper lesson there, one that I was thinking about when, some time after reading that post, I was evaluating libraries for some work thingy[3].

My advice is this: as you learn Common Lisp and look for libraries, try to suppress the voice in the back of your head that says "This project was last updated six years ago? That's probably abandoned and broken." The stability of Common Lisp means that sometimes libraries can just be done, not abandoned, so don't dismiss them out of hand

What if one of these libraries is done?.
And I will be honest, I had been programming for a long time by then, and either this thought never occurred to me...or I had forgotten the possibility, caught in the whirlwind of constant updates for everything.

Brief digression

This is not unlike a mini-revelation that I had around 2011/2012, that I didn't "need" to be on top of every language/framework/major library release.
Eventually I would work with them, and then I can get caught up, or the update would never be relevant to me.

This sounds silly, but it was a huge relief. It helped me slow down a lot.
Maybe even helped me "go deeper" into some stuff, as a developer? Mmmm I know I gave myself permission to exaggerate a bit in the post, but that sounds like too much. Anyway.

Things to evaluate WITH the date of last commit

I am not saying "date of last commit" isn't important. I am saying that you can't only look at it as a measure of a project's health, unless you also consider...

Project maturity

If a repository has a library that's been built since 1999, then I would expect it to be stable enough that it doesn't need to have recent commits to be useful. But you also have to consider...

Feature set

When a project's scope is big enough, it is going to be perpetually fixing bugs.
But if a repository hosts a small GUI application, that has a single window with two file pickers and a button, maybe it is done? Done-done? But you also have to consider...

Platform stability

In the same post quoted above, Steve says: My current day job is in Scala, and if a library's last activity is more than 2 or 3 years old on GitHub I just assume it won't work without a significant amount of screwing around on my part. .
So yes, if a Python repository hasn't been updated since 2011, I would look closely to make sure it is actually Python 3 and not Python 2. 🙃
But maybe a project's last commit is in 2016. It depends on Requests and the built-in CSV module, and some smaller PyPI projects that are also stable...then, it is fine?

Back to RSS aggregators

I still don't know which one I will pick. Or if I will take the opportunity to build something on my own, very basic. Like, not even a proper aggregator: just a SQLite database, and regularly update a list of feed entries. Which I then manually mark as read in a very plain-looking front end. Sounds good?
No, it doesn't, to be honest.

But, as far as evaluating the different projects: since I am interested in something as small as possible in scope, and the more conservative in library and platform choices, the better...I wouldn't look as "date of last commit" as a very good metric.

Conclusion

Feature creep everywhere.

Footnotes
  1. By the way, the feed's XML is generated by a custom Elisp function. Like everything else on this site. It's turtles parenthesis all the way down.
  2. Look, I already said this is a rant, and it can't be a proper rant without hyperbole. Right?
  3. The exact details now lost to time...based on the dates, probably some C# thing.

Share your thoughts (via email)

Back to top

Back to homepage