[HN Gopher] Software Disenchantment (2018)
       ___________________________________________________________________
        
       Software Disenchantment (2018)
        
       Author : ShowalkKama
       Score  : 151 points
       Date   : 2022-06-19 12:12 UTC (10 hours ago)
        
 (HTM) web link (tonsky.me)
 (TXT) w3m dump (tonsky.me)
        
       | rektide wrote:
       | Focusing on the little unpleasantnesses distracts from seeing a
       | bigger picture. The net software experience hasnt changed or
       | improved much. There's a lot of fine tuning & apps getting
       | tweaked, but the platform of computing- to users- has been locked
       | at the same fixed boring low-power level for well over a decade.
       | If you want to be disenchanted, do it from a macro perspective.
        
       | DeathArrow wrote:
       | I think the biggest wave of the bloat started when SPAs became a
       | thing. After that, fronted web developers thought they can write
       | mobile and desktop apps, so the bloat reached mobile and
       | desktops, backed by repurposed web technologies.
        
         | jeroenhd wrote:
         | There's definitely a corelation, but I think it's inverse. I
         | think companies thought that web developers can program
         | mobile/desktop apps now, and web devs were happy to accept the
         | better paying jobs.
         | 
         | At this point newer "native" frameworks (Flutter/Compose
         | Multiplatform/friends) are programmed like video games: a 3D
         | rendering surface with loads of custom logic. Except video
         | games can reach hundreds of frames per seconds and advanced
         | text boxes struggle to animate correctly at 60fps.
        
         | dgb23 wrote:
         | There are plenty of desktop apps that are bloated and slow and
         | plenty of web based apps that are fast and light. Thinking of
         | Figma (web based) vs Adobe XD. The former "installs" much
         | quicker, does cooler things, is more useful, more responsive.
         | 
         | The solution to the problems mentioned in the article is not
         | "use technology X", it is about shifting focus on quality.
        
         | intothemild wrote:
         | I tend to agree here.
         | 
         | I don't blame SPAs (not that i think you are), but it does feel
         | like there is correlation between SPAs rise in usage and with
         | the frontend becoming worse.
         | 
         | Not that it's the tool, but the welder of the tool.
         | 
         | I'll explain, I think that basically a lot of frontend
         | engineers started using SPAs for too many different usages...
         | Like using a SPA instead of a static page for a really simple
         | basic website.. to me this is like when a meeting could have
         | been an email.
         | 
         | Or adding in so much tooling to their site which doesn't really
         | solve any problems except make new problems, so now there's
         | more tooling for that. (read state management, client side
         | routers)
         | 
         | I remember at a <very popular SPA> conf I spoke to the two guys
         | who made a very popular framework for building that popular
         | SPA, they asked me how my serverside project used express.js's
         | router... Like the questions they had were along the lines of
         | "how can you do (insert basic routing thing here) in express?".
         | The only exposure to express they had was a catch all route to
         | their apps main clientside router.
         | 
         | I was stunned... They were aware there was this tool, and
         | ignored it.. instead deciding that they could do better.
         | 
         | To me this was post SPA frontend in a nutshell.
        
       | bbbobbb wrote:
       | The text resonates with me but there isn't much practical advice.
       | What should I do as a normal developer working on normal business
       | products? I try not to do obviously slow and stupid stuff but it
       | is not the main focus.
       | 
       | It does mention it but just to reiterate: The business value of
       | getting things out is larger than getting things right most of
       | the time.
       | 
       | The architecture are bloated micro-services, the infrastructure
       | is overcomplicated, the response times are order of magnitude
       | longer than they ought to be.
       | 
       | But there is no time to care. The next shiny feature or
       | integration or whole business case is waiting to be implemented
       | and shipped. We cannot afford to spend time on improving things
       | people don't complain about over things that bring more money.
       | 
       | I guess that is where the disenchantment part comes in. Most
       | companies are not in business of engineering stuff well if that
       | is not what makes them money.
        
         | nine_k wrote:
         | Developer's time is much more expensive than CPU's. So much
         | more CPU's time is spent ("wasted") to save some amount of
         | developer's time. This includes developer's s study time, that
         | is, hiring less educated and experienced developers.
         | 
         | In 1990s we had a similar effect: the CPU performance and RAM
         | sizes grew so rapidly that "poorly written" and "bloated"
         | software became "butter-smooth" and "lightweight" in a couple
         | of years. Now we have the cloud instead, when spinning a dozen
         | more instances or upgrading to a slightly more expensive plan
         | gives the performance boost that solves many bottlenecks (much)
         | cheaper than paying a team of 3 developers to spend 6 extra
         | months to do things right.
         | 
         | The endless CPU growth gravy train stopped in mid-2000s. I
         | wonder when the endless cloud scaling train will slow down
         | materially.
        
           | bbbobbb wrote:
           | It's not just dev time vs cpu time. The thing the article
           | mentions and what I was trying to echo is that software is
           | slow and overcomplicated despite that. It would be unusable
           | without fast hardware.
           | 
           | But people are used to programs being slow and bloated.
           | People and companies are rarely willing to pay premium for
           | efficient programs. So here we are, gluing stuff together so
           | that we're fast to market with every next feature while
           | collectively wasting lifetimes as our apps load and perform
           | basic actions.
           | 
           | I am not even saying it's wrong. There are plenty of things
           | I'd rather have now and slow than later/never and fast. Nor I
           | am saying given the time I'm capable of making all our
           | software significantly leaner and faster. I am just echoing
           | the disenchantment and some frustrations.
        
             | dgb23 wrote:
             | > People and companies are rarely willing to pay premium
             | for efficient programs.
             | 
             | First of all this is just not true. Fundamentally you use a
             | computer because it is fast and remembers things
             | accurately.
             | 
             | Secondly I think generally we're at a point where just
             | removing/avoiding crap and starting things from scratch is
             | more economic, sometimes even regardless of performance.
             | And factoring in it in I think it might become a major
             | selling point even in feature competitive areas that are
             | occupied by gigantic firms.
        
             | camgunz wrote:
             | The other day I noticed (again) the shadows macOS draws
             | around focused windows, and I thought to myself "if I could
             | turn that off and get .003% battery life back, I would 100%
             | do it".
             | 
             | I would _never_ have thought that if I hadn 't used Linux
             | (or another FOSS *NIX), where you can customize things down
             | to modifying the code yourself. Hell I had a window manager
             | for a while where the way to customize it was to edit the
             | code and recompile it.
             | 
             | That Alan Kay quote "...because people don't understand
             | what computing is about, they think they have it in the
             | iPhone, and that illusion is as bad as the illusion that
             | Guitar Hero is the same as a real guitar" really summarizes
             | the thing best I think, but the whole interview [0] really
             | fills out the sentiment. People may or may not think
             | they're "computing" or whatever, but there's a kind of tug
             | of war between mindlessly shuffling around spreadsheets and
             | slide decks and trying to create something that
             | meaningfully improves peoples' lives.
             | 
             | Blame whatever you want for this:
             | 
             | - we don't factor in pollution externalities into costs, so
             | Electron (and web) apps are commercially viable despite
             | their high energy use
             | 
             | - tech oligopolies do illegal things to squelch
             | competition, so competing organizations are in a race to
             | the bottom re: efficiency, dark patterns, addictive
             | features (building "engagement"), etc.; see Writely (Google
             | Docs) vs. MS Office, etc.
             | 
             | - in capitalism you solve everything with money, and money
             | washes away all sins, so all other concerns (efficiency,
             | civil rights, etc.) are mooted
             | 
             | - there's essentially no useful social safety net in the
             | US, and one of the consequences of this is that we need
             | full employment programs for the middle class, who
             | subconsciously know this and put pressures on the market
             | not to obsolete them (no need for humans to captain Excel
             | around anymore), but to let them burrow more deeply into
             | enterprises (make Excel more and more powerful and
             | complicated such that only humans trained over years can
             | use it). This is analogous to the dynamic medical companies
             | face: treatments make you rich, cures make you bankrupt.
             | 
             | [0]: https://www.fastcompany.com/40435064/what-alan-kay-
             | thinks-ab...
        
               | abecedarius wrote:
               | > we don't factor in pollution externalities into costs
               | 
               | Suppose this is solved and it turns out your local
               | electricity price literally doubles from $0.10/kW-hr to
               | $0.20. Suppose your Electron app adds 10W to what you'd
               | otherwise use, for 10 hours/day. Your power bill just
               | went up by 1 cent per day, almost unnoticeable to an
               | individual.
               | 
               | I actually agree that to understand why the software
               | ecosystem is screwed up in the ways it is, we should be
               | looking for the economic/legal/otherwise systemic
               | incentives driving the patterns. But that's different
               | from "I can think of a way the world is bad according to
               | my politics, that must be it."
        
               | ThrowAway158209 wrote:
               | Don't forget about scale. You need to multiply the
               | numbers by 100s of millions of users, times the amount of
               | time these apps are running (365 _10_ 10), times the
               | amount of apps (idk, per user like 10, 20, 40?). Plus of
               | course the overhead from extra hops over the internet
               | because apps are being request-happy...
        
               | abecedarius wrote:
               | The proposal was that if dirty power were more
               | realistically priced, then people would not use Electron
               | apps.
               | 
               | Code that's a hot spot in a data center already does get
               | more attention to its efficiency, and the data centers
               | already tend to be sited for clean power. The one correct
               | bit here is that pricing the externalities would increase
               | that trend of data-center optimization.
               | 
               | (I guess I should add that I support carbon pricing.)
        
               | camgunz wrote:
               | > But that's different from "I can think of a way the
               | world is bad according to my politics, that must be it."
               | 
               | It's not productive to dismiss someone's argument based
               | on their politics, unless I guess you think I'm an
               | extremist (I'm not). Politics is a core part of how we
               | understand our world, our societies, our institutions,
               | and our cultures. I'm open to having my politics changed
               | and I love to discuss them, but I won't be dismissed
               | because I believe climate change is a huge threat, or for
               | my other economic political views.
               | 
               | ---
               | 
               | Continuing in good faith, raw kilowatt hours diminish
               | what a potential pollution cost externality regime might
               | do, and I wouldn't say that a system based on them
               | succeeds in factoring in pollution externalities.
               | 
               | CO2 is more brass tacks. The global CO2 budget is ~40
               | gigatons of CO2 a year [0]. There's ~8 billion people
               | around, making the per-capita carbon budget 5 tons of
               | carbon/year. You could tax this in different ways:
               | 
               | - Software producers have their software measured for
               | energy use, paying a tax per N users per Wh
               | 
               | - Individuals are allotted 5 tons of carbon/year for
               | free; can pay $2/lb from 5-6 tons, $4/lb from 6-7 tons,
               | etc.
               | 
               | - Industrial sector participants are allotted 50 tons of
               | carbon/year for free, etc. etc.
               | 
               | [0]: https://essd.copernicus.org/articles/14/1917/2022/
        
         | svachalek wrote:
         | In terms of engineering well, it's really more about doing the
         | right thing at any cost than the wrong thing at optimal
         | efficiency. In some sense we could say that rapid evolution of
         | solutions is therefore focused on the right problem, much more
         | so than navel-gazing on millisecond timers or big O estimates.
         | 
         | Well, in an ideal world. In the actual world, we're using
         | really inefficient software to direct someone to your driveway
         | with a tank of gas because you didn't feel like stopping at a
         | gas station. But I still feel like I had a point in there
         | somewhere.
        
           | bbbobbb wrote:
           | I don't disagree. It's just that there is rarely time to
           | revisit and improve the right things that work. Often it's
           | left as is (in this context inefficient) and the business
           | moves to the next 'experiment'. The end result tend to be a
           | portfolio of sluggish features.
        
       | eulenteufel wrote:
       | Finally a website that gets dark mode right! ;D
        
       | IYasha wrote:
       | Dear Nikita, you have my signature under (almost) every your
       | word. ) You describe the reason I've became disgusted with
       | programming and IT trends in general and quit being a programmer.
        
       | garrisonj wrote:
       | I would switch music streaming services for a client that wasn't
       | buggy. I think there is an untapped market for a software company
       | that provides high-quality software. Market competition might
       | kick in if a company can pull it off. It's probably more
       | complicated than it sounds, though, because software frameworks
       | don't provide that level of quality.
        
       | Ygg2 wrote:
       | > On each keystroke, all you have to do is update a tiny
       | rectangular region and modern text editors can't do that in 16ms.
       | It's a lot of time. A LOT. A 3D game can fill the whole screen
       | with hundreds of thousands (!!!)
       | 
       | Yeah. Just update a tiny rectangle.
       | 
       | And check Unicode validity.
       | 
       | And render the Unicode character
       | 
       | And re-do highlight.
       | 
       | And spawn a box with autocomplete. Or not.
       | 
       | And run the AST analysis.
       | 
       | And depending on language check if there is an extension dealing
       | with it.
       | 
       | List goes on.
       | 
       | I dislike the simplification that the article glosses over. Games
       | are fast because they do one or few things that GPUs are great
       | at. Text editors aren't as fast because they do a bunch of things
       | that aren't as easily ported to a GPU.
        
         | anonymoushn wrote:
         | Unicode validation runs at gigabytes per second. Text rendering
         | is a tiny, tiny subset of game rendering. Not sure about
         | highlighting, sounds like a mix of parsing and game rendering,
         | so that's likely again to be one process that can run at
         | gigabytes per second and another process that is a tiny subset
         | of a process that often runs at 240Hz these days. Autocomplete,
         | no clue, probably this could also be fast? You're like doing a
         | lookup into an inverted index or a hash table or a range tree
         | or something? So it takes like less than 3 microseconds to
         | decide what the contents of the box should be? Oh, it doesn't,
         | because you decided the way this should work is that several
         | different processes should communicate with each other using
         | JSON-RPC just to figure out what goes in the autocomplete box?
         | Yeah, okay, sounds like a problem with the design then. Notably
         | World of Warcraft does not send json over sockets between
         | multiple local processes to decide how wide the nonempty part
         | of each mob's health bar should be every single frame, and
         | maybe one day we could try to figure out whether there's a
         | reason for that.
        
       | z3t4 wrote:
       | All software is shit, the more you have the bigger the pile. So
       | if you want to write a fast and bug free program, make the scope
       | as small as possible.
        
       | pknopf wrote:
       | I love seeing this hit HN every so often. It reminds me of just
       | how hilarious us humans introduce complexity just everywhere.
        
       | rileymat2 wrote:
       | > Windows 95 was 30MB. Today we have web pages heavier than that!
       | Windows 10 is 4GB, which is 133 times as big. But is it 133 times
       | as superior?
       | 
       | This is an interesting question, I am not sure how I would
       | measure this.
       | 
       | Stability/Uptime is probably 100x better than I recall for my
       | windows 95 machine. They have done a ton of important security
       | work since 95, from UAC to process isolation.
       | 
       | Would I pay 100x more? I am paying less now.
        
       | 29athrowaway wrote:
       | In fictional universe of FF VI, there are magical creatures with
       | magical abilities called espers.
       | 
       | What is interesting in this game, is that the evil faction in the
       | game are not the espers, but humans that figured out how to
       | enslave them, extract their life essence and turn it into power.
       | 
       | The empire does not care about the well-being of espers or their
       | personality, they only care about their abilities.
       | 
       | There is a part of the game where you see all the espers in a
       | scientific facility, being drained of their abilities and life,
       | and then thrown into a dumpster when they have no magical power
       | left.
       | 
       | That is the software industry.
       | 
       | The good faction are humans that decide to fight the empire, and
       | discover that espers can voluntarily give their power to humans
       | in a more effective way than what the empire can forcefully
       | extract from espers. They use that power to defeat the empire.
       | 
       | Those guys are open source projects.
        
         | skolskoly wrote:
         | Clearly the software industry is more evil than the FF villains
         | though. Wasted computers are not alive, and yet they WANT them
         | to be sentient.
        
         | cs137 wrote:
         | I used to refer to turning 35, as a programmer, as "being
         | turned into magicite".
         | 
         | I'm almost 40 and I'm better than ever, but I doubt I'd get
         | hired for a corporate programming job at this point, not that
         | I'd want one.
         | 
         | Have you played the Brave New World mod?
        
           | 29athrowaway wrote:
           | I have not played it but I have seen people playing it on
           | Twitch.
        
       | buchoo wrote:
        
       | dinvlad wrote:
       | "Back in the days" I used to think 256KB of RAM on a modified
       | Speccy was already plenty, and dreamt about getting one of those
       | 256MB(!) PCs, which would open a _universe_ of opportunities.
       | 
       | Heh, that was so naive - not because of it being possible in
       | principle, but mostly because of all the bloat described in this
       | article, plus misaligned business incentives.
       | 
       | These days, writing any software that would fit within mere
       | dozens of KBs like the famous .kkrieger (an entire better-than-
       | original-Doom-looking FPS game!), seems almost out of reach.
       | Although it's motivational to dream once again through projects
       | like Redbean that everyone is posting about.
       | 
       | But at the same time, I feel like unless you've lived through
       | those times, it's sort of a "lost art" and is only appreciated by
       | a vast minority these days.
       | 
       | In other words, the whole idea of minimalism in software is not
       | even thought about as something that existed/could exist (you
       | can't imagine a yellow Jeep if you've never even heard of a
       | Jeep..)
        
       | mrob wrote:
       | Meanwhile, I'm using a 13 year old desktop running Debian
       | Unstable and it feels even faster than when it was new. It's
       | subjectively faster than an M1 Mac Mini, despite the Mac beating
       | it in benchmarks. I attribute this to two main causes: ruthlessly
       | deleting/disabling everything I consider bloat (e.g. animations,
       | text anti-aliasing, gradient fills, rounded corners,
       | transparency, compositing, Javascript, anything wireless etc.),
       | and using a low-latency gaming keyboard/mouse/monitor.
       | Performance is available if you want it. But I think most people
       | prefer aesthetics.
        
         | jolux wrote:
         | I find text a lot harder to read without anti-aliasing.
        
           | mrob wrote:
           | To be honest, I doubt disabling anti-aliasing makes any
           | perceptible performance difference itself (although it gives
           | me sharp text without needing 4K, which probably does). But
           | your comment shows the important of customization. I disabled
           | things I personally considered bloat. Other people will
           | consider different things to be bloat. Software should give
           | you that freedom (and Free Software gives you the ultimate
           | freedom to customize).
        
             | password4321 wrote:
             | "Ain't nobody got time for that!"
             | 
             | Actually, I would be interested to learn how much time
             | you've invested in customization, especially if there were
             | points when the system became temporarily unusable.
        
               | mrob wrote:
               | Almost certainly more time than the customizations have
               | saved me. I still consider it worth doing, because I
               | enjoy doing it, and it makes the computer more pleasant
               | to use. I have made the computer temporarily unusable
               | several times, but I have an old netbook too, so I'm
               | never stuck without a usable computer while I fix it.
        
         | capableweb wrote:
         | I think the biggest factor is animations. Switching from an old
         | Android phone (with animations turned off) to a brand new iOS
         | (at least at the time) felt like a downgrade at first, because
         | every interaction with the UI was so much slower than I was
         | used to. Clicking a button didn't actually make the thing I
         | wanted to appear immediately, but instead it faded in over
         | 200ms or something, making the phone that had 10x better specs
         | feel much slower.
        
       | oldjavacoder wrote:
       | "We put virtual machines inside Linux, and then we put Docker
       | inside virtual machines..."
       | 
       | Hold my beer.
        
       | galaxyLogic wrote:
       | It's bit like "shrinkflation" where you get less for the same
       | cost because that reduces producers' expenses.
       | 
       | In software we get the same functionality as 20 years before on
       | similarly priced hardware. But we don't get the speed-benefits we
       | could and should expect.
       | 
       | This may be because software producers prefer making things easy
       | for themselves by using ever larger libraries. It reduces their
       | costs but makes software slower?
        
       | hermitcrab wrote:
       | The old engineering adage is: cheap, fast, reliable - pick 2. Or
       | maybe < 2 with software.
       | 
       | And the end of the day most people don't want to pay what
       | development of fast and reliable software costs and businesses
       | know that. So we end up with the shoddy bloatware that are
       | prepared to pay for.
       | 
       | If you don't like that, start your own business and write
       | software that meets your standards. If you are too purist, you
       | might find it a struggle to survive financially up against less
       | scrupulous competitors.
        
       | gyamet wrote:
       | Not all software is crap.
       | 
       | I've had my game server for a popular multiplayer online web game
       | running continuously for over two years now. Same Linux process,
       | same cloud VM. Never crashed, never needed to reboot. Node 12,
       | everything done in TypeScript, from the network protocol to the
       | physics engine.
       | 
       | All it took was careful design and development. Not that
       | difficult if you put your mind to it and don't cut corners.
        
       | bob1029 wrote:
       | It would seem this is all just a matter of constraints and
       | objectives.
       | 
       | It's not that we are unwilling or unable to make things faster.
       | For instance, when presented with the task of porting Quake to
       | the GBA, we somehow find the means to make this happen, despite
       | the underlying CPU only operating at 16.78 MHz. Playable frames
       | per second are achievable on that system.
       | 
       | Scaling "GBA Quake"-levels of optimization up, you could probably
       | run thousands of simultaneous clients off a single AMD system
       | today - regardless of GPU capabilities. But, I don't think the
       | market is demanding that kind of experience anymore, especially
       | not at that kind of scale.
       | 
       | The point I would like to make: High quality experiences only
       | seem to manifest when enough adversarial pressure has been
       | applied at design/architecture time. This is not just limited to
       | software.
        
       | dgb23 wrote:
       | Nikita Prokopov is right. Performance matters.
       | 
       | - It is a major part both UX and the utility of a program. The
       | success of the iPhone is often attributed to design, but it was
       | also really responsive, fast and simple in comparison to other
       | smartphones.
       | 
       | - We tend to do stuff to "fix" performance on top of things that
       | make the whole system much more complicated and brittle. Caching
       | is the best example here. Caching proliferates and adds
       | complexity to every layer. Another one is adding more machines.
       | Same story.
       | 
       | - Programmer time is valuable. But how about reducing the
       | complexity of a system and make it reasonably fast? Less failure
       | modes means less worry and work. Fast feedback loops are
       | absolutely _essential_ to keep a programmer in a productive flow.
       | 
       | - It costs less. See the two points above.
       | 
       | - It is enabling. There are things you don't even consider doing
       | because everything is slow. You don't have enough currency in the
       | form of time and cycles to do more.
       | 
       | - It is not that hard. As described in the article, it is often
       | just a matter of throwing stuff away that isn't needed. Start
       | with less abstractions and "flexibility". Build something
       | reasonable that cares somewhat about performance and you probably
       | get orders of magnitude faster results.
       | 
       | What hinders us?
       | 
       | People introduced the joke of "just wait a year or two and it's
       | faster" because hardware kept fixing bad performance. This is
       | over. We're drowning fast hardware with slow software, quicker
       | than hardware can keep up. Also many of the improvements are on
       | the level of parallelization and caching. Programs need to be
       | aware of that at some level.
       | 
       | There is the famous quote "premature optimization is the root of
       | all evil". I'm not talking about optimization here. I don't even
       | know how to do optimization outside of trivial things. What I'm
       | talking about is just removing or avoiding unnecessary cruft, and
       | very basic efficiency.
       | 
       | Overhead is not taken seriously. When I read comments like "IO
       | performance dominates web apps" then I wonder if they have ever
       | run a profiler. Do you really need to make that many db calls?
       | Have you designed your data model with respect to access patterns
       | at all, or did you follow some "Best Practices" modelling which
       | is disjoint from what your app is doing? Is all that indirection
       | necessary for you to write maintainable, concise code?
       | 
       | Adding unnecessary cruft is endemic in web development and seems
       | to be part of our culture. We're very much concerned with short
       | term productivity and everything keeps changing quite fast. Part
       | of this is businesses decision makers wanting to think of
       | developers as interchangeable and development as a commodity. I
       | disagree. I think there is a niche for web agencies that make
       | simple, robust and performant things.
        
       | Arwill wrote:
       | I am a big fan of single header libraries. And libraries that i
       | not just link to, but which i am allowed to reuse and compile
       | myself. Then i gut that library and remove everything i don't
       | need. Less code, less space, less runtime and less potential bugs
       | hopefully.
       | 
       | For example there is a single header library HTML renderer and
       | its fast, but does not run JavaScript.
       | 
       | And there is for example Chromium, which is the complete browser
       | experience, but its 10GB source code, no sense in trying
       | simplifying any of that.
        
         | _gabe_ wrote:
         | > For example there is a single header library HTML renderer
         | and its fast, but does not run JavaScript.
         | 
         | What library is this and does it support CSS? I'm using RML UI
         | right now, and I'm pretty happy with it but it's pretty bloated
         | imo. I'd love to switch if I could :)
        
       | tenebrisalietum wrote:
       | One of the things this article talks about is web sites being
       | unable to animate things close to 60Hz and wondering how that
       | will go when 120Hz and higher displays become mainstream.
       | 
       | However: Doing everything over a worldwide internetwork on a CPU
       | and OS independent platform that can be used for tasks as diverse
       | as talking to your GPU, or interacting with real time audio/video
       | was _not_ part of the  "original plan."
       | 
       | Yes, DOS is more responsive but you can't have 6 image-heavy
       | large documents open on your computer while Webex'ing, observing
       | your weather, having a Youtube video open, and playing a game all
       | during your Webex under DOS.
       | 
       | The comparison is not apples to apples anymore, but if DOS serves
       | your needs, use it. It reminds me of this article comparing
       | Windows NT to CPM:
       | http://www.oualline.com/practical.programmer/cpm.html
       | 
       | The article also talks about Windows updates. That's a legitimate
       | concern. Microsoft needs to rip out that system and start
       | completely over.
       | 
       | Look at this article from Microsoft entitled "Windows Updates
       | using forward and reverse differentials"
       | (https://docs.microsoft.com/en-us/windows/deployment/update/p...)
       | - wtf? I don't even know why any of this is necessary for a
       | system that should just overwrite files with later versions. If
       | you wanted evidence that Windows Updates is overengineered, there
       | you go.
        
       | bmitc wrote:
       | This rings true and frustrates me as well. My entire career I get
       | bogged down with being so disappointed with the tools that we use
       | in the software industry, that it totally distracts from building
       | new things.
       | 
       | Perhaps it is my mathematics background that spoiled me. In
       | mathematics, you rarely are concerned with the tools that you
       | have at your disposal. In most cases, they have been designed
       | well, iterated on, smoothed out, etc., and above all, _they just
       | work_. Aside from the most advanced, cutting-edge work, this is
       | generally true. Of course, there 's always work on foundations,
       | different paradigms of mathematics, and more, but I think the
       | point is clear. Maybe an even clearer point is imagining a
       | carpenter who has to rebuild his hammer every day because it
       | stops working, and then imagine that the instructions to build a
       | hammer are practically undocumented scribblings on some napkins.
       | 
       | In software, and actually in engineering as a whole, there is a
       | large percentage of work that goes into _solving problems created
       | by other engineers_. This isn 't all the work, of course, but it
       | is a depressingly large amount.
       | 
       | In general, I am less concerned about all the constraints of
       | software artifacts, e.g., size, slowness, etc. While those are a
       | drag and can be frustrating, I am more concerned with two things:
       | software that works and software tools. The tools that we use in
       | this industry are nothing but antiquated. Software engineers
       | equate programming to text, and thus, all the tooling revolves
       | around text. Most so-called IDEs are simply advanced text
       | editors. Tools like Git are beloved, and in Linus' own words, I'm
       | surprised they made it to adulthood. Even in a text-based
       | language, I absolutely _do not care_ about lines that changed. I
       | care about semantic things, like functions, modules, expression
       | blocks, etc. I want my source-code control and comparison tools
       | to tell me what actually changed and not what characters of
       | changes are present. I could go on and on this topic.
       | 
       | And part of the consequences of poor tools, we have software that
       | works poorly and is just balls of mud stacked on top of more
       | balls of mud that have dried out they're brittle to even touch.
       | But that's just one component of why software doesn't work. The
       | other is how we think about software. Thinking about software as
       | just a thing that a person tells a computer to do is not enough.
       | Software is about three things: (1) computation, (2)
       | communication between _humans_ and not between human and machine,
       | and (3) how to think about things or encode a domain with
       | software. We suck enough as it is with (1), but (2) and (3) are
       | basically ignored at large. Almost all engineering problems in
       | deployed systems relate down to communication issues and poor
       | understanding of the domain at hand. But not only does everyone
       | concentrate on (1), they concentrate on very narrow aspects of
       | (1).
       | 
       | It's almost no surprise that things are as bad as they are in
       | software.
        
       | sp332 wrote:
       | That sync conflict window doesn't force you to lose data. Just
       | check both boxes and you keep both copies.
       | 
       | And the python situation was really bad, but things have improved
       | a lot in the last 4 years.
        
         | ptx wrote:
         | The confusion is understandable since the UI designer made the
         | checkboxes look like radio buttons.
        
       | jerDev wrote:
       | Interesting article. I have thought a lot about this frustration
       | on the job.
       | 
       | However, I'm on the opposite side of the fence.
       | 
       | In summary, there are two fundamental ideas in software
       | engineering that people constantly grapple with especially new
       | grads:
       | 
       | 1) If it works, it's not broken.
       | 
       | Or
       | 
       | 2) It's broken until it's not.
       | 
       | ( also can be seen as "right" vs. "right now" )
       | 
       | Let me explain further; - first point refers to the idea that if
       | the constraints provided are achieved, there are no tasks to be
       | done.
       | 
       | - second point refers to the idea that there is a correct way to
       | do something.
       | 
       | I'm not going to take long, but i strongly stand in the first
       | camp. There is no value in building kingdoms in details that
       | aren't required. Could we have it run in 010ms vs 250ms? Could we
       | make this look better? Could we do this in a different way? Etc.
       | none of this matters if it works.
       | 
       | Now; you might ask the following questions: - what about
       | scalability? What if I've done this before and I know pitfalls of
       | xyz?
       | 
       | And my answer is, politely, iterative improvements after a
       | working model if those improvements become necessary. Those
       | improvements are not defacto necessary. And when I say necessary,
       | I mean customers are returning the product, not an engineer can't
       | sleep at night because of his/her neurosis.
       | 
       | In summary, the world you live in was at-best designed with an
       | acceptable tolerance for error. I call that, "good enough". There
       | is no other measure than "good enough" when it comes to
       | acceptance criteria of anything.
        
         | eecc wrote:
         | Not sure, but I smell intolerance for craft, and micromanaging.
         | You're going on with this "optimize for efficiency" and "good
         | enough" rhetoric but tell me: how are you going to make a bunch
         | of professionals care about your widgets if you keep mortifying
         | their interest in them?
         | 
         | And let's assume they deliver your acceptance criteria, do you
         | really think you have enough requirements to keep them busy and
         | interested?
         | 
         | Are you going to fire them? No, because you might need them
         | back!
         | 
         | Are you going to let them do what they're good at? No because
         | that'd be waste since it wasn't vetted!
         | 
         | So are you going to let them play pool at the office?
        
         | ShroudedNight wrote:
         | > iterative improvements after a working model if those
         | improvements become necessary.
         | 
         | This doesn't actually work if you've shotgunned the bloat
         | uniformly across your system.
         | 
         | My personal experience was trying to find a 10% performance
         | degradation that turned out to be a worthless branch in memory
         | allocation that ended up being inlined prolifically throughout
         | the codebase. It didn't show up in any profile, and if the
         | group I was with wasn't ruthlessly disciplined in maintaining
         | performance, such that it's effects were felt immediately, I
         | strongly doubt it could have been reversed after the fact
         | without serendipitous re-discovery.
        
         | dahfizz wrote:
         | It sounds like you just don't include performance in your
         | acceptance criteria. You're using a lot of words to basically
         | say that you don't care about performance.
         | 
         | I don't find it acceptable to merge something that I know could
         | be 10X faster with a bit more work. Part of my acceptance
         | criteria is "has reasonable performance".
         | 
         | Performance optimization is contentious because everyone has to
         | draw the line somewhere. You can sink an almost unlimited
         | amount of time making a complex program faster. But I've seen
         | so many devs just ignore it altogether, where half a day of
         | work literally makes the thing they made 10x faster.
        
           | jerDev wrote:
           | I feel more work than is necessary is always a waste.
           | 
           | Unless there is a business requirement for something to be
           | 10x faster, and that is rooted in $'s, there is no reason to
           | be more than 1x.
           | 
           | Performance criteria should only be measured by whether or
           | not you lose money/customers from it.
           | 
           | It's not an EM's job to have performance criteria themselves.
           | That should be dictated by business needs
        
             | anonymoushn wrote:
             | commonly the cost is externalized to millions of people who
             | spend hours waiting on the thing.
        
               | ElFitz wrote:
               | See https://www.folklore.org/StoryView.py?project=Macinto
               | sh&stor...
        
             | Delk wrote:
             | > Performance criteria should only be measured by whether
             | or not you lose money/customers from it.
             | 
             | While I agree that performance optimization for no tangible
             | benefit isn't generally useful, I find it quite cynical to
             | think of the loss of customers as the only measure that
             | could or should matter.
             | 
             | If a product's user experience is measurably or
             | subjectively worse, but not enough to drive people away,
             | it's still a worse experience.
             | 
             | That may or may not matter to the owners of the company,
             | and of course putting too much effort into details that
             | don't affect the business should be avoided. It's also a
             | reasonable view that one _needn 't_ do better than is
             | necessary for the bottom line.
             | 
             | Some people like to take pride in building good products,
             | though, and care about the experiences of their users. It
             | sounds rather cynical to think that one _should_ refrain
             | from ever making anything better, or that it 's somehow
             | wrong to care about users' experience, if it isn't enough
             | to immediately affect the bottom line.
             | 
             | (Also, perceived quality could affect user opinions in the
             | long run and, when compounded with other things, could also
             | affect the bottom line even if the effects aren't
             | immediate. Trying to build products of high perceived
             | quality may be a reasonable strategy, and a part of that
             | might be to use good quality, possibly including
             | performance, as a heuristic. But that's a bit of a
             | different matter.)
        
           | [deleted]
        
         | leeoniya wrote:
         | > Could we have it run in 010ms vs 250ms?
         | 
         | if it runs once per hour, then it may be inconsequential; if it
         | runs every 30s, then it might be an extra 1hr of battery life
         | for your phone, but people will still keep using it and not
         | complain. is there a problem? maybe.
        
           | thesz wrote:
           | 30s is a 120 times per hour. Or, 30 sec of difference per
           | hour between 250ms and 0 ms (instanteneous).
           | 
           | To get a hour of difference my phone needs to have battery
           | life of 120 hours. For more reasonable 10 hours of battery
           | life I will get about 5 minutes saved.
           | 
           | I see why no one will complain about that difference.
        
             | leeoniya wrote:
             | you might be right, but there's more to power consumption
             | than CPU time. something that takes 250ms vs 10ms might
             | wake more cores and/or prevent them from sleeping, might
             | use high-perf cores instead of efficient cores, it might
             | read from storage instead of from cache, etc.
             | 
             | i've certainly seen a 10x improvement in one bottleneck
             | turn into a 20x-30x improvement holistically, due to
             | reduction in contention, back-pressure, etc; there is
             | almost always a cascading/multiplier effect, in my
             | experience.
        
         | _gabe_ wrote:
         | > Could we have it run in 010ms vs 250ms?
         | 
         | Modern games can render _100s of thousands_ of polygons, run a
         | physics simulation, run complex audio processing and mixing,
         | run several post processing effects, and provide consistent
         | multiplayer results in under 7ms (144FPS) on a VR headset (ever
         | played half life alyx?).
         | 
         | There's no excuse for why any algorithm should take more than
         | 100ms unless it's communicating over a crappy network, or
         | operating on obscene amounts of data (think 100s of GB of
         | data). No excuse.
        
           | bluquark wrote:
           | So as a specific example, would you say there's no excuse for
           | not being able decode a 1GB PNG image in less than 100ms? The
           | state of the art algorithms, in Rust and Wuff programming
           | languages, have reached around 500MB/second decode speed on a
           | desktop x86.
           | 
           | If I had specified a 1GB image with a PNG-like compression
           | ratio and allowed you define the data format along with the
           | algorithm, then the challenge would not be so difficult. But
           | the moment the requirement is an image format that's actually
           | widely used...
        
         | bobthechef wrote:
        
       | z3t4 wrote:
       | > Linux kills random processes by design
       | 
       | Linux will only kill processes if there are no swap left. So
       | always have swap. You can also configure what Linux should do
       | when there are no memory left.
        
       | capableweb wrote:
       | Previous threads, with lots of discussions:
       | 
       | - 317 points | Sept 18, 2018 | 96 comments |
       | https://news.ycombinator.com/item?id=18012334
       | 
       | - 934 points | Jan 1, 2020 | 498 comments |
       | https://news.ycombinator.com/item?id=21929709
        
       | amtamt wrote:
       | Read on another link... Voyager had 67kB RAM in it's computers
       | and has reached the end of solar system. We really need to
       | rethink system design and implementation.
        
       | narag wrote:
       | There's a couple of points in the article that I don't see
       | discussed here.
       | 
       | One is the comparison with games. So the article is about other
       | categories of software. Has someone thought of other kind of
       | "gamification"? I sometimes think that I'd love to see some fancy
       | gaming interfaces outside games.
       | 
       | The other is that, forget about solutions, frustration is a very
       | powerful force and it has consequences. Frustration for the users
       | and also frustration for programmers. This used to be a job
       | considered interesting and fulfilling.
        
       | thr0wawayf00 wrote:
       | > So it's our mission as engineers to show the world what's
       | possible with today's computers in terms of performance,
       | reliability, quality, usability. If we care, people will learn.
       | And there's nobody but us to show them that it's very much
       | possible. If only we care.
       | 
       | Software engineers by and large care and yet we can't even get
       | the businesses we work for to care, the stakeholders that
       | performance would matter to arguably the most. I think the
       | average person is even more apathetic about a topic like
       | optimizing app performance.
        
         | tsss wrote:
         | I have made very different experiences. The programmers don't
         | care either. They just want to pump out features, no
         | maintenance, no documentation, no long-term improvements.
        
           | ratww wrote:
           | I also share your experience. Never saw management or PO
           | complaining about developers taking time to optimise. I
           | actually never even saw an experienced developer taking an
           | inordinate time to optimise something. It's always
           | refactoring and rewriting that takes too much time (and often
           | causes performance regressions).
           | 
           | Developers however are quick to point that optimisation is
           | "not in the interest of the business", as can be seen in this
           | very topic, or that something is "good enough" since a lot of
           | people are using.
        
           | spaetzleesser wrote:
           | "The programmers don't care either. They just want to pump
           | out features, no maintenance, no documentation, no long-term
           | improvements."
           | 
           | That's how people are taught. In most companies nobody cares
           | about quality. getting stuff out quickly is where the money
           | is. Slow, deliberate work doesn't pay.
        
           | cs137 wrote:
           | That's not what the programmers want. It's how they're
           | incentivized. If you have to meet your "they're not deadlines
           | but, really, they are" sprint targets, then what can you do
           | but minimally complete the tickets assigned to you and hope
           | not to step on anyone's toes?
           | 
           | It doesn't help that good programmers get flushed out of the
           | industry due to conscience and age, only to be replaced with
           | cheap, shitty ones.
        
             | tsss wrote:
             | No, in my case that's really what they want. I think our
             | project management would totally give us the time to
             | improve something, if we can argue that it's needed. It's
             | really one or two developers who block everything that
             | isn't the absolute minimum possible amount of work or their
             | own pet idea.
        
               | mgkimsal wrote:
               | > I think our project management would totally give us
               | the time to improve something, if we can argue that it's
               | needed.
               | 
               | You shouldn't have to argue for it. It's something
               | "project management" should care about as a top-level
               | concern, scheduling time for it. Stability,
               | documentation, tests, performance, security - these are
               | all "features" just as much as "make a button dump a CSV
               | for a user".
        
               | tsss wrote:
               | I mean, they do to the extent that they can. We have a
               | story template that specifically mentions performance,
               | monitoring, security and documentation requirements. We
               | also have weekly meetings to discuss technical issues and
               | a dedicated backlog where devs are supposed to put purely
               | technical stories, but it is usually empty. When the
               | prevaling philosophy of the dev team (or its most vocal
               | members) is "'good enough' is good enough", then there's
               | not much the project management can do short of forcing a
               | minimum amount of maintenance tasks. Of course, project
               | management is also happy if they have more capacity for
               | feature stories, so the impulse has to come from the dev
               | team.
        
               | tacitusarc wrote:
               | Often (good) PMs assume that those tasked with making
               | technical decisions implicitly understand all the listed
               | concerns are, in fact, requirements. They are then
               | surprised when the engineers explain they didn't
               | prioritize those things when doing the work.
        
       | EdwardDiego wrote:
       | On the plus sides:
       | 
       | * I haven't had to specify IRQ or DMA to listen to music in a
       | long time.
       | 
       | * I plug stuff into my USB / thunderbolt ports, and _it just
       | works_, even though I'm running Linux
       | 
       | * I can play games on Linux, real actual commercial ones, not
       | just ones involving Tux the penguin
       | 
       | * I can send my Mum videos and she can watch them without
       | worrying about codecs, without me having to explain what a codec
       | is.
       | 
       | Software is awesome these days. Could we do better? Always, was
       | it better in the "good ol days"? Hell no.
        
       | trinovantes wrote:
       | Be careful making your software too quick or else your client
       | might think something is broken
        
       | otter-rock wrote:
       | I used to feel this frustration until I accepted that the
       | economics of software usually lead to different requirements.
       | People are making rational choices, so no amount of attitude or
       | culture change will make a significant difference. Different
       | requirements can be found in different industries, or different
       | fields all together.
        
       | brunojppb wrote:
       | I did the Portuguese translation of this article for Nikita back
       | then and it's interesting to read this article again in 2022.
       | While things are still bloated, I am very hopeful for the future
       | after seeing many cross-platform initiatives written in Go and
       | Rust. I hope to read this article again in 2026 and see faster,
       | less resource-consuming apps running on our machines.
        
         | jackosdev wrote:
         | Yeah there has been some great efficient software coming from
         | the Rust and Go communities, ripgrep, nushell, lazygit, helix
         | to name a few I use everyday
        
       | RivieraKid wrote:
       | An observation I had while working in IT is that programming
       | involves a lot of detail which is hard or impossible to notice
       | from the outside (project managers, testers, users). And the
       | average programmer is quite bad and doesn't have a perfectionist
       | mindset.
       | 
       | For example, let's say someone writes code which reads and parses
       | 1 MB JSON file on every keystroke. From the outside, this is
       | usually undetectable. Whenever someone makes something 10% slower
       | or larger, adds a non-obvious error or implements a feature with
       | 10x more complexity than possible, it's often barely
       | distinguishable from a much higher-quality implementation.
        
       | azanar wrote:
       | We could perhaps get better software, but at what cost?
       | 
       | One of the nice things about engineering disciplines is that
       | costs can be reasonably forecast. There are spectacular
       | counterexamples (e.g. Big Dig), but bear in mind those projects
       | were much more than "just" engineering projects.
       | 
       | Software costs seem hard to forecast. Software integrates with
       | other software. Software is created via a whole pantheon of
       | algorithms. The "better" algorithm is often context dependent.
       | That context depends on what else gets integrated. Did I mention
       | we probably won't know at the design phase how things will be
       | integrated?
       | 
       | Other engineering disciplines integrate with things that are
       | well-known: the ground, water flows, the atmosphere. These things
       | don't change. This is nice.
       | 
       | This article makes it sound like "better" is just a matter of
       | spending more. My read is different: spend more and _be correct_.
       | Correctness _isn 't_ just something we know but aren't allowed to
       | implement. In many cases, we don't _know_ what correct is. We
       | have to _find_ correct via exploration and experimentation. Even
       | when we do, we might severely misjudge the effort required to get
       | there.
       | 
       | This complexity isn't just accidental. The world is a complex
       | place. Our human minds act on a small portion of that complexity,
       | based on all sorts of heuristics we aren't even conscious of.
       | They work most of the time. The rest of the time? We're compelled
       | to shoehorn things into our heuristics. This ends increasingly
       | poorly the more complex the underlying mechanism is.
       | 
       | This is a hard argument to make to someone who will not accept
       | that they are not correct. Correct in their criticism. Correct in
       | their diagnosis. Correct in the the behaviors that lead to our
       | condition. Correct in asserting that avoiding those behaviors
       | would result in no unanticipated consequences. Resentful about it
       | because they were _correct_ , and we didn't accept that.
        
       | thewebcount wrote:
       | I don't disagree with the sentiment of the article. But it really
       | does seem to be dependent on the type of work you're doing. In
       | 2000, I started writing plugins for Final Cut Pro. You could
       | write "real time" plugins for it! That meant you were working in
       | YCbCr 4:2:2 at 320x240 and 30 frames per second (so quarter-sized
       | frame, with 2/3rds the data that an RGB frame would carry and
       | half as often). 22 years later, I'm still writing such plugins,
       | but on the top-end systems you get multiple streams of 8K
       | uncompressed RGB video at 60fps and you can play back in real
       | time. Some things really have gotten significantly faster. But
       | yeah, using a web browser to do normal tasks like display emails
       | is insanity and very very wasteful.
        
       | cageface wrote:
       | Analogies comparing software to most other forms of engineering
       | are not usually very helpful. The considerations and constraints
       | that inform automobile design are totally different than those of
       | a typical mobile app or CRUD web shop.
       | 
       | We know how to build software that's efficient and reliable. It's
       | a slow and expensive process.
       | 
       | If anything discourages me about software engineering it's that
       | so many of us don't seem to be able understand that the nature of
       | our discipline is different.
        
       | cs137 wrote:
       | A big part of the problem is that the web is full of parasitic
       | mechanics.
       | 
       | Javascript is shit, both the language itself and most of the code
       | written in it, but the person who suffers from shitty Javascript
       | is... you. It runs on your computer--that's the parasitic part--
       | and not that of the entity serving it. So they don't care. Until
       | ad dollars stop coming in, it doesn't matter.
       | 
       | Businesses generally think they can scale up with shitty code and
       | inexperienced engineers and "do quality" later. Can they? Well,
       | enough of them can that billion-dollar companies exist. I'm very
       | skeptical that capitalism's signals indicate anything about true
       | value (moral, creative, or otherwise) but the fact is that the
       | "start cheap 'n' shitty" approach works, and it has worked for a
       | long time. (Low quality software has been an issue for my entire
       | adult life, and by HN standards I'm an elder dragon legend.) So
       | long as it keeps working, it won't die. Markets don't punish what
       | is bad; markets punish what is unfit by the definition set by the
       | market.
       | 
       | What's funny to me today is that people tend to underestimate how
       | fast computers are--or can be. Adding a million numbers? You can
       | do that in a fraction of a second. People are so used to the
       | crapware that capitalism produces that we've accepted these
       | ridiculous delays, not for any good reason.
        
       | phkahler wrote:
       | Ironic that I was offered a simplified version of the article to
       | read...
        
       | dasil003 wrote:
       | I get the frustration, but I think this is just the cost of the
       | incredible volume of software that we have. As software engineers
       | we pride ourselves on our systemic thinking, so it's tempting to
       | look at the situation and say "we can and should do better". But
       | it's an illusion to think of software ecosystems as being
       | designed. The reality is individuals, teams and even huge
       | companies are constrained by ecosystems which are too big to
       | really control and optimize in a systemic fashion.
       | 
       | Useful software today beats perfect software tomorrow. That's why
       | software is not well-optimized: because less optimized software
       | beat it to market at multiple layers of the stack. That's why web
       | apps slowly killed native apps: because shipping binaries to
       | multiple platforms is way harder than loading a URL in a browser
       | (or thin wrapper thereof).
       | 
       | One thing I've learned the hard way in life is to focus on what
       | one can control. We may not like the tradeoffs others have made
       | and the systemic outcomes they led to, but we can't control them.
       | A better tactic is to pick one very specific area you think you
       | can make a dent and focus on that.
        
         | bmitc wrote:
         | > but I think this is just the cost of the incredible volume of
         | software that we have
         | 
         | This may obviously be a personal stance, but I will never
         | accept the excuse of scale for anything. If you can't do it at
         | scale, then you can't do it. Quit scaling and making everything
         | worse. This applies to software, population, consumerism,
         | consumption, etc.
        
         | _gabe_ wrote:
         | > but I think this is just the cost of the incredible volume of
         | software that we have.
         | 
         | But it's not. The author gives specific modern examples of
         | individual people absolutely destroying our concepts of how
         | fast an app should be:
         | 
         | >> Work Martin Thompson has being doing (LMAX Disruptor, SBE,
         | Aeron) is impressive, refreshingly simple and efficient. Xi
         | editor by Raph Levien seems to be built with the right
         | principles in mind. Jonathan Blow has a language he alone
         | develops for his game that can compile 500k lines per second on
         | his laptop. That's cold compile, no intermediate caching, no
         | incremental builds.
         | 
         | Jonathan Blow's language compiles 500K lines of code in 1
         | second! It takes me 20 minutes to do a full build of our
         | monorepo, which is nowhere near 500K lines of code. And it's
         | not even compiling and optimizing and linking, it's just
         | transpiling typescript to javascript. It's ridiculous. It's
         | ridiculous to think we can't do better.
         | 
         | Another case in point, modern games can render _millions_ of
         | polygons now (with UE5) at 60fps. And a modern web browser can
         | hardly render some of these _static_ web pages on my PC with an
         | RTX 2080 and 48GB of RAM at 60FPS. Something is seriously wrong
         | with our ideas of  "performant code" if we think this is
         | acceptable.
        
           | kvark wrote:
           | I worked on both games and browsers, and I've seen this
           | comparison being made before.
           | 
           | Browsers are way more complex than what meets the eye. There
           | are requirements for high quality text, page consistency,
           | lots of different content types, fine 2D graphics, network
           | ops, and multiply low power consumption requirements on top.
           | WebRender is somewhat a game engine.
           | 
           | Real games are happy to cut all these corners, for the sake
           | of bring impressive, and they mostly rely on hardware-
           | accelerated functions.
        
         | tepitoperrito wrote:
         | I dunno, I'm gonna try writing a pattern language to avoid
         | getting tied up with one specific area. Friends can fill in the
         | blanks. https://en.m.wikipedia.org/wiki/A_Pattern_Language
        
         | christophilus wrote:
         | > That's why web apps slowly killed native apps
         | 
         | I prefer web apps over native for most things. I only trust a
         | handful of native applications on my computer (neovim,
         | Postgres, compiler tooling, stock Linux utilities, etc)
         | 
         | Corporate applications are highly suspect to me. I'm not sure
         | why.
         | 
         | I much prefer running things in a sandbox like the browser. I
         | also find that my resource usage is lower when I run Zoom,
         | Slack, Reddit, etc in a browser vs their resource-hungry native
         | applications.
        
         | routerl wrote:
         | > A better tactic is to pick one very specific area you think
         | you can make a dent and focus on that.
         | 
         | Amen. Best practices taught me "don't break extra windows, and
         | repair broken ones as you find them", but I'm finally at a
         | point in my career where I can say, with confidence, that some
         | broken windows aren't worth fixing; you might have enough
         | expertise to _know_ that it should be fixed, while
         | simultaneously lacking the expertise to do so in a cost-
         | effective way.
         | 
         | Case in point: in the iOS app I'm currently working on for a
         | client, my team discovered a bug that was, very clearly, an
         | interest payment on the technical debt the client has been
         | accruing. The "correct" bug fix would entail rewriting a lot of
         | existing functionality (i.e. paying down a big chunk of the
         | principal, on the technical debt). This was not cost effective
         | for us, since we were being paid to fix the bug as written. So
         | we fixed the bug, while introducing functionality that could,
         | in the future, be used to pay down the tech debt principal,
         | should the client desire to do so.
         | 
         | Spoilers: the client will never desire to do so, and therefore
         | we've actually just added cruft to the codebase. But this
         | conclusion is not allowed, in the client-provider relationship;
         | the bug is fixed, therefore contract conditions have been met,
         | therefore the work is done.
         | 
         | The cause of bad software is, simply, that the incentive
         | structures and scheduling required for making good software
         | don't usually exist.
        
           | mikepurvis wrote:
           | > the bug is fixed, therefore contract conditions have been
           | met, therefore the work is done
           | 
           | Agile-type workflows also push toward this kind of
           | prioritization-- focus on story points, requested features,
           | value delivered to the "customer", etc etc. It's obviously
           | important, especially if the task at hand is to rein in a
           | team consumed with grand rewrites and architecture astronaut
           | stuff.
           | 
           | But at a certain point, the pendulum has swung too far the
           | other way, and you do need competent technical oversight--
           | not just someone who assigns you a sprint or two to "pay down
           | debt", but who engages meaningfully in understanding what the
           | debt is, how it came about, and what the ongoing cost is of
           | carrying it; and who can actually set milestones on the
           | cleanup effort and communicate to the larger organization how
           | it was valuable work to have done.
        
             | andrekandre wrote:
             | > But at a certain point, the pendulum has swung too far
             | the other way, and you do need competent technical
             | oversight-- not just someone who assigns you a sprint or
             | two to "pay down debt"
             | 
             | yep, if you are truly agile, you will be continuously
             | improving the whole system you are working on otherwise it
             | gets harder and slower to "deliver stories" to your
             | customers... its a balance to be sure.
        
         | walleeee wrote:
         | > Useful software today beats perfect software tomorrow.
         | 
         | this isn't a natural law, it's a product of social incentives
         | and amenable (if perhaps difficult) to change
         | 
         | > A better tactic is to pick one very specific area you think
         | you can make a dent and focus on that.
         | 
         | good advice!
        
       ___________________________________________________________________
       (page generated 2022-06-19 23:00 UTC)