Learning from the Past - SMS in mHealth in Practice

I am probably late to the party, but I just discovered the fantastic set of journal articles "mHealth in Practice" edited by Jonathan Donner and Patricia Mechal. There are far too few such resources available for Mobile for Health practitioners, so it was with great interest that I read through the various case studies looking for lessons learned.

Since one of our goals with TextIt was to allow for these kinds of projects to be easily built and iterated on, I found it really interesting to read the articles while also considering which could be implemented with a standard TextIt installation. Technology is only a small piece of making these programs sustainable, but we believe that by making it easier for organizations to experiment with a tool like TextIt we will accelerate the rate of finding effective solutions that are appropriate to each unique context.

One of my favorite case studies was using SMS Quizzes to increase HIV awareness and knowledge. This style of intervention is near and dear to our heart, both because it was largely pioneered by TextToChange in nearby Uganda and because it is such an easy and clear way of helping educate a population on a public health issue. In this campaign, simple questions are sent out to the population, things like "Do you think a healthy person could have HIV?" and the users are prompted to respond. Based on their response they are educated further on the issue, either reinforcing their knowledge or being taught what the right answer should be. These sort of educational surveys are interesting for two reasons: one, because they provide some measure of the current state of the population when it comes to understanding various issues, and two, because the system corrects incorrect responses it also instantly educates participants.

Combined with even mild prizes, this is a low cost way to spread information and raise awareness. It also happens to be the sort of application that fits right in the sweet spot for TextIt. Building an SMS quiz is the same as building a flow, except you have a lot more options on how to handle results with a Flow. For example, on incorrect responses you could explain the right answer, but then also offer to find out more by responding with 'more', otherwise moving them onto the next question. Combined with slotting users in different groups based on their responses, potentially for further education, you could very easily build a very effective way to reach large audiences.

We think the flexibility of flows, and the richness of the interactions they allow, will really allow for a lot more experimentation on this approach. One thing we know is that every context is different, every intervention unique, but we know that some approaches have promise and we hope that TextIt allows for quicker iteration to find the right fit for your environment.

In future posts we'll talk about some of the other case studies and whether TextIt can help implement them, but if you have your own experiences, good or bad, please share. I also highly recommend reading the full set of articles, there are lots of gems in there.

Bitcoin's Bottom Billion - Why the Developing World May Be Bitcoin's Biggest Customer

Bitcoin is a bubble.

There, now that I've got all the skeptics on my side, we can move forward. There are any number of arguments as to whether Bitcoin is currently under or over valued, but in the end nobody really knows, so let's just leave that be. As a matter of fact I'm going to ignore the recent Bitcoin volatility completely and instead focus on a side of Bitcoin that doesn't get covered much, its use as a digital currency in the developing world.

Bitcoin is almost always billed as a replacement for credit cards and PayPal, which is a shame because on that front I think Bitcoin mostly loses: transactions can be slow to settle, Bitcoin security makes everybody paranoid, and most importantly there are very few places to actually spend said Bitcoins when compared to credit cards. Let's face it, for those that can get credit cards, they work incredibly, incredibly well, but that still leaves the other half of the world unaddressed.

For example here in Rwanda, virtually no one has a Visa or Mastercard. A few banks offer Visa cards, but they come with high monthly fees or minimum deposits. Rwanda, like its neighbors, is very much a cash society, which means that most digital goods are out of reach, not because they aren't affordable, but simply because most Rwandans don't have credit cards.

A case in point: hosting and domain names. At the kLab, a software innovation hub here, we work with tenants who struggle with making the jump from having a site running on localhost to one running on the web. Right now most muddle through by using free tiers on AppFog or Heroku, but once they need more than that they get stuck. There are a few enterprising souls who have gotten Visa cards and resell hosting, but the really excellent services remain inaccessible.

Step in Bitcoin and that is largely solved. Today, right now, I could sell a Bitcoin to someone in the kLab for cash and have them go buy hosting or a domain on Namecheap, without having to apply to a bank or fill out any forms. It really is digital cash, and in societies where cash is the norm, I can't help to think that it will be a more natural leap than credit cards. All it would take to enable a whole new class of consumers is for the countless foreign exchange bureaus in Kigali to start exchanging Bitcoins.

Now of course East Africa is already famous for having lightweight digital payments, the most famous being M-Pesa in Kenya. But here I think we start to see why Bitcoin's decentralized nature is such a plus. M-Pesa has some serious transaction fees, really only works in Kenya, and most importantly doesn't really facilitate participating in the global marketplace. As much as I love M-Pesa, I don't think we'll be seeing Namecheap accept it anytime soon. Even regionally it is a struggle, while Kenya, Tanzania and Uganda are all neighbors and the largest mobile money markets in Africa, their systems aren't interoperable.

In that sense Bitcoin really is "The World"'s digital currency. Foreign exchange bureaus across the globe could start selling Bitcoins and by doing so enable anybody to buy digital services. 

But that is only half the story, perhaps the most exciting part of Bitcoins is how it enables merchants.

If you think getting a Visa card is hard in Rwanda, getting a merchant account so you can accept Visa payments is a whole different story. And again, here Bitcoin shines. Someone in Rwanda that builds a compelling service can instantly start taking payments from the rest of the world, without asking for permission, without filling out any paperwork and with the same fee structure as the biggest retailers.

So Bitcoin is exciting to me not so much because it is a new currency, but because it has the potential to be a globally recognized, yet completely decentralized, form of digital payment.  

That depends on Bitcoin adoption continuing to rise and for the price to stabilize, both still very tenuous suppositions, but the potential is there. A lot has been said about how we all live in a global economy, that the things we use every day come from all over the world. That may be true, but we don't yet live in a DIGITAL global economy, only the rich get to participate in online commerce. Bitcoins may just change that.

Lagom - Better than Best

A recent article by Dustin Curtis made an interesting case for seeking out the best in everything you own, that your quality of life will be higher surrounded by perfection. The interesting bit to me is not so much that thesis, but that it frames that attitude as something new.  Rather, I'd make the case that it is rather typical, especially so in the community of geeks that Dustin belongs to.  We are almost obsessive in our compulsion to seek out the best, to research things ad infinitum and to bask in the satisfaction of knowing that a particular widget is the best made, most thoughtfully designed, and carefully constructed.

The thing is, seeking out "The Best" isn't anything new, it is just Consumerism taken to the extreme.  We love consuming, and we especially love consuming in ways that set us apart, doubly so if we can rationalize that consumption.  Any proud owner of the latest widget will be all too happy to tell you why his widget is better than the others, better than the last and perhaps even the final word in widgets.

In my early twenties I was lucky enough to spend a bit of time in Sweden. I spent only a week there, but in that time I got introduced to the Swedish word "lagom".  There is no English equivalent to lagom, but Wikipedia calls it "just the right amount", that what you have is good, but not excessively so. Something "lagom" meets your needs, leaves you content, but doesn't try to do so in extreme.  As put by the Lexin dictionary, that "Enough is as good as a feast".

Lagom specifically eschews excess, but strives to be good, not junky or disposable.  If you have visited IKEA, which is of course Swedish, you have probably seen an awful lot of lagom.  Though you've also seen an awful lot of disposable things too, even IKEA has a hard time finding the line that is lagom.

So while "The Best" flatware may be $200 at MOMA for a sitting of four, the lagom choice might be $13 at IKEA. They will both last you a lifetime, but perhaps only the first has the perfect angle to the fork tines as it hits your tongue.  I may never know.

To be very clear, Lagom does not mean cheap in quality or price, it is good but content to not be perfect.  In essence it is recognizing the 90/10 rule, that the first 90% of anything can be achieved fairly easily, but beyond that it becomes exponentially harder and less efficient to make improvements.  Seeking out perfection personally is part of life, but as a matter of consumption, it is a wasteful goal, and one that the marketplace is far too willing to indulge.

This particular trait, of cherishing the best, of making sure to be prepared for anything, strikes me as very American. In Kigali, it is usually easy to spot the American tourist: safari pants with lots of pockets, travel wallet and an Osprey pack, all of highest quality, best at what they do. The Europeans tend to be more casual, in jeans with well weathered rucksacks.

So instead of striving for the best in what I purchase, I tend to try to find the lagom instead.  I must say for me personally, that is incredibly hard to do. My natural tendency is very much more to be like Dustin, to research like mad and have a veritable bible of information to back my decision.

But in the end, though we have to consume things, we must not be consumed by them, and to spend days researching the best camera, fork, computer or pocket knife is just that, being consumed by them.  

We only have so much time here, let us spend it creating, sharing, exploring and risking instead.  Let us keep our consumptions lagom, so that instead we can make the rest of our life "The Best".

Bitcoin's Biggest Problem: It's a Den of Thieves

I've had a curious eye on Bitcoin for a few years now.  Through various posts on HN I've followed its ups and downs including the big hoopla over the exchange rate for a Bitcoin reaching parity with the dollar, a figure that is now eclipsed by today's going rate of $12/BC.

For those that haven't paid similar attention, here's how Wikipedia describes Bitcoin:

Bitcoin is a peer-to-peer electronic currency .. which can be sent, received and managed through various independent websites, PC clients and mobile device software.

At its roots, Bitcoin is based on some rather clever mathematics, ironically the same primitives that keep our credit cards secure when buying things online.  But while credit cards are centralized systems, with Visa, Mastercard and friends acting as the managers of who has what, Bitcoin is more clever.  It is a truly distributed system, everybody knows everything, all the Bitcoin clients forming a congress of sorts on what the state of the world's Bitcoin economy actually is.

This has some very neat advantages, the largest being that no one entity controls Bitcoin, instead it is a community all agreeing to use a currency with particular rules, with some clever algorithms keeping everybody honest.  No single government, much less corporation, can dictate what happens to Bitcoins.

Another great advantage is that it also allows for almost complete anonymity, while your Bitcoin 'wallet address' is public, as are the transactions that go in and out of it, nobody really knows who that address belongs to.  Since it is incredibly easy to set up digital bitcoin wallets, it is easy to launder bitcoins as well, masking the sources and destinations of transactions.

These two great strengths: no central authority, and complete anonimity, unfortunately also create the perfect environment for fraud.  Since there is no central authority able to reverse transactions, and since there is no way to track down someone you send Bitcoins to, the Bitcoin community sometimes seeems like a den of thieves.

One need only look at the long list of failed attempts to allow the purchase of Bitcoins through PayPal or credit cards to have this point driven home.  Since both credit cards and PayPal allow reversal of charges, it is easy for crooks to buy Bitcoins, have them deposited to their anonymous wallet, then have the charges reversed.

This fact makes acquiring Bitcoins a rather obnoxious affair, with one party or the other having to give tremendous trust to the other.  I recently tried to buy a moderate number of Bitcoins on one of the trading facilitators, Bitcoinary, and ran into this head on.  After agreeing on a price, I sent over the money for the Bitcoins over PayPal and was immediately faced with a seller getting cold feet, nervous that I would reverse the charges after he sent the Bitcoins over.  No amount of convincing worked to assuage his fears, offers to call, online reputation, etc.. Despite offering to forego far more privacy than any consumer ever would, he refused to complete the transaction, the deal finally falling through.

This is not a good sign for Bitcoin.

Though Bitcoin is a fine digital currency, it is hard seeing it take off for consumers the same way credit cards have.  While centralized payment systems like credit cards have their disadvantages, they offer one very large advantage as well: they act as an arbiter in the case of disputes.  The buyer and seller both agree that "Papa Visa" knows best and with that confidence consumers open their wallets.

Bitcoin has none of that.  Yes it is decentralized, yes it is amazing to see payments go through so quickly and so cheaply, but what happens when it goes wrong?  I can trust tiny merchants with my credit card because I know if something goes wrong I have a recourse, there is no such recourse with Bitcoin.

So we are back to the same trust issue I ran into on Bitcoinary, a chicken and egg problem. Customers will be leery to spend with new merchants without a reputation, and new merchants will find it hard to build that reputation without customers.

Note that I did eventually find a seller on Bitcoinary who would trust me, so it isn't completely hopeless, just a lot lot harder than it should be.

As has been pointed out numerous times, "trust enables people to do business with one another". Trust creates an environment where everybody can stop worrying about being ripped off and get on with business.  A currency that allows complete anonymity yet has no central authority to manage disputes fails this trust test. That single fact is why I don't see Bitcoin taking off long term in its current form.

It might not be completely hopeless. One way to manage situations where neither party trusts the other is to have a third party in between which is trusted by both: escrow. There is no reason Bitcoin couldn't support such a party in its ecosystem, built on Bitcoin, but adding trust to the equation. With that will come overhead however, and I'd be surprised if we didn't find ourselves back to the 3% transaction fees so common in the credit card world.

In short, while Bitcoin is irresistable crack to software geeks for its sheer cleverness, I just don't see it having the right attributes to break out into a larger world of consumer spending.  Either way it will be an amazing thing to watch grow and evolve.  Who knows, maybe, just maybe I'll someday be able to find someone willing to give me dollars back for my Bitcoins without losing my shirt in the process.

How Udacity's Greatest Effect will be in the Developing World

As those of you who follow such things will tell you, the world of online teaching has been heating up lately when it comes to computer science.  New courses are coming online at a greater and greater pace, and their quality is improving by leaps and bounds.

One of the pioneers here was MIT with their OpenCourseWare. Their Introduction to Computer Science course not only included all the class materials, but also video lectures, allowing anybody with a computer and internet connection to take the same course taught in the #1 Computer Science school in the world. But it is a tough course, moving very quickly, and the videos are just of the lectures, impersonal, not terribly engaging.

Kahn Academy, in some ways the grand daddy of alternative online learning and pioneer of the 'first person doodle' style of teaching, started their Python Lessons this summer.  This provided a very different approach to computer science, much less formal, much more personal, you feel a certain connection to the teacher.  But it still required you to download and install a Python interpreter and editor, a small barrier, but a barrier nonetheless.

Meanwhile, a little revolution was taking place with Codecademy, which took the wholly different approach of teaching by doing, immediately throwing students into a programming environment built right into the web page. Codecademy's courses provide no videos, no lecture notes, rather they are programs themselves, guiding you through principles by having you code.  This was something entirely new, though some credit belongs to Stanford's CS101 course which also included web page programming, albeit in not as sophisticated a fashion.

This brings us to Udacity, which takes all the best parts of the above approaches and marries them into an incredible teaching tool.  Udacity combines the personal, approachable first person teaching style of Kahn Academy, but then backs it up with interactive programming in Python, all right in the browser.  

The teachers are ex-Stanford professors, so they have decades of experience teaching this material, which really shows in how they present it. So far in the first week of class, they have done a great job of covering fundamentals without getting bogged down in details, getting students to start learning intuitively, by doing, while still giving them the founding blocks to know why things work the way they do.

Perhaps most importantly, Udacity has structured their CS101 course around a brilliant concept, building a search engine in eight weeks. That single act makes the course not about learning, but about doing. The class never has to answer the question 'why are we doing this?', because each topic is directly tied to the overall goal of building your own little Google, every piece is practical.

To me, this marks the first time where online learning not only matches, but actually exceeds the classroom equivelant.  Each student can work at their own pace, and if the material continues to be as well thought out, each student will succeed.

And that's available to anyone, anywhere in the world, for free. Absolutely Incredible (tm).

To me, having lived in Rwanda for a couple years now and having my reservations about the quality of the CS curriculums in the region, Udacity is a revolution.

Suddenly, the very best education is available to everyone. Suddenly it doesn't matter if you live in America or Rwanda, the opportunity is yours. And that's why I think the greatest effect of Udacity will be felt not in America, not in Europe, but in developing countries like Rwanda.  Because the improvement in quality over what is offered here is astronomical.

I fully expect that everybody who finishes the eight week Udacity course will be better prepared than those who finish four year university programs in Rwanda.  And that's not unique to Rwanda.  Every developing country suddenly got a world class computer science school donated to them.

The effect that will have remains to be seen, but I think this is the start of something much, much bigger. The printing press brought us affordable books, driving a renaissance in learning across the world.  The internet has done the same, bringing information access and instant communication to virtually every corner of the globe.

Looking fifty years into the future, I think it is clear we are on the cusp of yet another revolution, in learning, where not only will incredible educational programs be available to all, but that those programs will be superior to every teaching tool that came before them. The consequences of that, of having an entire world educated at that level, is beyond imagination.

I often marvel at the luck I've had to live during this era. To be present for the birth of the internet, to programming languages, to see them grow and evolve, but I have a feeling we haven't seen anything yet.

Customizing Twitter Bootstrap's Nav Bar Color in 2.0

Twitter Bootstrap is the bee's knees.  At Nyaruka we've used it for virtually every single project since it arrived on the scene.  And we aren't the only ones.  Sites across the web have picked it up as a great tool to get functional, good looking designs up quickly.

But there's one downside to the popularity of Bootstrap, it is all too easy to have your site look like every other Bootstrap site.  To my eyes, the biggest giveaway that someone is using Bootstrap is the black nav bar.  It seems like the majority of sites use the default black nav bar, and that screams lazy.

We almost always customize the top bar color for our sites, and though they are still obviously Bootstrap to a trained eye, they add a bit of personality.  Whether it's a little green for our work with TechnoServe on their Coffee Transparency site, or showing off our company colors for our Ministry of Health feedback site, a little goes a long way.

Of course there's a reason not that many people change it.  That black nav bar isn't so bad looking, and Bootstrap doesn't make it particularly easy to change.  It can be especially annoying if you are using menus, having to track down all the variables needed in that fancy CSS takes some patience.

Thankfully, the upcoming 2.0 version (due out January 31st) introduces a couple variables to make things easier, though you'll still have to do a bit of hackery to deal with drop down menus.

Bootstrap is built using Less, so the first step is to get set up with that environment, Twitter gives some nice tips on getting that up and running on different platforms in their documentation.

In 2.0, Twitter has defined two new variables in the patterns.css file, @navBarBgStart and @navBarBgEnd.  These, quite naturally, define what the top and bottom colors are for the nav bar gradient.  Though you can set these to whatever you'd like, if you want to keep things simple I recommend using dark colors, so that the default light text colors work without modifications.

Ok, so let's try this out with a nice royal purple:

@navBarBgStart: #3D368B;
@navBarBgEnd: #232051;

Once we recompile the CSS file using Less, we get something majestic indeed:

Well that was easy right?  Not so fast, it turns out if we want to have drop-down menus, there's more to it.  Let's check out what that drop down looks like:

Shoot, well that isn't right.  It turns out Bootstrap 2.0 doesn't make changing those colors any easier, so that's something we have to dig a bit deeper to change.

We'll need to change both the background color for the dropdown, and the gradient used to draw the selection highlight.

The first can be set by changing the background-color in the .dropdown-menu style, somewhere abouts line 180 in patterns.css.  By default this is set to #333.  I recommend setting this to a value somewhere between the two gradient values you set for your top bar:

.dropdown-menu {
     background-color: #2F2A6C; // defaults to #333

The second change we have to make is how the active item is highlighted.  This is another gradient, and is under the styling for li a, somewhere around line 192 in patterns.css:

li a {
      color: #999;
      text-shadow: 0 1px 0 rgba(0,0,0,.5);
      &:hover {
        #gradient > .vertical(@navBarBgEnd, #1B183E);
        color: @white;
      }
    }
Once we recompile our CSS file, we get something that looks pretty decent:

There, now we have a good looking nav bar that doesn't scream Twitter Bootstrap, all with just a few lines of code.

Bringing Minister Mondays to SMS

One of the new exciting initiatives happening in Rwanda is Minister Mondays.  A few times a month, the Minister of Health, Dr Agnes Binagwaho goes on Twitter and answers questions from the general public.  She answers questions from a wide range of topics, this week's focusing on nutrition.  That kind of access to leadership and transparency is to be applauded and is something pretty unique, not just in Rwanda but in the world.

But one thing we thought could be better was that the primary form of interaction was via Twitter.  Though it is a great platform for reaching a digital audience, it does leave out quite a few participants in a country where the penetration of PCs (and Twitter) is still low

As we specialize in building SMS services, we decided to volunteer a bit of time to see if we could bridge that divide.  Last week we met with the Minister and discussed what could be done.  Happily we found that the Minister had the same goals as we did, trying to reach a wider audience, with a focus on transparency, on putting those questions and answers on the public record.

A few days later and we had put together Nyaruka Listen, a platform to make that kind of interaction as easy as possible.  Since we were on a tight schedule and wanted to make the service available across carriers, we decided to leverage our Android relayer to deliver messages to our service.  That let us quickly use a regular SIM card to relay messages from the MTN network and back.

The final service is simple.  Incoming messages to the Minister Monday phone number are ingested by Listen, the sender receiving an SMS confirming that it was well received.  Meanwhile, the Minister can see all incoming messages on a web dashboard and can instantly reply using a simple interface.  That reply is sent back to the original sender's phone and made public for the world to see.

It is a simple product, but one we think could have real potential for other organizations.  The penetration of mobile phones in Rwanda and other East African countries is high and only getting higher and SMS is a cheap and reliable technology that people use on a daily basis.

Using Listen, an organization can set up a hotline where their customers or beneficiaries can send in comments and concerns via SMS.  Each message is viewable by everyone in the organization and can be dealt with appropriately.  Forward looking organizations can even follow Dr Agnes's model and be transparent, publishing the responses for the public to see.

Of course this kind of system might seem like it would be expensive but it not need be.  We believe so strongly that this would be beneficial to other organizations that we're willing to provide Listen to any organization for a really compelling price.  You too could give your community a voice and the power of easily interacting with your organization via SMS.

If you are interested in exploring that further make sure to contact us to find out more.  But either way, we hope to see you interacting with the Minister during the next Minister Monday session in early January.

Rwanda's new Short Code Registration Procedures

A few weeks ago, RURA, Rwanda's Utilities Regulatory Agency, announced the new procedures for acquiring short codes in the country.  Short codes are just that, short (four digit for our purposes) phone numbers which allow companies and organizations to build services which are more easily accessible to the general public.  Instead of having to dial a 10 digit number, a user can instead use a shorter four digit number.

Short codes also serve the purpose of allowing services to be deployed across carriers.  To build a reliable SMS service, such as the ones Nyaruka builds, you need to integrate with the carrier's SMSC.  Each carrier has it's own SMSC, and that's where SMS'es get routed on their network, or alternatively crosses to another network.  If you want to build an SMS service that works well on all networks, you need to integrate with each of these, and you need a shortcode to make it easy for the customer to access them all.

Old Procedures

In Rwanda thus far, acquiring short codes has been a pretty easy affair.  You just put in a request to RURA for a new shortcode, along with your intended use and a week or two later they reserve a new four digit number for you.  This worked but posed some problems, both for us as customers of RURA and for RURA themselves.  

For RURA, because short codes had no cost to them, there wasn't much incentive for companies to use them wisely, or even wait until they had a business plan to acquire them.  Worse yet, with no maintenance fee, short codes would often lay stagnant, unused, but still reserved and unavailable to use.  That's a real problem when there are only 10,000 short codes available.

For companies, RURA didn't have any procedures for us to pick our own short codes.  Instead, you would include seven or eight different short codes you'd be happy with in your request, but more often than not you were just assigned a random shortcode.  Not a great outcome if you are trying to build a consumer facing service.

New Procedures

The new procedures that RURA announced should go a long way towards solving both of these issues.  But before getting into that, I must first commend RURA for making both the presentation and the application form easily available on their site, this is great to see and shows a real willingness to operate openly.  Even more importantly, I was also really impressed with how they presented the new plan, inviting all the stakeholders to a meeting and allowing for lots of feedback and discussion.  Very well done.

The main change, as expected, are that short codes will no longer be free, but instead require a yearly maintenance fee.  This is a good change, as it now rightly discourages squatters from taking over short codes.  In addition, it now means that you will be able to request a specific short code and if free, receive it.

The new fee structure is 25,000 RWFs as an application fee, then either a $200 USD or $1,000 USD yearly maintenance fee for the short code, depending on what category it falls in.  $200 short codes are reserved for what RURA calls "Customer Information Services" and here I think they will run into trouble, as it is not immediately clear what falls under that category.

Although not in the slides, further discussion with RURA at the meeting leads us to believe that RURA is reserving the $200 fee for short codes which are less desirable and used for non-profit purposes.  But again, this is a hard thing to define, there is no bright line rule that works well, especially as more and more SMS services are trying to support their programs by deploying premium or normal rated SMS services.

Our Comments

Although we are fine with the plan as presented, I think a better option would have been to just define different classes of short codes based on their desirability, and charge differently based on those, regardless of purpose.  For example, RURA could have said any short code with only one digit, say: "1111" would be $2,000 a year, those with two pairs or consecutive digits, say: "1234" or "2020" would be $1,000 a year.  Those with two different digits, say "1112" would be $500, and all others would be $200.  

That kind of fee structure would allow small businesses to still acquire short codes at reasonable prices when first starting up, and later graduate to a nicer shortcode.  It also removes the very subjective measure of what is a "Customer Information Service" and instead makes the pricing completely transparent, which is always a good thing.

But even if it isn't quite perfect in our view, the new procedure is much better than before, and having a yearly maintenance fee should go a long way towards freeing up desirable short codes which aren't in active use.

Online Registration

One of the things that was both good and disheartening to hear was that RURA was also planning to launch an online registration system for short codes.  This is great news, as it is one thing that really doesn't work well currently.  In order to be able to pick a short code, you really want an up to date website which lists all the short codes already taken, letting you weigh the pros and cons of those still available.  So having an online database and registration form is a huge step towards making the process both streamlined and more useful for customers.

The disappointment comes in that Nyaruka built such a system specifically for RURA and presented it to them back in May of this year.  We had experienced a lot of the pains in the old paper procedure for short code registration, so we decided to build something better.  Emile spent about a month thinking through the problem and building the site, and we presented it to RURA, offering it for free save for any further customizations and a small hosting fee.

RURA seems to have decided to go their own way on this, as is certainly their right, but it is a bit disheartening to see.  We haven't seen the system that RURA itself will deploy, but I hope it does a better job than ours, and I hope it launches before the November 30th deadline for applications for existing shortcodes.  

Speaking of which, here's the demo video we put together for that system.  Built, designed, and coded in Rwanda by a Rwandan.  Even if it never gets used, I'm proud of the work Emile did in thinking through the problem and implementing it.

Learning to Swim by Reading a Book - The State of CS Education in Rwanda

We recently decided to hire an intern at Nyaruka.  We thought it might be a nice way to give back to the community, to help a student along for a few months, give them a taste of working at a software company.  The internship periods were starting soon, so we quickly put together an application form and started advertising for applicants.

The response was excellent.  In less than a week, we got over 50 applicants from various universities.  Our application was mostly focused on coding questions, very simple things like writing a function to return whether a number is odd or even and simple string manipulations.  We are strong believers that coding ability comes first, far before degrees or certificates, so our focus was there.

The applications we got back were varied.  Some obviously cheated on their answers, clearly copy/pasting from somewhere on the internet despite our warnings not to use external references.  Others gave it their best shot, honestly trying but getting few answers correct.  But about eight applicants looked promising, and from those we picked the four which we thought did the best and asked them to come in for a follow up interview.

And here we learned just how badly the Rwandan universities are failing them.

Our interview question for the applicants was a simple one: given a string such as "AABAB", return the string with all consecutive duplicate letters removed, ergo: "ABAB".  This is the type of problem one might be given as a first assignment in Computer Science, something that uses only the most basic fundamentals and constructs.  But our applicants struggled with it, far more than is reasonable.

Now keep in mind that although this is an internship, all these students were three, four, or even five years into their Computer Science programs.  By now they should have a reasonable grasp of programming, debugging etc..  If asked they will tell you their curriculum includes the same titles that any Western CS program might have, Operating Systems, Algorithms etc.. but despite their impressive names, it is clear the universities aren't teaching their students much at all.

This angers me.

It makes me mad at the professors teaching courses they aren't qualified to teach and mad at the universities charging students in both time and money and yet not fulfilling their promise.

The problem stems to their methods in teaching Computer Science.  Universities here are still teaching their students using pen and paper, teaching from books instead of computer screens, teaching by lecturing instead of by doing.  That simply does not work for this field, you cannot learn how to program by reading a book.

Computer Science isn't unique in this respect, but sometimes this is hard for people who aren't coders to understand, so an analogy might help.

Imagine you take a course to learn how to swim.  Not just a short course, but a dedicated university program on swimming.  Over the course of years, you attend classes where you learn the names and characteristics of various bodies of water you can swim in.  You listen to lectures about buoyancy, take exams on rip tides, diagram the various swimming strokes.  Your professors, while unable to swim themselves, assure you that they have also completed this certification and have read many books on the subject.  So after years of study, years of applying yourself according to the plans of the university and hours upon hours in the classroom, you graduate with your certificate.

To celebrate, you go to the beach, where you quickly drown.  Because, in truth, despite your years of studying, you have no idea how to swim.  You've never been in the water.

This is the state of Computer Science in Rwanda (and really the region in general).  Despite impressive graduation numbers, despite the glowing press, despite the undisputed progress, there is a shocking failure to actually teach any of the required skills to be a programmer.

This must stop.  This must change if Rwanda is at all serious about trying to build an IT sector.

The universities must take a hard look at their professors and their curriculums and redesign them to be more effective.  There isn't a huge pool of qualified professors to draw upon, but that doesn't make it hopeless.  Both MIT and Stanford, provide many of their class materials online.  Not only the lecture notes and assignment, but videos of the lectures themselves.  Why not build courses around these?  I would guess that small groups of students assigned to work through these courses together would learn far more than they are now.

To give you an idea, this single MIT course: Introduction to Computer Science and Programming, would provide an understanding of CS fundamentals that far exceeds what is taught in the four year programs at the Rwandan universities.  A single course!  Why can't KIST professors help students through such a course, playing the video lectures, working through the assignments with the students?  Why isn't this a model that is adopted?

My advice to anybody in Rwanda who wants to learn Computer Science is this: Don't attend University.

Instead, invest the money in a laptop and a modem.  Download and start working your way through the MIT course, find friends to do it with, help each other along.  Do the assignments, write the code.  It will be hard at times, you will struggle, but it is the only way to learn.  When you do complete that course, which should take less than a year, you will have skills that far exceed any of your colleagues who attended University.  And with those skills you'll be able to find work doing real programming.  As a matter of fact, come to us and show us you did the work, and we'll help you along, certificate or not.

To the Rwandan Government, I plead with you to get serious and start talking to people already here on how you can do better.  Some programs already exist which are successfully training students, PIH's Medical Informatics Course being the prime example.  But their scale is far too small, their focus too specific.  Start finding ways of starting similar programs or scaling the successful ones up.   Look at things like Nairobi's iHub as inspiration on how to build the space and community which can help foster an IT community.  What if Kigali had an iHub where students could come and work through the MIT course together?  Imagine the possibilities if you encouraged a community of students and professionals alike to collaborate in learning?

None of this is expensive, none of this is hard, but the current institutions are failing their students, and in turn, their country in accomplishing Rwanda's goal of building an IT sector.  The first step is admitting that what is being done is not working, that the current graduates are not qualified, that the education system is failing them.

Once we can admit that, then we can all work together to do a better job.  

We're here because we believe in that dream and because we want to help, so are many others.  Let's work together to make it happen.

2D Barcode Error Correction


We're still playing with 2D barcodes and testing out how well they work with various Android devices.  One question that came up from our last test was how well they dealt with errors in the barcode, that is dirt, rips or parts missing entirely in the way.

The answer is pretty darn well.  Here's a barcode that still runs despite me scribbling all over it:

But there are vulnerabilities.  Specifically on QR codes, they are very sensitive to having one of the position detection patterns destroyed.  This QR code, while in much better shape than the one above, refused to read, just because the top left block was filled in.

Note of course that all these results are in the context of using the Barcode Scanner application on an Android phone.  There are almost certainly weaknesses in the scanning algorithm, but that's the state of the art for Java based QR Code reading, so it is what is relevant for us.

Also, we tried the same tests with DM codes with similar results.  Newer DM codes support the very same Reed Solomon error correction algorithm, and just like QR codes allow for up to 30% of the data being corrupted before failing entirely.  Again though, if you start messing with the position markers for DM codes, which are the left and right edges, you run into trouble more quickly.