Hacker - 1: A person who is inexperienced or unskilled at a particular activity, 2:An expert at programming and solving problems with a computer

How can you tell the difference? See engineer.

Engineer - 1: A designer or builder, 2:A person who carries through an enterprise by skillful or artful contrivance, 3:One who analyzes methods, procedures, and jobs in order to secure solutions meeting requirements.

These are the people who build good software.

Perfect Software - A fiction perpetrated by some hackers.

See Near Perfect Software.

Near Perfect Software - See NASA Space Shuttle Software

NASA Space Shuttle Software - The 470,000 lines of code you get for $750,000,000 from a 260 person development group on a 20 year old unchanging platform, which in the last 11 released versions expressed only 17 bugs.1

In contrast Windows 2000 Release Candidate 3, released on Nov. 15, contained about 30 million lines of code with approximately one error for every 100 lines of code — much better than the accepted industry average of three errors for every 100 lines of code.2

I believe that good software is a result of both good design and good development. Good software makes people's jobs easier and faster. Good software is a pleasure to use. Good software provides people with the information to make decisions about the operation of their business. Good software should respond quickly and the people working with it should be able to find what they need quickly. Good software has no critical problems and very few annoying ones. Good software is designed to change as needs change and evolve. Good software is well documented both internally and externally. Good software is delivered in a timely manner.

To make good software you must understand the people and jobs that the software is supposed to serve. Good software is made for the people who will be using it, not the people writing it. They should understand it quickly and easily. Good Software should require minimal retraining. Good software should require minimal changes to existing work flow.

Good software must provide information to both workers and managers in easy to understand clear form. They should effortlessly find the information they are looking for. When people are doing data entry, they should not have to continually grab the mouse to move to the next part of a form. Forms should be clear and uncluttered. Searching should be easy and fast. When a person tries to print a page or form, it should print correctly the first time.

To make good software you have to spend, at an absolute minimum, as much time proving it works correctly as you do writing it. Proving correct operation is both finding the bugs and determining that the software meets the requirements. Good software also requires that it be tested and that it performs well when used incorrectly. Good software has to handle errors as well or better than it handles normal situations.

I apply these principles to all software that would be (developed and) approved for your use.

Life Cycle

Copyright 2001 Paul Rubin