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.
Tuesday, December 27, 2005
Subscribe to:
Post Comments (Atom)
3 comments:
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.
:) I think you might want the Expressions Factory blog: http://journals.aol.com/beexpressive/TheExpressionsFactory/entries/1531
Thanks!
Post a Comment