It was an interesting job because they are in a spot in the
industry different from most I am familiar with. Most tech companies
upgrade every few years to the newest, fastest, and sexiest
hardware. Omnicell's core system software, written in Foxpro, is based
on the same code they first used over 20 years ago. For hospital
applications, reliability is the first, second, and third
priority. Changing hardware or updating the software would require
huge amounts of testing, and there would still be the risk that a bug
could damage their reputation, or even worse cause a death. The basic
application itself is relatively simple, but the complexity comes in
because as a hospital system, reliability is literally vital. Downtime
is not allowed even if communications are lost, so updating and
keeping all the databases in sync is a tricky problem.
Omnicell is well established in the US and Europe, where they
describe themseves as the "Ferrari of the industry": expensive, maybe,
but the best. The markets they are in are pretty well saturated, and
they have recognized that China is preparing to make a large
investment in the health industry. Their code was internationalized
several years ago when they entered the European markets, but they
neglected to add double-byte support required for Asian languages.
That would not have been too big a problem except for the fact
that their server is in Foxpro, which does not support Unicode. The
client, written in C++ and C#, was not too difficult, but getting
Foxpro to talk nicely with SQL and C++ was more challenging. Finding
people with much experience in Foxpro was a challenge too.
When I made my original proposal I estimated about 3-4 months,
depending on investigations we would make in the first few weeks. One
of the guys who did the European port later told me he wouldn't touch
it for less than a year. Later, after we finished it on time, our
manager at Omnicell told us they had counted on 6-9 months. Our team
consisted of 3 senior developers, one Foxpro, one C++, and me as the
technical lead and filling in wherever needed (which was,
unfortunately, usually Foxpro). Ther also were a testing manager, and
The project leader's motto for the project was "You only get one
chance to make a good first impression". Omnicell was an ideal client
to work for. They respected the difficulty of what we were doing, and
valued it very highly. As a result, they provided all the support and
training required, and did it without micromanaging or requiring
anything more than short weekly meetings, which usually consisted of
them asking us if we needed anything.
The project was completed on time, successfully: we provided full
agreed-upon support for the client and server, as well as other
reports and alerts that it provided. We actually were finished a full
month ahead of time, but lost the extra time because I listened to
their build people when they told us the build process was "too
difficult". When I finally realized I needed to dig in and fix it
myself rather than rely on support it took a couple days to finish the
build process and turn over the completed code.
The customer was very happy with our work - happy enough so that
when the project finished they signed a new contract keeping on our
entire team, working with their central development group in the US.
Unfortunately, because of the complexity of their software and the
organization of the development group, it was too difficult to
coordinate work between the US and China development groups, so when
the first contract lapsed they did not re-sign.
Omnicell describes their product as an "ATM for drugs". It is a computer-controlled cabinet that holds and controls hospital inventory, including drugs and other small items. They build their own hardware cabinets, each of which is attached to a PC which runs their application and communicates with the central server. Records can be kept for each patient, reminding nurses when prescriptions are to be given, and making sure the right doses are given to the right patients. The savings to the hospital include not just better inventory control and billing records, but also the extra safety check that the correct drugs and dosages are given to the right person at the right time.