Goods are often distinguished as “consumer” or “professional”. The two biggest examples I can think of are cameras and sound recording and reproduction equipment. The distinction has traditionally been that consumer-grade goods are cheap, but produce inferior output, and don’t interface well with other components. Professional goods are more expensive, connect to other professional devices, produce brilliant output, and often have more controls the user can adjust.
In software, we have another category: “enterprise-class”. Particularly server products and web apps are given this ill-defined quality. The intent is to define a sort of quality hierarchy: enterprise-class products are the most robust and scalable, then professional-level, then consumer-grade. But consider the following.
Products targeted at consumers aim to be used by many people. They need to be easy enough for the layperson to use. Customers generally hear about them through recommendations from friends, which means the product has to be very good for word of it to spread. Usually the person who uses the product is the same person who chooses which to buy. Consumers and hobbyists are very intolerant of software that runs slow, is unreliable, or doesn’t interoperate. They have little enough information that it’s easy for them to switch products. Security, while not at the forefront of users’ minds, is more vital when your product has a large install base. Consumers generally want free support.
Professional users tend to choose products based on reviews written in inclusivist trade magazines that don’t want to annoy manufacturers. They have expensive computers fast enough to tolerate slow software. They know about what they want to achieve, and can use the software in a sophisticated way, so ease of use is not as important. Because they use the software as part of their full-time work, they are more willing to put in time doing manual tasks that consumers would require automating. They are easier to lock in to one product because they have so much data. They tend to expect a hefty manual, but are willing to buy a book on how to use the product effectively.
The people who choose enterprise products are usually not the same people who have to use or administer them, and the choice is based almost entirely on marketing material and sales patter. The buyers are willing to throw at the product whatever hardware is needed to make it fast enough. In use, the product will be behind a large firewall with a strict access-control policy, and there will probably be a mechanism for ensuring timely security updates. If the system is mission-critical, there will be a failover system, so reliability is less important. Customers expect to have to pay through the nose for service contracts to configure the software, and are willing to hire consultants to make it interoperate. They have lots of data and expect lock-in as a matter of course.
Our conclusion must be that the traditional distinctions are misleading. Far from being a badge of quality, “enterprise-class” is a measure of a product’s shortcomings. Rather, the discriminant of quality must be scalability, not just in the strict sense of how much data you can handle, but the wider sense of what sort of customers you can appeal to. If you can be nice enough for a single user that he’ll recommend you to others, and you can handle the picky administrators employed by enterprises, you must be a well-engineered system.
But ease of use means fewer support contracts. Efficiency means your software is licensed for fewer CPUs. Interoperability makes it harder to sell ancillary software to existing customers. Lack of lock-in makes it easier for competitors to lure away your customers. Free updates make it harder to generate repeat sales. It is, I think, a great shame that the very properties that enhance your product, hurt your business.