Remote Event is one-way-connection Client-Server / Server-Client
Remote Function is two-way-connection Client-Server-return back to Client / Server-Client return back to server
examples:
So Simply if you use a remote event you fire it like this:
remote:Fire(stuff) | remote.OnServer/ClientEvent:Connect(function(stuff) print(hi) end)
the remote will print hi
but on the other side Remote functions work like this:
local ret = remote:Invoke(stuff) print(ret) | remote.OnServer/ClientInvoke = function(stuff) print(hi) return "hi" end
the remote will print hi 2X (twice) because of the first print and the return
click the source for more info.