For the past 3 months I’ve been hard at work trying to make a new social networking app. The app is very straight forward, it is a platform where you can notify your friends when you are free to do something. Although there are existing apps in the marketplace, they all are lacking the simplicity or completeness of what we expect from such an app.
Background
I began my app with a simple idea at the beginning of the year. Like most ideas it began with some ugly notebook drawings. I pulled an all-nighter trying to build some basic UI for the app as per my sketches. I think I had done a fairly good job at that point, but seeing how far the app has come, my original UI was by far below modern standards.
Oh what a long way its come since I’ve started. I’ve learned so much these past 3 months. I learned the basics of using Node.JS, utilizing all that AWS has to offer, and a lot of features and practices common to mobile development. It was a fun experience to be the one to manage and completely set-up the back-end and front-end of the system. However, it was not an easy task, and I probably would not do it again.
Also, at the bottom of the article, I put some more of the techy details that pertain to the app and how I made it.
What it’s done:
###Losing Time So this is a given. I knew that I would lose so much time working on this app. I knew I wouldn’t have time to go the recreation center anymore, play the guitar as often or even get my classwork done as promptly as usual. My nights tend to be longer and the days tend be shorter. Heck, I spent my entire winter break except for that week I visited LA, working on this app. I’ve worked on it in my free time and I spent all of spring break finally adding enough touches to publish it. Count all those hours during my breaks and school, I know I spent a solid 200+ hours on this app. Of course, that’s not counting the time I usually spend in class (yes, I should be taking notes) to draw out the flow-chart diagrams on how the app should flow. I lost too much time working on this, and the sad thing is that it’ll never ever be 100% complete.
###Losing Sanity So you know what happens when you spend so much time on something? You start going a bit crazy. You’re walking back from class, subconsciously talking to your friends, but in deep thought on how to implement the structure for friend requests in the app. “Hmm, I wonder what would happen if I did this? " You close your eyes, and you would expect to dream of your future wife, home, and goals, but instead all you get is the logic of a for-loop that keeps iterating through the contacts list on your phone. That’s the problem.Working on this app, I realized that all my sanity was taken over by the insanity of the jumbled code and organization of the app. There is no-end.
###Health and Sleep I think your health is really affected by pulling the all-nighters when programming. You see, I don’t consciously stay awake till 3AM everyday, it kind of just happens. My hand’s typing, my mind is racing, and before you know it’s waaay past 12. You see, I don’t think it’s really about the code that makes programming addicting, I think more of the final product. I think what really keeps me up is telling myself that “I just want to see it work.” The problem is that you always feel like you know exactly what to change to make it work each time your program fails. Sadly, it just so happens that even after a 100 times of endless attempts fixing your broken code, you still somehow, have more ideas to keep fixing the problem. So unknowingly you stay up hitting that play button hoping to see the code work at some point or another with your changes.
Now sometimes, I tell myself that I’ve crossed a line and I need to go to sleep. However, my mind, which continues to think about the problem, even when I’m in bed, prompts me to reach for my phone. So I quickly take my phone out and I end up reading through forums and stack overflow questions, in bed, from the faint light emanating from my phone. One link leads to another. I’m learning so much, but it’s for sure going to take a toll on my health.
Programming isn’t really a clean job as many people tend to make it out as. Will you make a fair amount of money? Yes. I’m sure. However, the tradeoffs are very clear. Programming is a dirty job and it’s not easy. I’m 100% sure that I cannot do this for the entirety of my life.
###Some Techy Details For those recruiters who might be reading this, future employers who might want to know a tad more about my skills,or app devs who want to know how I made my app, I made this section for ya’ll. Here’s a quick run down of the tech that went in to making this application a reality, and yes I can confirm that 100% all of the code and work was done by myself, including the ugly app logo (10/10, you’ll want me on your design team).
Front-End The front end was made using Xamarin.Forms. Xamarin.Forms is a platform that allows developers to use C# to create applications that can run and render natively for iOS, Android and Windows Phone. It’s awesome because students get a free license to use Xamarin, and I’ve also interned with them last summer, so I’ve become more pro at it. Anyways, I used C# do build my UI’s and write the wrappers for the back-end. The hard stuff here really came down to managing the threads and creating a smooth experience. I learned a lot about custom renderers, models for handling data and listviews to render data. Also, I can’t express how much I love the async/await modifiers in C#.
Back-End I think I’ll just say Amazon Web Services (AWS) as a whole for my back end. Like seriously, my entire app runs on AWS services, if they go down, so does my app. This probably would’ve been a great time for me to pick up on Microsoft Azure (given my upcoming internship at Microsoft), but I think the free tier of AWS and extremely low cost was super appealing to me. From user authentication, push notifications to data storage and database management, my app utilizes the AWS environment like no other. I use Amazon Cognito for user management and user distinction. I then utilize the attributes of Amazon DynamoDB to generate my storage platform for user data. I made use of AWS S3 to store user profile pictures (mastering image compression is a challenge). I also use Amazon SNS (Simple Notification Service) to publish and push notifications to a list of friends. I also messed around with using node.js and using Amazon Lambda to send my notifications, I realized it was just easier to make the calls to SNS from the client side. Node.JS got ugly really quickly, but at least I learned something. I use Nexmo for my phone number authentication.
Misc Of course, I also learned about so many things along the way. For example, Image compression was challenging, and I still didn’t master it. How do I compress an image to the ideal size and retrieve it without blurring it too much? All of the Apple APNS stuff was very confusing. Coming from a Windows Phone Development environment where everything is so straight forward, the confusing idea of provisioning profiles and profiles finally made sense after hours of tinkering. In addition, looking at native Swift and Objective-C code and translating that to the proper C# bindings was a unique experience. If I ever wanted to move to native iOS development, I know I could do it with all that Swift and Objective-C code I’ve been exposed to.