# CACS/User Conundrum

Wiki Note
This note will be removed later. The entire essay may become a secion within an Introduction Chapter. Or, it might remain here and just have an assigned reading on the introduction. Please use the Talk page for this entry for additional discussion. Thanks. LouI

# The Myth of the User

There are several terms widely used in the computer industry that are not clearly defined. The result is that everyone understands them and uses them, but the use may tend to complicate rather than illuminate a discussion. This outline looks just two of these terms in the context of an application within a fairly large corporation. Then it draws some conclusions about the impact of context on the use of terminology.
Consider the terms User and Application. The User is defined as the person who uses a computer. The Platform is the hardware or software that supports an application or a system. The suggested application is one of monitoring and use of a particular resource pool across an area of the company.

## The Application

Project and unit managers share a common resource pool. They budget and track the use of the pool in their area. They use a series of spreadsheets that show their planned vs. actual use of many resources. The data is extracted for their status reports. The data is also uploaded through the company's networks for use in other summaries of the effective use of the resource pool. These support the manager and planning staff that are responsible for the pool.
To make this work, a set of spreadsheet macros are in place to ensure data validity and consistency. These templates are put in place by the corporate IT staff. The end-user needs to record their work results, using the spreadsheets by an arbitrary cutoff time on Friday.

## The Software Hierarchy

Now consider the hierarchy of software engineering that puts this application in place.
* The Spreadsheet application has a programming team that work for the software vendor. They assume an Intel Pentium running Windows NT as their platform. They produce a set of software that integrates the work of the Visual Basic for Applications team with the next release of the operating system software and their own code (written in C++) to produce a working application.
* The vendors packaging team puts this together with the other desktop embedded applications to produce an integrated version or release of the composite operating system.
* The corporate IT department takes this software, along with the company standard network, Operating System,, and desktop applications as their platform. They add the VBA macros with upload and reporting utilities that will make the aggregate set of applications work. Then they lock the results to ensure that no bad input comes from the end-users. They deliver their work to the system administrators.
* The system administrators in each division install the results. Some of these are on department servers, and some on individual desktops. The entire assembled application is their platform, and the desktops of the affected staff the target domain for their work.
* The individual manager now uses the entire work product as a seamless platform to do their work.
The example could be extended further. The extensions in Step 3 could be produced by an outside Value Added Reseller to produce a resource planning system. Step 1 could look into the earlier history in Hardware for PC Configuration, BIOS, Operating Systems, The C++ compiler, etc. But these 5 layers are quite complex enough to illustrate the terminology problems.
For those who are have never worked in this situation, this is NOT an uncommon example. Millions of people work in this environment every day at your bank, your university, or the manufacturer of your automobile.

## The Confusion

The above example is fine when it works. But, what about when it fails? As the end-user, I've got a problem in my spreadsheet, and an error message. I find something from the 1st level, the User's Guide, and try to find a solution. But it is a hopeless quest. I can't use most of the options they discuss. I can't even inspect the VBA code that the guide says my error message comes from. The usually helpful System Admin who put this new update on my desk is equally puzzled, and other users haven't reported a problem. So, what went wrong?
Every layer in the hierarchy has their own viewpoint. Everything in the layers above them is viewed as a Platform and constitutes a given. Every participant in the layers below them is the User and is considered with the same monolithic view.
In some cases, the monolithic view is correct, but even then it is usually distorted. When I buy a new PC for home use, I have the seemingly unfiltered copy of the spreadsheet. But even here, the software was preinstalled by the people I bought the PC from. They chose certain options left by the 1st level spreadsheet team to make the installed software work with this particular configuration. Certain other options may be precluded by their choices.
A really good practitioner working in the hierarchy will be partially aware one layer above and below their own level. They can influence the layer above them, through user groups or other methods. They can consider the needs of those one layer below them, and improve their product and documentation to help out, but only as limited by budgets and competitive factors.

## Conclusions

If you begin to understand the problem, then Welcome to the world of Computers!. But you can also understand how many niches in this world open opportunities for integrators and vendors. How a Peoplesoft vendor can package and sell an integrated solution for a business function. How a high-powered consulting firm can charge high prices to help corporate management try to cope. Why the industry keeps looking for something like an XML magic wand to make it fit together.
And most of all, how some kind of mental framework is needed before you can see how the pieces fit together. This kind of a framework is called an Architecture, and several of them are needed to see how the pieces fit together.