The smartest option is certainly the intersection function. The intersection is automatically adjusted when the geometry is changed, regardless of the surface types used. This way, you can easily edit the model.
The disadvantage of this function is that the working speed decreases in the case of several larger intersections, as the intersection lines and thus the entire structure have to be constantly recalculated.
Tips
When editing this kind of model, switch temporarily to the wireframe mode. Thus, the calculation of the model is suppressed for the rendering, which can be very time-consuming for complex models. For check purposes, you can switch back to the rendering mode at any time.
The intersections should always be created one after the other; that is, for two surfaces in each case only, otherwise the intersection lines of all selected surfaces would be calculated and the surfaces would be divided into the corresponding number of partial surfaces. This would lead to significant additional effort for the deactivation and to a further slowdown due to the larger number of intersection lines.
Another way to create this kind of node is to use the "Connect Lines/Members" function (in the "Tools" menu) and edit the surface boundary lines in such a way that the surface parts lying in the node are no longer available. These models can be edited more quickly because the model does not have to be recalculated after each change. This option can be implemented quickly when defining all surfaces as "flat" surfaces. However, they cannot be used easily to connect curved surfaces (such as pipes).