Boring tech is mature, not old
306 comments
·February 11, 2025_fat_santa
steveBK123
Exactly - This is known to graybeards and mostly ignored by the youths.
We've seen the wheel re-invented many times and would prefer to work on something other than the wheel again. Stuff like solving user problems and making money.
Meanwhile you have the coworker who uses some new but soon to be deprecated language/framework on every project, leaving a field of unsupportable debris in their wake..
steveBK123
My favorite genre of this is the guys proposing Greenfield rewrites of a multi-decade old app, using some tech less than 1 year old.
Turns out brand new stuff doesn't always survive, and even if it does you don't know its tradeoffs & pain points yet.
Everything is perfect & bug-free when it has no product use.
Seen it many times, and seen the wreckage later.
woliveirajr
Remembers me of https://www.joelonsoftware.com/2000/04/06/things-you-should-... : "All new source code! As if source code rusted."
swat535
I experienced this few years ago. I was hired with a team of consultants (I know.. I know..) because the system in question would have data randomly disappear from their databases every few weeks and it would take the operation team a month to notice, so by then the issue was harder to rectify.
The engineering team in question had proposed to rewrite an old Java app with AWS Amolify and replace their Postgres database with Dynodb. The whole thing was then ducktaped with Lambdas and spread across multiple regions. They had not bothered writing a single line of test, never mind having any kind of build and deployment pipeline.. they didn’t even have basic error reporting.
After doing a deeper dive, we discovered that engineers didn’t have a local environment but only had access to staging, however they could easily connect to the production database from local by just updating environmental variables. It turns out that one of them had forgotten to switch it back after debugging something on production from his machine and had forgotten to switch it back.. he had a background cleanup job running in intervals which was wiping data..
It was a complete nightmare, the schema less nature of Dynamo made it harder to understand what is happening and the React UI would crash every 15 minutes due to an infinite loop.
The operation team had learned to use the Chrome console and clear the local storage manually before the window feeezes..
Spivak
Being charitable, in order for one of those new technologies to become mature and boring it requires guys like that to actually use it for things. So while it might be misguided we thank them for their sacrifice of getting caught on every sharp edge so they might be dulled (or at least documented) later.
cbozeman
> Greenfield rewrites of a multi-decade old app
It depends on what you mean by "multi-decade old app".
Excel is a multi-decade old app. Windows is a multi-decade old app.
They're both still being actively developed with a lot of new and cool features added though, and that keeps it fresh.
The multi-decade old app that hasn't been touched in 20 years? It need a rewrite. And yesterday.
I suspect though, that is not what you meant.
bigiain
I can, off the top of my head, name at least half a dozen of "those guys" and describe in detail the wreckage they left behind. Including one that was a major contributor to an 80%-of-the-billings client finding an alternative agency resulting in almost 100 people losing their jobs. :sigh:
ffsm8
Your phrasing implies that the Greenfield rewrite is always a mistake.
Depending on the project, it might actually be the only sane option if you're still required to make significant changes to the application and features have be be continuously added - and the project has already become so full of technical debt that even minor changes such as mapping an additional attribute can take days.
As an easily explained example for such: I remember an angular fronted I had to maintain a while ago.
The full scope of the application was to display a dynamic form via multiple inputs and interdependent on the selected choices of the available form (so if question 1 had answer a, question 2+3 had to be answered etc).
While I wouldn't call such a behavior completely trivial, on a difficulty line it was definitely towards the easy end - but the actual code was so poorly written that any tiny change always led to regressions.
It was quite silly that we weren't allowed to invest the ~2 weeks to recreate it
Another example that comes to mind is a backend rewrite of a multi million PHP API to a Java backend. They just put the new Java backend in front of the old API and proxied through while they implemented the new routes. While it took over 2 years in total, it went relatively well.
But yeah, lots of Greenfield rewrites end in disaster. I give you that!
MDGeist
Totally agree, but how often is the young coworker using the hip new language in their position because they were told learning it was the key to getting a job in a competitive market and it is what they have to fall back on?
Somewhat similarly, I feel like the boring/mature infra often gets ripped up in favor of something hip and new by a CIO who wants a career checkmark that they "modernized" everything. Then they move on to the next company and forget the consequences of breaking what was stable.
whstl
I have a lot of respect for anyone doing this, as someone who also had to work for a living.
Same as I have for people resisting it because they want stability.
It is the management’s job to handle this decision and any potential problem caused by it, period.
II2II
Modernization can mean replacing 50 year old technology with "20 year old" technology. I stuck in the quotes because something that is perceived to be that old is probably under active development, and modern while remaining boring.
steveBK123
Actually seen a ton of this from mid-career people who should know better but don't (or don't care). New grads aren't leading Greenfield multi-year projects.
marc_abonce
Yeah, Resume-Driven Development is unfortunately such a common methodology and companies indirectly push for this by punishing candidates who admit to doing maintenance work and bug fixing instead of rearchitecting everything every year.
latexr
> This is (…) mostly ignored by the youths.
> We’ve seen (…) and would prefer (…) making money.
You think “the youths” don’t care about making money? That’s got to be in the top two reasons why people get into coding for at least the last decade. It’s also one of the top two reasons everything is shit, too many people only care about a quick buck.
kelvinjps10
the incentives are towards learning the shiny new tech, a FANG company created,so you can get a job in one of these companies
rubymancer
Three times now I've argued strenuously against using MongoDB and Elasticache as the primary data store in an app, as they will inevitably turn into relational databases.
They did.
For Mongo going to postgres went great, but for complicated reasons we're stuck with Elasticache forever on our main product.
jimbokun
The only reason to ever use a non-relational db is for scalability and performance reasons. Joins and transactions are hard to do correctly and efficiently in a distributed system. So “NoSQL” solutions can be a good fit if your data is too big to fit on a single host and you can get by without joins and transactions.
(This is a massive oversimplification, but still used rule of thumb.)
rootnod3
Yes. The only wheel re-inventing I agree with is for learning purposes. I one would say rewrite SQLite, be my guest, it's a really good way to learn. But proposing it as a replacement is....bold. Might still be something to it, but that usually doesn't stem from a simple greenfield project.
bbbobbb
It's often ignored because not all people get to work on interesting new features or care about the customers. This is all cool and dandy if you're a founder or working a job where the actual product is interesting, but most jobs are boring with no actual incentive or even a way how to care about the customer and then making it at least technically interesting in some aspect is a way not to go insane.
Just playing the devil's advocate here. I would prefer using boring technology that gets the boring work done as quickly and easily as possible anyways, but that's because I have more fun doing other things than working.
ozim
I think it is important to point out that boring tech is not Java 8 or .NET 2.0 that some companies are stuck with.
There is still lots of interesting stuff if your company uses newest Java or newest .NET but both are „boring” in a good way so mostly stable and changes to those are incremental and progress is stable.
Heck Angular with its latest improvements in v17 and v18 is quite interesting - but counts as totally boring and stable tech. Migration to signals and standalone components is a bit of a hassle but still is rather easy.
andrei_says_
A notable aspect being that grey beards have had our fill of bikeshedding and are no longer very interested in it.
We want to get the job done and get on with our lives.
Oh, and be able to meet the changes to the requirements we know will keep coming.
hinkley
Hot new stuff is wish fulfillment by younger devs. They know it’ll take years to catch up with what the greybeards know about Linux or databases. If ever. If someone throws a curveball in then they reason everyone is on the same page. That nobody can be much more of an expert on 2 year old tech than they are.
What they don’t understand is that after 10 or 20 years of this drama you start to realize how much of this new shit is a repetition of the shit the “old shit” replaced, but with new jargon. Similar Shit, Different Day. Progress is not a ladder in IT, it’s a spiral. The scenery is never exactly the same but it swings through the old neighborhood all the fucking time.
Eat your vegetables kid.
eastbound
At one point you need to admit Linux knowledge is unnecessary, beyond the basic cd/cp/chmox. Docker replaces it. Should I choose init.d or SystemD? None, just launch a new container.
gf000
> What they don’t understand is that after 10 or 20 years of this drama you start to realize how much of this new shit is a repetition of the shit the “old shit” replaced
That happens, sure, but all too often these same greybeards will fail to recognize when there is a truly novel thing. So do give new tech an honest chance before writing it off as reinventing the wheel.
mooreds
> Because at the end of the day my customers don't know and don't care that I use Node vs Deno or Bun, or that I use NPM instead of pnpm, or that I'm not on the latest version of node or Postgres.
They don't know. And they shouldn't!
I don't have any idea what kind of tooling was used to create the drill I bought, just that it drills holes and is at the right price. Same for any other number of products and services.
The person who made the drill cares deeply, as they should. But consumers don't.
Why is software any different?
Avicebron
I'm starting to think there should be a term like the "HN effect" where engineers start to limit test into absurdities like "show HN: I built a rust backend with an elixir front-end that's actually running doom in pdf hosted on a distributed server composed of a network of the microchips in a Saudi camel herd, get fucked nerds" it sort of lends itself to this notion that the tools matter as much as the outcome (because oh boy do we love building tools, product be damned). I mean, building tools is fun compared to sitting down in front of a client and trying to explain to someone who can't use a mouse why they can't use the top of the line 4 gb machine from the 80s isn't working.
latexr
> absurdities like "show HN: I built a rust backend with an elixir front-end that's actually running doom in pdf hosted on a distributed server composed of a network of the microchips in a Saudi camel herd, get fucked nerds"
You leaned too far into the joke and it undermined the point. There’re roughly three kinds of Show HN:
1. “I made this product to solve this need I perceived. I hope it does well and makes me money. Come check it out.”
2. “I had this insane idea which is funny just from the description and made it as an experiment. Let me share what was interesting about it. Oh, and here’s the code.”
3. “I made this AI NFT Data Harvesting scam and think everyone is too stupid to notice this isn’t a real product filled with fake reviews. Come click this link from this account with 80% flagged comments.”
What you described seems closer to 2 than anything else. There’s nothing wrong with those. They stimulate curiosity, which is HN’s goal.
some-guy
When I was younger and into electric guitar, I gushed over gear so much both at stores and on the internet that I forgot to actually practice playing my instruments.
ptmcc
Every hobby seems to have a contingent of people that are more into the gear than the activity itself
mooreds
I've seen this happen across so many hobbies to so many folks.
Easier to geek out over the gear and/or spend the cash than to do the hard work and take the time to actually, you know, do the hobby.
darknavi
I want to know that the software I use was crafted with free-range, grass-fed Rust.
datadrivenangel
Your drill was probably designed by an engineer under time and cost pressure, and then assembled in a factory by someone who absolutely did not care because they're thinking about going back to the sweatshop with slightly worse conditions but slightly higher pay.
mschnell
But the nice thing about carefully designed products is that they can be built by people who don’t care.
Not sure if that’s possible when building software systems.
sophacles
If my drill breaks, it doesn't become a way to access my financial/health/personal data possibly leading to a giant identity theft induced headache.
bigstrat2003
No, but when your drill breaks there's still plenty of potential for it to physically injure you in different ways. As mooreds said, the end user doesn't care how you made the tool, they care that it won't go catastrophically wrong on them. How you accomplished that is not relevant.
bigstrat2003
Honestly, it isn't different. Engineers are just nerds who are very prone to forgetting that the user cares about results, not tech.
null
sofixa
> Why is software any different?
Because software is living, often online, has various types of your and others' personal data, and usually runs on devices that you use for other things as well. The attack surface is massive, and more often than not, accessible. (Your drill might have a way to override the safety switch by soldering stuff to it, but you need physical access for that, and the reward is minimal; if you get into Equifax' publicly accessible servers, you get lots of important and lucrative data).
You might not care that your bank's website uses some obsolete Java framework with security holes, but you will care if they use it to drain your bank account. You might not care that your recipe generator app uses an old version of Jenkins for releases and doesn't do code signing, but you will if someone hacks them and releases a fake version that installs a keylogger on your machine, or exploits a bug in their backend to ship you malware that scrapes your Pictures folder with your nudes and important documents.
And on and on and on. A piece of software not updated for years, or a phone with no security updates, or with horrible legacy like Jenkins, is a security risk you as a user have to take at least some interest in. Yeah, you won't pick your bank by their tech stack, but when you see an atrocious website with UX out of the 1950s, absurd password length restrictions, broken domains/certificates/etc., you can be pretty sure their tech stack is a disaster, and maybe, you can try to avoid them.
kitd
I call it "Stackoverflowability". For every question you might have about mature tech, there'll be a list of similar relevant questions on SO that you can consult. The length of the list (and thus the probability of you finding your answer) closely correlates with the maturity of the tech.
marcosdumay
The more SO questions / total users, the less mature is your platform.
d0mine
This sounds wrong. Most popular and with most questions languages are likely Python, JavaScript. These are not exactly new.
giancarlostoro
I feel you on this, I've been planning out my next side project, and I've picked a Django based project that handles a good amount of what I need, I know I could build it all from scratch, but why would I invest a monument of hours for almost no benefit. I'd rather spend more time focusing on the key things that makes my idea special and not reinventing the wheel code wise.
no_wizard
being out of date on dependencies isn't the same thing as using mature tech. I sure hope you're updating on a regular schedule, for the bug and security fixes at the very least
carlosjobim
Updates generate more bugs and more security problems than they fix, so that's not really an argument. If you've made your system sensibly, it will be immune to any security problems.
kstrauser
Wat.
First, I want to see numbers to back that up. New versions bring new bugs that aren't known yet, by anyone. Old versions have older, more widely known bugs. From a stability POV, sticking with the old may be good: you know how to work around the old issues. From a security POV, that's probably bad: every script kiddie has a Burp Suite plugin to exploit it.
Second, there ain't no such thing as an immune system. You can asymptotically approach zero, like you can approach the speed of light, but it would require infinite resources to reach either.
kabigon
in my experience these new stacks, new frameworks, fancy new libraries, haven't added much in terms of user experience. I think React has but, with React comes a cacophony of ick.
gf000
React is 11 years old.
It's the boring tech of the web ui world.
HumblyTossed
Boring tech is great because it becomes muscle memory and doesn't get in the way of thinking about the really interesting problems.
miiiiiike
pnpm is pretty boring at this point. Once I started using it with Turborepo my life got a lot easier compared to npm.
maccard
Just this week, npm rotated some keys for the first time in a decade [0] and broke all of the sites I had deployed on multiple providers using pnpm. I had three sites on digital ocean which I had to switch to npm from to fix it.
The entire is ecosystem is the definition of not-boring
[0] https://vercel.com/guides/corepack-errors-github-actions
aard
I see your point here, but I want represent a counterpoint to this line of reasoning, from my personal experience. I've been in a lot of situations where someone simply wants their way--in this case they want the organization to choose their personal software preference--and so they call it the "boring" choice.
By calling it boring, they characterize their _preference_ as the majority accepted, mature, obvious decision and anything else is merely software engineers chasing shiny objects. The truth is almost always more nuanced. Both solutions have pros and cons. They trade-off different values that resonate more or less with different people.
So, please be careful with the "it's boring and therefore obviously better" argument. Don't let it be a way to summarily dismiss someone else's preferences in favor of your own--without a deeper discussion of trade-offs. Otherwise it's no better than any other condescending attempt (ex. I'm in charge, so we are doing it this way. No one ever got fired choosing IBM/Microsoft/..) to win an argument without having to present real arguments.
whstl
Yep. A lot of people are doing this in this topic.
Anything that makes money is boring, anything that they like is boring, another poster saying that "boring tech stacks tend to be highly scalable".
By tomorrow we'll have people saying boring tech also brings world peace and cures world hunger.
The "boring" meme is just a conversation killer.
citrin_ru
> be careful with the "it's boring and therefore obviously better" argument
The same way I would say be wary an argument which can be boiled down to "it's newer so it's obviously better". I used to made such argument myself in the beginning of my career but now I see that proffering everything new is a bad strategy.
Comparing software objectively is hard (if not impossible), and there is a place for personal presences too. But if after a discussion of pros and cons it's not obvious which of two options is significantly better I would be inclined to choose an older and more established technology.
kubb
Demagogy is MUCH better than real arguments. Most people you work with will have trouble even understanding the latter. They don't have time, they're overloaded, their kids are waiting at home. Give them the warm feeling that they're doing the right thing. Make them feel smart, experienced, elite. That's how you get support, not by appealing to (ugh) reason.
DavidPiper
It's hard to tell whether you're clearly joking from the perspective of an engineer, or clearly serious from the perspective of an org leader.
mybazongas
I think people are just tired of arguing with people who think you need, say, an entire cluster orchestration system, and a renderer inside your renderer just to serve up some web pages. It's a lot easier to just tell people to use "boring technology". The ones who get it, get it.
paulddraper
E.g. Java is boring.
But I would suggest that Kotlin gets you all the "boring advantages" of Java, with feature adds.
taeric
I would only add "stable" to what "boring" tech is. Notably, though, not "stable" as in "doesn't crash." But more as in "doesn't change."
I think you typically see this with older, established, things. But there is nothing guaranteeing it. And, indeed, it is often the result of specific action on the stewards of a technology.
This can often be couched in terms of backwards compatibility. Which is a clear action one can pursue to get stability. However, it can also be seen in greatly limiting scope. As an example, we love talking about scale, but that doesn't mean you have to design and build for scale you will never see.
andrewmutz
Not all boring tech doesn't change. Rails has been around for 20 years now and actually sees a great deal of change. There are many new and better ways to solve problems in the framework with each release.
jaredklewis
I think it’s kind of moot to argue of over the definition, because in practice “boring” just means that someone likes something. Similar to other terms like, “best practices,” the term is now vapid. It might have at one time meant something, but is now just synonymous with “I like this.”
If you like something it’s a “best practice.” If you don’t, it’s an “anti-pattern.” If you are used to something and like it, it’s “boring.” If you are not used to something and expect you won’t like it, it’s a “shiny object.”
IME, these sorts of terms are not helpful when discussing tech. They gloss over all the details. IMO its better to recognize the various tradeoffs all languages and tools make and discuss those specifically, as these sorts of labels are almost always used an excuse to not do that.
taeric
Apologies on missing this yesterday. I would add that saying it is "boring" with regards to "stability" means I also trust that what I learned about it last year is largely still relevant today. May not be cutting edge relevant, but is unlikely to bite me by being flat out wrong.
"Boring" works in this regard because you are saying there is not a lot of activity behind the scenes on it. Most of the work is spent doing the "boring" parts of the job for most of us. Documentation and testing.
whstl
Rails isn't boring by any definition, it's full of surprises, metaprogramming magic and DSLs and a culture that hates code comments. Plus a community that keeps changing best practices every other year.
Which doesn't mean it's bad or anything. But "boring" shouldn't be redefined to "something I like" or "something I make money with".
taeric
Fair that it is not absolute. But I wasn't trying to claim it as fully static.
vrnvu
The eternal discussion isn't about old vs new or boring vs exciting. Mature is mature regardless of age.
A system that breaks when updating dependencies, introduces unexpected behaviour through obscure defaults, forces you to navigate layers of abstraction isn't mature... (looking at you Spring and Java ecosystem), it's old and unstable.
Stability, predictability, and well-designed simplicity define maturity, not age alone.
Is Python mature and boring? With toolchain issues and headaches of all kinds... Newer languages like Go or Rust i.e solve all these toolchain issues and make it truly boring in the best way possible.
zozbot234
Go and Rust are only "boring" if you vendor all your 0.x.y -versioned dependencies (or even worse, dependencies where the "version" is just the latest git commit to trunk) and carefully vet every single update for breakage.
pkolaczk
In my experience I had fewer problems with 0.x dependencies in Rust than with some mature 35.x dependencies in Java.
skydhash
The nice thing about Go (compared to NPM) is that a lot of those libraries are just nicer APIs for the standard libraries and not some core tech you need. You can go for the 0.x version with the absolute assurance that you can fork it or vendor it with minimal cost in support time.
gf000
Or maybe they could have made the standard lib better, then? There is zero point to such a "dependency".
mybazongas
I'm sorry, nothing is mature or stable about a language whose package manager is GitHub.
grandempire
(Genuine question). I only occasionally write python, but I just use venv and install requirements file. What toolchain challenges are out there for python?
hylaride
For a large enough project, the dependency conflicts can get extremely frustrating, especially when it's time to update them. You may need to upgrade a dependency for security reasons cough cough requests cough cough, but some other dependency that calls it has pinned another version (range).
bigtimesink
Dependency conflicts become an issue for large projects in any language. It's less of a problem when the language's runtime is feature-rich since libraries will be less likely to use a third-party HTTP client. You can choose libraries with fewer dependencies, but that only gets you so far. At some point, you can put the libraries in you monorepo, but upgrades come with a large cost.
grandempire
Yeah that is a nightmare. But isn’t that a problem on all package systems except more dynamic runtimes like NPM which can load many copies of the same library?
SatvikBeri
Everywhere I've worked, I've had a few cases where we updated some dependencies on machine A (e.g. a developer's macbook), everything ran fine, we did the same updates on machine B (e.g. an Ubuntu EC2 instance) and everything broke. This is especially case with the numpy/scipy/pandas/etc. ecosystem. In one case this took days to fix, which is insane. I haven't had that experience with any other language.
It's worth noting that all of these involved anaconda, which was the recommended way to install numeric libraries at the time. Other package managers might be better.
nyarlathotep_
Native dependencies are a huge PITA depending on their nature and lack of cross-platform portability. This can and will also pop up on CI.
mybazongas
Well, every six months, someone finally solves Python's distribution problem.
gf000
Calling one of the most commonly used backend frameworks "old and unstable", when half of the internet runs on it is just...
null
superkuh
Rust is the opposite of mature in practice. A language can be mature but if the style of devs that chose to write in it aren't, on average, then it doesn't matter.
Sometimes old versus new effects this. For example in Rust the language improves so fast I've literally had a 3 month old rustc be unable to compile a rust program (SDR FFT thing) because it used a new feature my 3 month old rustc didn't support. As I continued to encounter Rust projects this happened a few more times. Then I decided to stop trying to compile Rust projects.
Right now the dev culture is mostly bleeding-edge types who always use the latest version and target it. As Rust becomes more generally popular and the first-adopter bleeding-edge types make up proportionally less of the userbase I expect this will happen less. Bash still gets new features added all the time too; it's just that the type of developers who chose to write in Bash care about their code being able to work on most machines. Even ones years (gasp!) out of date.
LinXitoW
Is there a good reason to not just use the rust version the project is made for?
I have some Java projects using the newest 21 version, and older ones using 8.
superkuh
Yes, I don't curl|sh like recommended for my rustc or otherwise install random arbitrary compilers from outside of my OS repositories. I have an OS install with system libraries and programs and I want to use that.
I don't have to set up a custom install of a language for every single application for any other language (although python in machine learning domain is getting there). This is an abnormallity which complicates software mantainence and leads to problems. It should be avoided if possible. And setting up container for every application is also not a solution. It's a symptom. Like a fever is a symptom of infection, containers are symptom of development future shock.
To be clear, I'm talking about in the context of a human person and a desktop computer. Not employed work at a business.
jasonthorsness
I think it’s hard to tell with the signals we have on GitHub for example the difference between mature and dead as a project. Regardless of what a commit is for, it’s a sign that someone is watching and maintaining and any novel issue will likely be quickly addressed. I think this means new stuff always will have an advantage there.
Sponge5
The age of last commit on trunk is a useless metric in isolation. The fact that it is the most prominent number on the front page of a repository is a shame.
Lyngbakr
A metric I think is useful is responsiveness to issues. If there haven't been any recent commits and if I open the issue tracker and the maintainer hasn't even acknowledged issues that have been opened in the last 6 months, then I assume the project is no longer maintained.
eadmund
I would love to see a metric of the number (or proportion) of issues closed even though users are trying to get assistance. No idea how to make that machine-calculable though.
Even better, a metric for refused PRs (maybe including PR size somehow), tracking where users cared enough to try to contribute and the owner just refused to accept the changes. Easily gamed though.
tmsbrg
I wish we could just let software "die" aka be stable without constant updates. For software that doesn't have a significant attack surface (security) it'd be amazing. But because of the bitrot of constantly changing underlying APIs and platforms, oftentimes if you find some Python script that hasn't been updated for a few years it'll already be broken in some horrible ways due to dependencies changing and no longer being compatible with current versions of certain libraries.
Think of how much time is wasted because so much software that's been written but not maintained and can't be used because of how libraries have "evolved" since then.
chefandy
If you’re just glancing, then sure… and maybe if it’s only glancing-level important then that’s fine.
In my experience there are almost always some issues (either legit or misguided support requests,) PRs for docs and features, updates to libraries for vulnerabilities or deprecated code. Worth looking at stuff that isn’t open also. Even if it’s a 10 year old project and the last commit is from 6 months ago fixing a seemingly minor bug, if there more than a few stars or forks, and there aren’t ignored issues and PRs sitting there, I’d consider it trustworthy.
And if it does look abandoned but was active at some point, it’s always a good idea to take a stroll through the forks.
jasonthorsness
I ran into this mature (AND dead?) project yesterday: benchmark.js https://github.com/bestiejs/benchmark.js/
This one is actually archived last year so clearly unmaintained but so far seems to be working great. But no successor fork. I think in this case I will use it, especially because it's in test code and not product.
chefandy
Yeah they're definitely out there. Looks like there aren't any active forks either. Bummer. I had another really good example of one that was super popular but I can't remember what it was.
dspillett
I don't have anything of note publicly out there, if I did and it was still a going concern despite having had no updates for quite some time (so “fished and stable” rather than “dead and not to be relied upon unless you want to maintain it yourself”), I'd chuck a commit in every now and then (annually? every six months?) if only to update the readme.md to say that as of <current date> I didn't consider the project any less supported than it was at the point of the previous update.
ysofunny
in open source, there are no 'dead projects'. maybe just abandoned
but if you find a mature/dead project there's a chance it's just old and stable.
what I'm getting at is in an unmantained project any stranger should be able to figure out how to adrees any novel issues. it's the point of open source; I don't undrestand why this is failing. maybe beacuse understanding an anonymous code base is hard work?
LegionMammal978
In the limit, there are also many ways to debug and patch issues in closed-source projects (someting I've done once or twice myself), unless they're run through an obfuscator or something. But there's always a dividing line where "reimplementing the functionality you need yourself" is far easier than "trudging through an old codebase that's tough to even get building".
LegionMammal978
Yeah, sometimes people on HN make this assumption in the other direction, insisting that such-and-such a project is surely very mature (with a very quiet userbase) and not dead, on account of it not having any recent updates. But sometimes projects are truly just dead and buried. E.g., the million old frameworks and libraries that haven't been touched since 2005 and haven't had a functioning website since 2015. Bonus points if the only downloads were hosted on a SourceForge clone that also no longer exists outside the Internet Archive.
It's sometimes possible for a project to have 0 bugs to fix and 0 in-scope improvements (for performance, compatibility, etc.) left to make, but only if its scope is extremely limited. Even Knuth still gets bug reports for his age-old TeX.
blueflow
I found it useful to read through the open and closed issues and estimate what caused the described problems. Look at the usecases that do not work, are they common or exotic? Does the program fail safely or does it fall back to unwanted behavior? Does a certain configuration cause the program to run amok and wipe your disk?
If you get many "wtf" moments while doing this, the project is not mature.
0xbadcafebee
Nobody ever got a promotion, or hired, by using boring tech.
I have a feeling that I don't get many replies to job applications because the vast majority of work I've done is "boring", and the majority of open source code I've written is shell scripts. It all works fantastic, and has zero bugs and maintenance cost, but it's not sexy. Intellectual elitism has also defined my role ("DevOps Engineer" is literally just a "Sysadmin in the cloud", but we can't say that because we're supposed to be embarrassed to administrate systems); I'm fairly confident if my resume was more "Go and Rust" than "Python and Shell", I'd get hired in a heartbeat.
rqtwteye
Boring is great as long as you aren't looking for a job. There is a significant risk that you are slowly removing yourself from the job market if you stick to boring tech. Your next employer often doesn't give a sh.t that you provided great business value. Most of them want shiny new. When I read the ads of my current employer I don't think I would get hired.
BiteCode_dev
YMMV greatly.
Python is a very old tech (v1 in 1991), but you won't have a hard time finding a job because the popularity of the language has been kept up first with the web, then with data analysis and now with AI.
Also, the more something has been out there, the more legacy there is to maintain. There is no shortage of PHP or Java jobs. Sure they are not sexy, but you'll have work.
jaredklewis
Can you give examples of what you consider to be “boring” versus “shiny new” tech? IME job postings are dominated by mature, mainstream tech like Python, Java, JS/TS, and so on.
Karawebnetwork
I've used Copilot to give you an example of an average front-end web development recruitment message. From personal experience, this is how it they are in 2025. At the end of the day, the work itself will consist of applying small visual customisations to an existing CMS.
"Dive headfirst into the realms of React.js, Vue.js, and Angular for mind-blowing interfaces. Unleash the raw power of Svelte and Next.js for lightning-fast performance. Style with Tailwind CSS and code with TypeScript for ultra-modern, maintainable projects. Integrate GraphQL and WebAssembly for next-level data handling and execution. Build Progressive Web Apps (PWA) and leverage Server-Side Rendering (SSR) for out-of-this-world user experiences. Embrace the Jamstack architecture and Micro Frontends for infinitely scalable, modular applications. Focus on Component-Driven Development and Headless CMS for ultimate flexibility. Create Single Page Applications (SPA) with Responsive Design and CSS-in-JS for seamless adaptability. Master State Management with Redux, MobX, or Zustand. Supercharge your workflow with Automated Testing (Jest, Cypress) and CI/CD Pipelines. Prioritize Web Performance Optimization, Accessibility (a11y), and User Experience (UX) for top-tier applications. Implement Design Systems, Code Splitting, and Lazy Loading for hyper-efficient, user-friendly experiences. Join the vanguard of front-end development and shatter the boundaries of what’s possible!"
jaredklewis
Here's some requirement sections from real frontend job postings on weworkremotely.com. Not putting them all here, but I clicked through a dozen and these seem representative.
Except for the mentions of next.js and one mention of AI assistants, these job postings could be from 2020 or even 2015.
Senior Frontend Developer at SimplyAnalytics
- 8+ years of professional software development experience on large, structured code bases using vanilla JavaScript (this is not a React, Angular, Node.js, or full-stack position)
- Strong UI development skills (CSS & HTML)
- Open to learning new technologies
- Self-starter who gets things done
- Attention to detail
--- Frontend Developer at Nutrient
- Good knowledge of web technologies (e.g., HTML, CSS, React.js. Next.js, Javascript/jQuery, HTTP, REST, PHP, Cookies, DOM).
- Familiarity with UI frameworks (e.g., Bootstrap, Tailwind CSS).
- Familiarity and regular use of AI assisted IDEs like Cursor, Windsurf, Co-Pilot, etc.
- Manage and prioritize multiple concurrent projects, meeting deadlines in a fast-paced environment.
- Have good communication skills and enjoy working with a passionate team and experience working on a globally distributed team.
- Have a well-rounded approach to problem solving, and understand the difference between when to apply a fix and when to refactor to remove a specific class of bugs.
- Experience integrating with various Marketing technologies and tools/APIs (e.g., Hubspot, Google Analytics, Salesforce, etc).
--- Senior Frontend Software Engineer at Hopper
- Senior-level experience & familiarity with React
- The ability to effectively drive towards a solution in a thoughtful and creative manner
- The ability to work autonomously, iterate on solutions, and manage different contexts
- Dealt with ambiguity and can balance building out multiple features at once without jeopardizing the quality of the code
--- Senior React Developer at SKYCATCHFIRE
- Expert-level React development
- Strong background in TypeScript and Next.js
- Using AI assistance tools to develop better software
- Experience building and maintaining large-scale applications
- Clear written communicator that prefers emails to meetings
- Portfolio showing systematic, well-structured work
cloverich
Good employers definitely care about business value, and IME great candidates are excellent at highlighting business value in their resumes relative to the tech they used. E.g. "Maintained and improved various UI forms, migrating to react-hook-form" vs "Experimented and optimized booking form, increasing conversion by 7%"). Bit of a trite example but along those lines. I agree tech still matters though.
bigbuppo
I'm slowly removing myself from the job market because I'm going to retire. Go work yourself to death at an exciting startup that will fail before your options vest if you want, but some of us would rather enjoy our little cabins in the woods for a few decades.
rqtwteye
That’s my near term plan.
null
pjmlp
Boring tech gets the job done, it lets us focus on the problem we are trying to solve, instead of yak shaving.
dakiol
I guess it depends. Like, you really need to know Gradle to be effective in a non-trivial Java setup. But Gradle is a beast (over 1000 pages of doc), and it could slow you down.
On the other hand the Go tool chain is superb, but you need to reinvent a few things (until recently Go didn’t have generics) and the libraries out there are just a fraction of what Java offers.
pjmlp
Using Gradle is already the first mistake, had it not been for Google and their partnership with Gradle folks for Android after dropping Eclipse, and it would have fizzled alongside Grails by now.
Boring build tools on Java land would be Ant/Ivy, Maven.
dwoldrich
Maven is so painful, though. Isn't Gradle an improvement on Maven?
Is your assumption that the learning curve on Gradle is higher than that of Maven?
I ask as someone who endured both tools/ecosystems and is intrigued with the idea of moving on to a system like Bazel.
LinXitoW
Yeah, and if Google hadn't used Go themselves, it would've also fizzled out.
Any halfway non-horrible tech just needs enough funding and usage from some company to become mainstream.
biofox
Couldn't agree more. If the most interesting part of your project is your technology stack, you're probably not working on something interesting.
It's like those hobbyists who invest all of their time and money into buying high-end expensive kit, but lack ability.
blenderob
I was meaning to do an Ask HN about this but this looks like an excellent post to ask my question.
What are some boring techs you use that you cannot live without? How long have you been using them?
For me, it'd be stuff like Vim, C, Python, Fedora, mutt and I've been using them for 25-30 years! How about you?
pjmlp
Java, .NET/C#, C++, server side frameworks like Spring and ASP.NET, vanila.js when the option is on me, WinForms/WPF/Swing/Qt, Visual Studio, Eclipse/Netbeans.
Just as an idea, not listing everything.
SatvikBeri
Postgres has been pleasantly boring for the last 10 years I've been using it
cguess
Ruby and Rails (together or Ruby separate). ~18 years on both.
tmsbrg
The Python 2-3 transition and some developments after made it definitely not so boring for me, but hopefully it'll be more stable in the coming decades ;).
"Cannot live without" is a strong wording, but software that I use a lot and that's mature/stable in my experience: shell (zsh, bash, sh), GNU utils, vim, nmap, xfce, git, ssh, mpv, Xorg, curl, and lots of little old CLI tools.
corinroyal
Common Lisp, XMPP, HTML/HTTP, DITA, XML, Git, ssh, Rsync, Nginx, Firefox, GIMP, Debian, EXTFS, HP-GL, bash, Emacs, TeX, PDF, Bittorrent.
rollcat
Emacs. 20 years and all that time I wished I could get rid of it, but every other editor/IDE I've tried lacks a feature (or ten).
Debian. Moves at its own pace, flexible yet stable enough to cope with my idea of a smart move.
Go. I've been playing with it since before 1.0, threw it into production at my first occasion, and all those years it continues to deliver.
Django. Identical story.
...StarCraft (1, then 2). Technically not "tech", but in a competitive setting, it remains strategically, tactically, and mechanically demanding, it reflects that path of mastery, "teach yourself programming in ten years". It shaped my spirit, attitude, but also humility.
xeonmc
In the context of boring/stable, Starcraft 1 is a particularly interesting example. Most live-service competitive games rely on regular balance patches to "keep the meta from going stale", which has some parallels to the shiny-affinity of modern tech stacks. Starcraft 1 on the other hand have not had any changes to the balance in 20 years, yet the meta is still constantly evolving because it is emergent on player skill development instead of prescribed by hamfisted developer oversight.
rollcat
I think that's the biggest difference between SC 1&2, although the former is still being nudged a bit through map design.
SC2 in its first decade has been about always keeping the game fresh - new units, new spells, adventurous changes, crazy maps. As of 2020, the changes not only stopped, but the game was caught for a few years in a pretty crappy state: nigh unbeatable PvT cheeses, 40min-long PvZs where Zerg is clearly winning but can't close the game, meanwhile no Protoss in top 10 GM or major tourney semifinals. The worst of it has now been fixed, but the changes are only slight tweaks and nudges, now again reminding me of Brood War. It's still an excellent game though.
uallo
HTML, CSS, and JavaScript since 2001.
bityard
I would call those anything but boring and mature. They have had a lot of big changes over the last decade and there's no sign of that slowing down. They've been around for a long time, yes, but today they bear only a superficial resemblance to the standards of 25 years ago. JS in particular has changed radically just in the past 5-10 years alone. Search for "how to do X in JS" and you will find that most of the SO questions/answers you get are outdated to the point of being basically wrong. (At least, that has been my experience learning JS in earnest over the last year.)
uallo
True, they are not done and moving. But what you did with them 20 years ago still works today. And what you do with them today, likely still works in 20 years. Exceptions obviously exist, though.
DanielHB
The major changes in web development landscape:
- IE9 which finally allowed you to use modern (at the time) web features (like flexbox) without having to support IE specific hacks.
- ES6 which added a lot of syntax changes to JS to make it much nicer to use (and pretty much killed Coffeescript).
- Popularization of type-checking with Typescript and Flow around 2020 which is almost standard these days.
And of course the frameworks evolved a lot as well, but that was mostly project-specific not so much the platform. Someone doing React doesn't care about Angular2 release.
esafak
If the benefits of the newer tech outweigh its risks you use it. The challenge is weighing the evidence. Newer technologies will tout their advantages, but the disadvantages are not advertised as loudly, and are often uncovered after making the investment. "Boring" or "exciting" is the wrong framing.
gregors
Boring tech is really better described as extremely late adopter strategy.
Maybe it makes sense for your business maybe it doesn't. If you don't want to be on the forefront of technology, well don't. I don't think that launching every startup using the late adopter strategy is necessarily going to result in better business performance. Those that find a better way to do things will win.
whatever1
I can fix boring tech with building 10 layers of frameworks on top of it.
IMHO boring tech is great because it lets you focus on the actual tech of your product. I run a SaaS app and I'd like to think we do alot of cutting edge things in various places, as it relates to the actual product. For things that are "behind the scenes" like databases, backend fraemworks, etc, etc, I prefer to keep all that stuff as boring and as stable as possible. For me working solo on a project, my time is very limited. So I would much rather work on interesting new features for my product than having to touch crap that my customers don't care about. Because at the end of the day my customers don't know and don't care that I use Node vs Deno or Bun, or that I use NPM instead of pnpm, or that I'm not on the latest version of node or Postgres. They don't know all that but they do know how well my app works or what features it has.