Business

A Post-Internship Look at RTR

This post was written by our awesome colleague, Maude "It's pronounced 'Mode'" Lemaire, whom we can't wait to welcome back after she finishes school.


I left New York City a few hours ago with every intent to return. Yesterday marked my final day as a tech intern for Rent the Runway but I still feel as though I'll be back on Tuesday, grabbing myself an ice coffee from the kitchen and tackling some new bugs. Needless to say it'll be strange heading to class bright and early and hitting the books once more.

I spent thirteen weeks working alongside some of the most insightful engineers at Rent the Runway's SoHo offices. Within just three months, I learned more than in a single semester of university. Pat (Newell) & John (Holdun) have taught me about writing efficient JavaScript, best CSS practices, and using Backbone to solve just about every problem. After a few weeks, I developed a decent understanding of Ruby where I had none whatsoever previously.

From my experience this summer, I learned most from the code review process. At Rent the Runway, when you're working on a new feature or fixing a bug, you start on a local branch. When you think it's all good, you make a pull request to merge your changes onto the master branch. At that point, your peers will review your code. They'll make comments about syntax, a block of code you can reduce to a single line (sometimes), and the bigger picture of your solution; sometimes it turns into a big discussion about how your code will scale and evolve with future features on the horizon. Although it might seem harsh at first, you have to go into the code review process with an open mind and hope to come out of every pull request a better programmer than you were before.

Everyone's constantly talking about building a scalable, maintainable system. There are discussions about the best practices everywhere you turn in the office. Don't know how a system works? Open up your chat and ask someone you think might know. Don't know the specifics of Ruby syntax? Just turn around and ask someone! You'll find experts in a bunch of niches and it's an environment that makes it incredibly easy to learn a ton of new things. As an intern, it's a perfect opportunity to turn to your neighbor and ask them a million questions about what they know! I was able to learn about product, business strategy, marketing and buying in addition to tech just by having coffee chats with coworkers. In terms of work experience diversity, you truly can't beat the Rent the Runway team.

The amount of women in tech at Rent the Runway is surprising. I wasn’t prepared to see so many, coming from a university program where barely 9% of us are women and having worked an internship the previous summer where I was the only woman on my team. It was great to see that no matter what background any programmer was coming from, everyone was open to their ideas. No need to prove yourself (which I've had to do in certain cases) – you're instantly an important part of this dynamic group of hardworking engineers. Even though I was "just an intern," I found that I was the only one ever saying anything of the sort. To my team, I wasn't "just an intern;" by the end of the summer, I was given just as much work as my coworkers and writing as much production code. There were certainly times when I seriously screwed up a pull request with a million rebasing related commits and caused a fair share of JavaScript errors but I'm happy to say I fixed more problems than I caused.

About a month before my original end date of August 22nd, I was sitting down with Jade, the team lead on our current project, when he asked when I'd be heading back to Montreal. At the time, I'd heard about Hack Week during the last week of August – a full five days of working on anything you wanted (so long as it made Rent the Runway better) and I desperately wanted to stay the extra week. With his support, my internship was extended by a week and I was able to stay and participate in the festivities. To top it all off, a few weeks later I was given a full-time offer! Beyond the perks of free rentals, unlimited vacation, and living in NYC, it's an opportunity I simply cannot pass up. Between the people in tech at RTR and the opportunity for fast-paced growth, Rent the Runway is a really (really) great place to work and you can count on me coming back after graduation.


How to Track Tracking Numbers and Why it Matters

We do a lot of shipping - tens of thousands of pieces a day - so our team has developed a niche expertise around automating the process. Tracking packages is important to us, sometimes in unexpected ways.

Why are tracking numbers important?

From an accounting perspective, we aren’t allowed to recognize revenue until a package has been delivered to the customer - often several days after we have shipped it. A difference of four days may not seem like a big deal, but it’s important for us (and the government!) to paint an accurate financial picture. This is true, incidentally, for anything you order online: although your credit card is charged immediately, the books aren’t balanced until the item arrives at your doorstep.

We send various emails around a package's shipment status: a survey after your dress has arrived, or a friendly reminder to return an overdue dress.

We try to be smart about scheduling when we ship a dress. Knowing exactly how long it will take to arrive back to our warehouse, and its current transit status, is important for maintaining inventory.

And underneath all of this is a goal to decrease our costs: for example, shipping via a truck rather than airplane.

How to track UPS packages with cURL

If you try to search Google for how to use the UPS API you don’t get much more than a link to the UPS. There’s a cottage industry around understanding and wrapping shipping APIs. I think most developers don’t bother to try because they seem intimidating and arcane.

In practice, we’ve found it’s really not so intimidating (though it is a bit arcane). Here’s the minimum you need to use `curl` and start fetching tracking information directly from the UPS!

Create a UPS account

This is by far the least intuitive step of the process. You have to both create the UPS account, and then fill out another online form (instructions here) to request API access. I had initially thought there would be a delay, but in fact they give you API credentials immediately after registering.

Take note of your Access Key, which they also email you after requesting API access.

(If you’re already doing UPS shipping, you probably already have a UPS account and just need the API Access Key.)

Download the documentation

Once you’ve logged in, you can access the documentation for all UPS APIs. Their APIs are all XML-based. You can choose between a SOAP interface or a simplified XML. I'm partial to their basic XML interface. Oddly, if you know the direct link you can download the documentation. Specifically, we will be looking at the tracking API.

The documentation contains sample SOAP and XML requests, WSDL files, XML schemas, and detailed documentation on all of the input and output fields. Their API is surprisingly robust and well-documented.

Create the request XML

The UPS API has a strange format: you literally concatenate two XML files, and then POST the result to a URL.

The first part has your credentials, and the second is the actual tracking request.

<?xml version="1.0" ?>
<AccessRequest xml:lang='en-US'>
<AccessLicenseNumber>ACCESS_LICENSE_NUMBER</AccessLicenseNumber>
<UserId>username</UserId>
<Password>password</Password>
</AccessRequest>

<?xml version="1.0" ?>
<TrackRequest>
<Request>
<RequestAction>Track</RequestAction>
</Request>
<TrackingNumber>1Z0020421361795425</TrackingNumber>
</TrackRequest>

curl away!

url -X POST -d @ups.xml https://wwwcie.ups.com/ups.app/xml/Track

The output XML has all of the information you would expect to find on the website: tracking status, package weight, shipping method, etc. The document is well-formed and easy to parse.

For Python programmers…

I implemented package tracking, along with other API features, in a most-excellent library called ClassicUPS. Feel free to make a pull request!

Conclusion

As customers, we refresh the UPS website to see when our package will be delivered. But that status information is used by merchants, auditors, accountants, marketers, and lawyers to provide accountability for transactions between buyers and sellers. There is a lot of opportunity for businesses to use tracking status in clever ways, and from an engineering perspective, it is surprisingly easy to fetch and work with this information directly from the UPS.

Happy hacking!


Taking the Leap Into Fashion...Renting the Runway

CAB_bio_pic-thumb
CAB_bio_pic-thumb

My last 10 years were spent developing trading and risk software at a top investment bank, but these days I work in fashion. I'm just finishing week two at Rent The Runway. Obviously going from Wall Street to the runway has been a big change, but so far it's been great and I'm glad I made this decision. Moving to a startup wasn't a choice I made lightly, and I think my experience is worth sharing as it may resonate with others. I was a Vice President (a senior title, but not an executive) at a great firm. I don't care if it's in vogue to hate on Wall Street, my employer treated me well and I respect them for that. They offered great perks like excellent training and a top notch wellness program. I had high wealth opportunities with limited risk, and I got to work with very bright people. With that said, everything wasn't perfect, and I wasn't 100% content with my job, but life is always about trade-offs. Everything I listed came at the cost of "Big Company Problems".

When you work at big company, even at tech firms like Google, you need lots of middle management to support a large organization. That many layers leads to a few problems:

* Way too many meetings. You literally have meetings to prepare for meetings. The same goes for status updates. * Politics. The successful folks are jockeying to take over turf or protect their own. It may be subtle or indirect, but it still sours culture. It also leads to a lot of micro management. * More than likely, you're working with lots of proprietary frameworks or having to spend too much time managing up. The former makes you less marketable, the latter is just meta work, not value add! * Greenfield opportunities are rare * More Floaters. These are people who just skate by without taking ownership or adding significant value

That list may be short, but honestly it's enough to weigh on you like an anchor. Since I left, I feel light as a feather. I wake up excited to come work. Here are few reasons why:

* Our Director of Engineering sets the right tone * Our Tech team is nails. We are hire sharp Engineers, who care about software and taking pride in their work * The focus is on working smart, not hard * Amazing culture. Everyone is helpful, and there are no prima donnas! * We have the critical scalability and uptime requirements of all eComerce sites, the challenges of reservation matching like ZipCar, and the logistical problems of Netflix but with much more valuable inventory * Plenty of greenfield opportunities. We are disruptors! * The interview was technical, not fuzzy. If you're interview somewhere and the interview is not as technical as you are, turn around and run! * We have meetings when they are appropriate, and there is plenty of time code * Politics are nonexistent * Our company is sub 200 employees, 100 are in the warehouse, and 20+ are in engineering. This means my impact is tremendous,  I get to be a steward of the culture * I understand our company's business model. It's not just "let's build something cool and figure out how we monetize it" * I wear what I want! * Pro woman culture. I have never worked with so many women, it's refreshing. I'm married and not sleazy; the gender balance makes the company more dynamic

As you can tell, I drank the Kool-Aid. I understand if you're skeptical as I'm still on my honeymoon, but the longer-tenured folks share my sentiment. If you like what you read here, reach out. We're hiring!


Our Runway

CamilleF_1-thumbWe here at RTR Tech are extremely proud to announce the launch of Our Runway. This project is the culmination of several months of work by our engineering team and represents not only an evolution of our product but also a major evolution of our technology platform. This project started as a simple hack day project by 2 of our engineers, taking our customer images from various reviews and creating a page where you could see them all in a continuous stream, with the option to click on the image to view the product they were wearing. Of all the exciting demos that came out of that hack day, this was the one that sparked the imagination of the entire company. We knew that customers who engaged with photo reviews were more likely to rent, and we all loved the fact that our dresses look so good on real women. Why wouldn't we provide our customers with the option to shop our site by these photos? Models may be the industry standard, but these happy, beautiful, real women showed us an opportunity to change that standard in a way that we believe will be revolutionary.

From a technical point of view, we knew this project would not be easy. The data for our photo reviews was stored in a hyper-normalized database schema, and we knew it wasn't flexible enough or scalable enough to power a major part of our website. To get the data into a form where we could serve it quickly required a rewriting of almost all of the aspects of that service, and we chose to move most of the data out of the old database into MongoDB, which is one of our preferred data stores for non-transactional data. We also had to join that review data with data served by our product catalog, reservation calendar, and most importantly our user service, in order to provide the "Women Like Me" functionality. Getting this aggregation working, and working fast, was a full-time job for two of our best developers over several months.

We also chose to use this project to launch a new web serving layer. Our main website runs on a heavily-modified version of Drupal, full of hacks and mysteries left by developers past. With this launch, we have a beachhead into a new web stack based on Ruby Sinatra, with a full suite of RESTful Java services owning the data and most of the heavy lifting. We designed the system to be highly cacheable, scalable, and fault-tolerant, and we're experimenting with a Heroku-based hosting solution to enable us to quickly scale up web resources as needed to handle demand. We also have our first major web presence that does not require login to access, a major step forward.

I am incredibly proud of the team and the effort they put in to take this product from conception to reality over the course of a short two and a half months. As a woman, I find that browsing Our Runway is a breath of fresh air. You never realize how little models smile until you look at page upon page of women smiling broadly and looking fabulous. As an engineer, I'm thrilled with the quality of our "Women Like Me" algorithm and the speed at which we manage to return results to our customers.

If you are interested in helping us build the next great innovation in eCommerce, we're hiring!