That's fair. I'll often forget the details or maybe the abstraction isn't good enough, or abstracts the wrong thing. I often have to switch layers, pick up some critical info, and keep that in context when working above. Sometimes it happens often -- forgetting piece A to work on piece B, then forgetting piece B to remember piece A, then having to remember all the intricacies.
I stopped trying. I just write unit tests for the layers and details. It also helps me to keep things simple -- if the unit test is too complicated at a lower layer, then the upper layers are going to be even more complicated. So simplifying that layer is certainly necessary.
It feels like a constant rabbit hole because once the layers are there, the features themselves can get built in a blink of an eye, so that the balance goes even further towards layer building.
Because of increased feature velocity so does increased feature “ambition”, so in a way the balance just remains the same…
Anecdotally, I work in layers. If a layer gets too complicated, then a new layer is formed -- breaking apart the current layer, maybe keeping some of the parts and then other parts are only cherry picked into an abstraction and the details shoved into a deeper layer.
Much like I do for software.
Most of the time it works "fine". Sometimes I get so busy building layers that I end up two weeks later and have way too many layers and none of them are clearly identifiable. Ooof. Time for cleanup, another two weeks at least.
My boss calls it "rabbit holes" -- taking things apart, figuring out how they work, picking out what's relevant or useful to me, putting things together simplified...
Tough part is when there's a deadline.