The Software Architecture of a Business Application


What's WRONG With Web 2.0

A SIMPLE Explanation Of How Computers Work

What Is A Computer LANGUAGE?

The Marketing MYTH Of Modularity

Software Development The Way GOD Does It

The ADVANTAGE Of Object-Oriented Software

The Importance Of Software OWNERSHIP

Why We MUST Re-invent The Wheel

Why We NEED A Business Analyst

Screens and Reports - A User's Perspective

Off-The-Shelf or Customization - An Investor's Choice

Garden Sheds or Skyscrapers - An Engineer's Perspective

Under Pressure - Increasing Users, Increasing Data, Increasing Complexity

Information and the Nature of Software

The Problem with Software Development Today

Ignorance - Leaving it to the Experts

Openness - Getting Rid of the Magicians

Professionalism - Putting the Business First

Software Ownership - The Long Term Perspective

An Integrated System - The Corporate Database

A Flexible System - The Incremental Approach

Data Storage - The ER Model

Processing - The OO Model

Communications - Moving Data Efficiently

Security - Encryption & Authentication

The User Interface - Data Integrity

A Public Interface - The HTTP Protocol





What's WRONG With Web 2.0


The Internet is a global network of computers that communicate with each other using a number of different protocols where each one was designed with a different purpose in mind. The most well-known of these is the one used by the World Wide Web. It is called the Hypertext Transfer Protocol (HTTP) and it allows our computers to retrieve documents written in the Hypertext Markup Language (HTML) and display them inside the window of a program we call a "browser."


Most of us are familiar with the use of a browser to read documents on the World Wide Web and allow us to click on some highlighted text or "hyperlink" to jump to another page. When we do this our computer connects to another computer where the linked document is located in order to retrieve it. Often a single page inside the browser consists of more than one part with each part potentially residing on a different computer. This explains why it sometimes takes a few seconds for a document to load into the browser and also why sometimes parts of a page appear to be missing.


Because the World Wide Web is such a simple and powerful way of sharing information with the general public computer programmers looked for a way to make the browser do more than just display HTML documents and instead turned it into an application development platform in its own right. To do this they developed some very complicated technologies (e.g. JavaScript, XML, XSLT, DOM, AJAX, PHP, ASP to name a few) that all make use of the basic HTTP protocol in a way that the original designers never intended. In reality this had the opposite effect from what was intended and made software development even more complex, defect-ridden and insecure than it was before the change to browser-based development.


What used to be an enjoyable and productive occupation for a business programmer became a nightmare to the point where many potential programmers decided it's not worth the effort and they'd rather do something else. It also had the effect of making software development so expensive that it became uneconomic for anyone except governments, large corporations and those with unlimited supplies of money.


The good news is that it is actually no longer necessary to develop a business' information systems to run inside a browser. It is possible to develop an entire business system as a standard client/server desktop application. By using the Internet protocols as they were intended by the original designers we allow software development to become easy, robust and secure.




A SIMPLE Explanation Of How Computers Work


A computer is a machine that is able to perform calculations and make logical decisions automatically by following a list of instructions called a "program." The numbers used in the calculations are called "data." Both the program instructions and the data are coded using a "binary" code i.e. a code with only two digits - 0 and 1. Inside the computer each digit or "bit" is represented by an electric current that is either on or off, or a magnetic polarity that is either north or south. A computer data or program file is actually just a coded sequence of 0's and 1's represented by magnetised spots on the surface of a disk.


The primary component of a computer system is its microprocessor. Secondary but also essential are the components used to store the data - the memory chips and the disk drives. Thirdly depending on how we wish to interact with our computer we may need a keyboard, mouse, screen, speakers, microphone or printer. Finally if our computer is to interact with other computers we may also need a network card, router or modem with appropriate cables.


The microprocessor is the electronic chip that carries out a program's instructions sequentially one step at a time (unless it is a multi-core processor that is able to process more than one set of instructions at the same time.) The computer's power arises from its ability to execute billions of these simple instructions every second.


A program consists of a list of instructions telling the microprocessor what to do. The actual instructions depend on the processor model but essentially they are simple things like moving data to and from memory, disk, keyboard, mouse or network card, adding, subtracting, multiplying, dividing or jumping to another part of a program depending on the result of a previous calculation.


For example when a screen image changes the microprocessor tells the screen the colour of each dot by getting the data from a disk file or network connection or by performing a mathematical calcuation. Usually it all happens so fast we are blissfully unaware of the amount of work involved as it may involve the execution of millions of program instructions.


The computer progammer's job is to create this list of instructions that makes the computer do what it is meant to by the one who commissioned the program. If even a single instruction is incorrect the computer will produce erroneous results, unexpected things will happen on the screen or the computer will "crash."




What Is A Computer LANGUAGE?


A computer by itself only knows how to move numbers around, do calculations or make logical decisions based on the results. It knows nothing at all about customers, invoices, stock, suppliers or accounts. It is the assumptions made by the logic of a computer program that determines what each piece of data represents and the symbols used to express that logic are known as a "computer language."


A computer program is a list of instructions to be executed by a microprocessor. These instructions are in the form of binary numeric codes and although we can enter them directly into the computer in this form it is more convenient to first enter them as corresponding alphabetic codes in a separate "source" file. We can then use another "assembler" program to convert them into their numeric equivalents. These alphabetic source codes are the simplest form of a computer language known as "assembly language."


For example suppose we wish the microprocessor to add two numbers together at specific locations in the computer's memory and store the result in another location. The assembly language to do this might look something like this:

     MOV AX,A (move the data in memory location A into processor location AX)
     MOV BX,B (move the data in memory location B into processor location BX)
     ADD AX,BX (add AX and BX together and place the result in AX)
     MOV C,AX (move the result from location AX into memory location C)


Running this piece of code through an assembler will produce something that the microprocessor understands and will look something like this:

     0100110100011010010011010001101101001111000110100100110100011110


If all this seems rather labourious it is and is the reason higher level languages were invented. For example the above logic written in Pascal might look like this:

     C := A + B;

or even better:

     Customer.BalancePayable := Account.CurrentBalance + Account.InterestDue;


From an economic perspective a computer language should allow a programmer to express the business logic in a way that is easy to read, understand and maintain and at the same time minimize the possibility of errors.




The Marketing MYTH Of Modularity


The divison of business software into separate "modules" is an arbitrary concept designed to create a false impression. It allows software suppliers to charge us different fees based on the features we want even though all the features are normally present and just the ones we haven't paid for disabled. It also leads us to the mistaken belief that software is more robust and flexible when developed in a "modular" fashion.


The idea of a software "module" has been around for a long time but has never been properly defined. The best we can say is it's a way of splitting software up into more "manageable" pieces and it's an idea that persists in the minds and vocabulary of users and programmers alike. In reality however it is the arbitrary division of software into different "modules" that makes it less robust and flexible and creates an additional burden of work for programmers.


A business software system by its very nature is complex and has numerous interconnections and relationships between its various components. To arbitrarily divide a system into separate "modules" requires the complex interfaces between them to be defined from the outset in order for them to interact. This is not a problem if the software is unlikely to change however this is not the case for most business software which is subject to a need for frequent and ongoing modification.


A better approach is to develop a business system as an integrated whole preferably as a single program. Instead of structuring the software into separate "modules" along arbitrary lines of division as specified by a software supplier's marketing department (general ledger, accounts receivable, point of sale etc.) it makes more sense to structure it using "objects" that represent real business entities (customer, supplier, account, stock item, invoice etc.)


When the structure inside the computer program accurately represents the business the result is maintainable and reliable software that actually does what we expect it to!




Software Development The Way GOD Does It


In the beginning God created the universe and filled it with objects. He has given each object a set of attributes and placed it in a particular location in the universe where it occupies some space. Each object has been given the ability to do some stuff and communicate with the other objects around it by sending and receiving messages. An object is able to do some stuff by itself (and even create other objects) but for some stuff it needs to send messages to other objects asking for help. And it can only do some stuff if it's asked to by other objects.


When we develop computer software we're attempting to create a dynamic model inside the physical memory chips and disk drives of our computer or network that accurately reflects a particular scenario. For example when we create business software we normally represent a customer using various attributes such as name, address and contact information. These items of data are stored somewhere on the disk and loaded into memory or transferred across the network as necessary by our computer program.


Because the computer hardware only knows about binary data and nothing at all about customers it's up to the computer programmer using a computer language to describe how a customer will be represented using binary data. There are numerous ways to do this but the most effective method yet devised is to represent customers and other business entities as "objects" using an "object-oriented" computer language.


This object-oriented technique bears a remarkable similarity to the way God created the universe. In the material universe God made everything out of basic elements we call "atoms." Each atom is like a single binary digit or bit of data by itself that exists in isolation. It is only in relationship to the other atoms in the universe that God creates a variety of meaningful objects to do some stuff, interact with each other and fulfil the purpose for which they were created.


The development of object-oriented software is really an attempt by us with our limited minds to mimic what we see our Creator doing with His unlimited mind and total comprehension of the universe. We can therefore gain a serious advantage by asking Him how He would have us do it. And if we haven't done so already there may still be time to make a fresh start!




The ADVANTAGE Of Object-Oriented Software


We've probably heard of object-oriented software and the advantages it provides over other methods of software development. However unless we've done some computer programming we're probably none the wiser about its advantages or even what it is. And if we've done some programming we may still wonder whether object-orientation provides any advantages or simply makes things more complex than necessary.


Object-orientation is a method of structuring the data and logic in a computer program in a way that makes it easy for a programmer to manipulate it using source code. For example in an accounts receivable program we might define a "Customer" object that has an "UpdateAccounts" method that automatically updates all the accounts linked to the customer. Then in the source code whenever we want to ensure a customer's accounts are updated we can simply write a line of code that looks something like this:

     Customer.UpdateAccounts;


There are two reasons why this is advantageous. Firstly it allows a programmer to automate things with less lines of code than would otherwise be needed. Secondly it allows the logic to be more easily understood if it ever needs altering. In other words it simplifies the processes of writing and maintaining source code and significantly lowers the cost of software development and maintenance.


However it is a sad and remarkable fact that these advantages of object-orientation proved so seductive to programmers that they actually went to great lengths to allow objects to be available to their programs even if they belonged in other programs, were written in other languages or resided on other computer systems with the use of very complicated technologies (e.g. COM, DCOM, SOM, CORBA, XML, SOAP, WSDL to name a few.) In reality this had the opposite effect from what was intended and made software development even more complex than it was before the change to object-orientation.


What used to be an enjoyable and productive occupation for a business programmer became a nightmare to the point where many potential programmers decided it's not worth the effort and they'd rather do something else. It also had the effect of making software development so expensive that it became uneconomic for anyone except governments, large corporations and those with unlimited supplies of money.


The good news is that it is no longer necessary (if it ever was) for a business' information systems to be split into multiple programs on mutiple platforms in multiple languages. It is now possible for an entire business system to be developed in a single object-oriented programming environment allowing us to enjoy the true advantages of object-orientation.




The Importance Of Software OWNERSHIP


When discussing free vs. proprietary software or open source vs. closed source there is a third option that is actually the only way ahead for our business in the long term. Instead of depending on a community of open source developers or proprietary software companies to provide the mission-critical information systems we need for our business we must start to develop and maintain our own.


Our instinctive response to the question of providing information systems for our business is that we are better off leaving it to the "experts." Computers are far too complex for us to understand either them or the people that work with them. However unless we make the effort to comprehend we will remain at the mercy of an industry that is increasingly fragmented and confused about its own reason for existence.


At the same time as software companies are adding even more features to their software and devising even more creative ways of extracting income streams from their clients, those same clients are becoming more and more aware that the systems on offer are failing to provide their businesses with accurate, reliable and timely information targeted at their unique needs.


It is logically impossible for a software company to know exactly what our business needs. The best they can do is provide every feature they think we might need in the hope they are providing enough to convince us to buy their software. When we finally settle on a product what we will most likely get is software that meets some of our needs but not all of them together with a host of other features that we will probably never need or use.


In order to provide our businesses with the software they need we must resist the temptation to look for a cheap or easy solution. Instead we must engage business and IT professionals with a proven track record in business systems and software development who will take the time to understand the details of our business and develop our OWN systems for us. We REALLY have NO OTHER OPTION.




Why We MUST Re-invent The Wheel


"Don't waste time reinventing the wheel!" How many times have we heard this from software vendors trying to convince us their product is exactly what we need? Of course the wheels on offer come in many different shapes and sizes and we'll be lucky to find one that fits properly and performs well in our business for the next 5, 10 or 20 years. Unfortunately in the real world every business is unique and our's is no exception. This means we really have no option but to "reinvent the wheel" if we want to make the most of what computer technology has to offer in the long term.


It's incredible how efficient modern computers are at processing and storing information and moving it across our local area network or the Internet. Our business has the potential to keep all its information in a central location where it's safe from unauthorized access but conveniently available to everyone involved in the business including our employees, customers and suppliers.


Confronted with this exciting prospect our instinctive response is to begin searching for the right "package." Based on the marketing information we've been exposed to we're convinced that such a "package" exists. We know there are people out there cleverer than us (we call them "experts") who have already spent time researching and designing exactly the software we need.


After compiling a list of potential candidates and their features we proceed to choose the package that best fits our business and our budget resulting in the happy scenario we just described in our opening paragraph. "It's like magic," we declare, "the wonders of modern technology!" Unfortunately in most cases this outcome bears a remarkable similarity to the proverbial pipe dream.


If our business is to experience the full power and efficiency of modern computer technology IN REALITY we MUST:

     1. Take ownership of our software systems from the outset.
     2. Become as informed as possible about software and technology.
     3. Resist the temptation to depend on "experts" and "magicians."
     4. Recognize that our software needs are unique and will change with time.
     5. Trust only experienced IT professionals with proven success in their fields.
     6. Be prepared to develop our own systems from scratch i.e. "reinvent the wheel."




Why We NEED A Business Analyst


Because the ability to think through the development of our business processes usually comes spontaneously to us as entrepreneurs we tend to under-estimate the skills, time and effort needed to develop systems that will allow our business to grow to the next level. This is where we can benefit from the services of an experienced business analyst.


The skills required to think through in detail the efficient implementation and modification of our business processes are usually only developed as a result of significant experience and study over a period of years. Although we each possess some of the skills to one degree or another we tend to focus on the areas we understand or are comfortable with at the expense of other areas.


The role of the business analyst encompasses all areas and is defined by the International Institute of Business Analysis (IIBA) Body of Knowledge (BOK) as "A business analyst works as a liaison among stakeholders in order to elicit, analyze, communicate and validate requirements for changes to business processes, policies and information systems. The business analyst understands business problems and opportunities in the context of the requirements and recommends solutions that enable the organization to achieve its goals."


In other words a business analyst is required to have a detailed understanding of the whole business operation including its people, processes, policies, information systems and the business environment. Because of this comprehensive overview the business analyst is in a position to assess the impact any changes are likely to have on each of these areas and is therefore able to develop and implement workable solutions to business problems.


In simple terms a business analyst is trained to think about, work with and document all the details involved in making changes and improvements to our business processes and information systems that would overwhelm us if we were to try and do it ourselves.




Screens and Reports - A User's Perspective


From a user's point of view a business application consists of two main components and although it may be obvious to people who live and work in the "real" world it is inclined to be forgotten by the technical people who have to deal with the hidden complexities of computer systems or those who consider computers to be primarily an entertainment device.


Firstly there are screens or forms that appear on the computer's screen and allow a user to enter information or instructions into the "system" and observe the progress and results of various "happenings" within the "system." Secondly there are reports that the user can print out that are commonly referred to as "the hard copy."


Although this description of a business application may be accurate from a user's perspective it belies the fact that a single computer represents the most complex machine human beings have ever devised. And we haven't even begun to consider the implications of a planet filled with a diverse network of interconnected computers of various makes and models running a humanly incomprehensible multitude of software systems.


The user gives instructions to the "system" using a keyboard or pointing device and they see what happens on their screen or what comes out of the printer. And that's it. As far as the user is concerned everything else that happens inside the "system" is shrouded in mystery. This gives someone with even a little knowledge of computers a major advantage in the eyes of a user and allows them to take on the aura of a magician, a sorcerer or a witch doctor.


Because those who make the decision about whether or not to invest in or commit to a particular technology can often be described as users (albeit sophisticated users) the computer practitioner is able to turn this situation to his own advantage and profit. Because the user fails to appreciate the true nature of computers he becomes an easy prey to the black arts of the computer practitioner who can conjure up dazzling spectacles both on and off the computer screen.





Off-The-Shelf or Customization - An Investor's Choice


When searching for a software solution the business owner is often faced with two alternatives. The first and most appealing is to search for a ready-made pre-built solution. This is what has come to be known as off-the-shelf software. The idea is that the user pays for the software, installs it on his computer and after some configuration the problem is solved. This model works well for a particular type of business application with the classic examples being word processors and spreadsheets.


The difficulty with this approach is that every business is unique and has diverging requirements and expectations for a software solution. For an off-the-shelf solution to be really useful in this context it must include all the features its users and potential users are likely to need. The software in effect becomes "all things to all men" with so many features that just learning how to use it is not an exercise for the faint of heart.


The second alternative is what we call customized software. This means quite simply either build it yourself or engage someone to build it to your exact requirements. The advantage of customization is that if done correctly you will end up with a complete solution without bells, whistles and a host of other features you will probably never need or use.


There is a third alternative we have thus far failed to mention that should not be forgotten. This is what we commonly refer to as the paper-based solution. For those that don't know or can't remember this name is derived from the way things were done before we had computers. Long lists of facts and figures were created on sheets of paper using a primitive hand-held writing device known as a pen. If presentation was important then another device was used where sheets of paper were fed directly into it and the characters were impressed on the paper through an inked ribbon by mechanical hammers operated from a set of manual keys laid out in a remarkably similar arrangement to the ones on a computer keyboard. This contraption was called a typewriter and examples of it can still be seen in some museums. In many business situations the paper-based solution is still the best and most cost-effective answer to the problem.


(The remainder of this essay assumes you have abandoned the search for an elusive off-the-shelf solution and have also ruled out the prospect of returning to or remaining in the dark ages with a paper-based system. You now have a single option in mind - you have decided to either build it yourself or engage someone else to build it for you. After all it can't be that hard if everyone is doing it! Right?)




Garden Sheds or Skyscrapers - An Engineer's Perspective


The techniques used in building a garden shed are reasonably easy to apply by anyone with some experience of carpentry. Having mastered the requisite skills one can continue to successfully build sheds of varying sizes until one feels confident enough to attempt a larger project such as a house. What is not so obvious is that although the methods used to build the shed are also useful on the house there are a significant number of other skills and techniques that must be understood and applied correctly in order that the house-building project be a success.



Mastering the skills needed to build the house may give one the inclination to try an even more ambitious project such as a multistorey building. However unless one is cognizant of the fact that to succeed in such a venture will require the rigorous application of a completely different set of skills the project is doomed to failure from the outset. Although many of the shed and house building techniques are useful on the multistorey they are of only secondary importance to the successful outcome of the project.


To the building industry outsider who has never touched a hammer and nails the shed, the house and the multistorey building have much in common and he remains blissfully unaware of and unconcerned about the different techniques used in their construction.




Under Pressure - Increasing Users, Increasing Data, Increasing Complexity


The concepts involved and the problems encountered in the construction of computer systems bear a remarkable similarity and parallel to those in the building industry and anyone serious about software construction would be foolish to ignore the significant lessons learned and the experience accumulated by that industry over the last few thousand years.


The techniques used to build a business application are reasonably easy to apply by anyone with some experience of computers - create a database table, add some fields, create a data entry screen, design a report. One can continue applying these techniques developing one application after another and at the same time gaining the confidence to attempt a more ambitious project. However unless one is aware that in the same way as making the transition from shed-building to house-building requires a significant number of new skills and methods in order that the project be successful the move from a basic business application to something more advanced also requires the correct application of new knowledge and skills the project is doomed to failure.



At best a number of things will happen. As the number of users increases the application will begin to experience lock-ups where the application or computer "freezes" for no apparent reason. This will usually happen at the busiest of times when the number of active users has increased and the greatest demand is being placed on the system.


As time goes by and more data is added the application will tend to slow down and may even appear to grind to a halt in a similar way to a lock-up. This can happen when entering new data, searching for existing data or printing a report.


Finally as new features are added to the application by either the original or subsequent developers the time and effort required to do so increases inordinately making the cost of each new feature outweigh the benefit to be gained. The developer either gives up in despair or the application begins to develop bugs that are difficult to eliminate and have the potential to cause the data to become corrupt or unreliable.




Information and the Nature of Software


Although there are many similarities between software construction and building construction it should be noted that there is also a fundamental difference the world is still in the process of coming to terms with. This difference arises from the inherent nature of information expressed in its digital form.


By means of computers and computer networks digital information (including computer software, data, audio and visual media) may now be instantaneously duplicated and transmitted at the speed of light to any geographic location on earth at virtually zero cost. This fact presents a serious challenge to those who work in the software industry or are used to making a living from the sale of digital information.


If the building industry was the same as the software industry it would mean we could build a shed, house or multistorey building (with all the incumbent expense) and then at zero cost create as many identical buildings as we wanted anywhere else on the planet.


It is this ability to duplicate and distribute information and software at next to zero cost that creates the illusive promise of easy riches for the software practitioner. This dream was a contributing factor in the speculative investment frenzy of the 1990's that came to be known as the dot com bubble.




The Problem with Software Development Today


Today the biggest problem in software development arises from the fact that everyone is doing it. Computers have become ubiquitous and there is now a huge array of tools and products enabling us to do clever and amazing things. Many of these technologies are freely downloadable from the Internet and there is no barrier to entry into this vast Pandora's box we call computer programming.


This presents the business owner with a significant problem. With so many options to choose from and so many potential solutions on offer just how is he to go about making a decision. What criteria should he be using to evaluate each alternative? Does he have the time to thoroughly research all the possible options at his fingertips? And how is he to avoid becoming entangled by the alluring snares of the conjurer?


Does that computer salesperson in the nice suit with the slick presentation and impressive graphics really have the best interests of the business at heart? Or is he more interested in making a sale? And how is the business owner to know the difference?


Even if the business owner is able to find software or solutions that solve at least some of his problems he will often end up with a hotchpotch of different applications that do not work well together. This often means that the same data must be entered into the system multiple times or transferred from one application to another using time consuming and error-prone import/export procedures. An even more uncomfortable prospect is the possibility that the business will come to depend on a particular piece of software as a critical part of its operation only to discover when problems arise that the software is no longer supported by the company that developed it.




Ignorance - Leaving it to the Experts


When attempting to find a software solution most business owners initial approach is to engage an expert. They have a gut feeling that their business would benefit from and be made more efficient by using a computer solution. They also recognise that they do not have the knowledge or understanding necessary to make a wise decision that will stand their business in good stead for many years to come.


Often they will employ the services of an accountancy firm or computer consultant to advise them on the best options available. This will give rise to an expensive and time consuming search to collect and collate the many off-the-shelf solutions on offer. The consultant will examine the various features of the software to see how well they fit with the business. They will attempt to get feedback from other users of the software in order to gauge their level of satisfaction. They will also look carefully at the company that developed the software asking questions like "how long have they been in business?" and "how long are they likely to continue?"


The result of this process will often arrive in the form of a long report containing many interesting tables and diagrams (together of course with a sizable bill for services rendered which the length of the report is partly an attempt to justify!) This report is likely to be inconclusive and fail to provide the business owner with any clear direction. Having sought and paid for the advice of an expert the business owner very often finds himself back where he started (but with less money in his pocket of course!)




Openness - Getting Rid of the Magicians


There is an oath practitioners of magic are expected to commit themselves to by stating essentially that "as a magician I promise never to reveal the secrets of any illusion to a non-magician, without first swearing them to this oath. I promise never to perform any illusion for a non-magician, without first practicing it until I can perform it well enough to maintain the illusion of magic."


Although we are unaware of any similar oath among computer practitioners there is a tendency among many to want to closely guard their secrets. They see this as a way of preserving their privileged position amongst the community at large by restricting access to the knowledge and secrets they have invested many years and resources to acquire.


When investing in a computer solution that is likely to become a critical part of a business's operation the owner must be made aware of all the necessary facts pertaining to that solution if he is to make a wise decision in the best interests of the business and its long term future. Either that or he must be willing to believe that the magic will continue to work for as long as he has an interest in the business.




Professionalism - Putting the Business First


What the business owner really needs (although he may not be aware of it) is the assistance of a professional. This is a person who has neither a vested interest in recommending a particular solution nor the intention of wasting the owner's time and resources by taking him on a wild goose chase.


The true professional is the one whose ultimate intention is to act in the best interests of the business even if it means gracefully stepping aside when his assistance is no longer sought or required. His motivation is to use his knowledge, talents and experience to assist the business owner to find a real and long term solution to his problem. Although he does not have all the answers he has the humility to acknowledge this and the willingness to seek and accept advice from those more experienced.


The real question then that the business owner should be asking is this - amongst all the people queuing up to offer advice and potential solutions how can I pick out the true computer professional?




Software Ownership - The Long Term Perspective


Satisfying the immediate needs of a business by addressing its current problems with a software solution (assuming one can be bought or built at an affordable cost) may provide a certain semblance of progress. The business is able to cut costs by streamlining its administrative processes resulting in time savings, staff reductions and efficiencies. The magic works!


As time goes by a number of things begin to happen. The commercial or legislative environment changes, the computer hardware technology changes, the business diversifies or the business owner thinks of other valuable things the software could be doing with the information available.


All of these things are likely to require software modifications. However unless this eventuality has been considered beforehand the business may find itself facing an insurmountable obstacle. The cost of the modifications may significantly outweigh the value of the benefits to be gained. In the worst case where the source code is not available or the original developer has ceased trading there may be no viable alternative other than to replace the entire system.


In order for a software system to be an asset to a business in the years ahead and not a liability there are a number of precautions that must be taken by the business when the system is first implemented. Firstly and foremostly an electronic copy of the source code for the entire system (and any subsequent modifications) must be acquired by the business and kept in a safe place preferably as multiple copies in disparate geographic locations. If future modifications are to be made to the system the availability of this source code is an absolute necessity.


Secondly if the original developer is not operating under the business's direct instructions the business must ensure that it obtains from the developer a perpetual licence allowing the business to maintain the software for its own use on an on-going basis. The purpose of this is to ensure that the business is not legally dependent on the original developer in any way with regard to future modifications to their system.


Thirdly if the software is to become a real asset as time goes by the system must be architected and developed in a way that allows new features to be easily integrated into the existing system. The initial system in effect becomes a framework within which new features will be added or existing ones modified. The quality of this framework, its associated documentation and the foresight with which it was developed will have a direct effect on the ease with which subsequent developers are able to make enhancements. It will also provide a model that will either guide and inspire their work or alternatively cause them to pull their hair out in frustration and despair.




An Integrated System - The Corporate Database


In many organisations today the picture that emerges of the state of their information systems is not a pretty one. As information needs arise from within the organisation the common approach is to search for an off-the-shelf solution to meet that need. When the search proves unfruitful a customized application is created using the computer programming tools most readily available or most easily understood.


To use the building analogy the end result of this approach begins to resemble a yard filled with garden sheds rather than a house or multi-storey building. The people working in the yard become adept at moving items from one shed to another by means of a wheelbarrow along a garden path or through an underground tunnel. Similarly the people working on the computer system get used to moving information around the system by means of multiple entries or complicated import/export procedures.


The result of all this is that data that should be accurate, up-to-date and available to people within the organisation for it to function effectively is inaccurate, out-of-date or unavailable. Customers and suppliers lose confidence in the organisation and decision makers are forced to make decisions based on a "fuzzy" picture of what is happening at best.


To avoid or rectify this situation the business must make a deliberate decision at some point to develop or move towards an integrated system. An integrated system is a system where all the information used throughout the organisation is stored in a single logical place and is structured in a way that avoids unnecessary duplication of data. Unfortunately for a large organisation that already has a well-developed computer system but has not taken this integrated approach switching is in many cases not a viable option. They will probably continue to struggle with their existing systems for some time to come until they are either bought by or merged with another organisation or they cease to exist.




A Flexible System - The Incremental Approach


The traditional approach to developing a complex computer system has been to put a great deal of effort into specifying beforehand and in precise detail what is required and exactly how it is going to work. These specifications are presented in the form of a document that the business owner or users will be asked to sign before any development work begins. The purpose of this arrangement is to allow the developer to focus his effort on building a system that satisfies the specifications agreed to in the document.


Unfortunately this method presupposes that what is in the document is exactly what the business requires. The problem with this is that what is often delivered although it may meet with the documented specifications is not really what the business needs. When the users or the business owner complain about the end result the developer is able to point to the specification document and quite correctly state that they have done all that was agreed to. Any additional features or adjustments will need to be renegotiated often at a significantly increased cost.


The problem arises from the commonly held view among computer practitioners of the idea that a software system is a product rather than a service (or more correctly a means of delivering a service.) The result is that the whole effort of the software developer is misdirected toward the delivery of a finished product when in fact what the business really needs is a developer that is able to understand its complex, unique and changing needs and modify or enhance its computer systems accordingly.


Successful businesses grow and develop with the passage of time and the availability of additional investment capital may mean that a business can benefit from the enhancement of its computer systems. Furthermore the commercial, legislative and technological environments in which a business operates are subject to on-going change. It is important therefore that if a business is to reap real rewards from their investment in computer systems those systems are structured from the outset in a way that allows for this incremental approach to software development.


Instead of looking to purchase or build a product that will meet its needs the business must change its approach. It must instead begin searching for professional software developers that understand both the incremental approach to software development and the need to supply the business with an on-going service. These professional developers will also understand and fully identify with the business's requirement not to be "locked in" to a single supplier in order to satisfy their future need for software development.




Data Storage - The ER Model


The development of a business computer system is an attempt to create a representation or model within the computer of both the internal processes of the organisation and the way in which that organisation interacts with its environment so that the relevant information can easily be collated and accessed by the users within the business or its customers or suppliers (with appropriate access rights of course!) The better and more elegantly the design of this model fits with the reality of what is happening in practice the easier it will be for future software developers to modify and enhance the system as required.


The computer model used to represent an organisation can be divided into two parts. The first part is known as the entity-relationship (ER) model and is used to represent the structure of the data used by the organisation. (When the ER model is implemented on the computer it is usually referred to as the database.) The second part is known as the object-oriented (OO) model and is used to represent the processes within the organisation and the way these affect the data. (When the OO model is implemented on the computer it is commonly called a program or an application.)


The ER model attempts to identify the entities that a business needs to record information about and the way that these entities are related to each other. Common examples of such entities are customer, supplier, job, sale, invoice, order and product. Each entity is represented in the database by a table containing records (rows) and fields (columns).


The task of designing a database consists of identifying the entities to be modelled and creating the corresponding tables with the appropriate fields. At first glance this appears to be a trivial exercise and in the case of a simple application with few entities it is usually quite straightforward. However as the system becomes more sophisticated with multiple entities interacting in complex relationships the job can become decidedly non-trivial. The skills required to develop an elegant database design in this situation are often developed only after some hard-won years of experience and a careful study of mistakes made along the way.


Once a computer system begins to develop on a database suffering from a poor design it can be very difficult if not impossible to rectify. This leaves future developers with the extra work necessary to allow for and work around the design flaws in any modifications they make and also underscores the value of engaging an experienced database designer at the earliest possible opportunity.




Processing - The OO Model


The object-oriented (OO) model attempts to define the processes within a business in terms of the data that is affected by them. An entity in the database combined with the processes that are specifically related to it are collectively referred to as an object.


For example an entity in the database used to represent a customer becomes a customer object when combined with the various processes we may wish to perform in connection with that specific customer such as displaying their contact details or account details on screen, printing a statement or determining their credit rating. Because these processes are directly linked to the customer object itself it is easy to invoke them whenever they are needed within the system by a simple reference to the customer object.


The OO model will also include objects for which there is no corresponding entity in the database. These objects usually exist only in the computer's memory at the time an application is running so they are often referred to as transient objects. Examples include screens, forms, reports and the data structures used to hold data while it is being processed or moved around the system. (It is worth noting that many processes we wish to model in an organisation are not linked to a single specific entity in the database and unless we think of the organisation or the computer system itself as an object the OO model is deficient.)


As with a database designer the skills of a good OO designer are often developed over a long period of time by experience and a fair amount of trial and error. Usually errors that occur at this level in the design are less far-reaching in their consequences and easier to fix than design errors in the ER model.




Communications - Moving Data Efficiently


Because the data used in a computer system is often located on a machine other than the one the user is working on we need a means of moving data as efficiently as possible between two machines. There are a number of high-level protocols that have been developed to meet this need in various situations including XML, HTTP, SOAP, FTP, POP3 etc. The main consideration in designing these protocols is that they are intended to work between any two programs running on different types of computers with diverse hardware and operating systems.


It is worthwhile to note that these high-level protocols have been designed primarily to allow data to be accessed or manipulated by persons or organisations OTHER THAN THE ONE THAT OWNS THE SYSTEM WHERE THE DATA IS STORED. This is an important point. It is the very fact that these protocols are published protocols (i.e. intended for public use) that gives rise to many of the concerns about security.


These high-level protocols all rely on an underlying protocol known as TCP/IP that allows binary data to be exchanged directly between any two programs running on different computers on either a local area network or the Internet. (The logical connection point at each end of this conversation is called a socket.)


When moving data between computers within an organisation it is both more efficient and more secure to avoid the high-level published protocols in favour of the lower-level TCP/IP protocol. This approach allows the developer to create his own proprietary encrypted binary protocol for all data communication within the organisation and only resort to a published protocol whenever it is necessary to expose data to persons or systems outside the organisation.




Security - Encryption & Authentication


Whenever data is being transferred between two computers on a network there is a risk that it will be intercepted by a third party who will use it in an unauthorised or malicious manner. This risk is significantly lessened if the data is both encrypted and the application sending the data uses a proprietary binary protocol that can be understood only by the application for which the data is intended. A well-designed business application will use these techniques to minimize the chance of this unauthorised use of data occurring.


There is also a risk that what may appear to be an application making an authentic request to access an organisation's data may in fact be coming from what we commonly refer to as a hacker. A well-designed business application will allow an administrator within the organisation to maintain a list of users' names and passwords and will only allow those users that have entered the correct name and password to gain access to the system. It will also record unauthorised access attempts in order to determine if a hacker has been trying to break into the system.




The User Interface - Data Integrity


The data in a computer system is only as reliable as the information entered into it by the user and it is a fact of life that users can and do make mistakes. However there are a number of features that can be incorporated into the design of a business application that can lessen the risk of mistakes by the user and at the same time make the system easier and more enjoyable to use.


Firstly and foremostly the user should not under any circumstances be allowed direct access to the data in the underlying tables of the database. The only way a user should be allowed to manipulate data is through the clearly defined and purpose-built screens of the business application. Unfortunately many of the most readily available and easily understood programming tools are not very good at preventing users from gaining direct access to the underlying data. (Having said that there is some justification for allowing a sophisticated user to use an SQL-based tool to create their own views of the data for reporting purposes.)


Secondly the screens used to view and enter the data should prevent the user from accidentally changing it by forcing them to indicate when they wish to begin editing. If an error is made during this process the user should be given the option of cancelling the changes and reverting back to the original data as it exists in the database. The user should then be required to indicate whether or not they wish to save their changes to the database.


Thirdly the data entry screens should allow the user to move around the controls and enter data without requiring the use of a mouse. Users that are adept with a keyboard often find it a significant irritation when they are forced to move their hands away from the keyboard in order to use the mouse during a repetitive data entry process.




A Public Interface - The HTTP Protocol


Often a business will want to make some of its data available to the public at large through an interface known as the World Wide Web. This term refers to those computers connected to the Internet that provide information using the HTTP protocol. This information is most frequently displayed in a web client application (also known as a web browser.)


In order to ensure that the information presented to the public is as up-to-date as possible and avoid having to replicate or extract the data from the database for use by another HTTP server (also called a web server) it makes good sense for a business application to provide its own web server. This is particularly the case if the organisation wishes to provide a web site where the user can enter data directly into its database.


In a three tier architecture where there is a client application, a server application and a database server the HTTP server can be incorporated directly into the server application so that requests for data can be co-ordinated between the application clients within the organisation and the web clients in use by the public at large. This arrangement will allow data to be cached by the server application if necessary in order to improve response times for the requesting clients.