2,516 karma · joined April 15, 2009
It's interesting to note that we have had this in software development too. Prior to CI/CD, organizations that had QA departments (responsible for testing) had a lot of incentive to hold up releases because they were blamed if a bug escaped into production. When developers test, they are responsible for both delivery and defects so there is balance.
It's hard to see how something like this could be applied for security. Making the TSA responsible for wait times seems like a good idea but there's always going to be an asymmetry when life hangs in the balance.
After the IRA bombings, train platforms didn't have trash bins for decades. Eventually some showed up with transparent bags so that the contents could be seen. The half-life of fear is long.
I think the moniker is perfect because that is exactly what piecemeal growth is in nature. That's why code seems to have a biological feel. The rough bit, for we humans, is that code tends toward piecemeal growth because of the economics of change. It is easier to add to something that exists than to make something new, so entities (functions, classes, services) tend to grow in size. We have to step in, as gardeners in a way, to guide structure.
I don't know that it was intended by the original people behind micro-services (Fred George comes to mind), but micro-services are a good example of aligning with natural tendency rather than attempting to impose a design and continually falling short. Part of the intent was that you just rewrite a micro-service when it becomes unmaintainable. That's a direct structural correspondence to apoptosis in biology. Cells live for a while, then they are replaced.
Having many systems rather than one is the ultimate scaling hack.
The reasoning is here: https://www.artima.com/forums/flat.jsp?forum=106&thread=1559...
If you use a programming language, you had least have a way to scope.
https://michaelfeathers.silvrback.com/characterization-testi...
Error handling should be done at the edges of systems rather than in the center. If you do that, it doesn't matter whether you use exceptions or error monads, you have a pure core that doesn't need to deal with error handling and a very slim area to catch errors. The mechanism you use for error handling, at that point, doesn't matter.
The problems of error handling often come from having it spread across the system and mixed with the logical flow.
- Started by making refactoring plugins for IDEs. Became irritated by those IDEs. Wrote their own IDE.
- Supported various programming languages. Became irritated by those languages. Made their own programming language.
Centralization is a cost reduction maneuver.
Use of software to make a plane airworthy when it isn't natively airworthy is a problem. Civilian aircraft should have a different standard than fighter aircraft: one that allows graceful degradation under failure.
I periodically think it would be a good idea to organize a language around.
The key thing is whether the response is "that's impossible" or "you can have that for this price." In the anecdote, the businessman told Gerald that he'd already passed the test.
It's even more stunning that the author of the post didn't mention him either.