My Auction Framework MVP
I have been a huge fan of eBay since the moment I first found it (back in 1997 or so). It truly was the world changing marketplace because:
- It quickly gained critical mass with worldwide populations of buyers and sellers.
- The auction format is easy to understand and allowed the market to determine the prices.
- It was an early web 1.0 company that thrived after the dotcom bust of 2001.
Over the years, I have seen both start ups and established companies launch would be competitors to eBay. Some try to stand up some cheap package and others build a custom enterprise solution, but just about every one of them dies off with a lack of interest or sustainable business model.
I have to admit, I have always thought it would be a lot of fun to stand up auction functionality (either as part of an existing site or as a stand alone project). I have built out 2 pretty feature rich versions customizing some canned scripts (one in ASP and another in PHP), but I did not feel they offered enough value to bring to production. I wasn’t really happy with the quality of the user experience of either solution and didn’t really want to commit myself to needing to extend either of those technologies.
The Project
I am a big fan of quickly launching usable features and then iterating on them based on the learning from users’ interactions (lean/agile development). Since I run a community full of prospective auction buyers and sellers (SportsCollectors.Net), I thought it would be a good place to test this type of functionality.
The first thing I needed to do was to determine what use cases my Minimum Viable Product (MVP) would need to accommodate in order to provide value. My vision was to create some of the core user experience of eBay circa 1999 (well before the recommendations and the magento shopping cart integration).
Since SportsCollectors.Net already had a design, an active user base, user/login functions, messaging, and user rating/feedback, I was able to leverage these elements and not even have to spend time on them. So I could focus on these core auction related functions:
- Buyers need ability to browse/search for active auctions
- Buyers need the ability to view the auction details
- Buyers need the ability to place bids (with proxy logic)
- Bidders need to see a list of active auctions they have bid on.
- Winning bidders need to be sent payment instructions once the auction has ended. This included associating the auction with the Trade Manager framework so feedback could be given.
- Sellers need the ability to create standard auctions (no support for reverse, dutch, or fixed price formats). This must include support for image uploads, payment methods, and categories.
The next thing I did was to create a very basic entity model that defined the key objects in the system, the porperties to describe them, and the actions they can perform. The diagram below shows the corresponding data model (which has since been refactored a bit):
I spent about 3 days of my train commute (2+ hours per day) coding the user functionality on the site. Below are screens of the browse/search and auction details pages:
The proxy logic for bidding took the most time of any function. There are a few involved scenarios to accommodate, like when the bid is not high enough or when high bidder raises the maximum bid amount. It was certainly helpful to have built out robust unit tests (validating all the fringe scenarios) before writing any implementation code.
I was really happy to not have to worry about creating a look and feel or generic user management functionality. The look and feel can especially be a huge time suck.
The Test
I decided I would run a test of 50 auctions of vintage sports cards of star players (mostly Hall of Fame caliber). All auctions would run for 14 days and have a starting bid of $0.25 (the median retail value of the lots was around $8). I figured the best time to have them end was on a Sunday night between 8-10PM EST.
I spent another 2 more hours scanning the cards and entering the information for the auctions. To expedite the process, I wrote a small console application to trigger a scan and then divide a scanned image into individual images based on coordinates – much like a photoshop macro.
To let folks know about the new functionality, I posted a simple announcement the site’s message board and the site’s Facebook page:
Other than these general announcements, I provided no additional information or instructions to how everything would work. My hypothesis was that this member base was familiar enough using auctions to figure out how it would work. In the event there would be questions, they could reply to the message board post.
The Results
I’d like to think the auction was pretty easy to use, as people used it to get some good deals. It had 43 different bidders made a total of 163 bids. 47 of the 50 auctions resulted in sales (85%), for a total of $65.19 ($1.38 average).
On the final day, the auctions saw 24 bids, 10 of which were leading bidders raising their proxy bid amounts. I had figured there would be some items were people would bid in the last few minutes, but it did not happen. Of course I didn’t take into account that the Oscars and a new Walking Dead episode may have distracted people during that window.
There was a theme on the message board (which saw 30 replies to the announcement) and via personal messages/emails, that members liked the auction feature. Many had expressed interest in using it to offer their items for sale.
I am interested to see if everyone pays for their winnings, and how timely the payments are. We should know over the next few weeks. I am also interested to see the preferred payment methods for buyers (Paypal, check, money order, or cash).
Conclusions
This was fun and I am happy I decided to 1) build this MVP during my commute and 2) run a set of auctions. I think the feature set that was part of this first test offered the right functionality.
I intentionally made starting bid very attractive to promote interest, as well as picking items (vintage star cards) that I knew would garner interest at these low price points. I likely spent more on the cards than what they sold for, but it was well worth it to get some tangible feedback on the idea.
I have not yet decided if an auction service is viable to run – either to be added permanently to the site (only open to members) or living as a different site.
I have also considered adding the following enhancements and offering the framework to others (maybe open source):
- Buy it now and fixed price listings
- Allowing other sellers can list
- Options to charge listing and/or final value fees
- Watchlists for bidders
- Notification when outbid
- Notification when your auction is sold (for seller)