 Hello. Hello, everyone. I'm Gyotin. I work at SocialCops. Now, before I start to talk about building for next billion, let me tell you what we do at SocialCops. SocialCops is a data company that exists to derive decisions that can solve problems that matter. For example, Google tells us the quickest route home, but not the safest. I can find a restaurant around me in two minutes, but what about finding a grade school for my sister? Now, before you start to talk about predictive analytics and visualization, the problem here to solve for is there is no data. So we build Collect. Collect is a data collection tool that has been put into hands of our 150 non-profits that leverage their field volunteers to collect data from remote parts of the world. Collect has been used for disaster management during Nepal earthquake, maternal mortality in Uttar Pradesh, and then water and sanitation management in Indonesia and also for village development in Andhra Pradesh, Maharashtra, and Jharkhand. So after writing 46 K lines of code, collecting over 30 million data points, and 50 field visits later, here's what I have learned about building for the next billion. So this is our average user. Who is she? She is Pramila. She is a seventh class pass. She can read, write, and speak only in Marathi. She lives in Raigad in Ruler Maharashtra. Recently I visited Ruler Maharashtra and there is lack of internet access and electricity. This is her first interaction with a smartphone which cost rupees 2000 and 3000. So while building for Pramila, I learned my first lesson, colors for next billion. Whenever a user answers a question, so collect is basically a questionnaire app, so there are different questions on that. So if user answers some question on the collect, so question number turns green, giving a notification to user that you have answered this question. But due to some buggy code, for one of the question type, the question number was not turning green. That was a small bug for a developer. But during a field visit, a field volunteer came and said, Sir, this is not working. So that was a big worry for a field volunteer. Imagine your grandparents, when they use a mobile phone, they will feel that they will break it. But how happy they will feel when they can play music or talk to your video. We're dealing with the same audience type. And also field workers, like interact with phone on the field, when there is a large sunlight. So using contrasting colors actually helps greatly in ensuring that users understand app faster. Now as we talked about icons, let's talk about how to use icons. How many of you know what this icon means? Everyone does. This is simple. But for a field volunteer, this is something new. He doesn't know what this icon means. So using text with your icons, like if you can see there, if you use text with the icons, it actually helps field volunteers or the users who are coming using the phone for the first time, that what does this icon mean? They will actually know that if I press this button or this icon, what will happen? Now as I mentioned, Promila can speak only in Marathi, right? And read only in Marathi. So let's talk about language for the next billion. So as Promila can speak, read only in Marathi. So we included Marathi language in the Collect app. But Promila was using an iBolt app, which does not support Marathi as a default language in the language settings. Which is a problem with I think all the low-cost devices. So what we did was, we included the Change Language button inside the app itself and gave user an option to select a language from a list of supported languages which is present in the Collect app. So if you're building for next billion, language has to be an app feature and not to rely on the phone. So this is a list of languages we had in Collect and we gave a button so that user can select from this list of languages in the app itself instead of going into settings in the phone and changing the language. Because you're not sure which phone user is using, right? So we included it in the app itself, so it doesn't matter the phone he is using, he can directly select a language from the app itself. Now let's move on to our lesson number four, which is building for infrastructure constraints. Before that, let me show you an interesting picture. So this is an image of tablets being charged at night during one of our deployments in Maharashtra. So if you can see, like, there is one extension and then there is one charger connected, one extension is connected to another extension and these, like, during a deployment, like, there are about 350 to 400 tablets that we need to charge. And area in, like, as Collect is deployed in areas like Riger where there is lack of electricity also. And field worker is always on the field during the day time and he is only able to charge only at night. That is also when electricity is present. So we can't consume large amount of battery, right? So best option, like, good practices would be if we are building for next billion or for the people who belong to ruler areas, right? So best option will be not to run background services all the time. Like, background services consume a large amount of battery as we all know, right? And then not to track the location. Like, it's better to track the location only when we need it. Not to track location every time. That is another main cause for battery drain. Another thing we can do is we can use battery historian which is present in Android Studio which is a great tool to track battery consumption by the app. So as we talked about battery, let's move on to network which takes us to our most important lesson building for offline world. So as collect is being deployed in areas like Riger, right? So in that demographic area, the internet is very slow or not at all present. The average speed there is about 10 kbps or 20 kbps. Not like 5, 10 mbps where we test over app and generally we say, yeah, we did this thing, yeah, it's working. So yeah. So collect experience has to work offline. We can't say that like we are not able to download your data because you are on slow internet because the main audience we are dealing with is in ruler area. So we can't complain that you have a slow internet or something. It has to work offline. So what we did was to give offline support either we can follow anything like we can go to with SQLite which is a traditional way of doing giving offline support or we can use Realm. Realm is a mobile-based database and it's very simple and way faster than ORM-based SQLite available currently in the market. Another thing is creating a seamless experience. As collect is being used by people who are using a low-cost device which is worth rupees 2000 and 3000 and they have a low memory and certain issues. So it's very difficult to provide them a seamless experience. No matter how many null pointer and out-of-memory exceptions we add but it's very difficult to give them a seamless experience and nobody want to see this message on a screen like your app has crashed, right? So like in collect we have one, like generally in a questionnaire they have 150 questions and if you answer, suppose I answer 50 questions and then app crash or phone goes off. That will be frustrating, right? Like I will feel like let me uninstall this app, right? But we gave an autosave feature so whenever a user answers a response it will automatically get saved. No matter whether app goes off or app crashes the data will be saved always. Like he can come back to the app and see the data. Ultimately, like we are building for people who are using phone for the first time and also they don't know how to report bugs. They can come onto Google Play Services and say that like give a feedback that this is the bug or this is the problem I am facing. So what I have learned in the last one year or something the best way is to go on field, ask your users see how they are interacting with the app, how they are observed their behavior with your app, talk to them, take feedback. I feel this is the best way we can build for the next billion. This is an image of a field training during Vijaywara deployment. So there were people who were using paper for I think their whole lifetime and they are taking surveys on paper. But and this is the first time they were using a tablet. So at the start of the session we need to train them how to swipe, how to turn on and turn off GPS. And also at the end of the training we generally ask them a question. How you feel about whether you want to use a paper again or you want to use mobile. And this is the number of people who said we will use mobile. And this gives you a satisfaction that if you see people who are using phone for the first time and they are using mobile app for the like and the app they are using is the UR app. And this gives you a satisfaction. This is all about I have to say about next billion. Thank you guys. Any questions you want? Sorry. We are using that. And plus the like file storage as a backup. So we have two methods basically because most of the users are like from rural area. They can log out. They can log out at any point of time. So we need to keep a backup. So tomorrow if they log out by mistake or something. So we have a backup of that like they have. Because if they log in again we will have a backup. No auto saving is basically like we saved draft. So whenever some user answers the question we will basically trigger a method of like saving it into the XAML set. So there is an object basically answer object which will automatically get saved. So basically it's like it's not still production. That is like they are releasing updates every week. When I started it was 0.60. 0.60. Now it's 0.86. I think there is a new version. So they are also removing but there are some thread issues also. Like you can't use an object from one to another thread and there are some certain other issues also. Like if you want to write you can't write an object at the same time. Like you need to make a synchronous module to write objects. Then if those are the issues then still why you are using SKR? Because realm is provides you an object oriented support also. Like it's a good structure then you can define keys also. Like if you can write a good quality code like you can synchronize all the calls then it's like you can go with realm also. Like it will take a huge basically you can say that use time at the first but once you are comfortable with it it's like very good database. Have you used data migration as well? Yeah. Migration on film? Yeah, migration is there in realm. So they are building that. So what kind of feature is there? Is it good? So migration is basically something they are developing it. There is no like they haven't documented it properly but if you like debug it or try to build it sit for two to three days you will be able to figure out like how to do it properly. Have you compared it to any of the ORM existing like Greendow or something? No, I have tried I think active Android. Okay. Active Android I think which is a SQLite way but I like realm more. Okay. Any more questions? We have about five minutes more. So as you are having that string option in the app itself like not from the settings, right? The language. Language is in the app itself so if you want to select some language like I want to see my app in Marathi so I can just go into the settings of the app and then change from there. So have you abstracted out to something because like if you are doing it from the Android perspective it manages it all. But the problem we faced is like in low-cost devices there is no language options. Some languages are not like I want to see Marathi, right? Yeah, that's fine. So my question is like how you abstract it out like have you inflated the layouts again or like? No, so there is something in Android which is localization. Yeah. So you can use localization and call that function and you can change the language. So that is basically per session base. Okay. So it won't change permanently for all the apps on the phone it will just change for that app. Thank you.