How to write a developer CV: by level, ATS rules and two markets

What a recruiter sees in the first seconds, how a CV gets through ATS, how trainee, junior, middle and senior CVs differ, and the rules for the Ukrainian and international markets.

By Sasha Kolesnik with Dmytro AntonyukUpdated 8 min read

A CV doesn't sell you. It sells the interview. It has one job: within half a minute, the person who opened the file should know who you are, what you can do and why they should call you. Anything that doesn't help with that can go.

Below: how a recruiter and an engineering manager read a CV, how an ATS sees it, what changes from level to level, and how the rules differ in Ukraine and abroad. Ready-made templates are on the CV templates page.

What a recruiter sees in the first seconds

The first pass is a scan, not a read. The well-known Ladders eye-tracking study (2018) put the average first look at about 7 seconds. You can argue with the exact number, but not with the point: the top of the page decides.

What lands in those seconds:

  1. The title under your name. Role and level: Middle Frontend Developer · React, TypeScript. Not "Junior/Middle/Senior Full Stack", one honest position.
  2. Your latest job. Company, your role, dates.
  3. Stack. Does it match the job post, word for word.
  4. Length of experience. Recruiters do the maths themselves, so keep dates in one format.
  5. Location and format. Country, time zone, remote or relocation.

If those five things are visible right away, the CV gets read.

How an engineering manager reads it

The recruiter checks fit. The engineering manager who opens the same file next looks for something else:

  • Scale. Team size, number of users, volume of code or traffic. "Worked on the platform" says nothing. "Frontend of a lending platform, 3 product teams on one design system" says a lot.
  • Your part, not the team's. "We migrated to Next.js" sounds good but hides what you did. Write "I".
  • Decisions and trade-offs. From middle up: what you chose and why. One sentence about the reason beats three lines of tools.
  • Consequence. What changed after your work: speed, errors, money, team time.

A practical test: if a bullet can't survive "so what?", rewrite it or cut it.

The bullet formula

A good bullet has an action, an object and a result:

What you did + on what / for whom + what changed, ideally with a number

WeakStrong
Responsible for the frontendRewrote the catalogue on React Server Components, LCP dropped from 3.8 s to 1.9 s
Wrote testsAdded Playwright e2e tests for checkout, production incidents per quarter went from 6 to 1
Worked with the design systemBuilt a 40-component Storybook library now used by 3 teams

No exact numbers? Use orders of magnitude and honest wording: "about", "roughly half", "from days to hours". Never invent numbers: you will be asked about them.

ATS: how a machine sees your CV

An ATS (applicant tracking system) is where a company keeps all applications: Greenhouse, Lever, Ashby, Workable and others. It parses your file into fields and lets recruiters search by keyword. It rarely "rejects" anyone by itself, but if your file parses badly, nobody finds you.

Rules that hold almost everywhere:

  • One column. Two columns, tables and text boxes often turn into a mess.
  • Standard headings: Summary, Experience, Skills, Education, Projects, Languages.
  • Text PDF or DOCX. The PDF must contain selectable text. A scan or an image export can't be read.
  • No icons, bars or skill stars. "React ★★★★☆" means nothing to a parser and looks odd to people.
  • Contacts in the body, not in the header or footer.
  • Keywords exactly as in the post. If it says TypeScript, write TypeScript, not only TS. If Next.js, not NextJS.
  • Plain font (Inter, Arial, Calibri, Roboto), 10-11 pt.
  • File name: Firstname-Lastname-Frontend-CV.pdf, not cv_final_v3_new.pdf.

One-minute check: open the PDF, select all, paste into a plain text editor. If the text comes out in the right order with nothing missing, an ATS will read it too.

CV by level

Trainee and intern

No work experience, and that's fine. The CV rests on learning and projects.

  • Length: one page.
  • Top: a 2-3 sentence summary: what you're learning, what you've built, what you're looking for.
  • Projects instead of experience: 2-3 projects with a GitHub link and a live demo. For each: the problem, the stack, what was hard.
  • Education: courses, university, mentoring. Not every certificate.
  • What stands out: a pet project someone actually uses, open source contributions, a hackathon.

Junior

  • Length: one page.
  • Experience: even 6 months of commercial work goes first. Freelance and volunteer projects count if there was a real client.
  • Bullets: 3-4 per job, with concrete tasks.
  • Stack: only what you've actually used. No "familiar with Kubernetes" after one tutorial.
  • Projects: 1-2 strongest if commercial experience is thin.

Middle

  • Length: 1-2 pages.
  • Focus: independence. Features end to end, decisions you made, code quality, tests.
  • Numbers: performance, stability, delivery speed.
  • Remove: study projects, courses, school.

Senior

  • Length: up to 2 pages. Nobody reads more.
  • Focus: impact beyond your own tickets. Architecture, mentoring, process, link to the business.
  • Last 5-7 years in detail, older roles in one line each or under Earlier experience.
  • Summary: 3-4 sentences with your specialisation and 1-2 strongest results.
  • For lead and EM roles: team size, hiring, onboarding, how delivery changed.

Common mistakes

  1. One CV for every job. At minimum, tailor the title, the summary and the order of skills.
  2. Duties instead of results. "Responsible for", "participated in".
  3. A wall of tools. 40 names without context look like an attempt to game the filter.
  4. Photo, age, marital status for international companies. See below.
  5. Two or three pages for a junior.
  6. English mistakes. Run the text through LanguageTool or Grammarly.
  7. Dead links to GitHub, demos or portfolio.
  8. Creative design with columns and charts. Fine for designers, not for developers.
  9. Invented numbers and skills. Everything on the CV becomes an interview question.

The Ukrainian market

Language

Ukrainian IT CVs are usually in English, even for product companies with Ukrainian teams. A Ukrainian version makes sense for government and defence organisations, banks, some product companies, and posts that ask for it. When unsure, keep both.

Djinni

  • Your Djinni profile is your CV, with the PDF attached. Search is anonymous: companies see the profile without your name until you share contacts.
  • Salary expectation is in USD per month. For candidates in Ukraine it means net (take-home). Since May 2026 candidates outside Ukraine can mark it as net or gross.
  • Be realistic. Djinni reports that in 2026 candidates lower expectations more often than they raise them (25% vs 16% in Q1 2026).
  • Write the experience section like your CV: results, with stack keywords.

DOU

  • On jobs.dou.ua you apply to a specific job and attach a CV or link. A human reads it, so a 3-4 sentence note helps a lot.
  • Use the DOU salary survey as a benchmark. Summer 2026, median net per month: junior about $950, middle $2,500, senior $4,500. These are across all specialisations; check DOU's interactive tables for frontend.

Norms

  • No photo needed. Work.ua and robota.ua templates still offer photo and birth date, but IT doesn't need them.
  • English level on the CEFR scale: English: B2 (Upper-Intermediate). Don't claim "fluent" without reason: the first call will test it.
  • Work format and location: city, remote or office, relocation readiness.
  • Deferment (бронювання): if it matters to you, say so in the cover note or use the site filter, not in the CV.

The international market (US and Europe)

What to leave out

  • Photo, age, date of birth, marital status, citizenship. In the US these create anti-discrimination risk for the employer, so such CVs are sometimes set aside unread. In Europe photos still appear (Germany, for example), but in tech they're long optional. Default: no photo.
  • Full address. City and country, or a time zone, are enough.
  • Europass looks dated for technical roles. Use a plain one-column template.

What to include

  • Clean English, short and active: Built, Reduced, Led, not Was responsible for.
  • Metrics in most bullets. Internationally this is the default expectation.
  • Time zone and overlap: Kyiv, Ukraine (UTC+2) · 4+ h overlap with US East Coast.
  • Right to work: if you hold an EU work permit or work as a contractor through your own company, one line.
  • Date format: Jan 2023 - Present, the same everywhere.
  • Length: in the US, 1 page for junior and middle, 2 for senior. Europe is more relaxed about 2 pages.

Resume or CV

Americans say "resume", Europe and Ukraine say "CV". For a developer it's the same 1-2 page document. An academic CV with publications is a different thing.

Tailoring faster

Rewriting a CV for every job by hand is slow. That's why ShortLesson is building vacancy mode: paste a job post and get a match score with a visible formula, the keywords you're missing, and lessons and interview questions for exactly that role. What you can use today:

Pre-send checklist

  • The title under your name matches the job title
  • The stack from the post appears in the CV word for word
  • 3-5 bullets per job, most with a result
  • One column, standard headings, text PDF
  • GitHub, portfolio and LinkedIn links open
  • No photo or age (international companies)
  • English proofread
  • File name has your name and role

All resources