Some thoughts on the challenge suggested solution provided:
The reason why updating a single user property updates the entire application, is that a signal does not support a mutable data structure by default, unless a custom equality function is provided. In our case, we have a single signal containing an object(mutable) that is used in all components. Object.is always returns false for the underlying mutable object and every component is re-rendered.
Address and job related fields are grouped under their corresponding FormGroups. The idea behind this is not to introduce a signal(computed or not) for each user property to make fine-grained reactivity changes and trigger the change detection mechanism only for the components which contain updated user properties.
Using name and note signals containing only primitive values, fixes the half portion of the problem. According to second point, I needed a way to trigger cd for address and job signals only when there is a change in their properties. Since, signals by default does not support mutable data, I provided a custom equality function that checks if the previous with the current signal version is deeply equal. If this is the case, and one of their property values have been changed the re-render is executed. In any other case, for example when we update the name or note field the re-render is not performed for address component because address signal previous and current version is equal.
Some thoughts on the challenge suggested solution provided:
Object.is
always returns false for the underlying mutable object and every component is re-rendered.