What problems do you have? Are you having latency issues that could be resolved by reducing external dependencies? Are you having difficulty synchronizing multiple components that each implement the same behavior?
It's better, in my view, to know how to tell what challenge your code is actually facing. Sometimes this will lead to more aggressive decoupling and sometimes it will lead to externalization of shared functionality. Deciding these things ahead of time is a recipe for fanaticism.
Article is a bit dated and hard to read. The gist of the author is relatable though
15 years later: redundancies have been hella annoying, especially if they are unknown.
Bad abstractions, however, create dilemmas, dead-locks and chicken-and-egg situations.
And it's impossible to create good abstractions unless you have no colleagues and no customers.
I would take some frustration over grinding to a halt any time.