Thoughts on Architecture (II)

Jan 08, 2008 11:49

Architecture is the process of codifying restraint.



Start with a completely blank slate. You could build anything! Solve world hunger, build a better spreadsheet, even make planes fly on schedule. (No more bumped passengers!) The project can go in any direction.

Now make a single design decision. Something as basic as "let's use a client-server design". Suddenly the entire scope of your problem has changed! It's not peer-to-peer. It's not a stand-alone solution. In a single statement you've eliminated the vast majority of all possible implementations.

Each successive design decision adds an additional constraint to your world. Each architectural step takes away possibilities. Like Michaelangelo, you pare away the possibilities to unveil only that which solves your problem.

But how deep to cut? Deep enough that you can achieve your goal with a minimum of effort (and remember - effort is code and thus time). Shallow enough that your architecture solves not only your specific problem right now but as much of the entire problem space as possible, so that tomorrow you can extend it to solve something very similar.

To the novice, architecture is the language of "what is". But to the expert, it is often the language of "what is not" - each design artifact is a note from the architect that the reader can stop worrying about an entire host of potential problems, causes, or issues. We seek to simplify the reader's life.

But then, we already knew that architecture was about communication, didn't we?

architecture

Previous post Next post
Up