I have users that have friends. Those friends are linked by some data when they accept the request. The data tree looks like this;
friends
[uid] // the users uid
[uid] // the uid of the friend
status: 'friends'
username: 'UserName1'
This is top-level data used to quickly present to the user the names of their friends, rather than each one requiring an additional query to fetch the name.
The problem comes with updating the username. If UserName1 wants to change their username, this would be one of the places it needs to be updated. The other locations are not as deeply nested so not as much of an issue.