Friday, November 21, 2014

Making Things

Making Things

Kurt Schaefer is our Junkyard Mega-Wars star and a Staff Engineer who works on making our iOS apps amazing. Since working here, Kurt has learned both to code in Objective-C and how to mount an effective foosball defense (so key!). Kurt is an incredibly creative craftsman of the Maker-verse who sews amazing Halloween costumes from scratch, and loves building whimsical projects in his workshop while listening to Ella Fitzgerald. Read more about his projects at his blog, Retro Tech Journal, and check out his Polyvore set!

As an amature wood-worker, machinest, welder, and tinkerer, I'm constantly learning from my hobbies and applying what I learn in my role as a Software Engineer at Polyvore. I am passionate about making things. Here's some advice on making things both at home and professionally.


Why Make Things?

It turns out that it's fun to make things
From building a custom door knocker to launching home brew rockets with your kids, building things is fun. It gives you a sense of accomplishment. Physical things have a heft and permanence. They're very accessible.

You can express your style
You can make something unique and have it be just the way you want it to be, and in the process discover what it is you like.

Give a piece of yourself
When you make something for someone you put a bit of yourself into it and it shows. People can feel it.

Learning new skills is fun
As you build things you pick up skills and that in turn makes you feel comfortable taking on more complex projects. Tiny pebble projects can trigger an eventual avalanche of making.
It gives you X-Ray vision
It opens your eyes to things you didn't even know you weren't seeing. The more you learn about making things, the more you can understand how things are put together. My wife and I took a neon sign making class and now I'll never look at a neon sign the same way. I've never opened up a soda machine, but I have lots of decent guesses about micro controllers doing software switch debouncing, wiring harnesses, chassis grounding, and neon light ballasts and a host of other details going on under the hood.


How I make things

It starts with an idea
The idea is the fire that propels you through the project. You need an idea you are excited about.

Make a bunch of sketches
It’s good to work out all kinds of important details in your sketches. Think about them here when it’s easy not when you’re 3/4 of the way through and it’s too late.
Do scale drawings
Sketches don’t tell you the size, so remember to scale your drawings, including the type of material. Will your design fit on the wood you have?
Make paper prototypes
For the Totoro Bench, I wanted to make sure the height of the steps was reasonable. I took a guess at the size, blew the image up on a photocopier, and cut the parts out of cardboard. Prototypes make it easier to get a sense of what the final bench would be like without much work.

No really, paper prototypes
I can't overstress this one. Paper is wonderful to work with. It's cheap, light, and easy to tape. You can cut graceful curves and symmetrical things by folding and cutting. Need eight identical things? Just stack up some sheets and cut them out. I make paper patterns when designing in fabric. I even use paper prototypes for my paper projects!
Run through every step of the build in your head
Things you're having trouble imagining are areas you have to work on. Don’t know which glue to use? You'll have to do some research, maybe glue some test pieces. The more detailed you can be in your head, the smoother things will go in real life. People often ask me how I can do so much with only one night a week to work on things. The truth is I work on things all the time--in my head!

Make a running list
You’ve been running it through your head, now write down materials you’ll need, steps you’ll take, things you’ll need to research, parts you’re going to build, etc. List every step.
Break it up into one-evening pieces
Figure out something you can finish and finish it and cross it off on the list. The mounting pile of strike-throughs is important both motivationally and organizationally. You need to be able to distinguish things you did from things that you didn't do and forgot to put on the list.
Keep things organized
Losing parts is worse than never having made them. Tools you can't find or can't access are not tools you own. I like to use clear-sided project boxes to help keep project parts together. I use a lot of peg board to keep tools findable and handy. Don't underestimate the importance of this organization. Searching for things burns your limited time and does nothing.

What can go wrong?

"I’m so constrained"
Having less time can make you get more done. If you say, “You have unlimited time and unlimited budget, and you can build anything you want!” How do you even start? If instead you say, “You have 15 minutes to make a giraffe from cardboard and hot glue,” you can start right away. The wheels in your head have traction right out of the gate. 15 minutes later you’re done! Constraints are really great for forcing you to commit and make decisions.
"I start projects but I never finish them"
You don't have a motivation problem. You may have a definition problem. It’s fun to finish things. Finish early, finish often. I try to finish something every week. I don't give myself time for second-guessing and over-analyzing. It limits the scope of what I have to keep in my head. Maybe I only finished the knob for my Labyrinth game, but, hey, it’s done. I don’t have to focus on that part any more. I can check it off my list.
"I started a big project, made a small amount of progress, and then it died"
Start with small projects; that giraffe was easy to finish, and it felt good. As you get more things under your belt, you can start bigger projects that are built up from a few smaller pieces. That way you get little bumps of “I finished this!” goodness as you go along. Don’t worry about the big project. You leave yourself a trail of treats that hopefully leads you to the final result you want. Even if it doesn’t, you got some treats along the way and had a fun trip.
Build toward interesting levels of functionality. They are big motivators, and if your interest in the overall project is waning, they can act as an escape hatch where you can put the project away and still call it a success. 10 years ago, I built a can-punching robot for making luminaries out of cans. I built the punch, the computer controls and cobbled together a very rickety plywood frame to hold all the parts and a cheesy can holder that you had to tape the can to.

I punched some cans! Sure, I would have liked to make a better can-holding system, add an automatic punching mechanism, maybe install a turret head for punching multiple hole sizes. When I think of that project I don’t think, “Argh, I should really finish that thing. *sigh*” I think, “That was a successful and fun project. Maybe at some point I could take it to the next level!” Reaching that level of functionality turned the memories of that project from a liability into an asset.
"I was worried I would destroy it, so I couldn’t keep going"
Fear of taking action can paralyze you and that kills the creative process. Guess what? When you are building things, you’re going to destroy some stuff. Wood will be cut wrong, circuits are going to burn out, you’ll lose the the Ziploc bag with the dozens of tiny brass parts you made. You have to budget for it both monetarily and mentally. Buy extra screws, cut extra parts, or save some pieces so you can make another if need be.
Celebrate the screw-ups! Once a year at the West Valley Live Steam association, we’d have an “Oops Night!” where people would bring in the biggest screw-ups from the previous year and tell the story of how it went wrong. It was fun. It was educational. At least when you really screw up you also think, “Wow I’ll have to bring this to Oops Night!”

This brass tube cutting jig worked great for the first three cuts. Then the tubing got hot enough to melt the acrylic and a new "Oops Night" candidate was born. Thankfully I only lost one night.
Test pieces, prototypes, and cheap test versions of things can protect you. Keep the costs of the failures down. Practice on some pine before you try it with your mahogany. Use some safety nets, but ultimately let yourself move forward.

What does this have to do with software?

After I gave this talk at work, a lot of my coworkers mentioned that many of these ideas apply to making software. "Finish early, finish often" is a bit like organizing things into Scrum Sprints. Instead of a running list, we have Jira to keep track of tasks. We do design sketches and prototypes.
Making software is a subcategory of making. Sure, software has a wonderful level of reusability and modular structure that many physical projects can't match, but as I've made more use of flexible manufacturing (laser cutting/3D printing/CNC Machining/PCB Manufacturing/etc.), the the ability to reuse parts of previous projects begins to make physical reuse a reality. I designed an illustrator plugin that lets you draw involute gear profiles and have used those gears in a number of projects. Now I can include gears in a project without giving it a second thought.

I hope you’ve learned a few useful tips and tricks about making things in the real world. Whether you’re a beginner or a pro, with a few simple steps it’s easy to bring your ideas to life.

Tuesday, October 14, 2014

Meet the Engineers Behind Polyvore: Esha Pathak

Get to know the Polyvore engineering team! Here, Esha talks about how she works with big data, our tech stack and what makes up our engineering culture.


What do you do every day?

I’m on the infrastructure team, so I help maintain our backend infrastructure in our Data Center and Cloud on AWS. In addition to my day job, I love getting updates on all the latest fashion trends from our creative community. It’s pretty cool that I’m able to help build a platform that empowers people all over the world to express their style.

How does Polyvore’s scale affect your daily work?

As our Polyvore community grows, my team continues to scale our backend systems. With new features built on our data, I help create new Cassandra clusters, and scale the existing Cassandra clusters by adding more nodes to accommodate our growing data. Cassandra is our backend for storing our unique outfit data for our newly launched Style Graph, which provides users with personalized product recommendations.

Tuesday, October 7, 2014

Software Engineers Wanted....For Style Advice

"Software Engineers Wanted...For Style Advice" - not two things that you'd necessarily expect in the same sentence. But that’s what we do here at Polyvore, using machine learning and data science.

Today we’re excited to announce the launch of personalized recommendations on Polyvore for iPhone. You can download the app here!

Although the user experience of a personalized feed is simple and delightful, what goes on under the hood is quite complex. Personalization is no easy feat, but we were able to create hyper-personalized recommendations at scale that produce a 4x increase in product likes (one of our key measures of engagement).

Over the next few months, we’ll be doing a series of blog posts about how it all works. To get started, here's a quick infographic explaining the problem, our approach, and the results:


So, why is style such a hard problem?

Style is complex and nebulous. It's intangible, highly personal, and constantly evolving. Think about how you would try to go about describing your style or the kind of image you want to project. Think about all the details that need to be taken into account: the occasion (wedding vs. vacation), time of year (winter vs summer), situation (work vs. weekend), all the way through to tiny details that you love or hate (rhinestones and fringe, anyone?). It's not a straightforward problem with clear rules that you can encode.



Our goal is to quickly understand (and constantly learn about) our users' style, and provide a large number of real-time recommendations that match that style. We use hardcore data science to help shoppers get inspired, and find great products, through personalizing their experiences in our applications.

Big data = big value

Polyvore is uniquely positioned to build a personalized experience around style because of the kinds of data we have:
  • User-generated content (UGC) - 'sets' representing outfits/style/fashion where the combination of items is human and individual
  • Structured product catalog - rich metadata that allows us to have a detailed understanding of the items in the UGC 
  • Shopper behavior information - likes, outbound clicks, engagement (looking at what, and for how long)
  • Editorial content - representing years of curation experience, providing fashion-aware content discovery
These kinds of data, combined with the volume of that data, from years of active community and members (~3M sets/month) enables us to apply machine learning and data-mining to understand something as nebulous as 'style'.



To make the problem even more interesting, our notional 'Style Graph' is much more dynamic than other 'Graphs' as we also need to take into account things like seasonality and trends that can come and go within days or weeks.  Our focused dataset means that we can get robust results from our algorithms without having to wade through noise and uncertainty.

Constructing the Style Graph




In future blog posts we'll go into details about the systems and algorithms that run at large scale to provide personalized, real-time recommendations. We'll talk about:
  • Platforms: Mahout, EMR, neo4j, AWS and Cassandra
  • Mathematical techniques: collaborative filtering, associative rule discovery, principal component analysis
  • Statistical experiments: what valuable and interesting insights have we gained so far?

Post a comment if you'd like us to consider covering something specific or answer questions you have. Make sure you subscribe to this blog and watch for our follow-on posts! And for more information on our team, check out our About page.

Wednesday, August 20, 2014

The 10 Biggest Surprises of My Polyvore Internship

Hi, my name is Julia Alvarez and I am a junior at Brown University, pursuing a degree in computer science. You should know that I am not one of those programmers who has been coding since I was in diapers. In fact, I switched from psychology to international relations to English and finally to computer science.

I "discovered" computer science after stepping into the opening day skit of Brown’s legendary CS15, an "Introduction to Object-Oriented Programing" course, and was hooked. I found that the beauty of CS was that I could actually make something useful, all while sitting at my desk. I wanted to learn more and to practice this magical "making" process, so I started hunting down a summer internship.

I had a mentor who did not work at a tech company, but knew many people who did. When she told me she knew some people who worked at Polyvore, I got really excited, because I had not only used Polyvore before, but I really liked it, and really believed (and still do) they had huge potential for growth. When they called me and told me they would like to interview me, I of course freaked out and said yes right away.

It has been ten weeks since I began my internship, and I would like to share the 10 most surprising things I have learned during my time here.

Friday, August 8, 2014

Diversity and Meritocracy at Polyvore

Nine months ago, a female engineer named Tracy Chou posed the question: Where are the numbers? Since then, over 170 companies have released their diversity numbers. Today we’re releasing Polyvore’s.



Many companies focus on increasing diversity at the front of the hiring pipeline. I think it’s equally important to think about what happens *after* people join a company. I believe one of the best ways to cultivate diversity in tech is to cultivate meritocracy. Simply put, people should be rewarded based on the merit of their work, regardless of their gender, race, age or tenure. This is fairer for everyone, period.

To achieve meritocracy at Polyvore, we try to be thoughtful about our processes and cultural norms. We use objective measures of success, like clear team goals and metrics. We use Scrum retrospectives and departmental email updates to ensure transparency around what’s being worked on, by who, and why it matters. We encourage a culture of explaining and asking why, to ensure that decisions are made based on the merit of people’s arguments, not on seniority or social clout. As CEO, I take the time to explain how we arrived at our strategy, versus just telling people to march in a particular direction. Although we have many fun social events (offsites at the beach, scotch o’ clock, doffle tastings), we ensure that important work decisions happen at work during work hours, not at events where some people might be absent. This prevents the formation of an “inner circle” (often a “boy’s club” at other companies) that excludes people from important decision-making.

No company is perfect. We’re certainly not as ethnically diverse as we could be. But as a female Computer Science grad whose 2005 department t-shirt was a drawing of 6 male stick figures and 1 female stick figure (a joke about the gender ratio), I’m proud that Polyvore’s engineering team is 26% female, well above the industry standard of 10-15%. I’m looking forward to seeing even more female engineers join us!

Most of all, I’m proud that our engineers work together every day on solving interesting technical problems, from crawler automation to image masking to mobile growth hacking, with the shared goal of being great engineers, regardless of gender, race, age or tenure.

To learn more, check out our team in action and find out about their hidden superpowers...



(And if you’re interested in joining us, check out our Jobs page! ;-)

Tuesday, May 6, 2014

Optimizing Upsells: How We Drove Millions of App Installs

It’s pretty tough to get people to download your app, and relying on App Store SEO can be unpredictable. However, one of the few levers you do have control over is the web traffic you already own. It’s now common practice to direct mobile web visitors into the App Store via some kind of promotion.

But ... what works the best? How much does the UI matter? How about the copy?

Optimizations like this are great opportunities to use A/B testing and data-driven decisions. Over the past year or so, we’ve run several experiments to see what works the best for us. Read on and see if you can guess the outcomes correctly!


Experiment 1: Straightforward vs. Promo

We had originally launched the Polyvore iPhone app with a straightforward “Get the app!” message and a screenshot of the editor. But, since then, the app has done consistently well in its downloads and ratings, and we wondered whether conveying that would help. We also knew that not all of our users are interested in the editor, so perhaps focusing on a different part of the app experience would be better.



L: Straightforward + editor message / R: Promo + shopping message

Wednesday, April 2, 2014

6 Simple Steps to Mobile-Friendly Email

Why Mobile Emails Matter

While our mobile website is becoming a larger and larger portion of our traffic, we still see more users on our desktop website. So when we pulled data around our emails (and we love data), we were surprised to learn that most of the emails we send are actually opened on mobile devices.

Just as our mobile site is designed and built to be a great experience on the phone, our emails needed the same special thought and treatment. It sucks to open an email on your phone with tiny text, or images that stretch off the page, or links that are too tiny to click on a touchscreen.


We set out to ensure our emails, whether opened on a desktop client or a mobile phone, were as delightful as the rest of our site. Along the way, we found many guides and blog posts on the Internet, but nothing that laid out the whole process. We also ran into several pitfalls during development that we had to work around, so we've gathered them here in hopes of saving you the pain of having to discover them yourself!