Why would I instanciate components in the constructor ?

They’re tutorials, they just show you how to do that in case you want to. There’s no rule saying you have to.

I put things in C++ that either need to be there (as in the thing they’re doing isn’t available in blueprints) or if I want that code to be rock solid and never change. It reduces the amount of things I have to debug after a blueprint change.

The primary consideration you need to balance out when doing C++/Blueprints is “do I need to access this from C++?” If the answer is yes, then you have to declare and instantiate the thing you’re accessing in C++ as well. You can’t define a variable or reference in blueprints and then access it in C++.