I've been working with Unity for a few years, and I've made a few multiplayer prototypes along the way. I wouldn't, however, call myself an expert in multiplayer programming by any means. The most complex project I've made was a locally hosted server where players could log in with a custom name and move around and chat with others (almost like a mini-MMO).
I've used Photon for all of my Unity networking endeavors, but are there were any alternatives or other frameworks available that would suffice or surpass Photon in features/usability? Building off that, what rules and decisions go into the architecture of multiplayer games? In a general sense, what design choices need to be made about what server and client-side functions should be?