To protect yourself from sending messages too hastily, you can add a final confirmation, which you can of course make as elaborate as you wish.
(defun confirm-empty-subject ()
"Require confirmation before sending without subject."
(let ((sub (message-field-value "Subject")))
(or (and sub (not (string-match "\\`[ \t]*\\'" sub)))
(yes-or-no-p "Really send without Subject? ")
(keyboard-quit))))
(add-hook 'message-send-hook #'confirm-empty-subject)
If you always want to be asked for for confirmation, set
message-confirm-send to non-nil so the question “Send message?” is
asked for confirmation.