754 karma · joined September 4, 2012
This seems to be getting a lot of attention. I couldn't agree more, we assume linearity all the time because reasoning non-linearly is exceptionally difficult. Yes we can do it sometimes, but it is not the default. Reasoning linearly has its flaws, and we should recognize we are making an imperfect decision, but it is still extremely useful.
And they will misunderstand you, turn around and butcher the explanation to some higher up, indirectly claiming credit for your work as the messenger of its result. If something goes wrong with the project, they'll definitely make sure to emphasize your involvement in the failed initiative, strategically distancing themselves.
If you do what this guy did and are wrong, it looks like yes obviously it was the same thing and you should have DRY right from the start.
If you DRY from the start and are wrong, someone writes a blog post about not DRYing from the start.
It's a bet on which mistake is worse, because you will be wrong sometimes. DRYing from the start IMO is a worse mistake than duplication.
Reliability:
* Not null fields in a distributed system are a lie. Clients write code assuming something is not null, so a query that fetches data from N sub systems breaks the entire page when one of them fails.
Performance:
* People say you only need to fetch just what the page wants but in practice clients create re-usable fragments for every object in the system and use it everywhere. Any time a new field is added, every api call fetches that new field adding latency everywhere
* clients are unaware of the underlying topology and add fields that are usually harmless but have bad tail latencies.
* The completely generic nature of the API means the backend can't optimize performance for a specific page. E.g. if one API has nasty tails, but it's not that important for this page, the backend could time it out at some reasonable value instead of holding up the entire request
Left to their own devices a lot of engineers will go to enormous lengths for either marginal improvements or changes that actively hurt. I can understand why leadership is skeptical of these investments because even for someone extremely technical, if you're not in the weeds everyday of that particular problem, it's very hard to know what's worth it
Have you read any of the books on rickover? I can find three:
1. Rickover and the Nuclear Navy
2. The Rickover Effect: How One Man Made a Difference
3. Nuclear Navy, 1946-1962
Would love to know if you have a recommendation or anything else on rickover you'd recommend reading. This guy seems worth studying
Holding someone to a high standard seems like it requires frequently telling them that their work isn't good enough and they need to refine or redo it in some major way. How can people feel ownership while they're being frequently told their output isn't satisfactory? How do you balance firing people who can't perform without creating a culture of fear?
Official logs of problems can give you insight into how deep rooted and severe the issues are. Lack of documentation means there are problems but allows them to hide the depth of them. E.g. we can't know how many other door plugs were shipped without bolts