Some Reasons Why Commercial Business Software Sucks
We use software all the time. Not only developers, but also non-technology workers. Everybody is interacting daily with software in its many diverse forms. If it is in a PC, Mac, embedded system, or iPhone, there is no escaping from the reach of software in our lives.
It is therefore with repeated sadness that we verify that most software is of very low quality. And almost everybody has noticed the poor quality of the programs that we have been using lately:
We would not accept a new house with sloping floors, holes in the ceilings, nails sticking out of the walls, and an outrageous price — even if it minimally met basic needs. We would not be content with the explanation: “Well, it has a front door, which usually opens. You can find your way to the kitchen, but watch out for the nails. The holes in the ceiling don’t really leak. And sure it ran 300% over budget, but houses often do.” Rather than crooked floors, the software manifestations of poor design are redundancy, unnecessary performance bottlenecks, intertwined bugs that cannot be fixed, impenetrable code, and other ills. Unfortunately, we often accept software in just such a state. Regularly, companies release code like this to external and internal customers. And customers accept delivery. Businesses pay billions of dollars per year for this kind of software during mergers and acquisitions.
Among all classes of software, it seems however that what is known as business software seems to be the most plagued by quality problems. Rare is the business software that is created on time, under budget, and with minimum quality.
As software developers, it is educative to stop and try to understand why most business software completely sucks. It is probably not just for one reason, but I have my opinions about some of the culprits:
Most business software is not written for end users: in many companies, software is written for the needs of administrators. For example, many business administrators decide about features without talking to the real people who will use the feature. It is a serious miscalculation, but it is also a symbol of power that they want to maintain.
Many decisions are taken for reasons other than engineering: it is not uncommon to learn that a platform was chosen for a project because of a business decision. For instance, a company may use a completely unsuitable tool for a software task, just because it is provided by a well known supplier. This is the kind of disconnect between engineering and business that make like very difficult for developers.
Lack of design: software that is written simply by “collecting requirements” really lack a central design, which will make it always a bad choice. Good software emerges from a fundamental design decision. For example: a web browser, a spreadsheet, or a video game has a central design that makes it easy to use and even develop them. Most business software is created as an “aggregate of features”, instead of a tool that can solve a unique problem.
Given the attitude and the execution behind business software, it is not hard to see why it fails so often, even when it is delivered. Maybe it is not just an engineering issue, but a social issue that needs to be addressed by current and future generations of developers.
[Picture by thinkpanama]