This is where everything we do is metered, and our lives become "data-driven."
It does bring results, but I feel there are significant costs; usually difficult to measure.
One of the things that I will do, as I write software, is evaluate the code I'm working on, for reusability.
Often, to make something reusable, I need to avoid optimizing it for a specific application, and "generalize" it. I'll add specializations into an "adapter" or "façade" layer, over the module.
Most of my little SPM modules were developed this way. If I think it deserves it, I'll stop work on my principal project, and break out the subsystem into its own project and repo. Once I have it standalone, tested, and ready, I will re-integrate it, as an external SPM module.
In more than one instance, I have removed the code from the principal project, because it was not something that would contribute to the main goal.
But I now have this neat little SPM module, ready to be used in other projects. Here's an example of a project that never made it into any of final results, but I think is pretty neat[0].
Some of my modules are basically my "baseline." These are used in everything I do.
Many would consider my workstyle "wasteful," but it works for me.