Cutting edge vs Legacy Systems

Recently, a colleague asked me, if I still enjoy being in the new team. I immediately answered that with an honest “yes”, although we both agree that our project is far away from the cutting edge of new technology. My coworker said that it is understandable that young developers rather want to play with new frameworks and new languages instead of building a Swing application like we do. Additionally, our project also is not a green field. It has been around for years.

For me, brand new technologies used in green fields and legacy systems in production are two very different shoes. I find joy both in playing with new stuff as well as handling the challenges only a legacy system has to offer. In my experience, the majority of systems are many years old. However, these are the systems the customer knows and for whose further development pays a lot. Hence it is wise to be able to work with these kinds of systems both in a technologically view and in the sense to be able to do huge refactorings. Additionally, every new system becomes a legacy system very fast. I often wrote code that I found intuitive just to notice that after some changes it became very legacy just like the rest of the code. I don`t mean that it was hard to maintain or unreadable, it was simply not new in a green field – sense.

I also noticed that my main domain of interest, software architecture and design, often is technology independent. So for me it simply doesn’t matter in which language I learn about a specific architecture paradigm. Sure, there are frameworks around that dictate a specific structure of the project, but that should not be the case. Frameworks are tools that should help model the business structure and not dictate it.

New architectural ways are often used only years after their first appearance. So, using these new ideas in a real application can last a while. However, many of these ideas are soon forgotten because the hype about them is over or the negative aspects have been revealed. In a sense, time has a filtering effect on technology: Using Java 5 in a huge enterprise application and only update it when the new application server doesn’t support it any longer is not “cutting edge”, but it sure is quite stable.

I think there are many pros and cons about working with an “old” system and “old” concepts versus applying very young technologies in a green field. The often heard “That stuff is old and unworthy to work with” does not apply to me because in the moment, I am learning quite a bit with legacy systems. What I don’t learn, I grasp in conferences and in my spare time.