Contact management: it may sound a bit boring, but it is something near and dear to my heart. Well, maybe not so dear but nevertheless important, and something that has taken up quite a bit of my time. I have now developed and operated 4 contact management applications.
I’ve been involved with an organisation, the Tibetan Buddhist Society, since its inception. We started to build up a contact list back in 1982. By the end of that year we had about 800 names and addresses, and we wanted to send them each a newsletter. Personal computing had barely arrived on the scene, so we decided to outsource. A friend had an Apple II and had written some software that would print computer labels. So thus began our long involvement with computer based contact management software.
In 1984 I was studying computer science and had bought a Z80 based micro-computer. With a 3rd part ISAM file management library and developing with Turbo Pascal, I wrote the Tibetan Buddhist Society’s first in-house contact management application. By 1990 there had been major advances personal computing. Z80s were a thing of the past. It was time for a new contact manager. The second system was build on an Apple Macintosh with a data management / development environment called Hypercard. At the time Hypercard was a much feted radical new software system.
The needs of the Tibetan Buddhist Society were evolving. It was now no longer sufficient to be able to print out the full list of addresses: we wanted to be able to send mail outs to targeted recipients. The Hypercard application I had built was not up to the job, so in 1996 a new system was developed using Microsoft’s Access, coded in Visual Basic for Applications. This sytem allowed us to categorise recipients, and then, based on queries, print out lists of laser labels. The demands of our public relations / marketing people continued to evolve. Over time we identified different categories of contacts, and also additional data fields. These evolving changes often required database changes, and invariably new and changed code.
About 3 years ago I started work on the current contact management application. The design goals for the new system were:
The business requirements were:
-
Unlimited ability to categorise contacts. Examples of contact categories might be Male/Female or Individual/Organisation. We needed to be able to create new contacts as and when we needed.
-
Unlimited ability to support custom fields. Custom fields are additional to standard fields such as name, address and so forth. We needed to be able to add new custom fields at any time.
-
We needed to be able to query – or subset – our list based on both categories and values in standard and custom fields.
-
To be unconstrained in the types of queries we needed to develop. For example, we might want to do an email out to all gardening groups in the state of Victoria for whom we have an email address, and who are interested in roses. Relying just on categories clearly would not be sufficient.
-
To be able to develop new queries quickly, without having to change a line of code.
-
To be able to scale to handle very large contact lists comprising tens of thousands of recipients.
-
To be able to send email broadcasts to targeted lists of recipients.
-
To be able to send SMS broadcasts to targeted lists of recipients.
-
To be able to perform high volume message broadcasts, to thousands of recipients.
I investigated a number of 3rd party applications to find one that would meet our needs. I could fine none. I found CRM applications that were good at recording details about contacts, but had poor email and SMS integration. I could not find any application that met our need to be able to develop rich queries without writing code such as SQL.
So I decided to build contact manager number four. Thinking that the Tibetan Buddhist Society’s needs were not unique, I built a system which anyone can now download. If you are interested, check out www.arcsend.com. In subsequent entries I’ll discuss the application architecture and the basic technologies. I’ll also drill down into technical issues I encountered, and how I dealt with them.