Accidental Complexity

The term AccidentalComplexity was introduced to me by DougSchmidt. It stems from the complex code resulting from ugly designed interfaces of system routines.

Ugly interface design is a trend that I observe with the current Java platform processes. Many people contribute new ideas and functionality in the form of specifications and packages without being the victims of their own work.

I believe that GreatAbstraction and StableInterface stem from the fact, that their creators are also the most important users of these abstractions. (GreatAbstractions come from creators who "eat their own DogFood".)

One example of GreatAbstraction and StableInterface for me are the UNIX file system calls. EverythingIsaFile is the GreatAbstraction invented by our Unix super heroes. open(), read(), write(), close() in its today POSIX incarnation is ubiquitous and still viable (though some people would mumble about ioctl()). As a StableInterface they allow for polymorphism behind the scenes without the client code using the interface recognizing. A simple program like cat using this interface is now capable of playing music on a Linux PC which is a thing I believe the original inventors couldn't dream of at the time of the invention about 30 years ago. That is ReUseInAction? that really pays off.

Thompson, Kernighan, Ritchie and the others created a system for their own use. They were not only inventing but also suffering from their invention. This is how GreatAbstraction is created by bright people and also how we can learn how to become better framework developers.

Actually, they invented it for their typesetters, and they got most of their ideas from Multics -- their suffering came mostly from losing access and having to make do with an abandoned PDP-7 in the basement. And LarryWall is the most important user of Perl, which is a rather UnGreatUnAbstraction?. So basically what we have here is a drooling hero-worship just-so story that has very little connection with reality.

They omitted some type safety (TypeSafeInterfacesConsideredHarmful?) allowing for a great flexibiltiy.

They omitted things because they couldn't fit them into a 28,000 byte address space, not for any of your silly post-facto just-so reasons.

[Scathing and belittling comment critiquing the "scathing and belittling nature of the responses here" deleted in the name of sanity. Check your irony meter before making such posts; the worst possible critique is one that is unintentionally self-describing. -- DougMerritt]


I imagine Doug got the term from the paper NoSilverBullet, by FredBrooks. -- RalphJohnson

Where it was called AccidentalDifficulty.


Might Fred Brooks have been inspired by MrAristotle's idea of "accidental properties"? See Wikipedia entry: http://www.wikipedia.org/wiki/Accidental_properties

Andre Mesarovic

Yes, that's what he was referring to. He said later that the term "IncidentalDifficulty" might have resulted in fewer misunderstandings.


"Pretentious complexity" would be an appropriate term in a lot of cases. You could think of that anthropomorphically: the complexity seems ("pretends to be") necessary, but isn't. -- DagfinnReiersol


See also:


CategoryComplexity CategoryAntiPattern CategoryDevelopmentAntiPattern


EditText of this page (last edited August 14, 2010) or FindPage with title or text search