Tuesday, October 21, 2008

Porting the Constitution

In traditional software development, as in other forms of engineering, the process frequently starts with a loose set of requirements. These are then reviewed and refined into a more precise statement of requirements. This is followed by a functional specification, describing the outward appearance of a product to meet those requirements. Next comes a design specification, detailing how the product will be built, and possibly even an implementation spec, with more low level detail. Finally, there is code. In a sense, there's a continuum from requirements to actual code, with high level understanding or philosophy at one end of the spectrum, and very specific implementation at the other.

Newer methodologies, such as agile development, appear to bypass some of these steps. However, these are still implicitly in place, although they may not take the form of written documents. Developers must still understand what problem they are solving, and then devise a possible solution, and refine that solution in more and more detail.

It frequently happens that software originally developed for one environment must be ported to another, perhaps with newer technology. In this process, the sequence described above may be reversed. Developers may initially try to port the code directly, possibly using porting tools to automate this. In places where this doesn't work, developers step back to a higher level statement of intent, so they can carry out that intent in the newer environment.

Our constitution can be viewed in this way also. The Constitution is a document that includes both high level requirements:

...in order to form a more perfect union, establish justice, insure domestic tranquility, provide for the common defense, promote the general welfare, and secure the blessings of liberty to ourselves and our posterity...
and implementation details:

Every bill which shall have passed the House of Representatives and the Senate, shall, before it become a law, be presented to the President of the United States; if he approve he shall sign it, but if not he shall return it, with his objections to that House in which it shall have originated, who shall enter the objections at large on their journal, and proceed to reconsider it. If after such reconsideration two thirds of that House shall agree to pass the bill, it shall be sent, together with the objections, to the other House, by which it shall likewise be reconsidered, and if approved by two thirds of that House, it shall become a law. But in all such cases the votes of both Houses shall be determined by yeas and nays, and the names of the persons voting for and against the bill shall be entered on the journal of each House respectively.
Unfortunately, it's a bit light on the functional description that might lie between the requirements and the implementation.

This very elaborate engineering document was ratified in 1789, over 200 years ago. During the course of that time, the platform on which the implementation resides has changed. Apart from the obvious technology changes of mass media, cars and assault weapons, the geography and demography have changed drastically. Instead of a skinny stack of 13 states, the U.S. now spans the continent east to west, plus Alaska and Hawaii. The populations include a wide mix of urban and rural, European and non-European, religious and non-religious cultures.

The Constitution does propose a means for its own amendment, and this has been exercised twenty-seven times. However, amendment is in itself an elaborate process, with many political remifications.

All this is by way of saying that in interpreting the Constitution, perhaps it's best not to take a magnifying glass to the original text, or to try to divine what the authors meant by this or that turn of phrase. Perhaps the most useful way to interpret this document is by inferring the functionality that was intended, lying somewhere between the goals in the preamble and the implementation in the following seven articles. Then we can try to achieve that functionality in the current operating environment.

No comments: