Skeleton first, muscles later.
The title tells two things about us: our approach in building stuff and our love for (presumably) witty one-liners, puns and jokes that are going to be sprinkled throughout our blog.
The skeleton for the tech infrastructure at Roposo started taking shape when we launched our first recommendation platform for gifts — giveter.com. When I joined the house, there was an internal tool already in place in PHP (Please Help, Please). We named the git repository giveter_rocky and true to its name, it still lives, punching new developers left and right and left again.
Thankfully, Avinash had already realized that going forward, our web backend cannot be built in PHP, and we had to decide between Java/ Python/.NET (more like LOL.NET). Without any over-analysis of performance metrics, we chose to go with Java assuming it would be easier to get Java developers on board if we ever manage to get the kind of money that lets us hire a tech team (we did). So Java it was.
There were plenty of old school frameworks in Java, but we thought of experimenting with the Play framework. The framework did not encourage but made it particularly easy to build a monolithic system. It took us only a month to go live with a fully functional website and internal tool. We chose MySQL as the DB because why not. There was no reason to not choose the most stable DB that was available for free. giveter_firstblood it was called, the repository.
We were hosted in a cheap German infrastructure until it went down twice a month and we decided to move to Amazon Web Services. It was a quick decision, one with which we still agree, a few years and 50 servers later.
Months passed, SEO kicked in, traffic increased and we never required any drastic changes in our tech choices. The skeleton was in place and strong. With our continuous learning and improvements in the recommendation, we thought of undertaking a bigger challenge, help women discover their everyday fashion needs. Thus, Roposo was born.
There was no way we could ‘tell’ women what to shop, they had to find that out on their own, in a place where other women were also looking for inspiration. It was evident, there had to be a social network at the core of our platform. The database of choice had to be a graph, not MySQL. We didn’t want ‘joins’ that could make the new skeleton weak. Out of the many graph databases available, we went ahead with Neo4j. They were a fast growing start-up and not to mention their love for The Matrix Trilogy (yes, we take these things seriously). It was fun to learn the power of a native graph database. There were a lot of learnings which call for more blog posts (hold your horses, we will put it up soon).
Play framework had come up with its version 2, which was leaner and more evolved. We started using MongoDB for everything that was not in the graph. With more people joining the tech team, we thought of splitting the codebase just like different services that would make the bigger system. So this time, it was an army of skeletons, each growing their muscles at the rate best suited for them without increasing the weight of the system as a whole. It was something like the very famous micro-service oriented architecture, except some services were not micro, they were mini. Sherlock, Flash, Reverse-Flash, Amazing Spiderman are some of the services that make the current system. Each has their own story, we will tell you all about it shortly.
As much as I hate preaching (and bugs), I would still like to list down a couple of broader learnings that we have imbibed in our culture as a team:
- Never take shortcuts, while coding or otherwise. There has never been an occasion when some shortcut has not come back and bit our asses. Use that layer of caching (that you were too lazy to add) if you don’t want your service to be down because the DB is taking hits while you are busy doing shots.
- Never pre-empt optimization but build with scale in mind. In a fast moving environment, you never know how a particular feature would evolve. Wasting precious time on experiments that serve nothing but your academic hunger, would only slow down the progress.
Well, that’s all for now. As a great cybernetic organism said once, I’ll be back.