LinkedIn Connected - Using Anticipatory Computing

July 10, 2014

Authors: Vinodh Jayaram, Akhilesh Gupta, Haider Sabri, Greg Spurrier

For LinkedIn Members, their network and relationships are a rich source of insights and opportunity. In short, these relationships matter. Our members are also increasingly mobile - over 50% of them will use LinkedIn from a mobile device by the end of this year. Mobile devices enable us to better understand a member’s context, opening up some interesting ways for us to deliver LinkedIn’s value to them.

This post focuses on the engineering behind LinkedIn Connected, our brand new iOS app that is replacing LinkedIn Contacts. LinkedIn Connected is designed to give members relevant, and timely, reasons to reach out and keep in touch with the people in their network. Connected also includes LinkedIn's first anticipatory computing feature, and this post will discuss the platform we are building to enable more and more of these.

What is LinkedIn Connected?

Linkedin Connected keeps you connected to your connections and takes the work out of networking. It helps you make the most of in between moments by engaging with your network in just a few taps, either through public comments or private messages.

For more on how Connected can help you make the most of your in between moments check out the post here.

Anticipatory Computing and ROPOD

We’re excited to share how LinkedIn Connected uses anticipatory computing to empower our members. Anticipatory Computing is technology that infers or anticipates the needs of the user and proactively takes some action. In the new Connected app, anticipatory computing comes to life when members choose to sync the app with their calendar. This enables us to deliver pre-meeting notifications that give them the right information at the right time.

To make this possible, we created a new platform that we call Relationship Opportunities On Demand (ROPOD).

ROPOD has three primary components:

  • Synthesizer: This serves up updates seen in the cards in the Connected app
  • SCRAM: This identifies significant changes to a member’s context - starting with their calendar
  • Opportunist: This is responsible for sending the right notifications at the right time
We use a combination of and Kafka for communication between these three components. Kafka is used as a message broker to decouple processing between the different components of the flow. This allows us to manage the workflow such that each component can react and scale independent of the others.

Serving up opportunities: Synthesizer

The Synthesizer constantly aggregates, filters and ranks opportunities for each member to engage with their network from data aggregated through LinkedIn data domains.

When a member opens up the Connected app, Synthesizer allows us to score and rank available opportunities utilizing a relevance model that includes a portfolio of offline and online features. A daily Hadoop workflow generates per member offline features that are stored in Voldemort, our key-value storage system.

Pre-meeting Intelligence: SCRAM + Opportunist

This is where we serve up notifications with highly relevant and timely pre-meeting intelligence and reminders.

At a high level, here changes to a member calendar are consumed by the calendar service and published to Kafka. SCRAM listens for these and identifies significant changes for the member to decorate and publishes them back into Kafka.

Opportunist listens for these significant changes from SCRAM and schedules a push notification for a few minutes before the next meeting for the member. At the time of notification, it queries for and selects the most relevant update regarding the attendees of the event for the push notification. It then uses Kafka again to send the payload to the mobile notification system for the actual push.

Using Kafka as the message broker here allows us to coordinate this workflow such that each component can be designed to scale for its task independently.

Building the Connected app

The app was re-built from the ground up using learnings from Contacts and other LinkedIn iOS apps. The card-based architecture was built with a custom Collection View Layout that gives us the ability to demonstrate depth to the cards as you scroll through your list.

The app leverages gestures to interact with cards, such as swiping up to dismiss a card. We’ve built custom gesture recognizers that are easily portable to different UIViewControllers to get the same effect anywhere in the app that gestures are prominent. Throughout the app we have animations built using UIViewController Custom Transitions, UIKit Dynamics, and raw Core Animation.

For background syncs, we have a custom background process scheduler that intelligently schedules tasks so that power consumption and utility are properly balanced. We also developed the security architecture of the app using industry recognized best practices and standards to keep information secure.

The app capitalizes on the investments we have made in our multi-app strategy, leveraging libraries that provide standard authentication and single-sign-on, cross-linking between LinkedIn apps, cross-promotions between apps, standard build infrastructure and crash reporting and monitoring. This means we have a more simple and seamless experience across LinkedIn apps.

Looking ahead

We are excited about the emerging area of anticipatory computing and how can build upon this platform in the future. In later blog posts, we’ll share more on the specifics of pre-meeting intelligence and timely push notifications at scale. We’ll also discuss how we continue to evolve Synthesizer to generate and rank relationship opportunities.

Till then, try out the brand new LinkedIn Connected app for iOS and let us know what you think.