LaunchedMotionShot- Make informative screen guides for your products, tools, and SOPs!
Published on

How I built MVP in a week!

Authors

I will start with a strong note, this MVP is a failure! So, it’s not a success story. What I want to write about is how to quickly build MVP, how can you chop features to be just absolutely minimum but covers the core purpose of the product.

Product

I had this idea in my mind from long back.

What if you create a platform where, people come create a discussion room on a particular topic. People come to this platform, see all the topics that are live and can join the room to either participate or silently watch the discussion. Discussions are text based.

I never got time to work on this idea either because I am busy with my day to day work or never took it seriously. As time passed, Clubhouse evolved to to the peaks and it hit me so strong that it is very similar to the idea that I have been thinking but it’s voice based.

I decided to try it out if text based still works.

Process of MVP

As little experience I had, I knew that jumping directly to build product is of just no use. First we have to validate if spending some time to build this is worth or not. I asked few of my friends, if such platform exists, do you come and participate in the discussions? I got mixed responses. So, as every developer thinks, just do it, I just felt lets try it out and remove the idea from my mind if it does not work out.

From the starting point

I was clear that I should build as minimum as possible to just validate the idea.

Being a python developer for a long time, I just checked what is the quickest programming language through which I can build this project. For the front facing application, as there is no other option than Javascript I decided to use the same even for backend as Javascript is having good libraries to work with sockets. Another reason I chose Javascript is I have worked on it for a long time so that I don’t have to spend any time to lean it.

First I thought should I create a git repo to start with. I decided not to because it is just not necessary as of now. There is no other person who is working on it and I did not decide where would I host it, how deploy it etc. So starting a repository would just increase the friction.

I just created a project locally and started working on it. First I started implementing the backend stuff. So I played with sockets for some time, used a firefox addon to interact with the web sockets that is implemented in backend. I decided not to use fancy socket.io kind of tools. Reason is again the same

it is just not necessary as of now

If I use socket.io provides I have to spend time understanding their features, decide how to use them and I am pretty sure it would not be as simple as using the native sockets on Javascript. Within couple of hours my backend was ready to receive socket connections and send messages!

I spent some more time and add expressjs to listen to few http requests. The reason I used it is I know how to use it. I added code which can allow

  1. People to host a discussion room
  2. Send request to join another room
  3. Start discussion
  4. Close the room after 30 minutes

I thought these are the core functionalities required to represent the idea I have in mind. So I stopped adding any more stuff.

The next immediate thing to implement is the frontend page from where people can do all above actions. I was confused whether to go with plain javascript or old school jquery or fancy React/Angular/Vue. I understood plain javascript or jquery are losing the reactive nature. Which means I would be writing lot of code to make view and the logic in sync which I did not want to do and spend time unnecessarily. Angular is straight out of my way as I have very little experience with it. Left with React and Vue.

I have decent experience with both of these technologies but I recently worked on Vue and I always liked it over React because of its simplicity. Besides, I am not up to date with React these days so the option I left with is Vue. It feels less stress when you are left with only one path ahead!

I quickly added

  1. Few cards which represent rooms
  2. A “Request” button on room so that people can send a join request
  3. A “Host” button on top of the page using which people can type a topic and start the discussion

By this time, I think I entered second day of the process. The only missing piece on the frontend side is the actual discussion screen. I just made it a modal and implemented all required components like

  1. Title of the discussion
  2. Host name
  3. Participants and Requests with approve button
  4. The actual discussion feed which looks like whatsapp chat screen
  5. A text box where people can type and send the message

This took me some time as this is the core component. Hola! I implemented all I wanted through which I can validate the idea sharing it with multiple people.

When I thought about sharing it with my friends to use it, I need some way of authorization system in place. I did not want to spend any time on it. So,

I hardcoded few usernames and assigned some random passwords in backend

And next thing that came to mind is, where do we store all the users, rooms, discussions etc.

I decided not to store them at all! Just keep them in memory

The downside of it is all the information will get lost if I restart the server and the process has very limited memory to store. Both of the constraints were absolutely fine for me to start with. So saved lot of time dealing with design the data schemas, storage, all related issues.

I finally created a personal git repository and pushed the code so that I can host it on the machine which I host my personal blog. For testing it was fine. I hosted, got a url to share.

I shared the url within my friends group. People started using it, they hosted rooms, they joined few rooms and started discussing about the topic. Which was good. I quickly realized few features without which people might misjudge the idea.

Summary

This post is already so long to discuss about MVP phase 2 😀 I will write another post where I will discuss what are the missing features, why I had to build android application, how did I do it quickly, how did it fail and what did I ultimately learn

For now I attach few screenshots so that you can understand what I built actually. I named it “Discuss Party”

I recently started being active on twitter where I post my experience with technology and building stuff. You can follow me here https://twitter.com/pramodk73

DiscussParty sample screen 1
DiscussParty sample screen 2