Question: I am dealing with a really slow shell connection. It is in the cloud and I am very far from the server. My connection also breaks sometimes as it is over the internet and I may also be using shared Wifi or 3G. Is there a way to see what I type instantly? Trying to type commands and waiting for each character is atrocious.

Answer: 
an alternative (and also in addition) to dmourati answer: use `screen` or `tmux` or other things, to keep sessions alive when you are disconnected. (You simply re-attach to the session after you reconnect, and see the terminal as you left it, even with full screen programs [vi, etc]). It also have many other benefits (sharing sessions with co-workers, etc)
 (as in Mosh own faq it states: 

> 
> Q: Why is my terminal's scrollback buffer incomplete?
> 
> 
> Mosh 1.2 synchronizes only the visible state of the terminal. Mosh
>  1.3 will have complete scrollback support; see this issue and the others which are linked from there. For now, the workaround is to use
>  screen or tmux on the remote side.
> 
> 
> 

And you should also use `rsync` to copy files, without having to re-send already sent parts over the network when the connection dies.
For future readers of this thread, @lowellheddings' tip in his [blog](https://www.howtogeek.com/howto/linux/keep-your-linux-ssh-session-from-disconnecting/), together with the use of [screen](https://linux.die.net/man/1/screen), could help overcome this issue: 

You can configure the ssh client to automatically send a protocol no-op code code every number of seconds so that the server won’t disconnect you. This setting is sometimes referred to as Keep-Alive or Stop-Disconnecting-So-Much in other clients.  

Add the following line to the /etc/ssh/ssh\_config file:  

 ServerAliveInterval 60  

...