Recent Changes - Search:

Professional

Academic

Personal

Essays and articles

Links

edit SideBar

Design

These days the term 'design' is more or less synonymous with 'aesthetics'. Whilst aesthetics in everyday objects (and indeed software) are important, it's more important that the object does what it's supposed to. A chair should be comfortable (and look good), a door should be easy to operate (and look good) and software should fulfil its specification. 'Looking good' in software terms is more of a functional issue - a well designed piece of software is easy to use, easy to maintain and improve, and does what it's supposed to with a minimum of resource expenditure. Ever increasing disk sizes and RAM availability has resulted in software being 'over specified' - much of retail software these days is slow and unwieldy because it includes features that few (if any) use. This also makes the software complex and difficult to use, prone to bugs and security holes. Designing software on the principles set out by Donald Norman in his classic text 'The Design Of Everyday Things' isn't just a case of making sure the user interface is good. Theres a secondary interface in that someone (a maintenance programmer) has to be able to read and enhance the code. The code is a user interface as well. The advice set out in 'The Pragmatic Programmer' goes a long way towards making code easy to write and maintain.

Use the right tool for the job

A butter knife might successfully drive in a screw, but the chances are the process will do irreperable damage to both. Equally, writing a server application that is speed sensitive in Java may well be a mistake. Different programming languages have different advantages and disadvantages. For instance, Perl is extremely good at 'data munging' - converting large quantities of text data very rapidly (adjusting the layout of CSV files for example, or altering the format of telephone numbers in a text file). Java is extremely good for fast development of GUI based applications, and both are relatively platform agnostic (code written for windows will work with few, if any, modifications on Unix). C++ on the other hand compiles to extremely fast, efficient code (much faster than Java or Perl), but is not platform agnostic, and requires careful coding.

Formal Design

Design of an IT infrastructure or software component can be complex and risk intensive. Conventional 'cascade' type approaches to projects (specify->design->implement) increase that risk, since a mistake or omission at the specification stage won't be caught until implementation ( a careful reading of the original paper proposing the cascade model of development reveals that the author acknowledged this problem at the time). Agile development methodologies can reduce that risk, but it can be a big step to gain approval to shift to an agile development approach.

The UML

Regardless of your project methodology, it's important to get your design as thorough and unambiguous as possible. Natural languages such as English are simply too ambiguous to be a suitable medium for design documentation on their own. The UML (Unified Modelling Language) provides a valuable toolset for detailed, unambiguous design documentation. Although extremely widely used in software development circles, the UML is not widely used outside the technical arena, in spite of the fact that it is admirably suited to modelling processes, workflow and collaboration. An example data model is shown below:

This is a UML class diagram: the class 'Person' has name and telephone number details, but subsidiary types (classes) of 'Person' have additional details. It can be useful to model data in this way, to identify the optimum way to construct databases or develop code. A business-wide data model based on the UML or Entity Relationship Diagrams (ERDs) can provide valuable insights into the information flows within the organisation.

The following use case diagram shows how the UML is useful in modelling processes:

For each possible set of uses that an application or process should take into account, there should be a use case. For application development purposes, this forms the basis of the design and the testing. Each of these use cases can be analysed more precisely with other diagrams in the UML set, such as a sequence diagram:

Universal Design

The principle of 'Universal Design' is the principle of design that products should be designed from the outset with the widest possible accessibility. From a software development point of view, this includes making sure that applications are accessible to e.g. screen readers, scanning keyboards, braille readers etc. The Gnome project has made great progress in this, and the Gnome window manager is highly accessible for alternative input technologies.

Accessibility and the web

Legislation in most western countries requires that websites are accessible to alternative interface technologies, although sadly implementation is lagging badly behind. Simply ensuring that your website can be accessed using the free text based 'Lynx' web browser is a pretty good start.

Edit - History - Print - Recent Changes - Search
Page last modified on February 06, 2008, at 09:56 AM