You should only use ?. chains when you expect an object may not exist. For example, if according to our business logic, a user must have an address object, but the address object may not have a street property, we wouldn't use the optional chaining operator because we expect user.address to never be undefined.
const street = user.address.street;
But if not all users have an address, we might use the optional chaining operator:
const street = user.address?.street;
Or, if we aren't even sure if the user object exists:
const street = user?.address?.street;
We don't want to overuse it because if we expect that all users have objects, and we come across one that doesn't we probably want an error thrown so we can see it and go fix the problem. Good errors make debugging easier.