Most startup engineering job descriptions fail at the first job: attracting the right candidates. Generic JDs ("5+ years experience, passionate about solving hard problems") attract high-volume, low-quality pools. Specific JDs attract self-qualifying candidates who are a better fit, faster to evaluate, and more likely to accept offers.
A good engineering JD has: (1) a specific problem statement, (2) the actual tech stack with version specificity, (3) real scope ("you will own X"), (4) honest culture context ("we ship 3x per day"), and (5) compensation range. Everything else is filler.
| Section | What Most JDs Have | What Works |
|---|---|---|
| Opening | "We're an exciting startup" | Specific problem: "Our payment retry logic fails 8% of transactions. You'll own fixing that." |
| Role description | Generic responsibility bullets | Real scope: what they'll own, inherit, build from scratch |
| Tech stack | "Python, AWS, and related technologies" | Specific: "Python 3.11, FastAPI, PostgreSQL 16 on AWS RDS, deployed to ECS via GitHub Actions" |
| Requirements | "5+ years, strong CS fundamentals" | Specific signals: "Has owned a service through a 10x traffic spike" |
| Culture | "Fast-paced, collaborative team" | Real context: "We have 4 engineers, no QA, and ship on Fridays" |
| Compensation | Missing or "competitive" | Actual range: "$195K–$230K base + 0.08–0.15% equity" |
Replace the company pitch with a problem statement.
Generic: "We're building the future of enterprise data infrastructure with a passionate team of ex-FAANG engineers." Problem-statement: "Our data ingestion pipeline processes 8M events/day and starts dropping events above 12M. You'd join as our third backend engineer and own rewriting the ingestion layer — Kafka to Redshift — to handle 100M events/day without loss."The second version is twice as long and ten times more useful to a qualified engineer evaluating whether to apply.
| Generic | Specific |
|---|---|
| 5+ years of backend experience | Has taken a service from 100 to 10,000 RPS in production |
| Strong Python skills | Wrote production async Python using asyncio or Celery at scale |
| Experience with cloud platforms | Migrated a production database without downtime |
| Good communicator | Has written architecture docs that other engineers shipped from without clarification |
Years-of-experience requirements eliminate good engineers who've compressed experience and include bad engineers who've accrued it slowly.
89% of engineers on levels.fyi say they check comp before applying. JDs without compensation ranges are filtered out by candidates who've been burned by lowball offers after a 5-round interview. Include: base salary range, equity range, and any bonus structure.
We help founders write engineering JDs that attract the right candidates — and advise on where to post for maximum quality reach. Talk to us about your next engineering search →
Related: How to Negotiate a Software Engineer Offer: A Founder's Playbook · 10 Interview Questions for Hiring a Senior Backend EngineerTell us about your open roles and we'll start sourcing within 48 hours.