Very informative, thanks! If I expect to tackle microservices, I should revisit my copy of Building Microservices (2015) by Sam Newman. Looks like there might even be a new edition as of 2021!
Seriously though, what's with C devs that insist on writing spaghetti code? (Speaking as a developer that started out writing C and had to unlearn a lot of my bad habits)
I think it can help clarifying why depending on different versions of a module is no longer DRY. The only reason I can think of is that if there is a fix required for a dependency that has downstreams using multiple versions, then there is a potential the fix needs to be applied multiple times. In theory this can be done one time as well - with clever enough SCM techniques; but obviously there is a good chance that an automated refactor/retro-fix is insufficient.
Actually DRY is about duplication of knowledge not code itself, is ok to have code duplication is needed. In case of service A and B they may use the same functionality but if the shared functionality in any service needs or could change is ok to duplicate code.
> if the shared functionality in any service needs or could change Then by definition its not duplicate code. Code is only duplicate if it changes for the same reasons and at the same time.