Well those 'good practices' end up leaving you with inefficient code
I don't know why you care about efficiency that much.
It is important but it's less important than the design, in my opinion.
If you can't deliver your app on time because it's buggy, because you had bad design decisions at the very beginning, and now making any changes in the app is pain and it's only produces new bugs, then you don't need the efficiency that you've achieved.
And if the efficiency is important, you can make your design appreciate the changes towards better performance (data oriented design as an example).