There are several keys to writing a good job description, at least for technical roles.
- Lead in with what the engineer is going to get out of the role. Try to be specific. Working with the latest technology? Wonderful training or learning opportunities? - Briefly talk about your company, and again mention specifics. You serve XYZ important clients (social proof). Or you handle X million transactions per day.
Next, you'll want to talk about the role. For this, talk about the objectives of the role – what do you want the person to accomplish. For example, you don't want to say 'You will be writing PHP code all day', instead you want to say 'You will be rebuilding our XYZ micro-service to be more performant'.
This is what sort of skills the person should have. It's best to avoid specific requirements like a number of years of experience, but instead talk about what they've done in the past (e.g. shipped code to production)
This is where you can pimp out the company a bit more, and also talk about the benefits. Make sure to emphasize the company is stable and/or growing, and is a great place to work.