125
Engineering Velocity Building Great Software Through Rapid Iteration

Engineering Velocity @indeed eng presented on Sept 24 2014 at Beyond Agile

Embed Size (px)

DESCRIPTION

Increasing engineering velocity through architecture. This presentation was given at the Beyond Agile meetup group in Seattle on Sept 24, 2014.

Citation preview

Page 1: Engineering Velocity @indeed eng presented on Sept 24 2014 at Beyond Agile

Engineering Velocity

Building Great Software

Through Rapid Iteration

Page 2: Engineering Velocity @indeed eng presented on Sept 24 2014 at Beyond Agile

Matt Schemmel

Engineering

Resume Products

Page 3: Engineering Velocity @indeed eng presented on Sept 24 2014 at Beyond Agile

I help

people

get jobs.

Page 4: Engineering Velocity @indeed eng presented on Sept 24 2014 at Beyond Agile
Page 5: Engineering Velocity @indeed eng presented on Sept 24 2014 at Beyond Agile

Indeed

#1 Job Site Worldwide

More people find jobs on Indeed than anywhere

else

Over 140M monthly visitors

Over 3B monthly searches

Page 6: Engineering Velocity @indeed eng presented on Sept 24 2014 at Beyond Agile

(other)

Page 7: Engineering Velocity @indeed eng presented on Sept 24 2014 at Beyond Agile

Quality ProductsLate '90s

Page 8: Engineering Velocity @indeed eng presented on Sept 24 2014 at Beyond Agile

High Performance

Late '90s

Early '00s

Quality Products

Page 9: Engineering Velocity @indeed eng presented on Sept 24 2014 at Beyond Agile

High Performance

Late '90s

Early '00s

Quality Products

Late '00s High Scalability

Page 10: Engineering Velocity @indeed eng presented on Sept 24 2014 at Beyond Agile

High Performance

Late '90s

Early '00s

Quality Products

Late '00s High Scalability

Early '10s Rapid Iteration

Page 11: Engineering Velocity @indeed eng presented on Sept 24 2014 at Beyond Agile

Rapid Iteration:

Better Products

Faster

http://go.indeed.com/tdwi

http://go.indeed.com/ddpd

http://go.indeed.com/tdwi

Page 12: Engineering Velocity @indeed eng presented on Sept 24 2014 at Beyond Agile

Indeed Product Development Principles

Measure Everything

Test Everything (A/B Experiments)

Iterate Quickly

Page 13: Engineering Velocity @indeed eng presented on Sept 24 2014 at Beyond Agile

Build

MeasureLearn

Lean Startup Cycle

Page 14: Engineering Velocity @indeed eng presented on Sept 24 2014 at Beyond Agile

Indeed Product

Development Cycle

Deliver

MeasureLearn

Page 15: Engineering Velocity @indeed eng presented on Sept 24 2014 at Beyond Agile

Indeed Product

Development Cycle

Quickly!

Deliver

MeasureLearn

Page 16: Engineering Velocity @indeed eng presented on Sept 24 2014 at Beyond Agile

Indeed Product

Development Cycle

MeasureLearn MeasureLearn

Deliver

Page 17: Engineering Velocity @indeed eng presented on Sept 24 2014 at Beyond Agile

Engineering Velocity

MeasureLearn MeasureLearn

Deliver

Page 18: Engineering Velocity @indeed eng presented on Sept 24 2014 at Beyond Agile

Engineering Velocity (n)[ˌenjəˈni(ə)riNG vəˈläsətē]

Our ability to quickly deliver implementations of

ideas to job seekers and employers

Page 19: Engineering Velocity @indeed eng presented on Sept 24 2014 at Beyond Agile

Deliver Developer Productivity

Page 20: Engineering Velocity @indeed eng presented on Sept 24 2014 at Beyond Agile

Software Architecture

Processes and Tools

Risk Management

Deliver

Page 21: Engineering Velocity @indeed eng presented on Sept 24 2014 at Beyond Agile

Software Architecture

Processes and Tools

Risk Management

Deliver

Page 22: Engineering Velocity @indeed eng presented on Sept 24 2014 at Beyond Agile
Page 23: Engineering Velocity @indeed eng presented on Sept 24 2014 at Beyond Agile
Page 24: Engineering Velocity @indeed eng presented on Sept 24 2014 at Beyond Agile
Page 25: Engineering Velocity @indeed eng presented on Sept 24 2014 at Beyond Agile
Page 26: Engineering Velocity @indeed eng presented on Sept 24 2014 at Beyond Agile
Page 27: Engineering Velocity @indeed eng presented on Sept 24 2014 at Beyond Agile

Job Search

Web App

Page 28: Engineering Velocity @indeed eng presented on Sept 24 2014 at Beyond Agile

STOP

EVERY

THING

Page 29: Engineering Velocity @indeed eng presented on Sept 24 2014 at Beyond Agile

Job Search

Web App

Page 30: Engineering Velocity @indeed eng presented on Sept 24 2014 at Beyond Agile

Job Search

Web App

Page 31: Engineering Velocity @indeed eng presented on Sept 24 2014 at Beyond Agile

Service Oriented Architecture:

Technical Challenges

Page 32: Engineering Velocity @indeed eng presented on Sept 24 2014 at Beyond Agile

Challenge: High Performance

● Speed is a feature

● 100ms response time

clic

ks

time-to-render

Page 33: Engineering Velocity @indeed eng presented on Sept 24 2014 at Beyond Agile

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

http://go.indeed.com/boxcar

BoxcarHigh Performance SOA Framework

Page 34: Engineering Velocity @indeed eng presented on Sept 24 2014 at Beyond Agile

BoxcarLoad Distribution without Middleware

http://go.indeed.com/boxcar

Page 35: Engineering Velocity @indeed eng presented on Sept 24 2014 at Beyond Agile

http://go.indeed.com/boxcar

Page 36: Engineering Velocity @indeed eng presented on Sept 24 2014 at Beyond Agile

Challenge: Compatibility over Time

● Any service can be updated at any time

● Any client can be updated at any time

● Any service or client can be rolled back

unexpectedly

Every service conversation must be forward

and backwards compatible

Page 37: Engineering Velocity @indeed eng presented on Sept 24 2014 at Beyond Agile

Represent complex data types

Extremely compact and performant

Forwards and backwards compatible

Boxcar: API Compatibility

Page 38: Engineering Velocity @indeed eng presented on Sept 24 2014 at Beyond Agile

Challenge: Deploy Independence

Forward/backward-compatible API is great.

But what about implementations?

Page 39: Engineering Velocity @indeed eng presented on Sept 24 2014 at Beyond Agile

Hard Scenarios

New API

Old server doesn't understand new client

Same API, Different Behavior

Old client doesn't understand new server

New client doesn't understand old server

Page 40: Engineering Velocity @indeed eng presented on Sept 24 2014 at Beyond Agile

ProctorEfficient A/B Experiment Management

http://indeedeng.github.io/proctor/

Page 41: Engineering Velocity @indeed eng presented on Sept 24 2014 at Beyond Agile

Proctor

● Visitor segmentation

● Population filters

● Contextual allocation

http://indeedeng.github.io/proctor/

Page 42: Engineering Velocity @indeed eng presented on Sept 24 2014 at Beyond Agile

Proctor: Filters

"rule" : "loggedIn"

"rule" : "smartphone &&

'JP' == country"

"rule" : "ua.os == 'ios' &&

ua.version >= '6.0'"

Page 43: Engineering Velocity @indeed eng presented on Sept 24 2014 at Beyond Agile

Sign Up Activate

Proctor: Visitor Allocation

10% 10%

Sign Up Activate

25% 25%

US

UK

Page 44: Engineering Velocity @indeed eng presented on Sept 24 2014 at Beyond Agile

Proctor

Manage Experiments → Manage Behavior

Page 45: Engineering Velocity @indeed eng presented on Sept 24 2014 at Beyond Agile

Job Search

Web App

Boxcar!

Page 46: Engineering Velocity @indeed eng presented on Sept 24 2014 at Beyond Agile
Page 47: Engineering Velocity @indeed eng presented on Sept 24 2014 at Beyond Agile

Decoupling

Web Front-Ends

Page 48: Engineering Velocity @indeed eng presented on Sept 24 2014 at Beyond Agile
Page 49: Engineering Velocity @indeed eng presented on Sept 24 2014 at Beyond Agile
Page 50: Engineering Velocity @indeed eng presented on Sept 24 2014 at Beyond Agile
Page 51: Engineering Velocity @indeed eng presented on Sept 24 2014 at Beyond Agile
Page 52: Engineering Velocity @indeed eng presented on Sept 24 2014 at Beyond Agile
Page 53: Engineering Velocity @indeed eng presented on Sept 24 2014 at Beyond Agile
Page 54: Engineering Velocity @indeed eng presented on Sept 24 2014 at Beyond Agile
Page 55: Engineering Velocity @indeed eng presented on Sept 24 2014 at Beyond Agile

Each page has

different features

different data

different operational requirements

different owners

Each page should be its own deliverable

Page 56: Engineering Velocity @indeed eng presented on Sept 24 2014 at Beyond Agile
Page 57: Engineering Velocity @indeed eng presented on Sept 24 2014 at Beyond Agile

Trends

Company Info

Forums

Salary

Job Search

Indeed

Page 58: Engineering Velocity @indeed eng presented on Sept 24 2014 at Beyond Agile

Indeed Web Properties Goals

Provide a consistent user experience

One implementation of shared functionality

Completely decoupled applications

Page 59: Engineering Velocity @indeed eng presented on Sept 24 2014 at Beyond Agile
Page 60: Engineering Velocity @indeed eng presented on Sept 24 2014 at Beyond Agile

Option: Shared Libraries?

Reduced flexibility of technology decisions

Requires a release of all projects

Occasional inconsistent user experience

Page 61: Engineering Velocity @indeed eng presented on Sept 24 2014 at Beyond Agile

Option: Shared Resources?

http://www.indeed.com/global/nav.js

http://www.indeed.com/global/nav.css

http://www.indeed.com/global/nav

On every app, include:

Page 62: Engineering Velocity @indeed eng presented on Sept 24 2014 at Beyond Agile

Option: Common Resource

Reduced flexibility of technology decisions

Requires a release of all projects

Occasional inconsistent user experience

No shared services

Page 63: Engineering Velocity @indeed eng presented on Sept 24 2014 at Beyond Agile

Solution: Navshell

Application-level Rewriting HTTP Proxy

Page 64: Engineering Velocity @indeed eng presented on Sept 24 2014 at Beyond Agile

Navshell

Request

Web App

HTTP

Page 65: Engineering Velocity @indeed eng presented on Sept 24 2014 at Beyond Agile
Page 66: Engineering Velocity @indeed eng presented on Sept 24 2014 at Beyond Agile

<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 67: Engineering Velocity @indeed eng presented on Sept 24 2014 at Beyond Agile

<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 68: Engineering Velocity @indeed eng presented on Sept 24 2014 at Beyond Agile

<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 69: Engineering Velocity @indeed eng presented on Sept 24 2014 at Beyond Agile

REQUEST HEADERS

Cookie, 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 70: Engineering Velocity @indeed eng presented on Sept 24 2014 at Beyond Agile

RESPONSE HEADERS

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

Navshell

Web App

Page 71: Engineering Velocity @indeed eng presented on Sept 24 2014 at Beyond Agile

Navshell

No duplicate code

Centralized navigation changes

Plain HTTP with strong contract

Decoupled front-ends

Page 72: Engineering Velocity @indeed eng presented on Sept 24 2014 at Beyond Agile

Navshell

Requests

Services Web Apps

Page 73: Engineering Velocity @indeed eng presented on Sept 24 2014 at Beyond Agile

Web-Based Delivery of

Mobile App Features

Page 74: Engineering Velocity @indeed eng presented on Sept 24 2014 at Beyond Agile

Mobile

Mobile Browser Mobile App

Page 75: Engineering Velocity @indeed eng presented on Sept 24 2014 at Beyond Agile

Mobile

Mobile Browser Mobile App

Page 76: Engineering Velocity @indeed eng presented on Sept 24 2014 at Beyond Agile

● One code base for mobile web, iOS, Android

● Simultaneous release of features across

platforms

● No waiting for App Store approval

● No waiting for job seekers to upgrade

Shared Code Across Platforms

Page 77: Engineering Velocity @indeed eng presented on Sept 24 2014 at Beyond Agile

Easy To Reuse Infrastructure

● A/B testing in native apps challenging

● Activity tracking challenging

● Performance monitoring challenging

We have battle-hardened solutions to all these.

Page 78: Engineering Velocity @indeed eng presented on Sept 24 2014 at Beyond Agile

Mobile

Browsers

Mobile

Apps

Desktop

Browsers

Job Search

App

Page 79: Engineering Velocity @indeed eng presented on Sept 24 2014 at Beyond Agile

Software Architecture

Processes and Tools

Risk Management

Deliver

Page 80: Engineering Velocity @indeed eng presented on Sept 24 2014 at Beyond Agile

Product

Eng QA

Continuous Collaboration

Page 81: Engineering Velocity @indeed eng presented on Sept 24 2014 at Beyond Agile

Continuous Deployment Toolchain

Integration git

Verification Jenkins

JUnit, TestNG, Selenium, JaCoCo, …

Deployment Rundeck

Page 82: Engineering Velocity @indeed eng presented on Sept 24 2014 at Beyond Agile

● Configuration changes

● Resource re-allocation

● Database schema updates

● Internationalization

But what about the hard stuff?

Page 83: Engineering Velocity @indeed eng presented on Sept 24 2014 at Beyond Agile

● Configuration changes

● Resource re-allocation

● Database schema updates

● Internationalization

But what about the hard stuff?

http://go.indeed.com/i18n

Page 84: Engineering Velocity @indeed eng presented on Sept 24 2014 at Beyond Agile

<Indeed map of the world>

Page 85: Engineering Velocity @indeed eng presented on Sept 24 2014 at Beyond Agile

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 86: Engineering Velocity @indeed eng presented on Sept 24 2014 at Beyond Agile

Implement Commit

Deploy to

QA

Deploy to

ProductionVerify

Before Internationalization

Page 87: Engineering Velocity @indeed eng presented on Sept 24 2014 at Beyond Agile

Translate

Implement Commit

Deploy to

ProductionVerifyDeploy to

QA

Identify

Internationalization Process Overhead

Commit

Page 88: Engineering Velocity @indeed eng presented on Sept 24 2014 at Beyond Agile

+1 day

Page 89: Engineering Velocity @indeed eng presented on Sept 24 2014 at Beyond Agile

+1 day (20%)

Page 90: Engineering Velocity @indeed eng presented on Sept 24 2014 at Beyond Agile

+1 day (minimum)

Page 91: Engineering Velocity @indeed eng presented on Sept 24 2014 at Beyond Agile

<Indeed map of the world>

Page 92: Engineering Velocity @indeed eng presented on Sept 24 2014 at Beyond Agile

<Indeed map of the world>

<but with only US in orange>

Page 93: Engineering Velocity @indeed eng presented on Sept 24 2014 at Beyond Agile

I help [English-speaking

Americans]

get jobs?

Page 94: Engineering Velocity @indeed eng presented on Sept 24 2014 at Beyond Agile
Page 95: Engineering Velocity @indeed eng presented on Sept 24 2014 at Beyond Agile

http://www.gnu.org/software/gettext/

gettext utilitiesGNU Translation Project Tool Set

Page 96: Engineering Velocity @indeed eng presented on Sept 24 2014 at Beyond Agile

Template

en.po

Extract

Page 97: Engineering Velocity @indeed eng presented on Sept 24 2014 at Beyond Agile

✓ Many text sources: jsp, ftl, soy, js, …

✓ Dialects: en_US, en_CA, en_GB, …

✓ Variable substitution

✓ Complex plural forms

gettext utilities (with some help)

Page 98: Engineering Velocity @indeed eng presented on Sept 24 2014 at Beyond Agile

Machine Translation

English

Portuguese

Page 99: Engineering Velocity @indeed eng presented on Sept 24 2014 at Beyond Agile

Machine Translation

Low quality translations are better than no

translations

But we needed something better

Page 100: Engineering Velocity @indeed eng presented on Sept 24 2014 at Beyond Agile

Human Translation Service

Page 101: Engineering Velocity @indeed eng presented on Sept 24 2014 at Beyond Agile

Extract Improve Release

Combined Translation Service

Page 102: Engineering Velocity @indeed eng presented on Sept 24 2014 at Beyond Agile

Translate

Implement Commit

Deploy to

ProductionVerifyDeploy to

QA

CommitIdentify

Localization before Translation Automation

Page 103: Engineering Velocity @indeed eng presented on Sept 24 2014 at Beyond Agile

Implement Commit

Deploy to

ProductionVerifyDeploy to

QA

Extract

Localization with Translation Automation

Improve

Page 104: Engineering Velocity @indeed eng presented on Sept 24 2014 at Beyond Agile

And if there just isn't enough time…

"rule" : "language != 'es'"

"rule" : "locale != 'en_GB'"

"rule" : "country != 'IT'"

Page 105: Engineering Velocity @indeed eng presented on Sept 24 2014 at Beyond Agile

I help

everyone

get jobs!

Page 106: Engineering Velocity @indeed eng presented on Sept 24 2014 at Beyond Agile

Software Architecture

Processes and Tools

Risk Management

Deliver

Page 107: Engineering Velocity @indeed eng presented on Sept 24 2014 at Beyond Agile

Severity of issue

Probability of issue

Number of users affected

Risk

Page 108: Engineering Velocity @indeed eng presented on Sept 24 2014 at Beyond Agile
Page 109: Engineering Velocity @indeed eng presented on Sept 24 2014 at Beyond Agile

Smaller Releases

More releases → less functionality per release

Probability of issue

Page 110: Engineering Velocity @indeed eng presented on Sept 24 2014 at Beyond Agile

Proctor Feature Toggles

Probability of issue

"rule" :

"endsWith(email,'@indeed.com')"

Page 111: Engineering Velocity @indeed eng presented on Sept 24 2014 at Beyond Agile

Manage Cross-Product Releases

Deploy products then activate features

Probability of ISsue

Page 112: Engineering Velocity @indeed eng presented on Sept 24 2014 at Beyond Agile

Decouple Features from Releases

Rollback features and releases independently

# of users affected

Page 113: Engineering Velocity @indeed eng presented on Sept 24 2014 at Beyond Agile

Number of users affected

Incremental allocation changes

1% → 5% → 25% → 50% → 100%

Page 114: Engineering Velocity @indeed eng presented on Sept 24 2014 at Beyond Agile

Embedded QA

Probability of issue

Severity of issue

Page 115: Engineering Velocity @indeed eng presented on Sept 24 2014 at Beyond Agile

Monitoring

# of users affected

Page 116: Engineering Velocity @indeed eng presented on Sept 24 2014 at Beyond Agile

Monitoring and Alerting

● Identify runtime issues

● Alert Ops when an issue arises

Page 117: Engineering Velocity @indeed eng presented on Sept 24 2014 at Beyond Agile

Healthcheck Framework

● Applications and services self-report

internal state & health

● Divert traffic away from unhealthy instances

● Disable features for failing dependencies

Page 118: Engineering Velocity @indeed eng presented on Sept 24 2014 at Beyond Agile
Page 119: Engineering Velocity @indeed eng presented on Sept 24 2014 at Beyond Agile

Measure Everything

Page 120: Engineering Velocity @indeed eng presented on Sept 24 2014 at Beyond Agile

Software Architecture

Processes and Tools

Risk Management

Deliver

Page 121: Engineering Velocity @indeed eng presented on Sept 24 2014 at Beyond Agile

Better Product

● Emphasize goals over features

● Fail faster, cheaper

● Incremental progress live in production

Page 122: Engineering Velocity @indeed eng presented on Sept 24 2014 at Beyond Agile

Better Life

● No deadline crunches

● There's always another release coming

● More transparent schedules = less stress

Page 123: Engineering Velocity @indeed eng presented on Sept 24 2014 at Beyond Agile

We built all of this

incrementally, to meet

our own challenges

Page 124: Engineering Velocity @indeed eng presented on Sept 24 2014 at Beyond Agile

Yours are different

Page 125: Engineering Velocity @indeed eng presented on Sept 24 2014 at Beyond Agile

Q&A

Visit

http://engineering.indeed.com/

and

http://go.indeed.com/jobs