October 01, 2017
Taking an idea from paper to the app store 2 years later
I often find myself looking at different problems that arise on a daily basis and trying to think of ways technology can alleviate or solve the issue. Due to the constant chattering in my brain of new ideas, I have filled many a Google spreadsheet, sticky notes, and loose-leaf paper with all of the thoughts that come to my mind.
One such thought happened on (or around) September 13th, 2015… (Special thanks to Dropbox for the date the photo below was saved). On this day, I jotted down an idea that would request access to a contact’s Camera Roll for a certain date period. The app would let you select a person from your list of contacts, select what dates you wanted all of their photos, and then send them a request, in which as long as they accepted, would grant you access to all their photos within the date range. Like many of my other ideas, the idea stayed on this piece of paper for quite some time…
The problem I wanted to solve
After time spent with friends or family, there are usually pictures on someone else’s phone I want to save on my own device. Whether it’s after a concert with friends, a holiday with family, or some random event, I feel like I’m always asking someone to send me their pictures. I quickly have come to realize that my friends don’t sometimes do well when being pestered to “send me your photos!” Getting my friends to perform the daunting task of selecting the photos and putting the added effort of actually texting them to me, was just a fight that I knew I could never win. Thus the idea for Gmme was born, an app that would make requesting and sending photos to and from friends as easy as sending and accepting a Venmo request?
On March 22nd, 2016 I wrote the first line of code for a React Native project I called react-native-yourStuff. This was a project I originally created to help solve the problem mentioned above. This would then become the beginning of my path down learning both React and React-Native, and would eventually lead me to my final app, Gmme.
Initial UX/UI Flows (this came a little later when I decided I was going to rename the project, Gimme)
I coded on this project here and there for a few months but wasn’t making the progress I would’ve liked and felt myself getting stuck on several challenges along the way. In addition, when I initially started react-native/yourStuff I was working at Priceline where I was concentrating on Angular on a day-to-day basis. Two months from the start of this project (in late May of 2016) I found myself on a different team, in a different state, working for a startup company called Jet. Here my new team was primarily using React, and other technologies that were brand new to me at the time (Redux, GraphQL, Webpack, etc). Disheartened from not making much progress react-native/yourStuff, and having a wealth of new information to learn, I decided I would shift my focus, and spend my time concentrating on getting adjusted to this new job and all the technologies we were using. Therefore, react-native-yourStuff/Gimme took a backseat for a few months.
Fast-forward to the beginning of 2017, and I decided I wanted to pick up where I left off with react-native-yourStuff and finally get it on the app store. Working with React everyday at Jet had helped me learn so much. With my newfound knowledge, I decided that I would review the code I had initially written for react-native-yourStuff, and when I did, it made me cringe. Rather than refactoring the entire project, I started a new project, and so on January 18th, 2017, a new repo was created on Github, Gimme.
I worked on Gimme for about 2 months before old problems began coming up again. I was making better progress than I previously had but there was one problem in particular that kept holding me back. The ability to send photos from one phone to the other, and do it at a speed at which a user wouldn’t give up on the process was proving to be more difficult than I originally intended it to be. While I had the process working, sending only 10 photos, would take well over a minute, and in a time when every website and app is instantaneous, this was never going to work.
Having again lost momentum, and motivation to continue on Gimme for the time being, I decided I wanted to build something quickly and get it on the app store within 3 months. I decided to work on something small enough that would be quick to build, help me learn the iOS App Store deployment process, and give me the confidence boost to finally finish Gimme at a later point.
On March 25th, 2017 I started a new project, Goodbye Contacts, that would be an easy way to get rid of the unwanted contacts from your phone. It didn’t need any database, because I wasn’t storing any data, and it didn’t need a signup/authentication process because there was no user information to save, so it was the perfect, quick app to build. Two months later, after a few speedbumps, I had pushed my first app to the iOS app store!
It felt amazing to watch something go from lines of code, and a few images on my computer, to an app that other people could use and try on their own devices. Goodbye Contacts was never meant to be more than a way for me to learn how to get an app on the app store, and prove to myself I could go through the process of building an app, end to end, so once that app was deployed, I wanted to focus my attention back on Gimme, my true passion. So for the 3rd time now, on May 26th, I started a new project on Github, but this time with a cool, secretive name…
3rd Time's (almost) a Charm
To help visualize both short term and long term tasks I wanted to accomplish, I bought a whiteboard to act as a constant reminder as to what needed to get done next. I set an early goal to have Gimme deployed to the app store by August 25th… 13 weeks from writing the first line of code.
I figured having a hard deadline in place, would push each week to work towards the deployment and it did.
One of the first tasks I completed was buying a domain name for the app’s landing page. Because I couldn’t get any domain with the word Gimme in it, I dropped the “i” (like all cool startups, and Brooklyn pop-up shops do), and purchased getgmme.com.
Not long into me working on Gmme did I run into the same problem that I had run into before: It was taking too long time to transfer photos from one use to the other. Luckily I came across a library that had been recently developed, React Native Firebase, that allowed me to connect my backend services, to my app, on the native side rather than the client side, greatly speeding up several processes that were taking way too long in the past.
Everything was coming along great throughout June and July, and then came early August came. One of the biggest headaches I find with developing iOS apps through React Native is that the development environment can at times be a pain to work with at times. Running an app in development mode locally on your device can work fine one day, and then suddenly xCode has issues the next. These issues are hard, if not impossible, to track down, thus grinding productivity to a halt. Several times when I sat down to build a new feature, or fix a bug in app, I found myself trying to figure out why the app suddenly wouldn’t run.
Then during the first week of August, my app suddenly stopped connecting to my database. I couldn’t pull any data, nor could I push any data to it. Without the connection to the data, Gmme was useless. One solution I tried fixing was that the library I had been using to connect to my data, React Native Firebase, had a new version recently released. While I was using v1.X, v2.X had come out a week or so before. So, I upgraded to v2.X, in the process upgrading my React Native version, and React version to support it. Then, not only was I not able to connect to my data still, but I had several issues with the latest version of React Native that I couldn’t hunt down.
4th Time's a Charm
After more than a week of spending mornings and evenings trying to hunt down several bugs, that felt like chasing ghosts, I started a new project to see if the problems would persist there. I started with just seeing if I could get the database to connect properly, and that worked! I then checked to see if I could transfer photos at the same speed I was previously accomplishing it, and that worked. So on August 15th, with the “ghost” bugs apparently gone in the new project, I started moving over my app, piece by piece, in what was now my 4th rewrite.
Despite the setbacks and a week of essentially 0 productivity, I still thought I could hit my initial target date of getting Gmme on the app store by August 25th. One day before my target I submitted Gmme to Apple for review and …
I had a few minor issues I had to resolve in my app before Apple would fully accept it into the app store, so after a few updates and tweaks, I pushed a new version back up to Apple, said a little prayer, and on September 1st, I received the following email from Apple.
Gmme, was on the app store! It was such an incredible feeling to see an idea that was, two years ago, a few scribbled lines on a piece of loose leaf turn into a real life, working app. Building Gmme taught me a taught me so much, from expanding my understanding of React Native, learning several new libraries, nuances with the app store deployment process, and various tools for creating icons, app store photos, landing pages, and more. It’s been an incredibly challenging and fun journey, and I’m excited to continue building out new features and improving it any way I can.
Now Comes The Hard Part
Getting people to actually use it!