I can update Erlang programs _while they're running_ without any downtime. We do this often at our company.
See http://erlang.org/doc/design_principles/release_handling.htm... for the basics. With no shared state, and no global variables, and no side effects, you can update functions so the next time they're called they're something else.