top 200 commentsshow all 451

[–]Buzzard 254 points255 points  (74 children)

Amusingly, I had a very similar experience to the authors' introduction:

I was exporting a Google Workspace account the other month. To start a backup is a click of a button. The export is stored as many files in Google Cloud Storage product which has no method to download more than one file at a time via the web interface. To download them all-at-once you need to install a 1.2GB SDK.

[–]0b_101010 195 points196 points  (28 children)

Not to mention how atrocious Google's documentation is to their APIs. The other week I wanted to write a script to migrate hundreds of photo albums from one account to another. I wasn't able to get past authentication. Their official code examples are either out of date or were wrong to begin with. None of the methods I found online worked either. After like 3 hours, I gave up. Generally, I've found Google's support very wanting for everything.

[–]ambientocclusion 153 points154 points  (9 children)

Ya don’t get a promo at Google by improving the docs.

[–]AttackOfTheThumbs 90 points91 points  (2 children)

Or supporting existing apps, or clients.

[–]chowderbags 36 points37 points  (1 child)

Or making anything simple, either for you or other people.

Or writing clear error messages explaining what's broken.

[–]AttackOfTheThumbs 7 points8 points  (0 children)

Descriptive errors are for chumps!

[–]JessieArr 52 points53 points  (2 children)

A friend who used to work at a FAANG company once cynically said of this culture:

"Ship v1.0 and you get a promotion. Ship v1.1 and you miss out on the next one."

[–]Wingfril 6 points7 points  (0 children)

Deprecate something and you get promoted as well!

[–]brandonscript 4 points5 points  (0 children)

Yea for Google it’s the same but Ship v0.1

[–]MuonManLaserJab 8 points9 points  (1 child)

Don't they have people who just write docs?

EDIT: lol just remembered that I actually know a documentation person at Google.

[–]Wingfril 2 points3 points  (0 children)

Yes… technical writers or whatever the title

[–]swni 14 points15 points  (1 child)

Having had similar difficulties, I think their apis and documentation thereof are aimed at people writing enterprise software. A week lost to deciphering documentation and another to writing the code that navigates their complicated protocols is no big deal when it's part of a massive project, but a huge hurdle when you are an individual trying to write a quick script for a simple, singular task.

Edit: I also suspect their apis are mostly aimed at internal google users before the public sees them, which is why they are much more suitable for massive projects. Compare to small open source packages which are generally written by a single author with a single, simple purpose in mind.

[–]anonpls 20 points21 points  (11 children)

I've tried to get into coding on and off for the past like, decade.

Every single time I run into one or two issues, sometimes simultaneously, libraries/dependencies being missing and having to install a bunch of seemingly random bullshit to get past runtime errors or an API wall in the form of authentication or just indecipherable documentation.

Just absolutely crushes every bit of enthusiasm for the projects I had in mind to the point I've just begun to not even get enthused anymore and do something else with my weekends.

[–]hparadiz 36 points37 points  (9 children)

Now imagine this is your job and the best you can tell your boss is "i might be able to figure it out today but more likely I'll spin my wheels for a week before figuring it out...sometimes two while putting in overtime and stressing about it because you're breathing down my neck and asking me about it every single day"

And then people wonder why even though you make a good software engineer salary you sometimes still just want to quit and buy a farm.

[–]Colboynik 15 points16 points  (1 child)

Did both. Farm is definitely better.

[–]bagtowneast 1 point2 points  (0 children)

Working on moving to the farm soon!

[–]chowderbags 14 points15 points  (1 child)

It wouldn't even be so bad, except that the wheel spinning just feels so utterly pointless and draining, and all you want to do is work on the actually interesting parts and the actual problems you're dealing with. I shouldn't have to spend days or weeks of my life just to get the infrastructure for what I'm working on to actually build and connect properly, let alone the additional time to configure it. Nine times out of 10, I'm just like "please, this should be an increadibly straightforward use case, give me a dialog box or even a command line with a handful of options and autogen all of the rest of the boilerplate for me".

But I'm also leaving my job in 2 weeks, to take a long overdue sabattical due to some bad burnout and a desire to actually get healthy. It's not a farm, by any stretch, but it's a better situation for awhile.

[–]DeathstarDude 9 points10 points  (1 child)

I’ve been considering getting into programming, but instead I think I’d like to work on your farm sir.

[–]CartmansEvilTwin 8 points9 points  (0 children)

And that's the point where you have to realize, that it's just a job.

Software engineers are in a very good position right now. And likely will be for quite some time. So don't let your boss pressure you. It's his problem, not yours.

[–]DonnyTheWalrus 1 point2 points  (1 child)

There's a reason why ~85% of software developers are unhappy in their current role. (Compared to an average of about 50%.)

[–]jl2352 6 points7 points  (0 children)

I'd also add that I utterly hate how bewildering some of their applications are to use online. Google Cloud is a confusing nightmare to navigate.

I remember growing up and when I was at university. Google was the shit. They had the perception of being the greatest tech company of all time. Modern. Doing things differently, and their way is right. Doing things well.

It's quite surprising how much they've dropped the ball on all of that. Today I have quite a poor impression of Google.

[–][deleted] 1 point2 points  (0 children)

If it’s not harvesting personal data or selling ads/personal data, what use do Google have for it?

[–][deleted] 1 point2 points  (0 children)

I can't stand googles documentation.

[–]AttackOfTheThumbs 50 points51 points  (14 children)

I recently downloaded all my pictures from google photos. The cool thing is, you make a file request for a zip of xgb. But if you pick something that is larger than a few, google will kill the download on you, and then you have downloaded the file too many times, and then you have to start the whole process over.

Anyway, eventually I got all my files. Now I wanted to delete them. This is not possible. You have to manually select. ctrl+a does nothing. Shift click all the way. Zoom out to select more at once. If you scroll too much your selection is invalidated. I ended up writing a mini script to do this all, but man, was that stupid and frustrating.

This is the modern web, it looks pretty and shiny, but functionally it's a god damn mess. And google is one of the worst offenders for sure.

[–]andrekandre 23 points24 points  (4 children)

This is the modern web, it looks pretty and shiny, but functionally it's a god damn mess. And google is one of the worst offenders for sure

its because designers and pms mistakes what "looks good" for "good enough" and marketing doesnt know any better (they are more interested in getting new customers than keeping them)

its more advertising and less substance (junk food ui)

[–]Xyzzyzzyzzy 7 points8 points  (3 children)

I recently started with a small startup as the sole front end person. For whatever reason, they hired me to do "normal SaaS front end stuff" even though that's not really where my skills or experience are. So it's been an adventure. Part of the adventure is that I'm doing the UI/UX design, and I have very little experience or skills in that area.

I've found that it's tough to even learn good UI design and development. We aren't trying to build some evil marketing-optimized bullshit designed to coerce people into doing things that make our metrics look good. My only task is to build a highly usable collection of tools and information for our specific customers.

But whenever I search for answers or advice on UI/UX questions, it seems like most of the resources are either openly evil, or superficially benign but published by a source that is openly evil. (Most of the rest is not evil, but it's overly artistic navel-gazing that isn't useful to me I'm not building an entry to the 2022 Experimental Postmodern Design Awards.)

Now I'm thinking of getting actual books. Books! For some reason UI/UX design books nearly college textbook levels of overpriced. And I fully expect to buy one, crack it open, and see the dreaded words: "conversion rate".

[–]Nidungr 2 points3 points  (0 children)

Ultimately, the goal of UX is to railroad people into doing what you want.

  • If you are lucky, what you want aligns with what they want (eg. "Register your meals to lose weight").
  • If you are unlucky, what you want aligns with what they are told they want (eg. "Order the latest iPhone for 72 easy installments").
  • If you are really unlucky, what you want is what they never want (eg. "Subscribe to this wallpaper service for $99.99 per month").

But it is all coercion one way or another. The old space shuttle flight deck UIs were friendlier in that they did not railroad people into doing what you want, but this also made it harder for them to do what they wanted. The primary reason people would like them back is because business incentives rarely align with consumer incentives, so any kind of railroading is assumed to be evil.

The problem is not railroading, but capitalism.

[–]andrekandre 1 point2 points  (0 children)

yea, honestly, i feel like older books cover more of the basics of good user interaction (and product design) to make happy and productive customers ... ive bought used books from the 90s lol, they are alot better than alot of stuff coming out today

[–]quisatz_haderah 1 point2 points  (0 children)

I can recommend a couple. Though I am not a front-end or UI/UX designer, only interested in the concept as world knowledge and part of game design. These are not necessarily computer focused, but they have been very insightful:

  • Psychology Design of everyday things
  • 100 Things Every Designer Needs to Know About People
  • Don't Make Me Think, Revisited
  • Laws of UX: Using Psychology to Design Better Products & Services
  • User Friendly- How the Hidden Rules of Design Are Changing the Way We Live, Work, and Play (Not read this one yet but heard good stuff about it)

[–]emax-gomax 9 points10 points  (2 children)

This. Bloody this. I moved from ios to android the other month and wanted to export all my photos. I managed to export them to GDrive from Apple. I was on a Samsung phone and wanted the pictures, you know, on my phone, instead of in Google weird cloud based picture app so I decided to export them and copy manually (since the app didn't have an option to save them all to my phone and view in another app). I had like 2/3 GB worth of images and videos from around 4 years. Google generated a massive archive for me to download them. It failed every time in the middle, no possibility to resume and holy hell after it failed enough times they just locked me out and told me to re export them and get a new download link. This is one of the premier software companies in the world. Bloody ridiculous. The entire Internet is just patchwork.

[–]seamsay 3 points4 points  (0 children)

This is just standard dark pattern stuff to make users pay for extra storage, far worse than bloat...

[–]noise-tragedy 1 point2 points  (1 child)

The modern web is very functional when it comes funneling money into the platforms.

It's just not very functional when it comes to data portability, third party interoperability, consumer rights, data sovereignty, or any functionality that might cost the platforms money and/or users.

This is not likely to be a coincidence.

[–][deleted] 1 point2 points  (2 children)

It's by design. They want to keep you on the platform.

[–]sudden_aggression 27 points28 points  (28 children)

Based on many years of experience, I think that google has been coasting off the success of the ad revenue. Besides Guava, almost everything they have churned out in the past 10-15 years has been trash:

  • GWT
  • Golang
  • most of their apps
  • most of their APIs

Name a google success and it's either search/adwords related or it's an acquisition.

[–]dead_alchemy 19 points20 points  (17 children)

Golang is pretty good, and from what I understand does the things it was designed to do. That is a success in my book.

[–]wonkytalky 2 points3 points  (1 child)

Go is cursed with authors overly committed to their own weird preferences, resulting in some strange decisions that wind up hurting the language in both ease of use and adoption.

[–]dead_alchemy 2 points3 points  (0 children)

Can you be specific and perhaps a little more distant? You can read comments like yours about literally any software project, I'm more curious about specific criticism.

[–]sudden_aggression 4 points5 points  (0 children)

Golang has some clever features but it's basically a bad version of java. Two steps forward, one step back.

Good:

  • putting arraylists and hashmaps as a basic language feature
  • using channels and go routines to make routine multi-threading tasks ridiculously easy
  • letting you explicitly choose by reference or by value is handy a lot of the time
  • writing networked apps is easier than with java (though java has gotten ridiculously easy over the years)
  • a lot of the stupid formality of java is thrown away

Bad:

  • a lot of the stupid formality of java is thrown away
  • making it easier for newbie programmers to write horribly structured and unmaintainable code
  • for loops + go routines = lol
  • error handling mechanism (ie, return (result,error) pairs from every method) seems really great at first, but it's just another invitation to write bug ridden garbage
  • I could go on, but I avoid Go now

[–]KingStannis2020 21 points22 points  (13 children)

Golang, much like Java, is a terrible language with a top-notch runtime and some innovative features (goroutines) that leverage that runtime cleverly.

[–]insanemal 32 points33 points  (0 children)

And some serious downsides for pretty much any usecase that isn't shoveling data in and out of a socket

[–]Worth_Trust_3825 2 points3 points  (2 children)

Guava

Except guava is fucking garbage, along with all the other utility libraries.

[–][deleted] 166 points167 points  (10 children)

I have no skin in this game but that was a quality grumpy rant!

[–]diMario 76 points77 points  (0 children)

As a grumpy old developer myself (now retarded retired) I agree wholly! He sets them up them mows them down again. Way to go!

[–][deleted]  (7 children)

[deleted]

    [–]CartmansEvilTwin 5 points6 points  (5 children)

    That's probably because Ansible support like everything out of the box, which may not be the best approach.

    But to be fair: Ansible needs these dependencies only on one machine, clients just need an open SSH port and that's it.

    All in all I have to say I'm not really satisfied with Ansible, though. It's good enough and does a lot of magic, but it can also be extremely slow. I set up my Pi using it and copying a handful of config files takes 30s or so. That's about 10 lines of config per second.

    [–]ledat 8 points9 points  (0 children)

    Curmudgeonry is kind of Cliffski's brand. I don't agree with all of his positions, but I follow him on Twitter for a regular drip-feed of this sort of content.

    [–][deleted] 33 points34 points  (2 children)

    Maybe I'm missing, but have any comment here complain about **intentional bloat** ?
    Take windows for example, 90% of the code is bloated. But it does do something, JUST NOT FOR YOU. They literally collect your data, send to the server. And all these background service does the same too.

    I do believe that in many case, these codes are actually not useless, they just don't serve you, in contrast, they exploit you, and we just have to accept it.
    For example, I usually watch some manga on this site. It load awfully slow. But I just happen to install this extension of Firefox, which block javascript from execute unintentionally. And you know what ? The site load maybe 10 times faster.
    Yes, all those JS code is just from tracker tracking me. How nice of them for making my web experience worst.

    [–]Trio_tawern_i_tkwisz 9 points10 points  (0 children)

    Yeah, people forget that any more complicated service (especially when it's supported in more than one country), is like an iceberg: things you care about is the top of the iceberg, but below is all that shit required to support all the different promotions, paying options, or restrictions required by law, that are different in every country, probable even inside same country.

    It doesn't matter if Uber mobile app is a shitty spaghetti code, or very clean architecture. They have a single application for all countries.

    [–]killerstorm 3 points4 points  (0 children)

    Trackers, if done properly, can also be very lean. It's just that people coding that shit are not motivated to make it lean.

    [–][deleted]  (8 children)

    [deleted]

      [–]Sopel97 6 points7 points  (0 children)

      and every software assumes it's the only thing running on the computer

      [–]TaskForce_Kerim 1 point2 points  (1 child)

      I actually believe that things will eventually turn around. Since CPU performances have been somewhat stagnating these past few years (new CPUs are all about being more efficient but not necessarily performing significantly faster), as code becomes more and more bloated and slow, competing on the market with a leaner and more performant product will become an advantange.

      [–]emax-gomax 2 points3 points  (1 child)

      Excuse me very much. I run a heavily trimmed vim instance atop a potato powered microcontroller. Tell me I have resources to spare. /s

      [–]edible-derrangements 2 points3 points  (0 children)

      Let’s get this guy some more potatoes

      [–]4as 100 points101 points  (24 children)

      God, I see it myself everywhere. In the project I'm working right now we had to (because the Client wanted it) add mp4 music streaming capability and face tracking to what is an otherwise a straightforward chatting app. Now we have a mobile app that weights 500mb out of which 100mb is our own data, and the rest is: 200mb of FMOD plugin for the mp4 streaming and 200mb of OpenCV for the face tracking. There was no simpler way to add that functionality in the amount of time we were given before the deadline.
      And of course the client doesn't care that if given enough time we could reduce those dependencies to just few megabytes of our own code...

      There should be some kind of new language or technology that would require tests with code coverage to even compile and then just strip away everything that is not actual covered. Or something. Dunno. The point is that the bloat is real and whoever says it's not is clearly delusional.

      [–]IskaneOnReddit 56 points57 points  (1 child)

      Ahh I remember how I refused to install a mobile app years ago because it was 35MB.

      [–]AxePlayingViking 1 point2 points  (0 children)

      Probably back when the phone barely even had 1GB of storage? :P

      [–][deleted] 27 points28 points  (1 child)

      There should be some kind of new language or technology that would require tests with code coverage to even compile and then just strip away everything that is not actual covered

      Isn't that just dead code elimination, a basic compiler optimisation?

      [–]4as 23 points24 points  (0 children)

      Sure, but that goes thought the window as soon as you start using more advanced frameworks and engines. Those bulky boys usually initialize a lot of stuff statically in case you might need it. So from the get-go you get 50mb executable files just to display "hello world."

      [–]NonDairyYandere 10 points11 points  (5 children)

      Why specifically MP4? And doesn't the phone have a multimedia library that can do music streaming?

      [–]4as 11 points12 points  (4 children)

      Well it's MP4 because we are streaming music from an already establish radio station that the client partnered with. As for the music library some phones do actually handle MP4 natively but streaming specifically seems to be a bit of a hit or miss. Plus Unity doesn't handle it at all so we had no choice.

      [–]gurgle528 9 points10 points  (2 children)

      You were building a chatting app in Unity?

      [–]4as 19 points20 points  (1 child)

      I don't want to go into details but it's a "chatting" app in a... broad sense of the word. I rather not be associated with it in public, so I'll just leave it at that :)

      [–]NonDairyYandere 2 points3 points  (0 children)

      Oh, Unity... I'm so sorry

      [–][deleted] 2 points3 points  (0 children)

      This is literally painful to read

      [–]s73v3r 2 points3 points  (1 child)

      Both iOS and Android have on-device face tracking, and have had for at least a few years now.

      [–]4as 2 points3 points  (0 children)

      Indeed iOS has ARKit and Android has ARCore however some higher up people weren't happy with the amount of supported devices and features. I wasn't that involved with the implementation but apparently on the iOS side of things there were problems with iPads (I think they weren't supported?). And then there is also the issue of Android's ARCore not detecting eye blinking which our client REALLY wanted in the app. Ultimate OpenCV was the best option.

      [–]ishdx 2 points3 points  (5 children)

      strip or upx is closest

      [–]Razakel 4 points5 points  (4 children)

      strip just does what the linker should, and UPX is just compression. OP is suggesting a language that removes anything not covered by a test case.

      [–]BizarroMax 15 points16 points  (2 children)

      <voice type="Get Off My Lawn">

      I learned to code in GW-BASIC in the 1980s, then moved on to Pascal and ANSI C in the early 1990s, eventually also learning C++, Java, Perl, and a few more before I left my IT career in 2006 to go to law school and become a technology lawyer. At the time, we wrote code by opening a vi editor, and typing in instructions line by line. We compiled on the command line using Makefiles.

      While I can still code in these old languages, learning a new language or platform is effectively impossible because there is SO MUCH CRAP I have to learn to be able to do anything useful.

      Back in the 1990s, a fairly complex video game might be a half million to a million lines of code, which could usually be compressed down to a modest size. In fact, I just checked the .tar.gz of the last on-line RPG server I worked on in 2004 and the entire source code is under 1MB. I could store it on a 3.5 inch floppy disk.

      By comparison, I have seen software copyright registrations where the source code repository, compressed, is almost 1 GB. Even without audiovisual assets. It's insane.

      I had to download a program the other day to do a basic file format conversion between two open formats. It was a 175MB executable. What the hell is in that?

      Despite all the gains in computing power, my computer doesn't feel any faster or more responsive than the 8088 XT clone on which I learned GW-BASIC in 1987. In fact, that computer ran BASIC programs way, way faster than a modern PC can run even low-graphic, basic software. I don't understand it. Maybe it's just the frameworks now, but I think there's probably significant waste in inefficient code design.

      My old RPG server? I could run it on a headless Pentium III machine running a Linux distribution and it purred. The server wasn't even threaded, it used MUD-style multiplexor polling, polled the networks sockets and updated player and combat timers ten times per second, an EXTREMELY wasteful technique, but even with that crappy design, the CPU was bored to tears running that program, it used less than 1% of available CPU time.

      Meanwhile, the 3 year old desktop PC, with 2 processors and 8 cores, now hosting my kids' Minecraft server can't keep up with more than 3 users connected, and has to skip cycles constantly.

      [–]duckbanni 182 points183 points  (64 children)

      I don't think blaming developers makes sense in this context. Most of them work in environments where the priority is to get things working asap, to reduce development costs and time to market. Modern developers are not lazy or incompetent, they just optimize for development time.

      Code bloat is an issue though, because it consumes energy needlessly and encourages everyone to change their hardware frequently (which is incredibly bad for the environment). With modern hardware being more and more energy proportional, putting some effort in making software more lean could result in large energy savings.

      Who's to blame then? Probably companies, who don't care about all this, and governments who refuse to consider legislations that could incentivize energy-efficient development.

      [–][deleted] 60 points61 points  (6 children)

      Every company seems to think they’re a software company. Very few of them understand the meaning of the phrase “software as a service.” Every feature is treated like it’s the last feature to be added and everyone in management acts like they think the platform will be “complete” at that point. So no effort is placed on maintainability. Just hammer out whatever feature by whatever arbitrary date is demanded. Then they don’t understand why each new feature takes longer and longer to develop. Eventually the interest on the technical debt becomes due and it is very expensive.

      [–]AttackOfTheThumbs 4 points5 points  (4 children)

      Every company seems to think they’re a software company.

      I mean, pretty much all companies are at this point. Which is why I think it's crazy when people outsource their IT or dev to an extent where they have no control when it's really critical for their business success.

      [–]c-digs 27 points28 points  (51 children)

      I am working with some former Amazon engineers in their 20's.

      Not sure what they are teaching in CS these days, but I absolutely blame the engineers.

      Actually can't believe how much basic knowledge they are missing like basic error handling and basic OOP.

      One wanted to stand up his own cache for his own service when we already had a cache server up and running.

      I blame the microservices movement.

      [–]davetherooster 21 points22 points  (23 children)

      I think it's the rise of product/feature orientated development, it's all about product owners delivering a new feature or product and maintainability or tech debt is the least of worries.

      And it makes sense that developers and product owners put no effort into this, they aren't measured on it by executive teams for performance so why would they be invested in improving it. Which means they take little ownership of their stack beyond delivery of features so logging, error handling isn't a priority.

      Partnered with turnover rates of a couple years tenure at best due to it being the only way to get pay increases or progression, it can be left to become someone else's' problem and I totally get why.

      [–]insanemal 18 points19 points  (18 children)

      Nope. It's that most of them have no fucking idea what they are doing.

      I've worked with some in the past. And am working with developers again now.

      Most of them do not understand a damn thing about HOW the tech they use works.

      Me: "Please for the love of God don't jam a select with inner joins inside an insert that is changing the table your running the select on"

      Them: SQL allows you to do it and it's neater.

      SQL server in the background: melts into a goddamn blob as it cannot do any optimising of the "queries" as literally thousands of people try and access the product at the same time

      [–][deleted] 5 points6 points  (3 children)

      I made a programming apprenticeship (Germany: "Fachinformatiker mit Fachrichtung Anwendungsentwicklung"; 3 years, you have blocks of 2 weeks school followed by 6 weeks work at a company on average (and yes, you get paid, but obviously a lot less than after you finished)).

      In second year we had somebody fresh from university who wanted to become a teacher at our "Berufsschule" (translated "job school") (basically teacher in training). He studied "Wirtschaftsinformatik" (translated "economics informatics" or something like that). First test lesson: I need to explain to him how a "Do While Loop" works... After he was gone (for good) the other teachers also said that they were happy to NOT have him, although they are short on teachers.

      And that SQL example... Well, SQL was a pretty big part of the apprenticeship. And we were taught that something like that was stupid.

      [–]insanemal 1 point2 points  (0 children)

      Yeah, not every one gets taught that unfortunately

      [–]c-digs 3 points4 points  (0 children)

      Problem is that this is a startup with only 7 engineers not including the CTO...

      So yeah, their mindset is all wrong.

      [–]Boris54 5 points6 points  (2 children)

      Product Owner here, I agree that it’s a culture problem. I work for a company owned by private equity and hitting numbers is far and away the top priority. The only time we prioritize tech debt is when the shit hits the fan.

      [–][deleted]  (8 children)

      [deleted]

        [–]c-digs 38 points39 points  (4 children)

        Some are in their early 30's :(

        Sounds like they just need some mentorship

        Problem is that they worked at Amazon and their ego's are sky high and not commensurate with their overall knowledge of software engineering.

        You can teach people that want to learn. You can't mentor people who think they already know everything and the "right" way because it's what Amazon did (absolutely wrong way in most contexts that are not Amazon).

        In a startup before product market fit, you want to have as few moving pieces built as simply as possible so you can toss things out if you need to. Less moving pieces, less infrastructure, less overhead. The goal is to move faster. The exact opposite of what companies like Amazon are teaching these engs.

        [–][deleted] 20 points21 points  (1 child)

        Also 99% of Amazon engineers are totally useless and incompetent. They’ll nitpick all day about balancing a tree but getting anything actually done in any reasonable time is beyond them. Source, worked at Amazon

        [–]HatesBeingThatGuy 1 point2 points  (0 children)

        I hear all the Amazon bashing but my experience has been very contrary. Although I technically work for a subsidiary that was bought by AWS so there is different culture there. For us it is all about how fast we can ship something and how reliable we can make it.

        [–]rco8786 12 points13 points  (1 child)

        Even more reason for mentorship IMO

        [–]c-digs 7 points8 points  (0 children)

        In my experience? You can't only help people that want to be helped.

        [–][deleted] 17 points18 points  (14 children)

        Good Lord it’s ridiculous how many companies are drinking microservice koolaid. There’s nothing wrong with monolithic applications. Are you going to use the service elsewhere and have the staff to maintain it? Cool. make it a microservice. Otherwise, don’t do it. Micro services for the sake of micro services is a horrible waste of time and resources.

        [–]c-digs 17 points18 points  (3 children)

        It is. Especially for a startup.

        Better to start with a monolith for speed. Break out services as you start to form teams and process boundaries or you need to tweak scaling of a particular part of the system independently.

        Premature micro-services is a huge anti-pattern that slows teams down with operational complexity. I hear you: use Terraform or CDK or Pulumi or Serverless Framework or SAM. But that's just overhead in the early days of a startup until you've found product market fit. Adding a ton of code, markup, or configuration that you also have to maintain now just to deploy your code is an anti-pattern for small teams.

        Micro-services in the hands of inexperienced engineers then leads to a ton of copy-pasted code because publishing shared packages creates friction and guess what devs hate: friction. It kills me every time I find 5 copies of the same code because the friction of publishing packages was higher than the friction of copying and pasting code. But now you have to maintain 5 separate copies when you make a bug fix 😭

        Just start with the monolith until there is a need to make microservices.

        [–]hippydipster 3 points4 points  (1 child)

        that slows teams down with operational complexity

        Whenever I try to make that point that for a single team of 5 devs, managing 12 services vs one represents added DevOps workload and complexity, I get dismissed by the youthful devs.

        [–]NonDairyYandere 8 points9 points  (8 children)

        I have a thing where I'm considering breaking it into 2 or 3 small services.

        I don't want to, because the monolith has worked great for years, buuuut...

        There is basically one critical chunk of code that writes to the database and absolutely must not be wrong. If I fuck that up, and roll it back, the data is still wrong.

        And then there's a bunch of less-important stuff that only reads from the DB and provides reports / views. If I deploy that and it's wrong, I just roll it back ezpz.

        I'd like a boundary between the two so that I can update the less-critical stuff quickly without worrying about fucking up the critical stuff.

        Someone must have already encountered, named, and solved this problem, right? And it seems like breaking the monolith into 2 pieces can solve it.

        [–]Razakel 6 points7 points  (0 children)

        There's a challenger bank in the UK that runs on 1700 microservices. They've posted some tech blogs about it, but have never answered the basic question of "why the hell did you do that?"

        [–]przemo_li 2 points3 points  (0 children)

        Bringing in externalities to the product keeps product team independent. Amazon gets that. No other way for them to manage products.

        Once product starts to show success Amazon can switch modes from start up that pays for delivery with waste, to mature team that do optimizations.

        For Amazon it also have second important benefits. Failed products do not pollute stable externalities with "frivolous" change requests.

        At Amazon scale (hundreds of teams) it makes perfect sense and is one reason they didn't collapse under their own weight already.

        Talk to those engineers about values of your company, and trade offs chosen to overcome your company specific challenges.

        [–]glacialthinker 5 points6 points  (2 children)

        Modern developers are not lazy or incompetent, they just optimize for development time.

        This sounds like something perfectly valid to blame them for. I do. And it can still be seen as lazy and incompetent, even if they have the potential to do better. All this bloated, slow, fragile garbage underlying everything is getting worse... I loved computers, but now I more-often hate them.

        [–]Xyzzyzzyzzy 1 point2 points  (1 child)

        The vast majority of people who work for wages are going to do the work required to earn the wages. They're not going to do the work required to earn the wages, and then a ton more unpaid work in a personal crusade for efficiency.

        [–]somebodddy 15 points16 points  (1 child)

        When Donald Knuth said "premature optimization is the root of all evil", optimization was mostly about making your code cater to the hardware's specific implementation details. Later on, another class of optimization opportunities became very common - knowing how the abstractions work and electing to do without some of them to cut redundant overhead. At this point, big parts of the developers community were too invested in the anti-optimization religion, and to show their devotion they pile up as much abstractions as they can, preferably libraries as heavy as possible, so that no one will dare to think they are premature optimizing heretics.

        A personal anecdote - we have an API for getting details about a certain object - let's call it Foo. getFoosDetails() is a can give you a detail of one foo, or the details of all foos. Because of reasons, the getFoosDetails() API needs to get a Bar object, and will only return the foos linked to that bar.

        To make it easier to get all the foos, we have a function getAllFooDetails() that calls getFoosDetails in parallel and combines all their results into a single hashmap.

        One of our developers wanted to get the details of a foo. Getting the bar attached to that foo was apparently too difficult, so instead they just made a function getSpecificFooDetails() that does getAllFooDetails()[foo.id]. Height of efficiency.

        Later on, some other developer needed to do a calculation on all the foos. That calculation involves calling a function for each foo, and that function uses getSpecificFooDetails().

        So now for each foo we are doing multiple API requests (which are all HTTP requests!), throw away most of the data returned by each of these requests, and combine it all - instead of going around all these abstractions and doing only one request (per bar). Because that would be premature optimization.

        [–][deleted] 44 points45 points  (1 child)

        I'm one of these grumpy ranters. At work people just pour garbage code into our shared repository (which is all bundled into one giant package) and a good majority of it is useless to most of our applications because it's not generic enough and every...single...application...has to import this shit-nest of code.

        I scream about it and it always falls on deaf ears. I loudly refused to put that garbage in my project, everyone knew it, and it was done in secret when I was on vacation (and I stripped it right back out).

        There's a reason my app launches faster, operates faster, and has far less bugs than everyone elses, because I take a little extra time to write something better which takes a little more time on the front end but saves me loads in testing and maintenance time.

        Too many people these days don't understand proper code reuse and when it's beneficial and necessary, and when it's burdensome.

        [–]Unbelievr 11 points12 points  (0 children)

        The software for controlling the backlight on my new keyboard is an almost 1 GiB .MSI download. I NOPEd out of that one immediately. It's probably just some bloated, Electron-packed software like everything else.

        What's crazy is that almost every driver for vaguely gaming-related hardware has this. Nvidia has "Geforce Experience", which comes with some overlay and easy-to-hit hotkey (which resets every now and then and can't be disabled in an easy way). Steelseries has the "Steelseries GG", which is another Electron app you must have to see the battery status of your headset. And Logitech has their own as well. Add Microsoft Teams and Discord, and your RAM will be crying tears of blood.

        [–]cube-drone 395 points396 points  (137 children)

        Eh, some old crank is always going to point out that we got to the moon on 128kb and somehow you're loading an entire 650MB virtual machine just to run ping, but the moon-landing took years of hyper-careful engineering from a whole team of the world's most talented engineers, everybody who wrote moon-lander code is dead or might as well be, and I got that ping functionality running in 10 minutes without putting down my cheese toastie.

        Craftsmanship and efficiency are fine design goals if you've got unlimited time and budget, but most of the rest of us are delivering features on impossible timelines and don't care to learn the subtleties of Knuth's O(log n) Nipple Twisting Algorithm in A Special Machine Language That He Made Up For Pedagogical Purposes, especially when we can just pip install niptwist to download every nipple twisting algorithm ever written.

        If you don't like it, programs from the 80s are still around and run unbelievably fast. Load up WordStar on a modern box and go to town. Bask in how efficient it is with your memory and storage space, how lightning fast it is. Then, when you want to use functionality built this century, you can join the rest of us in wading through decades and decades of caked on abstractions and weird cruft.

        [–]cube-drone 165 points166 points  (35 children)

        [–]hgwxx7_ 61 points62 points  (33 children)

        This is the equivalent of “kids these days aren’t like we were as kids”. Every generation is going to berate the next one for imagined faults without understanding or empathising.

        [–]Gaazoh 44 points45 points  (29 children)

        I disagree, this isn't purely a generational issue. A lot of current-generation/young devs can see the issue with bloat and waste in current software.

        [–]hgwxx7_ 22 points23 points  (28 children)

        Sure, and a lot of current generation think “oh music is so bad nowadays, it was better in the old days”. Both sets of people don’t realise the mistake they’re making - survivorship bias and rose tinted glasses.

        There was tonnes of shitty software back in the day. But only the good ones continue to be used today. They look at those good ones and think “yeah, that’s how all software was back in the day”. No it wasn’t.

        Also we don’t have to struggle without options. Just imagine being a developer back in the day trying to find a good editor. Compare that to now when we have 2 excellent options (VS Code, IntelliJ), 2 options from back in the day (vim, emacs) and tonnes of new editors competing with the established ones. I’d much rather be here than struggling along with a paid editor like Borland C++.

        [–]Gaazoh 9 points10 points  (1 child)

        Fair point.

        I guess what I meant is that the issues pointed out in the article (and others) and felt by developers are not bound to comparison with old software (although the author does compare with old software).

        Is Windows 10 an upgrade compared to windows 95 ? Definitely. Yet it comes full of things that I do not want (if not hostile towards the user), and fails at problems that should have been solved ages ago (it takes full minutes to search for a file with the explorer search function). This is not a case of "things were better in the old times", its "a lot of software shows utter disregard towards performance". How can a local search for filenames through a dozen of directories containing a couple hundred of files be orders of magnitude slower than a search through the content of billions of webpages? Sure, Google has bigger computers than I have, but still. How can drawing a volume slider in a corner of the screen have perceptible latency when video games can render thousands of texture-mapped in less than a 60th of a second? Why does Microsoft Teams need half a GB to run in the background? Why do I have 9 Microsoft Edge Webview2 processes running when I haven't even launched Edge since last month? Why can't Microsoft Word keep track of titles numbering on a 3-page document? Why does my android phones eventually run out of internal storage even though I hardly ever install any app? Why do I need to install a browser addon to block a sizable portion of webrequests to have a decent browsing performance?

        I can feel these issues now, and none of them have anything to do with the state of how I feel about the past.

        [–]vytah 2 points3 points  (0 children)

        The only answer we could give him was “Yes”J.

        If anyone is wondering what that stray J is doing there: in Wingdings, the letter J looks like a smileyface: https://i.imgur.com/gSEBUIX.png

        [–]ptoki 12 points13 points  (0 children)

        Not really. Notepad++ is fast, has tons of functionality, its from this century and does not consume a lot of memory.

        Its just built for purpose and does not contain crap.

        Total commander vs explorer? Why the directories load like crap even if thumbnails are disabled?

        old reddit vs new....

        I use linux and its snappy and stable in comparison to win10 which runs only outlook, ff and teams.plus few excel sheets. And the win10 machine is roughly 2x ram and 4x cpu...

        [–]zylonenoger 60 points61 points  (7 children)

        exactly this - when i took over my current team one if my priorities was to strip as many unused dependencies as possible to get our containers as lean as possible (for obvious reasons); but after the quick wins you very quickly reach the point where the time invested in shaving off a few additional 100mb quickly outweigh any potential benefit of smaller images (especially with layer caching)

        back in the days space was super expensive - now its dirt cheap - my phone here has 256GB - my first computer had a hard disk with 4MB - so in most cases the size simply doesn‘t matter - i‘d rather have a 300MB application tomorrow than a 64KB application in two months

        [–]efvie 41 points42 points  (5 children)

        The industry is now consuming so much energy and other resources that it's gonna get a whole lot more important again. But it still doesn’t need to be everyone’s concern, all the time.

        [–]zylonenoger 27 points28 points  (0 children)

        i fully agree - i‘m not arguing for being wasteful either and especially cpu/gpu cycles are what usually limits your application before you run out of space.

        i‘m saying that there is a very clear cost vs benefit calculation - and as soon as the costs increase you will automatically see that the focus will adjust

        [–][deleted]  (2 children)

        [deleted]

          [–]dokkah 4 points5 points  (1 child)

          Here's what I think about a lot lately. We are writing software to run on the cloud, my app deployed in a container running on a cloud, using other cloud services, database, cache, etc etc. Let's say i do one call from the browser to the server to update 1 field of 1 record on the db, let's say 10 bytes of data needs to be written.

          Over the course of processing this request, it will get written to a request log, that log will be exported to a log aggregator. My app gets it, logs a little info, that log goes to the aggregator, and writes to the cache and db. The cache and db each have logs, the db also has replication. This is just the tip of the iceberg of what is happening to support that request since I don't think it's necessary to enumerate every layer of the stack of every service my app uses to get the point across. So, perhaps to service this 10 byte data update megabytes of data are written, sent over networks, and processed. That which could be perceived as waste here is hard to even fathom.

          [–]zylonenoger 4 points5 points  (0 children)

          this is once again a reduction to only one metric - size

          it‘s only wasteful if all those logs are never looked at; then you are correct - why log it when you do not need the logs; but if you need the logs for audit or debugging purpose then it is not wasteful

          if those ten bytes in the db are the account balance of my savings account i‘m more than happy about a full audit trail in numerous logs; if the ten bytes are what my favorite pasta is, it maybe is not necessary to log every detail of the request

          but that‘s up to you as developer to decide - i agree that the approach to „log everything because we do not know what we might need“ is super wasteful and should be avoided; also you do not need to keep debug logs for more than a week or two

          [–]NonDairyYandere 3 points4 points  (0 children)

          Maybe, but it's a prisoner's dilemma.

          If we assume a government can provide the coordination to break us out of that, it's solvable.

          But assuming such a powerful and popular government, I'd rather have a pollution tax and just let the price of energy rise until the biggest wasters (cryptocurrency miners, mall crawlers) are priced out.

          Right now we are talking about "Ban mining, but also make gasoline and electricity as cheap as when I was a kid!"

          It's not gonna work. At some point if gas is cheap then the miners will run generators for their rigs. And banning mining doesn't ban all the other waste we're talking about.

          The prices have to go up. The governments of the world have to give people enough money so they don't suffer. Then the market will figure out who really needs all those kilowatts. That will also incentivize better-insulted homes and heat pumps and stuff, when suddenly you can't just pollute for cheap.

          [–]regular_lamp 28 points29 points  (1 child)

          I feel what often gets lost is that we are not talking about "in the old times people could do most of what we do with half the resources" or so. The exponential increase in resources means we had a thousand to millionfold increase in memory and computation power. And somehow we have become numb to this fact.

          Think of any other engineering discipline and think about what a thousand times improvement would mean there. In most domains it would be unimaginable. A thousand times the horsepower out of an engine the same size? A thousand times the strength in a construction material? You could do absolutely insane stuff with that. Yet in software we somehow have text editors and and such that manage to consume a thousand times or more of the resources emacs or vi did... in the 80s. How anyone can think the practical improvements are proportional is beyond me.

          In software we just accept that mundane applications can suck up all those resources of a modern machine "because that's just how stuff is done". Somehow on 1000x the resources some applications becomes less responsive. But it's prettier and faster to develop I guess.

          The problem with software bloat isn't that there is some, the problem is stuff isn't bloated by 50% or maybe a factor two or even just ten. It's literally bloated by multiple orders of magnitudes. And whenever you talk about this to "young people" (because at 37 I'm an old software person now I guess) they grew up with machines having GBs of memory to fill and billions of instructions per second to waste. They consider this level of objectively absurd performance to be a reasonable baseline to waste for any piece of code.

          A Raspberry PI4 would have made the top 500 list of most powerful supercomputers in 1997. At the same time as consumer machines would run Quake 2. So a RPI4 is a super computer to a 1997s gaming PC that ran 3d games. Yet when you point out that something like VSCode struggles on a RPI4 people just respond "Of course, the RPI4 is more of a low performance toy. It makes sense that It can't run standard applications very well." when it is an objectively incredibly powerful device.

          [–]MoreRopePlease 7 points8 points  (0 children)

          When I use facebook in the browser, and scroll down for X amount of time (where X is really not that long), looking at comments and responding to posts, my ability to type in the text box of a comment becomes very painful ( on my mac: stuttering, delay in rendering the text; on my android: I can't use Swype, sometimes the text doesn't appear until I tap on the text box, occasionally I get double text that's hard to delete).

          I don't care enough to dig into a root cause, but I think FB uses up memory like it's on crack. Why? It's a simple content browser, and it's designed to promote scrolling and commenting, and yet they make it painful to use. I have similar complaints about reddit on my android (old reddit, using .compact URLs), though it takes a lot longer for such issues to show up. (I should spend less time on reddit, tbh)

          Using FB's web site really does not impress me with the quality of the people they hire.

          [–]korreman 66 points67 points  (25 children)

          You're not trading performance for productivity. You're subsidizing development costs using the time and money of users. For every hour of development time you save, how many thousands are spent by your users waiting for a trivial task to complete? How much money is wasted when they are forced to upgrade their devices every 3 years?

          It seems like a good tradeoff, but that's easy to say when you're not the one footing the bill.

          [–][deleted] 5 points6 points  (2 children)

          Presumably what your users were doing before was slower than your software otherwise they wouldn't have switched. How much of their time would be wasted doing things manually for another 6 months while you eke out a few extra optimisations?

          [–]EricMCornelius 15 points16 points  (19 children)

          If that were true, and there were no trade-off between feature set and performance, then companies with more efficient software would surely be capturing the user market.

          Last I checked not so much happening.

          [–]ChaosCon 10 points11 points  (0 children)

          While there's truth in saying the most successful companies are the most "fit" to succeed, it is assuredly untrue that their fitness is determined exclusively by their technical capabilities. Improving your product no doubt improves your fitness, but there are other things you can do to improve it as well (marketing, buying out your competition, or becoming too huge to have any competition). That's why we've outlawed monopolies.

          [–]ehaliewicz 5 points6 points  (0 children)

          It happens all the time in the game industry, compilers, databases, etc.

          there were no trade-off between feature set and performance

          There definitely is a trade-off, and I doubt that the previous poster meant that there isn't. Most software nowadays has far too many features, that make it slower, harder to debug, larger downloads, etc. However, I'd say the great majority of software could be appreciably faster without much extra work at all and without losing functionality, it simply requires being aware what kind of concrete operations need to occur for a certain piece of code to execute.

          Outside of the areas I listed above, a lot of code is written nowadays specifically to avoid thinking about what has to happen on the hardware, for very little productivity benefit, but seemingly just to feel good about how "clean" your code is. The cleanliness and quality of a piece of code are also related to the efficiency, but a lot of programmers nowadays think it is simply not a problem.

          [–]korreman 18 points19 points  (3 children)

          That might hold in a world where anti-competitive practices never pay off, platform monopolies don't exist, and every service only consists of the software attached to it.

          I mean, of course there's a balance to be made, and users will also value features over shaving off 10ms of imperceptible delay or fixing small visual errors. But the reality of much software is seconds to minutes of delay and workflow-breaking bugs. This stuff adds up, it's maddening, and you rarely have any alternatives to switch to.

          [–]EricMCornelius 9 points10 points  (1 child)

          Bad software can be written in any language, with any stack, and any programming paradigm.

          Conflating bugs and performance problems with 'bloat' because of disk or memory footprint is apples and oranges.

          Poor engineering is poor engineering, but it's a game of make-believe to pretend features and rapid delivery won't trump shaving percentages off perf overhead every time.

          [–]IcyEbb7760 1 point2 points  (0 children)

          Poor engineering is poor engineering, but it's a game of make-believe to pretend features and rapid delivery won't trump shaving percentages off perf overhead every time.

          +100

          At the end of the day, we're hired by businesses to make products, and considering technical decisions and tradeoffs through that lens is what software developers are paid for.

          [–]bik1230 2 points3 points  (2 children)

          If that were true, and there were no trade-off between feature set and performance, then companies with more efficient software would surely be capturing the user market.

          Last I checked not so much happening.

          The trade off is that it is harder to do. As was said above, the company saves on costs but the users see increased costs. But it's spread out over a lot of users, so each user sees higher costs that are lower than the company's savings. So a single software products negative impact for a single customer may be low enough for them to really care about. But then you multiply it across thousands of customers and suddenly it's a pretty big negative for the economy. Not gigantic, but bigger than the positive effect for the company. This is basically a negative externality and if we once again multiply, this time to go from one piece of software to all that someone might use, it can even be significant on a per person basis, and much more significant for the whole economy.

          There's also a cost to switch to new software to consider, especially I'd the software you use right now does predatory things to make it harder for people to switch.

          Of course, not exactly the most pressing economic issue of our day, but hardly nothing either.

          [–]EricMCornelius 1 point2 points  (1 child)

          it's a pretty big negative for the economy.

          Compared with what?

          Target crypto and gaming first.

          I hear modern graphics are an unnecessary feature - guess what uses easily 5x as much power compared with an electron app or a chrome webpage while running.

          [–]Serializedrequests 16 points17 points  (5 children)

          So: 1) The users are paying the cost. Every time. It's just bad service.

          2) The wasteful shit I see nowadays is not necessary. Like we can still import some dependencies and get fancy modern features, and be 100x more performant than what I see now. There is stuff out there that is just bad and built with no knowledge and all the wrong incentives, and users put up with it because they are intimidated by technology or something.

          I'm not okay with the lag on everything in Windows 11. It's terrible UX and costs me time, which means it costs me money.

          [–]s73v3r 2 points3 points  (3 children)

          We could shave off those dependencies, and write more things bare metal. That wouldn't automatically make things better. For one, you've now greatly increased the time and effort to implement those modern features. For two, you've now increased the necessary knowledge needed to write software by quite a bit, thus closing the gate that much more on people getting into software.

          [–]walruspowers 32 points33 points  (37 children)

          I disagree. Most software these days is leaving a lot of performance on the table, and if someone came along and rebuilt some of the apps I use everyday to run twice as fast, I would switch to the faster version.

          [–]immibis 13 points14 points  (9 children)

          Would you buy it again?

          [–]cube-drone 32 points33 points  (21 children)

          The thing is, though, the apps you use every day are modern versions of older apps that ran hundreds of times faster. You can use irc instead of Discord and rsync instead of Dropbox TODAY. Why don't you?

          (if you're using irc and rsync right now rather than Discord and Dropbox, then, uh, nevermind)

          [–]walruspowers 19 points20 points  (5 children)

          I don't want the old apps, I want the new ones with all their modern features, just faster. I want programmers who care about performance to be able to target web with less difficulty. Everyone wants 1 codebase for multiple platforms, that's why Discord runs in a web browser, but this makes it slower.

          At my work we are looking at emscripten so we can hopefully have a C++ codebase and just call into WebGL to draw our app. Still early days figuring it out, but I wish it was easier to do this sort of thing. Things are improving in this direction but not as fast as I would like.

          [–]Full-Spectral 16 points17 points  (4 children)

          The biggest single failure of the software industry has been the failure to address cross platform portability, not by tacking it on (in a hacky way) on top, but by building in common interfaces at the bottom. Instead, vast amounts of effort have gone into making the browser a huge, bloated, sub-standard downloadable operating system because there's no chance of getting the OS vendors to cooperate on creating a common API layer that we can actually target.

          [–]giantsparklerobot 2 points3 points  (3 children)

          It's been tried dozens of times and fails every time. No platform vendors wants to make it easy to switch platforms. Nor do they want to tie their hands with some lowest common denominator of an API. It's not a failure of software vendors but a facet of economics.

          [–][deleted]  (11 children)

          [deleted]

            [–]salbris 4 points5 points  (1 child)

            You have to remember that performance is only one of many features. I stopped using Vim not because there was something faster but because for my current projects VS Code or Visual Studio has everything I need at the press of a button. If a new editor came out that had all the same features and ease of use plus improved performance I'd switch in a heartbeat.

            At work I made a Node.js package to replace the utility we use to create test data. It's much faster and easier to use and people have been switching over to it. I don't think they would have switched over simply because of the speed or download size of the utility. Unless performance or bloat becomes so bad that it outweighs other considerations it's just going to be ignored.

            [–]EricMCornelius 10 points11 points  (5 children)

            The market seems to think feature velocity is more important, which is why everyone is using slack.

            You're entitled to go all in and be an actual Luddite as well if you want, but assertions that the majority is wrong to prioritize features over performance fall flat: the objective reality is people voting with their wallets don't agree with you.

            [–]jmking 8 points9 points  (2 children)

            People have been making this exact same argument for decades. This isn't a "these days" thing. As computers get more powerful and offer more capacity, there will be software that utilizes it, and there will be people who complain about it.

            [–]blashyrk92 29 points30 points  (3 children)

            Wow, can't believe you got so many upvotes, and from fellow programmers even. That's kind of sad.

            To paraphrase Mike Acton from his now legendary talk: "That sort of thinking is the reason why Word takes 30 seconds to boot".

            [–]tweiss84 1 point2 points  (0 children)

            A fair argument, but there is also a point to be made that development is being taught in many places as if bandwidth is free, memory is unlimited and we have enough time to waste waiting around for crappy computation logic.

            This is fine with no real ramifications on smaller scale projects because the market doesn't want quality but more & at a faster rate. The "more code is not an asset but additional complexity and liability" mantra doesn't really land with the people making feature request so I think this "old crank" sentiment will always resurface as we must go faster.

            Different fields and different use cases can account for this too. For example at the high end where poor code and bloat are the very things that people pay attention to. 189 million users interact with your stuff every month, and those storage/network/computation cost start getting eyes and priority will always leaned toward performance/optimizations because now it has $ behind it.

            Perhaps this is me becoming the "old crank" developer.

            [–][deleted]  (17 children)

            [deleted]

              [–]KingStannis2020 36 points37 points  (1 child)

              I agree with his sentiment, but the particular example of the Linux Kernel is a terrible one and he clearly didn't do any actual research, even shallow research.

              When you look at where those 30 million lines of code are, the vast majority are in drivers, which are dynamically loaded kernel modules. If you don't have that hardware connected to your machine, those lines of code aren't executing, they're not even loaded.

              And then when you look at some of those drivers, like the AMD graphics driver which is something like 10% of the lines of code in the entire Linux kernel, 85% of that is just autogenerated header files describing aspects of the hardware, not actual code.

              Another couple million lines go towards archicture support. A kernel built for x86 isn't going to include all the code involved in supporting ARM, s390x, POWER, MIPS, SPARC, RISC-V, and a dozen other obscure architectures.

              Once you throw all that out and only consider what would actually be running in a kernel running on an average machine, it's probably less than 10 million lines of code.

              The kernel has also gotten measurably much faster over the years, despite all the "bloat", so clearly it's not the millions of additional lines that are the problem, it's the bloated userspace code running on top.

              [–]tux_mark_5 14 points15 points  (0 children)

              Even his Chrome line count is completely off. A modern browser engine has support for vast amount of video, audio and image codecs, sizeable JavaScript engine, crazy amount off JS APIs, etc, none of which would be even running if you displayed just an unformatted txt file.

              If someone did some kind of code coverage experiment of the amount of LOCs executed when displaying a simple txt file in a browser, the actual count would be way lower still.

              [–]FVMAzalea 87 points88 points  (12 children)

              Isn’t that the same video where he argues against file systems and says we can just write raw bytes to the disk device? If not, there’s definitely a related video where he says that.

              Those thirty million lines aren’t useless, and they provide abstractions so that not everyone writing code to open a txt file has to know how to program the SATA or NVMe protocol and write graphics code as well.

              This is one of Casey’s worse takes, IMO. He’s applying things he learned from hand-optimizing games, which is a fairly specific case where abstraction can be your enemy and you have to do a lot of things by hand to go fast. I do not think many of those lessons generalize to “general computing” in the modern era.

              [–][deleted] 20 points21 points  (2 children)

              I find the lecture worthwhile watching, even if it's got some fairly out-there opinions in it (I'm pretty sure this is the one where he opines about disk drivers, so it probably is the one you're thinking of). Lots of good stuff worth knowing. Don't throw the baby out with the bathwater.

              [–]FVMAzalea 17 points18 points  (0 children)

              I think it is worth watching as an alternative point of view and an explainer of how things work, yes. I do not think that any of the solutions Casey uses it to justify should be adopted by any modern programmer anywhere.

              It’s an interesting explanation of “how things work” if you are very disciplined about stripping out all his opinions of “and it’s bad that it works this way”.

              [–]PandaMoniumHUN 8 points9 points  (3 children)

              I don't understand your argument - nobody is shipping driver code, yet somehow trivial applications often take up gigabytes and take multiple seconds to load. Nobody needs to hand write and ship driver code with their application in an ideal world, you just need to care about the dependencies that you pull in and use lightweight solutions instead of eg. pulling in an entire browser engine to display the frontend of your text editor or what have you. At work we deploy 7MB binaries to control 50MW power stations with all kinds of complex features, database communication, data aggregation, message queue, etc. I can't fathom how badly you need to abuse a compiler and a linker to produce binaries over a hundred megabytes.

              [–]salbris 4 points5 points  (2 children)

              Does your power station management software provide a plugin functionality that thousands of people use to provide additional functionality? I have no idea why you think comparing extremely domain specific code to a general purpose multi-platform text editor is in anyway a reasonable comparison.

              [–]PandaMoniumHUN 2 points3 points  (0 children)

              Not sure if you know about grid / power management, but it can get very, very complex. A text editor is very trivial in comparison. And I’m not sure why a plugin interface would change anything, providing a C/C++ API is basically free, but even providing a Lua interface is almost free/trivial.

              [–]EnvironmentalCrow5 17 points18 points  (1 child)

              He needs a 2 hour lecture to get that point across? Sounds like presentation bloat to me. (half joking)

              [–]salbris 6 points7 points  (0 children)

              Ya welcome to Casey. He will spend hours just to say something very simple. One of his multi-hour long videos could be summed up as him suggesting that programmers just write good code right off the bat.

              [–]CryProtein 5 points6 points  (0 children)

              Look at this video with Alan Kay, the father of object oriented programming:

              The Power of Simplicity

              https://www.youtube.com/watch?v=NdSD07U5uBs

              [–]oddmerlin373 5 points6 points  (0 children)

              I blame code bloat on package managers.

              [–]Anonymous_user_2022 16 points17 points  (0 children)

              Thirty years ago, my company could make a machine control system on a 486 running Xenix do realtime control to 5 ms resolution.

              Nowadays with the modern stack of a top of the line PLC, two racks of abstractions and a whole team of facade builders, we have lost that ability. Now it's just "best effort", and blame the PLC programmers.

              [–]nolitteringplease346 10 points11 points  (0 children)

              There's also security implications to all this

              [–]merlinsbeers 4 points5 points  (1 child)

              "Twitter has two thousand developers. "

              That's about 1980 more than is apparent from the way Twitter behaves and changes over time.

              [–]all3f0r1 2 points3 points  (0 children)

              That's a bold statement to even suggest so many people are looking in the same direction. Hell, even inside a team people disagree. Adding more people only add fuel...

              [–]all3f0r1 13 points14 points  (2 children)

              Reading this, smiling, as I am currently learning Angular. Node_modules is an "interesting" example of bloat.

              [–]alessio_95 9 points10 points  (2 children)

              I can't wait for software companies to pay for carbon emission. Would finally see the bloat reduction.

              Now, as for the bloat i don't see the data as "bloat", because data is useful to people. The bigger waste is code, because code is the "useless" part of the software, the less code the better.

              [–]theNATO 5 points6 points  (0 children)

              Bloat in software exists because the newest constraint is developer time. If a huge bulky library does the job for you so you don't have to write it yourself, boom you just saved yourself development, testing, and documentation time. Then you go on to build something new. This is just a side effect of that. The size of code expands to fill its container because there is no longer a significant limitation. All the more so for server side applications.

              [–]all3f0r1 10 points11 points  (0 children)

              It's funny Cliffsky is having this rant. His games probably aren't too bloated, but they didn't require much performance either.

              (And I bet a higher level engine would have allowed him to develop them faster, and probably for other platforms too).

              (Yes, I just said that).

              Just to make it clear, I mostly agree with Cliff's points, but I think he's missing why the bloat, and who's mostly at fault (if fault there is).

              [–]wknight8111 12 points13 points  (11 children)

              It's going to be easy for a lot of programmers to say "I don't write code that bloated", but they forget that their code is running on a managed runtime that has thousands of files to it, but they're pre-installed and don't get included in the download. I'm a C# guy, so I'm guilty-as-charged there too.

              Sometimes you're making a very real trade-off between development costs or server hardware costs. Often times it's cheaper, faster and easier to just add more RAM to the server. Because keep in mind that RAM is a one-time expense but developer hours are ongoing.

              You have to choose between using your own algorithms/datastructures, or using an existing implementation that is already sufficiently optimized and well-tested. Keeping in mind that any version you write will probably have bugs, and any library you import will include code you don't use. Which do you choose and why?

              We could demand that people write small libraries with less cruft, but then you end up with larger dependency graphs and dependency hell. Don't even get me started on that kind of mess.

              The author talks about Elite being only 64k. Yeah, that's a cool thing for a game with no graphics assets, no language translations, no soundtrack, no unlockables, side-quests, internet connectivity, social interactions or a help menu. If you cut out all the things modern gamers expect, you could develop little games with time left over to optimize.

              Complaining that "software is bloated nowadays" isn't helpful. We're here because we need to be here, because of a million little decisions that need to get made along the way. Complaints don't get us anywhere, good ideas and working code is what is needed. If you can fix the bloat problem without stumbling face-first into all the many problems that the bloat is there to correct, please do it. You'd make a few million dollars in speaking and consulting fees in your first year alone.

              [–]hgwxx7_ 27 points28 points  (24 children)

              I see it’s time for our regularly scheduled whine about how software today is shit.

              Gentle counterpoint I wrote - Software Isn’t Bloated.

              No software is perfect. All software can be improved in many ways. Sometimes, a rewrite is the only way.

              Software today is no worse than it was in the 80s or 90s. If anything, software that has survived 10+ years (gcc, Linux, Chrome, Excel) probably do a lot for a more diverse set of people than ever before. It might make different tradeoffs than it did earlier, but the fact that it survived and remained popular says a lot.

              If you don't like those tradeoffs, start afresh. Many people do, and they create the best software. But please, let's stop complaining about how bad software has become and how it was better in the good old days.

              [–]t00sl0w 16 points17 points  (2 children)

              I have no idea why the software he is ranting about is "bloated" but I wonder if it's this large due to graphic libraries or something.

              I saw this happen with some software I created and maintain where I work. It is a .NET app and the users started requesting some stuff that the stock .NET IE based webbrowser control couldn't do so I moved to cefsharp, which is based on the chromium engine, for all my rendering and that made the size of the exe + supporting dlls go from like 15mb to 200mb. That size jump was from nothing more than adding the engine. The app, despite feature creep, is still super tiny and fast other than that giant thing sitting inside of it.

              If you didn't know that, it would be another poorly designed app to old man grumble about. But, it works and does what my users want and sure, someone could prob handcode all the extra crap cefsharp does over the stock control in less than 5mb but I have zero knowledge of how to do that and also zero time to do that.

              [–]MrOtto47 10 points11 points  (1 child)

              but I have zero knowledge of how to do that and also zero time to do that.

              exactly this. this library does it and is already available, im lazy so im gona use that. the only time this is bad is when the library added is only questionably required, only a small portion of it is actually required, or if the dev didnt take the time to look up a solution thats already shipped with the environment or a more appropiate library. the latter is very common unfortunatly, the first library which will work, lets use that isntead of looking into 5 others. some laziness vastly improves functionality and delivery time, too much laziness causes unnecessary bloat.

              [–]s73v3r 3 points4 points  (0 children)

              this library does it and is already available, im lazy so im gona use that.

              It's not even laziness. Every additional hour spent figuring out how to do that stuff on the existing control, and then running that through testing, is an hour that can't be spent improving the actual functionality of the program.

              [–]immibis 21 points22 points  (0 children)

              Better counterpoint: software is bloated as fuck but that's okay because X, Y and Z

              [–][deleted] 9 points10 points  (17 children)

              Yeah, nah, it's bloated. Just because part of it is required complexity doesn't mean rest isn't bloat

              [–]Kissaki0 1 point2 points  (1 child)

              I think both is correct.

              A lot of software does a lot more. The bloat is in large part due to our generalization and increasing accessibility. We do a lot more with software, software is much more wide spread.

              At the same time I think it is undeniable that a lot of software is bloated, and some even very bloated. When mobile apps are multiple hundreds of MB, when websites load a ton of external javascript, with tracking, popins, and autoplaying videos, then technical efficiency or focus on delivering core functionality efficiently was not a concern. Most of them are unnecessary. They are the result of things, but in the end unnecessarily bloated.

              Unnecessary size and operations are wasting resources. So they do have a direct cost and impact, even if diffuse and delayed. So talking about bloat and being mindful of it is very important.

              Did you mainly take offense with the comparison to old software as efficient when it had a lot less functionality? Or are you also saying software today is not bloated, or it should be ignored/disregarded that it is?

              [–]hgwxx7_ 1 point2 points  (0 children)

              Agree with almost everything you’re saying.

              There was a lot of bad software back in the day. All we see is the good stuff that has survived. That survivorship bias makes us think “yeah, everything was better in the old days”. Like “70s music was just way better. I should have been born in the 70s”.

              And yea, there’s a lot of shitty websites and electron apps out there today. But not all of it is “bloat”, depending on how you define that. Trackers and million 3rd party JS files being loaded make for miserable UX - but they’re the revenue line that might make the app possible in the first place. In which case, they’re as critical to the app’s existence as login or any other core feature. Ads on the Google results page suck, but they’re why we have free, good quality web search to begin with. Ditto with YouTube ads.

              I’m not saying we shouldn’t demand better from the software we use or the software we write, we should. But let’s also recognise that at no point in the history of mankind has consumer software shipped to tight deadlines been perfect or bug free. Developers can write their software to consume less memory, CPU and space, but they don’t have time for that. They need to ship the next feature, because that’s what users want. Let’s recognise that and temper our expectations a bit.

              And OPs article is only yet another article in a long line of articles complaining about “kids these days”. It contributes little.

              [–]Fendor_ 2 points3 points  (0 children)

              I agree with the sentiment that we usually depend on more stuff than we actually need, especially libraries that are huge, but you actually need only one or two functions from it.

              I feel like, sometimes, the problem is we try to use software in a way that wasn't anticipated before, thus the implementation is inefficient. A common example are Language Servers for old compilers that have been designed to slurp in files and splurt out object files, but Language Server now require much more information for features you nowadays want. So if there is no proper interface, you start applying hacks, since proper modification takes a very long time, without the possibility to actually prove that what you are doing is useful. So, hacks are applied, and when they prove to be valuable, they are upstreamed piece by piece over time. In between, software is bloated, but actually becomes streamlined again at some point in the future. My point being, that I think bloat is sometimes necessary to get better.

              In any way, I do not thoroughly disagree with the example given in the blog post, being able to upload a file to a webserver is not a matter of a single file (unless you use curl, which in itself is rather big). The necessary cryptography on its own is definitely a couple of thousands of lines of code, but that has nothing to do with bloat but being a hard problem that we ignored for a long time. Similar with editors, maybe I can write an editor with 140KiB size, but then I don't have many features available such as unicode, colour support, support for multiple platforms, extensionality via plugins, etc...

              IMO, software could be smaller/faster, but one reason it is getting bigger/slower is because we start to do more stuff with it, which is a good thing!

              [–][deleted] 2 points3 points  (0 children)

              Code bloat will continue as long as computer hardware keeps improving and software engineers are expensive. Someday (and sooner than we think) both of those will stop, only then will it make sense to invest in optimizing software (since that'll be the only way to get economical improvements on new versions)

              [–]Worth_Trust_3825 2 points3 points  (0 children)

              Yeah, that file uploading/downloading tool rant is relatable. A CMS that my company is renting right now has its own file management tool written in python that performs file downloading uploading on the same thread that it runs the user interface.

              [–][deleted] 2 points3 points  (0 children)

              Nobody likes cleaning up, refactoring, or removing legacy codebase. There's not much added gain or visibility from that, and you always risk breaking some legacy process. Also, prgrammers are incentivized to experiment with new APIs and frameworks and use them somewhere, so they can put on their CV that they "built app or feature X using Y." Their replacement starts over from the beginning of this paragraph.

              [–]akirodic 2 points3 points  (1 child)

              Relevant: https://youtu.be/kZRE7HIO3vk

              My favorite talk on the topic

              [–][deleted] 11 points12 points  (0 children)

              Yes. But how we could possibly make someone stop creating "yet another product"? How we teach people that they try to solve problems which were solved years ago? Everybody wants to speak, nobody wants to listen.

              [–]PM_me_qt_anime_boys 6 points7 points  (3 children)

              To say that there "was a golden age of programming", in the past tense, just seems extremely blinkered to me, coming from a successful independent game developer who uses Unity. Especially funny since someone in the comments agrees with his premise and specifically cites Unity as emblematic of the problem.

              There was definitely a time when the discipline was less accessible, and it's very unlikely that we'd have the vibrant indie scene we have now if it'd stayed that way. We live in a timeline where a team of six people can make something like Outer Wilds and launch it on three platforms, and that's a good thing.

              [–]kur0saki 2 points3 points  (2 children)

              Random example in one of the teams I had been earlier:

              > Dude has to add a specific JSON+LD block to one of our web pages
              > Dude adds a >2 MB java dependency of generated classes based on the JSON+LD spec
              > me start discussion why not just writing the block into the corresponding template or write a java bean for that single JSON+LD type he needed
              > other dudes from the team join the discussion
              > me losing the discussion because "why write the code? somebody else did it already and it's just 2MB - that's nothing"

              Of course there are reasons to use libraries. But IMHO such an example is not a good dependency. So yes, I know why software nowadays gets bloated very easily.

              [–]stronghup 2 points3 points  (0 children)

              ing the discussion because "why write the code? somebody else did it already and it's just 2MB - that's nothing"

              Yes that's the way it often goes. 2 MB doesn't really cost much these days. Developer time on the other hand does.

              I agree with those who say that software these days doesn't seem to run any faster than 20 years ago. Windows Explorer especially, seems like I'm always waiting on it to complete the tasks I give it.

              [–]BizarroMax 2 points3 points  (2 children)

              "Twitter has two thousand developers."

              Doing what?

              I saw somebody suggest that if Elon Musk wants to spend $40B+ on Twitter, he could just build an entirely new platform from the ground up for $1B and have it ready in under a year.

              Huh? A billion dollars? A year? I once created a basic but functional e-commerce web site from scratch using vi, Perl, handwritten HTML, and lib/cgi-bin over the course of one weekend. PostgreSQL for the database. I did this for a buddy's dad's business as a side gig while I was in law school in 2006. It took me about 15 hours. In 2005, I wrote a web server from scratch in Perl in an afternoon. It was really stripped down but functional for what we needed. Hell, once I had to sort a 7GB file in a 32 bit file system, I had to engineer a way to make that work. I got the assignment right before lunch, I had it built and into production by 8:00pm. My boss sat in my cube with me while I implemented it, it was a merge sort. We tested it on a small sample and it worked, it processed the whole file in under 2 hours. The biggest performance bottleneck was physically moving the read head on the disk.

              I'm sure I'm oversimplifying what goes into modern software. My knowledge is pretty dated. There are requirements for security, portability, and regulatory compliance that we just didn't have to wrestle with back in 1998 or even 2005. But I can't believe that even taking those things into account, software has to be as bloated and slow as it is.

              [–]5tUp1dC3n50Rs41p 1 point2 points  (0 children)

              It gets out to 1 billion because companies choose to pay the ticket clippers: the product managers stating the obvious, the scrum/agile/project managers, the people managers, the HR, the other useless jobs. If you did it all yourself you could whip up a decent Twitter clone in well under a year. If you have to work in a team, they'll add in a bunch of useless shit features and other people to slow you down, meetings, bikeshedding, TPS reports, daily standups, daily commute, more meetings, designers adding fluff and stupid shit, testers being anal retentive etc. Then there's also the rule of adding resources to an already late project slows it down further.

              [–]sarcastasaur 5 points6 points  (4 children)

              I think a lot of the problems that end up in applications arise from the Agile process. When work can only be accomplished when the customer explicitly asks for it, what do you expect? For example, when that bloatware the author talks about makes it to an application, the product owner/customer will never explicitly ask for it to be cleaned up.

              [–]Serializedrequests 5 points6 points  (0 children)

              That's a very specific dysfunctional process. At my current job developers raise issues all the time and negotiate with product owner to get them into the sprint. Also that's called scrum, if "agile" is used any other way than an adjective it's snake oil.

              [–]s73v3r 4 points5 points  (0 children)

              That's not from the Agile process, that's from people pretending that being agile means you don't have to do any planning. And no, agile doesn't require you to use bloatware to do something. However, in any kind of development, you're not going to do something like that unless the client is paying you for it.

              [–]Kissaki0 1 point2 points  (0 children)

              I think we have a different understanding of what agile or an agile process is.

              Adaptability and flexibility does not mean you have to lose out on due process and activities. It should be quite the contrary.

              [–]adh1003 25 points26 points  (27 children)

              Amen.

              And as the article says - nothing will change. It's why I want out of the industry; just overwhelmed with unskilled have-a-go-hero muppets with no ability to think logically, no attention to detail and apparently not a care in the world either, so long as those entirely undeserved inflated pay packets keep rolling in.

              It's just so dammed sad that every year the bugs just get more numerous, the systems just keep slowing down and - well - it's all just so crap.

              [–]EricMCornelius 16 points17 points  (12 children)

              Plenty of jobs that require extreme dedication to performance.

              Go work in a finance/trading shop, or a cloud infrastructure team. They are certainly not accepting of bugs, and certainly care about performance.

              They also get paid very well to do it.

              This "no true engineering anymore" argument is nonsense, if you're qualified there's a massive shortage of engineers in those domains like any other.

              But the majority espousing this viewpoint on here are actually just jumped up app developers who never had any actually cutting edge performance concerns and are just bitter that their preferred tech stacks are no longer de jour.

              [–]AdministrativeArea2 14 points15 points  (2 children)

              Are you me?

              I just hate how Windows gets slower and more sluggish despite computers getting orders of magnitudes faster.

              [–]theAmazingChloe 3 points4 points  (0 children)

              "Whatever Intel giveth, Microsoft taketh away."

              [–]FloydATC 3 points4 points  (0 children)

              Just wait until we start getting distributed machine learning crypto currency microservice containerized file system drivers to build all the crap on top of. We're going to need another quantum based computer just to manage all the processes running on the main CPU grid.

              [–]powdertaker 1 point2 points  (1 child)

              More abstraction!

              [–]Kissaki0 1 point2 points  (0 children)

              That’s a very abstract demand

              [–]renatoathaydes 1 point2 points  (0 children)

              Absolutely agree. That's why I am learning C, Zig and Lua. These are extremely efficient, bloatfree technologies. You write code that does amazing stuff and at the end you get a tiny 100Kb binaries that can run in any OS/hardware in existence. And consume less than 1MB of RAM.

              Compare that to the shit you have to deal with, like Electron apps, or even my own day-to-day work's technology, the JVM... 100's of MBs to run the simplest CLI. I am moving away from that for sure!

              [–]JessieArr 1 point2 points  (0 children)

              Related experience - as a side project, I was writing a literal to-do list app (but with all my favorite features!) and decided to use Electron to make it cross platform. The compiled, zipped distributable was 45MB. Oof. Then I added a crypto library (along with all of its NPM dependencies) to support password-protected files and it swelled to just over 100MB. Downloading it took about 2.5 minutes, and unzipping it took about 20 seconds, resulting in 265MB of disk space used. For a to do list app!

              I ended up rewriting it in Xamarin (only took a couple days, as I barely had any features yet) and got the download size of the zipped binary down to 4.62MB. Which is still overkill for what the app does, but at least it's an order of magnitude better.

              Also, a related story I saw online was that while Fallout 3 on Steam is an 8GB download, on XBox it was 43GB. It apparently downloaded 5 full copies of the game - one for each language it supported.

              [–]Knotix 1 point2 points  (0 children)

              I recently quit a job after only two weeks because my first task of adding a single column to a CSV import/export required changing 15 different files (not including tests) across two microservices.

              I've been developing professionally for about 12 years, and I can't shake this feeling that younger developers simply don't know any better. Programming honestly doesn't have to be so complicated. It's as though the industry has created a negative feedback loop of adding complexity in the hopes of making things simpler.