Hacker News new | ask | show | jobs
by simianwords 99 days ago
You are repeating the same thing. You think having good maintainable good is important - more than the first camp.

That does not mean you are correct. This mindset is useful only in serious reusable libraries and open source tools. Most enterprise code involves lots of exploring and fast iteration. Code quality doesn’t matter that much. No one else is going to see it.

When the craft coders bring their ideology to this set up, it starts slowing things down because they are optimising for the wrong target.

5 comments

When the code is low-quality, you can’t reason well about it, can’t reason well about what changes to apply and what their effects will be, can’t reason about what the outcome will be when making changes to the context (inputs, environment) the code is run it. Instead everything becomes an experiment on a black box or gray box, whose behavior you can’t well predict in advance.

Engineering is the task of making things behave predictably and reliably. Because software is malleable and rarely “finished”, this applies to changing software as well.

I’m pretty sure that there is more than one divide regarding AI among developers, but one of the dividing lines concerns the predictability and reason-ability of the tools and the code. AI fundamentally lacks these qualities.

> Most enterprise code involves lots of exploring and fast iteration.

And when the code base is 250,000 lines of garbage all the way down, this is impossible. The projects where I’ve had free rein to kill tech debt and SDLC footguns with impunity have all been the ones where velocity maintained or increased over time. All the rest have ground to a halt.

There’s value in customers believing you’ll get there soon and the code will actually work. They can be patient if you have an air of competence. But they will switch to some other clown car if it’s cheaper than your clown car.

> Code quality doesn’t matter that much. No one else is going to see it.

This is just false for anyone who has worked in the industry for any meaningful amount of time. Do you seriously never encountered a situation where a change was supposedly easy on the surface, but some stupid SoB before you wrote it so bad that you want to pull your hair out from trying to make it work without rewriting this crap codebase from scratch?

at least where i have worked, you need to identify the context. certain projects require good readable code and certain projects require you to iterate fast and explore.

in my experience very few projects were serious enough that required such scrutiny in code.

Sounds like you’ve never had a prototype become foundational infrastructure before, or dealt with someone else’s.
I have many times and if you spend too long over architecting a prototype you start to get annoyed looks and tons of questions from PMs who just want something that looks right today (we can fix it/optimize it later)
you can always change it later. this is exactly the dogmatism i'm speaking about - you need to prioritise pushing things. the clean up can come later.

ironically it is your camp that advices to not use microservices but start with monolith. that's what i'm suggesting here.

> you can always change it later. this is exactly the dogmatism i'm speaking about - you need to prioritise pushing things. the clean up can come later.

Everyone that says this has not been the one that had to fix the code later. They have already moved to the next jobs (or have been fired). Engineers do know the tradeoff between quality and speed, and can do hack if that’s what needed to get the project to the finish line. But good ones will note down the hack and resolve it later. Bad ones will pat themselves in the back and add more hacks on top of that.

> You can always change it later.

People seem to think that technical debt doesn't need to be paid back for ages. In my experience bad code starts to cost more than it saved after about three months. So if you have to get a demo ready right now that will save the company then hack it in. But that's not the case for most technical debt. In most cases the management just want the perception of speed so they pile debt upon debt. Then they can't figure out why delivery gets slower and slower.

> ironically it is your camp that advices to not use microservices but start with monolith. that's what i'm suggesting here.

I agree with this. But there's a difference between over-engineering and hacking in bad quality code. So to be clear, I am talking about the latter.

I think your target is the wrong target myself. Now what?
If more people think like you we won’t have jobs because company won’t make profit
If people think like you we won’t have jobs because everyone would fucking die when cars, MRI machines, nuclear power plans and ICBMs, airplanes, infra, payments start misbehaving. Now what?
this is a category error that i specifically called out in my comment.
What is the category of code that does not need quality? You need it to not interact with real world, with people's finances, with people's personal data. Basically it's the code that only exists for PMs to show to investors (in startups) and VPs (in enterprise), but not for real users to rely on.
> What is the category of code that does not need quality?

For example there exist "applications"/"demos" that exist "to show the customer what could be possible if they hire 'us'". These demos just have to survive a, say, intense two-hour marketing pitch and some inconvenient questions/tests that someone in the audience might come up with during these two hours.

In other words: applications for "pitching possibilities" to a potential customer, where everything is allowed to be smoke and mirrors if necessary (once the customer has been convinced with all tricks to hire the respective company for the project, the requirements will completely change anyway ...).

Where?

> That does not mean you are correct. This mindset is useful only in serious reusable libraries and open source tools. Most enterprise code involves lots of exploring and fast iteration. Code quality doesn’t matter that much. No one else is going to see it.

Here? Most of those that I’ve listed IS boring enterprise code. Unless we’re taking medical/military grade.

fair, you have presented specific niche where the ~quality~ correctness is important in enterprise - not just libraries.

but most people aren't writing code in those places. its usually CRUD, advertisement, startups, ecommerce.

also there are two things going on here:

- quality of code

- correctness of code

in serious reusable libraries and opensource tools, quality of code matters. the interfaces, redundancy etc.

but that's not exactly equal to correctness. one can prioritise correctness without dogmatism in craft like clean code etc.

in most of these commercial contexts like ecommerce, ads - you don't need the dogmatism that the craft camp brings. that's the category error.

> Code quality doesn’t matter that much. No one else is going to see it.

You seem to be claiming that enterprise shops never adopted code reviews. Interesting if true.