31. BOTTUM UP
A developer goes to commit some code
This feature isn’t ready,
what can I do?
Boss
Check out feature flippers!
32. PUSHVS PULL
• A methodology is “pushed” if adoption is
optional and driven by evangelism.
• A methodology is “pulled” if adoption is
mandatory and driven by necessity.
62. REAL WORLD SOA :(
Frontend
Middleware
Backend #1 Backend #2 Backend #3
63. REAL WORLD SOA :(
Commit Build Test Frontend
Commit Build Test Frontend
Commit Build Test Backend #1
Commit Build Test Backend #2
Commit Build Test Backend #3
64. AUTOMATIC
Commit Build Test Frontend
Commit Build Test Frontend
Commit Build Test Backend #1
Commit Build Test Backend #2
Commit Build Test Backend #3
65. TEMPLATED
Commit Build Test Frontend
Commit Build Test Frontend
Commit Build Test Backend #1
Commit Build Test Backend #2
Commit Build Test Backend #3
69. STAGING ENVIRONMENTS
• Shared mutable state
• Across multiple teams
• Across multiple deploy pipelines
• No real users
• No real risk
• Deploying offers no real risk reduction
• Broken Regularly
• 2nd-class compared to production
70. HOW TO NEVER CD TO PRODUCTION
Deploy
to staging
Staging is broken!Less confidence in deploys
71. • Only tests should have access to environment
• Must be able to recreate automatically
• Ideally recreate on every test run
• Every deploy pipeline gets its own environment
But where do I run integration tests?
Commit Build Test Production
90. THE FUTURE
CURRENT LANGUAGES AND FRAMEWORKS
Inherently tightly coupled
Bottlenecked on client’s adoption of change
Perl 6?
Python 3?
AngularJS 2?
Ruby on Rails 2.x 3.x 4.x
91. THE FUTURE
NEXT BIG LANGUAGE/FRAMEWORK
Winner will be
whoever can
sustain evolution!
92. THE FUTURE
NEXT BIG LANGUAGE/FRAMEWORK
▸ Built-in support for code migration
▸ Allow libraries to migrate your code when the library
changes
93. THE FUTURE
REFACTORING DSL
▸ rename(OldClass, NewClass)
▸ change_signature(foo(x), foo(x,y=null))
▸ six.py
▸ go fmt
SOME HINTS OF THE FUTURE