Slide 1

Slide 1 text

BOOTSTRAP YOUR PROJECT! International PHP Conference 2013 Spring Edition

Slide 2

Slide 2 text

Sorry! :-)

Slide 3

Slide 3 text

Sorry! :-)

Slide 4

Slide 4 text

THORSTEN RINNE ‣ Diplom-Informatiker (FH) ‣ Senior Developer ‣ Scrum Master ‣ Yatego GmbH ‣ Open Source: phpMyFAQ ‣ @ThorstenRinne

Slide 5

Slide 5 text

THE PROJECT

Slide 6

Slide 6 text

No content

Slide 7

Slide 7 text

NOT!

Slide 8

Slide 8 text

Define the vision of the project!

Slide 9

Slide 9 text

Start with a small team!

Slide 10

Slide 10 text

We don´t need code monkeys.

Slide 11

Slide 11 text

Add new developers, but slowly.

Slide 12

Slide 12 text

Share the vision with the team.

Slide 13

Slide 13 text

Collect all requirements. Start with the important ones.

Slide 14

Slide 14 text

Order them by ROI. Collected all requirements?

Slide 15

Slide 15 text

Document your tasks!

Slide 16

Slide 16 text

Prioritize the task according to ROI and complexity.

Slide 17

Slide 17 text

Look for cheap wins!

Slide 18

Slide 18 text

INFRASTRUCTURE

Slide 19

Slide 19 text

No Hardware. Not yet.

Slide 20

Slide 20 text

Virtual Machines

Slide 21

Slide 21 text

No content

Slide 22

Slide 22 text

$ vagrant box add base http://files.vagrantup.com/lucid32.box [vagrant] Downloading with Vagrant::Downloaders::HTTP... [vagrant] Downloading box: http://files.vagrantup.com/lucid32.box [vagrant] Extracting box... [vagrant] Verifying box... [vagrant] Cleaning up downloaded box... $ Vagrant

Slide 23

Slide 23 text

$ vagrant init A `Vagrantfile` has been placed in this directory. You are now ready to `vagrant up` your first virtual environment! Please read the comments in the Vagrantfile as well as documentation on `vagrantup.com` for more information on using Vagrant. $

Slide 24

Slide 24 text

$ vagrant up [default] Importing base box 'base'... [default] Matching MAC address for NAT networking... [default] Clearing any previously set forwarded ports... [default] Forwarding ports... [default] -- 22 => 2222 (adapter 1) [default] Creating shared folders metadata... [default] Clearing any previously set network interfaces... [default] Booting VM... [default] Waiting for VM to boot. This can take a few minutes. [default] VM booted and ready for use! [default] Mounting shared folders... [default] -- v-root: /vagrant $ And done! :-)

Slide 25

Slide 25 text

Configuration management Tools with an object-orientated model

Slide 26

Slide 26 text

sysadmin tasks are often repetive new users deploying hosts managing applications configuring daemons monitoring hosts Why Puppet?

Slide 27

Slide 27 text

What we´re trying... automate different tasks with scripts but it‘s getting complex poorly documented customized for each environment rarely scale to large platforms

Slide 28

Slide 28 text

Puppet Ruby based Apache License Started in 2001 Support for Linux / Unix / BSD OS X

Slide 29

Slide 29 text

class nginx::package { anchor { 'nginx::package::begin': } anchor { 'nginx::package::end': } case $::operatingsystem { debian,ubuntu: { class { 'nginx::package::debian': require => Anchor['nginx::package::begin'], before => Anchor['nginx::package::end'], } } opensuse,suse: { class { 'nginx::package::suse': require => Anchor['nginx::package::begin'], before => Anchor['nginx::package::end'], } } } }

Slide 30

Slide 30 text

Private and Public Clouds

Slide 31

Slide 31 text

No content

Slide 32

Slide 32 text

Why Git? it‘s fast because everyone has the whole history supports non linear development no single point of failure like SVN distributed development (office / train / beach) efficient handling of large projects

Slide 33

Slide 33 text

Every feature is a branch.

Slide 34

Slide 34 text

Use diff emails

Slide 35

Slide 35 text

No content

Slide 36

Slide 36 text

Automate as much as possible. Devs are lazy.

Slide 37

Slide 37 text

Use a Wiki. And keep it up to date!

Slide 38

Slide 38 text

You have to be replaceable. Document that way.

Slide 39

Slide 39 text

Use a tracking software.

Slide 40

Slide 40 text

FRAMEWORKS

Slide 41

Slide 41 text

Use Frameworks. For frontend. For backend.

Slide 42

Slide 42 text

Use proven frameworks

Slide 43

Slide 43 text

Use the Community

Slide 44

Slide 44 text

Check Google hits for technology X

Slide 45

Slide 45 text

Check Google hits for technology X

Slide 46

Slide 46 text

Check Google hits for technology X

Slide 47

Slide 47 text

Check GitHub project stats

Slide 48

Slide 48 text

$ composer update Loading composer repositories with package information Updating dependencies (including require-dev) Nothing to install or update Writing lock file Generating autoload files

Slide 49

Slide 49 text

Bower $ bower install jquery bower cloning git://github.com/components/jquery.git bower caching git://github.com/components/jquery.git bower fetching jquery bower checking out jquery#2.0.1 bower copying /Users/thorsten/.bower/cache/jquery/ 29cb4373d29144ca260ac7c3997f4381 bower installing jquery#2.0.1

Slide 50

Slide 50 text

Donald Knuth: „Premature optimization is the root of all evil.“

Slide 51

Slide 51 text

Test Driven Development

Slide 52

Slide 52 text

The „Cancel“ button? Not tested yet! :-(

Slide 53

Slide 53 text

Unittests for all the important base classes.

Slide 54

Slide 54 text

Automate your testing.

Slide 55

Slide 55 text

Automated API testing.

Slide 56

Slide 56 text

No Selenium tests at the beginning. Too expensive.

Slide 57

Slide 57 text

Continuous Integration Coding Style PMD (Project Mess Detection) LOC (Lines of Code) CPD (Copy&Paste Detection)

Slide 58

Slide 58 text

MANY, SHORT MEETINGS

Slide 59

Slide 59 text

Iterative approach

Slide 60

Slide 60 text

SCRUM

Slide 61

Slide 61 text

2 week sprints 14 days

Slide 62

Slide 62 text

XP

Slide 63

Slide 63 text

XP Communication

Slide 64

Slide 64 text

XP Communication Simplicity

Slide 65

Slide 65 text

XP Communication Simplicity Respect

Slide 66

Slide 66 text

XP Communication Simplicity Feedback Respect

Slide 67

Slide 67 text

XP Communication Simplicity Feedback Courage Respect

Slide 68

Slide 68 text

XP feedback loops Release Plan Iteration Plan Acceptence Test Daily Standup Pair Negotiation Unit Test Pair Programming Code months weeks days day hours minutes seconds

Slide 69

Slide 69 text

KANBAN

Slide 70

Slide 70 text

Daily Standup

Slide 71

Slide 71 text

Team lunch

Slide 72

Slide 72 text

⇥ Timeboxing ⇤

Slide 73

Slide 73 text

Prepare yourself for meetings!

Slide 74

Slide 74 text

Do retrospectives!

Slide 75

Slide 75 text

Learn from them!

Slide 76

Slide 76 text

Pair programming improves the team knowledge.

Slide 77

Slide 77 text

Pair programming reduces the question overhead

Slide 78

Slide 78 text

Do end-user tests as early as possible.

Slide 79

Slide 79 text

Rapid feedback: Controls the development.

Slide 80

Slide 80 text

DO NOT CHANGE EVERYTHING.

Slide 81

Slide 81 text

DO NOT CHANGE EVERYTHING.

Slide 82

Slide 82 text

DO NOT CHANGE EVERYTHING.

Slide 83

Slide 83 text

Fight the „second system syndrome“

Slide 84

Slide 84 text

Use old, reusable code

Slide 85

Slide 85 text

Use mature libraries.

Slide 86

Slide 86 text

Continuous Refactoring

Slide 87

Slide 87 text

No content

Slide 88

Slide 88 text

Monitoring statsd / graphite „Measure Anything, Measure Everything“ Etsy

Slide 89

Slide 89 text

Monitoring

Slide 90

Slide 90 text

Have fun at work.

Slide 91

Slide 91 text

„Stay hungry, stay foolish!“ Steve Jobs, 2005

Slide 92

Slide 92 text

Questions? Comments?

Slide 93

Slide 93 text

Thanks for your attention! Twitter: @ThorstenRinne App.net: https://app.net/thorsten Slides: https://speakerdeck.com/thorsten Thorsten Rinne Yatego GmbH [email protected]