Error messages are the real interface
Nobody reads a welcome screen. Everybody reads an error message, slowly, often twice. That makes it one of the most important pieces of writing in any app.
Say what happened, then what to do
"Your card was declined. Try another card or pay at the machine" works because it answers both questions people have: what went wrong, and what now.
Never blame the person
"Invalid input" sounds like an accusation. "That date is in the past. Pick a date from today onwards" sounds like help.
Write them first
I now write the error messages before the happy path. It forces the team to decide what can go wrong, and it's much cheaper to decide that on paper.