Live data from Hacker News

Edge Case Poisoning (2020)

buttondown.email

21–30 of 49 posts

Re: Edge Case Poisoning (2020)

#21
Imagine trying to compete with Microsoft Office (Oracle DB, etc) and adopting this approach out of neccesity, only to discover that the original thing has support for all the edge cases in the book, and some of these which weren't even in your book.

Yes, the original product may be bloated / not pretty, but once paying users discover you don't support an obscure edge case they depend on, they'll stop showing up.

Re: Edge Case Poisoning (2020)

#22
post #19

Recipes are programs, so why are we expressing them as types? The recipe will be valid as long as the individual instructions are.

You're thinking too concretely. The point of this article isn't to talk specifically about modeling recipes ; it's to use the complexity of recipes (something concrete most people know about) as an example of how this "edge case poisoning" affects the system. I'm sure he has specific non-recipe examples in mind, but using those would either have to 1) give you a lot of background knowledge about the system, which was…

But to the GP’s point, this VM config is a program, so why are you expressing it as a static config file? The ending virtual machine will be valid as long as the steps involved in its creation are.

Re: Edge Case Poisoning (2020)

#23
I once encountered this problem when writing a video game as an never-published side project.

Most in-game items and resources were very simple - largely expressible by a simple : dictionary. Others however, could support a never-ending variety of custom attributes and logic.

After much thought, I wound up pursuing a solution that turned out to be quite powerful and extendible:

Items would be represented via a ::> datastructure. Any system that needed to interact with an item would call an 'item handler' assigned to that item type, which exposed a standard interface like 'getQuantity', 'useItem', etc.

Most basic items shared a common handler that stored quantity as an attribute field. However, more complex items could implement custom logic. I guess this is somewhat similar to Mixins or Component Based Architecture.

I think this is partially covered under the 'more abstraction' option in the blog, but I've personally found this to be an interesting and valuable tradeoff that can be deployed in a lot of situations.

Re: Edge Case Poisoning (2020)

#25

Imagine trying to compete with Microsoft Office (Oracle DB, etc) and adopting this approach out of neccesity, only to discover that the original thing has support for all the edge cases in the book, and some of these which weren't even in your book. Yes, the original product may be bloated / not pretty, but once paying users discover you don't support an obscure edge case they depend on, they'll stop showing up.

Oracle is actually a great counterexample. When they started out, they lost the db data frequently, and the IBM folk laughed, wondering how they expected to compete when they weren't even Durable.

It turns out Larry started by selling to people doing what would now be called "Business Intelligence", and for them Durable wasn't a necessity, it was just an edge case (they were always side-loading from production anyway).

Oracle then used the profits from this beachhead to fix their durability issues before they started selling into segments that expected their databases to, you know, keep data.

Re: Edge Case Poisoning (2020)

#26

This is why I laugh at talk of "bug free" software. The best you can do is zero reported bugs. Temporarily.

I don't disagree but a philosophy that I find practical says that a bug that exists in software and is never encountered in actual use counts as a non-bug. Of course it would be nicer if the bug-in-software didn't exist, but what really counts are actual use cases.

True. Not all encountered bugs are reported and not all reported bugs are even bugs!

Re: Edge Case Poisoning (2020)

#27

Earlier quoted context omitted.

I don't disagree but a philosophy that I find practical says that a bug that exists in software and is never encountered in actual use counts as a non-bug. Of course it would be nicer if the bug-in-software didn't exist, but what really counts are actual use cases.

By that reasoning, the software that ran the Therac-25 wasn't buggy when used for earlier models. Those earlier models had hardware interlocks, so the incorrect requests made by software didn't have the same fatal consequences as it did for the Therac-25.

Indeed, it doesn't account for changing conditions in the software's environment. Doing everything within reason to avoid bugs in the first place is clearly preferable.

Re: Edge Case Poisoning (2020)

#28

Imagine trying to compete with Microsoft Office (Oracle DB, etc) and adopting this approach out of neccesity, only to discover that the original thing has support for all the edge cases in the book, and some of these which weren't even in your book. Yes, the original product may be bloated / not pretty, but once paying users discover you don't support an obscure edge case they depend on, they'll stop showing up.

Oracle is actually a great counterexample. When they started out, they lost the db data frequently, and the IBM folk laughed, wondering how they expected to compete when they weren't even Durable. It turns out Larry started by selling to people doing what would now be called "Business Intelligence", and for them Durable wasn't a necessity, it was just an edge case (they were always side-loading from production anyway…

The purchase of MySQL by Oracle makes a lot of sense in this light.

Re: Edge Case Poisoning (2020)

#29
post #4

This is why I laugh at talk of "bug free" software. The best you can do is zero reported bugs. Temporarily.

If there are bugs in software but no one ever runs it, does it really have bugs? - George Berkley (apocryphal)

Of course! If nobody ever runs software then that is, of course, a bug. ;)

Re: Edge Case Poisoning (2020)

#30

Imagine trying to compete with Microsoft Office (Oracle DB, etc) and adopting this approach out of neccesity, only to discover that the original thing has support for all the edge cases in the book, and some of these which weren't even in your book. Yes, the original product may be bloated / not pretty, but once paying users discover you don't support an obscure edge case they depend on, they'll stop showing up.

Oracle is actually a great counterexample. When they started out, they lost the db data frequently, and the IBM folk laughed, wondering how they expected to compete when they weren't even Durable. It turns out Larry started by selling to people doing what would now be called "Business Intelligence", and for them Durable wasn't a necessity, it was just an edge case (they were always side-loading from production anyway…

A lot of upstart database vendors do that right now - selling to BI/OLAP because they're not stable enough for prime time.

I didn't know that Oracle itself did exactly that, thanks. But I'm talking about the days of mature Oracle.

Post reply on HN