How to Produce Truly Awful Software

The software world is becoming more competitive, and in light of this increased competition, it becomes necessary to give some thought as to how to gain supremacy when producing mediocre or truly horrid software. We have developed the following guidelines to help perpetuate the myth that sub-standard software is a necessary interference with productivity:

1. Steal ideas from other developers. This is necessary to develop a product when you have no creativity yourself. If you insist loudly enough, and often enough, that it was your idea, people will eventually believe you.

2. Prosecute, vigorously, anyone who tries to develop an idea even remotely similar to yours. It does not matter that you stole the idea to begin with.

3. Buy out the competition. This is the best option for squashing upstarts who come up with a truly original idea. This is essential if the idea threatens you with obsolescence. If it is something people really want, you can release your own buggy version a year later, and then use it as proof that the idea was not very good to start with, or, alternately, take credit for the whole thing if you do get it to work on your existing clumsy foundation.

4. Bloat is Beautiful. If there is a more cumbersome and awkward way to write code, use it. If you can increase the size of the program, and the resources it demands, do so. This achieves a range of objectives, from annoyance, to giving the appearance that you actually added something useful to the program.

5. Require as much RAM as possible. This will place an increased financial burden on the users, as well as perpetuating the technological tradition of planned obsolescence. If you also produce computer systems, you are in a win-win situation. You may also buy stock in companies that produce memory chips, and you’ll be able to assure your future financial base.

6. Add unnecessary features. Make them look really good, so it appears that you tried to please your customers. This tactic is especially useful in achieving maximum bloat and memory usage. It has the further benefit of slowing down operations, placing an additional burden on the computer, and interfering with productivity. Unnecessary features need not be stable, unexpected errors, hangs, and restarts serve to lower the overall expectation of quality.

7. Any new feature which is introduced must be accompanied by at least 10 new bugs. Less than this will foster unrealistic expectations of quality in the minds of your users. If possible, bugs should conform to the following ratios:

  • 1 in 10 should be serious enough to stop the feature from performing at all, on at least 1/3 of all computers.
  • 2 in 10 should cause the computer to require restarting. Complete failure to respond, when multiple programs are opened with unsaved work is optimal.
  • 2 in 10 should cause the program to close without warning, or to hang and fail to respond. Under no circumstances should there be a pattern to these behaviors. Corruption of documents in progress is an added bonus.
  • The remaining 5 of 10 should produce random annoyances such as inappropriate responses to menu commands, dramatic system slowdown, cryptic error messages, failure to open compatible documents, etc.

Patches and updates should promise solutions to these problems, but should not actually provide them.

8. Plumb the potential of dialog boxes. Dialog boxes with unhelpful information should appear at random. You can use them to notify the user of system processes which they do not need to know about (or do not care about), produce error messages which are not related to any action the user performed, or to delineate steps to a process which could be done in a single step.

9. Confirm everything. The simpler the task, the more annoying it is to confirm it. The less likely people are to make a mistake, the more important it is to put in a dialog box to confirm the task. This feature is a cardinal hallmark of bad software, and helps to keep the annoyance factor high, and the user expectations low, so do not overlook it when putting the finishing touches on your masterpiece.

10. Create the illusion of security on the surface. This will relieve you of the obligation of providing meaningful security protection, while giving you the added benefit of being able to create further interference with productivity. The following dialog (or the written equivalent) should be used as often as possible:

“Your computer is doing something that may present a risk. You may have started this process on purpose, or it may be starting without your knowledge. This process may be harmful to your computer – just because you started it does not mean it is not dangerous. This process may cause considerable harm to your computer, up to, and including, total data loss. On the other hand, this process may be necessary to the function of your computer, and failure to allow it to continue may seriously compromise your ability to use the computer to perform essential functions. Click Yes if you wish to continue this process. Click No if you wish to discontinue this process.”

This warning may be followed by small print, reading: “Continuing this process may void your warranty.”

11. Silence your critics. Use creative methods to punish your critics, while rewarding people who praise your software.

12. Force your users to upgrade. This removes the ability for users to choose an older, more stable version of software over a newer, buggy version. Such choices place an unreasonable burden of quality on you, and give the user an excessive degree of control over their own computer.

13. Assume the user is stupid. This assumption opens all kinds of possibilities for maximization of useless dialog boxes, but also allows you to bury necessary controls so that the user cannot locate them. The potential is far greater though, because an assumption of stupidity of the user also relieves you of the obligation of providing anything that is user-friendly, and increases your ability to create more awkward and cumbersome interfaces to interfere with accomplishing simple tasks.

14. Assume the user must be protected from themselves. Ownership of a computer is too great a burden for the average person, but they do not know this, so you must not let them know that you have protected them from themselves. It is best to create the ILLUSION on the surface that they have control of the software, but the real controls should be hidden, and only accessible if someone is aware of the hidden manner of accessing them. This strategy causes untold frustration in the user, as they repeatedly attempt to access the false controls to set necessary configurations or give permissions, not realizing that the controls they are accessing are not the ones they need to access. Naming the real controls and the false ones with the same name further enhances your ability to feel superior and to frustrate the user.

15. When issuing new versions, maximum effort should be taken to introduce a wide range of new (unnecessary, and useless) features, but persistent problems and annoyances should not be repaired. The prettier you can make the new features, the better – this helps achieve your goal of high RAM requirements, and it helps to make it look like you actually added value when in fact you did not. It is easier and more fun to create eye candy than it is to repair deep problems or patch bugs and security holes. Eye candy has the added benefit of being more visually appealing for promotion of the new version, and is easier to promote than stability, enhanced productivity, or greater ease of use.

16. Change the rules. This is most effective if you can establish a standard way of doing things, and then change it after your user base is finally adapted to it. Making the interface less intuitive than it was originally is optimal. A great way to achieve this is to change everything that works, but do not fix the problems.

17. Provide the illusion of automated help. When errors occur, or programs stop responding, provide a dialog box which offers to find a solution to the problem. No further programming is necessary in this feature, other than a progress bar, followed by a message which says that no solution was found, and which instructs the user to visit the software publisher’s website to look for an update. This feature does not provide any useful function, but leaves the user with the feeling that at least you TRIED to help them. This is an easy, and inexpensive way to enhance public relations, without having to actually provide anything of substance.

The software world is advancing, and becoming ever more complex. Keeping software from performing predictably is in the best interest of every software developer, lest computer users feel that good function is a justifiable expectation. It is our hope that this guideline can assist developers in maintaining the status quo, so that profit margins will not be negatively impacted by the expectation of true progress.

If this guideline is adhered to by current developers, we can look forward to wide vistas of ease and profit in the future.

Grow a Garden!

Gardening doesn't have to be that hard! No matter where you live, no matter how difficult your circumstances, you CAN grow a successful garden.

Life from the Garden: Grow Your Own Food Anywhere Practical and low cost options for container gardening, sprouting, small yards, edible landscaping, winter gardening, shady yards, and help for people who are getting started too late. Plenty of tips to simplify, save on work and expense.