I’ve spent most of my career building frameworks which enable efficient delivery of large scale, expensive, mission critical systems. These solutions usually have six digit budgets breaking down into license revenue, services and consulting to build the solution, and support maintenance and upgrades over time. Because of the money involved, these types of solutions tend to drive a lot of the innovation in the software industry. Unfortunately, just because a buyer in an organization has a large budget does not necessarily mean they know enough about software to make educated decisions on what they buy. The complexity and number of variables in making such a decision is large: license cost, type and cost of developers to build the system, system maintenance and administration costs, etc. Each solution in this space is unique and each vertical may have a relatively small market so getting reliable references is tough, particularly as it is likely these other customers are your competitors. Further, I’ve noticed that when people spend a lot of money on software they are reluctant to be vocal about its failure. The amount of money involved gives everyone skin in the game – buyer and supplier and so there are some pressures for people to try and cover up problems, hide the reality that some enterprise product’s customers are mostly unsuccessful or unhappy.
One thing about being in the industry a long time though is that you do see that quality prevails in the long run. When an enterprise software vendor does get a public black mark in a particular vertical, it can be a swift blow that ends their market potential quickly. I’ve seen a few recipes for long term success in selling to enterprise customers and a few recipes for long-term failure. These may not be on everyone’s top-ten list when they are starting a company in this space but these are the qualities that in my experience ultimately differentiate the winners from the losers.
* Don’t ignore support and maintenance costs. Your buyer is probably not too focused on how hard the system will be to backup, how often they’ll need to upgrade the software to deal with security threats, how difficult it will be to find programmers to extend and maintain the system but as their vendor you need to take care of these aspects for them. You need to provide responsive support and need to have the ability to spin patches the very same day the bug is found. In the frameworks I’ve built, support was encouraged to contact developers directly when they found what they believed was a serious bug. The developer could often confirm or deny and possibly spin a test patch right away. The systems allowed a quick way for the customer to drop the patch into a directory so it would be installed/uninstalled easily. Since often support cannot easily reproduce the problem, the customer could usually be encouraged to test it directly to expedite the fix. That willingness goes down the longer the patch takes. Most of the time this lean process leads to the quickest possible resolution of the problem and a happy customer. Of course if your first couple of attempts don’t work you need to get a test case but I found that 8 out of 10 support calls that would have led to escalations and messy processes wasting lots of time could be streamlined dramatically. It also forces developers to readjust to quality over new features to ensure existing customers are happy first.
On the other hand, I’ve seen enterprise companies which discourage engineers from discussing bugs with the customer. Every communication goes through a formal process involving some escalations team. Further, in many cases, there is no patch mechanism. Even a 2 line code change would have to wait for some massive roll-up patch, or would require a big investment in creating a special qualified patch. The “upgrade” process could be employed to install each patch which made wholesale changes to the system that were not easily undoable and more problematic technically. You can recognize these companies because they will deny the existence of bugs as a first reaction when you call support. To them, to admit to a bug exposes the company to a liability. Of course, the fact that your software has a bug is the real liability long term.
* Don’t ignore services revenue. People selling enterprise software are usually in it for the license revenue. You can potentially get much higher return on investment and are viewed by the market differently. Customers also like licensed products because they feel like they are not building a custom solution from scratch – they are getting a tried and proven set of components requiring minimal customization. But essentially all enterprise solutions are customized. Business requirements change and software needs to change along with it. This is a fact of life. You need to make services profitable and successful so you can properly support your customers through the entire lifecycle of the product. IBM is one of the most stable companies around and relies mostly on services revenue and customer satisfaction. They will make your solution successful and they will make you pay for it. They don’t get too bogged down on license revenue or even selling and using their own products. They adhere to industry standards and are constantly on the lookout for a better way to serve their customers.
* Require adherence to industry standards and open programming models. Some sellers will pitch their framework as “the secret sauce” which eliminates the need for developers. But cost and access to good professional programmers, designers, analysts, and admins who can work with this solution ultimately determines whether a customer will be happy with a solution long term. The buyers often don’t know they need standards and can’t tell an open programming model from a closed proprietary one. They don’t want to be told there will be maintenance costs or enhancements needed so this can’t be part of your pitch but if it is not part of your strategy long term you will fail. These days enterprise software companies and products come and go so if your solution is not standards based, you might need to rebuild it from scratch if a vendor stops supporting it.
* Beware the almighty direct sales person. Most people watching “All in the Family” think that Meathead was usually right but that Archie usually won the argument. This trend occurs in companies too – they are often unduly influenced by the polished sales person. They will make impassioned pleas for high cost products and if they don’t get the exact right commission plan they can let their own goals outweigh the goals of the company in how they use their influence. A good manager recognizes this and structures a sales person’s commission so they get a percentage of services and support revenue from their customers. They share commissions with a team of inside sales folks who can worry about the small fish. By working in teams, the inside sales person can improve the quality of the leads for the sales person. Support and services is difficult to monetize with direct sales as you need to make it easy to do business with your company and direct sales only cares about the biggest fish in the water at any given time. Without shared commissions, direct sales might spin inside sales as a waste of time as they take some low-hanging fruit away.
* The market should dictate license cost. Horizontal software typically is inexpensive and vertical, more specialized software gets more expensive. Sellers would love to sell all products for $20K/CPU or more but that might not be the right price target for your product to be competitive. You need to survey the market, figure out who your customers are and what they are willing to pay, then maximize the revenue by choosing the right price. Direct sales does need a high average deal size to be worthwhile but inside sales can profitably sell much lower priced products.
* Give developers a voice. Enterprise solutions are all about customized software which means developers are going to get involved at some point. Of course in the pitch, the seller will try to minimize this cost as customers want simplicity. Customers want to think of themselves as buying off-the-shelf, push-button software. But buyer beware. Quite often, there is still programming involved in using these systems – it just takes a more interactive form. That might be nice but since this is essentially reinventing how people program, it takes on quite a bit of complexity. Software must be version controlled, deployable, support collaboration, possibly on branches, use maintainable database schemas, etc. A shrink wrapped push button customizable software tool quite likely ignores all of these aspects. It locks the typical developer out which just means you need a different type of developer and you have to reimplement all of these processes that took us decades as an industry to refine by yourself using adhoc means.
* Keep a balance of power between product management and engineering. Product management needs to have control over the feature set as they represent the customer but there needs to be checks and balances because at the end of the day engineering needs responsibility to ensure designs work efficiently in practice. I’ve seen product managers who were quite confident they did not need engineerings input for specifications, but then made such basic snafus in their thinking regarding security, scalability, maintainability etc. it was almost mind boggling – “Of course it’ll be secure – we’ll use SSL”. If you have a rigid top-down management structure which prevents free-flow of information exchange and makes escalations so difficult as to be painful, you’ll get a bunch of developers who just are coding till 5 and don’t take responsibility for the customer’s success.
* Beware the “enterprise solution iceberg”. One of the challenges in selling enterprise software is that the markets tend to be fairly small and fragmented. For some companies, it is tempting to expand the markets by combining a large number of various software components into a single package to increase the size of the addressable market. But to do this in a scalable way requires skilled engineering of packages, modules and dependencies. Well supported in many industry standard software environments but easy to mess up if roll your own framework. The result will be extremely long startup times and a very high memory footprint. Software engineers smell this type of system instantly and run but your average enterprise buyer does not look closely under the hood before they buy. They might argue that memory is cheap and some systems rarely need to be restarted so who cares if it takes 15 minutes? For developers, that 15 minutes means a trip to get coffee and they might need to do that 20 or 30 times a day. I try to keep my round-trip times to less than 20 or 30 secs max so I’m most productive. If your system ever needs to scale, an app that could be run on a $15/month 128mb slice of a linux server now needs a quad core dedicated system with 2G maybe $150/month. Just to store 1G of code of which you are using only a few %. Finally, because of the large number of lines of code you have you are exposed to security threats, required upgrades etc. And because of the massive footprint, you’ll suffer long downtimes and late nights by IT when they have to perform them all contributing to the pain and cost of system maintenance.
Ultimately, to sell enterprise software effectively you have to realize why the customers are paying so much for their solution. They believe that more money they pay means more assurance of the success of the project. Whether you call it license or service is almost irrelevant to them as long as the purchase succeeds in the long term. As we developers know, for a project to succeed you need to follow best practices in the industry, support industry standards, and provide services and support for your customers as needed. These can’t be afterthoughts if you want to win in the long term with any piece of software. And buyers remember, you are buying a very intricate machine that needs to be ultra efficient and reliable not a slide deck.