OOP (Object Oriented Programming) has a fundamental basis in Game Development since games generally always deal in Objects.
Objects have properties (variables for example) and purpose that are only relevant to themselves. With that said ive always gone by the notion that “Objects should manage themselves”. This is an important concept to understand when dealing with Objects, especially when you realize that High Cohesion and Low Coupling (another fundamental concept in programming, especially with OOP) also guides you when it comes to not only Code (or BP) cleanliness and readability but also its performance efficiency and its ability to be extended when necessary.
Id be interested to see how your Project files are laid out as well. A Clean and organized project that has obvious structure generally will also help you foster good management of Code (or BP) structure as well.
Maintaining a good standard is difficult but will help you to no end further into the future. I recommend you google such a topic or better yet, take a look at some of the Sample projects that you can download for free on the Marketplace and see how they manage their file and Code (or BP) structure.
Generally if you find a piece of Code you are copy and pasting all over the place, you should make it a function.
Your variables should all follow the same naming style, as well as your functions and assets.
Especially for Blueprints i like to make sure that the Execution Path (white lines) are straight as is practical.
Also, as for you can “only set variables on Tick” this is incorrect, variables can be set anywhere if that SetNode receives execution.
Try thinking more about where is it appropriate to hold information and also how you intend to access and modify it.