Designing salary formulas
Salary formulas let you theoretically create a fairer and more equitable way to set pay. This is a guide to designing them.
What is a salary formula?
A salary formula is a set formula that calculates a salary for an employee using a variety of inputs such as:
A candidate’s previous experience,
an employee’s tenure at your organization,
the title level of the role,
the location of the role or cost of living in that location,
the employee’s competence at their role,
the market rates for certain kinds of roles,
or other factors that might be relevant to compensating them.
A salary formula can calculate a specific salary or provide a range for negotiation between the organization and the candidate.
Salary formulas provide a fairer method for setting employee compensation. Instead of negotiating salaries based on market rates or an employee’s ability to negotiate, organizations apply a formula to determine the exact salary offered to each employee. This approach aims to eliminate salary disparities that may arise from negotiations or other subjective influences.
Salary formulas also help control costs at an organization. If you know exactly what the salary will be for a role, you can better budget your costs into the future. They also reduce bias: they reduce the risk of paying different employees different amounts, including based on their gender or other factors.
The primary downside of using salary formulas is that they might not always produce competitive salaries compared to a potential employee’s counterfactual. When designing a formula, you have to make sure that its outputs will produce salaries that lead to the candidates you want to hire saying yes to your job offers.
Some large institutions, such as universities and governments, use salary tables instead of formulas. For example, the General Schedule (GS) system outlines the salary levels applied to federal government employees. Jobs are assigned specific GS levels, and as employees move up the system in steps, they receive raises over time. Similarly, universities might have salary tables or salary bands for different roles. A band allows negotiation but within a constrained range.
Downsides of using salary formulas
There are some specific downsides to using a salary formula:
They force you to generate a specific salary, which, if you mess up your formula, might not be competitive for the roles you’re hiring for.
Alternatively, a poorly designed formula might pay more than you wanted to pay for some roles, which you might end up regretting (because you later face budget constraints, etc.).
If you deviate from the formula, it might exacerbate a feeling of unfairness, because everyone else is being paid by a fair system while the person you deviated for is not. If you’re going to deviate from the formula and break a promise of fairness, morale might be better at the organization if you never had a formula at all.
There might be some level of lock-in. For example, you might feel trapped using the formula and unable to go back because it feels very fair to staff, even if you later realize that it isn’t working for your situation.
Salary formulas tend to produce salaries within a pretty restricted range. This makes sense for a lot of nonprofits, which don’t tend to pay their highest-paid employees many times more than their lowest-paid employees.
For some organizations this restriction might be a problem, especially those hiring highly technical staff. The market rates for their roles might be hard to achieve using your formula without heavily distorting it or using a large market rate adjustment. But if you use a really large market rate adjustment, it maybe means your formula just isn’t doing most of the work to create the salary — the market rate adjustment is doing it instead.
Designing a salary formula
To make a salary formula, you first have to decide what you actually care about. You can then use these features as inputs into the formula. The inputs you choose also will be incentives for your staff. If you reward promotions, for example, with more pay, then staff will probably want promotions more than they naturally would. Or, if you reward tenure with increasing amounts of pay, then staff might be incentivized to stay at the organization longer.
Inputs can be combined at different weights into an overall formula. For example, you might care significantly more about an employee’s skill than their previous experience, but you do want to reward both. If so, you would weight skill at a much higher level than experience.
Potential inputs to a formula
Base salary
Often formulas will have a base salary that is modified to achieve the output. Depending on how your formula is designed, you can also increase the base over time with inflation to account for cost of living increases. This isn’t strictly necessary, but a base salary can help make it easier to put together the overall formula later.
If your formula does use a base salary, you could imagine it as the lowest salary your organization could possibly pay, such as the salary of the lowest-paid junior employee. When designing, you can always use a placeholder number for the base salary and tune it later after seeing the outputs from the formula.
Experience
Many employers care about an employee’s previous experience, so you might use it as an input into your formula.
You may want to define how you measure previous experience. For example, does someone’s time in a Ph.D. count as experience? Does time in an unrelated field count?
Since what previous experience means can be a bit fuzzy, depending on how much you care about your formula being objective and consistently applicable — such that no matter who calculated it, it produces the same result — you might want to define this more or less specifically.
Tenure
On top of increases that account for changes in cost of living or inflation, employers might want to reward employees for staying at their company longer, and thus could include tenure at the organization in the overall formula.
Skill
You might want to reward an employee for their skill in their job. For example, you might have two employees who are in the same role, but one is a higher performer than the other. This employee might get a higher skill rating.
Of course, this might reduce the objectivity of the formula. Managers might rate “skill” in a biased way.
Title level
Many organizations reward staff for advancing within their organizations—that is, they pay staff more as they are promoted. Your formula might account for this by, say, paying staff with junior titles less than staff with senior titles.
Cost of living
If you have employees in multiple locations, the cost of living might vary between them, and so it might be prudent to pay employees different amounts to account for that.
You could adjust your salaries somewhat or fully relative to the cost of living.
For example, if City A has half the cost of living of City B, you might reduce the salary by half, or you might just reduce it a little bit, depending on how much you care about incentivizing employees to live in cheaper or more expensive places.
You might also increase the salary above the cost of living adjustment for employees who live in a specific location. For example, if you specifically care about employees living near your offices but also allow remote work, you might want to pay employees more if they live in a specific city, above and beyond the cost of living adjustment.
Cost of labor
Different locations have different costs of labor. For example, London and Washington, DC have similar costs of living, but typical wages are very different. If you have remote employees in both of those cities, offering a salary that is similar based just on cost of living might not produce a competitive wage compared to their counterfactual.
Market rates of roles
Different roles might pay very different market rates. For example, software engineers might make much more than teachers. If you’re hiring both types of roles and want to hire competitive talent for software engineers but also minimize the amount of money you’re spending on salaries, you might want to incorporate market rates for roles into your formula.
You might want to only adjust the formula for certain roles that are hard to hire for. It might not make sense to do this for all roles.
For example, if you typically hire candidates from other nonprofits, formulas can usually produce fairly competitive offers without a market rate adjustment, because salaries tend to fall within a relatively restricted range. But if you also need to hire software engineers who come from for-profits, then a market rate adjustment for software engineers specifically might make sense.
Counterfactual earning potential
Maybe you want to adjust salaries based on what your staff would earn elsewhere.
For example, if you hire an ex-teacher and an ex-management consultant into the same role, their alternative earning potential might look pretty different.
You could adjust the salary based on a rough sense of this by looking at their resume, and considering their alternative options.
In practice, this might be pretty hard to do though, and probably could produce some strong feelings of unfairness (given that it might result in very different pay for the same work).
Currency
If you have employees internationally, you might be paying staff in different currencies. Therefore, you might need to convert your salary into the employee’s local currency.
Considerations around combining inputs
Setting weights for inputs
After you decide on what your inputs are, you’re going to need to combine them. The first thing you need to do is decide how important each factor should be to the overall salary.
To start, I recommend setting a relative weight to each one. An easy way to do this is to answer the question “if the employee advanced on this measure by 1, what percentage raise should they get?” If they have 1 more year of experience, or had a title level 1 higher, how big should their raise be for that change? If the answer is 5%, for the time being, set the weight at 5%. You can always adjust later after seeing the salaries your formula outputs.
Some inputs might not need a weight but should instead affect the entire salary. Maybe you want to adjust the entire salary by cost of living such that salaries exactly match the differences in cost of living between two places. If City A has 50% of the cost of living of City B and an employee’s salary in City A is $50,000, then in City B it should be $100,000. If you choose to do this, you might apply the cost of living adjustment to the entire output of the salary formula, as opposed to setting a weight for it.
So after you decide on your inputs, set a weight for each one based on how important you think it is, or decide if it needs to impact the salary formula in a different way. Don’t worry too much if this feels a bit uncertain right now. You can always produce some dummy salaries in a spreadsheet using your weights when you’ve set up your formula, and decide if they make sense after seeing the outputs it produces and comparing them against, say, market rates.
So, let’s imagine a salary formula with the following inputs and weights:
base_salary: $50,000title_level(we have 5—titles 1 through 5): 20%tenure: 5%col_adjustment: The entire salary is adjusted by relative local cost of living, with Philadelphia, Pennsylvania set to 1.
Now, how do we combine these into a salary?
Combining salaries multiplicatively or additively
Imagine that your base salary is $50,000, and your tenure adjustment is 5%.
You can combine salary inputs in two ways:
Additively, where each year of tenure adds 5% of the base (e.g., $2,500 in our example). This will result in linear salary growth when the input is increased.
Multiplicatively, where each additional year of tenure increases the entire salary by 5%. This will result in compounding salary growth when the input is increased.
The advantage of the additive approach is that, over time, the salaries of the highest-paid people will increase more slowly than the salaries of the lowest-paid people, meaning that your salary hierarchy will stay relatively flat. If your organization cares a lot about equity, this might be a valuable feature. However, it also might mean you can’t offer competitive salaries to your most senior employees because their salaries might not keep up with outside options.
The multiplicative approach increases salaries more quickly. For instance, if an employee earning $100,000 receives a 5% raise, their salary increases by $5,000, compared to an employee earning $50,000, whose salary only increases by $2,500. As a result, this method creates a wider gap between the highest- and lowest-paid employees over time.
Here is a simple formula for both approaches, and an example calculation for an employee who has a title level of 3, 5 years of tenure, and lives in a city that costs 85% of Philadelphia’s cost of living:
Additive Approach: salary = (base_salary + base_salary * title_level * title_level_weight + base_salary * tenure * tenure_weight) * col_adjustment
salary = (50,000 + 50,000 * 3 * 0.20 + 50,000 * 5 * 0.05) * 0.85 = $78,625
Since the weight of title level is 20% of the base salary, if their title level went to 4, they would get a (20% × $50,000 =) $10,000 raise.
Multiplicative Approach: salary = (base_salary * (1 + title_level_weight)^title_level * (1 + tenure_weight)^tenure) * col_adjustment
Or for our same employee:
salary = (50,000 * (1 + 0.20)^3 * (1 + 0.05)^5) * 0.85 = $93,730.12
So, because each additional title level is increasing the entire salary by 20% (not just the base), and each year of tenure is increasing the entire salary by 5%, the final salary is higher. A promotion to title level 4 would increase their salary by a further (93,730.12 × 0.2 =) $18,746.
To illustrate this, here is this employee’s salary under both formulas over time, at title level 3, as their tenure increases year-over-year. The additive salary increases linearly over time, adding the same 5% of $50,000 each year, while the multiplicative salary compounds, increasing by 5% of the total each year.
Mixing additive and multiplicative approaches, or other options
Of course, you might think that some inputs should be added and others multiplied in. To accomplish this, you add the additive inputs first, then multiply in the multiplicative ones. Say we wanted to add in our title level adjustment but multiply in our tenure one (i.e., every title level increase gives you the same dollar amount raise, but every year of tenure gives you a percentage bump):
salary = ((base_salary + base_salary * title_level * title_level_weight) * (1 + tenure_weight)^tenure) * col_adjustment
Or for our same employee:
salary = ((50,000 + 50,000 * 0.20 * 3) * (1 + 0.05)^5) * 0.85 = $86,787.15
Or, you might want some inputs to scale on a different trajectory, such as diminishing their effect over time. For example, you might care about previous experience, but past a certain point, you don’t think marginal years matter much. You could use a sigmoid to do this, like Wild Animal Initiative does:
experience_adjustment = 40,000 / (1 + exp(-0.25 * experience)) - 20,000
Here the first year of experience adds around $2,500, but the 5th year only adds a marginal $1,850, and the 20th year adds only about $75.
Depending on the specific factor, you can combine these approaches (though at the cost of making your formula more complex).
Finally, you might also add a flat amount to each salary. For example, maybe you think every staff member should have an extra $5,000 on top of their salary to pay for well-being expenses that can’t be covered by the employer directly. You might handle it by increasing salaries by $5,000. This amount isn’t affected by any of the multipliers or adjustments year-over-year; it’s just an additional $5,000, added at the end of the calculation.
Updating the formula over time
Year-over-year, you might need to update your formula. Obviously, if you include tenure as a component, this will increase automatically for staff and they’ll presumably receive raises. You might also want to make sure that new offers to candidates are competitive, so you may want to increase the base salary over time, potentially with inflation or cost of labor increases, or other factors.
This is fairly straightforward to do, putting aside some currency-specific considerations, especially using a multiplicative approach as outlined above. With a multiplicative approach, increasing the base salary with inflation will increase all salaries by the same degree. But, it’s worth bearing in mind that if you have both a tenure adjustment and an inflation adjustment to the base salary, then salaries will increase above inflation over time. This is because staff will receive both their tenure adjustment and the inflation adjustment. If your tenure adjustment is 5% and inflation is 3%, a staff member might get an 8% raise. This is also true in the additive approach, but less severe due to the scaling differences outlined above.
You might also want to increase your salaries over time below inflation. For example, if you increase your base salary by, say, inflation minus 1% and have a tenure adjustment, your current staff will still get above-inflation raises year-over-year, but new offers will not increase at the rate of inflation. This might be because you’re trying to stay competitive with local salaries that are also not increasing at the rate of inflation. Similarly, you could increase your base salary by the change in the cost of labor, rather than inflation.
Special considerations
Cost of living and cost of labor
Including cost of living or cost of labor in your formula seems straightforward, but can introduce some tricky situations. Because you’ll likely need to set a benchmark that your cost of living adjustment is measured against, the relative differences in cost of living can shift in unexpected ways due to variance in change over time across cities.
For example, if your baseline is set to Philadelphia and it has a cost of living factor of 1, but Philadelphia sees a massive increase in cost of living due to a surge in popularity one year, while Washington, DC does not see a similar increase, then using Philadelphia as your benchmark would cause Washington, DC salaries to go down. In practice, you probably don’t want salaries to decrease year-over-year, especially for staff actively at the organization. So it might be better to set your cost of living benchmark to a national index or something less prone to year-over-year variance. Alternatively, you could make cost of living a smaller or less weighty factor in your overall formula, so these changes are offset by other increases (like inflation adjustments or tenure increases).
My personal view is that many remote organizations shouldn’t include cost of living considerations in their formula. They might actually be neutral about where staff live. If the organization is neutral about where staff live, why should it pay different amounts based on where staff choose to live?
Of course, not adjusting for cost of living in some sense incentivizes staff to move to cheaper places. But, my personal view is that it is fine to leave these things at the discretion of staff, and not be an organizational matter, since the organization doesn’t really care where the staff member lives.
I do think organizations should adjust salaries above the cost of living when they care about people living in specific places. For example, if you have an office and allow remote staff, you might want to adjust above the cost of living for staff who live in the city where your office is. That way you’re actively incentivizing staff to move to that location, which you might prefer to them working remotely.
I also think organizations hiring internationally should probably adjust for cost of living or cost of labor across countries, where the variance in costs can be extremely high (relative to within a single country). But, I think this variation is best tackled by setting different base salaries in each currency that your organization pays in, and not adjusting the formula further. That way, you also don’t get extreme versions of the problems I outlined above (which can occur because inflation can be very different between different countries and currencies).
Currencies
If you pay staff in different countries, there are two ways you might handle currencies in your formula:
Your formula calculates salaries in one currency and then converts them to the local currency. You then update conversion rates every year.
You have different base salaries in each of the currencies you pay staff in.
Option one might be appealing because it’s simpler in some sense. You only have one base salary and you just track currency rates over time; however, it introduces an unfortunate downside. If the local currency strengthens or weakens against your base currency, you might be forced to give non-inflation related raises or decrease staff salaries if you’re strictly following your formula.
For example, if a staff member’s salary converts from 50,000 in the base currency to 65,000 in the local currency this year, but the exchange rate shifts such that — even with a raise in base currency terms— the formula suggests paying them 63,000 in local currency next year, it would feel like a salary decrease to the employee.
Option two usually works better. To use this approach, you set base salaries in each currency you pay in. You can do this by spot-converting between currencies, or by using a cost of labor or cost of living adjustment when converting — for example, using purchasing power parity rates (see the previous section for more reasoning here) or using cost of living / cost of labor databases like Numbeo or Expatisan.
Then you treat each base salary as independent, never converting it back to the original currency. For example, if you pay people in both dollars and pounds and after a year the dollar inflation rate is 2% and the pound inflation rate is 2.5%, you would raise the dollar base salary by 2% and the pound base salary by 2.5%, independent of what the exchange rates imply (though of course these inflation rates might correlate heavily with what the currency exchange rates imply). This ensures that local inflation is accounted for in each currency, which helps if inflation is highly variable between countries, and ensures that your formula won’t accidentally produce a salary decrease for anyone year-over-year. If you need to pay a staff member in a new currency, you simply follow the same procedure to add the currency at the time they start.
The downside of this approach is that your organization is bearing the costs of foreign exchange — if your base currency weakens, you’ll pay more to hire staff in other countries. But, this seems sensible because employees don’t normally expect their salaries to decrease because a currency they aren’t paid in weakened.
Bands instead of specific outputs
Maybe you don’t want to go all the way to using a salary formula and still want salary bands that you can negotiate within. Bands are appealing because they constrain the negotiation to a specific range. You know the highest you’re willing to pay for a role, and maybe you know the lowest you’re willing to pay.
The easiest way to create bands from the outputs of a salary formula is simply to have a percentage variance that you’ll allow away from that salary. For example, if your formula produces a salary of $100,000 and you allow 10% variance, you can make offers for that role within $90,000 to $110,000. This ensures that your salaries are roughly close to equitable (since there are constraints on negotiation) but at the same time gives you some ability to negotiate or offer people a bit more should you need to.
I’m not sure this makes a ton of sense to do in most cases. Generally, I think that either your bands will be really large to account for the large differences in pay that people might expect, in which case what’s the point of doing the formula anyway? Or the bands will be relatively small, in which case they might not actually provide that much utility. I do think it’s an option for people who like to have a little wiggle room in their salary formula.
You might also use a strict formula, and apply bands to limit the outputs of the formula (preventing edge cases where your formula produces a really low or really high salary).
How do you know if the salaries it outputs are competitive?
It’s usually worth stress-testing your formula against benchmarks. There are various public or private salary benchmarking datasets available, but you can also do a rough version of this yourself by:
Going through recent job advertisements from other organizations that your applicants might apply for (e.g., on 80,000 Hours, Probably Good, or Animal Advocacy Careers).
Pulling salary ranges for comparable roles from these job boards.
Seeing if the salaries your formula produces seem competitive with the other roles candidates might be applying for.
This is imperfect in a variety of ways, especially because job advertisements don’t always reflect the actual salaries organizations are paying, but it is a signal of what your peer organizations think is a competitive salary on the market. If you think they are getting strong applicants, it might be a good indicator of whether or not you will too.
If you do decide to use benchmarked salary data, it’s probably worth making sure that it specifically applies to the region you’re hiring in (salaries can vary wildly, even city-to-city within a country), and is actually for the right industry. For example, if you look at salary data for all nonprofits, you’ll see salaries across a wide range of roles and organizations — small local nonprofits with a few staff usually pay very differently than multi-billion dollar foundations.
Finally, it’s worth considering the salary expectations of your candidates. For example, if you’re hiring a software engineer, they might be looking at industry roles that pay much more than nonprofits. This might mean that benchmarking data that isn’t role-specific could be misleading.
My default formula recommendation
My personal view is that it’s easiest to keep salary formulas fairly simple. If I launched a remote organization today, I’d likely use a multiplicative formula that includes:
Base salary
I would set a base salary equal to a very entry-level role in the field, and increase it at a sub-inflation rate annually (e.g., inflation minus 1% or pegged to cost of labor). I’d use a sub-inflation rate because other adjustments will mean current staff receive above-inflation raises annually, but new salaries will be kept in line with normal, sub-inflation wage growth.
Tenure (at ~2%–5% increase per year)
I think that providing above-inflation increases annually is important for ensuring good staff retention. The downside is that your costs can rapidly increase relative to inflation. Adjusting for tenure on top of a sub-inflation base salary increase allows you to keep wage growth relative to inflation in control while still giving staff reasonable annual raises.
Title level (at ~5%–15% increase per level)
On some level, I don’t really like that more senior people in organizations are paid more. But I also think staff expectations generally mean that this is required to retain high-performing people who are rising within your organization.
Title level adjustments here basically mean “a staff member gets a salary increase when promoted.”
Skill (at ~2%–5% increase per level)
I think that rewarding highly skilled employees is much more important than rewarding title level increases. For most organizations, I think impact is driven by relatively few of the staff. Mechanisms for retaining those people are important, and skill adjustments seem like the easiest way to do so.
I also think that these introduce some level of subjectivity to the formula — if you have managers set skill ratings, bias could be introduced. This means you need good, easy guidance for setting these ratings and training for managers.
Maybe market rate adjustments for specific, hard-to-hire roles with high counterfactual earnings (e.g., lawyers)
I think that formulaic approaches can break when hiring specific, hard-to-hire roles. I’d rather not break my formula by negotiating over salary. So I prefer to use a market rate adjustment for specific roles that have high counterfactual earnings, and thus might be hard to hire for, such as software engineers or lawyers.
So, a formula might look like:
salary = base_salary * (1 + tenure_rate)^years * (1 + title_rate)^level * (1 + skill_rate)^level * market_rate_adjustment
I personally am inclined against doing cost of labor or cost of living adjustments based on employees’ locations, unless I specifically want someone to be in a specific location, or talent is unusually constrained. I’m somewhat inclined to think that if the formula is producing roughly competitive salaries—say, for people anywhere in the US except the most expensive cities—and I have strong talent pools for my roles, then adjusting for cost of living mildly incentivizes the organization to hire people in cheaper places (a distortion to hiring on skills you care about) and can get complicated culturally (people feel bad about their salary being lowered if they move).
However, if I ran an organization with an office, or there was specifically an organizational need for people to be in a specific place, I might be inclined to include an adjustment for people to live in that specific place—I want to actively incentivize people to move there.
I also would not include previous experience by default. I find it pretty hard to calculate (e.g., what experience counts as relevant?) and it can lead to fuzziness and negotiation over what counts as relevant.
I personally think multiplicative salaries better capture how salaries change over time at other organizations, but the result of using this approach will be that the gap between the highest- and lowest-paid employees grows over time.
Salary formula examples
Some organizations publish their salary formulas and methodologies. If designing a new one, it might be helpful to look at these for inspiration:



