A good bullet says what was different because you were there. A weak bullet says what you were assigned. Almost every resume that isn't getting calls is full of the second kind, and the fix is mostly a matter of asking yourself one question per line: what changed?
Here is the same piece of work written both ways.
Responsible for developing and maintaining REST APIs for the order management module.
Rebuilt the order search API so support staff could find orders by phone number; it replaced a manual lookup that was taking the team most of a morning each day.
The first one is a job description. Anyone on that team could have written it, including the person who did the least. The second one has a specific thing you did, who it was for, and what it replaced. A recruiter reading quickly can see that there was a problem and you solved it.
The shape that works
You will see formulas for this ("action verb + task + result", or the XYZ format). They are fine as a starting point. The underlying idea is simpler: a bullet should contain a thing you did and why it mattered, in that order, in one or two lines.
"Why it mattered" can be:
- a number (latency, revenue, time saved, users, error rate)
- a before and after ("went from a weekly manual export to a scheduled job")
- who it unblocked ("let the sales team quote prices without asking engineering")
- what it made possible later ("became the template for the other three payment integrations")
You don't need a number in every bullet. Forcing one in leads to invented precision like "improved efficiency by 37%", which an interviewer will ask you to explain and you won't be able to. If you know the real figure, use it. If you only know roughly, say roughly: "cut the nightly job from a few hours to about twenty minutes" is honest and still concrete.
Before and after, by role
Backend engineer, two years into a services company
Before:
Worked on microservices using Java, Spring Boot and Kafka.
After:
Moved invoice generation off the main request path onto a Kafka consumer, so checkout no longer timed out during month-end billing runs.
The technologies are still there. They now sit inside something that happened.
Frontend engineer
Before:
Developed responsive UI components in React.
After:
Replaced the hand-rolled date pickers across six forms with one shared component; the support tickets about wrong booking dates on mobile stopped.
Product manager
Before:
Managed the product roadmap and coordinated with stakeholders.
After:
Dropped two planned features from the Q3 roadmap after onboarding interviews showed users were stuck at KYC, and moved the team onto that instead; KYC completion went up noticeably over the next two months.
PM bullets are often the vaguest on any resume, because so much of the work is coordination. The fix is to name a decision you made and what came of it. If you can't attach a number you are sure of, describe the direction honestly.
Product designer
Before:
Designed user flows and wireframes for the mobile app.
After:
Redesigned the address step in checkout after session recordings showed people abandoning at the pincode field; shipped with autofill from pincode and a shorter form.
Verbs, briefly
Start with a verb that says what you did: built, rewrote, cut, moved, replaced, shipped, removed, migrated, designed, ran. Avoid the ones that hide you: "responsible for", "involved in", "assisted with", "worked on", "part of the team that". Those phrases exist to let you claim a project without saying what your share was, and readers know it.
If your share genuinely was small, say what it was. "Wrote the retry logic for the payment webhook handler" is a fine bullet. It is honest and specific, and an interviewer can ask you about it.
How many bullets per role
Three to five for your current or most recent role. Two or three for the one before. One or two for anything older. A role with eight bullets is usually two good bullets and six that restate them.
Order them by how relevant they are to the job you are applying for, not by date. The first bullet under each role gets read most carefully, so put your strongest one there.
Tailoring without making things up
Different jobs care about different parts of what you have done. A fintech backend role cares about your payments work; a data platform role cares about the pipeline you built. You don't need new experience for each. You need to choose which true bullets go first and describe them in the vocabulary the posting uses.
If the posting says "event-driven architecture" and your bullet says "Kafka consumer", it is reasonable to make sure both terms appear. It is not reasonable to add "led the event-driven architecture" if you didn't. The guide on tailoring a resume for each job goes through where that line sits.
OpenRoles builds a tailored version per job this way: it re-says what you have already done in the posting's words, and when it has to assume something, it tells you what.
A quick check before you send it
Go through each bullet and cover the first three words with your thumb. If what remains could appear on a colleague's resume unchanged, rewrite it around something that happened.
Then read just the first bullet under each role, top to bottom. If someone read only those lines, would they know what you are good at? If yes, the resume will hold up. If you want a second look at how it reads to a parser and a screener, the free resume score runs without an account.