Causal Reasoning in Systems