While we are always hearing about the importance of simplicity (KISS etc.), the means by which such simplicity is obtained is much less discussed and much less clear. I would like to make the argument that in many cases, simplicity is only achievable through complexity. Now don't get excited. I am not arguing in favour of complexity for its own sake. I don't enjoy working with software that comes in the form of a riddle anymore than the rest of you. I do believe, however, the sometimes in our quest for simplicity, we fail to understand that the route to getting there, requires we travel the highway of complexity. Lets look a few examples to see what I mean.
Look at your wrist watch. Pretty simple. Just read the numbers. It automatically adjusts the time as you move from one time zone to another, and easily handles the shift from daylight savings to standard time, even in those funny regions where some cities shift and their neighbours do not. Nothing to remember, nothing to do – just read the numbers or push a button and it reads the numbers for you. You don't have a watch like that? OK so your watch just has a pair of hands. You need to wind it each day to make sure it keeps decent time. It does not handle time shift for daylight savings. You need to make that change yourself. It does not know where you are. It cannot adjust for local time variations.
Clearly the first watch is the easier one to use. Which one is more complex inside? Now not to diminish the complexity of mechanical devices, but even a ludite can understand the relationship between an unwinding spring and the marking of time. It is perhaps difficult to understand the design of escape and gearing mechanisms, but the fact that the slowly unwinding spring drives the hands is pretty straightforward. The first watch is of course electronic, and the connection between its workings and the numeric display is in no way simple. It depends on quantum mechanical phenomena. It depends on precise electronic timing and decoding of satellite signals. It needs to perform complex lookups based on position to determine what time base to use. Even an electronics graduate might be hard pressed to provide you a detailed understanding of HOW it works. Clearly though it is the electronic watch that this the simpler one to use.
Consider a modern operating system such as Windows XP that supports the plug and play of external hardware devices. Buy a mouse, keyboard, web cam, etc., just plug it in to a USB port and presto – within a few moments it is working and can be used. Compare that to the relatively primitive operating systems that we all worked with in the mini-computer era – operating systems like RT-11 and RSX11M. Forget about plug and play. For any new device you might have to write the device driver – the software that handles the communication between your computer and the device. IN some situations that would require detailed knowledge of the bus signalling, interupt handling and memory structure of the computer hardware, not to mention the detailed internals of the operating system itself. Writing the device driver may even require that you recompile – yes recomplile the operating system – relink it and then reload and reboot the computer. Now RT-11 and RSX11M were pretty simple and pretty clean. You could stop the computer and pole about in memory and understand in fairly direct terms what was going on. If XP stops, you are not going to do this. You are not going to try and understand WHY it failed – unless you are a Microsoft OS developer. It is just far too complex. But which OS is easier to use. Which OS would you recommend to your non-geeky friends (don't tell me Linux).
So complexity – meaning the capturing of rules and processes that might otherwise be performed by humans – specialized and technical humans at that – is an essential aspect of getting to a simple to use piece of software.
In the era of the Internet this simple fact seems often to be lost – especially when groups of software developers get together at forums like the OGC, OASIS and others. Inevitably, the talk turns to doing something that it is "simple". There seems to be some sort of misplace hope that just by stripping away most of the real problem that will make life simpler. Most times this does not work. The Internet itself is hugely complex, and it is this complexity that makes it simple to use, and has spawned an army of developers and users that is unprecedented in human history.
When I spoke yesterday about Infrastructure that is also what I meant. We need to think in terms of building permanent information infrastructures for geospatial information – just as we a permanent infrastructure for roads and telephones. This will be complex. It will require rich enough mechanisms to represent the geometry and topology of the world around us. Rich enough mechanisms to represent the relationships amongs the many objects of interest. It will require an investment. This investment in complexity will pay off in simplicity – in a world of plug and play for geospatial data and services. The GeoWeb.