I would recommend looking at cpw's IronChests and CompactSolars mods as examples: https://github.com/cpw
In essence though:
GUI: You have a container on the server side, a GUI on the client side, they talk, plenty of examples in vanilla as to how, but usually it just works.
TileEntities: You use the getDescriptionPacket call or whatever it was to send information to a TileEntity, you want to minimize the size and how often these occur, 'emulate' things on the client if possible, the lower network usage then the better.