I have been thinking about this for a while now and I have finally found the time for it. I used to live in a suburb where there were lots of international students. More specifically international Chinese students… who were smart and over the years I made good friends with lots of them. English however, is not their first language and often times they feel they are held back by it. Hence, in this post, I am going to talk about the requirements for an app built to help non-native English speakers get better at English. The rest of the post contains the following,
- User Story
- App requirements
- Technical requirements
The aforementioned contents should tell you what to expect from this post, let’s start with the background.
As I mentioned before, I have a lot of Chinese friends and they are such awesome people. After meeting them, I realised that once I got past the initial communication barrier, they had a lot to say. I tend to talk a lot, yet some of my Chinese friends talk way more than me. Even though they struggle with their limited English vocabulary, they somehow find a way to communicate their many many stories.
Over the last few months, I have been working with the natural language processing API for iOS. You can see it, in the apps that I have released such as “Captain’s Log” and “My Simple Notes”. Both of which have a natural language processing component.
Combining the above factors, I wanted to use my knowledge of natural language processing to build an app that can help my Chinese friends improve their English. Now, the reason why improving their English is important is because some of my friends want to stay in Australia after they finish studying. To do so, they have to demonstrate competency in all aspects of English as it’s part of their migration process. Therefore being better at English may just help them accomplish their migration goal (should they have one).
I want an app that tells me what to say, listens to what I say and tells me what it heard me say. So I know, if I am saying things the right way or not.
Give the user a sentence to say and wait for the user to say it back.
If the user responds in time then analyse the text and repeat what the app understood to the user.
Ask the user whether or not they want to try saying it again.
Keep track of the user’s performance with respect to getting questions right.
If the user doesn’t repeat what was said in time, then maybe show the next question? Or wait for the user to click the “Next Question” button or something similar? (Maybe a bad idea since it puts too much pressure)
A generator of sorts that generates random words and contextually arranges them to form meaningful sentences. Hmm maybe a bit of an overkill for the first version of the app?
To simplify things for the first version, the app downloads the sentences from a RESTful API. The API is dynamic and can be updated independently of the app.
Or for speed of execution, we can just hard code 30 to 50 sentences for users to start with.
Perhaps categorise the sentences as easy, medium and hard? This combined with keep track of their performance is starting to sound a lot like a game? If pursuing this line of solution building then what’s next, leader boards?
For the UI, maybe have a Chat style interface? So the app (AI) says something followed by the user saying something? Then a back and forth conversation between the user and the AI.
Ohh what accent does the app say things in? Should we default it to the accent at home i.e. Australian English accent? Ok, other than specifying loyalty, to consider global reach, how about USA (American) English accent? Their film industry is the most popular. Their TV shows and movies (Hollywood) are watched by people all over the world.
What platform should the app be made in first? This one’s easy, iOS. All my Chinese friends use iPhones, ALL OF THEM. From my observation so far, Apple has an incredibly loyal fanbase in them. This combined with my previous experience in iOS development make iOS the platform of choice for the first release.
Have a strings file with some 30 to 50 sentences that the app can use.
Select a sentence from it, display it as text for a UILabel on the view. Keep count of the words in the sentence or allocate a time window for the user to say it?
Read it using text to speech and ask the user to repeat it.
As the user is speaking, transcribe the speech to text and count the words said. Once the word count reaches the word count of the sentence, stop it.
Create a data structure that saves the question information. It should have the question text, the user text, time attempted and the score.
Place two UILabels in the view. The first label shows the original sentence, the second one shows what the user said. Maybe highlight the words user didn’t get right in a red colour?
Say to the user what was understood from the sentence and notify on the words the user got incorrect.
Show a question label, with two UIButtons to try again or next question?
Create another view that shows a tabulated list of scores for the user.
The first release of the app will be a generic version that could work for anyone who wants to improve English. Region/User specific customisations such as Chinese localisation will be added in later updates.
This post was the initial requirements gathering stage for creating the new app. As I have done in the past, I start things off with a one (maybe 2) line user story that captures the essence of the app. Then drill down into technical details and in this post, I was also showing my thought process brainstorming implementation details.
Being able to build something to help my friends is a win for me. I am glad I have finally started working on an idea that I have been thinking about for some time. A few personal events including moving homes have delayed this.
As usual, if you find any of my posts useful support us by buying or even trying one of our products and leave us a review on the app store.