Well, the vim convention is different from what we're used to. See, for example, how paste works by default. If you press the p - plucked text appears after the cursor instead of AT cursor, as we used to.
Where is the cursor at the end of paste ? he placed one character to the end of the new text! Therefore, if you want to continue writing after the text, you need to go to the right, and then press i !
You just need to switch on the idea that the actual over - one character to the right (or down) than the one that you see. This is a vim convention.
If you start using a / o to enter the default insert mode instead of i / o , it can help you do this. Just get to the idea that a is the default, and then inserting and positioning the cursor exiting insert mode, and much more will make more sense.
Edit
A few words to answer your question (and not help you cope with the behavior)
The most important feature in vim - a sequence of behavior. The goal is to let you know exactly what will happen without even looking at the screen.
So, when you exit insert mode, where should the cursor be? It can not be after the text, because if the text ends at the end of the line, the cursor can not get there! (cannot be after the end of the line). Same for the paste - if you stick to the end of the line, you'll get the cursor can not be inserted after the text!
Because of the requirement of consistency - if it sometimes can not be after the pasted text, then there should never be. Otherwise, if you type without looking at the screen, you do not know where the cursor is - you have to look and check!
Many of vim behavior can be explained as follows: why is "^" brings you to the first character, and not from the first to the first? (so a will work to paste, for example, using paste , $ , etc.), because if the first char is at the beginning of the line - you cannot go “one before this”, and you want to be sequential.