For an ever growing, rapidly evolving platform like that of CallFire, stability is a perennial exercise. Stability is a cross architectural concern and cannot be slapped on at the last minute like tomato ketchup on spaghetti. Stability is fundamentally hard whose benefits are accrued over time. Nevertheless, you need to plan for it in advance and make it a top priority during system and application development. This is hard because any IT organization, let alone a speedboat startup, is judged by the features it can implement.
Architecting stability is fundamentally tough, but as Grady Booch puts it, you can master complexity, even if you can never make it go away. One way to master complexity is to realize that good design will lead to stable applications. Good design ensures crisp abstractions, clear separation of concerns, and loose coupling. Following these tenets then allow for a degree of componetization that lends itself to a stable, scalable system.
We at CallFire are going through software migration pains for a planned major feature-set rolled out (tentatively 4Q '07). As we grapple with the minutiae it helps to pull back and understand why we're spending so much time on something seemingly mundane.
Quote of the Day:
Ancora Imparo --Michelangelo