Social Expectations Perspective: Jumia – African Company or Not

This is the hottest topic right now with valid arguments on both sides of the equation, so here is my unsolicited opinion.

What we can agree on is Jumia calling itself African is to look exotic, different to be able to raise its valuation hence more money to the shareholders. Arguments that this is a good thing, raises the visibility and opportunity for African based startups (this is like a client giving you a bad deal promising more work – never happens), opens more FDI money (never to happen) are all hope that it works out, with the proponents being the same to say bad publicity is better than no publicity at all.

Now that we have gotten that out that out of the way, what makes a company “African”. To answer this question, one needs to look around at the social structure which drives the expectations. Let me use an analogy here, many of us Africans who live in the urban areas have connections to our “villages” or ancestral birthplaces, and there is an expectation to send help back to support what happens there. Infact when many an influential person has died, and the murmur at the burial is what squalor they are buried in for the afterlife forgetting where they came from.

The expectation is that as you grow in the world, you do not forget where you came from and bring the “village community” along so that they too benefit from your success, which benefits others in the “village community”

So back to Jumia, which is an example of a rich person who comes to a community, builds a sprawling mansion, does not live in it, then goes ahead to sell themselves as a pillar of the community, yet all the support they give to the community is low wage menial unproductive labor.

Is the aim of the business to “only” make boatloads of cash or to profitably solve an problem/challenge while having a positive impact on society?

Over to you folks  looking forward to hearing your thoughts and opinions too

UPDATE: These expectations are also being raised by the EU/USA over the large multinationals like Amazon, Apple, Google, Microsoft etc which incorporate in tax havens, leverage loopholes and pay no “taxes” in countries where they sell services and make revenues.

 

Advertisements

In Praise and the Pitfalls of Personal Processes

This blog post is a reminder to myself, that I need to follow the personal practices that I have setup for myself as well as laugh at a mishap I had over the weekend. This is an analysis of a set of cascading failures just like dominoes that almost ruined a work field trip, lengthening travel time from an 8 hour road trip to over 12 hours.

The backstory is I am an Wikipedia – ENTJ via Myers Briggs, an Wikipedia – Aires (the first fire sign in the Zodiac), with sufficient twist of hyperactivity and vey easily distracted, as I love shiny things so jump from one thing to another.

For this field trip, as part of my organization, I had the stationery and projector with me, wow well organized (so I thought) and was preparing for a Sunday morning 9.30am meeting at the rendezvous point. My usual practice is to prepare everything the evening before, keep things in very specific locations so that I only have to rely on muscle memory

Mistake #1: Not moving the field trip materials to the car on Saturday evening, but having them very well arranged in the sitting room

Mistake #2: Not packing my bags the night before, since oh well, this should be easy.

Mistake #3: Not charging my laptop to 100%, as I always do before a trip (8 hours long)

Come Sunday morning, I overslept, waking up at 7.30am in a panic, started to pack my bags in a hurry, with help from my wife – whom I was rushing but whose demeanor and style is not to hurry. So at 9am, I was all packed an ready (but running behind schedule) with a 1hour drive to the meeting point.

Arrived at the meeting point at 10am, but the transporters were running behind schedule too. So well, took the time to unwind and cool down from the morning rush. And well since they were late, I checked on my latop which was not fully charged and plugged it into the socket.

At 11am, the drivers arrived, and awesome, I unplugged my laptop, and placed the charger in my bag (hey I tend to leave it all over the place). When I walked to the car to validate the travel arrangements, it hit me that I had forgotten the stationery and projector at home, so panic again – fortunately it was on our route to Jinja (80km and about 75min drive), so a slight detour. But to ensure that we lost no time, we had to leave before everyone else to make up the lost time.

Everything went smooth, however I also resisted the urge to open my bag and watch a movie on the latop since we had all the time in the world. Here I was feeling very accomplished, when at the first stop in Jinja town we got a call that I had left my laptop in Kampala. BOOM!!!

Panic again, and a moment of truth, go back for the latop or get it to me in Jinja. Well I did the latter, and after a call to an available trusted boda guy, the wait began as he flew all the way to Jinja, and about 75 min later we were on our way.

What lessons do I take from this?

  1. Dr Charles B. Mukasa “Whenever you depart from established practice, you will spend 10x the effort and 10x the time”. A reminder not to depart from practices that I have set for myself
  2. A little discomfort however tired you are, especially when you are very tired, is to ensure that all is lined up to match your personal practices as this is the native subconcious memory
  3. Keep good relationships with the boda boda drivers, and have a couple of trusted ones whom you can leverage for such errands
  4. Laugh at your misfortunes, as this makes them all the less painful

Fortunately, I have settled into the field training and now back in rythmn

My Road Usage Code of Conduct

Code of Conduct (CoC) – “Principles, values, standards, or rules of behaviour that guide the decisions, procedures and systems of an individual in a way that (a) contributes to the welfare of my key stakeholders (my family and country), and (b) respects the rights of all road users affected by my usage.” My definition paraphrased from Wikipedia extract of International Federation of Accountants, 2007 International Good Practice Guidance, “Defining and Developing an Effective Code of Conduct for Organizations”.

Why a personal code of conduct, yet there is the Traffic and Road Safety Act 1998, that governs road usage. Over the 6 weeks, I have been spending an average of 2.5 hours on the road in 2019, and my engineering mind feels a need to derive some structure to my decision-making process on the road, which by public declaration means I can be held accountable. There is a lot of craziness, madness and road rage exhibited by all of us on the road, so I am trying to be the change I want to see in the world

My CoC captures the “spirit” of my use of the road, irrespective of what everyone else is doing, but all in line with basic road safety rules and regulations, plus common sense.

I pledge to:

  1. Not join a second or third line, and will only drive within the allocated road section for my direction of travel
  2. During slow-moving traffic, and in accordance to the traffic guidelines, yield to others in junctions, and also let others cross when doing so will not increase the grid lock.
  3. Share the road with mopeds, yes boda-bodas and cyclists despite their craziness are actually recognized in the law as having a right to use the roads too
  4. Pay extra special attention to pedestrians who are on the side walks and trying to cross the road
  5. Express my appreciation to other road uses who go out of their way to help alleviate any potential traffic and safety issues
  6. Drive with half beam and only use full beam lights when necessary
  7. Passive aggressively deal with those who break basic traffic rules, without endangering the safety of other road users

Do share your thoughts and ideas.. Happy to hear them

Boring in Pursuit of Fulfillment

Happy New Year folks, its been a while since I last wrote, but well the year is still young. Its just a week to Valentine’s day and I am contemplating what to do this year for my dear loved one, which got me thinking of how I should approach it… With all the flash and pomp that comes with the day, maybe I should change the game to bring more fulfilment given we met over 19 years ago.

This morning during my 1 hour commute to town in the quiet of the car, snores of the kids in the background, bright headlights blinding me so I could not see the road, that maybe I should just be boring. Slow down, be boring, do something regular – go back to my younger days. I am buying a writing pad, and will pen words just like Solomon in the bible, tiny acts which have probably been lost in the hustle, bustle and grind of life…

On getting to my desk, I suddenly realized that boring was not for relationships and family only, but also my work in tech should be boring, unseen, invisible but always there. I should be solving boring problems, with boring tech tools that just work!! And I am going to do just that…

To a boring, but ultimately fulfilling year ahead…

My 2018 Uganda Independence Pledge

Uganda, my motherland, my homeland where I was bred, born and raised
While I may not like what you have become
I am not going anywhere
Age ain’t nothing but a number
Now it is my turn – It is not about what you can do for me, but what I can do for you

I pledge to learn new skills and gain new knowledge everyday
I pledge to gain mastery of the crafts that I practice
I pledge to use those gifts
To grow, guide, mentor
To clear and prepare a path
Starting from my own sire
On the journey into the unknown future

I will not forget my culture and norms of my forefathers
An unseen pulse through my veins
A perspective
A foothold to step on
A ledge to hoist myself
These too I add to my arsenal

I pledge to stand upon the shoulders of giants
To grow strong
So I can provide strong shoulders for others
Despite all my failings
To err is human
I will stand strong

As I make this pledge I am of sound mind and thought

For God and my country

An Opinionated Approach to OpenMRS Customization

This is my opinionated guide to OpenMRS (http://openmrs.org) customization for multiple sites, may work for a single site if developer resources are available. This guide is based on 3 years working with the UgandaEMR distribution (https://wiki.openmrs.org/display/docs/UgandaEMR+Distribution) for the Ministry of Health of Uganda, currently in 650 sites across the country (December 2017).

Background to OpenMRS 

OpenMRS is a electronic medical records solution, which runs on Java 8, Apache Tomcat 7 and MySQL 5.x (we are using 5.5 and 5.6). The solution is based on openmrs-core (the platform) and modules which extend the platform providing key functionality such as look and feel, REST API, data collection tools, dashboards, patient management workflows.

OpenMRS releases the Reference Application (RefApp) a collection of modules that showcases how the EMR can be setup for clinical workflows, and which is usually the starting point for implementations. The RefApp is released twice a year, April and October, with enhancements that are prioritized by the community and developed leveraging available resources.

I may be somwhat biased due to my role as Reference Application Lead from January 2017.

UgandaEMR

This is one of the nationally approved EMR solutions, which is being actively developed from August 2015, currently supporting HIV Treatment and Care including HIV Exposed Infants (babies born to HIV positive mothers), Safe Male Circumcision, Tuberculosis treatment, Maternal and Child Health (antenatal, maternity and post-natal care), Outpatient services among others.

Guiding Principles

This approach follows the list of principles below:

  1. Any distribution should only customize workflows, look and feel and provide metadata to the underlying EMR – any custom functionality belongs in the underlying core platform and modules. This rule means that the underlying code grows and evolves with time to meet needs of different implementations, may not be adhered to 100% but even 80% is sufficient
  2. “If you need to change the core, then you are probably doing something wrong” ~Daniel Kayiwa OpenMRS Core Contributor, which is probably true. There are multiple ways to skin a cat so skin it the “openmrs” way
  3. Use the OpenMRS SDK – this tool is what an SDK should be, allows you to create, run and test multiple variations and approaches using the openmrs-distro.properties file that allows the distribution to define and build its own war file and docker containers for shipping
  4. Leverage the new openweb apps (OWAs) approach to provide user interfaces with the REST APIs
  5. For concepts always refer to the CIEL dictionary (http://openconceptlab.org/) as your primary reference
  6. Contribute changes back to the platform and modules you are using rather than build your own – stand on the shoulders of giants, but feed them too so that they can grow stronger and carry others. This is a core opensource ethos
  7. Keep your distribution code public – share with others never know where the knowledge will come from. My personal technology experience has been that at some point in time, you will have to come out and find you missed alot of the magic
  8. Ask quesitons on design, approaches, best practices and collaborate with the community to grow your knowledge and others – Don’t build a wall fence around your house, raise your neighbors so that you do not need a wall fence

How to setup a Customization

  1. Setup OpenMRS SDK in your developer environment – by now you have figured that I love this tool
  2. Use the SDK to create a reference application module usually named openmrs-module-mydistribution using

    mvn openmrs-sdk:create-project -Dtype=referenceapplication-module

  3. Create a new OpenMRS SDK server following the steps at https://wiki.openmrs.org/display/docs/OpenMRS+SDK#OpenMRSSDK-Settingupservers
  4. Copy openmrs-distro.properties file from the server to api/src/resources for your module
  5. Add a build plugin in the omod/pom.xml folder such as below extracted from UgandaEMR
  6. <build>

    <finalName>${project.parent.artifactId}-${project.parent.version}</finalName>
    <plugins>
    <plugin>
    <groupId>org.openmrs.maven.plugins</groupId>
    <artifactId>maven-openmrs-plugin</artifactId>
    </plugin>
    <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-dependency-plugin</artifactId>
    </plugin>
    <plugin>
    <groupId>org.openmrs.maven.plugins</groupId>
    <artifactId>openmrs-sdk-maven-plugin</artifactId>
    <version>3.13.1</version>
    <executions>
    <execution>
    <id>build-distro</id>
    <phase>install</phase>
    <goals>
    <goal>build-distro</goal>
    </goals>
    <configuration>
    <dir>${project.build.directory}/docker</dir>
    <bundled>true</bundled>
    <distro>${project.build.directory}/classes/openmrs-distro.properties</distro>
    <batchAnswers>
    <param>n</param>
    </batchAnswers>
    </configuration>
    </execution>
    </executions>
    </plugin>
    </plugins>
    </build>
  7. Set your custom module to be watched by the server, so each time the server is started the latest version of the module is built and deployed also makes live reload of controllers and styling possible
  8. mvn openmrs-sdk:watch

  9. Add a .travis.yml file to provide integration to Travis CI a sample below
  10. language: java
    jdk:
    - oraclejdk8
  11. Traditional OpenMRS development approaches now follow 😉

More examples from UgandaEMR can be found at http://bit.ly/ugandaemr-technicalguide

In closing, these are my thoughts on how such customizations should be done, while they may need a developer available, they are bound to start the test of time.

Do share your thoughts and learnings from this and let me know how to improve, I may not be able to change though

Crowdsourcing Validation Rules for Uganda National ID

I am curious about the ability to validate that the Uganda National Identification Number (NIN) is well formed. However this does not validate that the NIN actually belongs to the person presenting it or that it is correct.

The rules that I have been able to gleam are:

  1. Must be 14 characters long
  2. First character is a letter of the alphabet. C seems to be a common letter – does it stand for citizen?
  3. Second letter is either M or F – male or female
  4. Characters 3 and 4 are numbers, which are the year of birth. Cannot be after 00 since that would make a person below 18
  5. Characters 5, 6, 7 are numbers

How can you help? Which of these rules do not match your NIN? Share any additional patters to build a repository of rules that can later be mapped to programming language validations – Regular expressions and validation frameworks

%d bloggers like this: