GeoMetrick Enterprises
Documentation & Reverse Engineering
by Gloria Metrick

Published in Scientific Computing and Automation*, Issue 12 Vol. 14; (*Now named Scientific Computing and Instrumentation).
Reprinted with permission.


Documentation is important – you need it. There, that was easy, wasn’t it?

Seriously, though, most of us will agree that it is important to have a well-documented system. Why, then, are the people that have to maintain these systems frequently disappointed in the documentation available? Vendor-supplied documentation aside (since the project team has little direct control over it), because: Up-front, each project team should define for their project what is meant by “well-documented.” No matter what intention a project has of providing or creating specific documents, it sometimes does not happen. Early in the project, it is important to be realistic about how much time can and will be spent on it. Prioritizing the documents needed can help to make sure that the most important documents are identified. The negative effect of this, though, is that documents lower on the list may be ignored since they have a lower priority, but having a lower priority does not necessarily mean that a particular document is not absolutely necessary to the project. Before you start writing your documents, spend time discussing where to put them, who will maintain them and how they should be maintained. Deciding this up-front, makes it easier to manage later when you do not have the time to figure it out.

Another method for finishing the documentation is just to do it. No one likes to do it. Just about every other task on the project is more interesting than writing the documents (liken this to how much more exciting it is to do your research over writing the paper about it for publication that you will put off as long as you can).

We are often pressured to skip over the documentation for the time-being in order to do “more important” work but, of course, we rarely get a chance to do it later if we do not do it as part of the task it concerns. Outside factors do not always see the value of the documentation and will often pressure those involved to skip it and will reward accordingly. So, why should you care about documentation?

If you are an I.S. person, because: If you are a user, because: If you are a manager that just needs to get the darn project finished right away, because: Everyone should care, because: Following are a few documents that might be relevant to a project (if the implementation project involves writing code, most of these documents will be relevant): SOPs around common functions such as data entry. For example, once the team has decided how to name their methods within the LIMS and which LIMS fields should be filled in, it is common to create a brief document (often less than one-page) that lists these items. Then, new people can jump in more quickly and the topic does not have to be discussed every time a new method needs to be added. Here is a common scenario — a project had a person who was absolutely fantastic because when the user called to get something done, that person just did it without hesitation. The reason it got done so fast was that it was never documented anywhere. The customer will go on about how wonderful that person was, but they were then “downsized/outsourced/disgusted and found a new job/hit by a bus/ -insert your own reason here- .” Now, Mr. or Ms. Fantastic is gone and no one else knows how to change the system and there is either no documentation or the documentation is too out-of-date to be useful.

The real answer to this common dilemma is to not let yourself get into this situation. Make sure everyone involved understands the importance of keeping the documentation up-to-date and find some way to motivate them to do it (Note: One project leader motivated a team I was on to keep our documentation up-to-date by letting us know that if we did, we got to keep our jobs; more than just verbal support, though, time was put in our schedules to do it).

For those who have never documented their system, start now. The next time you have to figure out a section of the system, document it. The entire system will probably never be documented, but at least you will be closer than you are, now. You will also not have to keep figuring out the same piece of the system over and over again each time you need to work on it.

Reverse-Engineering
For the project that has let its documentation lapse and no longer has personnel around that remember all the hairy details of what was done for the project, there usually comes a time when a change needs to be made or a bug fixed but it is difficult or impossible for a new resource to figure out what to do. This is often when a decision is made, either to start a new LIMS project and dump the current system, or to reverse-engineer it.

Reverse-engineering means to take something that you have little or no information about, and figure out how it works. It can be a time-consuming and expensive process, but is usually cheaper than starting a new project and can typically be accomplished in a shorter amount of time.

The decision to dump the system or to reverse-engineer it is unique to each project. Following are some points that can influence the decision.

A few reasons for reverse-engineering: A few reasons for starting a new project: For those who have never documented their system, start now. The next time you have to figure out a section of the system, document it. The entire system will probably never be documented, but at least you will be closer than you are, now. You will also not have to keep figuring out the same piece of the system over and over again each time you need to work on it.

Cost depends on some of these factors. The more scattered the pieces are, the more languages used to write modifications, the more missing pieces, the larger the overall size and complexity of the system, the more expensive it will likely be. Time (and therefore, cost) varies from project to project just as it would for the initial implementation.

My smallest project of this sort will take just a few days. On the other extreme, I had worked on a multi-site, homegrown manufacturing system that was written in four different programming languages, had missing pieces (all of which were eventually found) and involved over one hundred separate code modules. This system took months to piece together and document. Although this is a manufacturing example, substitute a large, homegrown, multi-site LIMS, and you will get the idea. “Months” seems like a long time for this activity until you consider how long a new project would take (definitely not “months”). Along with that, the users liked their system a lot and no one could come up with any other compelling reason to start from scratch.

Sometimes, though, regardless of any of these factors, reverse-engineering is not possible because those involved find the situation too embarrassing to admit to an outsider. Just consider this before starting a new project – if the original system is impossible to support and maintain because it was not properly documented, why will the next project turn out any better? This should not change your mind about starting a new project, necessarily, just get you thinking about how to do things differently for the next project.


© GeoMetrick Enterprises 2006
Web Development — TMB Creative Services