Safety Gold Plating

A form of GoldPlating based on the stated goal of reducing risk or errors.


(Based on conversation in FearOfAddingTables)

In some cases there may indeed be a tradeoff between simplicity/flexibility of design and "safety". We're right back at the ol' "anal safety tradeoff wars" that rage in relational and typing topics.

Airlines could be made safer with thicker chairs, per-passenger air-bags, shoulder harnesses, etc. However, as a society we've collectively decided we don't want to pay for those. We made a choice. pursuing every last safety mechanism "because we can" is not always economical. We resign to the extra chance that a few crash and burn to cut costs. That's life. If you want to form "8NF Airlines" for paranoid passengers, be my guest :-) --top Actually, the airlines decided not to pay for those, not the public.

True, but we don't really know what the public's opinion is on this. Plus, in software, managers also make many of the decisions, not end-users. Thus, it tends to reflect the airline business. If there was really a demand for safer flights at more cost, then my "8NF Airlines" jokish suggestion may have merit. Volvo cars make safety a selling point, but it has failed to make a big splash with the public.

I've yet to see a case where the cost of proper normalisation plus the cost of implementing the code to use the properly-normalised schema exceeded the estimated cost of dealing with an insufficiently-normalised schema. This is trivially true because the former two costs are one-time, but the latter is ongoing. -- DaveVoorhis

I'd like to explore some such alleged disaster scenarios with an example, such as PublicationsExample. In my opinion, you guys tend to exaggerate such risk in proportion to all possible problems (including companies who expect to pay Chevy rates, not Volvo rates).

See http://en.wikipedia.org/wiki/3NF In particular, note that "the [non-3NF] table [is] vulnerable to logical inconsistencies, as there is nothing to stop the same person from being shown with different dates of birth on different records."

I don't disagree with that one.

See http://en.wikipedia.org/wiki/5NF In particular, note that "[i]f such a table is not normalized to 5NF, the burden of maintaining the logical consistency of the data within the table must be carried partly by the application responsible for insertions, deletions, and updates to it; and there is a heightened risk that the data within the table will become inconsistent. In contrast, the 5NF design excludes the possibility of such inconsistencies."

If you do not regard such potential inconsistencies as significant -- regardless of the application -- then I doubt there's anything I can do to convince you that they are. -- DV

The insurance one brings up an interesting scenario related to the "don't hardwire non-invariant divisions" rule described in FearOfAddingTables. If the insurance rule described is not a solid rule ("invariant"), we risk having to change our base tables. It is a matter of cost/benefit analysis. That's where domain experience is most helpful. If we have a hefty army of developers/DBA's to make such changes and test them well when they occur, then maybe we can live with the change risk. "Make the system easy to change" is often cited as a key goal. If that rule is rock-stable, it will not score high on change-friendliness. Medical and financial apps indeed do seem to lean toward safety instead of IT staff labor reduction, because the cost of data errors is higher than IT staff. My point is that it depends on domain issues.

Having personally maintained a 170-table schema deployed in over 70 sites -- that left time to do application development, management, support, and a number of other duties -- I have my doubts that a properly-normalised schema causes any additional difficulty with maintenance and implementing changes over an improperly-normalised schema. (Indeed, I suspect the opposite is true.) In other words, the personnel overhead required to maintain a properly-normalised schema (i.e., 5NF) is not significant. -- DV

Well, my experience differs. The thin-table designs were the butt of complaints from many IT specialists, not just me. One is currently being rebid for an overhaul or COTS replacement because people want it gone. The slicing not fitting the domain well (original or as it changed) was the main problem, but not the only. We'll just have to AgreeToDisagree because we're both depending on anecdotes. Again, maybe there is a right way and wrong way to do thin tables, and I encountered the wrong way (BetterOnlyIfDoneRight perhaps). --top

Perhaps the designs were improperly normalised, or were generated by some ObjectRelationalMapping layer? Either of those can produce nightmare models. -- DV

{TopMind, I've already presented evidence that 'wide' tables present a greater risk-of-change AND a greater cost-of-change. I'm inclined to believe that everything you are saying here favors thin tables if accepted as true.}

I found your assessments unrealistic and exaggerated.

I found them realistic and reasonable. -- DV


Here is an example of where a company (Microsoft) intentionally gave quality the shaft in order to beat the competition to market in order to gain vendor media content support. The author seems somewhat ambivalent as to whether the trade-off was worth it, but seems appears to agree that the decision was understandable and rational from a profitability standpoint. I am not promoting bad quality and rush-jobs, but only pointing out that market forces often give us developers tough choices. The comparative advantage of the US is not commodity items, but cutting edge technology and fads. To beat the competition, somethings quality has to give. We are often not given the resources for rigorous engineering. I don't think PaulGraham would have beat the competition if he used type-centric techniques.

http://venturebeat.com/2008/09/05/xbox-360-defects-an-inside-history-of-microsofts-video-game-console-woes/


See also: GoldPlating, BloatInducedReadingConfusion


AprilZeroEight

CategoryLanguageTyping


EditText of this page (last edited December 15, 2014) or FindPage with title or text search