Saturday, December 03, 2011

Musings on improving customer experience at MTN and MTN Connect centres

Last week I made my usual trip to the connect center for MTN. As usual the staff were courteous and helpful but I came away unhappy.

It is my belief that some of the reasons that customers come in to the center can be better addressed via a careful blend of self service and better empowered customer service personnel.

On the days I have visited you get customers who have come in for a varying number of reasons from topping up their prepaid accounts to registering their SIM and signing up to one of the increasingly popular BlackBerry bundles.

It turns out that with careful construction of self service applications MTN could reduce the number of customers feeling the need to come in. Take a scenario where a customer needs to top up their account: they should be able to do so at the now ubiquitous ATMs in major city centers.

Having more staff empowered with smartphones running key applications that, for example, allow them to take card payments for a vareity of services - it is a mobile communications company afterall - would help manage the load at the connect centers. Second level customer service operatives can then better spend their time helping customers with more complex requirements. This would be consistent with the level of customer experience you would get at an Apple Store or Wagamama where tills are attached to roving and attentive customer service personnel.

My pet peeve at the moment is my current issue where I need a statement of expenditure on my prepaid mobile account for accounting purposes. Front line staff at these locations are not empowered to solve my problem and as a customer there are no self service options. So I am stuck with the lengthy and soul destroying process of writing a letter along with applying for a police report just to get a statement on my account.

I am hopeful that a customer-focused someone in the MTN hierarchy reads this and sets the train in place to make the necessary adjustments for improved customer experience.

Peace and Love.

Published with Blogger-droid v2.0.1

Monday, August 01, 2011

Enabling Xpather Firefox Plugin in Firefox 5 on Windows 7 after upgrading from Firefox 3.x

I have been messing around with the Selenium Testing. Again. I think if you have spent any amount of time trying to construct functional tests for your web applications you will have found that Firefox developer tools like the Xpather plugin indispensable. Well, I do. My problem recently was the fact that with an upgrade to Firefox 5 from 3.x this most useful of plugins was disabled.

Its original developer Viktor Zigo, much respect for his efforts, is taking time off so while wondering what to do to get it working in Firefox 5, I stumbled upon the plugin reviews
page and a particular comment stood out for me. It led me to a useful solution on how to get this plugin enabled on Firefox 5. Without further ado, here it is.

This part of the post assumes that you had the plugin installed and working previously in Firefox 3.x and are on Windows 7.

  • To get it working update the install.rdf file which can be found in your Windows 7 install at the following location:
    Do adjust your username and actual profile directory to take into account your install specifics.
  • Restart your Firefox and Xpather 1.4.5 should be now be re-enabled.

Thursday, June 30, 2011

WebDriver querying Text Nodes - Lessons learnt

Earlier on today I ran into an odd problem while using WebDriver as part of my ongoing foray into Cucumber as a DSL. I was to trying write automated tests that verified that a link (a tag) had a text node. I could locate the link by an xpath locator.

I can hear you ask why this should be a problem. It was because the link looked as follows:

It turns out the usual WebDriver incantations along the lines of findElement(By.xpath("arbitrary-xpath")).getText() was returning nothing for the link's text. I looked around for a while and found that the only solution I had was to look things up via Javascript seeing as there were no ids to fallback on.

In the end it worked out that document.evaluate became the saviour of the day, since it allowed me to make xpath queries on a document. The result is a java step definition and cucumber feature file that look as follows:

UPDATE: Changed the step definition file so that the xpath lookup is done in WebDriver instead of in the javascript seeing as xpath lookups cannot be relied upon in Internet Explorer.

I suppose you could argue that the html could be changed to be better. True, but atimes that might not be an option. The purists will argue as they do here that it isn't a feature that should be provided by WebDriver but I think it would help to have a way of traversing the DOM once you have looked up an element. I should like to read about other creative solutions to a problem of this nature.

Monday, April 18, 2011

Nigeria Decides Results so far

Just got hold of the data for this weekend's Nigeria Presidential elections from the electoral body's website and I thought I'd share the same data in graphical form.


All Party Votes so far - Front Runners

All Party Total Votes so far




















Akwa Ibom










Tuesday, March 29, 2011

Neighbourhood surgeries - how can mine be improved?

This just feels like it could be better.

So I call to make an appointment at the surgery this morning and am told all morning slots are gone. So what about afternoon slots then?
Well, new slots are released at 2.30pm and you you can't book till then. This is after spending about 15 minutes in an automated telephone queue. Did I tell you that I hate them? What is the guarantee that I will be allotted a spot if I call in at 2.30pm? What if everyone also wants to call in at the same time? Sounds like a lottery arrangement. On a health service. BAD.

In the end I think an automated service should be put in place. I also think surgeries firstly should operate like normal businesses. What do the folks at the big golden arches do when loads of customers consistently walk through the door at an outlet? They scale up the site by hiring new hands and when this doesn't help they open a new one nearby. What has my friendly neighbourhood surgery done? They have resorted to handing out a 0844 number along with instituting an appointment lottery scheme. BAD.

In the end of the day, the lady on the other end of the line offers to have a doctor phone in some advice sometime in the day. She has made a judgement call that the condition doesn't warrant my being bothered to see a doctor. I am grateful for the offer but there is something faintly worrying about some lady at the other end of the phone deciding over the state of a surgery client's health (or access they get) without the proper experience. Might I add without the training for it. BAD.

Three strikes!

Enough ranting for one morning. I just thought I'd let it all out.

Be well.

UPDATE: They have called me back with an appointment. Result! That usually helps but I can't help thinking that some other guy might have been unlucky this time.

Sunday, March 06, 2011

Cucumber DSL for Selenium Testing - Take 2

After poking around with Cucumber, Cuke4Duke and Selenium, I liked what I saw and started digging around for more interesting bits. I have moved from selenium 1 to Webdriver(Selenium 2).

One of the minor problems I have had so far is that the browser windows don't get closed after my tests completed.

I saw a number of attempts at solving this including having a tagged @After hook on the last scenario in the last Feature. None of them really jumped out at me until I read a question to the group and that led me to give a JVM shutdown hooks a go (equivalent to Kernel#at_exit in Ruby land). That seems to work quite well and lives well away from the features and steps making for cleaner code. It also means that we will have a clean suite of features that don't get polluted by technical detail.

Do take a look at the full thing on GitHub. Let me know what you think.

Tuesday, March 01, 2011

Cucumber DSL for Selenium Testing - Take 1

I have had a few hours to play with Cucumber tests using cuke4duke by Aslak Helles√ły, a very useful addon to Cucumber which makes it possible to write step definitions in several JVM languages. I have gotten it to the point where I can write Cucumber Features and Scenarios for very basic tests. I hope to write in more detail about my full findings and thoughts later on.

I have set it up so that it can be built in Maven. The pom.xml file can be located here. The project structure is pretty simple and can be structured as follows:

|-brandhub.feature (source can be found here
| (full source can be found here)
|-pom.xml (source can be found here)

All you then need to do once you have the above structure is run mvn clean integration-test and you should be on your way. Your test results can be found in target/surefire-reports. I have included html and junit reports. You will also find that there is a pretty console log of your features and your scenarios.

Please note that the first time you run you will need to append the following system property to your maven command line:


This will make sure that the cuke4duke Ruby gem and its dependencies are installed. If you don't do this, you will most definitely get an error along the lines of:

Error opening script file: /.jruby/bin/cuke4duke

Let me know what you think.

Peace and Love.

Tuesday, January 18, 2011

Thoughts on collaborative consumption

Last night I read the excerpts from an interesting book on parenting, the Chinese mother way and thought it was an interesting book and wanted to read the full thing.

My dilemma? Buy or borrow. Now don't get me wrong, it is an interesting book now but I know it won't be once I am done reading it.
THe Buy or Borrow question would have been easy one to answer if we had parity in the utility of digital and conventional assets.

With a 'real' book you could easily buy it and resell it online without any qualms. You could loan it to a friend of family member in a heartbeat.
Not so with a digital/e-book. There is a lending feature on Amazon that allows you to lend out books for up to 14 days but is not enabled on all books.
Well what if I wanted to resell an eBook after I had read it? How does one put a value on a transaction like that? Is anyone even considering that model?

These questions have now come to the forefront of my consciousness after I watched Rachel Botsman's TED talk on collaborative consumption. Is anyone thinking along the same lines?
I'll buy the digital version of the book because its lighter and is a greener choice but I'd like to get more utility AND value from doing so.

Thursday, January 06, 2011

Oracle JDBC Driver wahala - the conclusion.

Yesterday, I told you about my ordeal with the Oracle JDBC Driver and the cryptic Non supported SQL92 token at position: x message I was getting.

Turns out that the problem was that when running the script in Continuous Integration builds, embedded SQL92 syntax escape processing was enabled by default.

In the end, the solution was to turn off escape processing so that code behaviour is the same whether run via Continuous Integration or as a standalone SQL script in SQL Developer.

In conclusion, I still think the guys at Oracle should implement better error messages, as this would have saved me loads of time.

Be well.

Wednesday, January 05, 2011

Oracle JDBC Driver wahala.

Happy New Year, folks. My year has started rather eventfully, as I have spent the most productive part of my day trying to resolve a problem with a DDL statement being executed as part of a product CI build.

The problem? There is a stored procedure on a project that I am able to run successfully via Oracle SQL Developer but have been unable to get working as part of the build. Currently, the Oracle JDBC Driver spits out the following nondescript SQL exception message: Non supported SQL92 token at position: x. X in this case seems to be some arbitrary location in the script ( this currently resolves to end of the file, meaning it has been misdiagnosed), which I cannot decipher as being an invalid token.

What would have been useful in the exception message, and I hark back to the days of Oracle SQL*plus, is a line number and column number with some mention of the errant token.

I am still trying to manually debug this problem in the hope that I am able to resolve it, as no successful build means no check-in. My suspicion is that the driver is doing something nasty or is unable to properly deal with a token that should ordinarily pose no problem.

I am using a v10.x Driver.

If you are reading this, have you encountered a problem like this recently? Any light you can shed is appreciated.