So good you wrote about abstractions!
One point I noticed though: "Encapsulate what varies" and route example are described a big too vague way - so while I had an idea of it, I wanted to confirm it's the same you have in mind here, so needed some googling to find for example https://softwareengineering.stackexchange.com/questions/337413/what-does-it-mean-when-one-says-encapsulate-what-varies
I also tend to do it backwards: Instead of thinking, that I need to encapsulate something, which varies, I usually start right with "variables". In other words, instead of observation of
2 + 1 = 3
3 + 1 = 4
10 + 1 = 11
I tend to make it X + 1 from the start - that there is no need to "encapsulate" anything (it's already captured), though the end result is the same. Thus, I sometimes wonder why developers tend to insert "literals" (constants) instead of "variables"? "Variables" provide much more compact way, give more insights of the business domain, and there us no overhead other than a bit deeper understanding of the domain (which is anyway required if one writes quality code). [If later there is a need to optimize the code, using constant may be one way, but before that I see it's as a premature optimization].