Gadgets

Africa makes resilient payment products for the world

Africa makes resilient financial payments products for the worldIt was back in 2009 that Vahid Monadjem first saw the window of opportunity to reach the millions of underserved people in Africa’s informal markets. He decided to develop a POS terminal that minibus taxi drivers could use to sell prepaid services, like airtime, for extra income.

Monadjem, is now Nomanini CEO and co-founder and speaking at AfricaCom  tells Appsafrica.com “We wanted the device to be simple and accessible to people of all languages, and even those who can’t read, so we decided not to include a screen. This made the device much more resilient and forced us to ensure that the process for accepting transactions is as easy as possible.”

“When we were developing the prototype, we thought we’d be able to import a POS and simply customise it,” says Monadjem. “We also thought sleek and discreet would be what our target audience – taxi drivers – would want. But when we trialled proof of concept and received feedback from drivers, in their environment, we realised that we had it all wrong. What they needed was something totally unique, and sometimes the opposite of what we had assumed they would want. Rather than small and sleek, they wanted big and bright.”

Small and discreet means easy to lose and easy to steal. Big and bright, on the other hand, is difficult to misplace and difficult to steal. The terminal had to be tough, so that it wouldn’t break if it was dropped or thrown. And transactions had to be fast and simple – no long-winded processes. A sale had to be able to happen in a matter of seconds.

“It was a big learning curve. Much of what we assumed our target market would want was wrong. But everything they said made so much sense. If we had not gone out there and taken the time to understand the context in which the product would operate, we would have failed” he adds.

“It taught us that product design isn’t just one person’s job at the end of the development process. Everyone should be involved – especially the end user – and it needs to happen right at the beginning of the process.”

The device is designed to have a long battery life so that it can work in areas where electricity is intermittent. The battery lasts for five days if processing an average of 50 sales a day. It takes six to eight hours to recharge, and goes into ‘deep sleep’ mode if it has not been used for a couple of hours. Even the buttons on the terminal were specially designed to avoid the ink being rubbed off by vendors who use petroleum-based hand cream.

Designing the backend system was just as important: “A vendor’s ability to process transactions, even when when there is no mobile connection, is vital. A weak system could inconvenience their business and damage their reputation as a go-to retailer. We had to make sure the terminal was reliable and that it could work without connection.”

As long as the vendor has pre-loaded the terminal with enough airtime or electricity to turn into vouchers, it can be used anywhere – even if there is no internet connection. When the vendor next has connection, the device syncs to the backend through the cloud. This also enables developers to roll out software updates and bug fixes regularly.

“A scalable and reliable backend system is vital. We use Google’s App Engine so that we don’t need our own servers. We run on the same infrastructure that powers Google’s own applications. This way, we can focus on building functional elements specific to our application. When a vendor makes a sale, they press a few buttons, App Engine processes the request, and the voucher prints within seconds.”

“The key for us was to understand what made the scratchcard – the service we were trying to replace – so successful. We found that it was due to its simplicity. We didn’t want to take away from that, we wanted to improve on it. So we created a quicker, more cost-effective version of the scratchcard – something that ‘just works’.”

Click to comment

Leave a Reply

Your email address will not be published. Required fields are marked *

AppsAfrica.com is a leading pan-African technology news portal and advisory service, dedicated to delivering the latest insight on mobile, tech and innovation in Africa.
AppsAfrica Advisory provides strategic, tactical and operational Africa advisory services for mobile and tech ventures planning to launch or expand in Sub-Saharan Africa with a team of experienced advisors. Our events celebrate and connect the best in mobile and tech from across the African tech ecosystem with global players.

Subscribe to our mailing list

Subscribe to our mailing list

Copyright © 2013 - 2018 AppsAfrica. All rights reserved.

To Top
[gravityform id="3" title="false" description="false"]
<div class='gf_browser_unknown gform_wrapper' id='gform_wrapper_3' ><form method='post' enctype='multipart/form-data' id='gform_3' action='/africa-makes-resilient-payment-products-for-the-world/'> <div class='gform_body'><ul id='gform_fields_3' class='gform_fields top_label form_sublabel_below description_below'><li id='field_3_6' class='gfield gf_left_half gfield_contains_required field_sublabel_below field_description_below gfield_visibility_visible' ><label class='gfield_label' for='input_3_6' >First Name<span class='gfield_required'>*</span></label><div class='ginput_container ginput_container_text'><input name='input_6' id='input_3_6' type='text' value='' class='medium' aria-required="true" aria-invalid="false" /></div></li><li id='field_3_5' class='gfield gf_right_half gfield_contains_required field_sublabel_below field_description_below gfield_visibility_visible' ><label class='gfield_label' for='input_3_5' >Last Name<span class='gfield_required'>*</span></label><div class='ginput_container ginput_container_text'><input name='input_5' id='input_3_5' type='text' value='' class='medium' aria-required="true" aria-invalid="false" /></div></li><li id='field_3_2' class='gfield gf_left_half gfield_contains_required field_sublabel_below field_description_below gfield_visibility_visible' ><label class='gfield_label' for='input_3_2' >Email<span class='gfield_required'>*</span></label><div class='ginput_container ginput_container_email'> <input name='input_2' id='input_3_2' type='text' value='' class='medium' aria-required="true" aria-invalid="false" /> </div></li><li id='field_3_3' class='gfield gf_right_half field_sublabel_below field_description_below gfield_visibility_visible' ><label class='gfield_label' for='input_3_3' >Company</label><div class='ginput_container ginput_container_text'><input name='input_3' id='input_3_3' type='text' value='' class='medium' aria-invalid="false" /></div></li> </ul></div> <div class='gform_footer top_label'> <input type='submit' id='gform_submit_button_3' class='gform_button button' value='Submit' onclick='if(window["gf_submitting_3"]){return false;} window["gf_submitting_3"]=true; ' onkeypress='if( event.keyCode == 13 ){ if(window["gf_submitting_3"]){return false;} window["gf_submitting_3"]=true; jQuery("#gform_3").trigger("submit",[true]); }' /> <input type='hidden' class='gform_hidden' name='is_submit_3' value='1' /> <input type='hidden' class='gform_hidden' name='gform_submit' value='3' /> <input type='hidden' class='gform_hidden' name='gform_unique_id' value='' /> <input type='hidden' class='gform_hidden' name='state_3' value='WyJbXSIsImRhMGM2ZmNhYjdjNjM5OGNjZGQ1OTBhMjNmMjAzMzExIl0=' /> <input type='hidden' class='gform_hidden' name='gform_target_page_number_3' id='gform_target_page_number_3' value='0' /> <input type='hidden' class='gform_hidden' name='gform_source_page_number_3' id='gform_source_page_number_3' value='1' /> <input type='hidden' name='gform_field_values' value='' /> </div> </form> </div><script type='text/javascript'> jQuery(document).bind('gform_post_render', function(event, formId, currentPage){if(formId == 3) {} } );jQuery(document).bind('gform_post_conditional_logic', function(event, formId, fields, isInit){} );</script><script type='text/javascript'> jQuery(document).ready(function(){jQuery(document).trigger('gform_post_render', [3, 1]) } ); </script>
[gravityform id="3" title="false" description="false"]
<div class='gf_browser_unknown gform_wrapper' id='gform_wrapper_3' ><form method='post' enctype='multipart/form-data' id='gform_3' action='/africa-makes-resilient-payment-products-for-the-world/'> <div class='gform_body'><ul id='gform_fields_3' class='gform_fields top_label form_sublabel_below description_below'><li id='field_3_6' class='gfield gf_left_half gfield_contains_required field_sublabel_below field_description_below gfield_visibility_visible' ><label class='gfield_label' for='input_3_6' >First Name<span class='gfield_required'>*</span></label><div class='ginput_container ginput_container_text'><input name='input_6' id='input_3_6' type='text' value='' class='medium' aria-required="true" aria-invalid="false" /></div></li><li id='field_3_5' class='gfield gf_right_half gfield_contains_required field_sublabel_below field_description_below gfield_visibility_visible' ><label class='gfield_label' for='input_3_5' >Last Name<span class='gfield_required'>*</span></label><div class='ginput_container ginput_container_text'><input name='input_5' id='input_3_5' type='text' value='' class='medium' aria-required="true" aria-invalid="false" /></div></li><li id='field_3_2' class='gfield gf_left_half gfield_contains_required field_sublabel_below field_description_below gfield_visibility_visible' ><label class='gfield_label' for='input_3_2' >Email<span class='gfield_required'>*</span></label><div class='ginput_container ginput_container_email'> <input name='input_2' id='input_3_2' type='text' value='' class='medium' aria-required="true" aria-invalid="false" /> </div></li><li id='field_3_3' class='gfield gf_right_half field_sublabel_below field_description_below gfield_visibility_visible' ><label class='gfield_label' for='input_3_3' >Company</label><div class='ginput_container ginput_container_text'><input name='input_3' id='input_3_3' type='text' value='' class='medium' aria-invalid="false" /></div></li> </ul></div> <div class='gform_footer top_label'> <input type='submit' id='gform_submit_button_3' class='gform_button button' value='Submit' onclick='if(window["gf_submitting_3"]){return false;} window["gf_submitting_3"]=true; ' onkeypress='if( event.keyCode == 13 ){ if(window["gf_submitting_3"]){return false;} window["gf_submitting_3"]=true; jQuery("#gform_3").trigger("submit",[true]); }' /> <input type='hidden' class='gform_hidden' name='is_submit_3' value='1' /> <input type='hidden' class='gform_hidden' name='gform_submit' value='3' /> <input type='hidden' class='gform_hidden' name='gform_unique_id' value='' /> <input type='hidden' class='gform_hidden' name='state_3' value='WyJbXSIsImRhMGM2ZmNhYjdjNjM5OGNjZGQ1OTBhMjNmMjAzMzExIl0=' /> <input type='hidden' class='gform_hidden' name='gform_target_page_number_3' id='gform_target_page_number_3' value='0' /> <input type='hidden' class='gform_hidden' name='gform_source_page_number_3' id='gform_source_page_number_3' value='1' /> <input type='hidden' name='gform_field_values' value='' /> </div> </form> </div><script type='text/javascript'> jQuery(document).bind('gform_post_render', function(event, formId, currentPage){if(formId == 3) {} } );jQuery(document).bind('gform_post_conditional_logic', function(event, formId, fields, isInit){} );</script><script type='text/javascript'> jQuery(document).ready(function(){jQuery(document).trigger('gform_post_render', [3, 1]) } ); </script>