Discussion
M
Scott Goodson
@scottgoodson · Head of Core Experience @ Pinterest
Hi — I’m Scott Goodson, head of Core Experience at Pinterest. My teams are responsible for the overall user experience of the Web, Android, and iOS Apps, alongside the critical API layer of the server stack.
Most recently, I lead the company-wide engineering effort that overhauled our iOS App - including consistent usage of the high performance AsyncDisplayKit framework that I open sourced two years ago.
Previously, I managed the Facebook Paper and Instagram iOS engineering teams, and helped lead the native code rewrite of the core Facebook app. I also spent four years at Apple where I was one of the first ten engineers to work on iPhone OS 1.0, and was the primary author of the Calculator and Stocks apps.
-------------------
UPDATE: Thanks for all of the great questions! I will continue to answer them as I can so check back later if I didn't get to your question during the hour :)
upvotesharetweet・
Brendan Ryan
@brendan_j_ryan · Engineer
Hey Scott! I've noticed you wearing some pretty cool shirts in some of your Wired articles. Where do you get them from?
M
Scott Goodson
@scottgoodson · Head of Core Experience @ Pinterest
@brendan_j_ryan Ha! My favorite shirts are from an innovative company called the Imaginary Foundation, which has an interesting process that allows them to print on all sides of the shirt. Although some relatives think they make me look like a punk skater boy, I love patterns and colors that challenge the visual cortex! https://www.imaginaryfoundation....
✨
Ayrton De Craene
@ayrton · Code @ Product Hunt
Can you talk a bit about Pinterest’s open source contributions?
M
Scott Goodson
@scottgoodson · Head of Core Experience @ Pinterest
@ayrton Although I have personally only contributed to the iOS projects, Pinterest has many open source projects across several different platforms and programming languages
For iOS - check out PINRemoteImage, PINCache, and AsyncDisplayKit (where Pinterest is the lead organizer & contributor). We also have plans for a new project launch this summer, as well as the long-anticipated 2.0 release for AsyncDisplayKit. On the server side, some of our most loved projects are pinlater, terrapin, and teletraan. Check out the full list at https://github.com/pinterest/
Companies like Pinterest have always used a tremendous amount of open source technology in their systems. Engineers are inherently grateful for the opportunity to benefit from another’s hard work writing feature-rich, stable code — and among people that I love working with, there is a true dedication to contributing back our own innovations.
This really gets to the notion of layers of abstraction in engineering systems. Pinterest was able to start from a higher level of abstraction than companies founded 10 years earlier, and largely because of open source projects. From that basis, we are able to build higher than others have before, and feel honored to enable a community of people to take those capabilities in new directions that we wouldn’t be able to implement (or even imagine) ourselves.
In many cases, this tight work with the community directly benefits Pinterest. With the recent push of work in AsyncDisplayKit, contributions from over 80 members of the community frequently helped us achieve the incredibly broad range of features and capabilities necessary to build out all of the corners of the Pinterest experience using it. Not only would we have wanted to hold all of this work to ourselves - it motivates us to see our contributions used by 3,600 apps, after all! - but we wouldn’t have been able to achieve it alone.
In my role, I am dedicated to ensuring Pinterest leads in client technology on Web, Android, and iOS, and a core part of that strategy will continue to be increasing engagement with Open Source in the future.
Kristian Angyal
@kristianangyal
Hey Scott. What improvements if any in ASDK are a direct consequence of addressing challenges you faced in Pinterest rewrite?
M
Scott Goodson
@scottgoodson · Head of Core Experience @ Pinterest
@kristianangyal A whole lot! Here are a handful of things we needed to do:
- Support for custom collection view layouts, including all of the great intelligent preloading features of ASDK even with very complex non-flow layouts.
- Much more advanced memory management for very deep navigation stacks and complex node hierarchies
- New Accessibility features that allow integrating with VoiceOver and Integration testing even with layer-backed or rasterized node trees
- Integration with PINRemoteImage to support Progressive JPEG and dynamic download priority
- Entirely new components like ASVideoNode, ASMapNode, etc.
- Animated GIF support, HTTP Live Streaming Video
Thanks for asking, wish I could go into more detail - but there's so much more to say beyond ASDK!
Fabio Teles
@pixel4
Hey Scott! I know you've talked a bit already about ASDK improvements at Pinterest.. but I'm curious how you're using it. Are you guys using it in 100% of the app replacing all UIView's or only where performance was a problem, i.e.: collection views, complex nav, etc?
M
Scott Goodson
@scottgoodson · Head of Core Experience @ Pinterest
@pixel4 For consistency, we are using ASDK everywhere. This allows us several key advantages.
- We have implicit trust that any performance challenge will be solvable. We have not encountered a reasonable design requirement that has been unsolvable, even on iPhone 4S. We strive for a highly usable experience on the oldest devices, and once the new version is finished rolling out later this month, we'll be most of the way there. There's still more improvement coming for the app, including on the performance side.
- We have a layer of abstraction that we can build new features into, and rely on them being present and consistent across all iOS versions, and every part of the app. We don't need to take special measures to add a new app-wide behavior, even quite dramatic ones.
- User interface layout is hard, especially when loading multiple stages of data (like more details for a pin after you open it). ASLayoutSpec, once a developer is familiar with using it, is an astoundingly powerful tool — you can automatically animate between any two layout states, even if they add or remove elements in the hierarchy, and do so with asynchronous computation of the new layout state. Being able to rely on our layout code scaling correctly across all device sizes without special measures is essential, particularly as new device sizes like 6+ and iPad Pro have been introduced.
- By sitting on ASDK at the navigation layer, we've benefitted from even broader memory management features that can control how much space a view controller consumes in RAM. We use a model of "number of taps away", so a controller buried in the back stack of another tab is progressively purged of its rendered contents, downloaded data, etc. These kind of structural features allow us to eliminate complex and suboptimal heuristics around managing global caches, which can't really consider what the user needs from the app at the present moment.
The challenges of this approach primarily relate to the initial ramp-up of developers. This is getting much better as new documentation is published in the docs section of asyncdisplaykit.org, but is still a cost. ASLayoutSpec in particular is seeing a ton of work to make it more intuitive to new users. Nonetheless, the right approach to adopting these advanced engineering techniques in an existing app is to look for incremental, stable intermediates, converting one or two view controllers at a time.
Thomas Stöcklein
@tomstocklein · FoundersFundersFuture.com
When working on iOS 1.0 during your time at Apple, did you have a chance to work directly with Steve Jobs? Or have you been in meetings with him? What was that experience like?
M
Scott Goodson
@scottgoodson · Head of Core Experience @ Pinterest
@tomstocklein Although I did not work directly with Steve Jobs, I had the opportunity to meet him several times, first at MacWorld 2004 when I was 14 years old. Even a year before that, I reached him in a phone call through one of the clients of a small mac repair business I ran in my hometown.
Working on the iPhone team, there were many times we felt Jobs' guiding influence on the project, typically through key decisions that affected our engineering work. For example, he made the final call to start work on a public API for native applications — the first step towards an App Store. I had many opportunities to work directly with Scott Forstall, one of Steve’s closest collaborators, and found his guidance to be very meaningful in my work.
Andrey
@andreyz · Founder
What's your view on rise of Rx or Reactive inspired style development?
M
Scott Goodson
@scottgoodson · Head of Core Experience @ Pinterest
@andreyz Our new architecture for Pinterest on Web is based on React, although of course with many customizations to suit our use case. Still, it does fundamentally follow the Reactive design paradigm.
On iOS, AsyncDisplayKit does have many elements of a declarative design pattern, which is in general aligned with reactive patterns. ASLayoutSpec is a good example of this.
My preferred mental model for development is not specific to a single paradigm, however. I think there's a great deal of value in thinking of developers expressing their _intent_ for the software to execute, and have generalized frameworks give rise to _behaviors_ that are driven by the user's realtime interactions.
For example, we consider high level conceptual elements like a Pin to be a component that can be dropped into many situations — a fullscreen view of it, a grid of many scrolling vertically, a horizontal carousel, etc — and in all of these cases our frameworks ensure that the right data is fetched ahead of time & that memory is managed appropriately for the user's interactions. We do this based on simple metrics like whether the user's travelling downward, or if they pause scrolling and then start interacting with a horizontal element. Here's a visual example of that. https://youtu.be/RY_X7l1g79Q?t=1...
The thing that makes this mental model of development great — broader in concept than just how AsyncDisplayKit implements it — is that it allows developers to think in much more human terms, and deliver a result that is truly centered around the user experience.
Gary
@garytokman · developer
Hey Scott! Can you give some tips for junior iOS developers entering the industry? What does Apple, Facebook, or Pinterest look for in developers?
M
Scott Goodson
@scottgoodson · Head of Core Experience @ Pinterest
@garytokman You might know this, but contributing to open source is one of the very best ways to take pressure off of interviews - it allows people at that company to see your work in detail!
💖
Ryan Hoover
@rrhoover · Founder, Product Hunt
Hey, Scott! Welcome. 😊
You recently launched Buyable Pins in order to drive revenue and close the gap between discovery to purchase. How's it going and have you noticed a significant difference in behavior between mobile and desktop users?
M
Scott Goodson
@scottgoodson · Head of Core Experience @ Pinterest
@rrhoover The ability to make purchases on Pinterest was one of the most highly requested features from Pinners. Since its launch last year we’ve continued to invest in making it easy to shop and buy from the Pinterest app. There are now more than 10k+ merchants selling millions of products through Buyable Pins, and the number of Buyable Pins has doubled to more than 60M. In talks with merchants, we’ve found they’re seeing improved mobile conversion rates, new customers through Pinterest, and greater sales. When we first built Buyable Pins, we found the greatest need was for an easy way to purchase on mobile, and so that’s where our focus has been. You’ll see more updates from us here soon.
Kim Vij
@educatorsspin · Owner of Vij Consulting LLC #PinChat
@scottgoodson how to does Pinterest plan to maintain the balance of inspirational content to buyable content to create a continual atmosphere that we fell in love with oh so many years ago that droves millions to the platform?
M
Scott Goodson
@scottgoodson · Head of Core Experience @ Pinterest
@educatorsspin It’s absolutely something we’re thinking about. Part of making the product useful is understanding when people are in shopping mode, and when they’re not. Every Pin on Pinterest is there because someone was inspired by it put it there, and that element of human curation is what makes Pinterest so meaningful.
We have a talented user research team that’s doing a ton of work in identifying these trends and giving recommendations to the product and engineering teams. Some of the results of this work are creating a dedicated Shop space and search. And when you search, you’ll see all of those inspirational Pins that are most relevant to your search, with the option of filtering by buyable, if you’re intent is to shop. We’ll be doing much more here, and always welcome feedback.
M
Scott Goodson
@scottgoodson · Head of Core Experience @ Pinterest
@educatorsspin One more thing - Buyable pins are not the same as promoted pins (ads) - many pins that users love may happen to be buyable, without disrupting their ability to collect or enjoy those objects on the service. In fact, the vast majority of buyable pins are not promoted, and Pinterest makes absolutely 0 cents per buyable pin purchase (we have no commission / overhead for any seller)
Sash Zats
@zatss · Software engineer
Hi Scott, as an engineer with many years of experience, what can you say about staying in engineering vs moving into a more managerial position - sometimes it seems like latter is the ultimate career development, while I really want to stay hands on. What is your approach to this?
M
Scott Goodson
@scottgoodson · Head of Core Experience @ Pinterest
@zatss I've coached many coworkers, very often close friends, through this decision. It's very individual and may depend on the company or project you're involved with, including the team's needs, growth opportunities in each track, etc.
Pinterest has a confident philosophy that the Technical and Management tracks should be parallel, to some of the highest levels in the company (it is only at the founder / senior VP level that they may diverge). This isn't true at all companies, but fortunately, is increasingly common.
On the management track, there is often opportunity to remain technically engaged with your team. I've found it to be a tremendously interesting challenge that has allowed me to grow as a person _and_ an engineer. I feel really inspired to be at the intersection of so many brilliant peoples' ideas and efforts, and love the opportunity to discuss hard technical challenges with those people.
Feel free to email me at asyncdisplaykit@gmail.com if you'd like more advice in this respect!