Sunday, March 1, 2009

Survivable long-living software systems.

Following are just some notes on development of longer maintainable (more able to survive) software systems.

Looks like long-live of software system is not often market requirement, so "survivability" and adoption of software system is not requirement for "consumer" software products, like software in the box.

Consumers of boxed software, can uninstall old versions, buy new version of the box (or the box of competitor), and install it.

That way, due to the "instant" nature for such software, the critical are the parameters of the software on the time of software development.

However, service for "user groups", like corporations, has additional costs of "getting in" and "getting out". Users can be more conservative on service usage, just because of additional prices of "getting in" and "getting out". Migration has costs,and that way users are more conservative, and that way oriented on longer term goals.

For reasons listened, for services and other products like services, "long-term" quality of system parameters may probably define choice of customer, much more than "instant" parameters of software.

In real world, hardware, OS, environment, can change geographically and through time.

To be long-live and possible to survive under changing hardware, software, configuration, processed data, and other environment, software should be developed that way, to support
different hardware,OS, environment, e.t.c.

That way database based systems have more ability to survive, rather than handmade fine-tuned systems, designed for "current", i.e. actual on time of system development configuration and bounds of hardware, OS, data, e.t.c., because of various amount of tuning documented and tested tuning options.

Application's critical to capacity and performance that way should be planned to be adaptable to changing environment.

This should be applied to the whole process (for example, overcomplicated and undocumented code of the system has no chances to survive).

Also systems should be easily tuned/configured/changed when hardware/OS/environment bounds changed to use resources optimally.

Such system should be easily fixed, when it becomes IO/memory/processor/disk/network bound to efficiently use resources, and solve problems.

Ideally, installed system should adopt itself to changed environment without human effort.

No comments: