Most active commenters
  • SupremumLimit(3)
  • jjav(3)

←back to thread

Understanding how bureaucracy develops

(dhruvmethi.substack.com)
192 points dhruvmethi | 16 comments | | HN request time: 1.379s | source | bottom
Show context
sevensor ◴[] No.41889622[source]
When you treat every negative outcome as a system failure, the answer is more systems. This is the cost of a blameless culture. There are places where that’s the right answer, especially where a skilled operator is required to operate in an environment beyond their control and deal with emergent problems in short order. Aviation, surgery. Different situations where the cost of failure is lower can afford to operate without the cost of bureaucratic compliance, but often they don’t even nudge the slider towards personal responsibility and it stays at “fully blameless.”
replies(13): >>41890119 #>>41890303 #>>41890339 #>>41890571 #>>41891032 #>>41891181 #>>41891213 #>>41891385 #>>41891417 #>>41893574 #>>41894181 #>>41897147 #>>41903458 #
1. SupremumLimit ◴[] No.41890339[source]
This is a wonderfully insightful comment!

I’ve encountered a similar phenomenon with regard to skill as well: people want to ensure that every part of the software system can be understood and operated by the least skilled members of the team (meaning completely inexperienced people).

But similarly to personal responsibility, it’s worth asking what the costs of that approach are, and why it is that we shouldn’t have either baseline expectations of skill or shouldn’t expect that some parts of the software system require higher levels of expertise.

replies(2): >>41890960 #>>41891632 #
2. jiggawatts ◴[] No.41890960[source]
There is the reason Haskell or F# are relatively unpopular and Go has a much wider footprint in the industry: high expertise levels don’t scale. You can hire 100 juniors but not 100 seniors all trained up in the same difficult abstractions.

Conversely, one skilled senior can often outperform a hundred juniors using simpler tools, but management just doesn’t see it that way.

replies(2): >>41891423 #>>41893615 #
3. SupremumLimit ◴[] No.41891423[source]
Indeed, specialist knowledge is a real constraint, but I think it’s possible to at least _orient_ towards building systems that require no baseline level of skill (the fast food model I guess) or towards training your staff so they acquire the necessary level of skills to work with a less accessible system. I suspect that the second pathway results in higher productivity and achievement in the long term.

However, management tends to align with reducing the baseline level of skill, presumably because it’s convenient for various business reasons to have everyone be a replaceable “resource”, and to have new people quickly become productive without requiring expensive training.

Ironically, this is one of the factors that drives ever faster job hopping, which reinforces the need for replaceable “resources”, and on it goes.

replies(1): >>41891829 #
4. nox101 ◴[] No.41891632[source]
I'm not sure I understand this position. What I hear is "obscure hard to understand code is good" but as others have said, code will be maintained and modified for years to come and not by the original author so making it easy to understand and follow is usually the recommendation. Even the original programmer will usually find it easier to understand their own code months or years later

Did you mean something else?

replies(2): >>41891794 #>>41894398 #
5. stoperaticless ◴[] No.41891794[source]
Extreme A: every team member is litterally five years old (born 5 years ago)

Extreme B: every collegue is required to read and be able to recite x86, C specifications, postgre manual, and must have IQ 190+.

What is obscure or hard to understand is subjective.

6. stoperaticless ◴[] No.41891829{3}[source]
Also there is no easy way for management to know if somebody has required level of skill.
replies(1): >>41892471 #
7. fuzzfactor ◴[] No.41892471{4}[source]
Which is why the most important qualification for a manager is to always consistently put in way more effort than the average worker, and be very, very good at doing things that are not the least bit easy at all.
8. jjav ◴[] No.41893615[source]
> Conversely, one skilled senior can often outperform a hundred juniors using simpler tools, but management just doesn’t see it that way.

Management is correct, if that's the question.

In some very rare bleeding edge cases it is true. Everyone wants to think their company is working on those areas. But here's the truth: your company (for any "you") is actually not.

If you're writing code that is inventing new techniques and pushing the hardware to limits not before imagined (say, like John Carmack) then yes, a single superstar is going to outperform a hundred juniors who simply won't be able to do it, ever.

Asymptotically close to 100% of software jobs are not like that (unfortunately). They're just applying common patterns and libraries to run of the mill product needs. A superstar can outperform maybe 3-4 juniors but that's about it. The jobs isn't that hard and there are only so many hours in a day.

This is made worse today because neither quality nor performance matter anymore (which is depressing, but true). It used to be the software had to work fast enough on normal hardware and if it had bugs it meant shipping new media to all customers which was expensive. So quality and performance mattered. Today companies test everything in production and are continuously pushing updates and performance doesn't matter because you just spin up 50 more instances in AWS if one won't do (let the CFO worry about the AWS bill).

replies(2): >>41894776 #>>41894867 #
9. SupremumLimit ◴[] No.41894398[source]
Yes, I meant something else, and of course I'm not advocating for hard to understand code. However, as the sibling comment suggests, what's obscure or hard is relative.

The problem with indiscriminate application of "code has to be easy to understand" is that it can be used to make pretty much anything, including most features of your language, off limits. After all, a junior developer may not be familiar with any given feature. Thus, we can establish no reasonable lower bound on allowed complexity using such a guideline.

Conversely, what’s too simple or too difficult is very specific to the person. Somebody who’s coming to a junior developer role from a data science background might have no problem reading 200 lines of SQL. Somebody with FP background might find data transformation pipelines simple to understand but class hierarchies difficult, and so on. So the "easy to understand for anyone" guideline proves less than useful for establishing an upper bound on allowed complexity as well.

Therefore, I find that it’s more useful to talk about a lower and upper bound of what’s required and acceptable. There are things we should reasonably expect a person working on the project to know or learn (such as most language features, basic framework features, how to manipulate data, how to debug etc.) regardless of seniority. On the other hand, we don’t want to have code that’s only understood by one or two people on the team, so perhaps we say that advanced metaprogramming or category theory concepts should be applied very sparingly.

Once that competency band is established, we can work to bring everyone into the band (by providing training and support) rather than trying to stretch the band downwards to suit everyone regardless of experience.

replies(1): >>41903901 #
10. aleph_minus_one ◴[] No.41894776{3}[source]
> A superstar can outperform maybe 3-4 juniors but that's about it. The jobs isn't that hard and there are only so many hours in a day.

There do exist (I would even claim "quite some") jobs/programming tasks where superstars are capable of, but a junir developer will at least need years of training to be able so do/solve them (think, for example, of turning a deep theoretical breakthrough in (constructive) mathematics into a computer program; or think of programming involving deep, obscure x86 firmware trivia), but I agree with your other judgement that such programming tasks are not very common in industry.

replies(1): >>41895343 #
11. fcatalan ◴[] No.41894867{3}[source]
Programming doesn't happen in a vacuum, and experience and institutional knowledge can account for many orders of magnitude of performance. A trivial example/recent anecdote:

The other day, two of our juniors came to see me, they had been stumped by the wrong result of a very complex query for 2 hours. I didn´t event look at the query, just scrolled down the results for 10 seconds and instantly knew exactly what was wrong. This is not because I'm better at SQL than them or a Carmack level talent. This is because I've known the people in the results listing for basically all my life, so I instantly knew who didn´t belong there and very probably why he was being wrongly selected.

Trivial, but 10 seconds vs. 4 man hours is quite the improvement.

replies(1): >>41898071 #
12. ifyoubuildit ◴[] No.41895343{4}[source]
You don't even need to go to rocket science for this.

3-10 juniors can make a massive expensive mess of a crud app that costs $x0k a month in amazon spend and barely works, while someone who knows what they're doing could cobble it together on a lamp stack running under their desk for basically nothing.

Knowledge/skills/experience/ can have massive impact.

replies(1): >>41897117 #
13. jjav ◴[] No.41897117{5}[source]
> 3-10 juniors can make a massive expensive mess of a crud app that costs $x0k a month in amazon spend and barely works, while someone who knows what they're doing could cobble it together on a lamp stack running under their desk for basically nothing.

Yes! Absolutely. It will be faster and more reliable and an order of magnitude (or more) cheaper.

Alas, I'm slowly (grudginly and very slowly) coming to terms accepting that absolutely nobody cares. Companies are happy to pay AWS 100K/mo for that ball of gum that becomes unresponsive four times a day, rather than pay for one expert to build a good system.

14. jjav ◴[] No.41898071{4}[source]
> Trivial, but 10 seconds vs. 4 man hours is quite the improvement.

Sure. But now try sustaining that impact multiplier every minute, 8 hours a day for a year.

replies(1): >>41903576 #
15. potato3732842 ◴[] No.41903576{5}[source]
That's a red herring. It's a question of how open that multiple has to show up to make one approach or the other the winner.
16. jeegsy ◴[] No.41903901{3}[source]
> Once that competency band is established, we can work to bring everyone into the band (by providing training and support) rather than trying to stretch the band downwards to suit everyone regardless of experience.

Great point. This would also apply in the context of DEI hiring initiatives.