Tuesday, April 25, 2006

Architectures that Enable Velocity and Agility

No business leader will argue that their company needs to move slower or become less responsive to change.

Adapt or perish, now as ever, is nature's inexorable imperative.
-- H.G. Wells

In theory, software is a fantastic environment to build things that are designed to adapt to changing needs. Compared to brick and mortar, software is relatively maleable. The cost of making even major changes to software is relatively low.

Unfortunately, too much software is not explicitly designed with change in mind, resulting in systems that quickly become brittle. Some of this is due to lack of attention; some is due to architectures that aren't designed for change.

I plan to spend some time exploring some contemporary architectures for Web-based applications in terms of their ability to support changing requirements throughout the application lifecycle. For each architecture, I will evaluate the level of available support for practices like rapid prototyping, continuous integration, and test-first development. I will also explore the architecture's support for separation of concerns and its performance and scalability characteristics.

I'll start with Ruby on Rails. Ruby on Rails has been generating quite a bit of buzz with its claim of improving developer productivity by a factor of 10 and it's recent Jolt Award. I will also probably look at Java, .NET, and LAMP, since they are so commonly used. No promises, though; some of this will depend on how much time I will actually be able to devote to this exploration!

Next: setting up my Rails development environment...


David C Peterson said...

Hi Geoff,

If you can, please also take into account not only the agility of the technology, but also the performance and scalability. I often worry about the ability of technologies to scale and other enterprise level concerns (e.g. security model, etc) of these solutions.

I found the technology history of myspace.com to be a fascinating read on the engineering and then re-engineering of their website to meet their massive growth levels. Of special note for you may be their experience in first using ColdFusion and then later dropping it. ColdFusion, like RoR seems to be one of those often hyped systems that are very fast and productive to get running, but then later collapse under their own weight with scale.

Here's the link to the article which I'm sure that you'll find to be a fascinating read.


David C Peterson said...

I'd just like to follow up on my post from yesterday. While I truly believe that there are some significant performance issues with RoR, Coldfusion and the like. I don't believe that this is true for PHP. I've done a bit more research and now believe that PHP is a viable alternative for an Agile development language. Here's a good reading from O'Reilly, but there are several others.(http://www.oreillynet.com/onlamp/blog/2006/04/digg_phps_scalability_and_perf.html).

One sort of side note to this article which I totally buy into, is to make sure that you're solving the right problem. I agree with the author that there is a fair amount of equivalence in the agility of these various platform languages (e.g. .NET, Java, PHP, etc.). However, the really hard problems are in the database side of things and that should rather be the focus of our best architects, corporate technology leadership, and blogger discussions. :)