Large projects with a long history - rooted in the 90s, in most cases based on monolithic architecture (not for the web - the roots go even deeper). In my work, I often encounter similar systems and they all have practically the same problems, and I would like to talk about this now.
Main problem
When creating does not imply increasing functionality. It is created “once and for all” - any “new blood” is not of that group and causes rejection. Any surgical intervention sooner or later leads to the emergence of "Frankenstein" - the essence of the Sets - united by synthetic ties.
Over time, in any project there comes a stage when the basic functionality is not enough. Based on the first thesis, there are several possible solutions:
Injections
"—I don't know how it works — I'll do it on top"
Since Sistema has a lot of fathers (moms) - its new parents often save their time and nerves - they don’t try to sort out pieces of someone else’s “heritage” and simply work “on top” of what is. Many people know the symptoms of such an attitude:
<! - I don’t know how it works, but if you delete it, everything falls - DO NOT DELETE !!! -> or proactive code injection turn replace after generation. The main problem, if the project is assumed to be 10+ years old, then such “methods” overlap each other.
Making changes to the kernel
The above problems are inherent, but at a lower level. Entire segments of the system are cut out and new, independent, with broken, synthetic connections are built in, which in general leads to splitting into independent subsystems (a certain perverted similarity of modularity), sparsity and complexity of the architecture.
Clear sheet
Creating a new system implies a huge investment in time and finances - which are only multiplying with each day of the current "version". Since during this time its development takes place (functional build-up) in other ways. A complete shutdown of the system at the time of creating a new one, in most cases - is impossible, since it leads to a loss of potential profit. ...
I decided to publish only the very beginning. C to find out how much Habr's public is interested in this problem. Interesting? - to be continued.