Database DevOps
anti-patterns
DLM Consultants
Alex Yates
(How to screw up your ability to deliver
schema changes in 15 simple steps)
DLM Consultants
Alex Yates
workingwithdevs.com
alex.yates@dlmconsultants.com
DLM Consultants
Alex Yates
@_AlexYates_ | #sqlinthecity
@_AlexYates_
#sqlinthecity
“10,000 releases per day”
Alistair Hann, SkyScanner
@_AlexYates_
#sqlinthecity
Step 1: Fear every change
@_AlexYates_
#sqlinthecity
Step 2:Wait until you are already screwed
@_AlexYates_
#sqlinthecity
Step 3: Build a tangled web of databases
@_AlexYates_
#sqlinthecity
Step 4: Customize each production instance
@_AlexYates_
#sqlinthecity
Step 5: Don’t use a standard source control process
@_AlexYates_
#sqlinthecity
Step 6: Impose new process on underlings
@_AlexYates_
#sqlinthecity
Step 7: Don’t provide any training
@_AlexYates_
#sqlinthecity
Step 8: Use the wrong model/migration approach
@_AlexYates_
#sqlinthecity
“There's nothing more reliable than
keeping track of exactly the scripts you
intend to run, and running them,
without trying to compare state and
guess.”
Paul Stovell, Octopus Deploy
@_AlexYates_
#sqlinthecity
“As soon as you have multiple changes
on a single aspect of an object,
ordering and the ability to detect
which change needs to be made gets
very complicated.”
Gert Drapers, built Data Dude
@_AlexYates_
#sqlinthecity
“Small teams who
make few changes and have
few programmable objects
are well suited to migrations.
Otherwise declarative models scale better.”
Alex Yates, DLM Consultants
@_AlexYates_
#sqlinthecity
Step 8: Use the wrong model/migration approach
@_AlexYates_
#sqlinthecity
Step 9: Hot-fix all the problems in production
@_AlexYates_
#sqlinthecity
Step 10: Don’t use branching or tagging
@_AlexYates_
#sqlinthecity
Step 11: Use branches to solve every problem
@_AlexYates_
#sqlinthecity
Step 12: Re-invent the wheel
@_AlexYates_
#sqlinthecity
Step 13: Have a functional stand-off
@_AlexYates_
#sqlinthecity
Step 14: Create a DevOps teams/role
http://devopstopologies.com/
@_AlexYates_
#sqlinthecity
Step 15: Give up.
(You are too big, small, broken, not broken, greenfield, brownfield, agile,
waterfall, complicated, simple, inexperienced, experienced, regulated or
unregulated anyway. It’ll never work.)
@_AlexYates_
#sqlinthecity
http://devopstopologies.co
Fear every change
Wait until you are already screwed
Build a tangled web of databases
Customize each production instance
Don’t use a standard source control process
Impose new process on underlings
Don’t provide any training
Use the wrong model/migration approach
Hot-fix all the problems in production
Don’t use branching or tagging
Use branches to solve every problem
Re-invent the wheel
Have a functional stand-off
Create a DevOps teams/role
Give up.
DON’T
…
http://devopstopologies.co
Embrace change, carefully
Adopt DevOps early
Avoid cross-database dependencies
Standardize production instances
Use a standard source control process
Involve everyone
Provide training
Use the right model/migration approach
Avoid production hotfixes
Use branching when appropriate
Use branches sparingly
Use industry standard solutions
Work collaboratively across silos
Structure for success
Persevere.
DO
E: alex.yates@dlmconsultants.com
T: @_AlexYates_
W: www.dlmconsultants.com
Author Name Source Licence
Chiltepinster Mocking Bird Argument Wikimedia Commons Creative Commons Attribution-Share Alike 3.0 Unported
Nils Rinaldi Hippo Fight 2/3 Flickr Creative Commons Attribution 2.0 Generic license
boeingboeing2 We still have enough duct tape Deviant Art Creative Commons Attribution-NonCommercial 3.0 Unported
PDTillman Mini monster truck Wikimedia Commons Creative Commons Attribution 2.0 Generic license
foshie Stretched ini – Flickr - foshie Wikimedia Commons Creative Commons Attribution 2.0 Generic license
Julian Burgess Double decker mini Flickr Creative Commons Attribution 2.0 Generic license
Charbel Akhras Pimped Mini Convertible Mini Cooper Flickr Attribution-NoDerivs 2.0 Generic
Watchduck Sheet weaver spider web Wikimedia Commons GNU Free Documentation Licence
Linnaea Mallette Old Wagon Wheel Public Domain Pictures CC0 1.0 Universal (CC0 1.0) Public Domain Dedication
Unsplash Train tracks Pixabay CC0 1.0 Universal (CC0 1.0) Public Domain Dedication
Arne Hückelheim Sunset Tracks Crop Wikimedia Commons Creative Commons Attribution-Share Alike 3.0 Unported + GNU Free Documentation Licence
Jan Jacobsen White Flag Wikimedia Commons Creative Commons Attribution-Share Alike 3.0 Unported
Image sources
References:
www.dlmconsultants.com/sitc

Database DevOps Anti-patterns

  • 2.
  • 3.
    (How to screwup your ability to deliver schema changes in 15 simple steps) DLM Consultants Alex Yates
  • 4.
  • 5.
  • 6.
    “10,000 releases perday” Alistair Hann, SkyScanner @_AlexYates_ #sqlinthecity
  • 7.
    Step 1: Fearevery change @_AlexYates_ #sqlinthecity
  • 8.
    Step 2:Wait untilyou are already screwed @_AlexYates_ #sqlinthecity
  • 9.
    Step 3: Builda tangled web of databases @_AlexYates_ #sqlinthecity
  • 10.
    Step 4: Customizeeach production instance @_AlexYates_ #sqlinthecity
  • 11.
    Step 5: Don’tuse a standard source control process @_AlexYates_ #sqlinthecity
  • 12.
    Step 6: Imposenew process on underlings @_AlexYates_ #sqlinthecity
  • 13.
    Step 7: Don’tprovide any training @_AlexYates_ #sqlinthecity
  • 14.
    Step 8: Usethe wrong model/migration approach @_AlexYates_ #sqlinthecity
  • 15.
    “There's nothing morereliable than keeping track of exactly the scripts you intend to run, and running them, without trying to compare state and guess.” Paul Stovell, Octopus Deploy @_AlexYates_ #sqlinthecity
  • 16.
    “As soon asyou have multiple changes on a single aspect of an object, ordering and the ability to detect which change needs to be made gets very complicated.” Gert Drapers, built Data Dude @_AlexYates_ #sqlinthecity
  • 17.
    “Small teams who makefew changes and have few programmable objects are well suited to migrations. Otherwise declarative models scale better.” Alex Yates, DLM Consultants @_AlexYates_ #sqlinthecity
  • 18.
    Step 8: Usethe wrong model/migration approach @_AlexYates_ #sqlinthecity
  • 19.
    Step 9: Hot-fixall the problems in production @_AlexYates_ #sqlinthecity
  • 20.
    Step 10: Don’tuse branching or tagging @_AlexYates_ #sqlinthecity
  • 21.
    Step 11: Usebranches to solve every problem @_AlexYates_ #sqlinthecity
  • 22.
    Step 12: Re-inventthe wheel @_AlexYates_ #sqlinthecity
  • 23.
    Step 13: Havea functional stand-off @_AlexYates_ #sqlinthecity
  • 24.
    Step 14: Createa DevOps teams/role http://devopstopologies.com/ @_AlexYates_ #sqlinthecity
  • 25.
    Step 15: Giveup. (You are too big, small, broken, not broken, greenfield, brownfield, agile, waterfall, complicated, simple, inexperienced, experienced, regulated or unregulated anyway. It’ll never work.) @_AlexYates_ #sqlinthecity
  • 26.
    http://devopstopologies.co Fear every change Waituntil you are already screwed Build a tangled web of databases Customize each production instance Don’t use a standard source control process Impose new process on underlings Don’t provide any training Use the wrong model/migration approach Hot-fix all the problems in production Don’t use branching or tagging Use branches to solve every problem Re-invent the wheel Have a functional stand-off Create a DevOps teams/role Give up. DON’T …
  • 27.
    http://devopstopologies.co Embrace change, carefully AdoptDevOps early Avoid cross-database dependencies Standardize production instances Use a standard source control process Involve everyone Provide training Use the right model/migration approach Avoid production hotfixes Use branching when appropriate Use branches sparingly Use industry standard solutions Work collaboratively across silos Structure for success Persevere. DO
  • 28.
  • 29.
    Author Name SourceLicence Chiltepinster Mocking Bird Argument Wikimedia Commons Creative Commons Attribution-Share Alike 3.0 Unported Nils Rinaldi Hippo Fight 2/3 Flickr Creative Commons Attribution 2.0 Generic license boeingboeing2 We still have enough duct tape Deviant Art Creative Commons Attribution-NonCommercial 3.0 Unported PDTillman Mini monster truck Wikimedia Commons Creative Commons Attribution 2.0 Generic license foshie Stretched ini – Flickr - foshie Wikimedia Commons Creative Commons Attribution 2.0 Generic license Julian Burgess Double decker mini Flickr Creative Commons Attribution 2.0 Generic license Charbel Akhras Pimped Mini Convertible Mini Cooper Flickr Attribution-NoDerivs 2.0 Generic Watchduck Sheet weaver spider web Wikimedia Commons GNU Free Documentation Licence Linnaea Mallette Old Wagon Wheel Public Domain Pictures CC0 1.0 Universal (CC0 1.0) Public Domain Dedication Unsplash Train tracks Pixabay CC0 1.0 Universal (CC0 1.0) Public Domain Dedication Arne Hückelheim Sunset Tracks Crop Wikimedia Commons Creative Commons Attribution-Share Alike 3.0 Unported + GNU Free Documentation Licence Jan Jacobsen White Flag Wikimedia Commons Creative Commons Attribution-Share Alike 3.0 Unported Image sources
  • 30.