The famous saying ‘Change is the only thing that does not change’ applies more to the modern information technologies than anything else. Technologies just come and go; by that time a company is ready to release a product, the underlying platform is already outdated; the birth and death cycle is getting shorter and shorter! Countless energy and time has been spent In meddling and muddling with the technology stacks than solving the actual business problems.
So, how can the IT companies and teams handle and survive the waves and tsunamis? Can a product/application X live forever? The obvious answer is no; ‘Change is inevitable’. So, the better question to ask Is ‘How can the lifetime of a product be Increased? History shows that following strategies would help In Increasing the longevity of a product or application with minimal or no changes; of course, it all depends on the type of product that one is designing; some APS are required to live longer and some are transient.
This article is only for the former, the applications that are supposed to live forever, I. E. , as long s the corresponding business or company exists! There could be many ways, but one high level idea suggested in this article is ‘Rigid core and changing peripherals’. The idea is that, for any application, the parts need to be divided into two categories; the Core, and the Peripherals. I. E. , Identify the data, algorithms, business logic, etc that will not change with respect to technology.
And design a stronger and immutable core as much as possible using ideas like the following: * use low level stacks wherever feasible: This might increase the complexity of the software placement and also may have some extra cost in the maintenance, but the big benefit would be that the application would be able to live longer. For example, Just look at the APS created based on CORBA or Active. COM In the recent past! Thumb rule could be that if a technology stack was not in the market for 10+ years or not used by 50+% of the industry, choose something else. Use proven and long standing Industry standards and protocols: There are many protocols, tools and standards that withstood the test of time; use those as much as possible. Relational databases and SQL, TCP/IP, EDI etc. * use a low level language wherever feasible: This may look strange and may look like going backward in history, but the app will live longer!
And design completely flexible peripheral layers for the core(s) of the product. These are the layers that can be changed over time and can be modeled with respect to the customer needs and technology changes. Create these layers as decoupled as possible and rely more on the interfaces than technologies. Of course all the design patterns and best software design principles would apply in designing the product core and peripherals, but the idea is to separate the changing from the unchanging at the birth Itself and create the product based on the CHIP Idea mentioned here.