Following on from my first law (see http://blogs.msdn.com/michael_platt/archive/2004/02/03/66690.aspx ) I have been thinking about what other general purpose architectural principles I use and have come up with a Platt’s Second Architectural Law. This states that:
General purpose, high performance transformation from one domain or space to another is not possible without the algorithm linking those domains.
So it is possible to map from one space to another well, similarly it is possible to provide the set of all mappings (e.g. transform) without an algorithm but only slowly. Note that you can get performance if you constrain the domain space; that is you do a mapping rather than a transform.
In computing today we do not have many high level algorithmic transforms, the most well known domain transformations are from the amplitude to frequency domains using the Fast Fourier Transform (FFT). So Platt’s second law means that any product or technology which offers high performance high level domain transformation should be examined with care. Obvious examples of this are:
Object Oriented databases (Object to relational or hierarchical)
Entity Beans (Object to relational) or indeed any object to database products
MDA (Models to code)
I am also suspicious of many of the XML to database (Hierarchical to relational) products out there as they break my second law but don’t have any proof about their performance as of yet.
So this makes my second architectural law, I will post my third in a future blog.