The other dark side of this is the teams that write something useful that everyone wants to re-use, but they are terrified of the consequences of having other users to support and being unable to do backwards-incompatible changes, so they lock down access and/or intentionally break its reusability.
The consequence of this is that everyone forks the whole code-base repeatedly, and you end up with multiple copies scattered all over the place, snapshotted at different points in history with different levels of buggyness and neglect.
The real test for how bad code is to see how hard is to delete it. Really bad code is typically full of convoluted reuse patterns...
Reuse shouldn't be the default. In one extreme, I caught some engineers reusing old code while rewriting a large part of an app. They should have just copy-pasted the "reusable" parts, because later, just the deletion of the old code took weeks.
The other dark side of this is the teams that write something useful that everyone wants to re-use, but they are terrified of the consequences of having other users to support and being unable to do backwards-incompatible changes, so they lock down access and/or intentionally break its reusability.
The consequence of this is that everyone forks the whole code-base repeatedly, and you end up with multiple copies scattered all over the place, snapshotted at different points in history with different levels of buggyness and neglect.
The real test for how bad code is to see how hard is to delete it. Really bad code is typically full of convoluted reuse patterns...
Reuse shouldn't be the default. In one extreme, I caught some engineers reusing old code while rewriting a large part of an app. They should have just copy-pasted the "reusable" parts, because later, just the deletion of the old code took weeks.