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...