Engineering the Instagram Stories Team

Instagram Engineering
Instagram Engineering
7 min readDec 2, 2016

--

Earlier this year, we pivoted around the idea of making Instagram a place for all your moments — the highlights and everything in between. In August, we introduced Instagram Stories as a new way to share moments as they happen, without the pressure of saving them to your profile. And it’s been amazing to see the response from the community — in less than three months, more than 100 million people already use it every day.

Launching Stories was both invigorating and nerve-wracking. We made countless changes to our mobile apps and infrastructure to make it globally available to over 500 million people within a day (no pressure). And given all the moving pieces, we expected issues. While nothing ever goes off without a hitch, in retrospect, our launch was one of the smoothest I’ve experienced — certainly at this scale. Having managed teams for large scale products and services at startups and more established companies, I wanted to reflect on what made this project go well, and what we could have done to make it go more smoothly. If only there was a simple formula for success!

Building great software is tricky, and so is building great teams to build great software. Let’s take a look at a few themes from the Stories project.

Great Teams, Great Challenges

I am fortunate to work with incredibly smart individuals, but great talent is not enough to make a high-performing team. To set a team up for success, a manager needs to understand the individuals’ needs, but more importantly, the needs of the team as a whole. Most often, simply ask and listen before figuring out how to help.

During early development, the Stories team encountered constant iteration and shifts in direction that could have easily resulted in endless thrash if we didn’t keep an eye on the overall health of the team. We reviewed the product as a group about every two weeks, but still weren’t aligned. Based on ongoing observations and feedback from the team, we periodically made team and process adjustments.

Fortunately, we’re not big on process at Instagram. To ideate more efficiently, we challenged our product direction to align on a shared vision, trimmed the set of key stakeholders, rebalanced the team based on shifting workload, and held frequent (even daily) reviews with our founders Kevin and Mike.

Much like there can be a lifecycle in software development, there can also be one for a team. Bruce Tuckman’s model of group psychology is interesting — he classified research into a set of states a group can be in: forming, storming, norming, and performing. While it’s not necessary to typecast a team into one of these states, this model can provide a framework to determine what actions to take to help a team thrive.

As important as it is to be open to changes that support a team, it’s just as vital to know when to get out of the way. The Stories team had incredibly high output and focus, and making changes for the sake of it could have destabilize productivity and morale.

Product Came Into Focus

It was an amazing moment when we locked in our final direction. After many months of prototyping other ideas, the team had faith in the creative process and ultimately landed on a product approach that felt right. As one team member expressed, it’s hard to stop a group of smart people working together on something they all believe in. All stakeholders need to believe, as this reinforces morale, helps maintain focus, and ultimately fuels productivity. With the team united on the product, things really started to fall into place and we could shift into execution.

Composition Is Critical

Much like composition in photography can significantly alter the effect of the result, so can the composition of a team. At an earlier point in the project, we noticed an imbalance between the workload, size, and makeup of the team. We were overstaffed, so we offered a few engineers other impactful projects to work on. Whether through proactive or reactive efforts, minimal staffing was most helpful during prototyping stages.

As a mobile-first product, we also learned it was healthy to loosely couple development across iOS and Android, even while prototyping. We did not strive for feature parity, but high level functionality kept good pace across platforms. Rather than having one platform always lead and the other follow, both platforms led.

This created some interesting dynamics. Some features were further along on iOS, while others were further along on Android. We were able to leverage more engineers by spanning platforms. This also allowed for more cross-pollination of ideas and solutions, especially as we built the same functionality across platforms within a short time span. This encouraged a healthy pace as one team that introduced a feature influenced another to get to parity quickly, and vice-versa. For example, we experimented with different animation transitions when swiping between stories. The final cube transition we ultimately chose landed on Android first and got the team excited to promptly add it to iOS. More importantly, by working on platforms in parallel, both teams were able to innovate at the same time, instead of having team A work through engineering challenges followed by team B to focus on porting.

It was also critical to have a healthy mix of talent on the team. We had incredibly strong technical leads per mobile platform (one of whom doubled as the technical lead for the project as a whole) along with a lead for our backend services. They all worked well within their own respective tracks, with each other, and cross-functionally across engineering, product, design, and analytics. Each lead was accountable for technical progress and had a voice in shaping the product. In addition to staffing leads, we had engineers who were simply great at prototyping quickly, which helped get the product into actual hands and let us frequently vet the user experience.

Once we locked in our final product direction, the team grew with volunteers across the company, each with key skills to efficiently expedite development and help get the project over the finish line. We formed tracks to focus on camera infrastructure, creative tools, and core product. After we shipped, we once again rebalanced to support a more stable state workload while preserving the platform leads structure.

Tough Deadline: Friend or Foe?

Craft is one of Instagram’s values and applies throughout our work, including product design, code, and quality. Maintaining a commitment to quality and attention to detail with an ambitious deadline can be a challenge, and sometimes it can be a unifying force. Once we were happy with our product direction, we discussed a shipping timeline that we knew was aggressive. Nevertheless, fueled by determination and excitement to share Stories with the world, the team signed up for it.

This forced us to ruthlessly prioritize and focus on the minimum viable product. This kept with one of Instagram’s core principles of doing the simple thing first. Although we were tempted to include more features in the initial release, we carefully decided when to do so.

The team steadily and tirelessly worked on our most important tasks, but as the date drew closer we realized we needed help. Soon, members from numerous other teams stepped up to assist. Even Mike pitched in with camera improvements and neon drawing. We continued to make progress, and soon found our whole company was eager to help. Apart from getting valuable feedback from employees from actively dogfooding Stories, we held a company-wide bug bash. Participation was truly company-wide, including Kevin and Mike.

With our target date a few weeks away, I mentioned to Mike that despite everyone’s amazing effort, it still felt like we were coming in hot. Mike responded, “We are, but if we give ourselves more time we’ll be tempted to add scope.” We stuck with our launch date, the team kept at it.

While having an ambitious target pushed the team well past its comfort zone of working hard, that was not sustainable as the norm. But our deadline bonded the team closely together for a common, albeit really challenging goal, and ultimately brought the whole company closer together. This is still paying dividends today.

World-Class Infrastructure Helps

Not too long before launch, our infrastructure team scrambled to ensure our capacity would exceed increased expected demand. That’s not always easy at the scale Instagram has, but the team was able to respond swiftly. We are fortunate to build product with amazing infrastructure, supported by teams who are maniacally focused on performance, quality, and developer velocity.

Our server stack includes open source components like Django and Cassandra along with internal systems like Facebook Tao. Some of the mobile tools and libraries we benefitted from are open source like IG JSON Parser, IG Disk Cache, IGListKit UICollectionView data binding framework for iOS, Rebound animation library for Android, and FLEX developer tool for iOS. We also leveraged exceptional tools and services from our friends at Facebook that helped us easily collect and analyze data that we can trust. Instagram’s ongoing investments in client and system infrastructure have enabled our product teams to build and deploy quickly and at scale.

Rinse and Repeat?

While these are some factors that contributed to a successful Stories launch, there were countless others like having trust in one another, strong communication, grit, openness, empathy, and diversity. Perhaps one of the most important meta takeaways is to anticipate and embrace change. Projects and teams are dynamic, and these takeaways certainly aren’t a checklist to follow. Be prepared to draw your own conclusions to what makes your projects successful.

The path to get Stories into the hands of our community has been an amazing and humbling experience. As an engineer, nothing is more rewarding than giving people a new platform to express themselves at massive scale. We have so much more to do, and I’m grateful and excited to work with our fantastic teams on the next chapter.

Eddie Ruvinsky is an Engineering Director who leads several product engineering groups at Instagram.

--

--