Remix.run Logo
__MatrixMan__ a day ago

I'm all for pushing back against "let's not make perfect the enemy of good." I hear that all the time in reference to software that is usually quite bad, and often a little evil to boot--nothing good anywhere in sight except some poor schmuck trying to find a way to make their job something worth taking pride in.

I'm not sure I agree that systems are products though. The product mindset is toxic. It means that you've got goals which are independent of the user's goals (typically to make money, which sometimes means doing something dastardly to the users on behalf of the shareholders).

All the best software is more in the "tool" category and less in the "product" category. Usually it's made by the users, only bothers with solving problems they have, and has no ulterior motives.

KaiserPro 7 hours ago | parent | next [-]

Its about pragmatism. The problem is that a lot of software engineering tends to be not about building a product to service the buisness need.

Lets be honest, a lot of the time engineering decisions are made because "it would be cool to use x" rather than "this is the fastest path to achieving business goal z"

"over engineering" in a lot of cases is just either engineering gate keeping "oh you don't know how to do x properly, its soooooo much more 'performant' than y" or design by CV "lets use kafka, k8s, mobile app, AI, RAG" etc etc etc.

in 99% of cases, the architecture really doesn't matter that much, you product is never going to need what ever fancy system you put in. Mainly because people over estimate scale.

The thing that matters is that the customer is able to use it, and know how to use it. Everything else is almost irrelevant.

elmer2 5 hours ago | parent [-]

Most engimeering decisioms aren't made my engineers. Many times, the goalpost keeps moving while the deadline stays the same.

The end result is cutting corners and perfection is never even a thought.

bch 18 hours ago | parent | prev | next [-]

> “let's not make perfect the enemy of good."

Nuanced, but I’ve heard “don’t let perfection be the enemy of completion”, which is real in the cases of not shipping because one is constantly polishing/perfecting, or, as I heard sitting beside phk[0] at BSDCan commenting on rejecting some environmental sensors into FreeBSD, something to the effect of “We need ‘good’, not ‘good enough’.”, which draws a line at accepting janky “solutions” that are architecturally weak, or otherwise look obviously problematic.

[0] https://people.freebsd.org/~phk/

ChrisMarshallNY 13 hours ago | parent [-]

I always thought of that as “yak-shaving,” or “bikeshedding.”

Quality takes longer. Sometimes, significantly longer, for many reasons. That’s why something top-shelf, costs so much more than commodity, when it doesn’t seem to have much more, in the way of features.

Many orgs aren’t interested in spending that much extra time on it (which is their prerogative). The customer base tends to be smaller, and a lot more fickle. It’s really difficult to make a living, doing top-Quality work.

Source: I worked for many years, for a company known for top-shelf stuff. I’m quite familiar with Quality as an everyday feature.

bch 12 hours ago | parent [-]

I love the social/cultural aspects of our engineering discipline.

> I always thought of that as “yak-shaving,” or “bikeshedding.”

I think of yak-shaving as ending up (by lack of discipline, or perhaps out of necessity) working on some supporting aspect of a supporting aspect of a supporting aspect... in service of the original task.

So, a potential time suck, for sure, but "perfection is the enemy of completion" doesn't have to be that deep - if we're throwing out more clever phrases and war stories - another phrase that comes to mind about just "polishing" and insisting it's not good enough to ship yet is it's (slightly NSFW)

"just like masturbation - it feels good, but you're only f*cking yourself". You need to ship.

Bike Shedding I think of as social - nearly Peter Principle in practice - everybody thinks they've got something to contribute to the construction of the bike shed because it's a thing that's easy to manage, and people want to be helpful and/or make a mark.

ChrisMarshallNY 3 hours ago | parent | next [-]

Sorry if your reply got dinged (looks all right to me, now). It was spot-on.

I think of "Yak-Shaving" as working on peripheral aspects of the project, to the detriment of the main path. Easy to justify, as they are "working on the project," but maybe not helping to significantly advance it.

I think of "Bikeshedding" as working on another aspect of the project (or a completely different project), because we want to (often, because it is more approachable or pleasant). This often becomes a problem, when the project is getting near shipping, as there's a ton of really boring stuff that needs to be done.

"Perfecting," on the other hand, can look like either of the above, but is, indeed, working on the main path, and advancing the project; just maybe not quickly.

fingerlocks 3 hours ago | parent | prev [-]

Not sure why you were flagged to death, I had all the same thoughts. Vouched.

These phrases have a different meanings and it’s important to highlight them

axus a day ago | parent | prev | next [-]

Let's not make fixing bugs and backwards compatibility the enemy of shoveling out more features

Daishiman 36 minutes ago | parent | next [-]

You're saying it in jest but this is closer to the right answer. Features make you money. A large enough project has an infinite backlog. You will be unlikely to make much money from clearing out your backlog.

close04 a day ago | parent | prev [-]

The expression is “the enemy of good” not “the enemy if something” so in the end it’s about defining “good”. It varies with context. What’s good, move fast and break things or go slow and considerate? Is risking bugs worth it to launch a feature? How important is that feature? How important is it to have it now vs. later? And how do you reconcile it when what’s good for you is bad for me?

moritzwarhier 21 hours ago | parent [-]

It's just the same about the definition of "perfect".

Fixing critical bugs is not perfectionism. Fixing low-impact bugs by making high-risk, well-intentioned changes might be.

stouset 21 hours ago | parent | prev | next [-]

The number of times I've heard that phrase used to justify shipping absolute crap utterly dwarfs the times it's been used to prevent over-engineering something that's already in a good state.

In a thirty year career of software engineering, I haven't once come across one of these mythical perfectionists that everyone is constantly retelling cautionary tales of, who endlessly rewrites perfectly serviceable software and never releases it. I have, however, worked at multiple companies that have collapsed under the weight of their unmaintainable spaghetti tech stacks.

patrakov 18 hours ago | parent | next [-]

I was one of those initiators of a rewrite. And I was facing a real problem: the codebase was in C, all C developers except me left, I was going to leave too, and both our HR department and an external consulting firm failed to find a competent C developer to replace me.

So I said: screw performance, we are rewriting this thing into Go, as that's what our existing developers were willing to work with - with the intention of leaving when this would be done.

And the day I finally submitted my resignation letter, a competent C developer was found, and later I heard that the Go rewrite was scrapped.

malux85 20 hours ago | parent | prev | next [-]

> I haven't once come across one of these mythical perfectionists that everyone is constantly retelling cautionary tales of, who endlessly rewrites perfectly serviceable software and never releases

Oh, I have. A LOT! In my friend group theres at least 5 of these right now. They work day jobs (that they dislike), they try to build a side hustle but never get it off the ground because they endlessly rewrite perfectly serviceable software and never release, the reason is:

- they believe that running a startup only requires writing a good product

- they avoid releasing because thats "judgement day" and might flop

- they think if they code it "just right" a money Waterfall will open up magically like a lottery ticket win and be instant success

- they believe that because theres the occasional exception to these rules above, it will happen to them too (everyone thinks they are the special exception,) because thats easier than accepting building a successful business takes discipline, hard work, and doing the tasks you dont want to do.

You havent come across them because by definition they never release and they dont share (they are embarrassed it might fail) so theres thousands and thousands of them, grinding away under false assumptions. They enjoy the act of building (which is totally cool!) but think thats all there is to it. Convinced that just one more rewrite is the thing holding them back from success - because they'd rather rewrite than talk to users. Millions of people doing this, millions of dreams that will die, because /just one more rewrite/

Just because you havent seen them, doesnt mean they aren't there

ryandrake 19 hours ago | parent | next [-]

I'm just like that, but minus the expectation of release/money/success. To me, the building and programming itself is the reward, and I have no motivation or desire to release anything I work on--or any belief that it would/should make money for me. To me, the hours spent fine sanding down and polishing my code, always approaching but never achieving perfection, is its own reward.

malux85 9 hours ago | parent [-]

I would say thats a different thing entirely, an amateur in the original sense of the word

Latin amator, French amateur, means lover.

In this sense, it means somebody who is doing something because he/she loves it, not as his/her profession. It is not a large semantic shift to infer that he/she is not as skilled.

stouset 12 hours ago | parent | prev [-]

I couldn’t care less about solo developers who never release their hobby projects. The cautionary tales are always about potential coworkers, and as far as I can tell that stereotype simple doesn’t exist in the business world.

lazyasciiart 10 hours ago | parent [-]

I have not just worked with but had code rejected by these people. “Don’t fix that bug, we are going to write an entire new structure that will make it irrelevant”, “don’t upgrade that library, we are going to rewrite our code to not use it”, “don’t improve exception handling, fix all the bugs that throw bad exceptions”. Not at all surprisingly, all of those planned upgrades took at least two years after my attempted improvement was rejected (the library I didn’t upgrade stuck around for six years).

imtringued 10 hours ago | parent | prev [-]

I'm that perfectionist and it is constantly preventing me from shipping. Basically everything I'm working on requires me to cut losses at some point because it would take twice or three times as long if done perfectly and there is no guarantee that it is actually perfect in the end.

I don't really feel it collapsing under the weight of unmaintainable spaghetti tech stacks, I'm mostly thinking that writing the missing features of the tech stack would require months of work and hard thinking that in the end might simply get rejected and now I would be stuck maintaining it myself so nothing has changed other than that there are even more things to maintain.

All of this for the sake of clean architecture that seemingly has no impact on users in the end... Like the users complain about completely different things.

socketcluster 17 hours ago | parent | prev | next [-]

Yes, agreed, that quote is not as relevant to software development. Some would make the case that software isn't good unless it's perfect. Engineers will use the word 'correct' (e.g. correctness); and by that, they mean; is it perfect... And it's not wrong to demand it because the smallest gap can be a critical security vulnerability.

mtweak a day ago | parent | prev | next [-]

I'm also wondering if "perfect" and "good enough" are not really as important now vs. when a team of software engineers had to spend sprints implementing features. The rate of iteration is faster now, the rate of regenerating entire code bases is days. We can perhaps over engineer /more/ today than before.

jaggederest a day ago | parent [-]

The real challenge is reigning in the size and complexity of the codebase if you're using AI to generate it. I have a bunch of skills (YAGNI / KISS inspired) but it still requires a significant amount of human effort. Knocked down about 9000 lines of cruft this month and I know there's another 10k in there sitting around.

gjvc 12 hours ago | parent [-]

"reining"

BloodyIron 15 hours ago | parent | prev | next [-]

So is a screwdriver a tool or a product?

I think you're getting caught up on nomenclature and limited sample sizes.

__MatrixMan__ 13 hours ago | parent [-]

What it is to you depends on if you want to sell a screwdriver or if you want to drive a screw.

If you're looking for somebody to design a screwdriver for you, you're better off with the guy who wants to drive a screw.

lazyasciiart 10 hours ago | parent | prev | next [-]

That’s a nice thought, but who are the users who plan to write their own air traffic control tool?

dasil003 a day ago | parent | prev | next [-]

I get what you mean about the conflict of interest for consumer software, but I don’t think a product mindset is inherently toxic. It’s more a function of where you are in the enshittification cycle.

smaudet 21 hours ago | parent [-]

Products tend to be someone else's tool.

Like you hint at, though, a tool is useful immediately and without end (at a particular task - windows operating systems remain useful despite whatever current version is being sold), the product is often an attempt to continuously derive value from the tool (attach a time limited license, offer "upgrades", new features, etc.).

A service is more like a product than a tool - selling data is not something that a tool can (by itself) provide (unless you accept virtual or test data).

Attaching a product mindset to a tool then becomes a matter of complication/value reduction, vs a product mindset to a consumable, like a game, or dataset, where the value is at least constant, if not growing over time.

I.e., I'm not sure I agree that the "enshittification cycle" is the variable here - even in the age of AI the value e.g. of a stock image service is constant or growing, even if the LLM generation process dilutes the market.

__MatrixMan__ 21 hours ago | parent [-]

> Products tend to be someone else's tool

I like this. The question is really whether you're facing the "business end of the stick" or not (although stick isn't quite right here, because not all software has both ends).

sublinear a day ago | parent | prev [-]

You've definitely used non-toxic and thoughtful products or you wouldn't be making such a distinction.

You are throwing the baby out with the bathwater by retreating to "tools". If you want to stop the enshittification, this is not the way. You're just opening yourself up to new scams. i.e. AI tools, political agendas, etc.

Better products are just better. Demand them.

__MatrixMan__ a day ago | parent [-]

When I think of software that is minimally tainted by productism, these come to mind:

- linux

- nix

- nushell

- helix

Are these products... at all? Do the open me up to new scams? I don't think so.

I'm not in a position to demand anything from the people who make these things. If they were subject to demands, their craft would be tainted by compromises made in acquiescence to those demands, and I'd probably be less enthusiastic about their software (because presumably, my tastes don't align with whichever others are also in a position to be making demands).

Supply and demand are well and good if what you're after is barley. But when you compare what there's demand for with what's being supplied re: software, there appears to be no correlation.

We gotta stop selling picks and shovels and start learning to be miners who have good taste in picks and shovels and the ability to make and remake our tools as needed. The disconnect is creating a hell for our users.