email irc volunteer Baobab is committed to innovating technologies to change lives in the developing world. Here we will share our innovations and encourage others to get involved.
To get a quick idea about the type of systems we are building watch the video in this post first:
http://www.baobabhealth.org/2007/06/26/patient-registration-video/
Then you can read a little bit about our history:
http://www.baobabhealth.org/2006/08/29/history/
If you are still intrigued go deeper with these links:
http://www.baobabhealth.org/tag/challenges
http://www.baobabhealth.org/tag/developing-countries
Also, notice the “tag cloud” just above this post - click on some words to find out what we are doing. The larger words are the subjects we have been blogging about most. We also recommend subscribing in order to follow all of our projects.
If you want to get involved join the baobab-volunteers mailing list or hang out with us in irc at #baobab on freenode.
August 30th, 2006
A few weeks ago I was asked to meet with a company that is selling a software product for doing hospital management. On first glance the product seemed nice, truckloads of features and modules in a fairly clean layout. But there was something wrong with it, something I couldn’t quite put my finger on. A few weeks and this blog article later, I figured it out - the application is too close to the text editor side of the user interface spectrum.
The text editor is the most powerful computer application that exists. With it you can write a novel that starts a revolution, create a system to organize recipes, write code that can create a different text editor or a new operating system - the possibilities are truly limitless. On the other end of the user interface spectrum would be something like an electric kettle. You pour water in it, you press a button and it brings water to a boil before turning itself off. If you were really creative you might manage to cook soup in it, but you wouldn’t do this because it would probably ruin all subsequent attempts to boil water. The electric kettle does one thing only, it requires very little training and it performs it’s task to perfection.

I think all user interfaces land somewhere on the spectrum between text editors and kettles, and the goals of an application should dictate where on the that spectrum the application should land. Problems occur when an application lands on the wrong part of the spectrum.
I think this is the problem with the application I saw yesterday. Lets call it “boxware”, because it had a lot of boxes. In fact boxware had boxes everywhere, and each box more or less represented a new feature, even if it was just a box. Let me explain. After clicking on the patient registration icon a screen pops up with a lot of little boxes, one for last name, first name, address, city, phone number, and so on. There is also a box with three tabs in it, patient history, family history, other history. Almost any kind of data you would want to capture has a box for it, and if you don’t see it, then the required box is probably behind a tab or another icon.
Interfaces like this are common, and for good reason. This kind of user interface is the path of least resistance for software developers. Any new feature simply requires a new box, which is created by drawing a new box into the software development tool. The new box gets labeled “surgery management”, which is usually enough for the decision maker to tick off “surgery module” from their required feature list. When this happens, the software developer wins and the decision maker is pleased at having found a system that matches their requirements. Unfortunately the users and in this case, the patients are the losers. Just because a bunch of labels on boxes happen to correspond to some important activities, there is absolutely no guarantee the boxes will be used for the intended purpose. I can count a dozen different repurposed boxes and containers on my desk alone. If only I knew what was in them!
I have seen many boxwares, and they often have a common origin: a single person uses MS Access (or Foxpro, or whatever) to computerize a process. Often the end user and the developer are one and the same. Adding features is easy (just add a box, or a database column or a tab) and before long the system is fully featured and easy for the user/developer to use.
If the system is useful, then other people want to use the system. This is a nice problem that gets solved with…training! But soon, the developer notices that users keep using the system in a way that was totally unexpected. Time for another training session…
But there is another approach that doesn’t rely on training. They are called constraints.
Let’s think about the constraints of kettles and text editors. An electric kettle is constrained to heat liquids and is either off or on - not much training required. A text editor requires dozens of keys and key combinations just to do it’s primary function of editing text. It doesn’t constrain the user at all, and if you have ever taught an absolute novice how to use Microsoft Word (think grandma, or a nurse in a rural health clinic in Africa) then you know that training is not easy. Lack of constraints are even more apparent when people use text editors to model the more complex human processes of organization or collaboration.
The amount of training required is usually inversely proportional to the number of constraints in the system.

Constraints do two things, they filter garbage and they guide processes.
For example, an application may allow you to enter a weight value for a patient. A simple box will do just fine. But a user could type in No (”Why would I want to wait?”). Or they could type in 2 (is that pounds or kilograms?). Or they could simply not click on the box at all (whether a user knows how to use mice or keyboards is beyond the scope of this article).
Constraints can put ranges on what is allowed in the box - anything outside of that range will get rejected. So we could say that all patients must weigh between 2 and 300 (and make it explicit that we are talking about kilograms). But constraints can be even more clever. If we know what the patient’s age is, we can narrow that band or even better, if we know what they weighed a month ago, then we can assume that their weight is plus or minus 10% of their last weight. If the user entered something that is outside of that range they will immediately be warned or perhaps even stopped. Maybe they typed in an extra 2, or they were entering data for the wrong patient, or they were reading pounds instead of kgs. Range constraints can catch that, they filter garbage.
Besides data validation (garbage filtration), constraints can also guide processes. Process guidance is a powerful way to move your application towards the appliance end of the spectrum. Instead of having a bunch of boxes that can be clicked on in any random order, an application can hold the hand (or mouse) of a user and guide them step by step through the process. One question gets asked at a time, in a specific order that matches how the user thinks or acts. This is the wizard approach that Microsoft has successfully used to help people navigate complex processes like setting up networks. And like data validation constraints, with a little bit of logic, the step by step wizard approach can add extra cleverness as well. For example, if you have a question that asks if the patient is pregnant, you could first make sure that their sex and age are asked. If the patient is a 60 year old man, you can then automatically skip the pregnancy question - this makes filling in the form easier and faster. But wait! We can do even better! Since sex is a critical piece of data to know, you can make sure that the user can enter no other data until the patient’s sex is known.
If you are creating an application that will be used by a lot of different people to do very specific things, then range contraints and process constraints are important tools to make users happy. They empower them without needing training and usually speed processes up. If we are talking about first time computer users capturing life or death information in Africa, then constraints are critical.
So next time you are evaluating software pay attention to the user interface - not just how pretty it is - but what it actually does. How does it guide the user? How does it ensure quality data? Who will it make happy? Is it a text editor or an electric kettle?
February 9th, 2008
hiv projects ruby on rails touchscreen touchscreen toolkit video This video shows how our system guides health care workers through HIV treatment protocols. After logging in, we scan a patient’s barcode, see their ‘patient dashboard’, then answer some questions and dispense the drugs.
The system uses Ruby on Rails, mysql and the touchscreen toolkit to deliver all of the functionality via a web browser running in full screen mode on a touchscreen computer.
October 3rd, 2007
developing countries hardware history open source presentation ruby on rails touchscreen volunteer Mike McKay recently took Baobab on the road, after being invited to speak at RailsConf Europe. He went and told the Ruby on Rails world about how rails is helping to fight HIV in Africa. He brought to life the HIV epidemic and showed how healthcare workers are being guided through treatment protocols and getting decision support from the data in realtime. Check out the slides from “Africa On Rails” for more information.
September 28th, 2007
challenges ruby on rails software video Here are some videos of Baobabers explaining how they feel about developing software in Ruby on Rails.
September 27th, 2007
video malawi Baobab is proud to have such a fantastic team in Malawi. This video introduces you to some of the members of Baobab talking about what they do.
(Cast in order of appearance: Soyapi Mumba, Joel Chisenga, Dezio, and Oliver Gadabu.)
September 23rd, 2007
appliance hardware touchscreen video Over the past 5 years, our patient registration system has registered almost half a million people. Before the Baobab system was introduced, the patient queue used to stretch out into the parking lot as each person had to fill a paper form that took about 15 minutes to complete and process. Our touchscreen based system dropped the registration time down to under a minute for new patients, and less than 10 seconds for returning patients.
This video shows a new patient being registered. First his name is entered, then his birthdate. There is some confusion over his birthyear, because he says it is “206″. The system doesn’t allow this date to be entered, and eventually he corrects it to 1976. It then asks about where he was born and where he currently lives. Then a barcode with a nationally unique ID number which can be scanned on his next visit is printed out. Finally his final destination at the hospital is recorded.
The next patient already has a barcode on her health passport. It gets scanned, her destination is recorded and she is finished.
There is on more interesting story about this video. Gem is the name of the system user in the video. He was originally a janitor in the children’s pediatric ward. He swept the floors, and cleaned up the constant messes. When Baobab first installed their patient registration system in the ward it was to be used only by nurses. But nurses often take breaks even though patients continue to arrive. So during lunch, Gem would put down his mop and register patients. It didn’t matter that he had never even seen a computer before in his life - he was able to read the screen and that was enough to register the patients. Gem now heads up patient registration at the central hospital, and has probably registered more than 200,000 patients all on his own.
June 26th, 2007
One of the parts of our system that we are most proud of is the touchscreen toolkit. It takes a simple web page and converts into a touchscreen friendly application. There is more information about it here.
Click here to see how our HIV antiretroviral system captures a patient’s height and weight. This is even better than a screenshot because you can play with it!
(no guarantees that it works under IE, only Opera and Firefox are officially supported)
March 23rd, 2007
baobab linux opera touchscreen toolkit Thanks to the very helpful and encouraging team at Opera - we have just done our first press release. Enjoy!
Opera and Baobab Health Partnership today joined forces to provide innovative technology solutions to help combat HIV in developing countries. Baobab, using the Opera browser, has produced a healthcare system that allows health workers to administer high quality HIV treatment programs according to World Health Organization guidelines. The system is currently deployed in Malawi, a country in the midst of an HIV crisis.
“There are 40 million people living with HIV on our planet, we need solutions, and we need them fast if we are going to have an impact on this crisis,” said Gerry Douglas, Founder, Baobab Health Partnership. “Using Opera means we can rely on international standards like HTML and JavaScript without requiring expensive hardware. By building our system for the browser it can be easily scaled up across an entire country, and perhaps an entire continent.”
The Baobab solution is a slimmed-down touchscreen computer running Linux and Opera. Baobab uses Opera because it conserves limited system resources while being able to run a user interface so simple that people who have never operated a computer before can use it to provide quality health care treatment.
“The reason many of us find working in technology so worthwhile is seeing projects like this become reality,” said Håkon Wium Lie, CTO, Opera. “We’re excited that Baobab chose Opera to make a difference in the ongoing fight against HIV in Africa. This is a first step towards using Opera to power the projects that promote progress in the developing world.”
(more…)
March 22nd, 2007
openmrs software Well, I just spent a good few hours pouring over some code and finally found the problem. Composite Keys. In OpenMRS there are 12 tables that use composite primary keys. I think we have mentioned that this is easily handled in rails using the composite_keys gem and set_primary_keys function in the respective models. What I didn’t know is that things get a little wacky when you try to clone an ActiveRecord object that has composite keys.
p = PatientIdentifer.new
p.patient_id = 2
new_patient = p.clone
new_patient.patient_id = 3
NoMethodError: undefined method `patient_id=' ...
The clone method in ActiveRecord actually deletes the primary key from the list of attributes. This way if you save it, it will act like a new record. Of course when there are multiple primary keys and they are not autoincrementing this is a problem, because you can’t set them and can’t save the clone. Ever. What is needed is an alternate clone function when the model is composite. So I hacked this together and threw it in our OpenMRS model that is the basis of all our ActiveRecord models in this application.
# cloning when there are composite primary keys
# will delete all of the key attributes, we don't want that
def composite_clone
if composite?
attrs = self.attributes_before_type_cast
self.class.new do |record|
record.send :instance_variable_set, '@attributes', attrs
end
else
clone
end
end
Now, ideally this would go into a module and I would use alias_method and map clone to orig_clone, then override the actual clone method. But let me just tell you that doesn’t work. Or didn’t work. Something to do with order of operations or some such. If you can get that working please comment.
March 20th, 2007
Previous Posts
Paypal a donation
Why donate?
About Baobab
email irc volunteer
Malawi, Africa has a population of 14 million. One million are HIV positive and there are just 280 doctors in the country. This tremendous disparity between healthcare workers and people in need of treatment contributes to high mortality rates particularly for women and children. Treatment protocols exist that do not require physician expertise. These protocols can ensure a minimum standard of care, but to be effective they must be rigorously followed and carefully monitored.
Baobab Health, a Malawi-based non governmental organization, has been addressing this crisis for the past eight years by applying medical informatics principles to resource-poor settings. The core of Baobab’s approach is the application of easy-to-use touchscreen clinical workstations at the point of patient care. This system efficiently and accurately guides low-skilled healthcare workers through the diagnosis and treatment of patients according to national protocols. The system also captures timely and accurate data that is used by healthcare workers during patient visits to supplement decision making. The data is aggregated and used at a national level for policy making and analysis. This technology-dependent approach has required both hardware and software innovations, including alternative energy approaches, intuitive touchscreen-based user interfaces for users with no computing experience, and low-cost information appliances that are significantly more robust in harsh environments than traditional computers. To date more than 800,000 patients havebeen registered and over 18,000 receive HIV care facilitated by a Baobab system.
Our Vision
To be a world leader in technology innovation for the developing world.
Our Mission
To provide eHealth solutions to the Ministry of Health and other health care providers that solve the health care crisis in Malawi. We will provide technology leadership and best practices by innovating on our existing solutions in Malawi and incubating new initiatives. Our systems will be intuitive to use, scalable to deploy, and low in cost.
Our Values
Baobab believes strongly in Malawians’ abilities to solve their own problems, and is committed to hiring, training and developing local staff. We expect hard work from all of our staff while nurturing an environment of teamwork and fun. Baobab has a demonstrated long term commitment to Malawi, with the founders committed to at least 20 more years of direct service to the country.
More
Links
Feeds