releasing to production every week

158
Releasing to Production Every Week

Upload: exortech

Post on 26-Jun-2015

2.706 views

Category:

Technology


1 download

DESCRIPTION

Presented at DevTeach Vancouver 2009

TRANSCRIPT

Page 1: Releasing To Production Every Week

Releasing to Production Every

Week

Page 2: Releasing To Production Every Week

1 year

Page 3: Releasing To Production Every Week

46 releases

Page 4: Releasing To Production Every Week

1 rollback

Page 5: Releasing To Production Every Week

summary

Page 6: Releasing To Production Every Week

lessons learned

Page 7: Releasing To Production Every Week

poll:

Page 8: Releasing To Production Every Week

how long is your release cycle?

Page 9: Releasing To Production Every Week

Company

Page 10: Releasing To Production Every Week
Page 11: Releasing To Production Every Week

real-time energy monitoring

Page 12: Releasing To Production Every Week

building energy efficiency

Page 13: Releasing To Production Every Week

save $

Page 14: Releasing To Production Every Week

save kW

Page 15: Releasing To Production Every Week

save

Page 16: Releasing To Production Every Week

aggregate data

Page 17: Releasing To Production Every Week
Page 18: Releasing To Production Every Week
Page 19: Releasing To Production Every Week
Page 20: Releasing To Production Every Week
Page 21: Releasing To Production Every Week
Page 22: Releasing To Production Every Week

hosted solution

Page 23: Releasing To Production Every Week

SaaS

Page 24: Releasing To Production Every Week

Java

Page 25: Releasing To Production Every Week

learn

Page 26: Releasing To Production Every Week

Team

Page 27: Releasing To Production Every Week
Page 28: Releasing To Production Every Week

• 9 developers

Page 29: Releasing To Production Every Week

• 9 developers• 1 product manager

Page 30: Releasing To Production Every Week

• 9 developers• 1 product manager• 1 graphic designer

Page 31: Releasing To Production Every Week

• 9 developers• 1 product manager• 1 graphic designer• 1 tester*

Page 32: Releasing To Production Every Week

• 9 developers• 1 product manager• 1 graphic designer• 1 tester*

* recently added

Page 33: Releasing To Production Every Week

what’s missing?

Page 34: Releasing To Production Every Week

operations?

Page 35: Releasing To Production Every Week

support?

Page 36: Releasing To Production Every Week

QA?

Page 37: Releasing To Production Every Week

project manager?

Page 38: Releasing To Production Every Week

DBA?

Page 39: Releasing To Production Every Week

generalizing specialists

Page 40: Releasing To Production Every Week

fungibility

Page 41: Releasing To Production Every Week

rotating responsibility

Page 42: Releasing To Production Every Week

daily support duty

Page 43: Releasing To Production Every Week

few hand-offs

Page 44: Releasing To Production Every Week

empowered

Page 45: Releasing To Production Every Week

Process

Page 46: Releasing To Production Every Week

Goal:• to surface risk as early

as possible to keep problems out of production

Page 47: Releasing To Production Every Week

maximize feedback

Page 48: Releasing To Production Every Week

shrink time

Page 49: Releasing To Production Every Week

Continuous Integration

Page 50: Releasing To Production Every Week

Continuous Integration

• 3-4 Commits/dev/day

Page 51: Releasing To Production Every Week

Automated Build

Page 52: Releasing To Production Every Week

Automated Build

• 3 minute build

Page 53: Releasing To Production Every Week

Automated Build

• 3 minute build• 30-40 builds/day

Page 54: Releasing To Production Every Week

Automated Build

• 3 minute build• 30-40 builds/day

Page 55: Releasing To Production Every Week

Automated Test Deploy

Page 56: Releasing To Production Every Week

Automated Test Deploy

• 4-5 times per day

Page 57: Releasing To Production Every Week

Automated Test Deploy

• 4-5 times per day• Scheduled nightly at

11PM

Page 58: Releasing To Production Every Week

Daily Standup

Page 59: Releasing To Production Every Week

Daily Standup

• Weekly company standup

Page 60: Releasing To Production Every Week

Daily Review

Page 61: Releasing To Production Every Week

Daily Review

• Quick peer feature review

Page 62: Releasing To Production Every Week

Weekly Demo

Page 63: Releasing To Production Every Week

Weekly Demo

• 15 minute company-wide user-driven demo

Page 64: Releasing To Production Every Week

Mon Tues Wed Thurs Fri

9:30AMPlanningMeeting

10:00AMUser-driven

Demo

ReleaseTesting

5pmRelease

weekly cycle

Page 65: Releasing To Production Every Week

“agile”

Page 66: Releasing To Production Every Week

Scrum?

Page 67: Releasing To Production Every Week

XP?

Page 68: Releasing To Production Every Week

what’s missing?

Page 69: Releasing To Production Every Week

user stories?

Page 70: Releasing To Production Every Week

user stories?

Page 71: Releasing To Production Every Week

user stories?

Page 72: Releasing To Production Every Week

story boards?

Page 73: Releasing To Production Every Week

story boards?

Page 74: Releasing To Production Every Week

story boards?

Page 75: Releasing To Production Every Week
Page 76: Releasing To Production Every Week

estimation?

Page 77: Releasing To Production Every Week

estimation?

Page 78: Releasing To Production Every Week

estimation?fits or it doesn’t

Page 79: Releasing To Production Every Week

pairing?

Page 80: Releasing To Production Every Week

pairing?

Page 81: Releasing To Production Every Week

pairing?as needed

Page 82: Releasing To Production Every Week

pairing?as needed

code reviews

Page 83: Releasing To Production Every Week

TDD?

Page 84: Releasing To Production Every Week

TDD?

Page 85: Releasing To Production Every Week

TDD?30% coverage

Page 86: Releasing To Production Every Week

TDD?30% coverage

+ Selenium

Page 87: Releasing To Production Every Week

TDD?30% coverage

+ Selenium

Page 88: Releasing To Production Every Week

retrospectives?

Page 89: Releasing To Production Every Week

retrospectives?

Page 90: Releasing To Production Every Week

retrospectives?Release Review

Page 91: Releasing To Production Every Week

retrospectives?Release Review

5 Whys

Page 92: Releasing To Production Every Week

5 Whys

Page 93: Releasing To Production Every Week

lightweight RCA

Page 94: Releasing To Production Every Week

just-in-time

Page 95: Releasing To Production Every Week

within 24 hours

Page 96: Releasing To Production Every Week

1 Jira per question

Page 97: Releasing To Production Every Week

Practices

Page 98: Releasing To Production Every Week

Daily support rotation

Page 99: Releasing To Production Every Week

5 Whys

Page 100: Releasing To Production Every Week

Continuous Monitoring

Page 101: Releasing To Production Every Week

Continuous Monitoring

App Server Socket Logger LogMaster

WARN | ERROR

Page 102: Releasing To Production Every Week

Continuous Monitoring

Page 103: Releasing To Production Every Week

Continuous Monitoring

• Proactive response to issues

Page 104: Releasing To Production Every Week

Continuous Monitoring

• Proactive response to issues

• Clean logs

Page 105: Releasing To Production Every Week

Continuous Monitoring

• Proactive response to issues

• Clean logs

• Message throttling

Page 106: Releasing To Production Every Week

Continuous Monitoring

• Proactive response to issues

• Clean logs

• Message throttling

• Gmail

Page 107: Releasing To Production Every Week

Continuous Monitoring

• Proactive response to issues

• Clean logs

• Message throttling

• Gmail

• Managing the signal-to-noise ratio

Page 108: Releasing To Production Every Week

Continuous Monitoring

Page 109: Releasing To Production Every Week

Continuous Monitoring

Page 110: Releasing To Production Every Week

Continuous Monitoring

Page 111: Releasing To Production Every Week

Continuous Monitoring

App Server

gmetad

web app

RRD

gmondUDP multicast

Page 112: Releasing To Production Every Week

Continuous Monitoring

Page 113: Releasing To Production Every Week

Continuous Monitoring

Page 114: Releasing To Production Every Week

Continuous Monitoring

Page 115: Releasing To Production Every Week

Continuous Monitoring

Page 116: Releasing To Production Every Week

Test mirrors Prod

Page 117: Releasing To Production Every Week

Trust Test

Page 118: Releasing To Production Every Week

Zero-downtime Deployment

Page 119: Releasing To Production Every Week

Zero-downtime Deploys

Load Balancer

App Server App Server App Server

Deploy

Page 120: Releasing To Production Every Week

Zero-downtime Deploys

Page 121: Releasing To Production Every Week

Zero-downtime Deploys

• Fully automated deployment

Page 122: Releasing To Production Every Week

Zero-downtime Deploys

• Fully automated deployment

• One button deploy from TeamCity

Page 123: Releasing To Production Every Week

Zero-downtime Deploys

• Fully automated deployment

• One button deploy from TeamCity

• Gracefully bring down servers

Page 124: Releasing To Production Every Week

Zero-downtime Deploys

What about the DB?

Page 125: Releasing To Production Every Week

Zero-downtime Deploys

Bering

Page 126: Releasing To Production Every Week

Zero-downtime Deploys

001_create_login_table002_add_login_id_index003_create_user_table004_create_group_table

001_add_inv_constraint002_drop_alias_column

Expand Contract

Page 127: Releasing To Production Every Week

Zero-downtime Deploys

Page 128: Releasing To Production Every Week

Zero-downtime Deploys

• Database migration decoupled from the release

Page 129: Releasing To Production Every Week

Zero-downtime Deploys

• Database migration decoupled from the release

• Simplified rollback

Page 130: Releasing To Production Every Week

Zero-downtime Deploys

• Database migration decoupled from the release

• Simplified rollback

• Some additional complexity in writing migrations

Page 131: Releasing To Production Every Week

Incremental Rollout

Page 132: Releasing To Production Every Week

Incremental Rollout

Page 133: Releasing To Production Every Week

Incremental Rollout

• New features are released to user subset (by role)

Page 134: Releasing To Production Every Week

Incremental Rollout

• New features are released to user subset (by role)

• “Release is a marketing term”

Page 135: Releasing To Production Every Week

Incremental Rollout

• New features are released to user subset (by role)

• “Release is a marketing term”

• Production levers

Page 136: Releasing To Production Every Week

Incremental Rollout

• New features are released to user subset (by role)

• “Release is a marketing term”

• Production levers

• Selective degredation

Page 137: Releasing To Production Every Week

Production DB Restore

Page 138: Releasing To Production Every Week

Production DB Restore

Page 139: Releasing To Production Every Week

Production DB Restore

• Nightly backups

Page 140: Releasing To Production Every Week

Production DB Restore

• Nightly backups

• Automated Test DB refresh every Monday morning

Page 141: Releasing To Production Every Week

Production DB Restore

• Nightly backups

• Automated Test DB refresh every Monday morning

• Local DB refresh on demand

Page 142: Releasing To Production Every Week

Production DB Restore

• Nightly backups

• Automated Test DB refresh every Monday morning

• Local DB refresh on demand

• Cleansed

Page 143: Releasing To Production Every Week

WANGMI

Page 144: Releasing To Production Every Week

WANGMI

akathe discipline to defer

Page 145: Releasing To Production Every Week

Single Feature Release

Page 146: Releasing To Production Every Week

• Daily Support Rotation

• 5 Whys

• Continuous Monitoring

• Test mirrors Prod

• Zero-downtime deployment

• Incremental rollout

• Production DB restore

• WANGMI - the discipline to defer

• Single Feature Release

Page 147: Releasing To Production Every Week

Tools

Page 148: Releasing To Production Every Week
Page 149: Releasing To Production Every Week
Page 150: Releasing To Production Every Week
Page 151: Releasing To Production Every Week
Page 153: Releasing To Production Every Week
Page 154: Releasing To Production Every Week

Nov 3, 4, 5• Martin Fowler

• Mary Poppendieck

• Eric Evans

• Michael Feathers

• Michael Nygard

Page 156: Releasing To Production Every Week

• Eric Ries: Continuous Deployment

Page 157: Releasing To Production Every Week

• Daily rotating support duty

• Log: 100MB/server/day

• 30 KLOC

Page 158: Releasing To Production Every Week

• ThoughtWorks

• Working with clients to shorten their release cycle

• “Agile”

• CruiseControl.NET