Inspiration and Approach
This summer I worked on a web-application called Farket. Given there is 86% mobile penetration but only 18% internet penetration in India, I set out to develop a commerce platform for farmers to trade their produce. The idea was to give farmers in India access to the wide internet market place using text-message technology. By just texting rates and types of produce, farmers would be listed on the platform and buyers could access this information via either a web or a mobile interface. The whole app would be multi-lingual, giving farmers without formal English education access to this service.
I first did some Market research to nail down markets by crop type and the variables involved when dealing with agricultural produce. After deciding to prototype the application on Rice Crops in a large state to reduce the number of variables involved, I did some further research on the technologies that could be used. I was looking at scalable and maintainable platforms to build my app on. I settled on a web-framework called Web2Py due to vast amount of support libraries available on the python framework and easy deployment options (One click deploy to PythonAnywhere!).
After designing the User Interface and getting proper multi-lingual translations, I worked on setting up a mobile interface on the Android platform hooking web-triggers for specific text message events. Then I coded the web-backed to handle both farmers and consumers.
I did some user testing by asking friends and family to try the platform. Further, I approached an NGO working with rural farmers to test it out on a slightly larger market.
There were many deployment options, I chose PythonAnywhere for the prototyping phase because of its free-tier but kept the option of moving to Heroku or Google App Engine open, in case I needed more robustness and scalability.
I used a MySQL database for my back-end. This made it easier in performing relational queries when presenting information to the user. Reordering queries based on region, price, crop type, etc. was relatively simpler. I did not go for a NoSQL database because the added complexity in performing joins in the code outweighed the benefits of having scalability because of the limited nature of my platform.
I used git for version control. This made it easier to manage the code base and allowed the possibility for further collaboration in the future. It also gave me flexibility to add experimental features without risking a stable-build of my platform.
I made the text-message gateway on Android because of its wide availability, scalability and low cost.
In addition, I technically did use the GSM mobile technology and the internet at large, the scale of which is mind-boggling. Even though I did not have to build anything on top of them to support my platform (or had any viable alternatives!).
I ensured that the platform/software was fit for the job by making several adjustments for the target audience. One of which was making the platform multi-lingual as farmers in India are often uneducated and have trouble with non-native languages. Some other considerations was ensuring that my platform would be available to a wide range of farmers and they would not require additional training and/or infrastructure.
To ensure quality, I adhered to strict standards and conventions. The reason was two fold. Firstly, it would make the code readable and easier to debug. Secondly, it would make it easier to collaborate with developers in the future. Aside from this, at every step, I tried to optimise the code and reduce time and memory overhead. Even though, it wouldn’t produce a noticeable difference on a small scale, the effects on a large scale become pronounced. The network infrastructure is poor in remote regions of India, with this in mind, I tried to reduce network overheads for faster performance and did both server and client side optimisations.
On the technical side, it was a huge learning experience. I got to work with web-platforms, databases, mobile applications and various small technologies in the same project. I had to learn various new technologies, which was both fun and taxing. If I had to redo the project, I would look into better server side deployment, using caching techniques (perhaps, Redis) and concentrate on the User experience a little more.
One significant decision I made during the application process was deciding the front-end for farmers. It had to be simple to use without any additional technical training or added infrastructure. I zeroed down on text messaging because of its ubiquity. Setting up SMS gateways was expensive and non-scalable, on the other hand, smart-phones were cheap(and getting cheaper by the day) as well as powerful enough to route messages to the server. An additional advantage of having a distributed system that could make any Android powered smartphone into an always-on gateway helped me make the decision. It would be possible to scale it and move to any target country by simply inserting a local number. Coding the Android application to handle text messages and hooking web events for specific messages was straight-forward.
This was a large project for me with an equally big social impact. Farmers do not get the benefits of having access to larger market places and have to settle for cheaper prices for their produce. I learned that the last mile delivery of a product and the non-technical aspects are equally important as the technical side of things. I learned proper software development techniques which involve iteration and documentation. I got a glimpse of how real-life software projects are undertaken and the complexity involved. If I had to do things again, I would incorporate further discipline in my approach and work on better documentation.
Find the Git repo to Farket on my Github.