Have you ever thought that you would like to make money by writing software? There are a few ways you can do this. You can be a software developer for hire, or you could write and sell your own software. Either way, you can create either custom software or commercial software.

I've worked in commercial software for the past 20 or so years. What do I mean by commercial software? Software meant to be sold or leased or software that produces ongoing revenue through its proliferation. This is in comparison to custom software. Examples of custom software are corporate software--software for a specific corporation, government software--custom software for a government, and open-source freeware--software created for free just for the joy of it.

Examples of commercial software are:

  • Operating systems like Windows, Mac OS, and Red Hat Enterprise Linux
  • Applications such as Microsoft Office or MatLab.
  • Services such as AWS or Azure
  • Web sites such as Confluence.
  • Apps like Candy Crush

The list could go on forever and include things like Facebook (where you are the product), Google Search (paid for by advertising), and LinkedIn (with a multi-faceted revenue model).

A third category is open source software, which has more in common with commercial software than custom software because it is usually for the masses. Open source is covered by various writings all over the web, so I won't cover that here.

Revenue Models

There are several revenue models for commercial software.

  • Direct sales of licenses
  • Monthly or annual fee
  • Pay for support
  • Advertisements

You can use any combination of these for revenue. Ex. Sell a license and charge for support by incident, Open source software but monthly charge for support, ad supported app or platform, Cloud services such as Software as a Service (SaaS) for a monthly fee, etc.

Primary Quality Attributes of Commercial Software

  • Scalability
  • Supportability and Upgradability
  • User Experience
  • Customizability
  • Uniqueness
  • Utility or Filling a Specific Need

Commercial systems must be scalable from just one user to all users in the world. How does this work? Well think about a given commercial system and think about how it scales from one to many users. For example, Linux can scale from a watch to the largest supercomputer. Microsoft Word can scale because it is distributed and users can share files or publish documents as PDF to be shared on the web. Word has been scaled to the cloud for multiple simultaneous users and cloud storage with Office 365. Even small commercial systems are built for scale in similar ways. There must be easy ways to install, upgrade, and collaborate.

Take for example a system I helped build and manage, Resource Scheduler. This system was scalable because it ran on scalable databases, MS SQL Server and Oracle. The code itself was single threaded, so it did not scale on the processor. We had additional issues with scalibility because it was a 32-bit application, which limited RAM usage to 4GB and the application would, if pushed to its limits, run out of RAM. But because it was built on a scalable back-end, the system itself could scale in many ways. Also, because it was migrated to .NET, eventually the 32-bit components could be replaced by platform independent .NET components (even if we had to build them ourselves).

Commercial systems must be easy to support by trained technical support personnel. This allows support to be scalable by hiring non-developers to work with end users. Additionally, support should be able to upgrade users easily. An alternative would be an application that upgrades itself.

It's helpful if applications provide logging and telemetry for errors that occur when users are using the system. These errors can be collected through error reporting at your company and then aggregated and analyzed. You can even prompt the user at the time to ask what they were doing at the time, if this is feasible.

This leads into another quality of user experience (or UX), so the end user should be able to use the system without the help of support or even a user's manual. User experience is its own field of study and it warrants special attention. To put it briefly, user experience is the study of design that leads to an experience that is intuitive to the user and leads the user on the correct path to getting the most common tasks done easily.

Other forms of telemetry, such as recording clicks, timing of actions, or even eye tracking can help improve your user experience. There are tools and libraries for these. You can entice your users to use these features but you should always ask permission and anonymize data so you are not spying on your individual users.

Commercial systems need to be either customizable, extensible, or both. This is not a requirement, but think about many existing commercial systems. Operating systems have drivers, MS Office has macros, Photoshop has plug-ins, browsers have JavaScript and extensions, etc. Systems often need customization for reports. Ex. Invoices need the company name, address, and logo at the top.

Uniqueness sounds quaint, but commercial systems need to have their own unique traits. This is needed in order for the system to fit into a specific market segment. For example, my current employer utilizes a unique food order taking system that is fast and efficient for the cashier. It has unique menu features that support specific verticals, such as fast casual, pizza, and bars.

Summary

Commercial software must be scalable, upgradable, have a good user experience, allow for user customization to their tasks, and be unique to fill a specific need or market segment. There are many ways to make money off of commercial software, but the key thing is that you create it to make money. Thinking about the best way to protect your revenue streams is important because otherwise you won't be able to pay the bills.

In the future, I will write more about the quality attributes required for commercial software.