[@IndeedEng] Engineering Velocity: Building Great Software Through Fast Iteration

120
Engineering Velocity Building Great Software Through Rapid Iteration

description

Video available: http://www.youtube.com/watch?v=zCy077_dyJo&feature=youtu.be Since 2005, Indeed has created and cultivated a strong engineering culture with a focus on ownership, real-world impact, and constant incremental delivery. Our experience has demonstrated that rapid iteration is essential to discovering the most valuable functionality for our users. In the next @IndeedEng talk, Dan Heller will share some of the architectural solutions, tools, and processes Indeed has created to support constant incremental delivery of new features and enhancements. Speaker: Dan Heller has been working in software development for 13 years including time at Google, IBM, and long-forgotten startups. He has been at Indeed for the last 4 years, helping people get jobs by building products for Indeed’s employers and advertisers.

Transcript of [@IndeedEng] Engineering Velocity: Building Great Software Through Fast Iteration

Page 1: [@IndeedEng] Engineering Velocity: Building Great Software Through Fast Iteration

Engineering VelocityBuilding Great SoftwareThrough Rapid Iteration

Page 2: [@IndeedEng] Engineering Velocity: Building Great Software Through Fast Iteration

Dan HellerEngineering ManagerEmployer Applications

Page 3: [@IndeedEng] Engineering Velocity: Building Great Software Through Fast Iteration
Page 4: [@IndeedEng] Engineering Velocity: Building Great Software Through Fast Iteration
Page 5: [@IndeedEng] Engineering Velocity: Building Great Software Through Fast Iteration
Page 6: [@IndeedEng] Engineering Velocity: Building Great Software Through Fast Iteration

Indeed

#1 Job Site Worldwide

More people find jobs on Indeed than anywhere else

Over 100M monthly visitors

Over 3B monthly searches

Page 7: [@IndeedEng] Engineering Velocity: Building Great Software Through Fast Iteration
Page 8: [@IndeedEng] Engineering Velocity: Building Great Software Through Fast Iteration
Page 9: [@IndeedEng] Engineering Velocity: Building Great Software Through Fast Iteration
Page 10: [@IndeedEng] Engineering Velocity: Building Great Software Through Fast Iteration
Page 11: [@IndeedEng] Engineering Velocity: Building Great Software Through Fast Iteration

Page 12: [@IndeedEng] Engineering Velocity: Building Great Software Through Fast Iteration

Rapid IterationLeads to

Better Products

Page 13: [@IndeedEng] Engineering Velocity: Building Great Software Through Fast Iteration

Data-DrivenProduct Design

go.indeed.com/ddpd

Page 14: [@IndeedEng] Engineering Velocity: Building Great Software Through Fast Iteration

Indeed Product Development Principles

Measure Everything

Test Everything (A/B Experiments)

Iterate Quickly

Page 15: [@IndeedEng] Engineering Velocity: Building Great Software Through Fast Iteration

Build

MeasureLearn

Lean Startup Cycle

Page 16: [@IndeedEng] Engineering Velocity: Building Great Software Through Fast Iteration

Indeed Product Development Cycle

Deliver

MeasureLearn

Page 17: [@IndeedEng] Engineering Velocity: Building Great Software Through Fast Iteration

Indeed Product Development Cycle

Quickly!

Deliver

MeasureLearn

Page 18: [@IndeedEng] Engineering Velocity: Building Great Software Through Fast Iteration

Indeed Product Development Cycle

MeasureLearn MeasureLearn

Deliver

Page 19: [@IndeedEng] Engineering Velocity: Building Great Software Through Fast Iteration

Engineering Velocity

MeasureLearn MeasureLearn

Deliver

Page 20: [@IndeedEng] Engineering Velocity: Building Great Software Through Fast Iteration

Engineering Velocity (n)[en-juh-neer-ing vuh-los-i-tee]

Our ability to quickly deliver implementations of ideas to job seekers & employers

Page 21: [@IndeedEng] Engineering Velocity: Building Great Software Through Fast Iteration

Deliver Developer Productivity

Page 22: [@IndeedEng] Engineering Velocity: Building Great Software Through Fast Iteration

Software Architecture

Processes and Tools

Risk Management

Deliver

Page 23: [@IndeedEng] Engineering Velocity: Building Great Software Through Fast Iteration

Software Architecture

Processes and Tools

Risk Management

Deliver

Page 24: [@IndeedEng] Engineering Velocity: Building Great Software Through Fast Iteration

Service Oriented Architecture

Page 25: [@IndeedEng] Engineering Velocity: Building Great Software Through Fast Iteration
Page 26: [@IndeedEng] Engineering Velocity: Building Great Software Through Fast Iteration
Page 27: [@IndeedEng] Engineering Velocity: Building Great Software Through Fast Iteration
Page 28: [@IndeedEng] Engineering Velocity: Building Great Software Through Fast Iteration
Page 29: [@IndeedEng] Engineering Velocity: Building Great Software Through Fast Iteration
Page 30: [@IndeedEng] Engineering Velocity: Building Great Software Through Fast Iteration

Job SearchWeb App

Doc Retrieval

Company Info

Authentication

Location

Index Search

Page 31: [@IndeedEng] Engineering Velocity: Building Great Software Through Fast Iteration

Job SearchWeb App Index Search

Doc Retrieval

Company Info

Location

Authentication

Page 32: [@IndeedEng] Engineering Velocity: Building Great Software Through Fast Iteration

Doc Retrieval

Company Info

Job SearchWeb App

Authentication

Location

Index Search

Page 33: [@IndeedEng] Engineering Velocity: Building Great Software Through Fast Iteration

Technical Challenges

High Performance● Speed is a feature● 100ms response time

Page 34: [@IndeedEng] Engineering Velocity: Building Great Software Through Fast Iteration

Technical Challenges

Forward & Backward Compatibility● Any client and any service can be updated at

any time

Page 35: [@IndeedEng] Engineering Velocity: Building Great Software Through Fast Iteration

High Performance SOA Framework

Boxcar

Image used with permission of O Scale Trains Magazine (oscalemag.com), photo credit Don McFall of Old Line Graphics

http://go.indeed.com/boxcar

Page 36: [@IndeedEng] Engineering Velocity: Building Great Software Through Fast Iteration

http://go.indeed.com/boxcar

Boxcar: Load Distribution without Middleware

Page 37: [@IndeedEng] Engineering Velocity: Building Great Software Through Fast Iteration

Represent complex data types

Extremely compact and performant

Forwards and backwards compatible

Boxcar: API Compatibility

Page 38: [@IndeedEng] Engineering Velocity: Building Great Software Through Fast Iteration

Boxcar: API Compatibility

Request and response data encoded as Protocol Buffers

Compatible evolution of service interfaces

Reduces release order dependencies

Page 39: [@IndeedEng] Engineering Velocity: Building Great Software Through Fast Iteration

Doc Retrieval

Company Info

Job SearchWeb App

Authentication

Location

Index Search

Boxcar!

Page 40: [@IndeedEng] Engineering Velocity: Building Great Software Through Fast Iteration
Page 41: [@IndeedEng] Engineering Velocity: Building Great Software Through Fast Iteration

Service Oriented Architecturefor

Web Frontends

Page 42: [@IndeedEng] Engineering Velocity: Building Great Software Through Fast Iteration
Page 43: [@IndeedEng] Engineering Velocity: Building Great Software Through Fast Iteration
Page 44: [@IndeedEng] Engineering Velocity: Building Great Software Through Fast Iteration
Page 45: [@IndeedEng] Engineering Velocity: Building Great Software Through Fast Iteration
Page 46: [@IndeedEng] Engineering Velocity: Building Great Software Through Fast Iteration
Page 47: [@IndeedEng] Engineering Velocity: Building Great Software Through Fast Iteration
Page 48: [@IndeedEng] Engineering Velocity: Building Great Software Through Fast Iteration
Page 49: [@IndeedEng] Engineering Velocity: Building Great Software Through Fast Iteration

Each page hasdifferent featuresdifferent operational requirementsdifferent owners

Each page should be its own application

Page 50: [@IndeedEng] Engineering Velocity: Building Great Software Through Fast Iteration
Page 51: [@IndeedEng] Engineering Velocity: Building Great Software Through Fast Iteration

Trends

Company Info

Forums

Salary

Job Search

Indeed

Page 52: [@IndeedEng] Engineering Velocity: Building Great Software Through Fast Iteration

Technical Challenges

Provide a consistent user experience

One implementation of shared functionality

Page 53: [@IndeedEng] Engineering Velocity: Building Great Software Through Fast Iteration

Option: Shared Code Libraries

Reduced flexibility of technology decisions

Requires a release of all projects

Occasional inconsistent user experience

Page 54: [@IndeedEng] Engineering Velocity: Building Great Software Through Fast Iteration

Navshell

Application-level Rewriting HTTP Proxy

Page 55: [@IndeedEng] Engineering Velocity: Building Great Software Through Fast Iteration

Navshell

Request

Web App

HTTP

Page 56: [@IndeedEng] Engineering Velocity: Building Great Software Through Fast Iteration
Page 57: [@IndeedEng] Engineering Velocity: Building Great Software Through Fast Iteration

<head> <title>Johnson & Johnson Careers</title> <link type="text/css" href="common.css"> <link type="text/css" href="comp.css"></head><body> <div id="page-header"> ...... </div> <div id="page-body"> <div id="page-frame"> <div id="comp-header"> ...... </div> </div> </div></body>

Page 58: [@IndeedEng] Engineering Velocity: Building Great Software Through Fast Iteration

<head> <title>Johnson & Johnson Careers</title> <link type="text/css" href="common.css"> <link type="text/css" href="comp.css"></head><body> <div id="page-header"> ...... </div> <div id="page-body"> <div id="page-frame"> <div id="comp-header"> ...... </div> </div> </div></body>

Page 59: [@IndeedEng] Engineering Velocity: Building Great Software Through Fast Iteration

<head> <title>Johnson & Johnson Careers</title> <link type="text/css" href="common.css"> <link type="text/css" href="comp.css"></head><body> <div id="page-header"> ...... </div> <div id="page-body"> <div id="page-frame"> <div id="comp-header"> ...... </div> </div> </div></body>

Page 60: [@IndeedEng] Engineering Velocity: Building Great Software Through Fast Iteration

REQUEST HEADERSCookie, User-Agent, Referer, etcX-Indeed-Shell: 1X-Indeed-Logged-In: [01]X-Indeed-Email: [email protected]: en_USX-Indeed-Geo: US

Navshell

Web App

Page 61: [@IndeedEng] Engineering Velocity: Building Great Software Through Fast Iteration

RESPONSE HEADERSSet-CookieX-Indeed-Page-Title: Indeed CareersX-Indeed-Include-Js-Footer: /js/app.jsX-Indeed-Include-Css: /style/main.css

Navshell

Web App

Page 62: [@IndeedEng] Engineering Velocity: Building Great Software Through Fast Iteration

Navshell

No duplicate code

Centralized navigation changes

Plain HTTP with strong contract

Decoupled front-ends

Page 63: [@IndeedEng] Engineering Velocity: Building Great Software Through Fast Iteration

Navshell

Requests

Services Web Apps

Page 64: [@IndeedEng] Engineering Velocity: Building Great Software Through Fast Iteration

Web-Based Delivery of Mobile App Features

Page 65: [@IndeedEng] Engineering Velocity: Building Great Software Through Fast Iteration

Mobile

Mobile Browser Mobile App

Page 66: [@IndeedEng] Engineering Velocity: Building Great Software Through Fast Iteration

Mobile

Mobile Browser Mobile App

Page 67: [@IndeedEng] Engineering Velocity: Building Great Software Through Fast Iteration

MobileBrowsers

MobileApps

DesktopBrowsers

Job Search App

Page 68: [@IndeedEng] Engineering Velocity: Building Great Software Through Fast Iteration

● One code base for mobile web, iOS, Android● Simultaneous release of features across

platforms

Shared Code Across Platforms

Page 69: [@IndeedEng] Engineering Velocity: Building Great Software Through Fast Iteration

● No waiting for App Store approval● No waiting for job seekers to upgrade

Release On Our Own Schedule

Page 70: [@IndeedEng] Engineering Velocity: Building Great Software Through Fast Iteration

Easy To Run Experiments

● A/B testing in native apps extremely challenging

● Reuse existing infrastructure for performing and evaluating experiments

Page 71: [@IndeedEng] Engineering Velocity: Building Great Software Through Fast Iteration

Software Architecture

Processes and Tools

Risk Management

Deliver

Page 72: [@IndeedEng] Engineering Velocity: Building Great Software Through Fast Iteration

<Indeed map of the world>

Page 73: [@IndeedEng] Engineering Velocity: Building Great Software Through Fast Iteration

one search. all jobs.

una búsqueda. todos los empleos.

Jedno vyhledávání. Všechna pracovní místa.

Ein Klick. Alle Jobs.

一站搜尋,工作齊全

tek arama. bütün işler.

uma busca. todos os empregos.

één klik. alle vacatures.

あらゆる仕事 まとめて検索

una ricerca. tutti i lavori.

Page 74: [@IndeedEng] Engineering Velocity: Building Great Software Through Fast Iteration

Implement Commit

Deploy to QA

Deploy to ProductionVerify

Before Internationalization

Page 75: [@IndeedEng] Engineering Velocity: Building Great Software Through Fast Iteration

Implement Commit

Translate

Deploy to ProductionVerify

Deploy to QA

CommitExtract

Internationalization Process Overhead

Page 76: [@IndeedEng] Engineering Velocity: Building Great Software Through Fast Iteration

+1 day (20%)

Page 77: [@IndeedEng] Engineering Velocity: Building Great Software Through Fast Iteration

+1 day (20%)

Page 78: [@IndeedEng] Engineering Velocity: Building Great Software Through Fast Iteration

<Indeed map of the world>

Page 79: [@IndeedEng] Engineering Velocity: Building Great Software Through Fast Iteration

<Indeed map of the world><but with only US in orange>

Page 80: [@IndeedEng] Engineering Velocity: Building Great Software Through Fast Iteration
Page 81: [@IndeedEng] Engineering Velocity: Building Great Software Through Fast Iteration

Machine Translation

English

Portuguese

Page 82: [@IndeedEng] Engineering Velocity: Building Great Software Through Fast Iteration

Machine Translation

Low quality translations are better than no translations

But we needed something better

Page 83: [@IndeedEng] Engineering Velocity: Building Great Software Through Fast Iteration

Human Translation Service

Tuesday afternoon: Commit Code Fetch Machine Translations

Page 84: [@IndeedEng] Engineering Velocity: Building Great Software Through Fast Iteration

Human Translation Service

Tuesday afternoon: Commit Code Fetch Machine Translations Request Human Translations

Wednesday morning: Retrieve Human Translations

Page 85: [@IndeedEng] Engineering Velocity: Building Great Software Through Fast Iteration

Implement Commit

Translate

Deploy to ProductionVerify

Deploy to QA

CommitExtract

Localization before Translation Automation

Page 86: [@IndeedEng] Engineering Velocity: Building Great Software Through Fast Iteration

Implement Commit

Deploy to ProductionVerify

Deploy to QA

Extract

Localization with Translation Automation

Retrieve

Page 87: [@IndeedEng] Engineering Velocity: Building Great Software Through Fast Iteration
Page 88: [@IndeedEng] Engineering Velocity: Building Great Software Through Fast Iteration

Software Architecture

Processes and Tools

Risk Management

Deliver

Page 89: [@IndeedEng] Engineering Velocity: Building Great Software Through Fast Iteration

Probability of issue

Duration of issue

Number of users affected

Risk

Page 90: [@IndeedEng] Engineering Velocity: Building Great Software Through Fast Iteration

Releases

Page 91: [@IndeedEng] Engineering Velocity: Building Great Software Through Fast Iteration

Smaller Releases

More releases → less functionality per release

Probability of issue

Page 92: [@IndeedEng] Engineering Velocity: Building Great Software Through Fast Iteration

Monitoring

Duration of issue

Page 93: [@IndeedEng] Engineering Velocity: Building Great Software Through Fast Iteration
Page 94: [@IndeedEng] Engineering Velocity: Building Great Software Through Fast Iteration

Real-time monitoring with Datadog

● Agent reports summarized data

● System and customized business metrics

● Customizable dashboards

Page 95: [@IndeedEng] Engineering Velocity: Building Great Software Through Fast Iteration

Healthcheck Framework

● Applications and services report internal state & health

● Divert traffic away from unhealthy instances● Disable features for failing dependencies

Page 96: [@IndeedEng] Engineering Velocity: Building Great Software Through Fast Iteration

Monitoring and Alerting

● Identify runtime issues● Alert Ops when an issue arises

Page 97: [@IndeedEng] Engineering Velocity: Building Great Software Through Fast Iteration

Proctor

● System for managing A/B experiments● Segment visitors and assign test groups● Manage feature visibility

Page 98: [@IndeedEng] Engineering Velocity: Building Great Software Through Fast Iteration

Proctor

Manage Experiments

Page 99: [@IndeedEng] Engineering Velocity: Building Great Software Through Fast Iteration

Proctor

Manage Experiments → Manage Behavior

Page 100: [@IndeedEng] Engineering Velocity: Building Great Software Through Fast Iteration

Proctor

"rule" : "loggedIn"

"rule" : "${smartphone && 'JP' == country}"

"rule" : "${(ua.OS.family == 'ios' && ua.OS.majorVersion >= 6)}"

etc.

Page 101: [@IndeedEng] Engineering Velocity: Building Great Software Through Fast Iteration

Proctor

if (proctor.isNewThingEnabled()) { newThing.generateResults();} else { oldThing.generateResults();}

Page 102: [@IndeedEng] Engineering Velocity: Building Great Software Through Fast Iteration

Feature Toggles

Probability of issue

"rule" : "fn:endsWith(confirmedUserEmail, '@indeed.com')"

Page 103: [@IndeedEng] Engineering Velocity: Building Great Software Through Fast Iteration

Decouple Features from Releases

Duration of issue

Rollback features and releases independently

Page 104: [@IndeedEng] Engineering Velocity: Building Great Software Through Fast Iteration

Number of users affected

Small allocation changes

0% → 1% → 5% → 50% → 100%

Page 105: [@IndeedEng] Engineering Velocity: Building Great Software Through Fast Iteration

Software Architecture

Processes and Tools

Risk Management

Deliver

Page 106: [@IndeedEng] Engineering Velocity: Building Great Software Through Fast Iteration

Increased impact on products

Page 107: [@IndeedEng] Engineering Velocity: Building Great Software Through Fast Iteration

Increased chance of success

Page 108: [@IndeedEng] Engineering Velocity: Building Great Software Through Fast Iteration

No Failed Projects

Page 109: [@IndeedEng] Engineering Velocity: Building Great Software Through Fast Iteration

No Failed Projects

Page 110: [@IndeedEng] Engineering Velocity: Building Great Software Through Fast Iteration

Fail Fast

Page 111: [@IndeedEng] Engineering Velocity: Building Great Software Through Fast Iteration

No Deadline Crunches

Page 112: [@IndeedEng] Engineering Velocity: Building Great Software Through Fast Iteration

There’s always another release in a few days

Page 113: [@IndeedEng] Engineering Velocity: Building Great Software Through Fast Iteration

More Transparent Schedules

Page 114: [@IndeedEng] Engineering Velocity: Building Great Software Through Fast Iteration

Large changes hidden behind feature toggles

Page 115: [@IndeedEng] Engineering Velocity: Building Great Software Through Fast Iteration

Incremental progress validated in production

environment

Page 116: [@IndeedEng] Engineering Velocity: Building Great Software Through Fast Iteration

We built all of this incrementally, to meet our

own challenges

Page 117: [@IndeedEng] Engineering Velocity: Building Great Software Through Fast Iteration

Yours are different

Page 118: [@IndeedEng] Engineering Velocity: Building Great Software Through Fast Iteration

v = d / t

Page 119: [@IndeedEng] Engineering Velocity: Building Great Software Through Fast Iteration

With rapid iteration & quick delivery, we can

cover more ground

Page 120: [@IndeedEng] Engineering Velocity: Building Great Software Through Fast Iteration

Q&A