I worked for 20 hours over a period of a week. The app was built within a day and rest 6 days were a hustle to tune the result accuracy and publishing it on play store.
From the perspective of software engineering process, it was a tough job to deliver production ready app within a week. I wonder now, how I did that! It was couple of years ago, have shipped many products within 20hrs after this. Back then, I had no idea about sprints. Today, I break it down into pieces for you.
Day 1: Idea
Each week we used to have one day when we choose to do nothing except talking to the team members. Sometimes we hit some ideas which we can't resist to ignore. If it is not related to work, we embark on a journey to build something useful within a day.
On one such day, Gautam(a Desi friend who had been back from US) started talking about the personality types, personality tests and some more related things. I was listening reluctantly. Even after seeing that I was not interested, he kept talking about how authentic and scientific these personality tests are, how MBTI test is being used by organizations in recruitment, employee well being etc. Yet, I was not impressed.
My take: personality tests are bullshit, everyone has unique personality. So to judge personalities accurately for everyone, you'd need to define billions of personalities, one for each.
And above all, however scientific it is, personality tests are boring so I really don't care about them. But conversation started to get interesting. We started discussing if there could be any scientific base to categorizing personalities and we got to know about Raymond Cattell, a psychologist who defined 16 personality factors. Which has been translated into practical use with different models such as MBTI.
These are 4 categories in which traits are divided
Favorite world: Do you prefer to focus on the outer world or on your own inner world? Two extreme ends of this are Extraversion or Introversion.
Information: Do you prefer to focus on the basic information you take in or do you prefer to interpret and add meaning? Sensing vs Intuition.
Decisions: When making decisions, do you prefer to first look at logic and consistency or first look at the people and special circumstances? Thinking vs Feeling.
Structure: In dealing with the outside world, do you prefer to get things decided or do you prefer to stay open to new information and options? Judging vs Perceiving
Doing more reasearch on the subject, it seemed interesting scientific field to know about. Gautam forced me to take an MBTI test. The results seemed accurate but I had wasted an hour in doing so. I was engaged with this activity and the next step on investigation was to talk to a real psychologist. Gautam happenned to know one, I talked to her and things were much more clear. We figured that results based only on these tests were not reliable, life data and experimental data is much needed for accuracy, but also got to know that Raymond Cattell's research is quite authentic and reputed.
I was bored by now so I randomly searched for personality types of famous celebrities and listed down people with whom I shared some personality traits and results I found were of "Will Smith" and many more who were my favorite actors, these were the personalities I connected most with, I saw a bit of me in them.
And here comes the thought which led us to actually think of building an app:
Do we feel more connected with people who have similar personality traits?
On a small sample size of me and Gautam, it seemed so. Having good reasoning is not enough, we needed to test it on bigger scale. What if we ask people their favorite celebrities, will it show us their personalities?
Day 1-2: Brainstorming & building App
We immediately outlined UI of a simple quiz to show two celebrity faces and ask the user which personality do they like. Another 5-6 hours and I built the app and this was the result
Day 2-4: Testing, failure and improvement
We didn't see it happening, poor results. After testing with some friends, we figured out we need to go deeper in logic to make some sense out of the user interaction with the app.
Even if our hypothesis was true, Will Smith being favorite doesn't mean I share the exact same personality, it may mean that I share some personality traits and there will be some errors due to biases which we need to rule out(e.g. a male user may choose a female actor over a male celebrity, choice here is not related to personality trait but attraction for opposite sex). And that can be solved with more questions. But me and probably most of us wouldn't like an hour of test(I wouldn't like even 5 min). We set out to minimize the number of questions being asked but it was more than 256 choices we needed to give to get accurate results, so we needed to improve the algorithm. We made it smarter by learning from the each answer and then presenting the contextual question which will help us to move towards conclusions faster.
Day 4-7: Testing it again and tuning
We shared with friends again and this time people were getting impressed by seeing the result. There were some glitches though for some people. We tuned the weightage to certain parameters added one text question and we had a perfect product. We published the app, google rejected us for using the images of celebrities and we had to remove the images and then publish again.
And that's when we had the final app released within a week, 20 hours of work. The most important part of this post is what's next
"Learning without reflection is a waste. Reflection without learning is dangerous." - Confucius
Before reading further, you may play following music for an amazing reading experience
Learning: How to ship products faster
- Think minimal: This one tops the list because almost every product owner is in illusion that they are thinking minimal while there is a lot to cut down. Top reasons of this illusion are
- Emotional attachement with the idea
- Fear of failure
- Not accepting the fear of failure
- Counting features as matrix for success
Simplify the idea, pick one thing that matters, leave the rest. Trust yourself, be more open, definitive Yes or definitive No both are good answers.
- Small teams move fast
If we were more than 2 of us, it would have taken more time or possibly haven't been published at all. Even if you have a big project that cannot be handled by a team of <3 people, divide the project in small sub projects, give autonomy to these team of 2-3 people. For any software development project the magical combo is
1 designer + 1 backend developer + 1 frontend developer. Less is good. If you want to dive deep into this topic, read the book Mythical Man Month.
- Bias towards action
This is no brainer. Be biased towards action than ideas, on ground your hypothesis gets bashed up pretty fast, which is good. Users' feedback makes the whole process of "getting it right" fast. Make mistakes fast.
- Redefine perfection with ability to iterate
When thinking of executing a project faster, I see people thinking that they need to let go of their habit of perfection and it bothers them a lot. It used to do the same to me, but here is a bigger perspective for you. Don't change your habit of perfection, think perfection in long term instead of short term. To achieve perfection in long term, you will need to make mistakes faster, exposing yourself to users who will say that your app is bullshit. Live with that for "long-term perfection". It would have taken you more time figuring it out by yourself or wouldn't have been possible to know without shipping it to users. Ship it fast and be honest to your users and then listen.
- Don't reinvent wheel, get help
Ride on the shoulders of giants and experts. In our case it was Android platform, open source libraries and experts opinion on the subject.
- Minimize systems to manage
Can we do this without deploying a server? More the systems that app needs to interact with, more the workload. Go local whenever you can. We made everything work locally, it benefited in speeding up things and maintaining privacy of users. It wouldn't have taken much time to spin up a server but it would have definitely have taken up huge time to maintain, fix bugs, iterate, if we had server.
The fewer moving parts, the better!— Pradeep Sharma (@pradeep_io) May 10, 2018
- Work hard
Does it really need an explanation? If you are not ready to work hard, forget about everything else you learned here.
By the way building this app gave me some insights. Building an app that helps people learn about psychology of themselves and their friends requires a lot effort then only having ability to build app. When you really think the best for your users, it is not just about showing some information on screen. Think about the environment and mental conditions they will be in when learning this new piece of information or having moving realizations about thmeselves and friends. When someone is in stress or suicidal conditions, should we show the information in plain english that can be understood or something that makes it something fun which helps you see things in a positive way, rather than negative. I think the latter one. We did that at a pretty low scale with a simple tiny little idea but doing it on a big scale, requires a lot more psychology expertise, which is a costly business while the app doesn't make any money(would you pay $10 for a fun app that helps you understand deep questions about yourselves or your known people?). So we did not give any update after releasing the first stable version. If you think we made a mistake and we should release the next version, please checkout the app and support it's development by sharing this post with friends, share with me the features you'd want in the next version. Invide community is always ready to contribute to projects which can make an impact. Email: