I'm having trouble with what I think is too much abstraction in the code base (or at least bypassing it). Most methods in the codebase have been abstracted to include the highest parent A in the codebase, but the child B of this parent has a new attribute that affects the logic of some of these methods. The problem is that these attributes can not be checked in these methods because the input to A is abstracted and A does not have that attribute, of course. When I try to create a new method to handle B differently, it's called for code deduplication. The proposal of my technical manager is to create a common method that takes into account Boolean parameters. However, the problem is that some people see this as a "hidden control flow" where the common method has logic that may not be apparent to future developers. Additionally, this shared method becomes too complex / complicated for future attributes even if it is divided into smaller shared methods. This also increases the coupling, reduces cohesion and violates the principle of individual responsibility that someone on my team has pointed out.
In essence, much of the abstraction in this codebase helps reduce code duplication, but makes it difficult to extend / modify methods to get the highest levels of abstraction. What should I do in such a situation? I'm at the center of the blame, although everyone else disagrees about what they think is good, and it hurts me in the end.