I know that not all jQuery functions can be chained together. Is there a rule of thumb on this. When can we not chain 2 functions together.
You can chain when the function returns a "jQuery object".
For example, .css(property, value) can be chained, as the doc says it Returns jQuery:

while .height() cannot, because it returns an integer.

Typically, the functions that returns "jQuery objects" are those which typically would not "return a value", e.g. setter methods (.css(prop, val), .addClass()), event binders (.click(handler)), etc.
(Of course traverse methods (.parent(), .find(), etc.) can also be chained but the returned object will be different from the input.)