I keep seeing job postings as "Java Software Developer III" or "Software Developer II". Is there any official documentation that classifies these distinctions?
They are not supposed to be employer specific. Actually they come from the United States Bureau of Labor Statistics, which maintains a database of occupational descriptions. This database has a list of standardized job titles with fairly precise definitions for each one. In many professions, including computer programming, they have several bands based on level of expertise, years of experience, and/or management responsibility... these bands are designated with roman numerals, thus, COMPUTER PROGRAMMER I, COMPUTER PROGRAMMER II, etc. etc.
The BLS descriptions are reasonably rigorous and precise so that they can compare apples to apples. A lot of people use these definitions when they want standard job descriptions and titles, including job listing sites, salary comparison engines like salary.com, and many human resource departments, especially at larger companies.
The official definitions of the five levels of programmer are here. It's too long to quote here but it is by no means random or employer-specific.
On the other hand, in the US, you'll generally find that the best places for programmers to work do not generally rely on US government job descriptions but instead create their own, more meaningful system.
They are employer specific defintions.
But generally they are a way to grade developers (for the purpose of salary and seniority).
Each company is different but it will generally look like this:
SD Requires no Experience. SD I Requires X years in the industry or Degree SD II Requires Y years in the industry SD III Requires Z years in the industry Senior SD Requires Z years in the industry but you are responsible for something But not yet people (For that you would need lead in the name). After this is gets more vague. And varies a lot between companies.
The info below by @Renesis is also solid.
Similar to Martin York's answer but I think the real way these things come about is the need for Finance (and subsequently HR) to define people as a cost.*
When a new SE is needed, the manager will make a request to Finance through HR for a new headcount at particular job level. A better justification will be needed for an SE III than an SE I.
HR/Recruiting will then search for candidates based on the salary range approved and a fuzzy definition of experience associated with that level:
SE I Salary in range of A-C X yrs SE II Salary in range of B-D Y yrs SE III Salary in range of C-E Z yrs
These definitions will also have internal job descriptions associated and the recruiter will try to match those up with the possible candidates' recent experience. (I.E. "Helps in gathering and defining requirements" for an SE II or III)
When the manager who needs the new "headcount" finds a candidate that is suitable, they will be given an offer as SE ____ where the title is what the position was approved as.
Down the road, a promotion may also be based on these salary ranges. If the candidate has reached the top of the range but still needs a raise, and the manager wants to keep them, they may get a title promotion along with the raise simply to justify the raise to Finance.
Because of this, you may have two developers in the same company with similar skillsets and different titles. It all has to do with what roles were approved for hiring.
It also means that these titles don't mean much (if anything) when comparing two different companies.
***** As to how these are actually get created within a company, it seems like the usual process is that as a company grows, the Finance department feels the need to impose stricter salary guidelines on each department. HR is tasked to define these roles, research comparable salaries and ranges (to also find out if they are already overpaying), and then HR asks for input from the department on actual definitions.
I was part of a company that began this process at around 7 years old and 150 employees. I left but now I am part of a company that already has this implemented. Interestingly, the company I am now at (public company) even has a number that can be used to equate and compare levels across all roles in the company, in every department. Talk about job role being defined to death! It is all borne out of Finance and HR.
A lot of places have something called "bands." Higher bands represent more senior positions, where "senior" can be do to more/better education, more experience, more skilled, or more politically connected. The titles go like this:
- I - Junior Engineer
- II - Engineer
- III - Senior Engineer
- IV - Principle Engineer
- V - Fellow or Advisory Engineer
- VI - Consulting Engineer
New hires are generally I or II depending on education. People generally hit III relatively quickly, and tend to stay in there for a while. The majority people never make it past IV. V requires publications and recommendations from both senior management and senior technical staff. VI notionally requires a national or international recognition.
The significance of IV and V tend to vary widely from department to department. Some places V is used as an alternative to a manager title while the person is assuming a management-like role. It also depends on the sophistication of work done by the department. Ironically, being in a department that does more advanced work or has better people can significantly lessen chances of advancement, because there are rough quotas for how a department should be distributed. In some departments a V will be far less skilled than a newly minted III or even a II from another department.