9 ms·
This argument always feels like a motte and bailey to me. Users don't literally care what what tech is used to build a product. Of course not, why would they?
by gizmo 2y ago
This argument always feels like a motte and bailey to me. Users don't literally care what what tech is used to build a product. Of course not, why would they?
But that's not how the argument is used in practice. In practice this argument is used to justify bloated apps, bad engineering, and corner-cutting. When people say “users don’t care about your tech stack,” what they really mean is that product quality doesn’t matter.
Yesterday File Pilot (no affiliation) hit the HN frontpage. File Pilot is written from scratch and it has a ton of functionality packed in a 1.8mb download. As somebody on Twitter pointed out, a debug build of "hello world!" in Rust clocks in at 3.7mb. (No shade on Rust)
Users don't care what language or libraries you use. Users care only about functionality, right? But guess what? These two things are not independent. If you want to make something that starts instantly you can't use electron or java. You can't use bloated libraries. Because users do notice. All else equal users will absolutely choose the zippiest products.
- bufferoverflow 2y agoHad it been 18mb or 180mb, would it change anything? It takes seconds to download, seconds to install. Modern computers are fast.
- pythonaut_16 2y agoIt’s probably best to compare download sizes on a logarithmic scale. 18mb vs 180mb is probably the difference between an instant download and ~30 seconds. 1.8gb is gonna make someone stop and think about what they’re doing. But 18mb vs 9mb is not significant in most cases.
- xandrius 2y agoPretty sure only techies care about that; an average user on their 10 year old device, couldn't care whether it took 0.1s or 5s to start. Nice to have, not a must.
- gizmo 2y agoMost regular people buy a new phone when their old one has "gotten slow". And why do phones get slow? "What Andy giveth, Bill taketh away." In tech circles regular people are believed to be stupid and blind. They are neither. People notice when apps get slower and less usable over time. It's impossible not to.
- ta1243 2y agoAnd then they spend their own money making them faster, not linking the slowness to the software, but to some belief their hardware is getting worse over time.
- raincole 2y ago> Most regular people buy a new phone when their old one has "gotten slow". Uh... If this statement were true (IF), it would be even a better argument for software developers to NOT optimize their apps.
- rsynnott 2y agoThere's been a fair bit of research on this. People don't like slow interfaces. They may not necessarily _recognise_ that that's why they don't like the interface, but even slowdowns in the 10s of ms range can make a measurable difference to user sentiment.
- gjsman-1000 2y agoAnd yet even Amazon, eBay, and Wikipedia don’t see value in building an SPA. Chew on that.
- rsynnott 2y agoSPAs, in practice, tend to be slower than well-done conventional/old-fashioned webapps, and, particularly for Wikipedia-type applications, have all sorts of other usability concerns. Like, which feels more responsive, wikipedia or some random SPA?
- thecleaner 2y ago> what they really mean is that product quality doesn’t matter. But does it matter ? I think the only metric with optimising for is latency. Other stuff is something we do.
- LoganDark 2y ago> In practice this argument is used to justify bloated apps, bad engineering, and corner-cutting. Yes, yes it is. But they were going to do it anyway. Even if people were to stop accepting this argument, they'll just start using another one. Startup culture is never going to stop being startup culture and complacent corporations are never going to stop being complacent. As the famous adage goes: If you want it done right, you gotta do it yourself. > File Pilot is written from scratch and it has a ton of functionality packed in a 1.8mb download. File Pilot is... seemingly a fully-featured GUI file explorer in 1.8mb, complete with animations? Dude. What.
- gizmo 2y agoYes, there is a generation of programmers that doesn't believe something like File Pilot is even possible.
- genewitch 2y agoThey'd be very confused at something like "A mind is born" then? https://linusakesson.net/scene/a-mind-is-born/ https://linusakesson.net/scene/a-mind-is-born/ 7030 times smaller than the file pilot.
- LoganDark 2y ago10 PRINT CHR$(205.5+RND(1)); : GOTO 10
- genewitch 2y agoThis was on the cover of a book and it prints a maze using block characters? copilot said the block characters part but not the maze, i remembered that after seeing the "one of two block characters." unfortunately that requires a BASIC to run, which will probably be larger than 256B and possibly even 1800000B - the mind is born .prg can just be "run" on the computer it was written for with no interpreter.
- 2y ago
- thfuran 2y ago>When people say “users don’t care about your tech stack,” what they really mean is that product quality doesn’t matter. No, it means that product quality is all that matters. The users don't care how you make it work, only that it works how they want it to.
- salomonk_mur 2y agoFor 99% of users, what you describe really isn't something they know or care about.
- thfuran 2y agoI might agree that 99% of users don't know what they want, but not that they don't care.
- gizmo 2y ago"Use whatever technologies you know well and enjoy using" != "Use the tech stack that produces the highest quality product".
- JohnFen 2y agoI think the idea is that the use of a particular tech stack isn't a determinant factor in terms of product quality.
- 2y ago
- ayjay_t 2y agoSaid it better than I could. It's always a deflection from the fact that whoever is saying doesn't know anything about their industry.
- ben_w 2y ago> Users don't care what language or libraries you use. Users care only about functionality, right? But guess what? These two things are not independent. If you want to make something that starts instantly you can't use electron or java. You can't use bloated libraries. Because users do notice. All else equal users will absolutely choose the zippiest products. Semi-dependent. Default Java libraries being a piles upon piles of abstractions… those were, and for all I know still are, a performance hit. But that didn't stop Mojang, amongst others. It can be written "fast", if you ignore all the stuff the standard library is set up for, if you think in low-level C-like manipulation of int arrays (not Integer the class, int the primitive type) rather than AbstractFactoryBean etc. — and keep going from there, with that attitude, because there's no "silver bullet" to software quality, no "one weird trick is all you need", software in (almost!) any language fast if you focus on doing that and refuse to accept solutions that are merely "ok" when we had DOOM running in real time with software rendering in the 90s on things less powerful than the microcontroller in your USB-C power supply[0] or HDMI dongle[1]. [0] http://www.righto.com/2015/11/macbook-charger-teardown-surprising.html http://www.righto.com/2015/11/macbook-charger-teardown-surpr... [1] https://www.tomshardware.com/video-games/doom-runs-on-an-apple-lightning-to-hdmi-dongle-soc-inside-adapter-has-enough-power-for-smooth-gameplay https://www.tomshardware.com/video-games/doom-runs-on-an-app... Of course, these days you can't run applets in a browser plugin (except via a JavaScript abstraction layer :P), but a similar thing is true with the JavaScript language, though here the trick is to ignore all the de-facto "standard" JS libraries like jQuery or React and limit yourself to the basics, hence the joke-not-joke: https://vanilla-js.com https://vanilla-js.com
- jcelerier 2y ago> But that didn't stop Mojang, amongst others Stop them from... Making one of the most notoriously slow and bloated video game ever? Like, just look at the amount of results for "Minecraft" "slow"
- harperlee 2y agoThe fact that it was later bought by Microsoft (and rewritten in C++ so it can run on consoles[1]) is not relevant to the argument that you can, in fact, write a successful and performant game in Java, if you know how. [1] My source is just comments in HN.
- marcinzm 2y agoIn my experience, the people who make these arguments often don't even know their own tech stack of choice well enough to make it work halfway efficiently. They say 10ms but that assumes someone who knows the tech stack, the tradeoffs and can optimize it. In their hands its going to be 1+ seconds and becomes such a tangled mess it can't be optimized down the line.
- lozenge 2y agoThat's a poor example, as users genuinely don't care about download file size or installed size, within reason. Nobody in the West is sweating a 200MB download.
- flerchin 2y agoUsers will generally balk at 2000MB though. ie, there's a cutoff point somewhere between 200MB and 2000MB, and every engineering decision that adds to the package size gets you closer to it.
- horsawlarway 2y agoFor an installed desktop app... vast majority of folks aren't going to batt an eye at 2G. Hell - the most exposure the average person gets to installing software is game downloads, sadly (100G+). After that it's the stuff like MSOffice (~5-10G). --- I want to be clear, I definitely agree there are cases where "performance is the feature". That said, package size is a bad example. Disk is SO incredibly cheap that users are being conditioned to not even consider it on mobile systems. And networks are good enough I can pull a multi-gig file down with just my phone's tethering bandwidth in minutes basically across the country. When I want performance as a user, it's for an action I have to do multiple times repeatedly. I want the app itself to be fast, I want buttons to respond quickly, I want pages to show up without loaders, I want search to keep up with my keystrokes. Use as much disk and ram as you can to get that level of performance. Don't optimize for computer nerd stats like package size (or the ram usage harpies...) when even semi-technical folks can't tell you the difference between kb/mb/gb, and have no idea what ram does. Users care about performance in the same way that users buy cars. Most don't give a fuck about the numbers, they want to like the way it drives. Your tech stack can definitely influence that, but you still have to make the right value decisions. Unless your audience is literally "software developers" like that file explorer, lay off the "software developer stats".
- porridgeraisin 2y ago> Ms office Everyone gets these preloaded in their laptops, and for people that need it it's a non-negotiable > Games Continuing the same point, people aren't going to be willing to put the same effort into trying some free app as they would into a game they just paid a bunch of money for. > Disk so cheap Cost per GB is irrelevant if the iPhone comes with a fixed amount of un-upgradable space the majority of which is taken by media. People routinely "free up" space on their phones by deleting apps that show up at the top of the settings -> storage page. Do you want that to be your app? > 2GB I think this is too high for a desktop app. Few hundred MB is probably the limit I'd guess.
- fmajid 2y agoYes, as a user I definitely shudder at Electron-based apps or anything built on the JVM.
- p4ul 2y agoI strongly agree with this sentiment. And I realize that we might not be the representative of the typical user, but nonetheless, I think these things definitely matter for some subset of users.
- whstl 2y agoI know plenty of non-technical users who still dislike Java, because its usage was quite visible in the past (you gotta install JVM) and lots of desktop apps made with were horrible. My father for example, as it was the tech chosen by his previous bank. Electron is way sneakier, so people just complain about Teams or something like that.
- vips7L 2y agoNowadays users aren’t expected to install the vm. Desktop apps now jlink a vm and it’s like any other application. I’ve even seen the trimmed vm size get down to 30-50mb. Unfortunately you still get developers who don’t set the correct memory settings and then it ends up eating 25% of a users available ram.
- mexicocitinluez 2y agoLove this reply and learned a new term from it.
- 2OEH8eoCRo0 2y agoUsers don't care if your binary is 3 or 4 mb. They might care if the binary was 3 or 400 mb. But then I also look at our company that uses Jira and Confluence and it takes 10+ seconds to load a damn page. Sometimes the users don't have a say.
- matula 2y ago> In practice this argument is used to justify bloated apps Speaking of motte-and-bailey. But I actually disagree with the article's "what should you focus on". If you're a public-facing product, your focus should be on making something the user wants to use, and WILL use. And if your tech stack takes 30 seconds to boot up, that's probably not the case. However, if you spend much of your time trying eek out an extra millisecond of performance, that's also not focusing on the right thing (disclaimer: obviously if you have a successful, proven product/app already, performance gains are a good focus). It's all about balance. Of course on HN people are going to debate microsecond optimizations, and this is perfect place to do so. But every so often, a post like this pops up as semi-rage bait, but mostly to reset some thinking. This post is simplistic, but that's what gets attention. I think gaming is good example that illustrates a lot of this. The purpose of games is to appeal to others, and to actually get played. And there are SO many examples of very popular games built on slow, non-performant technologies because that's what the developer knew or could pick up easily. Somewhere else in this thread there is a mention of Minecraft. There are also games like Undertale, or even the most popular game last year Balatro. Those devs didn't build the games focusing on "performance", they made them focusing on playability.
- gjsman-1000 2y agoI saw an HN post recently where a classic HN commentator was angry that another person was using .NET Blazor for a frontend; with the mandatory 2MB~3MB WASM module download. He responded by saying that he wasn’t a front-end developer, and to build the fancy lightweight frontend would be extremely demanding of him, so what’s the alternative? His customers find immensely more value in the product existing at all, than by its technical prowess. Doing more things decently well is better than doing few things perfectly. Although, look around here - the world’s great tech stack would be shredded here because the images weren’t perfectly resized to pixel-perfect fit their frames, forcing the browser to resize the image, which is slower, and wastes CPU cycles every time, when it could have been only once server side, oh the humanity, think about how much ice you’ve melted on the polar ice caps with your carelessness.
- itishappy 2y ago> As somebody on Twitter pointed out, a debug build of "hello world!" in Rust clocks in at 3.7mb. (No shade on Rust) Debug symbols aren't cheap. A release build with a minimal configuration (linked below) gets that down to 263kb. https://stackoverflow.com/questions/29008127/why-are-rust-executables-so-huge https://stackoverflow.com/questions/29008127/why-are-rust-ex...
- gizmo 2y agoMy point was that many programmers have no conception of much functionality you can fit in a program of a few megabytes. Here is a pastebin[1] of a Python program that creates a "Hello world" x64 elf binary. How large do you think the ELF binary is? Not 1kb. Not 10kb. Not 100kb. Not 263kb. The executable is 175 bytes. [1] https://pastebin.com/p7VzLYxS https://pastebin.com/p7VzLYxS (Again, the point is not that Rust is bad or bloated but that people forget that 1 megabyte is actually a lot of data.)
- itishappy 2y agoNo disagreement here! Just curious how big the impact of debug symbols was and wanted to share my findings.
- Mawr 2y agoAnd your point is completely wrong. It makes no sense for a language to by default optimize for the lowest possible binary size of a "hello world"-sized program. Nobody's in the business of shipping "hello world" to binary-size-sensitive customers. Non-toy programs tend to be big and the size of their code will dwarf whatever static overhead there is, so your argument does not scale. Even then, binary size is a low priority item for almost all use cases. But then even if you do care about it, guess what, every low level language, Rust, C, whatever, will let you get close to the lowest size possible if you put in the effort. So no, on no level does your argument make sense with any of the examples you've given.
- gizmo 2y agoDid you notice how nobody in this thread has argued that rust should optimize for binary size or that rust is somehow wrong for having made the trade-offs that it did? People who have only worked with languages that produce large executables are likely to believe that 300k or so is about as small as an executable can possibly be. And if they believe that, then of course they'll also believe that a serious program must therefore be many megabytes large. If you don't have a good grasp of how capable modern computers are then your estimates will be wrong by orders of magnitude. There are countless of examples -- you don't have to go that far back in history to find them -- where dozens of engineers worked on a complicated program for years that compiled down to maybe 500kb. And again, the point still isn't that we should write software today like we had to in the 80s or 90s. However, programmers should be aware how many orders of magnitude slower/bigger their program is relative to a thoroughly optimized version. A program can be small compared to the size of your disk and at the same time 1000x larger than it needs to be.
- an-unknown 2y ago> Yesterday File Pilot (no affiliation) hit the HN frontpage. File Pilot is written from scratch and it has a ton of functionality packed in a 1.8mb download. As somebody on Twitter pointed out, a debug build of "hello world!" in Rust clocks in at 3.7mb. (No shade on Rust) While the difference is huge in your example, it doesn't sound too bad at first glance, because that hello world just includes some Rust standard libraries, so it's a bit bigger, right? But I remember a post here on HN about some fancy "terminal emulator" with GPU acceleration and written in Rust. Its binary size was over 100MB ... for a terminal emulator which didn't pass vttest and couldn't even do half of the things xterm could. Meanwhile xterm takes about 12MB including all its dependencies, which are shared by many progams. The xterm binary size itself is just about 850kB of these 12MB. That is where binary size starts to hurt, especially if you have multiple such insanely bloated programs installed on your system. > If you want to make something that starts instantly you can't use electron or java. Of course you can make something that starts instantly and is written in Java. That's why AOT compilation for Java is a thing now, with SubstrateVM (aka "GraalVM native-image"), precisely to eliminate startup overhead.
- bmicraft 2y agoalacritty (in the arch repo) is 8MB decompressed alacritty is also written in rust and gpu accelerated, so the other vte must just be just be plain bad Edit: Just tried turning on a couple bin-size optimizations which yielded a 3.3M binary
- kube-system 2y ago> All else equal users will absolutely choose the zippiest products. Only a small subset of users actually do this, because there are many other reasons that people choose software. There are plenty of examples of bloated software that is successful, because those pieces of software deliver value other than being quick. Vanishingly few people are going to choose a 1mb piece of software that loads in 10ms over a 100mb piece of software that loads in 500ms, because they won't notice the difference.
- bigstrat2003 2y agoYes, there are other reasons people choose software. That's why GP said all else equal. You just ignored the most important part of his post.
- kube-system 2y agoYes, hypothetically if all else is equal, and the difference isn't noticeable, then the users experience is equal. But it's a hypothetical that doesn't actually exist in the real world. Competing software equal in every way but speed doesn't exist except for some very few contrived examples. Different pieces of software typically have different user interfaces, different features, different marketing, different functionality, etc.
- nindalf 2y ago> a debug build of "hello world!" in Rust clocks in at 3.7mb. (No shade on Rust) This isn't true. It took me two seconds to create a new project, run `cargo build` followed by `ls -hl ./target/debug/helloworld`. That tells me it's 438K, not 3.7MB. Also, this is a debug build, one that contains debug symbols to help with debugging. Release builds would be configured to strip them, and a release binary of hello world clocks in at 343K. And for people who want even smaller binaries, they can follow the instructions at https://github.com/johnthagen/min-sized-rust https://github.com/johnthagen/min-sized-rust. Older Rust versions used to include more debug symbols in the build, but they're now stripped out by default.
- bitbasher 2y agoFor me, 3.8M Feb 21 11:56 target/debug/helloworld
- metaltyphoon 2y agoWhy is not —release being passed to cargo? It’s not like the File Pilo mentioned by GP is released with debug symbols.
- bitbasher 2y agoThe original post/blog said a debug hello world was 3.7MB. I confirmed the post. A release build is: 426K Feb 21 15:28 target/release/helloworld If you use lto, codegen-units = 1 and strip then you get: 323K Feb 21 15:30 target/release/helloworld
- gizmo 2y ago$ rustc --version && rustc hello.rs && ls -alh hello rustc 1.84.1 e71f9a9a9 2025-01-27 -rwxr-xr-x 1 user user 9.1M hello So 9.1 MB on my machine. And as I pointed out in a comment below, your release binary of 440k is still larger than necessary by a factor 2000x or so. Windows 95 came on 13x 3.5" floppies, so 22MB. The rust compiler package takes up 240mb on my machine. That means rust is about 10x larger than a fully functional desktop OS from 30 years ago.
- bloomingkales 2y agoIf you want to make something that starts instantly you can't use electron or java. This technical requirement is only on the spec sheet created by HN goers. Nobody else cares. Don't take tech specs from your competitors, but do pay attention. The user is always enchanted by a good experience, and they will never even perceive what's underneath. You'd need a competitor to get in their ear about how it's using Electron. Everyone has a motive here, don't get it twisted.
- gamedever 2y ago> If you want to make something that starts instantly you can't use electron Hmmm, VScode starts instantly on my M1 Mac Slack's success suggests you're wrong about bloat being an issue. Same with almost every mobile app. The iOS Youtube app is 300meg. You could repo the functionality in 1meg. The TikTok app is 597meg. Instagram 370meg. X app 385meg, Slack app 426meg, T-Life (no idea what it is but it's #3 on the app store, 600meg) Users don't care about bloat.
- codazoda 2y agoIt’s a little off topic but I used to think Go binaries were too big. I did a little evaluation at some point and changed my mind. Sounds like they are still bigger than Rust. https://joeldare.com/small-go-binaries https://joeldare.com/small-go-binaries
- Aurornis 2y ago> If you want to make something that starts instantly you can't use electron or java. You can't use bloated libraries. Because users do notice. Most users do not care at all. If someone is sitting down for an hour-long gaming session with their friends, it doesn't matter if Discord takes 1 second or 20 seconds to launch. If someone is sitting down to do hours of work for the day, it doesn't matter if their JetBrains IDE or Photoshop or Solidworks launches instantly or takes 30 seconds. It's an entirely negligible amount. What they do care about is that the app works, gives them the features they want, and gets the job done. We shouldn't carelessly let startup times grow and binaries become bloated for no reason, but it's also not a good idea to avoid helpful libraries and productivity-enhancing frameworks to optimize for startup time and binary size. Those are two dimensions of the product that matter the least. > All else equal users will absolutely choose the zippiest products. "All else equal" is doing a lot of work there. In real world situations, the products with more features and functionality tend to be a little heavier and maybe a little slower. Dealing with a couple seconds of app startup time is nothing in the grand scheme of people's work. Entirely negligible. It makes sense to prioritize features and functionality over hyper-optimizing a couple seconds out of a person's day. > As somebody on Twitter pointed out, a debug build of "hello world!" in Rust clocks in at 3.7mb. Okay. Comparing a debug build to a released app is a blatantly dishonest argument tactic. I have multiple deployed Rust services with binary sizes in the 1-2MB range. I do not care at all how large a "Hello World" app is because I'm not picking Rust to write Hello World apps.
- znpy 2y ago> But that's not how the argument is used in practice. In practice this argument is used to justify bloated apps, bad engineering, and corner-cutting. It's an incredibly effective argument to shut down people pushing for the new shiny thing just because they want to try it. Some people are gullible enough to read some vague promises on the homepage of a new programming language or library or database and they'll start pushing to rewrite major components using the new shiny thing. Case in point: i've worked at two very successful companies (one of them reached unicorn-level valuation) that were fundamentally built using PHP. Yeah, that thing that people claim has been dead for the last 15 years. It's alive, kicking and screaming. And it works beautifully. > If you want to make something that starts instantly you can't use electron or java. You picked the two technologies that are the worst examples for this. Electron: electron has essentially breathed new life into GUI development, that essentially nobody was doing anymore. Java: modern java is crazy fast nowadays , and on decent computer your code gets to the entrypoint (main) in less than a second. Whatever slows it down is codebase problem, it's not the jvm.
- 1vuio0pswjnm7 2y ago"All else equal users will absolutely choose the zippiest products." As a "user", it is not only "zippiest" that matters to me. Size matters, too. And, in some cases, the two are related. (Rust? Try compiling on an underpowered computer.^1) "If you want to make something that starts instantly you can't use Electron or Java." Nor Python. 1. I do this everyday with C.
- talksik 2y agoI like this take, though deadlines do force you to make some tradeoffs. That's the conclusion I've come to. I do think people nowadays over-index on iteration/shipping speed over quality. It's an escape. And it shows, when you "ship".