So how can we fight these 'decays'? Obviously we cannot really fight functional changes. Businesses change, people change, requirements change. This is one of the big constants if not the only constant in software development. Probably one of the best things we can do is to keep the system in such a state that functional changes are easy to apply. This translates to: keeping the system modular, low coupling and high cohesion, keeping the software as simple as possible, well documented etc. Normally the bigger the system is, the harder it is to make changes. So keeping the program as small as possible is also a very good thing. But how to do that?
The second point of my previous post concerns the loss of knowledge. How to keep all the knowledge at hand and up to date? In practice it is very difficult to keep the code and the requirements in sync. Is there an easy way to keep them both up to date?
The third point is about technology changes. We can develop a system in JAVA or C# or some other modern language but maybe in a few years time there will be a new language lets say X# that everybody loves to use for programming. When time passes fewer C# programmers will be available to maintain the system. In the end we actually call those systems 'legacy'. Think about how many COBOL programs are still running businesses every day in the world? There was a time COBOL was 'hot'. This can also happen with current 'hot' programming languages.
The third point is not only about programming languages it's also about smaller changes like new UI technologies, different hardware platforms or different operating systems. Over the last 5 years we've seen a lot of changes regarding user interface development for example. We have seen ASP.NET with AJAX, JQuery, Richfaces, RIA's like Flex and Silverlight to name a few. It's not easy to change a system from one technology to the other. But you have to make a decision to build a system in one of these technologies if you start building it today. You can of course develop the system for multiple platforms but that would surely mean a lot of duplicate work. Can we be sure today that silverlight or any other technology will still be supported in 10 year time? It's seems to me that big and complex business applications have a bigger or should have a bigger lifespan than those technologies. Maybe the business application should be independent of them?
So how to make a program as small as possible, documentation and code in sync and applications independent of technologies and platforms?
One way to make a program as small as possible would definitely be to only specify what the business application should do and not how. Think about it: only specifying what an application should do is about as efficient one can get. You cannot solve the problem with less information!
In my next post I'll elaborate more about this topic and the solution I envision.
The second point of my previous post concerns the loss of knowledge. How to keep all the knowledge at hand and up to date? In practice it is very difficult to keep the code and the requirements in sync. Is there an easy way to keep them both up to date?
The third point is about technology changes. We can develop a system in JAVA or C# or some other modern language but maybe in a few years time there will be a new language lets say X# that everybody loves to use for programming. When time passes fewer C# programmers will be available to maintain the system. In the end we actually call those systems 'legacy'. Think about how many COBOL programs are still running businesses every day in the world? There was a time COBOL was 'hot'. This can also happen with current 'hot' programming languages.
The third point is not only about programming languages it's also about smaller changes like new UI technologies, different hardware platforms or different operating systems. Over the last 5 years we've seen a lot of changes regarding user interface development for example. We have seen ASP.NET with AJAX, JQuery, Richfaces, RIA's like Flex and Silverlight to name a few. It's not easy to change a system from one technology to the other. But you have to make a decision to build a system in one of these technologies if you start building it today. You can of course develop the system for multiple platforms but that would surely mean a lot of duplicate work. Can we be sure today that silverlight or any other technology will still be supported in 10 year time? It's seems to me that big and complex business applications have a bigger or should have a bigger lifespan than those technologies. Maybe the business application should be independent of them?
So how to make a program as small as possible, documentation and code in sync and applications independent of technologies and platforms?
One way to make a program as small as possible would definitely be to only specify what the business application should do and not how. Think about it: only specifying what an application should do is about as efficient one can get. You cannot solve the problem with less information!
In my next post I'll elaborate more about this topic and the solution I envision.
No comments:
Post a Comment