marketplaces, Rails, Ruby

Building an Online Marketplace MVP

I’ve officially “graduated” from General Assembly‘s web development immersive. What an incredible journey it’s been – from learning the basics of a loop to building full-blown web applications.

For my final project I decided to work on a business idea my Dad and I have been thinking about for the better part of this year. The company is an online marketplace. I won’t go into more details at the moment since we are still in “stealth” mode, but over the next year at Columbia, I plan to dedicate a substantial amount of time building out the business.


Needless to say, I’m stoked that I’ve been able to build a “minimum viable product” (MVP) for the business – in other words, I have a prototype of the marketplace which I can use to validate whether it’s something potential users would consider paying for. I coded non-stop for about 2 weeks to get the application running. And while it’s a fairly basic platform, much of the core functionality is there. Education aside, I’ve spent less than $100 to get this up and running.

I built this application using a very “English-like” programming language called Ruby and a popular app-building framework called Rails. As a programming noob, Ruby on Rails is pretty remarkable since you’ll have the basics of an application up in a matter of minutes. This allowed me to focus more on the unique aspects of my application instead of the basic plumbing. Rails is fairly opinionated and stresses “convention over configuration”, but if you stick the to Rails Way of doing things, building an application becomes a lot less daunting.

Ruby on Rails makes building web apps much easier – and much more fun.

As I built the application, I faced three big challenges:

1) Database manipulation: I built the application using a relational database called PostgreSQL. Personally, I struggled to figure out how to link my users to listed items and any possible orders. This was further complicated by the two-sided nature of a marketplace. Users could be categorized as either “sellers” or “buyers”, and their orders broken down into “sales” or “purchases”. Conceptually, this is not difficult to grasp; correctly connecting the associations, however, was tough to get right.

2) Payments: These days, getting payment processing on your application is fairly straight-forward thanks to application programming interfaces (APIs) such as PayPal or Stripe. APIs sound fancy, but they are nothing more than instructions for applications to talk to each other. In my case, rather than build out a payment processing platform from scratch, I incorporated a couple lines of code from Stripe, and voila – I can now process transactions! Although incorporating APIs is much easier – and arguably more secure – than building something as complex as a payment platform, placing the code in the right place and grabbing the right objects resulted trickier than what I initially anticipated.

Stripe allows users of my platform to make purchases. Their sensitive information never touches my database.
Stripe allows users of my platform to make purchases. Customers’ sensitive information never touches my database.

3) Design: For this application, I incorporated a styling framework called Bootstrap. The framework injects some basic styling into the application, but what I particularly like about Bootstrap is that it takes a lot less work to get the app to be “mobile-responsive”. That said, re-formatting the entire application to make it look professional is very time-consuming and tedious. I wanted my application to look simple and professional, which is easier said than done when you don’t have a design background.

I love the fact that I’ve been able to build something (actually, several things) this summer. Skipping a summer internship and learning to code instead has been one of the best decisions I’ve ever made. Programming has pushed me to my intellectual limits and humbled me so much. Programming has also taught me to think about things from very different angles, and challenged me to leverage my teammates in unexpected ways. Most powerfully, programming has opened my mind and afforded me the confidence to tackle difficult problems by using software in productive and creative ways. As I get ready to go back to b-school, I look forward to present the marketplace to potential customers, further flesh out the MVP, and eventually build a real technology business in Latin America.