<input type="text" placeholder="First name">
The hint disappears as soon as the user types, and placeholder grey often fails contrast
Once the user starts typing, the placeholder disappears. Users who are interrupted or have memory difficulties can't check what the field was for. The default light grey text also often fails the 4.5:1 contrast rule. Use a visible <label>, and keep the placeholder for an example at most.
"Screen readers never read placeholder text" is the tempting wrong answer. Browsers often use the placeholder as the accessible name when nothing better exists, so it is read. But it is a weak last resort. The name attribute is for form submission and gives no label.