In a previous article, we had written about how to create web services that are accessible, intuitive, and inclusive. We had discussed how digital transformation when done right, which puts the user first and builds around the customer experience, leads to all-around operational efficiencies and citizen adoption of the services.
The good news is that our suggestions were taken, and Kochi Corporation moved its services to the Sevana web portal. Birth, death, and marriage certificates are now available online for Kochi residents, with no need to make an in-person trip to the corporation offices.
Digital transformations are hard, made harder by the confusing tech-speak and over-the-top promises of the technology providers. However, there is no denying that #DigitalIndia has been a spectacular success. Over a billion Aadhaar numbers have been generated. Over 5 billion UPI digital payment transactions are processed every month with a gross transaction value of over $100 Billion. The Ayushman Bharat Digital Mission is creating a health facility registry and making health records portable and the Open Network for Digital Commerce is creating a level playing field for small merchants. Aadhaar provides the foundational digital identity service on which some of these other digital services have and are being built.
I recently went through the process of getting an Aadhaar. The typical steps are to go to an Aadhaar Seva Kendra, fill an enrolment form, provide proofs of identity and address, and get your biometrics captured and photo taken. Once done, you are given an acknowledgement slip with a unique 14-digit enrolment number.
The acknowledgement slip states that you can check the status of your enrolment after 20 days and the Aadhaar generation itself could take 90 days. The enrolment process itself was fairly straightforward.
After 20 days, I called the Aadhaar customer service number given in the acknowledgement slip. The agents can converse in English, Hindi, and the regional languages. They were helpful, but the response that I got was that their servers were down and to check back a month after enrolment.
Repeated calls to the service number, different agents, all asked for the enrolment number, and gave similar responses – either that servers are down or give it at least a month.
The Aadhaar Check Status Form
It turns out that UIDAI, the agency that issues the Aadhaar numbers, has an option that allows you to check enrolment status online. I needn’t have called support. The Check Enrolment Status clicks to a form that lets you enter an Enrolment ID to check status.
The form has validation checks and grays out the Submit button till you have entered a valid Enrolment ID. The figure below shows the validation error when you miss out numbers in the Enrolment ID. In this particular case, only 13 numbers have been typed.
Once you have entered the 14-digit enrolment number, the Submit button is activated and all you have to do is enter the CAPTCHA, which also has field validation – it confirms that you have actually entered 6 characters.
After you enter the CAPTCHA (you will be lucky to get it right on your first try but more on that later), and hit Submit, you get the following message – We couldn’t complete your request due to temporary errors in accessing our backend services.
This can happen when services are overloaded. I waited a day and tried again and I got the same message. This was no different from what the customer service agents had been telling me that their servers were down. I had gone down to an Aadhaar Seva Kendra to check status and the person there commented that – our servers are down quite a lot.
You would expect that a foundational identity service like Aadhaar, to be hosted on a high availability infrastructure with several nines uptime. It couldn’t be that services can be down so often. I took a look at the form again and realized that I had got it all wrong. Well, not just me but most of the Aadhaar customer reps and the folks at the Aadhaar Seva Kendra. It was not just a form that had to be filled and submitted, but a puzzle that had to be first solved before submitting the form.
Solving the Puzzle
It turns out that we had not read the instructions on the form. If you go back and read the instructions (who reads these things?), you will realize that,
- The Enrolment Number and the Enrolment ID are two different things. The Enrolment Number is 14 digits. The Enrolment ID is 28 digits.
- The Enrolment ID is the 14 digits of the Enrolment Number followed by 14 digits of the date and time of enrolment.
- A regular expression is provided for the proper formatting of the 14 digits of the date and time (yyyy/mm/dd hh:mm:ss).
- The date and time printed on the enrolment acknowledgement slip does not have a format specified, but it would be safe to assume in the Indian context that it is dd/mm/yyyy hh:mm:ss.
- You have to take the first 8 digits from the acknowledgement slip in dd/mm/yyyy format, reverse it to yyyymmdd and append the 8 digits hhmmss.
Regular expressions and date formats are second nature to most programmers. How many others will get it right? This is like making you go through the first round of a tech company interview, with an added trap door set up for you to fail. Let’s not do any validation checks if the number entered is 14 digits. We want to make sure that everyone who applies for an Aadhaar can read instructions, understand date formats and regular expressions, and can follow these instructions. We want to hire only the best.
If you eventually compose the 28 digits correctly, you will be rewarded with a very nicely done and color-coded status reporting. It visually shows you the different stages, what state your application is in, and even informs you the specific actions that you should be taking.
Finally, it is time to celebrate.
This is status and issue reporting done right. It visually shows you the various stages in the approval process, it tells you the specific issues, and it informs you the actions to take. What is sad is that almost nobody gets to see it. You have to feel for the programmer who coded this.
3 Lessons for the Aadhaar programmers
Customer experience matters. Perception matters. One simple oversight in a validation check in the form that was missed by the QA team, one generic error message, and the general perception is that the service is flaky. Every time someone checks the status of the application and sees the same generic message, this perception amplifies. What are the lessons to be learnt here?
Lesson 1 – Never expose internally used data structures
There is no semantic difference between Enrolment Number and Enrolment ID. Using the two terms to mean two different things just confuses people. Internally used structures or metaphors should never be exposed to the end user.
In a public web form, asking for just the 14-digit enrolment number is a security issue. Even if enrolment numbers are not generated sequentially, you can make reasonable guesses and get the status for someone else’s Aadhaar application. Combining the date/time with the enrolment number makes it impossible to guess a valid enrolment ID. You have to not just guess a valid enrolment number but also the exact time that it was generated.
Users should just see the 28-digit enrolment ID in the acknowledgement slip. There is no need for them to know the structure. In the code, parse out the first 14 digits of the enrolment ID and use it wherever you need an enrolment number.
Lesson 2 – Always distinguish an empty response from a no response
If you enter an enrolment ID that does not exist, the service will get back an empty response. If the service is down, it will not get a response back. This ‘no response’ case is typically an exception that needs to be handled in the code. They are two different use-cases and need to be handled differently with appropriate error messages. For an empty response, the appropriate user message would be – “Please enter a valid Enrolment ID.” Only for a ‘no response’ should the user message say – “We are experiencing temporary errors in accessing our backend services”.
Lesson 3 – All CAPTCHA’s are not created equal
On average, I had to enter the CAPTCHA between two to three times, before it let me through. The CAPTCHA uses a mix of distorted numbers, and lower and upper case letters. It is difficult to tell the difference between the number 0 and the letter O, lower-case l and upper case I, or even visually distinguish between lower and upper-case c, i, o, s, u, v, w, x, y, and z. Yes, you want to catch and exclude the bots but don’t make it more challenging for humans.
Doing the Form Right
How do we fix this and fix this right? The easy fix is to add a validation check if only 14 digits are provided and put a message in red that the Enrolment ID should be 28 digits and how to compose it. This just fixes the trap door but does not really solve the problem with having to still manipulate regular expressions.
Let’s fix it right.
- In the acknowledgement form, make the label Enrolment ID and put all 28 digits. Anywhere in the code where it needs the Enrolment Number, use the first 14 digits of the Enrolment ID.
- When you print the Enrolment ID in the enrolment acknowledgement form, print out the numbers in groups of 4 – 1234 5678 9012 3456 7890 1234 5678. This will make it much easier to read out to a customer service agent. Also, in the web form, if someone enters spaces, automatically remove the spaces.
- In the contact section at the bottom of the enrolment acknowledgement form, add the line — Check your enrolment status at https://myaadhaar.uidai.gov.in/CheckAadhaarStatus
- In the code, distinguish the empty response from the no response. In each case, verify that the message that the user sees is appropriate. Add test cases to your test suite and make sure that the error codes returned for the two cases are different. This is important for any service that you build.
- Change the CAPTCHA to one that is more effective at identifying bots without inconveniencing humans. A good option is reCAPTCHA – it uses your mouse movements when filling out the form to determine whether you are human. In most cases, no puzzles to solve, just a single click.
Focusing on the Customer Experience
Aadhaar is one of the foundational services of #DigitalIndia, providing a digital identity service on which other digital services are being built. The digital identity service is now being open-sourced and deployed to other countries too.
#NewIndia is aspirational and digital savvy. The digital infrastructure is in place and more and more government services are coming online. Now is the time to put the focus on the customer experience, to make it inclusive, intuitive, and frictionless, which will improve perception, and scale adoption of these services.
Hawkai Data provides a data-driven platform that leads with the customer experience. The Hawkai Data Customer Experience Platform (CXP) simplifies and accelerates your digital transformations. If you have any questions, talk to us at email@example.com, or follow us on LinkedIn https://www.linkedin.com/company/hawkai-data/, or connect with us at https://hawkai.net.
- The HTML Form That Cost ₹5 Crores, https://hawkai.net/the-html-form-that-cost-5-crores/
- Kochi corporation to issue birth & death certificates online from today, https://timesofindia.indiatimes.com/city/kochi/kochi-corporation-to-issue-birth-death-certificates-online-from-today/articleshow/85995929.cms
- Check Aadhaar Status Form, https://myaadhaar.uidai.gov.in/CheckAadhaarStatus
- An open source platform on which national foundational IDs are built, https://mosip.io/
- Digital Transformation Simplified, https://hawkai.net/digital-transformation-simplified/
- Digital Transformation Accelerated, https://hawkai.net/digital-transformation-accelerated/
- Enrol vs Enroll, https://grammarist.com/spelling/enrol-enroll/
* Header image uses photos by Koushik Das | Unsplash, Markus Spiske | Unsplash