When are you no longer a junior developer?
No fixed year ends a junior role. Compare your team's level criteria with a worked example of taking a small feature from unclear request to checked result.
No fixed number of years or universal task decides when you leave a junior role. Compare your work with your team's level criteria; one useful signal is delivering a bounded feature from clarification through a checked result while still asking for help when needed.
Imagine a shop asks for a delivery-note field. You might receive a list of code changes, or you might first find out who uses the note, make the change, and check that it works after release. The second job is broader, but you can still ask other people to decide what the note should mean.
There is no shared anniversary when a developer stops being junior. Check your team’s level criteria against the work you actually do. A useful signal is whether you can take a small, partly unclear feature through delivery and check the result, asking for help without dropping the work.
Time can prompt a career conversation, but it does not describe the scope of a job. Two engineers with the same number of years may be asked to solve different kinds of problems. The next question is what each person is trusted to own.
Compare scope, not just time#
Public career frameworks show what this difference can look like. Dropbox’s IC1 framework describes defined tasks and problems with defined solutions, with specific guidance. Its IC2 framework moves to defined projects: the engineer can choose or define a solution and deliver from design through rollout. GitLab’s Intermediate framework expects independent planning, estimating and delivery of small or moderate solutions, while seeking guidance when blocked. These are examples of two companies’ criteria, not a universal definition of a title.
None of that says “never need help.” It says the unit of responsibility got larger. At the first level, someone else has usually decomposed the problem enough that your main obligation is to complete the assigned piece well. At the next one, the team can hand you a bounded outcome and expect you to discover several of the pieces yourself.
Dropbox also publishes typical time-in-level guidance. Those numbers are Dropbox’s promotion guidelines, while its level pages describe scope, autonomy and impact. A time range can start a conversation; it cannot show which responsibilities you have carried.
IF YOU REMEMBER ONE THING
Ask which bounded outcome you can carry with guidance when needed, then compare that evidence with the criteria your own team uses.
What end-to-end ownership means#
Here is a simplified, illustrative example, not a real project: add an optional delivery note to an order. A task-sized version starts after somebody else has decided where the field lives, how it is validated, which API changes, whether old clients break, how it appears in the UI and what counts as done. You can write excellent code from that point onward and still be working on a task somebody else owns.
Feature ownership starts one step earlier. You notice that “optional” still leaves questions. Is an empty string different from no value? What is the maximum length? Does the note belong on the order forever or only on the next delivery? Which clients send the old payload? Who needs to see it? You do not need to answer every question alone. You do need to notice which answers are missing and get them before they turn into rework.
Then comes the part engineering ladders often compress into the word delivery. You break the work into changes small enough to review and reverse. You find the dependency another team owns before it becomes the last day of the project. You know which test demonstrates the new behaviour instead of merely adding coverage. You tell the affected people when the interface changes. If the change is large enough to need a decision before implementation, you use a design document while the answer can still change instead of writing one after the fact.
The boundary most clearly appears after the merge. Someone who owns the feature does not disappear when the pull request closes. They know how it is released, which signal says the new path is working, what a rollback would and would not undo, and who should hear about a problem. That is the same reason shipping without supervision is about reversibility, detection and reporting rather than confidence. End-to-end ownership is the smaller career version of the same idea: the work ends at an observed outcome, not at a green branch.
Communication belongs inside the work rather than beside it. If another team has to change a client next week, they are part of the delivery. If support needs to recognize the new behaviour, they are part of the delivery. If product needs to choose between two edge cases, that decision is part of the delivery. A feature is not end to end because one engineer touched every file. It is end to end because one engineer kept track of every condition required for the outcome to be real.
Asking for help does not reset the work#
An easy mistake is to read “independent” as “does not ask.” An engineer may wait while a decision is blocked because asking feels like evidence against the level they want. Yet GitLab explicitly expects an Intermediate engineer to seek guidance when blocked, and Dropbox’s IC2 description still includes high-level guidance. The question is what happens to the work when help is needed.
Handing ownership back sounds like: “I do not know how to do this; what should I do?” Keeping ownership sounds like: “The old client sends no field, the new path accepts null, and I see two options for validation. I think option A preserves compatibility; I need you to confirm whether empty text should be accepted.” The second person is still helping. They are not reconstructing the problem before they can help.
This is why good escalation is a positive signal rather than a concession. You tried something, reduced the uncertainty, named the decision you cannot safely make alone and asked before the cost of being blocked became larger. The work never stopped being yours. After the answer, you carry it forward, update whoever depends on it and close the loop.
The same pattern shows up in review. A person moving beyond task-level work is not the one who receives no comments. They are increasingly able to separate a correctness issue from a preference, explain why they chose an approach and change it without turning the review into a defence of themselves. The next node in this path — reviewing without starting a fight — is where that responsibility becomes reciprocal: you have to make somebody else’s work better without taking ownership away from them.
When the title lags behind the work#
A title can lag behind the work for several reasons: reviews may happen on a schedule, a role may have narrow written criteria, or a team may use different titles altogether. That is why the first useful step is to compare actual responsibilities with your own company’s criteria.
As a practical self-check, take two or three completed features and reconstruct their boundaries. Who clarified the outcome? Who found the dependencies? Who chose the implementation shape? Who decided the rollout? Who checked the behaviour after release? Who told the affected people? Those answers give you examples to discuss with a manager. They do not, by themselves, decide a promotion.
Evidence beats the argument from time served because it gives a manager something they can compare with the actual framework. “I have been here three years” asks the company to treat elapsed time as the criterion. “On these three features I owned planning, dependencies, rollout and follow-up, with these outcomes” asks whether the work matches the next level. If the answer is still no, the useful follow-up is specific: which responsibility is missing?
Keep that evidence while it exists. The further along the ladder you go, the more of the work becomes coordination, prevented failure and decisions that leave no diff behind. A running promotion record is useful long before a formal promotion packet because it makes the gap visible while there is still time to choose different work.
Where it goes wrong#
The obvious failure is trying to look independent. Questions are delayed, risks are hidden, and a feature arrives late because the engineer wanted to prove they could carry it alone. This demonstrates the opposite of ownership: the person’s self-image became another project risk the team had to discover.
The quieter failure is taking responsibility for everything around the feature and becoming the only person who can finish it. Every question comes to you, every release waits for you, every incident wakes you. That can look like growth for a surprisingly long time because the feature keeps shipping. What actually grew was a dependency on one person.
End-to-end ownership therefore includes leaving the work in a state another engineer can understand. The decision is written down. The rollout is repeatable. The dashboard is not a private bookmark. The support note exists somewhere other than your memory. Owning the outcome does not mean becoming the outcome’s permanent operator.
And the last failure is chasing the label before the work can exist. Some teams simply do not hand small projects to one engineer; the architecture, process or staffing model keeps everything split into narrow tasks. In that environment, waiting longer does not create ownership. The useful career question becomes whether you can deliberately take a bounded feature, or whether you need a different team or role to get the scope the next level expects.
Questions people also ask
4 QUESTIONSHow many years should you be a junior developer?
There is no industry-wide number. Some companies publish typical time ranges, but their level definitions still describe scope, autonomy and ownership rather than a birthday for the title. Use time as a prompt to inspect the work you are getting, not as proof that the level must change.
Is three years too long to still be called junior?
The title alone cannot answer that. If you already plan and deliver bounded work with little day-to-day direction, coordinate the people affected, verify the result after release and know when to ask for help, compare that evidence with your company's next-level criteria. If the work is still assigned as isolated tasks with someone else carrying the outcome, the missing step is ownership rather than elapsed time.
Do mid-level developers still ask for help?
Yes. State what you tried, what is uncertain and which decision needs help, then carry the answer back into the work. GitLab's Intermediate framework explicitly says to seek guidance when blocked.
How do I prove I am ready for the next level?
Use completed work rather than adjectives. Pick two or three features and show what was unclear at the start, what you decided, who you coordinated with, how the change was released, what signal showed it worked and what you did when something changed. That is stronger evidence than a list of technologies or years served.