echo outputs a newline at the end of the string, not at the beginning.
printf interprets \n as a newline, but \n%s prints the newline before the rest of the output, not after it.
And since with read -s, we suppress the terminal local echo of what is being typed, when the user presses Enter, that also suppresses the CRLF echo.
In any case, the syntax to read the password should be IFS= read -r passcode, or it wouldn't work properly if the password contained backslash or $IFS characters.