I know we shipped the Tech Preview of WSE 2.0 two weeks ago, but I was really busy those two weeks so I’m just now getting around to checking it out. Specifically I was checking out the article on programming with WSE 2.0. The “Rock, Paper, Scissors” demo app from the article reminded me of something I thought of last week.
As I blogged two weeks ago, I went to a presentation on enterprise architecture by John Zachman. It was pretty good (though he could have cut his justification section – he was talking to a room full of architect evangelists!). One of the key things I took away from it was that Architecture is the “thing” we do in order to build objects that are so complicated that we can’t keep all the details in our head at once. As an analogy, building a dog house doesn’t require much architecture. It’s a very simple one story, one room, no moving parts, no electricity, no plumbing, zero aesthetics since my dog just wants to get in out of the rain kind of structure. Building a skyscraper, on the other hand, requires a great deal of architecture. Besides the fact that it’s all the things the doghouse isn’t, it also is going to be built by multiple people. It’s very very important to get all those people on the same page. You can’t afford to let each person make their own assumptions about how the skyscraper is going to be built. In order to keep people from making assumptions, you build very very detailed blueprints and models of the building, and you refer back to them often as you build.
(BTW, John has a very weird way of talking about avoiding assumptions. He says that these models exist even if you don’t build them. But the fact is, models and blueprints don’t build themselves. If you don’t build explicit models, the builder are forced to make assumptions. For example, if you say a building is going to be “tall”, different people have different assumptions as to the number of floors a “tall” building has. In the end, John’s way and my way are saying the same thing – you need to build explicit models in order to avoid assumptions. But I feel my way is more easily understood.)
In the case of demoware, one of the key requirements for the target audience to be able to understand all of the details of the demo, usually in a very short amount of time. This means that demos are typically not applications that need to be architected.
So how do you demo architecture? If the app is simple enough to be understood, it doesn’t need architecture. If the app is complex enough to need architecture, it won’t be understood.