Rules for Inheritance
Objects of subclasses should be substitutable for objects of their superclasses. If they aren’t we could have silent errors in our code. Whenever Possible, avoid overriding concrete methods. - Michael C. Feathers
YAGNI (You aren’t gonna need it)
Always implement things only when you actually need them, not when you just assume that you could need them. - Ron Jeffries
This can be generified and seen in a broader context than just software development. See ..