Slide 1

Slide 1 text

Much more Eggs than Bacon 
 A Development Environment
 Jacob Mather Software Engineer, Mashery Cookbook


Slide 2

Slide 2 text

Much more Eggs than Bacon: A Development Environment Cookbook - MidwestPHP, March 15th, 2014 Who am I? What I do: • Software Engineer at Mashery • Co-organizer of the
 San Francisco PHP User Group • Community Evangelist Where I can be found: • Blog: http://jmather.com • Twitter: @thejmather

Slide 3

Slide 3 text

Much more Eggs than Bacon: A Development Environment Cookbook - MidwestPHP, March 15th, 2014 Why I am giving this talk

Slide 4

Slide 4 text

Much more Eggs than Bacon: A Development Environment Cookbook - MidwestPHP, March 15th, 2014 People who are really serious about software should make their own hardware. - Alan Kay

Slide 5

Slide 5 text

Let’s talk about
 what environments we need

Slide 6

Slide 6 text

Much more Eggs than Bacon: A Development Environment Cookbook - MidwestPHP, March 15th, 2014 What environments should we have?

Slide 7

Slide 7 text

Much more Eggs than Bacon: A Development Environment Cookbook - MidwestPHP, March 15th, 2014 What environments should we have… and what is each environment’s job?

Slide 8

Slide 8 text

Much more Eggs than Bacon: A Development Environment Cookbook - MidwestPHP, March 15th, 2014 Production

Slide 9

Slide 9 text

Much more Eggs than Bacon: A Development Environment Cookbook - MidwestPHP, March 15th, 2014 Staging

Slide 10

Slide 10 text

Much more Eggs than Bacon: A Development Environment Cookbook - MidwestPHP, March 15th, 2014 Quality Assurance

Slide 11

Slide 11 text

Much more Eggs than Bacon: A Development Environment Cookbook - MidwestPHP, March 15th, 2014 Development

Slide 12

Slide 12 text

Much more Eggs than Bacon: A Development Environment Cookbook - MidwestPHP, March 15th, 2014 Cache Cache Cache Server Production Server Server Server Load Balancer Service 1 Server Server Server Server Load Balancer Service 2 Server Server Server Server Load Balancer Web Portal DB Cache

Slide 13

Slide 13 text

Much more Eggs than Bacon: A Development Environment Cookbook - MidwestPHP, March 15th, 2014 Cache Cache Staging Server Server Server Load Balancer Service 1 Server Server Server Load Balancer Service 2 Server Server Server Load Balancer Web Portal DB Cache

Slide 14

Slide 14 text

Much more Eggs than Bacon: A Development Environment Cookbook - MidwestPHP, March 15th, 2014 Cache Quality Assurance Server Server Load Balancer Service 1 Server Server Load Balancer Service 2 Server Server Load Balancer Web Portal DB Cache

Slide 15

Slide 15 text

Much more Eggs than Bacon: A Development Environment Cookbook - MidwestPHP, March 15th, 2014 Development Server Service 1 Service 2 DB Cache Web Portal

Slide 16

Slide 16 text

Much more Eggs than Bacon: A Development Environment Cookbook - MidwestPHP, March 15th, 2014 Why are these differences important?

Slide 17

Slide 17 text

Much more Eggs than Bacon: A Development Environment Cookbook - MidwestPHP, March 15th, 2014 Lifecycle of Code Development

Slide 18

Slide 18 text

Much more Eggs than Bacon: A Development Environment Cookbook - MidwestPHP, March 15th, 2014 Lifecycle of Code Development QA

Slide 19

Slide 19 text

Much more Eggs than Bacon: A Development Environment Cookbook - MidwestPHP, March 15th, 2014 Lifecycle of Code Development QA Staging

Slide 20

Slide 20 text

Much more Eggs than Bacon: A Development Environment Cookbook - MidwestPHP, March 15th, 2014 Lifecycle of Code Development QA Staging Production

Slide 21

Slide 21 text

Much more Eggs than Bacon: A Development Environment Cookbook - MidwestPHP, March 15th, 2014 What happens when they are too different?

Slide 22

Slide 22 text

Much more Eggs than Bacon: A Development Environment Cookbook - MidwestPHP, March 15th, 2014 Lifecycle of Code Development

Slide 23

Slide 23 text

Much more Eggs than Bacon: A Development Environment Cookbook - MidwestPHP, March 15th, 2014 Lifecycle of Code Development QA

Slide 24

Slide 24 text

Much more Eggs than Bacon: A Development Environment Cookbook - MidwestPHP, March 15th, 2014 Lifecycle of Code Development QA

Slide 25

Slide 25 text

Much more Eggs than Bacon: A Development Environment Cookbook - MidwestPHP, March 15th, 2014 Lifecycle of Code Development QA Staging

Slide 26

Slide 26 text

Much more Eggs than Bacon: A Development Environment Cookbook - MidwestPHP, March 15th, 2014 Lifecycle of Code Development QA Staging

Slide 27

Slide 27 text

Much more Eggs than Bacon: A Development Environment Cookbook - MidwestPHP, March 15th, 2014 Lifecycle of Code Development QA Staging Production

Slide 28

Slide 28 text

Much more Eggs than Bacon: A Development Environment Cookbook - MidwestPHP, March 15th, 2014 Lifecycle of Code Development QA Staging Production

Slide 29

Slide 29 text

Much more Eggs than Bacon: A Development Environment Cookbook - MidwestPHP, March 15th, 2014 Why where you develop matters • Environment based bugs are costly to track down • If you cannot reproduce a bug in dev, you are shooting in the dark • Devs need to share code without slowing down • Makes infrastructure more transparent

Slide 30

Slide 30 text

I’m on board,
 so how do I get started?

Slide 31

Slide 31 text

Much more Eggs than Bacon: A Development Environment Cookbook - MidwestPHP, March 15th, 2014 Devise your minimum viable stack

Slide 32

Slide 32 text

Much more Eggs than Bacon: A Development Environment Cookbook - MidwestPHP, March 15th, 2014 Server configuration automation • If you have no current automation • Chef • Puppet • Ansible • If you do have automation • Ops will need to find and remove all production secrets • Ops will need to add a way for you to customize

Slide 33

Slide 33 text

Much more Eggs than Bacon: A Development Environment Cookbook - MidwestPHP, March 15th, 2014 Code cleanup • Force all configuration to be explicit • Not based on path or host name • Remove magic strings

Slide 34

Slide 34 text

Whew, that’s done, but how do I actually do it?

Slide 35

Slide 35 text

Much more Eggs than Bacon: A Development Environment Cookbook - MidwestPHP, March 15th, 2014 Choose your platform • Traditional VM • Cloud • Container VM

Slide 36

Slide 36 text

Much more Eggs than Bacon: A Development Environment Cookbook - MidwestPHP, March 15th, 2014 Verification • Smoke tests • Manual inspection • Functional tests

Slide 37

Slide 37 text

Much more Eggs than Bacon: A Development Environment Cookbook - MidwestPHP, March 15th, 2014 Points to consider • Use un-routed domains for virtual hosts • Test with all internet disabled

Slide 38

Slide 38 text

Much more Eggs than Bacon: A Development Environment Cookbook - MidwestPHP, March 15th, 2014 At this point you should be able to build a fully functional environment that you are capable of developing software in.

Slide 39

Slide 39 text

Ok, now I am
 ready to give this to other people

Slide 40

Slide 40 text

Much more Eggs than Bacon: A Development Environment Cookbook - MidwestPHP, March 15th, 2014 Make or break time • Prepare as much documentation as you can stomach • Prepare for lots of confusion and frustration

Slide 41

Slide 41 text

Much more Eggs than Bacon: A Development Environment Cookbook - MidwestPHP, March 15th, 2014 Choose your timing carefully You only get one chance at a first impression. ! The first time a user spins up their new environment, it must work flawlessly. ! The entire rest of their experience will be influenced by this very first interaction.

Slide 42

Slide 42 text

WOW! Look!
 Everyone is using it now!

Slide 43

Slide 43 text

Much more Eggs than Bacon: A Development Environment Cookbook - MidwestPHP, March 15th, 2014 One thing we all have in common... Everyone loves to customize their computer! ! Someone will use CDPATH which makes cd output text. ! A few will use rvm and not appreciate your automated (and incorrect) help installing gems. ! Nobody likes you fiddling with their computer.

Slide 44

Slide 44 text

Much more Eggs than Bacon: A Development Environment Cookbook - MidwestPHP, March 15th, 2014 Start building a troubleshooting document The less time you have to spend debugging other people’s environments, the more time you have to rapidly iterate. ! No only do you need to have them, they need to be accessible, and make sense, and have enough context.

Slide 45

Slide 45 text

Much more Eggs than Bacon: A Development Environment Cookbook - MidwestPHP, March 15th, 2014 Document how to tinker with the system The sooner you can get others involved with adding features, the faster you will be able to keep up with the ever changing needs of your new development environment. ! It also lets others try things experimentally, without involving you at all!

Slide 46

Slide 46 text

Much more Eggs than Bacon: A Development Environment Cookbook - MidwestPHP, March 15th, 2014 Tips for making improvements • Slow and steady wins the race. • Do not change your environment’s interface. • Except when there’s great value in it. • Even then it’s really hard to justify.

Slide 47

Slide 47 text

Much more Eggs than Bacon: A Development Environment Cookbook - MidwestPHP, March 15th, 2014 48 Minutes

Slide 48

Slide 48 text

Much more Eggs than Bacon: A Development Environment Cookbook - MidwestPHP, March 15th, 2014 30 Minutes

Slide 49

Slide 49 text

Much more Eggs than Bacon: A Development Environment Cookbook - MidwestPHP, March 15th, 2014 22 Minutes

Slide 50

Slide 50 text

Much more Eggs than Bacon: A Development Environment Cookbook - MidwestPHP, March 15th, 2014 Replicating production bugs in development

Slide 51

Slide 51 text

Much more Eggs than Bacon: A Development Environment Cookbook - MidwestPHP, March 15th, 2014 Make reporting problems easy . easy

Slide 52

Slide 52 text

Let’s talk about
 chasing the myth of stability

Slide 53

Slide 53 text

Much more Eggs than Bacon: A Development Environment Cookbook - MidwestPHP, March 15th, 2014 The march of progress will continue • Ops updates will break your dev environments. • You will find new third parties your builds depend on. • 100 scratch environment builds a week will make 1 in 100 events happen once a week. • You’ll start to have others contribute infrastructure changes to meet their project’s needs.

Slide 54

Slide 54 text

Much more Eggs than Bacon: A Development Environment Cookbook - MidwestPHP, March 15th, 2014 Finding your environment’s dependencies • Your environment depends on: • Your own bootstrapping code • Ops automation code • Random third party software Ops is installing • … anything else?

Slide 55

Slide 55 text

Much more Eggs than Bacon: A Development Environment Cookbook - MidwestPHP, March 15th, 2014 Managing your environment’s dependencies • Time to build a CI process • You’ll need a desktop to test accurately • Watch for changes from all relevant repos • Remember it is pairs of commits that are tested

Slide 56

Slide 56 text

Much more Eggs than Bacon: A Development Environment Cookbook - MidwestPHP, March 15th, 2014 Making a quick recovery Check to see if your platform of choice supports snapshots. ! When environments go sideways, they can be hard to restore. ! Snapshots eliminate troubleshooting, and take ~20 seconds to run a restore.

Slide 57

Slide 57 text

Much more Eggs than Bacon: A Development Environment Cookbook - MidwestPHP, March 15th, 2014 “I just updated trunk and EVERYTHING IS BROKEN!”

Slide 58

Slide 58 text

Eventually, it will be time to
 work on something else

Slide 59

Slide 59 text

Much more Eggs than Bacon: A Development Environment Cookbook - MidwestPHP, March 15th, 2014 Eventually you will need build a team • There’s a lot of domain specific knowledge in your head. • Do you know how to run a team? • Do you know how to lead a team? • Do you know how to be a product owner?

Slide 60

Slide 60 text

Much more Eggs than Bacon: A Development Environment Cookbook - MidwestPHP, March 15th, 2014 Plus, letting go is hard.

Slide 61

Slide 61 text

Much more Eggs than Bacon: A Development Environment Cookbook - MidwestPHP, March 15th, 2014 Let’s get an overview of the system…

Slide 62

Slide 62 text

Much more Eggs than Bacon: A Development Environment Cookbook - MidwestPHP, March 15th, 2014 Further out…

Slide 63

Slide 63 text

Much more Eggs than Bacon: A Development Environment Cookbook - MidwestPHP, March 15th, 2014 Regrets… • Start with a CLI abstraction of vagrant • Never change the access URLs • Don’t use a git repo for distribution unless it works 100% like a git repo

Slide 64

Slide 64 text

Much more Eggs than Bacon: A Development Environment Cookbook - MidwestPHP, March 15th, 2014 So…

Slide 65

Slide 65 text

Much more Eggs than Bacon: A Development Environment Cookbook - MidwestPHP, March 15th, 2014 What’s that stuff about eggs and bacon?

Slide 66

Slide 66 text

Much more Eggs than Bacon: A Development Environment Cookbook - MidwestPHP, March 15th, 2014 The chicken and the pig.

Slide 67

Slide 67 text

Much more Eggs than Bacon: A Development Environment Cookbook - MidwestPHP, March 15th, 2014 Every time you change your code to work in an environment other than production, you intentionally break your code.

Slide 68

Slide 68 text

Much more Eggs than Bacon: A Development Environment Cookbook - MidwestPHP, March 15th, 2014 Thank you! More information about this talk can be found at: ! http://bit.ly/midwestphp-cookbook ! RATE MY TALK AT: https://joind.in/10550 ! PLEASE LEAVE FEEDBACK It’s the only way I can improve