Yup this is exactly the intuition I developed! Really helps to think of have and want. Only addition I might propose is if I want to gather all but one column you can just do gather (data,wantkey,wantval, -column that shouldn't be gathered)
https://twitter.com/VizMonkey/status/1056723714384019458
also worth giving historical context against reshape2 based functions e.g. melt/cast, and/or dare I suggest even older aggregate style solutions with reshape for us dinosaurs?
Spread and gather as in spreading butter on bread and gathering leaves into a pile: https://twitter.com/WeAreRLadies/status/1054742083607642112