Biology consists of much detailed information regarding genetics, molecular biology, biochemistry, and a variety of other components.  This has provided a great deal of insight into how life functions, evolves, and reproduces.  However, there are other realms of biology that attempt to find order where perhaps none exists.  In discussions of topics like "selfish genes", or "kin selection", or Hamilton's rule, we are getting into areas where causation is being sought where none may specifically exist or at least, not of a general type.

Obviously there is an explanation for why things are the way they are, but it may not be amenable to generic rules or equations.  To offer some consideration of this, I want to use an analogy to the operation of computer systems, not because they are representative of biology but because in some ways they parallel some of the intrinsic problems faced with increasing complexity.

When we consider large computer systems, there is a great deal of detail involved in their design, architecture, and operation.  Specific engineering implementations require precision in how these machines operate and to ensure a smooth interaction between all the hardware components.  Protocols exist to manage the behaviors of the individual components and programming languages exist to provide the functionality to exploit these machines for various purposes.

At the machine language level, there is a detailed instruction set that provides access to hardware resources and provides a means whereby functions can be implemented and shared between many applications. Applications become increasingly sophisticated in a whole range of circumstances from gaming, to business, to telecommunications.  At each step, there is an incredible amount of detailed information that is used to manage the operation, programming, and behavior of these systems and applications.

Let me be clear that the term "behavior" in this context is intended to describe the external metrics or manifestations of the program's functions.  In other words, we would expect that with a machine that is capable of executing a certain number of instructions per second, that when we indicate how many instructions are going to be processed that we can determine how long the program should run.  However this isn't the case, except as a gross approximation.

When large systems support tens of thousands of users running thousands of applications, the picture changes considerably.  This is the realm of computer performance analysis, and while there are numerous tools and mechanisms available to assist in managing these environments, the phrase that most often occurs as a result of any particular question regarding the system's or an application's behavior is; "It depends".

In other words, despite the fact that everything from the engineering to the programming is under the control of the most detailed processes, there is little one can say conclusively about any particular system or unit of work without examining it within the context of its usage.  Even then it is nearly impossible to duplicate the behavior of a system or application in any meaningful way.

It should be clear that the instruction processing itself is not what is subject to variation, but rather it is the interaction of all the elements of the system that will affect the resultant behavior of any unit of work.  Therefore we cannot reliably state how long a unit of work will run even when it is processing exactly the same records or transactions. In general, the performance of units of work depend on a variety of factors, but none can ever be controlled precisely enough to reliably offer guarantees of how the work will behave.  

So, the connection I'm suggesting in biology is that there may also be numerous unknown behaviors and many events that simply don't reduce back to genetics or DNA (or whatever your favorite perspective is).  Therefore general theories such as the gene-centric view (selfish gene), group selection, kin selection, or Hamilton's rule will never be fully applicable because for as many situations that they may describe, there are an equal number for which they bear no resemblance at all.  

Often the impetus for these ideas is that there is a sense that natural selection must be able to trace its roots back to some genetic function that has conveyed an advantage.  However, this places an unnecessary condition on such analysis, since it suggests that natural selection is operating with a purpose.  This becomes especially problematic when we examine behaviors which may be far more flexible than a genetic purpose would imply.

In other words, some traits may be selfish while others are altruistic.  Some may favor related kin while others simply favor the proximity of others in a group.  It seems presumptious to suggest that such behaviors must necessarily equate back to a "rule of thumb" from genetics, instead of recognizing that any of them could be equally selected for, provided only that they were more successful than the alternatives.  

From that perspective, it may make sense to suggest that all of these ideas are equally applicable at times and totally inappropriate at times.  

In other words, "it depends".