Back to Blog

An unpopular perspective on the SSO tax

An admittedly wandering defense of the most unpopular pricing practice in SaaS
profile picture
Ned O'Leary
X GitHub
Cofounder and CEO, SSOReady

Given our company’s role enabling SAML SSO, I often hear about the SSO Tax. It’s usually pretty negative; people feel strongly about this stuff.

The SSO Tax

For those of you less familiar with the SSO Tax, you may find an overview of single sign-on (SSO) helpful. More briefly, single sign-on (SSO) enables companies to control employees’ access to software by centralizing authentication behind a single service that we call an identity provider (IDP).

To make single sign-on work, companies need their software applications to communicate with their IDPs. Many software applications choose not to include this single sign-on capability in their basic pricing tiers, instead reserving it for more expensive, more fully-featured pricing tiers.

Airtable’s pricing serves as a good example. If you want SAML SSO, you need to buy their Business tier at $45/user/month. To be clear, Airtable isn’t unusual in this respect; they’re just one of many companies doing this. If you wish, you may find a longer list of companies here on a “wall of shame.”

The nearly ubiquitous convention of reserving SAML SSO for higher pricing tiers has earned from disgruntled buyers a derisive nickname, which I used above: The SSO Tax. If you want SAML SSO, you have to pay. Sometimes you have to pay a lot. People don’t really like that.

Things don’t have prices

Things don’t have prices. Or rather, price doesn’t exist as an intrinsic property of a thing. Prices emerge from human behavior. They’re totally contextual. They’re a consequence of negotiation between parties.

In low volume markets (e.g. buying a house), negotiations literally happen. In high volume markets (e.g. fast-moving consumer goods), negotiations happen, albeit implicitly. Buyers’ and sellers’ freedom to walk away serves as their negotiation. Sellers set mostly standardized prices for efficiency’s sake, but they nonetheless recognize price-setting as a yield optimization problem in careful consideration of buyers’ preferences.

The value of a thing depends on preference, which varies across people and context. If value were an intrinsic property of things, we’d never trade anything at all. Trade relies on two parties’ identifying a mutually positive-sum exchange. It relies on non-identical preferences.

You may perceive a given price for something as a bargain, while I may see the same price for the same product and consider it unreasonably expensive.

Buyers want different things

In any market, no two buyers look exactly alike. They generally want different things. Sometimes they demonstrate subtle differences in preference. Sometimes they diverge greatly in preference. For instance, licorice inspires a deep revulsion in me, but seemingly not so for Scandinavians.

Some sellers get to offer bespoke products or services that accommodate buyers’ uniqueness. Hairdressers and consultants alike fit into this category.

But most categories usually see efficiency gains from standardization, from scale. That forces sellers to make judgment calls, basically guessing at the appropriate granularity for standardization. They’re often forced one partition from arbitrarily many partitions using incomplete information.

Let’s retreat by a level of abstraction. Consider the below jumble of shapes. Suppose I’d asked you to organize them into groups, with no additional clarification.

You could make clusters based on the numbers.

Alternatively, you might carve out groups by the shapes’ colors.

You could reorganize the jumble in lots of different ways. They all basically work, and they’re all pretty flawed. You can’t really get it wrong, but you can’t really get it right either.

We often run into this exact problem when segmenting buyers. This is really what it feels like. It’s actually much worse in the real world because we tend to have low-fidelity information. We’re going to create some awkward groups, and we just have to live with that.

Discriminating archetypes

Having established that our segmentation efforts will inevitably have some problems, we’ll move into a simplified example of buyer segmentation by willingness-to-pay.

Non-discrimination

Let’s suppose we have one product, and our universe of buyers comprises two kinds of people. We’ll just call these Type 1 and Type 2.

Moreover, let’s assume the following:

  • We have to charge the same price p to every customer.
  • There are equally as many Type 1 customers as Type 2 customers … say, \(q\) of each
  • Type 1 customers will buy if and only if \(p < $10\)
  • Type 2 customers will buy if and only if \(p < $40\)

So we roughly get a sales function \(f(p)\) that looks something like this.

\[ f(p) = \begin{cases} p < 10 & 2qp \\ 10 <= p < 40 & qp \\ p >= 40 & 0 \end{cases} \]

We end up with this funky non-differentiable relationship between sales and price (dividing sales by \(q\)):

Incidentally, we maximize sales by raising the price to the highest level we can, something like $39, which means we can get $39\(q\) in sales.

Discrimination

Let’s take precisely the same conditions, except let’s now allow ourselves to charge two distinct prices. We’ll charge $5 to Type 1 customers and $36 to Type 2 customers.

Consequently, we’ll sell $5\(q\) + $36\(q\) = $41\(q\). We’re able to sell more due to our charging a lower price.

Similarly, both Type 1 customers and Type 2 customers are better off. We can choose to describe our introduction of price discrimination as a Pareto improvement, using annoying EC101 language.

Obviously, I’ve used a contrived example here. This doesn’t generalize. But hopefully this illustrates that price discrimination makes logical sense under some circumstances. Moreover, it should illustrate that optimal prices for a vendor aren’t invariably high prices. Sometimes you make more money by charging less. (This is actually often true!)

Price discrimination as unfairness

Some of us believe that all parties should pay a fair price, the same price for a given product or service.

I have some sympathy for that perspective. I myself have felt tempted to describe certain prices as ripoffs, saying something like “a bottle of water should not cost $8” while waiting to board a flight at SFO. It’s very natural for us to say things like that.

We might even adopt a more moralizing point of view, one that sees yield-optimizing prices as usurous. One should never make too much money on a transaction; if one can survive by selling a good for \(X\), the reasoning goes, then one should never sell a good for more than \(X\). But this impulsive ethic rapidly falls apart upon close inspection. We can’t live in a world with zero profit. And who should determine what reasonable profits might be?

Oddly enough, if you choose to believe in fair prices – in a normative sameness of prices – you’re likely committed to dismiss one of our most presumptively egalitarian mechanisms for resource allocation: waiting in line. First-in-first-out (FIFO) resource allocation assigns resources based on some measure of time sacrifice. From the consumer perspective, it’s still price discrimination . It’s basically an auction. We just measure the price in time.

On the topic of fairness, we might justifiably complain about vendors with market power – ones involved in price gouging – but we should not conflate oligopolistic market structure with yield optimization. Vendors with market power will likely also discriminate prices, to be sure, but the true problem will lie in their lack of viable competition. Market power affords vendors the opportunity to charge higher prices in general. The exercise of market power has little to do with the dispersion of different prices by a given vendor.

Assuming a market does exhibit some supply-side competition, consumers may always choose not to buy. Excepting monopsonistic markets (e.g. defense contracting), the vendor may identically choose not to sell. Neither party can justifiably consider a given market price unfair if at liberty not to execute the transaction.

Packaging as price discrimination

In real life, price discrimination is actually pretty damn hard to do. Assuming your customer’s pretty logical, your customer has a strong incentive to seek the lowest price possible. I mean, why wouldn’t they?

We can’t just tell customers we’re trying to discriminate prices. That’d be pretty silly. When you’re explicitly charging different prices to different groups of customers, people try to switch between groups. For instance, people might pretend to be students. See below:

We usually need an actual strategy in order to price discriminate. We have innumerable different strategies from which we can choose. For these purposes, I’ll focus on packaging. Companies often use their packaging – here meaning different combinations of products in their portfolios – to discriminate on price.

Sometimes, it’s as simple as volume discounts; if you buy paper towels in bulk, you’ll usually pay a lower price per unit than you would if buying a single roll. There are a few reasons this makes sense. Among them, consider how extreme bulk purchasers, like the US Dept. of Defense differ from someone like me. They’re paying $15M at a time. I’m paying $5 at a time. They’ll care about a 10% discount. I won’t.

Alternatively, companies will want to treat certain features as add-ons. We see this in software, but we also see it in airlines. For example, American Airlines has three different types of economy tickets for a specific flight out of Atlanta. If you want a checked bag, priority boarding, and extra legroom, you’ll pay more.

We’re loss-averse creatures, so we’re instinctively peeved. It feels like we have to pay for stuff that used to be part of the standard economy package! But it’s equally true that if you don’t need that stuff, you have the option to pay less. In some sense, you now have a choice that you did not previously have.

Airlines famously make razor-thin margins, and they have very large data teams focused on yield optimization. We should assume they’ve done a reasonably good job of matching prices to customers’ perceived value (and aren’t exploiting undue market power). People think pretty deeply about this stuff.

The SSO Tax is just price discrimination

The above good-better-best (GBB) pricing structure from American Airlines will look familiar to many software buyers. Software companies absolutely love GBB pricing. It’s not perfect, but it’s simple. It basically works.

We’ll often see some kind of starter package with just the basic features, then we’ll have some kind of premium package with a little more, and then we’ll have the enterprise package that includes all kinds of stuff.

But how exactly do we design a GBB structure? Such software pricing tiers usually reflect a conscious segmentation exercise by the vendor. Each tier – each package – matches a customer segment. As I mentioned before, any segmentation will have faults. Making peace with some inevitable messiness, we might loosely imagine two correlated measures for every customer: demand elasticity and complexity of needs.

Often, companies design their packaging along the diagonal elasticity-complexity axis. Many companies land far from the diagonal, e.g. if they have high demand elasticity and high need complexity. Simply put, the pricing model here doesn’t suit them very well. The vendor accepts this.

The vendor here still needs to put products into each square, though.

If buyers can choose the plan that suits their needs, the vendor can’t design too much similarity into the tiers. Buyers would feign high demand elasticity and opt for the cheapest tier. The “Good” tier and the “Best” tier need to look pretty dissimilar to a buyer.

On the other hand, the vendor can’t strip down the “Good” tier too much. The “Good” tier still needs to appeal to someone. Otherwise it’s basically useless (except as an anchoring gimmick).

It turns out that SSO ranks among the more useful tools for tier discrimination. Simple, price-sensitive companies usually don’t want SSO that much. More importantly, complex and price-insensitive companies pretty much always want SSO.

Sticking features like SSO into the “Best” plan allows the vendor to design maximal appeal into the “Good” and “Better” plans while still commanding premium prices from the buyers that can afford to pay.

We should recognize that the increase in price from “Better” to “Best” has almost nothing to do with their distinct features at all. Companies that buy the “Best” tier aren’t really paying for SSO or the other security and compliance features. They’re paying for being the kind of customer that needs SSO.

It’s really more like they’ve revealed complex needs for which the same core features (as they exist perhaps even on the “Good” plan) can command a higher price.

A world without the SSO Tax

Let’s consider a world without the SSO tax, one in which vendors can’t price discriminate using such features.

The first scenario we should consider goes like this: suppose the vendor can’t price discriminate at all. The vendor must offer basically the same product at basically the same price to everyone. In the long run, software vendors tend to make their money from big customers that don’t have much demand elasticity (just take my word for it on this one). Forced to choose one customer segment, software vendors would choose to offer the “Best” tier only, at the exclusion of their serving customers with simple needs. It’s as if American Airlines only offered its Main Plus pricing tier. Is anyone better off in this scenario?

Alternatively, let’s suppose the vendor had to discriminate tiers using some other features – not SSO. We should wonder what those features could comprise. In all likelihood such features lie closer to the core value proposition of the “Good” or “Better” tiers. As a consequence, the “Good” and “Better” tiers become materially worse. Both the vendor and the representative “Good” and “Better” customers become worse-off.

Or maybe the vendor can discriminate prices using some other mechanism. Maybe they demand payment from any customer beyond a certain employee count, as Docker does. Is this an improvement? I think not. I’m reminded of the BBC’s TV license inspectors hunting for rule-breakers.

Changing the way we think about the SSO Tax

We’re so eager to complain about SSO features adding to our bill. Strangely, no one seems interested in celebrating the implied discount for not using SSO. The SSO tax empowers companies to offer vastly more generous tiers at low prices, bundling core features in the “Good” packages.

It’s true, certainly, that some vendors practice dishonesty or abuse their market power. I would agree that this is bad, but it has very little to do with SSO pricing itself.

It’s also true that some companies fall off-axis and need SSO despite having high demand elasticity. And they don’t fit neatly into their vendors’ segmentations. This isn’t great. It is, however, better than the alternatives.

A practical aside on the SSO tax

If you are spending more than $10,000 per year on a given SaaS product, it’s pretty likely that you have a point of contact. When you’re buying from a human being (and not via checkout page), SaaS pricing tiers are basically made up. Basically any deal can include custom pricing if deal desk says it’s okay. Sales reps will pretend they can’t get you a good deal, but you can almost always get SSO discounted if you make a big enough stink or have enough leverage.