Thursday, July 16, 2015
Twice a year, we have week-long hackathons at Polyvore, with a few single-day, mini-hackathons thrown in. Why so many? We have a terrific team, and we want to give them the opportunity to direct the future of Polyvore.
Recently, we completed our summer hackathon, and it rocked! Coming out of that experience, I wanted to share a few tips on how to build an awesome hack culture.
Embracing and Celebrating Failures
We have two simple hackathon rules: 1) develop something (somewhat) related to Polyvore, and 2) failure is totally okay as long as you learn something from that failure.
There is a difference between failing and trying. Trying means you might not push your effort to completion; you're not fully committed. Failure means you saw the end (and maybe it wasn't pretty), but that's alright because the journey is worthwhile.
Polyvore embraces a culture where we celebrate failures, and turn them into learnings we apply towards the future. A hackathon is a terrific way to help get engineers aligned with this idea because there is less immediate risk. Want to fully redesign our entire desktop? Terrific, hack away! The team understands that what you are delivering is an iteration on an idea, not the final product.
Empowering Our Eng Team
Software engineers tend to be creative and inquisitive people. Many engineers will tell you the reason they got into software had to do with “wanting to see how this works” or “automating away my work”. The types of problems we face as software engineers provide us with an engaging and challenging way to apply our creativity and inquisitiveness to real world problems needing creative solutions. For those of us lucky enough to be paid to write software, it is a match made in heaven.
Even with the opportunity to work on challenging puzzles and debugging issues, engineers need to express their creativity along paths that may or may not have a direct business impact, or may go against the architecture or technology choices of the company where they work. To encourage that kind of creative thinking, we give special awards to stand-out hacks, such as most immediately impactful, most creative, audience favorite and most needle-moving potential.
Everyone Hacks, Not Just Engineers
One of the unique aspects of our hack culture is that we encourage everyone across our three offices and dozens of teams to come together to work on an idea. In the week before the hackathon, we started a Slack channel, #hackathon, to get everyone chatting about potential ideas. Immediately team members from engineering, product, design, marketing, communications, sales and senior management (including our CEO and COO) started submitting ideas and collaborating.
A hackathon is a great opportunity for people that normally don’t work together to collaborate to create a great UX. This year Jess Lee, Polyvore CEO and co-founder, and I both worked on multiple projects. Although our day jobs don’t usually revolve around coding, it was great getting our hands dirty again and contributing code. I won the coveted “Keep Your Day Job” award, which meant “great idea, but horrible code”.
[Yue Wu, software engineer, Jess Lee, co-founder and CEO, Jianing Hu, co-founder]
At our recent hackathon, we had 40 people (most working in teams of 2-4 people) contribute 32 ideas. Of those ideas, 5 were shipped within the first 2 weeks, and a total of 19 are currently being developed into user-facing features.
It was an awesome week, and we’re excited to continue pushing hackathon ideas to production over the next few months. Thanks to everyone that submitted ideas! Can’t wait to see what our next hackathon has in store!
Monday, April 13, 2015
What do you do every day?
I work on the Consumer Services team, which builds scalable, flexible and efficient backend systems for our web, iOS, Android and client teams.
How does Polyvore’s scale affect your daily work?
We’re still a relatively small company, but we serve a ton of people, and ingest A LOT of data, so you really have the opportunity to work on a ton of different stuff and be exposed to parts of the business that you normally wouldn’t at a bigger company. We’re also transparent in why we make decisions, so it’s much easier to keep the rest of the company updated on what each team is doing.
Polyvore is known for caring about our community, how do you think those values spill into engineering?
We always, always listen to our users. One thing the community should know is that we monitor and use all your feedback, whether it’s left on the blog posts, tweeted at us, or submitted through the app. Your opinions matter and factor into what we decide to work on every day because without you, there would be no Polyvore. We’re so thankful that the community is so passionate about the product we wake up everyday to work on.
How does your eng team decide what to work on?
My team exists to make our client team’s job easier, so we start by looking at what the web, iOS and Android team decide to work on for the year, and figure out how we can best build what they need under the hood, so we can focus on giving our users the best experience.
What is a technical problem that Polyvore is in a unique position to solve?
Style. We have so much valuable data on what our users like, clip and create sets/collections about. That data reflects how current trends in the fashion world impact your average consumer as well as their individual style. We can analyze that data and work with it so we can create a different style profile for every different one of our users, that gets smarter as you use it and make better recommendations on sets, collections and things we’d think you like.
How would you describe the Polyvore engineering culture?
Our culture is super relaxed. Everyone leaves their ego at the door and there’s a great atmosphere of sharing knowledge and going out of the way to offer support so that we can all build the best product for our users. We try to proceed carefully by weighing the pros and cons. We deploy multiple times every day and work hard to be an agile team that iterates quickly while still making sure we’ve covered pros/cons in everything we do.
Any fun facts we should know about you?
Lisa keeps the secrets of the world in her hair bun.
Friday, March 6, 2015
Compactions in Cassandra can be contentious due to their impact on I/O load as well as increased disk space availability requirements. A primer in compaction will be provided, and the differences in Cassandra's data organization and tombstone handling between Leveled and SizeTiered compaction strategies will be discussed.
What is compaction?
Compaction is a maintenance process which re-organizes SSTables to optimize data structures on disk as well as reclaim unused space. It is helpful to understand how Cassandra handles commits to the datastore to understand why compaction is so important to Cassandra's performance and health.
When writing to Cassandra, the following steps take place:
- The commit is logged to disk in a commit log entry, and inserted into an in-memory table
- Once the memtable reaches a limit on entries, it is flushed to disk
- Entries from the memtable being flushed are appended to a current SSTable in the column family
- If compaction thresholds are reached, a compaction is run
CREATE TABLE simple_cf (
PRIMARY KEY (id)
Some initial data is populated into the column family:
cqlsh:test> INSERT INTO simple_cf (id, text1, text2) VALUES (1, 'This is a test 1', NULL);
cqlsh:test> UPDATE simple_cf SET text2='This is a test 2' WHERE id=1;
The Cassandra server is flushed (nodetool flush). A (partial) update is performed after the flush:
cqlsh> UPDATE simple_cf SET text2='This is a test 3' WHERE id=1;
Friday, February 27, 2015
- Stream 1: Generates recommendations based on a user’s brand-affinity (a passion for Prada, for example).
- Stream 2: Generate recommendations based on collaborative filtering: items that similar users have liked.
- Stream 3: Leverages the talent of our awesome community of creators by recommending items frequently paired in sets.
Wednesday, January 7, 2015
When we first started building each user’s Style Profile, we quickly realized how tricky quantifying fashion can be. It’s intangible, means different things for different people and even when most people might own the same black shirt, they might wear it in completely different ways. Luckily, Polyvore is uniquely positioned to understand personal style through our users rich interactions on Polyvore, including:
- Global factors: occasions, trends, seasonality and other contextual information
- Catalog data: rich and high-quality metadata of products from our retail partners
- Product data: product likes and dislikes, collections of products, products viewed and search queries
- Shopper behavioral data: impressions, likes, outbound clicks while they are interacting with products, sets and other curated content
- Community data: Our global community has generated billions of data points that helps us understand the relationship between retail products. Every time a user creates a set, they are implying that those products go together and share the same style.
From a technology standpoint, a user’s Style Profile can be represented with a vector in a high-dimensional space and the component for each dimension, indicating the strength of their preference in a particular aspect or a combination of multiple aspects in fashion. The following is a simplified representation of two users’ style profile on combinations of color, category, material and brand:
|Figure 1: Style profiles|
- Style Space Definition: a high dimensional space where any point represents the style of a user or product that is subject to constraints that points with similar style should be closer to each other than those with different tastes.
- Style Vector Definition: the coordinates in the Style Space denote the taste vector for that particular user or product.
Thursday, December 11, 2014
As we approach the end of 2014, Andrea talks about how she analyzed Polyvore search queries to get a pulse on the community over the past year. To learn more about Andrea, check out her About Me set here. And to learn more about Polyvore’s end of year search data, check out our blog post here.
What do you do every day?
I have a fascinating job! Every day I spend time reviewing Polyvore’s search query logs to find notable patterns in Shop search, Set search, and Editor search, and then I share insights about these trends with the rest of the Polyvore team.
Friday, November 21, 2014
Making ThingsKurt 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.