While in between jobs, I've been catching up on reading -- something I can never get enough of, even when in between jobs and have plenty of time. The book I was reading is a well known bestseller, "Hooked". The ideas in the book are very convincing and make whole lot of sense. The best way to test out the ideas, is to implement a proof of concept product. That's exactly what I'm about to do. I will have to come up with something I can do quickly. Something I will not be ashamed of publishing in the wild. Something simple, yet elegant. Something that is "addictive" (in a good way), something the users will find interesting and will want to come back to. Yet, something simple enough that I can implement it in only few days. My challenge is to create a fully functional app for iOS and Android, with some backend in KOA2/Postgresql, hosting it on AWS Elastic Beanstalk. I only want to use the latest and greatest tools and technologies currently available; I want to use Swift over Objective C, KOA2 over Express. I also want to make sure that when my little app goes viral I will not have to rewrite it to make it scale to millions of users. Therefor, I will have to spend some time thinking upfront about a decent enough software Architecture and Design while also using the auto scaling feature of Elastic Beanstalk to help out.
After all, seems like a good challenge -- a variety of different technologies, fairly aggressive schedule, ambitious product goals. It's going to be an interesting few days.
Side Note: My new jobs starts in little more than a week. Once I dive head into the new gig, I will have no time to work on any skunk projects, and, most likely, the new employer will make me sign some draconian paperwork, which would make them an owner of all my inventions, even if I come up with any of it in my sleep. Most companies do it these days anyways, so, not a big deal. But, this along is a great motivator to complete this challenge right before the new job starts.
Here is the Idea: I call it "What I saw Today" -- WiSaw.
Wherever I go, I'm always taking tons of photos with my smart phone. So, I want to make these photos available for everyone nearby to see for up to 24 hours.
As a user of this little app, you will see only what's happening right here, right now.
This is the most minimalistic social network possible, yet, it's probably the most relevant one as well. It's relevant in time and space. You only see what may potentially matter to you. You do not choose what you see. As such, you do not have to spend time and effort making connections, describing your profile etc. You just start using it. No sign up, no sign in. Just view the feed which will always stay relevant for your location and time. If you see something you do not like -- you delete it, increasing the quality on the content for everyone, reducing the noise.
I spoke with my son, who is an iOS Software Engineer, and as a millennial, he is generally more informed about all the social networks that are out there. His initial response was -- do not do it, something like this already exists. Snapchat does something similar already, they call their feature "Snap Map". Let's see. Apparently, this Snapchat feature is a big privacy threat https://www.theverge.com/2017/6/23/15864552/snapchat-snap-map-privacy-threat
What's the concern? "Snap Map will broadcast your exact location to anyone on your friends list every time you open the app."
I will have to make sure to be very careful with not revealing the exact location of the users. This means I should stay away from using maps, which makes my life easier, and the application simpler -- exactly what I want.
The challenge becomes even more interesting. I have to figure out, how to make it even more minimalistic and allow the users to post photos without registering at all. The problem is that iTunes review team requires the publishable content to be reportable, as well as the offensive users to be ban-able, otherwise your app will never be approved. I believe, the Google Play Store is less stringent about it, but, if I will be implementing the same exact concepts for both mobile platforms, I will have to go with the stricter rules, so it would make sense to start with iOS to see how it comes out. I will work on the Android app while waiting for the iTunes approval to go through. To address the iTunes review requirements, I will have to spend an extra effort on figuring out how to associate each device with generated UUID. This way I will be able to know which device the content came from (so it can be reported or banned), while the user would not have to register and would stay completely anonymous, yet -- transparent. It's too bad Apple deprecated their API method for getting a unique identifier for a device. So, instead of using native API, we will have to fall back to one of the many free libraries available, and store the generated number in KeyChain. This way we guarantee uniqueness which will also survive re-installs of the app. On Android things are slightly better, there is an API method that returns a unique device identifier, from which we can generate UUID, so we will not need to store the number in local storage.
As some genius once said: if I had more time, I would have written a shorter letter.
I definitely need to put some more thinking into making this truly minimalistic, yet useful, and somewhat original and different from Snapchat.
My friend always tell me, "Dmitry, all apps you come up with look like they were designed by a software engineer". I take it as a complement, but, I have to stick to my strengths and weaknesses. If I avoid any complicated designs and UI work and use only what's available out of the box, it may work out after all.
What my MVP would look like? I envision it having only 2 screens. You would land on screen #1 which shows you a list of photos sorted by proximity (potentially infinite scroll Pinterest style). No sign up, no sign in. Just open the app and start seeing relevant content.
There will be only one button in the top nav to snap a photo. That's all. You can click on a photo in the list to see a detailed image view (screen #2). The detailed photo screen will have to have a menu item to "Report Content", which will also delete the photo from the system. More than 3 reports for an image that came from a particular device, and that device is banned from posting. The photos will automatically disappear from the feed after 24 hours, so that you really would only see the photos that were taken closest to you with in last 24 hours. The notifications and sharing with friends (to ensure a viral nature) are "nice to haves" and definitely not for the MVP, though definitely something to work on as a next priority after the MVP is released. Looking to the future, to make things even more interesting, eventually it would make sense to implement photos grouping by distance:
right here <0.1 km (miles?)
near by <1 km
close <10 km
far <100 km
farther <1000 km
really far <10000 km
farthest >10000 km
The measurement will be hidden from the user anyways, so it will not make a difference wether to use a metric or imperial system. The user will only see the words like "right here" or "farthest". This way it also addresses the privacy concern of Snapchat -- the users will never know exact location, nor even exact distance.
Time to roll the sleeves up. I'm starting on the iOS piece first. Here is the public repo where I will keep my code: