Most software engineer job descriptions are written for the ATS, not for the candidate. They read like a legal dump of every tool the company has ever used. Engineers skim them in twenty seconds and bounce.
This is how to write one that supports both inbound applications and cold outreach.
What engineers look for first
In order:
- Salary range (or clear statement it is listed later — better to list it).
- Stack they would actually use in the first six months.
- Seniority and scope — IC vs lead, what they own.
- Location / remote rules — timezone overlap, office days.
- Team size and product context — one concrete paragraph.
Everything else is secondary. Benefits encyclopedias and "culture deck" adjectives do not compensate for a missing band.
The structure that works
Title
Use searchable, standard titles: Senior Software Engineer, Backend — not Code Wizard or Full Stack Ninja. Fancy titles hurt Boolean search and LinkedIn matching.
One-paragraph mission
What the team builds and what this person will change in the first two quarters. No mission-statement poetry.
Responsibilities (5–7 bullets)
Start each with a verb. Describe outcomes, not tools.
Good: "Own the billing API end-to-end, including on-call for that surface." Bad: "Experience with REST, GraphQL, gRPC, SOAP, and event-driven architectures."
Requirements (must vs nice)
Split ruthlessly.
Must: 3–5 items you would reject over. Nice: everything else.
If your must-have list is twelve lines, you do not have a role — you have a wish list. That is how reqs stay open for six months.
Stack
Name the primary language and the two systems they will touch weekly. Move the rest to nice-to-have. Primary skill should match a real sourcing page — e.g. TypeScript, Python.
Comp and logistics
- Salary range (location-adjusted if needed)
- Equity one-liner if applicable
- Remote / hybrid / onsite + timezone
- Interview process length (e.g. "two interviews + paid exercise, under 2 weeks")
How to apply
One clear CTA. If you also cold-source, the JD should match the email pitch so candidates do not feel bait-and-switched.
Template
# Senior Software Engineer, Backend
We're hiring a senior backend engineer to own [system] for [product].
In the first six months you'll [outcome 1] and [outcome 2].
## What you'll do
- ...
- ...
## Must have
- ...
- ...
## Nice to have
- ...
## Stack you'll use weekly
Primary: [language]
Also: [system], [system]
## Comp & logistics
[salary range] · [equity note] · [remote/timezone]
Process: [steps], typically [N] weeks.
## Apply
[link] or reply to this thread with a link to work you're proud of.
Common failure modes
Kitchen-sink requirements. "10 years Kubernetes" for a CRUD app.
Hidden band. Especially fatal in remote outreach.
Copy-pasted from a different role. Frontend JD with Java must-haves.
Unpaid 8-hour take-homes advertised up front — many seniors self-select out before applying.
DEI paragraph with contradictory must-haves (e.g. "inclusive" + degree from three specific schools only). Be consistent.
Using the JD for sourcing
A clear primary skill + seniority lets you:
- Open the right skill hub.
- Write Boolean strings without guessing — boolean guide.
- Personalise outreach against the same scope — email guide.
If you cannot explain the role in six bullets, fix that before you buy another sourcing seat.
We also have a free job description template and optimizer if you want a structured starting point.
