The Marginal Cost of Software Approaches Zero

There are many who have claimed the marginal cost of software is zero. I essentially agree, but with a slight caveat – the marginal cost of software approaches zero (although it can never truly hit zero).

For a more elegantly written version see: the marginal cost of software

This statement is contentious to some. In fact, I’ve overheard: “sure it works for apps, but what about SaaS software? What about support, maintenance, & infrastructure?”

Let’s start with some loose definitions:

  • marginal cost = the cost to produce the next unit
  • fixed costs = costs that are not reducible in the short term (lease)
  • variable costs = costs that scale with production

Marginal cost includes both fixed and variable costs

In software the cost of software production is primarily fixed – they do not change regardless of how much you sell. If it cost 10 million to build Microsoft Office – there is not much additional variable cost for the 1,000th unit sold. Once you pass break-even you have a growing amount (both in dollars and in percent of revenue) of profit with each unit sold.

In the production of jeans – you have fixed costs (the plant, equipment, and some labor) and variable costs (the materials, some labor, storage, shipping, sales). There will be a sizable chunk of the value of the jeans that is directly related to the production of that particular pair of jeans – also known as the COGS (cost of goods sold).

So let’s dive into the contentious areas – support, maintenance, & infrastructure.

The marginal cost of providing support approaches zero.

The concept of the marginal cost approaching zero – literally means that it becomes cheaper with every additional customer to provide the service. Let’s evaluate that in the context of a small software company in the enterprise space with a handful of large customers:

  • the first customer requires a minimum of 5 support staff to cover available hours of operation and the call schedule
  • the second customer requires adding a person 6 support staff; this is clearly an increased cost to supporting 2 customers
  • the third customer doesn’t require adding any

In this scenario we have a perfect example of the reduced nature of support requirements at a small scale; with each successive customer we had scale:

  1. 5 support to 1 customer: 5/1 ratio
  2. 6 support to 2 customer: 6/2 ratio
  3. 6 support to 3 customer: 2/1 ratio

This type of scaling will hold true til you have a few dozen or hundreds of customers and then something interesting happens. Your number of support staff per customers starts to plummet. Eventually your support staff can handle 100s or 1000s of active customers each. How does this happen?

You beef up your tooling, you provide better documentation, you customers develop super-users, your community develops… your cost of support never stops dropping as a percentage of costs of your software. The marginal cost of customer support approaches zero.

The marginal cost of maintenance & software improvements approaches zero.

Maintenance costs us money. In SaaS, we cannot provide a static product and thus we do not have 0 costs. Again, the statement is the marginal cost of software approaches 0. Providing some scale – each additional customer decreases the relative amount of money it costs to support and improve the product. If you have 5 developers for 5 customers = your ratio is 1/1. As you increase to a 1,000 customers – you will not have 1,000 developers. With a team of 50 – you decrease your ratio to 1/20 devs to customers. The marginal cost of maintenance & software improvements approaches zero.

Most software companies scale their development teams with early revenues or investments because they know when they get close to their “magic size” they can slow their scaling dramatically for future growth, but have the infrastructure to support massive growth.

Competition is a factor in development spend

The realities of the 5 forces (bargaining power of suppliers, threat of substitutes, threat of new entrants, bargaining power of buyers, industry rivalry) demand that SaaS solutions constantly innovate to maintain their position… much less pick up addition market share. Importantly this does not mean you cannot increase your prices, but improvements are usually rolled into the existing product and new modules are usually rolled into a higher tier or new module. What’s interesting about these dynamics is that strength of competition usually helps drive the decision making on what should be rolled in or modularized/tiered. The goal is to have a richer, more capable, product at a lower price than the competition so new customers to the market will have an easy time choosing your solution.

For existing customers in the industry it’s considered much harder. Peter Theil’s rule in Zero to One is that for someone to switch from one product to another for the same price – your solution must be 10x better. There is a race to lower margins as a market is saturated with competition because it becomes extremely difficult to 10x your competitors. The most margin is captured at the beginning of a market when there is low competition.

The marginal cost of infrastructure & hardware approaches zero.

Starting up the cost of hosting is relatively expensive – you have DBAs, Network, Devops – poor tooling and many manual processes. As you scale the amount of staff increases at a slower rate than the rest of your growth – thus causing a decreasing marginal cost. One area that provides for the scaling benefits of SaaS rely on a multi-tenant architecture. In addition, the hardware we use decreases in cost per unit of productivity every year. Thus our newest iterations are faster for less money. The marginal cost of infrastructure goes down over time.

The marginal cost will never be zero

However the software industry shows the benefits of economies of scale dramatically. This is one of the reasons growth is valued over profit in the beginning. Capturing a significant portion of the market allows you to have the scale your competition does not – this is a competitive advantage.

Make Something People Want to Use

Saw this tweet by the venerable Sam Altman:

It postulates, “Make something people want need“. I think there is a corollary, “Make something people need want to use.” If the tool is something they need, but it works well enough that they want to use it. It spreads. Look at slack.

Benchmarks & Usability

Anyone who has ever compared anything knows that it is difficult to do fairly. The colloquialism, “that’s apples and oranges” – helps define the problem. Properly understanding the metric upon which you want to do the comparison and properly categorizing the items that are being compared.

In the case of food:

food pyramid
  • apples & oranges both fall into the single category of “fruits & vegetables
  • apples & oranges both fall into the single category of “fruits”
  • apples & oranges both can be juiced (differently)
  • apples & oranges both have skins
  • apples & oranges both can be grown commercially

On many levels apples and oranges are very similar and yet we all know they are very different (acidity, taste, texture). Picking the metric upon which you wish to compare two items is extremely important.

Good examples of benchmarks in the tech industry

In both of these examples they attempt to showcase different technology solutions and highlight how they perform in the contrived examples. Even with these great solutions, the showcase is contrived and in many cases not representative of your potential real concerns.

The difficulty is that trying each option and building familiarity to the point of expertise is not feasible. Thus, the benchmarks help rule out “obviously not going to work for my use case” technologies and point you to potential solutions. From there it is about reading, learning, and communicating with others who have been where you are now.

For the less technologically inclined… technology makes it really hard to tinker

One thing that would make these benchmarks and comparisons more helpful is if they provided an easier method of interacting or playing with the technologies. Not everyone has every build system or package manager installed. A method of virtually testing technologies may help accelerate usage of new technologies and definitely help the less technologically-inclined with getting into the industry.

Primacy of Software

The national discussion on raising the minimum wage is focused on creating a livable wage. I happen to generally agree with the sentiment of paying employees enough for them to be able to survive. However, there is a problem with raising the minimum wage… software.

The reality is I agree with Marc… because I have seen it. As the economic downturn happened, companies cut jobs – they pushed software vendors to help them improve operations with their leaner staffs… and in some cases they never needed to refill the positions after the economy turned around.

The thing that scares me is the pace of software growth is accelerating. Software becomes more powerful when it has access to more data and to more powerful hardware. Intel has announced 3D Point storage which according to wikipedia is “Claimed operating speed and write durability are both up to 1,000 times higher than flash memory.” This is mind boggling and will do mind boggling things to software. Even scarier than this is HP’s The Machine which stands to be a fundamental redesign to hardware architecture (although its waiting on memristors to reach its true potential). Some estimates see memresitors offering 100TB cell phones faster and more powerful than most powerful laptop today… within a handful of years.

Why does this matter? Jobs that have been lost so far may never come back. Worse the pace of jobs being lost will accelerate. How does this tie into the minimum wage? Let’s say the minimum wage is $10. I need 5 people working per hour ($50 per hour) for 8 hours ($400 per day) for 5 days per week ($2000 per week) for 50 weeks ($100,000 per year ($20,000 per employee)). For many small businesses this is not an insubstantial portion of their revenue. If a SaaS solutions comes about and offers process improvements which may potentially alleviate the need for 2 employees ($40,000 per year cost) for a a cost of $200-300 per month ($2,400-3,600 per year)… virtually all business owners would acquire the software.

The end result is different for different types of companies:

  • In some companies they would eliminate the 2 positions a loss of two jobs
  • In other companies they would grow and never hire new jobs a loss of potentially more than two jobs

The situation only gets worse when you consider better hardware & software – mean cheaper hardware and software. Couple a dramatic decrease in the cost of software with an increase of $10 an hour to $20 an hour per employee and we end up in a doomsday scenario for minimum wage employees.

Newton’s Third Law

The good news is that all is not lost. Software/hardware are also opening up a world of new frontiers. Cars replaced horses and in the process a slew of new careers became a reality from mechanics & engineers that worked directly for the car companies – to 10,000s of new jobs for car parts manufacturers. But, it didn’t stop there Japan offering lower priced cars forced Detroit to pivot and in the process Just-in-Time (JIT) logistics was born. The field of logistics became ever increasingly complicated and still today becomes ever increasingly automated. Jobs lost are an opportunity for jobs gained. The reality though is we lose jobs that are unskilled and replace them with jobs that are skilled.

No one truly knows how much the pace of change will accelerate or its effects on every industry; but it feels to me like we are not well set-up to help the unskilled become skilled as their jobs are eliminated. The market reacts fairly well, but it appears we are approaching a potential change unseen in the workforce before. Oxford has estimated that up to 45% of the jobs that exist today will be eliminated within 20 years.

Transportation as an example of jobs that will be eliminated (or decimated)?

The first prediction is an easy one. Drivers. That means taxis, semi-trucks, but could even mean the post office, UPS, & Fedex.

Starting with taxis. According to some sources, Uber has already acquired 55% of ground transportation business expenses – Uber is not a taxi company. To Mark’s point – Uber is a software company. Uber, Lyft, Google, & others are betting that they can set up the infrastructure with labor and other people’s capital (cars) today – and replace them in the future with software. Self-driving automated cars that can be hailed by an app – offer the potential for far cheaper taxi rides as a significant portion of the fair is to pay for the labor. But that is only phase two of three phases:

  • 1: Get people used to using software to call for a car ride with a human
  • 2: Get people used to using software to call for a car ride without a human
  • 3: Get people to give up their cars because they don’t need them

Phase three offers tremendous hope and opportunity for redesigned cities, houses, and even offers opportunity to people who cannot afford reliable transportation today to have it. There are plenty of good articles about the affect of fully automated automative transportation. Including this one, which suggest that almost 900,000 jobs will be eliminated by 2025.

The first driverless semi-truck is on the road.

What’s the answer?

I do not know. Some people smarter than me think a basic income is a good idea. I’ll explore this in a future post.

uber coffee

Quick thought I had this morning driving into work.

Presuming Uber does the following:

  • goes self-driving
  • goes electric
  • has “re-charge stations” spread around town

Then Uber should put those stations near a starbucks and have a deal where the car could bring you a coffee when it goes to pick you up. A $8 ride feels like a steal if it includes your coffee.

Apple Naming Chart

Apple Naming Chart
mini air pro
iPad mini & mini-Retina iPad & iPad Air ???
iPod shuffle nano touch
iPhone 5c 6 6+
macbook macbook air pro
mac mini iMac pro
watch sonofabitch

PS – I know that the mac line could/should be split into two lines (computers with monitors integrated & computers without monitors), but when viewing the product offerings this way it becomes eminently clear that a iPad Pro makes inevitable sense. My day job is in enterprise software – I can tell you many of our customers opted with an iPad mini vs the iPod touch/iPhone 5s that was available when we launched our first iOS solution due to size. I firmly believe the iPhone 6+ is a great device for task orientated software that is still “pocketable” – hence my belief it is the pro of the phones.

PSS – I’m not claiming that all the devices should follow the mini/air/pro labeling – but it would certainly make things easier to compare :)

JS Template Concept

These are the not properly fleshed out thoughts of a non-developer on js templating solutions.

Compiled Assets

I hate them. When I start playing with a project – the last thing I want to do is jump through 50 hoops to build something before I can start tinkering. Speed & ease of tinkering is paramount.

I feel like good solutions to start with include pre-compiled assets. Everything works by default as is and if you want optimized/built/compiled/semi-compiled code those should be available, but not required. Bootstrap does this and includes css, as well as, the less assets. Building is possible, but not required.

However, there could be a better way. In the case of css assets via less/scss – I think a sane approach would be to load those from a folder rather than a specific file.

Essentially, go to this folder and fetch the compiled .css if it exists if not then, fetch the .less or .scss files and compile them with an included js compiler. Something like:

Although this probably sounds like heresy, what it does is allows for much more discoverability and tinkering for non-devs and for people unfamiliar with particular frameworks.

To get around potential performance problems caused by missing something – a test script could be added which would flag which assets that are not pre-compiled and should be before deploying to production.

Include Template


This is nothing terribly complex. It loads these components, with this data, and (optionally) this configuration. This is a very clean way of separating concerns. It should also make it easier to work with different team members regardless of experience or backgrounds – by trying to make the logic explicit.

This suggestion comes back down to “color me stupid” – but reasoning about other developers projects is extremely hard for me (again not a developer – so it’s probably me). When I read about React – I got excited about the components angle, but I got most excited about GraphQL. It seems like a huge boon. Explicitly stating the data requirements of each component as part of the components syntax allows for a higher level component to grab all the data requirements and merge them.

Allowing for the system to dynamically load these components, data, & configs while developing/testing and then compiling them for production would provide the same benefit of ease of use as previously mentioned.

Template Syntax

Using a mustache or mustache like templating language makes the most sense; however, the template should only contain html & the curly bracket syntax. The data & configuration files should provide for the logic on how the template should load & function. This has the desired effect of making the 3 parts of the template capable of being managed by 3 different functional roles (although in most use cases this would not need to be the case).

Nested Templates


In this case we have pushed the data-src up one level from the component to the collection of components; I’m not sure what the best approach is for this, but that’s all I was able to put together in the time I allotted to write this.

Disclaimer

I’m trying to get in the habit of writing a little more often. I make no claims of quality for this post.

You don’t always know how people will use your solution.

Often when you create a product you know exactly how you would use it, but you have no clue how the end user will use it. Years ago, I ripped out an advertisement from a magazine to remind me of this.

washing-machine-yogurt-blender

Today, I was reminded of this (and had to dig out this advertisement from hiding) while looking at HubSpot’s Facewall.

hubspot-wall

You see this was intended to provide you with a way of showcasing internal employees to other employees and add to the sense of team. I immediately thought, I wonder if we should put up dedicated monitors for our enterprise clients and load the top 20/30/50 contacts in those companies in there so everyone can see who we are working with.

Then I got the idea that this would be a really cool solution to tie into a CRM. It’s too bad HubSpot doesn’t have a CRM… oh wait they do.

Black Hat Badassery

I was meeting with someone and we were talking about conversion flows and targeted marketing.  I mentioned I always had an idea to target visitors based on if they had visited a competitor.

Black hat CSS

So this guy {rename nameless to protect the guilty} – says I looked into it and the browsers disabled the :visited css hack you were thinking about using.

I bounced a couple ideas around in my head and came up with this.

Black hat Javascript

Let’s see if this theoretical workaround would work:

  1. Browser: Set Visitor ID
    visitor-id: 123456
  2. Browser: Create the CSS for the Visitor
    .competitor-1, 
    .competitor-1:visited 
      {position:absolute; top:0px; right:0px;}
    
    .competitor-1
      {background-image: black-pixel.jpg
       ?visitor-id=123456&competitor-1;}
                             
    .competitor-1:visited  
      {background-image: white-pixel.jpg
       ?visitor-id=123456&competitor-1;}
    
  3. Browser: Create the Link with JS
  4. Browser: Apply the Styles with JS
  5. Server: Read the Meta Data Collected from Image Call
  6. Server: Add that Meta Data to User Profile (preferably something like the leadin profile)
  7. Both: Cycle Through Other Competitors
  8. Server: Serve Marketing Content
  9. Server: Check to see if the user has left the site and come back – if so re-run and then
    tag if competitor has visited the site (now you can add within a specific time period)

Targeted Customization

So what can this help with?

  • Calling out specific features/functions/pricing relative to a competitor
  • This can help guide c2a, popups, on-page content, & even pricing (for instance people on a Mac get charged more on some e-commerce sites)

Competitor Page

But, I think it could make for a really compelling competitor analysis page. Only show the competitor you know they have visited already : ) and dynamically change the pricing according to the features/funtions/pricing you have for those competitors.

Disclaimer: These are just thoughts…

Ok – I must admit I enjoy thinking about the dark arts of marketing sometimes. This one is mostly a puzzle challenger and not something I endorse (publicly).  Certainly not something, I’m technical enough to do, but thinking about the ability to automatically add tags for all the competitors to the leadin/crm profile of your users – should make marketers weep tears.

Does anyone see a reason this wouldn’t work?