Problem Solving with Programming (Part 1)

September 15, 2019

Introduction

The ChiPy Mentorship program is a unique opportunity to work one-on-one with a mentor on a project of your own choosing. One of my goals coming into the ChiPy Mentorship program was to learn how to use programming to solve problems. Another was to learn practical aspects of programming, such as Git workflow and software architecture. I'm in the web development track and wanted to make a Django app that had a social impact.

My first contact with the ChiPy Mentorship team was with Zax, who was great at helping me with a request that I had.

Ideas

Lightbulb

At my first one-on-one with my mentor Austin, we brainstormed possible ideas. In the past, I had read a Reddit thread about app ideas. Someone had suggested an app idea to help find missing persons. In a missing person's case, people typically form a line, walk down the forest, looking for a missing person. Well, how do they keep track of the places that they've searched so that they know what place to search next? I was unfamiliar with what happened in real life and assumed they'd mark it down on a map somehow. The idea intrigued me. But then I thought about limitations like, "What happens when you get to a place without GPS?" I shelved the idea in the back of my mind for another day.

Prior to getting into the ChiPy Mentorship program, I had talked to software engineer Robert Heaton in one of his office hours, a one hour session where you can get advice about programming. I talked to him about app ideas and told him about the missing person's app. He suggested that I simplify the case. Instead of making an app about looking for a missing person in an area with no GPS, assume that there is GPS and look for missing pets in the city. I thought that was a great idea. But again, I wasn't sure how to go about making this idea come to life as I had no experience dealing with geolocation and map data. Thankfully, I feel I now have the support to finally work on this project.

The App

The app is meant to help one person or a group of people search for missing pets on the street. Using GPS or geolocation data, the app tracks each person in the search party. The user sees their own path on the map. The paths of everyone else in the search party also shows up on the same map. This way you can tell where people have searched already so that you can then search in other areas.

Outline of My App
Click here for a PDF of the outline of the app. I expect things to change about my app over time. For example, I wanted the name "Search Party". It turns out there is already an app called "Search Party" out there that helps people in a group keep track of each other at a music festival. I don't know if all the features will be implemented as they will be implemented in the order of highest to lowest priority. In addition, I expect the app to evolve during the process of building it out. Ray, another member of the ChiPy Mentorship team, kindly offered to help me find people who I could interview for research purposes. With Ray's help, there's a possibility that I could interview people who've lost pets and see what their experience was. I could then incorporate this info and hopefully improve on the app.

Things I've Learned So Far

• Do your research and be open to possibilities but be decisive

I researched the different ways GPS is calculated in a smartphone and its limitations, such as accuracy in different scenarios. I also researched the possibility of how to implement the app itself. There was the question of whether I should make it a pure web app, a hybrid smartphone app, a native smartphone app, or a React Native app. With my mentor's help, I was able to find the best way to proceed. He was able to be decisive and say that the accuracy of GPS on a smartphone was good enough and that the best way forward was implementing the app as a pure web app.

• Simplify

Simplify your complex problem into a problem that's easier to solve. In the case of this app, we put aside the edge case of no GPS. We simplified the app by turning the app from a missing person's app in the forest with no GPS to a missing pet app in the city with GPS. We simplify the problem on two factors: human vs pets, no GPS vs GPS.

Also, as I was outlining the features of my app, I had put in every action that was supposed to occur. This is good when you want to get the complete picture. But when you build the minimum viable product, you just want to simplify the app to the most basic features to get it working.

For example, in the final version of the app, the owner of the pet creates a page which shows the profile of the missing pet. Another person, who wants to join the search party, can click on a button on this page, asking the owner if they can join. And then the owner can approve or deny this request.

To simplify this whole process, Austin said to leave out the whole dialog of asking to join the search party and the approving and denying of the request. If someone wants to join the search party, let them join automatically.

• Write down the features and prioritize them.

Prioritize the features by high, medium, and low. Write how long you expect to take on each feature.

• Use what's already premade to get the minimum viable product.

My app consists of features such as login, logout, sign up, and resetting a forgotten password. Austin suggested that I try to use what's already premade in Django as much as possible in order to build these components. This way the building process could go much faster and smoother.

Closing Thoughts

So far this experience has been great. I'm looking forward to learning more. I'm grateful to have gotten into the mentorship program with leadership members who've been supportive. And I'm very fortunate to have been paired up with a mentor who's been really patient and knowledgeable.

Read the next post:
Problem Solving with Programming (Part 2)