Or “The importance of using an API”.
Back in late November, I started spending time with a girl that I had been working with since the previous July. We bonded over our mutual tendency to be work-a-holics. She was in Grad School at the time, and never seemed to quite be caught up with work, and I was spending a lot of my weekends writing code for VHL. The way this lead to us hanging out was her saying, essentially, “Hey since we are both working weekends anyway, maybe we can do it together.”
This lead to my first attempt at writing a Browser Plugin.
Kelly and I discovered that we were both using the website OkCupid - a vaguely social networking site based around dating. We had entirely different uses for it, but both of us having a background in web development and user experience meant that we had a lot of problems with it. After going over a few of these complaints, we discovered that there was enough here to justify a browser plugin. Given that I was looking for something new to work on, and wanted to learn about the process, I decided to pick it up. The plan was that we would discuss problems and solutions, I would code them, and she would test them. It turned out that we did not get that far, though not for the reasons that I might have expected.
I assume that OkCupid does have an API, given that they have a mobile application, but even if that is the case, it is not available for public use. The situation that I got into was that I had to write functions over their existing functions. It also meant that anytime they changed something, my “adjustments” were at risk of being overriden. After Match bought OkCupid there were a lot of changes that came out, some of which I did not agree with. They seemed to be removing features, though oddly, not out of a desire to streamline, because the site is still as complicated as it has been for years. It has, though, tried to go more in the direction of other applications. While the founders were very interested in the match percentage math, and the algorithms for their questions, the new owners seem mostly interested in “getting people banging”. For instance, the mobile app has a “Swipe left or right” mode that is essentially identical to Tinder.
The new look of OkCupid with large tiles
Pretty_Okc Option 1: Tighter tiles
Pretty_Okc Option 2: Wide tiles
Pretty_Okc Option 3: Classic
Even the “Matches Search” went in a direction that I felt was oddly confusing. Rather than seeing any information at all about a user, you saw these large, vaguely polaroid-style images that gave you information like username and reply frequency and match percentage. Personally, I felt as though this was a screen where you did not need most of that. If they want to promote the idea of it being based on looks, then why does it matter what someone has for a reply frequency? I actually find that that bar does not matter at all - if you want to message someone, you should do it.
In the images above you can see a few of my changes. For the “Tighter” tiles look, all I did was shrink the images down and remove some of the data. You still get their age, location, and match percentage. But their username and reply frequency are gone, and there is far less wasted space. “Wide Tiles” brings back some of that information, but still keeps the profiles looking more orderly, again, with far less wasted space. In each of these layouts, I also included a “star” icon so that you could tell what users you had rated before. An empty star for a rating of 1 or 2, a partially filled star for 3, and a filled in star for 4 or 5. Finally, I also introduced a “Classic” style, representative of how OkCupid used to look, with a couple of tweaks.
OkCupid used to track and display content from the part of your profile that was most recently edited. This was always something that I found kind of cool, but was certainly data that I did not have access to. Instead, I did the next best thing. I broke down each section of the User Profile (Self Summary, What I am doing with my life, I am really good at, Favorite books/movies/shows/music, etc) and on the Options page, I allowed users to set them by priority. What this would do is search for the highest priority one first - if the user did not have anything entered for it, it would go to the second. Despite being based on ajax calls, this worked somewhat well, partially due to the layout restricting the number of users that could be called at one time.
A shot of the Options menu with priority settings
The browser icon displays your unread messages count, updating in real time.
Filtering rated users by rating. Also - saving notes for users.
Adding favourited users to named lists (Screenshot courtesy of Kelly).
Icons on the profile, including enhanced saving to favourites menu
One of the most “unique” features to this was the ability to manage your “favorite” users. OkCupid gave you the means to add a user to a list of favorites, but from there you could do little with it, and if you had a tendency to store multiple people, it could become easy to forget who was who. Interestingly, this was not a feature that I ever even used - possibly because of the rigidity of it. Kelly on the other hand used it religiously. She had dozens of users on her saved list and had the idea for me to add a way to sort them into groups. Once they were in groups, I enabled them to be filtered by them, and it made it much more manageable to see who you might have wanted to.
Also included was reintroducing a feature that OkCupid had removed: the ability to save private notes about people. There were lots of other features planned - a setting to hide profiles that you had messaged before, a setting to hide profiles which had no content. There were two big features that I was in the process of writing that I was very excited about. One was an option to hide users if I am not in their age range. The OkCupid search lets you specify the age of users that you want to look at - but does nothing about letting you know whether you fit within their age range. Along those same lines, I had in mind the idea to add a “Filter” to your inbox, so that you could automatically hide / grey out messages from people who did not meet your age (or match percentage) requirements.
By this point, it was February. I had been working on this for a couple of months - barring a few weeks that I spent on vacation in England. My list of bugs in Github was getting lower, and I was capping off the last few features that I wanted to write before releasing a private beta. The very last thing I was working on was a way to export/import your settings, including favorite groups. The UX team at OkCupid started rolling out a lot of changes, rather quickly. In some cases, it was small things (“Wow they changed that one class name for no reason at all and broke my styling? Assholes.”) that still required my attention, and a lot of time was spent correcting them. But that was nothing compared to the few important changes they made next. They rolled out their own message filtering, they rolled out their own method for searching to see what a user specifically answered on a question. They made changes that broke some of my other features as well.
Almost overnight, my plugin became primarily styling changes with few features left. I felt a variety of things about this. On one hand, I felt somewhat validated, that some of the ideas I had begun to code were being incorporated. Moreover I felt frustrated that my work amounted to nothing. I called Kelly, annoyed about what had happened. “The whole thing is ruined.” was the gist of my reaction. She reminded me that I had learned a lot working on it, and she said that if nothing else, it had been a bonding experience for us. I liked that perspective.
And the truth was that it was a lot of fun to work on, and as I find myself revisiting it for this article, part of me longs to go back and touch it up, maybe try to make a few of those other features work again. But I know that without an API, having to rely on classes and IDs to stay the same, I would have so much to maintain. In retrospect, it was an ambitious first project for a browser plugin. But that is not to say that it was not a blast to work on.