Tuesday, December 27, 2005

Platform standards and loose coupling

Recently people have been talking about organizational standards for web application platforms (like Linux/Apache/Tomcat for example, or ASP.net for another).  Personally, I'm a big fan of the "small pieces loosely joined" concept.  Small pieces are exponentially easier to build, test, deploy, and upgrade.  Loose coupling gives flexibility and risk mitigation -- components can fail or be replaced without major impacts to the entire structure.  All of these things help us cope with schedule and product risks.  The technical tradeoff is a performance (latency) hit; for web applications, I think the industry has proven that this is usually a good tradeoff.

I guess I should be clear here that I'm interested optimizing for effectiveness, not efficiency.  By effectiveness I mean that speed of development, quality of service, time to market, flexibility in the face of changing business conditions, and ability to adapt in general are much more important than overall number of lines of code produced or even average function points per month.  That is, a function delivered next week is often far more valuable than ten delivered six months from now.

To do this, you need to start with the organization:  Architecture reflects the organization that produces it.  So, first you need to create an organization of loosely coupled small pieces, with a very few well chosen defining principles that let the organization work effectively.

Each part of the organization should decide on things like the application server platform they should use individually.  They're the ones with the expertise, and if there really is a best answer for a given situation they should be looking for it.  On the other hand, if there's no clear answer and if there's a critical mass of experience with one platform, that one will end up being the default option.  Which is just what we want; there's no top-down control needed here.


So the only case where there's an actual need for top-down organizational platform standards is to get a critical mass of people doing the same thing, where the benefit accrues mostly because of the critical mass, not because of individual project benefits.  There's not much benefit to bulk orders of Apache/Tomcat, so if you're avoiding vendor lock-in the main reason to do thisis to enable interoperation.  But that can be accomplished by picking open standards and protocols -- pick some basic, simple, straightforward standards, make sure that teams know about them and are applying them where appropriate, and they'll be able to talk together.  This is a risk mitigation strategy rather than an optimization strategy; in other words, you know you can always get something working with a known amount of effort using the loosely coupled strategy.  When you're tightly coupled to anything, this is no longer true -- you inherit its risks.  Tightly coupling an entire organization to an application server platform also creates a monoculture, making some things very efficient but also increasing the risk that you'll be less able to adapt to new environments.


3 comments:

Anonymous said...

Great article... whatever the **** you were talking about.

Who do I go to to get them to make Smurf buddy icons? They can't want much more bread than Hillary Duff.

Anonymous said...

:) I think you might want the Expressions Factory blog: http://journals.aol.com/beexpressive/TheExpressionsFactory/entries/1531

Anonymous said...

Thanks!