![]() |
![]() |
Project ConsultingWhen you want it done right the first time!
Information analysis and schema design.
Call me any time at +1.902.445.0711. I am always curious to hear what issues people are facing. I can act as your part time remote technical staff on an as needed basis. I am also open to an interesting full time engagement at a very reasonable rate. If it looks like I can be of assistance we can coordinate small projects over the phone and by email. For larger projects it may be helpful to meet in person and to spend some time together during the analysis and design phases. The coding phase can happen either at your location or at my home office depending on the circumstances. Medium to large projects sometimes call for a little more methodology than small "just do it" coding jobs. Here are a few of the skills that I can bring to the table when required. Information AnalysisDiscovering the underlying structure of an information system is like splitting a diamond. If you get it right, the database schema models the actual information structure (reality) precisely. The result is clear, accurate and easy to code. Just as important, it will adjust gracefully to new requirements.Get the database structure wrong and you end up compensating by writing more convoluted application code. This makes the schema and the application code brittle and difficult to adapt to changing requirements. Sometimes the information analysis phase can be performed by examining an existing schema or reading a requirements document. Other times it may be necessary to interview the actual application end users out in the trenches in order to see the data content and work flow. Schema DesignEven with an accurate model of the underlying data structure the design of the actual database schema is a subtle task where years of experience can pay off with simpler schemas that run faster. Generality can often buy simplicity. For example, most databases use codes to represent discrete field value choices, such as assigning a code to represent each country. The short code value goes into the database field while the associated code description is displayed to the users. The country code value "fr" may be displayed as "France". The day of week code value of "1" may be displayed as "Monday". One straightforward approach to implementing code sets is to create multiple database schema tables, each of which holds the code and description data for a single code set. Then the programmer writes a code set administration page for each database code table to allow additions and changes to the codes and their descriptions. With this structure, adding another code set necessitates adding another database table and another code maintenance screen. Pretty soon we have a lot of application code devoted to manipulating and retrieving the various code sets and their descriptions. A more nuanced approach is to create a single universal code table which holds all of the code values and descriptions for all of the code sets in the entire database. Each code record is tagged with the code set that it belongs to. A single code administration page keeps all code sets up to date, simplifying the schema and the application code. See the BabelKit library for a multilanguage implementation of a universal code table. Abstraction LibrariesThe key to clean, compact, testable, correct and flexible applications is in the design and implementation of suitable abstraction libraries.Even with an excellent schema design it is possible to end up with a bloated, buggy, untestable and fragile application. This is often the result of application code that directly queries and manipulates the database schema using SQL statements rather than through library calls. For example one often finds repeated blocks of code that have been cut and pasted and then perhaps slightly edited and sprinkled around the application source code. If there is a bug, it needs to be tracked down and squashed wherever that code has been copied, but without introducing new bugs in the process. If there is a change in functionality or structure, that change needs to be replicated to each of the copied code blocks to the extent that it is possible to identify them. A good set of abstraction libraries will eliminate replicated blocks of identical or similar code. This reduces the application code size and its associated bug count. Abstraction libraries lend themselves to easy testing because you are testing a pure isolated function rather than a function embedded in a lot of application code logic. They also give the application great flexibility because changes can be made at in single place and tested once. Often the underlying implementation can be completely restructured by way of a library rewrite that leaves the application code untouched and still bug free. Here is an example of an abstraction library API, and an overview of what it does. Application ProgrammingA excellent database design and a clean abstraction library is useless without a good user interface and the associated application functionality such as reports, document generation and connectivity with other database systems.I have many years of experience in bringing large complex applications to completion. Many of my projects have been large department wide automation initiatives with hundreds of users. Good examples of this are the California Supreme and Appellate Courts, the Massachusetts Department of Industrial Accidents, the Vermont Department of Labor and Industry, the Massachusetts Superior and Supreme Courts and many others. If you are facing a large, complex, or "interesting" project be sure to consider my involvement. Or if you simply need high quality programming services let me know. DocumentationConsidered by some to be of little interest, I take pleasure and pride in writing excellent technical and user level documentation. Comprehensive internal technical documentation of schema semantics and abstraction libraries are crucial for the long term viability and maintainability of any application.New programmers coming on to a project, or anyone returning to a project for maintenance or upgrade work need access to all of the structure, details, and clues that seemed so clear and obvious to the original programming team. I make it my business to capture them while they are still obvious. Here is a sample of my technical documentation. Tool DesignOne of my passions is to write useful and generalized tools for reuse by others. If a generally useful tool can be abstracted out of a project I am sure to do that.One good example is the XMLSong XML generator. My client was struggling to complete programs to write database content to many syndication customers in XML format. Each syndication customer had its own custom content needs so each one needed a somewhat different XML output program. It was a very labor intensive, error prone and fragile process. Almost every run contained errors or invalid XML. The customers were *not* happy. I wrote a single program which reads the DTD for each client and automatically emits the exact correct XML for that DTD. Change the DTD and the XML again matches perfectly. After that a single part time programmer kept 50 syndication clients happy with hundreds of gigabytes of letter perfect customized XML content.
Check out my open source projects
page for some more example of tool design and programming.
Home | Project Consulting | Open Source Projects | Resume | Contact Me Copyright 2002, 2003 WebbySoft Ltd, All Rights Reserved |
||