Live data from Hacker News

Suppose I wanted to kill a lot of pilots

historyofyesterday.com

81–90 of 178 posts

Re: Suppose I wanted to kill a lot of pilots

#81
“Happy families are all alike; every unhappy family is unhappy in its own way.”

Inverted problem solving, done naively, is an infinite task — you could kill all the pilots in infinitely and progressively improbable ways (e.g., use time-travel to kill someone in their chain of ancestry, or their pilot instructors, or the aircraft engineers, etc).

So inverted problem solving must identity the most probable modes of failure until their hypothetical resolution causes failure to becomes improbable.

This sounds a lot like unit tests, which in my experience are notoriously bad at correctly estimating probable modes of failure for complex units of functionality,

Contrast this to generative testing of simple units of functionality, which in my experience do in fact provide comprehensive coverage of failure modes.

Or contrast both of them to languages like Rust and Haskel which many claim to solve a set of discrete failure modes automatically by virtue of the limitations set upon problem solving itself.

It seems to me that it is better to set limits upon problem-solving that are known to often lead to failure rather than attempt to estimate the probabilities of an unknown infinite — i.e., identify types of failure modes across domains that have high failure rates and construct a framework of problem-solving that precludes those types.

This is done all the time in the form what I would call “worst-practices”. Cheating on your partner is almost always a bad way to increase marital happiness, and the framework of marriage excludes it (even “open marriages” require honesty as part of its framework).

Paul Graham puts cofounder disagreements at the top of his list of ways that startups fail — the most basic form of such failure being that cofounders disagree on whether to give up on their startup. Although there are infinite ways for cofounders to disagree, perhaps it is possible to proactively address the manner in which disagreements are identified and resolved before they become lethal. The only good solution I’ve seen to this problem is the advice to split equity equally — ensuring that the problem is more obvious and severe by amplifying its consequences.

This is similar to Rust — the consequence of a “poorly” written program is that it won’t run at all.

This is also why monopolies in America are sometimes broken up: a monopoly can succeed by failing, whereas a startup can only succeed by actually making something people want.

Perhaps a better framework for problem solving would be something like, Make Problems Catastrophic, or Burn Your Lifeboats, or Amplify Consequences of Failure.

It has always fascinated me that Leprosy doesn’t directly cause your body to fall apart — it indirectly causes failure by removing the feedback of pain. Without pain, we hurt ourselves unknowingly and profoundly.

Make Problems Painful?

Re: Suppose I wanted to kill a lot of pilots

#82
post #42

I first heard about this in the context of software project estimation. The author (forgotten to me) made the point that nobody has permission to think about disasters when estimating project completion time. So why not explicitly ask them to? "So now we have our estimate, what would cause us to miss it?" And in the course of giant monster attacks, you give people permission to talk about specific scenarios that are…

I think this is an excellent approach, and I try to do it myself. But YMMV for getting teammates to do it in a meeting - even with a generally supportive manager (not me, I'm just scrum master), there is just a psychological resistance. I don't think that they have a list in their heads and are simply afraid to share it, I'd guess that it requires some effortful imagination, and would be unpleasant, so things just get stuck. I'd love ideas for follow up prompts that might help with this.

Re: Suppose I wanted to kill a lot of pilots

#83
post #79

Earlier quoted context omitted.

If you are at war with your technology, your codebase will look like a battlefield. React and Redux require a functional, reactive mental model. If you approach it with an imperative mindset, you'll get a mess of a codebase. Unfortunately the popularity of React means it is used by people who know neither Javascript nor FP very well. And the popularity of Redux is even worse. In my opinion people should stay away fro…

> If you are at war with your technology, your codebase will look like a battlefield. That almost sounds like a criticism of people who developed React and Redux and went to war against their browser APIs.

Not really. Redux doesn't even touch Browser APIs as far as I know.

React uses a virtual DOM to avoid DOM unnecessary manipulation, which is slow and error prone. DOM manipulation could be seen as a week point of browsers, and by avoiding it, React is actually a very good ally.

Javascript is a dynamically typed language and offers quite a bit of functional programming functionality itself. React and Redux use that to their advantage, rather than insisting everything be modeled by classes.

Re: Suppose I wanted to kill a lot of pilots

#84

The basic premise of TIPS was that one could train engineers on solving problems, pretty much like martial arts trainers do: by exercising and learning tricks. Theory of Inventive Problem Solving nicely abbreviates as TIPS. That's how it has been known in the west for decades. ТРИЗ is a Russian acronym. TRIZ just replaces Cyrillic letters with equivalents. If the author digged a bit deeper, they would have known it a…

For what it’s worth, theory of inventive problem solving is not a very good translation of теория решения изобретательских задач teorija rešenija izobretatelʹskih zadač : as far as I can see, it parses as [ inventive [ problem solving ]] with inventive meaning something like “unconstrained by convention, prolific intellectually, embodying the spirit of invention”, for which the proper Russian is изобретательный izobr…

> (and doesn’t afford a snappy acronym)

TOSPOI even sounds Russian!

Re: Suppose I wanted to kill a lot of pilots

#85
post #42

I first heard about this in the context of software project estimation. The author (forgotten to me) made the point that nobody has permission to think about disasters when estimating project completion time. So why not explicitly ask them to? "So now we have our estimate, what would cause us to miss it?" And in the course of giant monster attacks, you give people permission to talk about specific scenarios that are…

Spot on. They used to call me 'Dr. No' because that is exactly what I would do, but it saved us tons of money so it was tolerated. We also actually delivered on time and within the budget but I'm sure it cost us contracts to more optimistic competitors.

On the flip side, I'm sure you retained more old business. And employees: trudging through pre-doomed projects was a major root cause of talent and motivation drain at most B2B places I've worked.

Re: Suppose I wanted to kill a lot of pilots

#86
post #76

Earlier quoted context omitted.

Because imperative programming in Javascript, even with OOP principles and patterns, generally leads to even more complexity and messiness. FP is now almost the norm in frontend engineering. Certainly in the React world. Immutability and side-effect-awareness is highly valued.

Thé irony being that JavaScript doesn't add anything that Smalltalk didn't already provide, yet we have all this OOP backslash and how FP is somehow better.

Well, Javascript is the language that is able to run everywhere, so that's what frontend engineers have to target. There is some more flexibility now with Webassembly...

If you are interested, look up Fable, Bolero, Elm, PureScript, ClojureScript, Grain...

Re: Suppose I wanted to kill a lot of pilots

#87
There’s a really interesting parallel here with evolution: exaptation. https://en.wikipedia.org/wiki/Exaptation?wprov=sfti1

This occurs when a trait that evolved to solve one problem also happens to solve (or almost solve) another problem — for example, perhaps feathers originally evolved for the purpose of keeping warm but also opened up an evolutionary path to flight.

Re: Suppose I wanted to kill a lot of pilots

#88
post #42

I first heard about this in the context of software project estimation. The author (forgotten to me) made the point that nobody has permission to think about disasters when estimating project completion time. So why not explicitly ask them to? "So now we have our estimate, what would cause us to miss it?" And in the course of giant monster attacks, you give people permission to talk about specific scenarios that are…

PI Planning in SAFe explicitly calls for this. Risks to the plan are called out in front of everyone and each is discussed to see if it can be mitigated (and who will own that mitigation). If anything happens due to one of those foreseen issues, everybody knew about it in advance and already discussed what, if anything, could have been done to prevent it as well as what action was actually taken. I love the SAFe / PI…

The tension I've seen at most places where this goes off the rails is due to mis-assigning responsibility.

PMs are responsible for keeping projects on schedule. Engineers are responsible for completing work.

Consequently, PMs are incentivized to compresses schedules, and engineers are pressured to do the same.

The end result is that "the people who do the work plan the work" goes out the window, because risks aren't fundamentally understood (on a technical nuance level) by PMs, so naturally their desire for schedule wins out whenever there's a conflict.

(That said, I've worked at shops that hew closer to how it it should be, and it works great. Current job just happens to be a dumpster fire of bad Agile)

Re: Suppose I wanted to kill a lot of pilots

#89
post #82
post #42

I first heard about this in the context of software project estimation. The author (forgotten to me) made the point that nobody has permission to think about disasters when estimating project completion time. So why not explicitly ask them to? "So now we have our estimate, what would cause us to miss it?" And in the course of giant monster attacks, you give people permission to talk about specific scenarios that are…

I think this is an excellent approach, and I try to do it myself. But YMMV for getting teammates to do it in a meeting - even with a generally supportive manager (not me, I'm just scrum master), there is just a psychological resistance. I don't think that they have a list in their heads and are simply afraid to share it, I'd guess that it requires some effortful imagination, and would be unpleasant, so things just ge…

There's a book called "how to decide" by Annie Duke that has some good advice on how to inspire this type of thinking.

For example, one of the ideas is the "doctor evil" or "imposter" game.

(1) Imagine a positive goal.

(2) Imagine that Dr. Evil has control of your brain, causing you to make decisions that will guarantee failure.

(3) Any given instance of that type of decision must have a good enough rationale that it won’t be noticed by you or others examining that decision.

(4) Write down those decisions.

Someone elses notes from this book: https://wisdomfromexperts.com/why-you-must-use-negative-thin...

Re: Suppose I wanted to kill a lot of pilots

#90
post #79

Earlier quoted context omitted.

> If you are at war with your technology, your codebase will look like a battlefield. That almost sounds like a criticism of people who developed React and Redux and went to war against their browser APIs.

Not really. Redux doesn't even touch Browser APIs as far as I know. React uses a virtual DOM to avoid DOM unnecessary manipulation, which is slow and error prone. DOM manipulation could be seen as a week point of browsers, and by avoiding it, React is actually a very good ally. Javascript is a dynamically typed language and offers quite a bit of functional programming functionality itself. React and Redux use that to…

> React uses a virtual DOM to avoid DOM unnecessary manipulation, which is slow and error prone.

While it may be the case that DOM is far from perfect, React is hardly the only way to avoid it. Even if for your use case avoiding DOM manipulation is necessary (which I strongly suspect is not true for like 95% of people who use React as the framework du jour), there seem to be significantly better thought out approaches, like for example Svelte, if you absolutely have to go down the "let's turn our browser workflow into a C-like one" road and churn out an opaque blob of code as a result. That also avoids unnecessary DOM manipulation, but unlike unnecessarily duplicating browser data structures is at least somewhat elegant, just like compilers are considered elegant compared to interpreters.

> React and Redux use that to their advantage, rather than insisting everything be modeled by classes.

Sure, but Javascript is not even based on classes. It traces its heritage back to Self which doesn't even have classes.

Post reply on HN