Computer programming, development, coding
Computer programming, development, coding programs, designing code
Best programmers follow these principles
Resilient to failure, run everything in TEST MODE (always suspect failure!). What if the user was to open a particular dialog box/window, only to leave the window temporarily and go in the background to DELETE a folder or something that will impact the current STATE of the program ??????
Be persistent over power failures
Be able to RESUME after power failure (save state constantly!)
Be able to resume after program crash (can happen anytime!)
Auto Save, save the current state as regularly as possible (all the time)
Allow user to resume where he left off when filling a form (consider connection failures/temporary disconnections while user is busy!!)
Avoid annoying stubborn repetitive pop ups, watch out for loops !! Avoid indefinite loops !!! Set a reasonable max LIMIT for each loop !
Most loops have too much of a chance to run indefinitely because they are initially evaluated on a lazy assumption that the repetition should NOT have or does NOT need a maximum limit.
One popup initially or first 3-5 times is OK
After that.. user must be able to disable popup or popup MUST STOP itself (auto-ignore)
Program must keep going forward, must Never wait endlessly on any dialog
a multi-threaded design is much better than a single thread by far, although it carries the disadvantage of complexity and hard-to-diagnose bugs. Because of this complexity, it can sometimes be a very BAD idea ! The program can hang or appear to be running while it is in fact stuck/hanging in the background in a zombie state !
Scheduling ability is very powerful, users should NOT be forced to always run something by clicking on it or by sitting there physically in order to trigger the job/process/application interactively.
You should highly consider a structural / hierarchical arrangement (folders, parent folder, child, child of child/etc). If possible, allow the folders in the hierarchy to be searchable themselves! This is very very useful and powerful. Often search features are restricted to Contents only and consideration is NEVER given to the metadata or Containers ! This is a serious weakness on the part of designers!!
Allow to Copy/Paste the folders/items/child from ONE group into another, or a drag-n-drop AT FOLDER LEVEL!
Clone and Adapt – Allow the possibility to clone a successful case (record) and resubmit it or reuse it but with slightly modified details. This is yet another EXTREMELY POWERFUL feature that many designers carelessly ignore. If people can clone, touch-up and resubmit any record or data, can you imagine the MULTIFOLD increase it will have on SPEED and PRODUCTIVITY , not to mention the substantial improvement in user-convenience as the users will save HUGE amounts of time from useless repetitive typing and repetitive clicking of something that differs by only a small fraction from the PREVIOUS one that has just been successfully completed !
Templating – ability to take a successful/baseline case and make a template out of it. A very innovative feature that is based on the Clone & Adapt concept above.
The testing should ideally be done by users who will give the application non-sensical input
The principle of proximity states that humans perceive a
relationship between objects that are closer together. Use this
principle by grouping functions together. This will make it easier
to learn and understand your application
Try to show the CURRENT status/state of key indicators, for example, show as much as possible whether something is ON or OFF, and whether certain features are enabled or disabled, status is up or down/etc. Don’t make the user have to close and reopen something in order to tell whether the change he effected on it was DONE/Accepted/Activated successfully or Not !
use hierarchy/tree if possible in order to arrange a complex set of related items/things
The visibility principle states that visual cues should be
present to assist users in understanding the status of the
if you have a hierarchy, make the tree itself to also be searchable, NOT just its contents!!!
The principle of visual feedback states that an application
should respond to the user by signifying that an input has been
received. Applications should also indicate to the user when they
are processing a request
Progressive disclosure is a great way to help users understand
what features are available to them within your application. By simply
hiding options that are not possible, you can reduce users’ cognitive
load and guide them more effectively through their tasks. The
progressive disclosure principle is a rather easy thing to employ and is
especially useful in more complex applications with feature-laden
The principle of consistency may seem obvious, but I’ve seen it
overlooked by many developers. This principle maintains that users learn
and understand applications more easily when they are consistent with
what they already know. I’ve seen developers introduce new methods for
completing tasks that have already been well established.
Affordance and Constraints
Many objects, such as tools and household appliances, are designed
to afford us their proper use and constrain us from using them
improperly. These are the principles of affordance and constraints. An
example of this is the three-pronged electrical plug and outlet. These
objects are designed to not only complement each other, but also work
one way. It’s virtually impossible to plug in a three-pronged electrical
plug, shown in Figure 7-8, the wrong
way. With its flat prongs and round post, the plug makes it immediately
clear to people how to use it. And if it’s not clear, it prevents them
from plugging it in wrong and hurting themselves! At the hospital we have a saying: “Make it easy to do the
right thing and difficult to the wrong
One way to prevent users from doing the wrong thing is by asking
for confirmation. The confirmation principle states that an application
should prevent undesired actions by requesting verification, as
demonstrated in Figure 7-9 with a confirmation dialog box
Hick’s Law is a prescriptive model that’s used to determine
the time it takes to select an item based on the number of items
available to choose from. The more items you include in a menu,
the longer the response time is for the user
Fitt’s LawFitt’s Law can help you determine the size of target elements,
such as buttons, menus, etc., within your interface based on the
distance a user’s pointing device must travel. This prescriptive model
is expressed in movement time, or MT, and proves that the farther the
user must travel between two elements, the less precise the user will be
reaching the target. If your intention is to have a user click on a
button, the size of that button will be dictated by the distance between
the button and the user’s cursor