6 ms·
Is Software Getting Worse?
- philipwhiuk 4y agoThe optimism at the end seems entirely unjustified.
- shove 4y agoclassic Ignorance vs Malice debate ;)
- mrguyorama 4y agoWillful ignorance is Malice in my opinion.
- OnionBlender 4y agoReminds me of Jonathan Blow's talk: [Software is in Decline](https://www.youtube.com/watch?v=FeAMiBKi_EM https://www.youtube.com/watch?v=FeAMiBKi_EM). I think one reason why software is slow because managers don't allocate time to improve performance unless it gets worse than "good enough". For me that meant taking time to improve performance without being told or telling anyone how much time I spent trying to improve performance. When I used to work on Android in a large company my favorite low hanging fruit was looking where people used `Cursor.getColumnIndex(String columnName)`. People would call it inside a loop for every row in the query result. This was a surprisingly large time sink according to the profiler. Some developers just don't know or care about performance. I depended on a system that had very large list of banned/blocked IP addresses. This list was stored as a giant array of hundreds of `BigInteger`s. Each time the function was called to determine if an IP address was banned it would convert hundreds of strings into an array of `BigInteger` and then loop through the array checking against each one.
- el_oni 4y agoI've recently been able to work on performance for our product mainly because our tester has been complaining that it takes too long to run all of the integration tests. I got to dig in to some hotspots in our code, some hotspots in the test suite code and speed things up significantly. It's incredibly rewarding work. But as the blogpost says, you need to know how things work (and get good measurements) to be able to make a difference. Knowing what tradeoffs to make, such as caching things to trade off memory usage for computation vs reworking algorithms to be more effecient in the first place, is tricky and not something you can necessarily hand over to a junior dev.
- wadd1e 4y agoReading this just made me question why there isn't a shift from typical leetcode style interviews to interviews where you're asked to do do things like find places to optimise code from a tiny toy app and debug it etc. It seems like an almost universally useful skill and even with people trying to "game" such interviews, it would produce good engineers who know how to optimise what they write. I have read accounts of such interviews happening, but from my (limited, so feel free to correct me) knowledge, they're certainly not the norm.
- fatnoah 4y ago> Cursor.getColumnIndex(String columnName) It's amazing how performance killing patterns transcend the operating environment. I remember profiling a loop-intensive .NET app many years ago and noticed a massive number of framework-level calls to a getOrdinal(columnName) method to find the numeric index of a column from its name. That was triggered by a programmer calling row.GetColumnValue(columnName) method. Though it was fast, it was called millions upon millions of time. I realized a few orders of magnitude worth of performance improvement by manually getting the ordinals on the first iteration, caching them, and then using them for subsequent iterations. I love performance profiling and improvement. It was almost never "roadmap" work, but something I just did.
- Zetobal 4y agoThe real issue is that too many developers love the end result, aka the shiny app, but not the sweat and tears that go into creating it. So, most apps are just hastily thrown together to show off on Git, LinkedIn, Matrix or wherever else they can get their fix of validation. Just take a look at the multitude of lazy chatgpt apps, like the one currently reigning supreme at HN's #1 spot!
- 7speter 4y agoBut premature optimization is the root of all evil and all that. Premature is any point before some flaw causes at scale chaos, btw
- TigerTeamX 4y agoInteresting talk
- commandlinefan 4y ago> unless it gets worse than "good enough" And even then, it's "come up with a quick fix by tomorrow morning to address the problems caused by the mountain of other quick fixes that created the problem in the first place".
- tharne 4y ago> Some developers just don't know or care about performance. I disagree. The reason developers and managers don't care about performance or more generally, good software, is because customers don't care about it. There's no incentive to build more robust future-proof software unless someone is willing to pay for it. Given the choice between cheaper "meh" software with tons of shiny new bells and whistles and better-designed, but more expensive software with fewer new features, guess which one the customer is going to go with 9 times out 10? It's like how everyone loves to complain about the poor service and general crappiness of commercial air travel. We all do it, but almost all of us also buy the cheapest flight we possibly can and then wonder why the airlines ended up cutting so many corners.
- tstrimple 4y agoI’m hoping that one day more developers realize code quality doesn’t drive business value. Except for a niche market (APIs built for developers), the apparent code quality matters very little for delivering actual value. The actual value which then becomes the salary of the developers who all seem to claim the business has no idea what they are doing. Code quality is a trade off. Sometimes that trade off can result in a ROI by lowering long term maintenance costs enabling you to deliver new feature more cost effectively. Sometime that trade off means that your startup was too late to the market and a competitor was bought by Microsoft instead. Regardless, the trade off needs to be discussed and the options weighed. I get that programmers want to view themselves as craftsmen making a work of art. I’m sure there are plumbers obsessed about crafting the perfectly soldered joint. I respect both of them for their efforts and passion, but have to acknowledge both misunderstand the role they are being paid for the majority of the time. For all of Jonathan Blow’s wisdom, I find that too often he’s just a curmudgeon yelling at kids to get off his lawn and waxing poetic about how much better it was in his day. He suffers from the same malady that so many people seem to fall into throughout the generations. That the new generation is shit and everything is falling apart has been a consistent theme for the last two thousand years at least. Quite frankly it’s old and boring.
- tracker1 4y agoStakeholders only care about performance or optimization when it comes down to things impacting sales/customer perception. For the most part, the goal is to add features. Some orgs will pad time for refactoring. Others may take dedicated time for developer driven initiatives. It really all depends. When on dialup, even a few hundred K of a web page/site mattered. On a lan, it mattered a lot less and the modern internet is closer to a LAN 20+ years ago in terms of performance. We have computers in our pockets faster than desktops at the time. I had 64mb of ram in 1997, today I have 128GB. We fill the gaps as technology expands and will generally look into issues as it's necessary to support new platforms (arm, risc-v) or simply because it's too big.
- Gigachad 4y agoThis is also how the vast majority of users think. I couldn't give a shit that Discord uses 200MB of ram and some IRC client uses 2.
- haburka 4y agoThis is why I enjoy webdev! Performance actually matters. If you ship 2MB of JS as your bundle then users will notice, especially on mobile. Whereas mobile apps can easily be ~100MB and no one will even blink an eye. Of course it doesn’t mean that performance will be prioritized but it’s more likely that it will be if it’s visible to customers.
- commandlinefan 4y ago> users will notice As a user of web sites, I agree, but I haven't observed that management much cares.
- JohnFen 4y agoSoftware has become so much worse that I dread and avoid using new software anymore. I also generally prefer to avoid taking the risk of upgrading my existing software. Experience has taught me that both of those things are likely to result in disappointment or even loss of important (to me) functionality. I assumed that the reason was essentially economics. In the Old Days, hardware was expensive and programmer time was relatively cheap. The economics were in favor of writing high-quality software. These days, it's just the reverse. The economics are in favor of writing substandard software and relying on hardware grunt to make up for it.
- feoren 4y ago> The economics are in favor of writing substandard software and relying on hardware grunt to make up for it. I don't get this. Hardware can't make up for dark patters, awful UI, missing features, bloatware, vaporware, and adware. The only thing hardware can make up for is slowness, but even that is highly questionable: a big hardware upgrade could make a difference of 50%, but improving the algorithm or eliminating a SELECT N can make a difference of multiple orders of magnitude.
- BuzzwordChief 4y ago> improving the algorithm or eliminating a SELECT N can make a difference of multiple orders of magnitude Yes and no. The main source of slowness in modern software is memory access (patterns). Yes, a binary search is just O(log(n)) but if your array isn't to big a linear search will probably be faster, just because the chance of your data being in cache is much higher due to prefetching. But it's much harder to plan, program or to refactor software to have a cache friendly memory layout and access pattern. And good luck optimizing your Java, Python, etc. code with respect to memory when even integers are pointers to some data on the heap...
- Zababa 4y ago> The main source of slowness in modern software is memory access I don't think it is. Memory access patterns matters a lot when you want to squeeze every last bit of performance, or when you want to update old code that was optimized for different assumptions. But I think most slowness comes from not having looked at what could make your software slow. Maybe you forgot to compile a regex before a loop, maybe you're copying a whole array at each of the 100 000 iterations, maybe your algorithm is accidentally n^2.
- jicea 4y agoRather depressing, but also it mirrors my own experience. Daily, I work on a shop website, POs ask to add tons of trackings scripts, and don't care about performance or technical debt. Quality is not a KPI anymore. I still find joy in developing an Open Source side project but I'm pessimist about the future of developers.
- bcrl 4y agoYes, it's getting worse. I inadvertently deleted a bunch of information manually collected out in the field last week from Notes on my iPhone. What was my mistake? Apparently I reached into my pocket and somehow managed to unlock my phone then delete things. Undo wasn't able to recover the data. 3 hours of data from physical work in the world gone. I miss the old days when the Home button was used to unlock things and you couldn't screw everything up by accidentally touching your phone. I used to be able to listen to my music while driving through areas without cell phone service as my entire music collection was stored on my phone. Now I have to manually download tracks even though my phone has 8 times the storage of the older version. Stripe updated the app recently. It now requires Face Id almost every single time I change screens. Really? How is this "Better" to view read-only information? I tried to take a photo on my iPhone in the dark the other day. I start by turning on the flashlight so I could see what I was trying to photograph. I go into the camera app and the light turns off so I can no longer see what I'm doing. WTF? I used to use Gnome for my Linux desktop. I liked being able to change window decorations, especially for the smaller and more compact window titles and such. That feature got removed. Then the Gnome default icons and such kept growing and taking up more screen real estate. At least in this case I've been able to switch to the far less bloated LXDE. It goes on and on. I feel like the UX designers don't pay any attention to the user experience anymore. Don't get me started on web pages that assume you're on a mobile device when you're on a desktop with lots of screen real estate... <sigh>
- AnIdiotOnTheNet 4y ago> It goes on and on. I feel like the UX designers don't pay any attention to the user experience anymore. Oh they do, they pay a lot of attention to how many ads the user experiences.
- Zababa 4y ago> I feel like the UX designers don't pay any attention to the user experience anymore. The worst offender here is android. The clock app especially feels like it's been made intentionally to be terrible. For example, when you delete an alarm, the popup "Alarm deleted" appears at the exact place where the button to delete another alarm will be. You have to move the list of alarms, or if you can't, wait. There is no way to select multiple alarm to delete them at the same time. It's a list but you don't have one of the most basic operations on a list, do something to multiple elements. The UI is getting worse and worse, every few month there's something else that will look ugly, like a massive + button at the bottom center of the screen.
- ketchupdebugger 4y agoConsumer facing software are inefficient and wasteful mainly because of the constraints or the lack there of. We don't need to fit our software in a 3 MB disk when the internet can download 3GB in minutes. We don't need to make our software bug free because the consequences of a bug are low. Thats why the market doesn't care. If we are developing mars rover software for NASA and there is only 10 GB of memory, you'd bet every trick in the book is used to use as little space/cpu/power as possible. But here on Earth space/cpu/power is virtually unlimited, so we spend more time developing features rather than making it performant.
- jbirer 4y agoIt's because everyone is being told they should become a developer, no matter the educational background or passion for computers.
- commandlinefan 4y agoDevelopers rejecting any kind of hiring standards isn't helping much either.
- jbirer 4y agoReally depends on the standards. Those who reject technical standards are obviously the ones with no skill who are just trying to get out of their parents house / developing country. But I get silly requirements like personality tests. I am a psychopath who hates socializing, now hire me and give me money for my skills, you don't need to know my astrology sign.
- commandlinefan 4y ago> We should procrastinate feature work now and then when there’s an especially promising opportunity to optimize and improve our code I've seen people admonish developers to do this for over 30 years now. I've never seen a developer or group of developers be successfully able to deftly navigate the complicated politics around actually doing so.
- Teckla 4y agoI've seen people admonish developers to do this for over 30 years now. I've never seen a developer or group of developers be successfully able to deftly navigate the complicated politics around actually doing so. There's a big difference between 30 years ago and now, and that difference is that hardware performance increases has slowed to a crawl. It's possible that in the near future software might start competing on performance again. (I hope.)
- traveler01 4y agoCompanies with investors hungry for profits always speeding up what can’t be speed up it’s the major reason the software is turning into crap. A prime example was Cyberpunk.
- tabtab 4y agoYAGNI and KISS appears dead in most shops. What-if fears gum up stacks. "You should pick a stack that has internationalization, microservices, web scale, responsiveness (finger and mouse usage), accessibility, etc. etc." In practice most orgs don't actually use or need all that, yet pay the "complexity tax" to have it. Might as well buy meteor insurance while at it. Somebody needs the guts to say "no" to too much junk in the trunk. I take a scoring hit when I say accessibility often goes unused for small/niche biz apps and thus should be skipped or downplayed in some cases, but it's the blunt truth. ADA laws say "reasonable". The cost/benefit math is often not reasonable in many situations, and I'll take the case to the jury myself if necessary. Ignoring YAGNI is economically costly. A lot of it is also caused by dev's trying to get as many buzzwords on their resume as possible. Between Resume Oriented Programming and managers' fear-of-missing-out, we have bloated stacks and bloated software. YAGNI and KISS matter, but ignored by silly human tendencies. I think I'll find a job on Vulcan...
- reeckoh 4y agoThis may be controversial, but I think software is suffering from shrinkflation. We complain when tools like Photoshop or MS Word move to a subscription cloud model, but maybe they're just getting realistic about pricing. You used to be able to buy these tools for a 3-figure range, maybe low 4 figures with all the bells and whistles. Today, creative cloud starts at $55/mo, Photoshop $21/, MS office ~$6/. If you use a 10x annual revenue to price these, it'd be something like $6600, $2520, $720 respectively. Would you pay those sums for those tools? Would a starving student? Software is still hard, and good software is still expensive. Calling it "undervalued" is probably accurate; if it weren't for the downward pressure of piracy and open-source, you have to wonder if we'd have software dealerships selling packages as expensive as today's cars.
- drw85 4y agoI think besides the already mentioned lack of interest from the business side to produce decent software, there is also a established UX trend of developing by metrics. I've seen a lot of software pivot away from things and remove features because of metrics. If a feature is used by a minority or less than average, it's seen as useless and removed. For a lot of users, this removes something entirely, which they might have used infrequently but to great value. Sometimes you're part of a tiny group that uses a feature daily and it gets removed entirely, making the software much less useful or useless alltogether.
- pictur 4y agoToday, an software that works stably falls into the background compared to an software that constantly adds new features. Open source projects are constantly moving in this direction. they want a cycle where they can constantly release major versions and break backward compatibility easily. It's a miracle to expect software to work well this way.