For me, if-branching is the hardest to wrap my head around. "If"s are so natural to CPU programming that it's second nature to any developer but on GPU, it's expensive.
the key for me is thinking in terms of sets—much of your conditional logic is probably about sorting things into sets anyway.