[HN Gopher] Avoid rewriting a legacy system from scratch by stra... ___________________________________________________________________ Avoid rewriting a legacy system from scratch by strangling it Author : ahuth Score : 30 points Date : 2020-02-17 20:55 UTC (2 hours ago) (HTM) web link (understandlegacycode.com) (TXT) w3m dump (understandlegacycode.com) | noobermin wrote: | Am I the only one in the IT adjacent world who thinks the inverse | of this is the larger problem (churn, NIH, reinventing the wheel) | in software today? | dano wrote: | No, you are not the only one. The quest for the new shiny thing | is stronger than ever today. New frameworks, new languages, | silver bullets everywhere. Good decision making frameworks are | in tremendous need in the technology world to help everyone | understand the ramifications of the choices they're trying to | make. | benignslime wrote: | https://martinfowler.com/bliki/StranglerFigApplication.html | | If you wanted to read the referenced article. This was the first | thing I thought of. I appreciate Fowler's writing style and his | sourcing. He always links some interesting stuff. | mannykannot wrote: | One thing that complicates matters somewhat (as if they were not | already complicated) is at the decision point marked | _isRoundtrip?_ in the fourth (penultimate) diagram, where the | affirmative case is handled within the new system. | | Given, however, what is being posited -- a legacy system that is | not modular and which contains unrefactorable pathological | dependencies -- the old system must also handle this case in | parallel, in order to be in the correct state to handle future | requests of a type that still need to be delegated to the old | system. | | This parallel implementation may have to persist well into the | replacement process, and the requirement for it to do so may mean | that you still have to do double implementation of features and | fixes for most of the transition. | layer8 wrote: | Of course, that approach is difficult to apply if the interface | is a significant part of, or deeply entangled with, the pain | points that the rewrite is intended to solve. | msclrhd wrote: | You can temporarily implement both interfaces where needed, | create adaptors, or other patterns during the intermediate | steps. | layer8 wrote: | Usually the problem is that you can't realistically change | the interface, because too much other software relies on it, | and having all that software rewritten would be too costly, | and also risky. In addition, as a sibling mentions, the | reason the old interface is a pain point is often that it | exposes implementation details in a way that prevents you | from rearchitecting the implementation. In that situation, | adapters typically won't help. | marczellm wrote: | It is also difficult if there's an ill-defined interface that | exposes implementation details, or no interface at all. | | It is also difficult to apply if we are not talking a | server/client app but a desktop app, being rewritten in a | different language or incompatible GUI toolkit. | aargh_aargh wrote: | The comma, present in the article and missing in HN, completely | changes the meaning of the title. | kspacewalk2 wrote: | What is the alternative meaning? To be, the comma changes | nothing. It's unambiguous either way. | ummonk wrote: | It can also be read as "avoid (rewriting a legacy system from | scratch by strangling it)" | [deleted] | tapland wrote: | I really don't get this. How does it change? | [deleted] ___________________________________________________________________ (page generated 2020-02-17 23:00 UTC)