Comment by mrkeen
4 days ago
I agree that software becoming worse (in some sense) but I don't blame AI.
My experiences as a user haven't really changed. Streamers fail to cast to TVs. Browsers are devices which reliably and efficiently propagate red console text and 500s from companies to you. I still see bluescreens on public touchscreens.
Uncle Bob nailed one reason why the industry isn't getting better: the growth of programmers is exponential, such that half of all programmers have less than n years experience (5?).
I offer two additional reasons:
Firstly, you hone your skills doing individual algorithms on a single thread, where it's OK to get it wrong and change it as many times as you like.
When you get a job, you don't even realise you're in a distributed system and the getter/setter model you practiced on is woefully inadequate for interacting with partner systems, cqrs, event-sourcing, auditability, idempotency or whatever else is required.
In short, 10 years of practicing writing for-loops and data-structures will not translate into building a system that customers can access via their phone and multiple tabs of a browser, at the same time as a database schema is being updated.
Secondly, while I don't think there is any realistic alternative to agile development, it seems that nontechnical POs have captured the software lifecycle. 'Focus on happy path only, for the MVP' is how you build buggy software. Good developers can learn that this will guarantee the need for a rewrite in the future, but POs never will.
It seems like the languages have been increasingly targeting the beginner segment (C++ -> Java -> JS -> Python), while the tasks have been getting more complicated (b2b distributed systems, 24/7 uptime, millions of users, resistance to hackers, machine learning, etc.)
> 'Focus on happy path only, for the MVP' is how you build buggy software. Good developers can learn that this will guarantee the need for a rewrite in the future, but POs never will.
And then when the MVP is done, it magically becomes the shippable product. Then just when the team is getting to grips with how to improve the product, management does a reshuffle and moves teams around. "EXCITING NEWS GUYS, congratulation to Jimmy Whatevs for being promoted to SENIOR Director, he will now head-up the cross-functional-operations team which will be folded under the product-support division."
> And then when the MVP is done, it magically becomes the shippable product
There is a reason for this: no one cares about bugs. Cramming down features for sales to close the deals is all that matters.
Ran into a bug? Who cares, people will just refresh the page or restart their computers. Average consumers already treat their computers like appliances, they happily wait 15 minutes for a page to load and are willing to swim in an ocean of ads.
If we want quality software, it has to be tied to the bottom line somehow. So far, it doesn't seem to be the case.
Product guys always optimizing for green status reports over actual working products that please customers.
and software devs think their direct deposit every 2 weeks will always just magically appear.
/i'm an old developer but most have no clue their paycheck comes from actually selling things and not just from typing on the keyboard.
1 reply →
> Secondly, while I don't think there is any realistic alternative to agile development, it seems that nontechnical POs have captured the software lifecycle. 'Focus on happy path only, for the MVP' is how you build buggy software. Good developers can learn that this will guarantee the need for a rewrite in the future, but POs never will.
100% agreed on ProductManager-ism/MVPitis is a cause of so much of this.
One can "do agile" a bit less literally & stupidly.
For a lot of software infra or even user facing apps, you really can plan out more than a sprint or two. This might be the MVP, but there is prior art in the space / competitors / devs with experience on the team. You probably should think about what the app should be capable of 3/6/12 months out.
When you follow a GPS for directions, you generally take a look at the overview first, make sure it's not driving into a lake or taking you to a similar address in another state. My car even shows me the next 3 steps on the path as I go, I like that.
Agile should not mean blindly "take 1 step and only then contemplate what step 2 to take once you complete that 1 step". And yet that is how MANY shops implement it in practice.
They made programming so simple any idiot could do it. So they do.
Uncle Bob has fully embraced AI and is risking becoming part of the problem these days.
Uncle Bob already became part of the problem by some of the stuff he wrote in Clean Code (like using mutable instance fields instead of method parameters). Luckily he isn’t perceived as very relevant anymore.
This is so odd.
It's not that I disagree without you about mutable fields vs params, but the industry so disproportionately on the other side of that issue that I'm surprised this objection is raised as often as it is.
Bring it on! Let's have more persistent data structures in standard libraries. Construct a Map by folding new key-vals onto another (possibly) empty Map.
(Rather than creating an empty map and then mutating its instance fields until it's full)
Or ever. If we want to some colleague to tell us what is good code and what isn't, can we please pick someone who at least once demonstratably delivered good software? Bonus points if it was a group effort, and if it was on time.
Common for all these "industry leaders" is that they all write books and give speeches. I'd rather listen to someone who designed successful software such as git or OpenSSH than someone who designed a salary system in the 90s which, it turns out, was scrapped two years later for being a mess. Giving yourself a stage name is not a merit in itself.
There is something to be said for actually understanding the problem first. Did we learn nothing from the TDD nonsense in the 00s?
The famous InfoQ sudoku software design example was chronicled on HN here and should be required reading for anyone who cares about clean code in practice:
https://news.ycombinator.com/item?id=3033446
4 replies →
> it seems that nontechnical POs have captured the software lifecycle
Yes, this dynamic has indeed been screwed up in many teams!
In my perspective, you can’t be a good product manager for a technical product without being somewhat technical yourself. You simply won’t understand your product well enough.
The only dynamic where that works is if the product manager acts more as a supporter and challenger to a team lead by an EM or technical lead, but then product manager is probably not the right title.
I generally agree that software has been getting worse, and AI isn't the cause, necessarily, but certainly is accelerating the decay.
Maybe a corollary to the growth of programmers is that pride/artisanship in the work decreases. Bugs happen more when the engineers dgaf, or aren't as dedicated to the craft. Software was pretty solid when I was a teenager (I'm thinking Windows, MSN Messenger, Flash, CDs, general web usage), complaints about tech/bugs weren't as common (or when they did happen, they were major, like BSOD). But I could just be romanticizing the past... idk.
In any case, say we were master woodworkers and we took pride in handcrafting great beds, but now the machines can make beds 150% faster at a 70% defect rate. There's 3 new problems: 1 is obviously that 30% of beds are shit, 2 is that woodworking as an industry is on the decline (expertise vacuum), and 3 is that the master woodworkers are disillusioned, their motivation and utility is decreased.
I believe that in time, the beds will get better, sure (the machines will improve). But in the meantime, huge numbers of people get shit sleep.
As an old greybeard now, you're romanticizing the past.
Past software was just as horrible, we just tended to use it for less things and incorporated its failures into our lives transparently. We'd reboot Windows every day so problems wouldnt stack up. We'd use less of the features, and use far less multimedia components like video and sound in the software. Flash was always a giant insecure piece of crap, it may have been better than other similar software but its issues were legion.
I'd argue that past software was horrible in a different kind of way, that it got better at some point, and now it's getting worse in a different kind of way. Yes, flash and Windows 98 was crap, but now vibe-coded apps are also crap.
Artisanship takes a back seat to the business peoples demands, and the business oriented people have been melding with software people for decades. Still, classes of bugs we used to have all the time are not very common anymore.
But watching large software projects fail over and over again, even when craftsmanship is demanded, often times the only way that good stuff gets in is the unpaid heroics of developers passionate about the project, who want it to be good. There’s so… little space for that nowadays, because there is so little stability in people’s lives.
Yeah. Maybe to add to that: I like my current job, and I consider myself a steward of the codebases that I'm a stakeholder in (I want it to be good).
There's little space for stewardship when LLMs induce psychosis and learned-carelessness in peers, so even though I'm here, I'm still motivated, and I'm still trying to stop crappy software (usually in code review), it feels like it is going to be a losing battle in the long run. The point being that "so little stability" with respect to financial stability may not necessarily factor- stability is threatened from all angles (code, motivation, fatigue, identity, etc).