Keep in mind that if you're talking to HR, they would be hard pressed to accurately define the difference between a "formula" and "algorithm" and a "process". I suspect most folks like "formula" because it sounds finished and mathematical.
In practice, I would call this an algorithm blended with a heuristic. Places like StackExchange, with public transparency are rare. Places like the US Federal Govt with very, very hard and fast rules are also not the norm. Most places have some rules and guidelines and then ways to violate them with good enough reasons.
The general algorithm I've seen in numerous companies is:
1. Define a range (also called a band) for roles coupled with seniority. For example:
- A role would be "software engineer", "qa engineer", "manager", etc.
- For seniority, I mean grades up and down the role - "senior", "principal", etc.
- Don't assume that every range is 1:1 to with the job title. There can be two ranges (lower and higher) for 1 public title.
- Ranges typically overlap. So a SW engineer could be, say $60K to $90K, a SW engineer II could be $75K to $100K and a Sr. SW eng could be $90 to $120 (because they don't fit perfectly)
2. Research the market, at least every year.
- Sites like glassdoor.com make this very easy. Usually you want a few so you're not stuck with one site's weird statistics.
- Also consider the industry, the competition, and the precise location. And other perks.
- Usually this is the job of the recruiting staff, at best the hiring manager gets a report of some kind. The goal is to set the ranges so that it's not hard to hire new staff and not likely that anyone being paid w/in the range is likely to leave to go to the competition.
- Often evaluation of ranges falls behind if there's very little recruiting being done. Similarly, when the market is hot, and recruiting targets are hard, it gets reviewed and updated far more frequently than once a year.
3. Figure out what to do about existing staff salaries
This is a place were companies often fail and staff gets screwed. The ideal here is that as soon as the company increases the range for a given role, it also takes a good look at salaries of existing staff and does what's necessary to lower the retention risk. Reality is - it's often not done in a timely way, and/or the compensation increase isn't perfectly enticing.
The other rock and hard place is that paying people more involves having enough money to pay them. It can be easy to justify the 1 case of more money for a new hire, but much harder to find the money for increasing the salary of the 100 people that are already being underpaid.
The problems of paying existing staff has never (in my experience) been a blocker to changing the ranges for recruiting targets. There's generally an understanding that an incoming new hire may require more money than people who already work here, and there's an assumption that existing staff will forgive a company (for at least a little while) if salaries of new and existing staff aren't well aligned.
4. Negotiate on a case by case basis
- The range is often divided into quartiles, and people are grouped accordingly into the low/middle/upper end of the range
- Inside the company, the ideal is that a person who just got promoted is on the lower quartile and as a person gets close to qualified for a promotion the person is solidly hitting the 3rd quartile. That way, by the time a promotion is locked and loaded, the person is not getting poor increases because he's stuck at the top of the range.
With that in mind, it's considered poor form to hire someone at the top of the range. Generally the thought is:
- First priority - get the person into the best role that they qualify for. Don't hire someone where hoping they can stretch to fill it is your best strategy, unless this really was the best and only candidate you could find for this job.
- Next - figure that if they are working at their level, they are addressing the learning curve of adapting to a new company and team for a year or two and unlikely to qualify for a promotion for the first ~2 years. So for at least 2 years, you want enough slack in the range that you can give them an encouraging salary increase w/out going above the midpoint.
- Last - assume people talk. It's one thing to have a new guy make a small percentage more than your current team. But if the guy comes in at the top of the range and your existing staff is all at the bottom of the range - this is a serious pay gap. Never assume that people won't talk and share. If this is the situation at hand, as a hiring manager, be prepared for some tough discussions with the rest of the team.
Have a policy and follow it on bidding wars. Often you'll have direct competition for candidates. Getting into a direct escalation between companies frequently is great for candidates, but poor for profitability, and really both companies loose. Generally there's some guidance around what to do for a candidate with a competitive offer that includes going to a certain point w/respect to the range and then stopping.
Have tricks and tips for non-salary compensation - for example hiring packages, stock options, bonus plans - stuff that incentivizes good performance (*) and longevity (like vesting options on a several year plan), without providing the obligation to provide more salary year after year if there are lean years.
(*) - there are studies out there that past a certain level, more $ does not really equal better performance. "Merit based increases" is always great sounding, but there's a lot to be said for the benefits of autonomy and good growth experiences on the job as a better way to get people more engaged, committed and better at performing.
5. Engage the exception process
If this is a case where 20-100+ positions are filled a year, I'd expect the exception process to be rare - the range will be adjusted instead. But when you're hiring a weird role, or a very high level one, there may be an exception process because baselining the salary is nearly impossible. Any time this happens, the manager is going to have figure out how to sell the idea that this particular candidate is so unusual that it deserves the paperwork --and-- what are we going to do when they deserve a raise, because they are so very awesome.
In practice, how does one use this?
Typically I know the ranges in my local area. I have a pretty good idea of what my peers make, and a pretty good idea of where I might rank in the pecking order relative to my skill level.
In the interview, I spend a lot of time trying to categorize how the company divides roles in my career vicinity, and thus what roles I may qualify for that I'd be interested in doing. Based on that, I can build a sense of where the range might be. I have a bit of an advantage - I'm a hiring manager, so I know what kind of offers I've approved recently, how hard it was to find candidates, and I talk to enough of my peers about business to get a sense of what the management market might be.
Then, when I'm negotiating, I try to get a sense of where I fit in the range. I want to come in at a slight salary boost to me, but with a role I'll enjoy and be only slightly challenged by. Certainly other have a higher range of what "challenged by" looks like. I'm more of a gentle step up, I have friends who take a more flying-squirrel approach to rising up the ladder.
And I negotiate accordingly. I don't want to start my relationship with my manager feeling like I screwed him over. But I don't want to take a pay cut for the next job... either. I want to like all of it - my job, my boss, and my salary... and I juggle accordingly.