Thursday, April 19, 2007

Application Architecture is not just a fancy document

I’ve been a part of or lead application architecture for various clients, from small Internet Companies to Large Financial Institutions. Most companies try to come up with a detailed overall architecture and stick with it for the long run. Unfortunately, things for the most part don’t work this way. The application architecture should be approached the same way agile application development is. Work in iterations, create solid foundation blocks, develop a poc (proof-of-concept) for each block and then integrate it into overall application architecture. It’s pretty impressive when application architects create sophisticated Visio diagrams, which usually don’t even fit on a single page. They specify multitude of components, connectors, databases, messages, etc. But original architecture diagrams rarely get updated when certain architectural features change. The best approach from my experience is to outline a very high level architecture by breaking it into smaller blocks. Each architectural block will then have a more detailed design. In other words, don’t try creating an overall detailed picture – leave some wiggle room.

A sample overall architecture may specify that there is a service bus and a bunch of services are using the bus. Then, create a separate architecture diagram and document for the service bus and each service. Make sure that each architectural block has a working poc. If you decide to use Message Driven Beans to receive some events, and the requirement is to be able to process 2 million events in one hour, then you better make sure that the proposed architecture can handle it. Don’t just select a technology because it logically makes sense – prove it. If you are trying to expose business logic as services, don’t just assume that EJB is the best approach because Sun, BEA and IBM said so at some point. Be pragmatic and prove that each architectural decision is going to deliver the best results. Compare various implementations of JMS. Don’t just use the one provided by your JEE Application Server. And don’t forget the Open Source products. They often prove to be better products then the commercial heavyweights.

Application architecture is not just a brainstorming session with several gurus locked in the same room for 3 days and coming up with a fancy document. Application Architecture is a process of not just discussing but testing and comparing various solutions. Application Architect must therefore be very hands-on. Someone who hasn’t developed anything for the past 2 years can’t call herself an Application Architect, because Information Technology changes so fast that something that wasn’t considered a year ago might be the best fit for your needs today.

There is a ton of architecture best practices and I am not opposing them. They should be analyzed but not followed blindly, because each business has its own unique needs and goals and therefore each solution must be custom tailored and aligned with the business.

-Igor

Labels: