On reducing complexity

02 IX 2010, 00:14

There's one part of my work that really fascinates me on a downright artistic level. It's the sense of excitement I experience each time it occurs to me that my coworker managed to create a system which, at the same time, feels both intuitively correct and as simple as possible. Whenever I'm tasked with modifying such a system, it's always satisfying to remind myself that I do not really have to think much about how to actually perform the necessary changes, since I can instantaneously figure out the couple of places where the edits should occur. And most of the times, I'm right -- the parts of the code I need to change or extend are where I think they should be, and in the shape I expect them to be. If the code lacks some functionality (and it rarely does), that's not a cause for alarm -- when coding, my predecessor had only his particular set of requirements in mind, so he left some parts of the system in a non-flexible state. Now it is my job to add this flexibility, so that the system can encompass the new functionality. I always get a feeling of satisfaction whenever I manage to add new features while increasing the complexity of the whole system by only a minuscule amount.

Granted, both me and Jacek come from more or less the same background -- Linux/FLOSS in general and PLD in particular, and the product we're working on is partially PLD-derived, so a lot of what I've just described actually amounts to figuring out how to integrate new functionality (often in the form of new applications) into a custom-built limited-purpose Linux distribution. And that's something which has very few obvious ways to do it right and a lot of ways to do it very wrong. On top of that, the (brilliant in its intended simplicity) Unix philosophy of separating systems into small discrete applications with clearly defined interfaces is ever present in our job.

However, the true reason for all of the flowery language from the first paragraph is not just that I know how to use RPM proficiently and am such a very happy camper for it. Actually, it's because the very same qualities I try to attain professionally, in particular being able to reduce the complexity of systems to their most simple and beautiful (see, more flowery language) form, managed to heavily skew my general world view. I actually look at the world I live in, or, to be more precise, at the society and its various constructs, in much the same way as I look at my work. In the XXI century, the age of globalisation and interconnectedness, complexity lurks everywhere and each time I encounter it, I have the strong urge to try and reduce it. To attain true simplicity in its most functional form.

I do know of at least one other complex system of written rules designed to govern interactions with the real world, other than computer source code. It's the legal system. I know for a fact that the number of both the national and international laws that govern even my mid-sized country, is increasing by the hour. Without any signs of reversing the trend.

And blindly increasing complexity is not progress, but a certain path to a catastrophe. For example, each time I come across the statement, that ignorance of law does not excuse the offender, I'm reminded of the sheer absurdity of it. In a western society it's physically not possible for a human to navigate reality with the full knowledge of all the rules and regulations that he might or might not be breaking at any given time. For a potentially eye-opening presentation of how many pitfalls await citizens in a legal system, I strongly suggest viewing the first part of this talk (it's based on the U.S. legal system).

I'm of the opinion that each individual, considering how different our experiences might be, has the potential to give a unique and at least partially useful solution to any problem he has given serious thought to. Having said that, I also believe that people rooted in the "IT mindset" might (just might), on average, have more insight to offer than most, solely due to the nature of our profession. The more ambitious of us try to learn new ways of approaching and solving problems on a regular basis. The very core of our job is to create tools that enable people to take control of the enormous complexity found in the world. One can't send probes to Mars with just pen and paper. Or run a nation's electricity grid. Or its banking system. Or any one of the many millions of extremely complex tasks. Computers and their software are a necessity.

As often is the case in life, I unfortunately have no idea what to do with this knowledge. Yes, the legal system is very complex and yes, if performed correctly, its simplification might be beneficial to society. Also, it's true that IT deals with handling complex problems and has, over the years, developed tools and methodologies for that very purpose. However, my actual understanding of even my own country's legislative process is extremely limited, so I have no real idea how to even try to approach the problem. I do, for example, think that it would be extremely cool to have all of Poland's laws be developed using a central SVN-like repository, I do not however know how to (a) solve such a problem on a technical level and (b) make politicians adopt such a system, once it is ready.

I have tried to write a system that would extract the legislative data from the current sources, figure out which is the next version of which and then present a mercurial repository out of it, but failed miserably. Even trying to compile a list of sources proved to be too daunting a task. Extracting meaningful data (projects of new law) out of those sources would require writing unique code for each source and would be very hit or miss. PDFs are meant for printing, not extracting text from.

Unfortunately I apparently do not possess the sheer will power of an RMS (or an Eben Moglen for that matter), in order to perform such a feat on my own. Instead, I'm kind of hoping that a leader will emerge with a clear vision and the skills necessary to make that vision a reality.

In the past year I have "toured" parts of the NGO landscape of Warsaw and I can't say anything bad about it. Motivated people trying to change reality by doing the things they think are important. However, I can't say that I've met anyone with a clear vision of how to achieve far-reaching fundamental changes, accompanied by the skills and motivation required to focus purely on realizing that vision, without getting distracted by "lesser" goals.

I'm still young and optimistic however. Sooner or later someone like that will emerge and I'll find him. I'm really hoping for sooner, though :)

P.S. Thanks to riddle and Jubal for proof reading. Unfortunately my grasp of the English language is not sufficient for me to be able to express my thoughts in a manner as simple, as I would like.

(Photo: Alcoa Composite One, mikeyexists CC)

« prev