Hacker News new | ask | show | jobs
by Cynddl 3294 days ago
Despite the title, the article raises an interesting point: why do we prefer new code, with less features, to old but robust projects.

> Unfortunately, we were affected by cognitive bias: old code is bad code. But the truth can be the opposite. The old code is battle-tested by thousands of users in hundreds of different projects. Most of the critical bugs have been fixed, the documentation is complete, there are tons of questions and answers on StackOverflow and Quora.

I'm quite guilty here; I've realized that I always check the date of the last commit on Github before testing a project. I feel like I do this more for small projects where documentation and use cases might be missing, and for which I'm expecting help from the community.

5 comments

Old last commit date could mean two things:

1. Project left in unfinished state and development stalled, in which case it's reasonable to run away from it.

2. Project done (fulfilling it's purpose) and turned to maintenance mode, in which case I'd be quite happy (as a matter of fact I'd prefer) to use it as I know I'm dealing with a stable codebase and don't need to be afraid of breaking changes in the future.

I think it would help if maintainers would state the "completeness" in the README file.

This used to be indicated by version numbers:

- 0.x = version in some beta/alpha/unstable state

- 1.x = version in somewhat stable/complete state

A project could be effectively both - the developer still wants (wanted?) to add more features, but what's there is complete and stable.

Word of mouth and some good old experimentation seem to be your best options for identifying solid tooling.

I think most of the time I just assume it's #1 and then check into the issues to see the number/severity of the current problems and if any important things are being neglected.
I find that additionally (presuming github or similar) that looking through for any recent issues helps a lot... npm download rate is another metric for comparison. Thouse some obscure bits may not see so many downloads at all.
Maybe because we're swayed by superficial, yet impactful choices: the use of a "modern-looking webpage with a visually-attractive theme", the use of the latest technologies - or at least those the community is talking about, buzz around the project, etc.

I realize it's tedious, but even older projects could do with periodic updates to tutorials, documentation, webpage updates and outreach to draw new interest from the community.

"It may be stable, but is it pleasant?" to use, to develop with, etc. That matters. There is definitely a goldilocks zone for libraries/frameworks, where they're mature enough to be reasonable to use in production, but still recent enough to not require a lot of effort to bring up to date.
At work, we've been using Elixir. Because of the Erlang interop, I find myself looking at a lot of Erlang code that hasn't really had any reason to be touched in years. It's really bizarre seeing a project with no commits in the last few years and having to decide if it's abandoned or feature complete.
>I'm quite guilty here; I've realized that I always check the date of the last commit on Github before testing a project. I feel like I do this more for small projects where documentation and use cases might be missing, and for which I'm expecting help from the community.

I do it because of code rot. The environment you will surround the project with (runtimes, libraries, frameworks) has often changed enough in 2-4 years to render it unusuable.

Additionally a recent commit implies regular maintenance which implies that if you report it will get fixed.

Also, projects are often abandoned because there is a clearly better version out there.

Old last commit isn't a good metric for health; particularly for projects that don't go anywhere near hardware. There's plenty of time-tested and popular C libraries that only _very_ rarely see a patch suggestion, let alone a commit.

Check the mailing lists and forums; and look around for projects that depend on it.