On code obsolescence and software lifecycle





Startup, new technologies, modern languages ​​and frameworks. All of this is so exciting when we start doing something from scratch. And we will definitely try to choose modern, popular technologies loved by millions for our project. But time does not stop its relentless run, and suddenly we look back and see that our "startup" is already 15 years old. And the world around has changed long ago. And we still have the same Basic / Delphi / Fortran / whatever in our project. And how to live with it?



No, I do not want to breed another holivar at all, and this is far from throwing on a fan. It's just my personal pain, to lead projects worth a million + lines of code on outdated technologies, in particular on Delphi.



And it becomes interesting how long a successful project generally lives on. If you look around, then, in principle, there are quite a few projects with a "bearded history". These are WinRAR, Microsoft Office, AutoCAD, Photoshop, 3DSmax and many others. Moreover, these are projects for a mass audience. And how many different banking systems, CIS, CRM and other "corporate" systems of various levels exist. And many of them were written not in the last five years.



Of course, I would like to keep up with the times, but migrating a large project from one language to another, in my opinion, is a difficult task. Not only is this migration going on and the writing of new code, the old project must also continue to work, live and develop. In a new project, it is necessary to repeat all the logic of the old one, but it is not always clear. In an old project, a lot of logic can be built on libraries that have not been supported by their developers for a long time. In a new project, these libraries should be replaced. If these are visual components, then this is even more difficult, because in addition to finding a replacement, you also need to consider how to rewrite the code for working with these visual components so that the new component repeats the behavior of the old one. Of course, everything is solvable and there is no goal of repeating the work of the project 100%,but even 50% to do it is very, very difficult, and in the process of such a rewriting it may turn out that the platform / language into which you decided to rewrite is somehow not suitable or is already losing popularity.



Of course, I'm mostly talking about large projects with a significant layer of logic. A million lines and more. Those. not about mini-sites, not about microservices, but about such monoliths (even if they are broken into "components" / "layers", etc.).



I would like to know the opinion of those present here, have you encountered similar problems and how you acted in similar situations?



What solutions would you recommend to apply during development so that in 10-15 years there is no desire to transfer the project to another platform?



Thanks for answers!



All Articles