versionCode is not shown to users and therefore is an incremental internal number to differentiate the various versions, and that allows the Android system not to let the user install an application with a lower version than the one already there. Likewise, you will not be able to put a version with a
versionCode lower than what is there in the Play Store.
Good practices say that with every new version
versionCode should increase by 1 in 1.
versionName is the version that users come, so it's just text, and the programmer can write things like:
Typically this style of versions follows the following naming pattern:
Where% is the version numbering for very large changes,
<major> is when you have minor additions of features, and
<minor> are usually only minor fixes.
1.1.14 would be just minor fixes of things that had not been correct.
1.1.14 would be an addition of one or other small functionality.
1.1 would be a very wide difference and / or modification in most of the functionalities of the entire application, which may even be incompatible with previous versions.
Official Application Documentation for Google