It starts innocent, without any notion of the larger picture. Just writing code for the sake of writing code. A great way to gain experience. Powerful when kept as a tool for improving skill. But what are the ways in which it ain’t powerful?
Go back to fundamentals of what source-code allows; It is the creation of programs. No rocket science indeed. The more source code you have written in a certain programming language, the richer the logic of the created program can be. Viewing source-code is as the composition of logic acting on data hits you deeply; These components are striving for reusability, capturing identical abstractions between their uses.
Uniting software would be the act of considering common parts between projects. A clear example would be static-site-generators, which captures content being static from the start/when updating the site. The capture is general enough to allow different types of outputs; HTML, RSS, Gopher-Markdown, etc. So it allows a simpeler codebase and more features. Great! Steps taken to reconsider the “capture” the project has, is refactoring on the highest level.