SlideShare una empresa de Scribd logo
1 de 59
Descargar para leer sin conexión
FROM DEV TO OPS AND
BEYOND
GETTING IT DONE
Volker Dusch / @_ _edorian
ABOUT ME
Software Engineer
PHP since 11 years
CI
CleanCode
DevOps
TDD
Shipping
Bullet points
INSTEAD OF ME
WORKING FOR
ResearchGate gives science back to the people who make it happen.
We help researchers build reputation and accelerate scientific
progress.
On their terms.
GET IN TOUCH
stackoverflow:
Twitter: @_ _edorian
G+: Volker Dusch
IRC: edorian
Mail: php@wallbash.com
AGENDA
We will look at what is necessarily to keep shipping a successful
product beyond its initial release and what role we developers should
be playing in this.
Development practices
Planning and Communication
Deployment and Operations
YMMV
BUT BEFORE WE GET GOING
Time for a little exercise
10 YEARS AGO
HOW I GOT HOOKED ON CREATING STUFF ON THE
WEB
Creating things is awesome
It was super easy and fun
10 YEARS AGO
CUSTOMERS
"We want a website!"
"Can you fix this little thing please?"
"What do you mean you're already done?"
10 YEARS AGO
WHAT IDIDN'T KNOW BACK THEN
Things got bigger, a lot bigger
"Web applications" vs. "Websites"
Maintaining things was really hard
It's about more than just programming
INTERMISSION
INTERMISSION
MY FIRST WEB APPLICATION
6 devs, growing to 20
Big code base
Quite some data, for the time
This talk is about everything we had to take care of, and more
SHIPPING BIGGER THINGS
LET'S SHIP IT!
THINGSTO TAKE CARE OF
Fulfilling current requirements
Figuring out what to do next
Delivery and Operations
ASK QUESTIONS AT ANY TIME!
WE'RE DEVELOPERS
Let's start with us!
We get paid to do what we love
Most of us started because we where fascinated by programming
But what is our job?
OUR JOB IS TO DELIVER
Get things done
Give good estimates
Ask the right questions
Keep doing that
Don't slow down
Keep our promises
THE COST OF HAVING USFOLKSAROUND
German numbers, YMMV €, Approximations
Salary: ~50k a year 50.000€ / Year
Adding non-wage labor cost 80.000€ / Year
Office space, water, hardware, coffee,
plants, cleaning, travels, training
100.000€ / Year
Weekends, holidays, vacation, etc:
We works 220 days a year.
455€ / day
"Classic" 8 hour work day 55 Bucks per Hour!
We are expected to contribute over 100.000 Bucks in business value
per year!
HOW?
Evaluate everything you're doing by a simple question:
“Does the practice in question help us to continuously
ship what our business needs to succeed?”
CODE
Rules for structuring our source code that have proven to help with
sustainability.
THE MOST BASIC THING:
Separate the web-glue from the business logic.
Keep templates stupid
Have services owning the logic for manipulation of business entities
Hide the data access behind a layer that you can maintain
individually
SOLID
Single responsibility
Open-closed
Liskov substitution
Interface segregation
Dependency inversion
http://en.wikipedia.org/wiki/SOLID(object-orienteddesign)
COMPOSITION OVER INHERITANCE
Don't inherit from things if you can just use them.
http://c2.com/cgi/wiki?CompositionInsteadOfInheritance
http://en.wikipedia.org/wiki/Compositionoverinheritance
DEPENDENCYINJECTION
This goes for you code base as well as for your whole Company.
Allows for quick and easy reuse of small components
If wiring is to hard people will copy/paste instead
Can be achieved in many ways. Pick one that works for you
http://pimple.sensiolabs.org/
http://symfony.com/doc/current/components/dependency_injection/index.h
https://github.com/researchgate/injektor
“In the end - everything is a wiring problem.”
REUSING CODE
The Dependency Manager for PHP
As easy as committing everything to your SCM. But with care free
autoloading.
TESTING
The art of making sure that you notice failures before your customers
do.
Testing exist to give you confidence when moving forward.
THE FASTEST THING YOUCAN DO
Staging server
Testing your builds
All without even touching Behat or PHPUnit
hits=`curl -s staging.project.com | grep 'Login:' | wc -l`;
test $hits -eq 1 || echo "Frontpage error!"
data="login=test&passwort=secure&csrf="$csrfToken
url="staging.project.com"
hits=`curl -X POST -d $data $url | grep 'Hello, testuser' | wc -l`;
test $hits -eq 1 || echo "Login error!"
OTHER DEPARTMENTSDON'T CARE ABOUT UNIT TESTING
Nor should they!
Your fellow developers on the other hand ... :)
“The mechanic fixing your car doesn't ask you what
song she should listen to while performing the task.”
CONVENTIONALWISDOM
BUT TESTING ISHAAAARD
Writing proper code is hard
The harder it is to use the code in question, the harder is writing tests
for it
Complex tests means the code is to complex. Break it down.
If anything: Mocking is hard(-ish).
Phake is your friend:
http://phake.digitalsandwich.com/docs/html/
FBMock: Mocking for grown ups:
https://github.com/facebook/FBMock
The PHPUnit mocking API is still good enough.
TDD
Writing tests can feel like extra work if you are rethinking an already
solved problem
TDD offers a way to first think about the problem, the interface and
the interactions and then filling in the details step by step until you are
done with the bigger picture.
QUICK WINSWITH BEHAT
Web tests help you detect a big amount of wiring issues with little
effort
Before growing to many of them consider maintenance
"Full stack testing" will allow you to ship with great confidence
ENSURING MAINTAINABILITY
Getting rid of all the things you might stumble over
CODE REVIEW
There are a lot of ways to go about this
Small teams can use commit based review
When feature branching the merge back is a natural point
Internal coding Dojo
Pair programming
Send emails when important changes occur
The main point of these ideas is to make sure everyone has a good
understanding of how common things are solved and to keep people
communicating.
CODING GUIDELINES
A collection for formatting and structure rules so that everyone can
easily find their way around and produce uniform code.
Just create the rule set fitting your practices
Adapt when there is pain
Don't over analyze. Just do it
PHP CodeSniffer:
http://pear.php.net/package/PHP_CodeSniffer
http://pear.php.net/manual/en/package.php.php-
codesniffer.annotated-ruleset.php
http://edorian.github.io/php-coding-standard-generator/#phpcs
“Coding rules:
It doesn't matter what they are - as long as you have
them.”
COMPLEXITYGUIDELINES
Similar to a coding standard but focusing on hunting down potential
problems within your source code
Possible bugs
Suboptimal code
Overcomplicated expressions
Unused parameters, methods, properties
PHP MessDetector:
http://phpmd.org/
http://phpmd.org/rules/
http://edorian.github.io/php-coding-standard-generator/#phpmd
CONTINUOUS DEVELOPMENT PACE
"Done" means there is nothing left to clean up
Every once in a while you plan time to throw away things
"Having a clean slate" is an attitude and a culture
“There are only two hard problems in Computer
Science: cache invalidation, naming things, and off-
by-one errors.”
CI
Have a automated way of checking all the things you agreed on
Run web and unit tests
Ensure coding guidelines
Ensure complexity guidelines
Keep the project deploying :)
Tools:
http://jenkins-ci.org
http://jenkins-php.org
http://www.sonarsource.org
WORKING IN SHORT
ITERATIONS
Every iteration is a chance for people to "sync" their Vision of the
product with the current reality.
SHIPPING REDUCES COMPLEXITY
"Did we already implement this a month ago?"
"That bug you just reported was fixed 2 weeks ago. Just not
deployed yet"
Shipping let's you discover what doesn't work before you spend too
much time on it.
PLANNING CAN BE A BIG MINDSET CHANGE
“Nobody told me my job involved talking to... people”
ASSUME COMPETENCE
Work with the basic mind set that other people are at least as good in
their job as you are in yours.
If they tell you to do "stupid" things find out what they want to
achieve
Company "vision" is a big here
Just know what you want to get done and work together
HAVING EVERYONE INVOLVED
Getting everyone in the same boat and working towards a common
goal will speed you up like nothing else every will.
Product
Design
Copyrighting
Engineering
""Upper management""
If you can ensure that everyone was involved somewhere in the loop
you spend way less time on re-discussing and avoid confusion.
HONESTY SOLVES A LOT MORE ISSUES THAN IT
CREATES
True story.
TOOLING
Tooling is needed when people can't get the information they need
A wall with Post'it notes and a stack of story cards might be all you
need
When working remote spend time on making it look beautiful so that
people look at it
https://trello.com/
$millionOfOtherProducts
BUGS
Technical errors
Communication errors (and forgotten features)
Fix the technical issues quickly to reduce complexity
Don't build "bug management".
But at a certain size you need someone to dispatch bugs to safe
everyone time
STATS
State are awesome!
Knowing what your users actually do with your software is valuable
Seeing them use the new thing you build is - like - the best ever(tm).
StatsD: https://github.com/etsy/statsd/
Graphite: http://graphite.wikidot.com/
OPS AND DEVOPS
If it's not in production it doesn't really count.
CLASSIC APPROACH
DEVOPS
Talking to the people getting up at night so you don't have to.
Your SysAdmins care. A lot!
It's your job to figure out a way to constantly deploy without
breaking things
Automation helps avoiding errors
BUILD AND DEPLOYMENT TOOLING
A collection of scripts that gets you from "source code" to "running in
production".
Create a build
Can be done in Jenkins. Still keep it in a script and let Jenkins run
it.
Run unit tests
Run integration, functional tests
Report on coding/complexity metrics
Once you are confident that things are going to go well
Deploy the build to a staging environment
Run web tests
Deploy to production
Rollback when really really needed
That's it. No magic - Just detail work.
HOW TO GET THAT SCRIPT?
It doesn't matter what language you write that tooling in. There is no
generic answer.
Chances are there is going to be a lot of BASH in it.
Whatever calls your BASH script isn't all that important
Ant
More custom BASH
Ant Build Commons
SF2 CLI commands
Whatever works. As long as you can maintain it and it's stable.
Don't over-engineer. You'll iterate a lot over this.
LINKS
http://abc.tools.qafoo.co
http://www.capistranorb.com/
Example Ant: http://jenkins-php.org
http://symfony.com/doc/current/components/console/introduction.html
PROVISIONING
Getting servers and development environments in a known state
Having the SAME versions on dev and prod is invaluable.
The only documentation that gets always updated is the code.
Being able to recreate servers safes a lot of hassle.
Think about your firewalls :)
Having a virtual machine per project keeps you sane
http://www.vagrantup.com/
https://puppetlabs.com/
http://www.opscode.com/chef/
CONFIGURATION MANAGEMENT
Any solution will require close collaboration with the folks running the
production boxes or lead to hassle.
Config files in puppet/chef
Configs for all systems in the SCM and only reading in environments
Setting systems up in a way that they always look the same
DATA MIGRATIONS
This questions comes up a lot when talking about automation. There is
no easy answer.
Very specific to your project and environment
Usually not possible to have downtime while data is migrated
Don't throw away DB columns when you change the code. Add new
ones and clean up later when you are sure.
THANK YOU!
QUESTIONS?
Get in touch
Twitter: @_ _edorian
G+: Volker Dusch
IRC: edorian
Mail: php@wallbash.com
Check those things out:
Facebook: https://www.facebook.com/Engineering?sk=notes
Etsy: http://codeascraft.com/
From dev to ops and beyond - getting it done

Más contenido relacionado

La actualidad más candente

Developer plantations - colonialism of XXI century (GeeCON 2017)
Developer plantations - colonialism of XXI century (GeeCON 2017)Developer plantations - colonialism of XXI century (GeeCON 2017)
Developer plantations - colonialism of XXI century (GeeCON 2017)Wojciech Seliga
 
Ten lessons I painfully learnt while moving from software developer
to entrep...
Ten lessons I painfully learnt while moving from software developer
to entrep...Ten lessons I painfully learnt while moving from software developer
to entrep...
Ten lessons I painfully learnt while moving from software developer
to entrep...Wojciech Seliga
 
Ten lessons I painfully learnt while moving from software developer to entrep...
Ten lessons I painfully learnt while moving from software developer to entrep...Ten lessons I painfully learnt while moving from software developer to entrep...
Ten lessons I painfully learnt while moving from software developer to entrep...Wojciech Seliga
 
Devoxx Poland 2015: 5-10-15 years with Java
Devoxx Poland 2015: 5-10-15 years with Java Devoxx Poland 2015: 5-10-15 years with Java
Devoxx Poland 2015: 5-10-15 years with Java Wojciech Seliga
 
Software Development Innovation in Practice - 33rd Degree 2014
Software Development Innovation in Practice - 33rd Degree 2014Software Development Innovation in Practice - 33rd Degree 2014
Software Development Innovation in Practice - 33rd Degree 2014Wojciech Seliga
 
Escaping Test Hell - ACCU 2014
Escaping Test Hell - ACCU 2014Escaping Test Hell - ACCU 2014
Escaping Test Hell - ACCU 2014Wojciech Seliga
 
10 bezcennych lekcji dla software developera stającego się szefem firmy
10 bezcennych lekcji dla software developera stającego się szefem firmy10 bezcennych lekcji dla software developera stającego się szefem firmy
10 bezcennych lekcji dla software developera stającego się szefem firmyWojciech Seliga
 
Confitura 2013 Software Developer Career Unplugged
Confitura 2013 Software Developer Career UnpluggedConfitura 2013 Software Developer Career Unplugged
Confitura 2013 Software Developer Career UnpluggedWojciech Seliga
 
Hitchhikers Guide to Participating in Open Source - Long Version
Hitchhikers Guide to Participating in Open Source - Long VersionHitchhikers Guide to Participating in Open Source - Long Version
Hitchhikers Guide to Participating in Open Source - Long VersionElena Williams
 
JavaMagazine - Java SE 8 - 2014-03-04
JavaMagazine - Java SE 8 - 2014-03-04JavaMagazine - Java SE 8 - 2014-03-04
JavaMagazine - Java SE 8 - 2014-03-04Erik Gur
 
Spartez Open Day March 13th 2015
Spartez Open Day March 13th 2015Spartez Open Day March 13th 2015
Spartez Open Day March 13th 2015Wojciech Seliga
 
Software Developer Career Unplugged - GeeCon 2013
Software Developer Career Unplugged - GeeCon 2013Software Developer Career Unplugged - GeeCon 2013
Software Developer Career Unplugged - GeeCon 2013Wojciech Seliga
 
/dev/fort: you can build it in a week @emw
/dev/fort: you can build it in a week @emw/dev/fort: you can build it in a week @emw
/dev/fort: you can build it in a week @emwJames Aylett
 
Gears and HTML 5 @media Ajax London 2008
Gears and HTML 5 @media Ajax London 2008Gears and HTML 5 @media Ajax London 2008
Gears and HTML 5 @media Ajax London 2008dion
 
Dégraissons le mammouth ou Darwin a encore frappé - La théorie de l'évolution...
Dégraissons le mammouth ou Darwin a encore frappé - La théorie de l'évolution...Dégraissons le mammouth ou Darwin a encore frappé - La théorie de l'évolution...
Dégraissons le mammouth ou Darwin a encore frappé - La théorie de l'évolution...Arnauld Loyer
 
Documenting For Interactive Websites
Documenting For Interactive WebsitesDocumenting For Interactive Websites
Documenting For Interactive WebsitesPatrick Kennedy
 
State of Drupal keynote, DrupalCon Austin
State of Drupal keynote, DrupalCon AustinState of Drupal keynote, DrupalCon Austin
State of Drupal keynote, DrupalCon AustinDries Buytaert
 
Why your project's brand is more important than the code - SCRIPT
Why your project's brand is more important than the code - SCRIPTWhy your project's brand is more important than the code - SCRIPT
Why your project's brand is more important than the code - SCRIPTShane Curcuru
 

La actualidad más candente (20)

Developer plantations - colonialism of XXI century (GeeCON 2017)
Developer plantations - colonialism of XXI century (GeeCON 2017)Developer plantations - colonialism of XXI century (GeeCON 2017)
Developer plantations - colonialism of XXI century (GeeCON 2017)
 
Plugin style EA
Plugin style EAPlugin style EA
Plugin style EA
 
Ten lessons I painfully learnt while moving from software developer
to entrep...
Ten lessons I painfully learnt while moving from software developer
to entrep...Ten lessons I painfully learnt while moving from software developer
to entrep...
Ten lessons I painfully learnt while moving from software developer
to entrep...
 
Ten lessons I painfully learnt while moving from software developer to entrep...
Ten lessons I painfully learnt while moving from software developer to entrep...Ten lessons I painfully learnt while moving from software developer to entrep...
Ten lessons I painfully learnt while moving from software developer to entrep...
 
Devoxx Poland 2015: 5-10-15 years with Java
Devoxx Poland 2015: 5-10-15 years with Java Devoxx Poland 2015: 5-10-15 years with Java
Devoxx Poland 2015: 5-10-15 years with Java
 
A plumber's guide to SaaS
A plumber's guide to SaaSA plumber's guide to SaaS
A plumber's guide to SaaS
 
Software Development Innovation in Practice - 33rd Degree 2014
Software Development Innovation in Practice - 33rd Degree 2014Software Development Innovation in Practice - 33rd Degree 2014
Software Development Innovation in Practice - 33rd Degree 2014
 
Escaping Test Hell - ACCU 2014
Escaping Test Hell - ACCU 2014Escaping Test Hell - ACCU 2014
Escaping Test Hell - ACCU 2014
 
10 bezcennych lekcji dla software developera stającego się szefem firmy
10 bezcennych lekcji dla software developera stającego się szefem firmy10 bezcennych lekcji dla software developera stającego się szefem firmy
10 bezcennych lekcji dla software developera stającego się szefem firmy
 
Confitura 2013 Software Developer Career Unplugged
Confitura 2013 Software Developer Career UnpluggedConfitura 2013 Software Developer Career Unplugged
Confitura 2013 Software Developer Career Unplugged
 
Hitchhikers Guide to Participating in Open Source - Long Version
Hitchhikers Guide to Participating in Open Source - Long VersionHitchhikers Guide to Participating in Open Source - Long Version
Hitchhikers Guide to Participating in Open Source - Long Version
 
JavaMagazine - Java SE 8 - 2014-03-04
JavaMagazine - Java SE 8 - 2014-03-04JavaMagazine - Java SE 8 - 2014-03-04
JavaMagazine - Java SE 8 - 2014-03-04
 
Spartez Open Day March 13th 2015
Spartez Open Day March 13th 2015Spartez Open Day March 13th 2015
Spartez Open Day March 13th 2015
 
Software Developer Career Unplugged - GeeCon 2013
Software Developer Career Unplugged - GeeCon 2013Software Developer Career Unplugged - GeeCon 2013
Software Developer Career Unplugged - GeeCon 2013
 
/dev/fort: you can build it in a week @emw
/dev/fort: you can build it in a week @emw/dev/fort: you can build it in a week @emw
/dev/fort: you can build it in a week @emw
 
Gears and HTML 5 @media Ajax London 2008
Gears and HTML 5 @media Ajax London 2008Gears and HTML 5 @media Ajax London 2008
Gears and HTML 5 @media Ajax London 2008
 
Dégraissons le mammouth ou Darwin a encore frappé - La théorie de l'évolution...
Dégraissons le mammouth ou Darwin a encore frappé - La théorie de l'évolution...Dégraissons le mammouth ou Darwin a encore frappé - La théorie de l'évolution...
Dégraissons le mammouth ou Darwin a encore frappé - La théorie de l'évolution...
 
Documenting For Interactive Websites
Documenting For Interactive WebsitesDocumenting For Interactive Websites
Documenting For Interactive Websites
 
State of Drupal keynote, DrupalCon Austin
State of Drupal keynote, DrupalCon AustinState of Drupal keynote, DrupalCon Austin
State of Drupal keynote, DrupalCon Austin
 
Why your project's brand is more important than the code - SCRIPT
Why your project's brand is more important than the code - SCRIPTWhy your project's brand is more important than the code - SCRIPT
Why your project's brand is more important than the code - SCRIPT
 

Destacado (20)

Olivia
OliviaOlivia
Olivia
 
Moodle - add topic to course page
Moodle - add topic to course pageMoodle - add topic to course page
Moodle - add topic to course page
 
Wordpress install setup
Wordpress install setupWordpress install setup
Wordpress install setup
 
Brenden Wright
Brenden WrightBrenden Wright
Brenden Wright
 
Alex j
Alex jAlex j
Alex j
 
Nabca presentation 2010
Nabca presentation 2010Nabca presentation 2010
Nabca presentation 2010
 
Hunter u.
Hunter u.Hunter u.
Hunter u.
 
PayJunction Brochure Smart PC
PayJunction Brochure Smart PCPayJunction Brochure Smart PC
PayJunction Brochure Smart PC
 
How to add Widget in sidebar
 How to add Widget in sidebar How to add Widget in sidebar
How to add Widget in sidebar
 
MANO
MANOMANO
MANO
 
Does your website take more time while loading
Does your website take more time while loadingDoes your website take more time while loading
Does your website take more time while loading
 
National Geographic2
National Geographic2National Geographic2
National Geographic2
 
Ethan Albert Native American Project for Mr. Morgan
Ethan Albert Native American Project for Mr. MorganEthan Albert Native American Project for Mr. Morgan
Ethan Albert Native American Project for Mr. Morgan
 
Tristan.d
Tristan.dTristan.d
Tristan.d
 
How should we prepare for integrated HR & payroll software?
How should we prepare for integrated HR & payroll software?How should we prepare for integrated HR & payroll software?
How should we prepare for integrated HR & payroll software?
 
Hailey gettel
Hailey gettelHailey gettel
Hailey gettel
 
Expotacuaral09
Expotacuaral09Expotacuaral09
Expotacuaral09
 
Save time, reduce risk and improve quality: How online accounting adds value
Save time, reduce risk and improve quality: How online accounting adds valueSave time, reduce risk and improve quality: How online accounting adds value
Save time, reduce risk and improve quality: How online accounting adds value
 
Independent auto & home
Independent auto & homeIndependent auto & home
Independent auto & home
 
Passive
PassivePassive
Passive
 

Similar a From dev to ops and beyond - getting it done

Clean code is not the goal - working software is
Clean code is not the goal - working software isClean code is not the goal - working software is
Clean code is not the goal - working software isEdorian
 
Beginners guide-to-coding-updated
Beginners guide-to-coding-updatedBeginners guide-to-coding-updated
Beginners guide-to-coding-updatedSaidLezzar
 
Building an Open Source iOS app: lessons learned
Building an Open Source iOS app: lessons learnedBuilding an Open Source iOS app: lessons learned
Building an Open Source iOS app: lessons learnedWojciech Koszek
 
Resisting The Feature Creature
Resisting The Feature CreatureResisting The Feature Creature
Resisting The Feature CreatureChristian Heilmann
 
Become a webdeveloper - AKAICamp Beginner #1
Become a webdeveloper - AKAICamp Beginner #1Become a webdeveloper - AKAICamp Beginner #1
Become a webdeveloper - AKAICamp Beginner #1Jacek Tomaszewski
 
HAX - Chaotic Good
HAX - Chaotic GoodHAX - Chaotic Good
HAX - Chaotic Goodbtopro
 
Sunny Tech 2019 - Craft Forever
Sunny Tech 2019 - Craft ForeverSunny Tech 2019 - Craft Forever
Sunny Tech 2019 - Craft ForeverCyrille Martraire
 
Faster Secure Software Development with Continuous Deployment - PH Days 2013
Faster Secure Software Development with Continuous Deployment - PH Days 2013Faster Secure Software Development with Continuous Deployment - PH Days 2013
Faster Secure Software Development with Continuous Deployment - PH Days 2013Nick Galbreath
 
Beyond Technical Debt: Unconventional techniques to uncover technical and soc...
Beyond Technical Debt: Unconventional techniques to uncover technical and soc...Beyond Technical Debt: Unconventional techniques to uncover technical and soc...
Beyond Technical Debt: Unconventional techniques to uncover technical and soc...Juraj Martinka
 
Planning JavaScript and Ajax for larger teams
Planning JavaScript and Ajax for larger teamsPlanning JavaScript and Ajax for larger teams
Planning JavaScript and Ajax for larger teamsChristian Heilmann
 
Tamk - ohjelmistokehitys-seminaari 9.10
Tamk - ohjelmistokehitys-seminaari 9.10Tamk - ohjelmistokehitys-seminaari 9.10
Tamk - ohjelmistokehitys-seminaari 9.10Sakari Hoisko
 
Enterprise PHP (PHP London Conference 2008)
Enterprise PHP (PHP London Conference 2008)Enterprise PHP (PHP London Conference 2008)
Enterprise PHP (PHP London Conference 2008)Ivo Jansch
 
Codemotion Berlin 2015 recap
Codemotion Berlin 2015   recapCodemotion Berlin 2015   recap
Codemotion Berlin 2015 recapTorben Dohrn
 
What Web Framework To Use?
What Web Framework To Use?What Web Framework To Use?
What Web Framework To Use?Kasra Khosravi
 
"Standing on the Shoulders of Giants" by Brian King @ eLiberatica 2008
"Standing on the Shoulders of Giants" by Brian King @ eLiberatica 2008"Standing on the Shoulders of Giants" by Brian King @ eLiberatica 2008
"Standing on the Shoulders of Giants" by Brian King @ eLiberatica 2008eLiberatica
 
Old code doesn't stink - Detroit
Old code doesn't stink - DetroitOld code doesn't stink - Detroit
Old code doesn't stink - DetroitMartin Gutenbrunner
 
Conference DotJS 2015 Paris review
Conference DotJS 2015 Paris reviewConference DotJS 2015 Paris review
Conference DotJS 2015 Paris reviewOleksii Prohonnyi
 
Simplicity - develop modern web apps with tiny frameworks and tools
Simplicity - develop modern web apps with tiny frameworks and toolsSimplicity - develop modern web apps with tiny frameworks and tools
Simplicity - develop modern web apps with tiny frameworks and toolsRui Carvalho
 
Professional web development with libraries
Professional web development with librariesProfessional web development with libraries
Professional web development with librariesChristian Heilmann
 
Containers, Serverless, Polyglot Development World, And Others…10 trends resh...
Containers, Serverless, Polyglot Development World, And Others…10 trends resh...Containers, Serverless, Polyglot Development World, And Others…10 trends resh...
Containers, Serverless, Polyglot Development World, And Others…10 trends resh...PROIDEA
 

Similar a From dev to ops and beyond - getting it done (20)

Clean code is not the goal - working software is
Clean code is not the goal - working software isClean code is not the goal - working software is
Clean code is not the goal - working software is
 
Beginners guide-to-coding-updated
Beginners guide-to-coding-updatedBeginners guide-to-coding-updated
Beginners guide-to-coding-updated
 
Building an Open Source iOS app: lessons learned
Building an Open Source iOS app: lessons learnedBuilding an Open Source iOS app: lessons learned
Building an Open Source iOS app: lessons learned
 
Resisting The Feature Creature
Resisting The Feature CreatureResisting The Feature Creature
Resisting The Feature Creature
 
Become a webdeveloper - AKAICamp Beginner #1
Become a webdeveloper - AKAICamp Beginner #1Become a webdeveloper - AKAICamp Beginner #1
Become a webdeveloper - AKAICamp Beginner #1
 
HAX - Chaotic Good
HAX - Chaotic GoodHAX - Chaotic Good
HAX - Chaotic Good
 
Sunny Tech 2019 - Craft Forever
Sunny Tech 2019 - Craft ForeverSunny Tech 2019 - Craft Forever
Sunny Tech 2019 - Craft Forever
 
Faster Secure Software Development with Continuous Deployment - PH Days 2013
Faster Secure Software Development with Continuous Deployment - PH Days 2013Faster Secure Software Development with Continuous Deployment - PH Days 2013
Faster Secure Software Development with Continuous Deployment - PH Days 2013
 
Beyond Technical Debt: Unconventional techniques to uncover technical and soc...
Beyond Technical Debt: Unconventional techniques to uncover technical and soc...Beyond Technical Debt: Unconventional techniques to uncover technical and soc...
Beyond Technical Debt: Unconventional techniques to uncover technical and soc...
 
Planning JavaScript and Ajax for larger teams
Planning JavaScript and Ajax for larger teamsPlanning JavaScript and Ajax for larger teams
Planning JavaScript and Ajax for larger teams
 
Tamk - ohjelmistokehitys-seminaari 9.10
Tamk - ohjelmistokehitys-seminaari 9.10Tamk - ohjelmistokehitys-seminaari 9.10
Tamk - ohjelmistokehitys-seminaari 9.10
 
Enterprise PHP (PHP London Conference 2008)
Enterprise PHP (PHP London Conference 2008)Enterprise PHP (PHP London Conference 2008)
Enterprise PHP (PHP London Conference 2008)
 
Codemotion Berlin 2015 recap
Codemotion Berlin 2015   recapCodemotion Berlin 2015   recap
Codemotion Berlin 2015 recap
 
What Web Framework To Use?
What Web Framework To Use?What Web Framework To Use?
What Web Framework To Use?
 
"Standing on the Shoulders of Giants" by Brian King @ eLiberatica 2008
"Standing on the Shoulders of Giants" by Brian King @ eLiberatica 2008"Standing on the Shoulders of Giants" by Brian King @ eLiberatica 2008
"Standing on the Shoulders of Giants" by Brian King @ eLiberatica 2008
 
Old code doesn't stink - Detroit
Old code doesn't stink - DetroitOld code doesn't stink - Detroit
Old code doesn't stink - Detroit
 
Conference DotJS 2015 Paris review
Conference DotJS 2015 Paris reviewConference DotJS 2015 Paris review
Conference DotJS 2015 Paris review
 
Simplicity - develop modern web apps with tiny frameworks and tools
Simplicity - develop modern web apps with tiny frameworks and toolsSimplicity - develop modern web apps with tiny frameworks and tools
Simplicity - develop modern web apps with tiny frameworks and tools
 
Professional web development with libraries
Professional web development with librariesProfessional web development with libraries
Professional web development with libraries
 
Containers, Serverless, Polyglot Development World, And Others…10 trends resh...
Containers, Serverless, Polyglot Development World, And Others…10 trends resh...Containers, Serverless, Polyglot Development World, And Others…10 trends resh...
Containers, Serverless, Polyglot Development World, And Others…10 trends resh...
 

Más de Edorian

Your (coding) standards matter
Your (coding) standards matterYour (coding) standards matter
Your (coding) standards matterEdorian
 
Save time by applying clean code principles
Save time by applying clean code principlesSave time by applying clean code principles
Save time by applying clean code principlesEdorian
 
Nginx - The webserver you might actually like
Nginx - The webserver you might actually likeNginx - The webserver you might actually like
Nginx - The webserver you might actually likeEdorian
 
Code review in practice
Code review in practiceCode review in practice
Code review in practiceEdorian
 
PhpUnit Best Practices
PhpUnit Best PracticesPhpUnit Best Practices
PhpUnit Best PracticesEdorian
 
Nginx & php fpm - the webserver you might actually like - php usergroup berlin
Nginx & php fpm - the webserver you might actually like - php usergroup berlinNginx & php fpm - the webserver you might actually like - php usergroup berlin
Nginx & php fpm - the webserver you might actually like - php usergroup berlinEdorian
 
The state of PHPUnit
The state of PHPUnitThe state of PHPUnit
The state of PHPUnitEdorian
 
The State of PHPUnit
The State of PHPUnitThe State of PHPUnit
The State of PHPUnitEdorian
 
Nginx The webserver you might actually like
Nginx   The webserver you might actually likeNginx   The webserver you might actually like
Nginx The webserver you might actually likeEdorian
 
The State of PHPUnit
The State of PHPUnitThe State of PHPUnit
The State of PHPUnitEdorian
 
Stop wasting-time-by-applying-clean-code-principles
Stop wasting-time-by-applying-clean-code-principlesStop wasting-time-by-applying-clean-code-principles
Stop wasting-time-by-applying-clean-code-principlesEdorian
 
php unconference Europa: Clean code - Stop wasting my time
php unconference Europa: Clean code - Stop wasting my timephp unconference Europa: Clean code - Stop wasting my time
php unconference Europa: Clean code - Stop wasting my timeEdorian
 
Clean Code: Stop wasting my time
Clean Code: Stop wasting my timeClean Code: Stop wasting my time
Clean Code: Stop wasting my timeEdorian
 

Más de Edorian (13)

Your (coding) standards matter
Your (coding) standards matterYour (coding) standards matter
Your (coding) standards matter
 
Save time by applying clean code principles
Save time by applying clean code principlesSave time by applying clean code principles
Save time by applying clean code principles
 
Nginx - The webserver you might actually like
Nginx - The webserver you might actually likeNginx - The webserver you might actually like
Nginx - The webserver you might actually like
 
Code review in practice
Code review in practiceCode review in practice
Code review in practice
 
PhpUnit Best Practices
PhpUnit Best PracticesPhpUnit Best Practices
PhpUnit Best Practices
 
Nginx & php fpm - the webserver you might actually like - php usergroup berlin
Nginx & php fpm - the webserver you might actually like - php usergroup berlinNginx & php fpm - the webserver you might actually like - php usergroup berlin
Nginx & php fpm - the webserver you might actually like - php usergroup berlin
 
The state of PHPUnit
The state of PHPUnitThe state of PHPUnit
The state of PHPUnit
 
The State of PHPUnit
The State of PHPUnitThe State of PHPUnit
The State of PHPUnit
 
Nginx The webserver you might actually like
Nginx   The webserver you might actually likeNginx   The webserver you might actually like
Nginx The webserver you might actually like
 
The State of PHPUnit
The State of PHPUnitThe State of PHPUnit
The State of PHPUnit
 
Stop wasting-time-by-applying-clean-code-principles
Stop wasting-time-by-applying-clean-code-principlesStop wasting-time-by-applying-clean-code-principles
Stop wasting-time-by-applying-clean-code-principles
 
php unconference Europa: Clean code - Stop wasting my time
php unconference Europa: Clean code - Stop wasting my timephp unconference Europa: Clean code - Stop wasting my time
php unconference Europa: Clean code - Stop wasting my time
 
Clean Code: Stop wasting my time
Clean Code: Stop wasting my timeClean Code: Stop wasting my time
Clean Code: Stop wasting my time
 

Último

Computer 10: Lesson 10 - Online Crimes and Hazards
Computer 10: Lesson 10 - Online Crimes and HazardsComputer 10: Lesson 10 - Online Crimes and Hazards
Computer 10: Lesson 10 - Online Crimes and HazardsSeth Reyes
 
COMPUTER 10 Lesson 8 - Building a Website
COMPUTER 10 Lesson 8 - Building a WebsiteCOMPUTER 10 Lesson 8 - Building a Website
COMPUTER 10 Lesson 8 - Building a Websitedgelyza
 
ADOPTING WEB 3 FOR YOUR BUSINESS: A STEP-BY-STEP GUIDE
ADOPTING WEB 3 FOR YOUR BUSINESS: A STEP-BY-STEP GUIDEADOPTING WEB 3 FOR YOUR BUSINESS: A STEP-BY-STEP GUIDE
ADOPTING WEB 3 FOR YOUR BUSINESS: A STEP-BY-STEP GUIDELiveplex
 
IaC & GitOps in a Nutshell - a FridayInANuthshell Episode.pdf
IaC & GitOps in a Nutshell - a FridayInANuthshell Episode.pdfIaC & GitOps in a Nutshell - a FridayInANuthshell Episode.pdf
IaC & GitOps in a Nutshell - a FridayInANuthshell Episode.pdfDaniel Santiago Silva Capera
 
Nanopower In Semiconductor Industry.pdf
Nanopower  In Semiconductor Industry.pdfNanopower  In Semiconductor Industry.pdf
Nanopower In Semiconductor Industry.pdfPedro Manuel
 
Meet the new FSP 3000 M-Flex800™
Meet the new FSP 3000 M-Flex800™Meet the new FSP 3000 M-Flex800™
Meet the new FSP 3000 M-Flex800™Adtran
 
VoIP Service and Marketing using Odoo and Asterisk PBX
VoIP Service and Marketing using Odoo and Asterisk PBXVoIP Service and Marketing using Odoo and Asterisk PBX
VoIP Service and Marketing using Odoo and Asterisk PBXTarek Kalaji
 
KubeConEU24-Monitoring Kubernetes and Cloud Spend with OpenCost
KubeConEU24-Monitoring Kubernetes and Cloud Spend with OpenCostKubeConEU24-Monitoring Kubernetes and Cloud Spend with OpenCost
KubeConEU24-Monitoring Kubernetes and Cloud Spend with OpenCostMatt Ray
 
Designing A Time bound resource download URL
Designing A Time bound resource download URLDesigning A Time bound resource download URL
Designing A Time bound resource download URLRuncy Oommen
 
AI You Can Trust - Ensuring Success with Data Integrity Webinar
AI You Can Trust - Ensuring Success with Data Integrity WebinarAI You Can Trust - Ensuring Success with Data Integrity Webinar
AI You Can Trust - Ensuring Success with Data Integrity WebinarPrecisely
 
Connector Corner: Extending LLM automation use cases with UiPath GenAI connec...
Connector Corner: Extending LLM automation use cases with UiPath GenAI connec...Connector Corner: Extending LLM automation use cases with UiPath GenAI connec...
Connector Corner: Extending LLM automation use cases with UiPath GenAI connec...DianaGray10
 
UiPath Platform: The Backend Engine Powering Your Automation - Session 1
UiPath Platform: The Backend Engine Powering Your Automation - Session 1UiPath Platform: The Backend Engine Powering Your Automation - Session 1
UiPath Platform: The Backend Engine Powering Your Automation - Session 1DianaGray10
 
Videogame localization & technology_ how to enhance the power of translation.pdf
Videogame localization & technology_ how to enhance the power of translation.pdfVideogame localization & technology_ how to enhance the power of translation.pdf
Videogame localization & technology_ how to enhance the power of translation.pdfinfogdgmi
 
Bird eye's view on Camunda open source ecosystem
Bird eye's view on Camunda open source ecosystemBird eye's view on Camunda open source ecosystem
Bird eye's view on Camunda open source ecosystemAsko Soukka
 
Building Your Own AI Instance (TBLC AI )
Building Your Own AI Instance (TBLC AI )Building Your Own AI Instance (TBLC AI )
Building Your Own AI Instance (TBLC AI )Brian Pichman
 
Salesforce Miami User Group Event - 1st Quarter 2024
Salesforce Miami User Group Event - 1st Quarter 2024Salesforce Miami User Group Event - 1st Quarter 2024
Salesforce Miami User Group Event - 1st Quarter 2024SkyPlanner
 
Apres-Cyber - The Data Dilemma: Bridging Offensive Operations and Machine Lea...
Apres-Cyber - The Data Dilemma: Bridging Offensive Operations and Machine Lea...Apres-Cyber - The Data Dilemma: Bridging Offensive Operations and Machine Lea...
Apres-Cyber - The Data Dilemma: Bridging Offensive Operations and Machine Lea...Will Schroeder
 
UiPath Studio Web workshop series - Day 6
UiPath Studio Web workshop series - Day 6UiPath Studio Web workshop series - Day 6
UiPath Studio Web workshop series - Day 6DianaGray10
 
The Data Metaverse: Unpacking the Roles, Use Cases, and Tech Trends in Data a...
The Data Metaverse: Unpacking the Roles, Use Cases, and Tech Trends in Data a...The Data Metaverse: Unpacking the Roles, Use Cases, and Tech Trends in Data a...
The Data Metaverse: Unpacking the Roles, Use Cases, and Tech Trends in Data a...Aggregage
 

Último (20)

Computer 10: Lesson 10 - Online Crimes and Hazards
Computer 10: Lesson 10 - Online Crimes and HazardsComputer 10: Lesson 10 - Online Crimes and Hazards
Computer 10: Lesson 10 - Online Crimes and Hazards
 
COMPUTER 10 Lesson 8 - Building a Website
COMPUTER 10 Lesson 8 - Building a WebsiteCOMPUTER 10 Lesson 8 - Building a Website
COMPUTER 10 Lesson 8 - Building a Website
 
ADOPTING WEB 3 FOR YOUR BUSINESS: A STEP-BY-STEP GUIDE
ADOPTING WEB 3 FOR YOUR BUSINESS: A STEP-BY-STEP GUIDEADOPTING WEB 3 FOR YOUR BUSINESS: A STEP-BY-STEP GUIDE
ADOPTING WEB 3 FOR YOUR BUSINESS: A STEP-BY-STEP GUIDE
 
IaC & GitOps in a Nutshell - a FridayInANuthshell Episode.pdf
IaC & GitOps in a Nutshell - a FridayInANuthshell Episode.pdfIaC & GitOps in a Nutshell - a FridayInANuthshell Episode.pdf
IaC & GitOps in a Nutshell - a FridayInANuthshell Episode.pdf
 
Nanopower In Semiconductor Industry.pdf
Nanopower  In Semiconductor Industry.pdfNanopower  In Semiconductor Industry.pdf
Nanopower In Semiconductor Industry.pdf
 
Meet the new FSP 3000 M-Flex800™
Meet the new FSP 3000 M-Flex800™Meet the new FSP 3000 M-Flex800™
Meet the new FSP 3000 M-Flex800™
 
VoIP Service and Marketing using Odoo and Asterisk PBX
VoIP Service and Marketing using Odoo and Asterisk PBXVoIP Service and Marketing using Odoo and Asterisk PBX
VoIP Service and Marketing using Odoo and Asterisk PBX
 
KubeConEU24-Monitoring Kubernetes and Cloud Spend with OpenCost
KubeConEU24-Monitoring Kubernetes and Cloud Spend with OpenCostKubeConEU24-Monitoring Kubernetes and Cloud Spend with OpenCost
KubeConEU24-Monitoring Kubernetes and Cloud Spend with OpenCost
 
Designing A Time bound resource download URL
Designing A Time bound resource download URLDesigning A Time bound resource download URL
Designing A Time bound resource download URL
 
AI You Can Trust - Ensuring Success with Data Integrity Webinar
AI You Can Trust - Ensuring Success with Data Integrity WebinarAI You Can Trust - Ensuring Success with Data Integrity Webinar
AI You Can Trust - Ensuring Success with Data Integrity Webinar
 
Connector Corner: Extending LLM automation use cases with UiPath GenAI connec...
Connector Corner: Extending LLM automation use cases with UiPath GenAI connec...Connector Corner: Extending LLM automation use cases with UiPath GenAI connec...
Connector Corner: Extending LLM automation use cases with UiPath GenAI connec...
 
UiPath Platform: The Backend Engine Powering Your Automation - Session 1
UiPath Platform: The Backend Engine Powering Your Automation - Session 1UiPath Platform: The Backend Engine Powering Your Automation - Session 1
UiPath Platform: The Backend Engine Powering Your Automation - Session 1
 
Videogame localization & technology_ how to enhance the power of translation.pdf
Videogame localization & technology_ how to enhance the power of translation.pdfVideogame localization & technology_ how to enhance the power of translation.pdf
Videogame localization & technology_ how to enhance the power of translation.pdf
 
Bird eye's view on Camunda open source ecosystem
Bird eye's view on Camunda open source ecosystemBird eye's view on Camunda open source ecosystem
Bird eye's view on Camunda open source ecosystem
 
Building Your Own AI Instance (TBLC AI )
Building Your Own AI Instance (TBLC AI )Building Your Own AI Instance (TBLC AI )
Building Your Own AI Instance (TBLC AI )
 
Salesforce Miami User Group Event - 1st Quarter 2024
Salesforce Miami User Group Event - 1st Quarter 2024Salesforce Miami User Group Event - 1st Quarter 2024
Salesforce Miami User Group Event - 1st Quarter 2024
 
Apres-Cyber - The Data Dilemma: Bridging Offensive Operations and Machine Lea...
Apres-Cyber - The Data Dilemma: Bridging Offensive Operations and Machine Lea...Apres-Cyber - The Data Dilemma: Bridging Offensive Operations and Machine Lea...
Apres-Cyber - The Data Dilemma: Bridging Offensive Operations and Machine Lea...
 
20230104 - machine vision
20230104 - machine vision20230104 - machine vision
20230104 - machine vision
 
UiPath Studio Web workshop series - Day 6
UiPath Studio Web workshop series - Day 6UiPath Studio Web workshop series - Day 6
UiPath Studio Web workshop series - Day 6
 
The Data Metaverse: Unpacking the Roles, Use Cases, and Tech Trends in Data a...
The Data Metaverse: Unpacking the Roles, Use Cases, and Tech Trends in Data a...The Data Metaverse: Unpacking the Roles, Use Cases, and Tech Trends in Data a...
The Data Metaverse: Unpacking the Roles, Use Cases, and Tech Trends in Data a...
 

From dev to ops and beyond - getting it done

  • 1. FROM DEV TO OPS AND BEYOND GETTING IT DONE Volker Dusch / @_ _edorian
  • 2. ABOUT ME Software Engineer PHP since 11 years CI CleanCode DevOps TDD Shipping Bullet points
  • 4. WORKING FOR ResearchGate gives science back to the people who make it happen. We help researchers build reputation and accelerate scientific progress. On their terms.
  • 5. GET IN TOUCH stackoverflow: Twitter: @_ _edorian G+: Volker Dusch IRC: edorian Mail: php@wallbash.com
  • 6. AGENDA We will look at what is necessarily to keep shipping a successful product beyond its initial release and what role we developers should be playing in this. Development practices Planning and Communication Deployment and Operations YMMV
  • 7. BUT BEFORE WE GET GOING Time for a little exercise
  • 8. 10 YEARS AGO HOW I GOT HOOKED ON CREATING STUFF ON THE WEB Creating things is awesome It was super easy and fun
  • 9. 10 YEARS AGO CUSTOMERS "We want a website!" "Can you fix this little thing please?" "What do you mean you're already done?"
  • 10. 10 YEARS AGO WHAT IDIDN'T KNOW BACK THEN Things got bigger, a lot bigger "Web applications" vs. "Websites" Maintaining things was really hard It's about more than just programming
  • 13. MY FIRST WEB APPLICATION 6 devs, growing to 20 Big code base Quite some data, for the time This talk is about everything we had to take care of, and more
  • 15. LET'S SHIP IT! THINGSTO TAKE CARE OF Fulfilling current requirements Figuring out what to do next Delivery and Operations ASK QUESTIONS AT ANY TIME!
  • 16. WE'RE DEVELOPERS Let's start with us! We get paid to do what we love Most of us started because we where fascinated by programming But what is our job?
  • 17. OUR JOB IS TO DELIVER Get things done Give good estimates Ask the right questions Keep doing that Don't slow down Keep our promises
  • 18. THE COST OF HAVING USFOLKSAROUND German numbers, YMMV €, Approximations Salary: ~50k a year 50.000€ / Year Adding non-wage labor cost 80.000€ / Year Office space, water, hardware, coffee, plants, cleaning, travels, training 100.000€ / Year Weekends, holidays, vacation, etc: We works 220 days a year. 455€ / day "Classic" 8 hour work day 55 Bucks per Hour! We are expected to contribute over 100.000 Bucks in business value per year!
  • 19. HOW? Evaluate everything you're doing by a simple question: “Does the practice in question help us to continuously ship what our business needs to succeed?”
  • 20. CODE Rules for structuring our source code that have proven to help with sustainability.
  • 21. THE MOST BASIC THING: Separate the web-glue from the business logic. Keep templates stupid Have services owning the logic for manipulation of business entities Hide the data access behind a layer that you can maintain individually
  • 22. SOLID Single responsibility Open-closed Liskov substitution Interface segregation Dependency inversion http://en.wikipedia.org/wiki/SOLID(object-orienteddesign)
  • 23. COMPOSITION OVER INHERITANCE Don't inherit from things if you can just use them. http://c2.com/cgi/wiki?CompositionInsteadOfInheritance http://en.wikipedia.org/wiki/Compositionoverinheritance
  • 24. DEPENDENCYINJECTION This goes for you code base as well as for your whole Company. Allows for quick and easy reuse of small components If wiring is to hard people will copy/paste instead Can be achieved in many ways. Pick one that works for you http://pimple.sensiolabs.org/ http://symfony.com/doc/current/components/dependency_injection/index.h https://github.com/researchgate/injektor “In the end - everything is a wiring problem.”
  • 25. REUSING CODE The Dependency Manager for PHP As easy as committing everything to your SCM. But with care free autoloading.
  • 26. TESTING The art of making sure that you notice failures before your customers do. Testing exist to give you confidence when moving forward.
  • 27. THE FASTEST THING YOUCAN DO Staging server Testing your builds All without even touching Behat or PHPUnit hits=`curl -s staging.project.com | grep 'Login:' | wc -l`; test $hits -eq 1 || echo "Frontpage error!" data="login=test&passwort=secure&csrf="$csrfToken url="staging.project.com" hits=`curl -X POST -d $data $url | grep 'Hello, testuser' | wc -l`; test $hits -eq 1 || echo "Login error!"
  • 28. OTHER DEPARTMENTSDON'T CARE ABOUT UNIT TESTING Nor should they! Your fellow developers on the other hand ... :) “The mechanic fixing your car doesn't ask you what song she should listen to while performing the task.”
  • 30. BUT TESTING ISHAAAARD Writing proper code is hard The harder it is to use the code in question, the harder is writing tests for it Complex tests means the code is to complex. Break it down. If anything: Mocking is hard(-ish). Phake is your friend: http://phake.digitalsandwich.com/docs/html/ FBMock: Mocking for grown ups: https://github.com/facebook/FBMock The PHPUnit mocking API is still good enough.
  • 31. TDD Writing tests can feel like extra work if you are rethinking an already solved problem TDD offers a way to first think about the problem, the interface and the interactions and then filling in the details step by step until you are done with the bigger picture.
  • 32. QUICK WINSWITH BEHAT Web tests help you detect a big amount of wiring issues with little effort Before growing to many of them consider maintenance "Full stack testing" will allow you to ship with great confidence
  • 33. ENSURING MAINTAINABILITY Getting rid of all the things you might stumble over
  • 34. CODE REVIEW There are a lot of ways to go about this Small teams can use commit based review When feature branching the merge back is a natural point Internal coding Dojo Pair programming Send emails when important changes occur The main point of these ideas is to make sure everyone has a good understanding of how common things are solved and to keep people communicating.
  • 35. CODING GUIDELINES A collection for formatting and structure rules so that everyone can easily find their way around and produce uniform code. Just create the rule set fitting your practices Adapt when there is pain Don't over analyze. Just do it PHP CodeSniffer: http://pear.php.net/package/PHP_CodeSniffer http://pear.php.net/manual/en/package.php.php- codesniffer.annotated-ruleset.php http://edorian.github.io/php-coding-standard-generator/#phpcs “Coding rules: It doesn't matter what they are - as long as you have them.”
  • 36. COMPLEXITYGUIDELINES Similar to a coding standard but focusing on hunting down potential problems within your source code Possible bugs Suboptimal code Overcomplicated expressions Unused parameters, methods, properties PHP MessDetector: http://phpmd.org/ http://phpmd.org/rules/ http://edorian.github.io/php-coding-standard-generator/#phpmd
  • 37. CONTINUOUS DEVELOPMENT PACE "Done" means there is nothing left to clean up Every once in a while you plan time to throw away things "Having a clean slate" is an attitude and a culture “There are only two hard problems in Computer Science: cache invalidation, naming things, and off- by-one errors.”
  • 38. CI Have a automated way of checking all the things you agreed on Run web and unit tests Ensure coding guidelines Ensure complexity guidelines Keep the project deploying :) Tools: http://jenkins-ci.org http://jenkins-php.org http://www.sonarsource.org
  • 39. WORKING IN SHORT ITERATIONS Every iteration is a chance for people to "sync" their Vision of the product with the current reality.
  • 40. SHIPPING REDUCES COMPLEXITY "Did we already implement this a month ago?" "That bug you just reported was fixed 2 weeks ago. Just not deployed yet" Shipping let's you discover what doesn't work before you spend too much time on it.
  • 41. PLANNING CAN BE A BIG MINDSET CHANGE “Nobody told me my job involved talking to... people”
  • 42. ASSUME COMPETENCE Work with the basic mind set that other people are at least as good in their job as you are in yours. If they tell you to do "stupid" things find out what they want to achieve Company "vision" is a big here Just know what you want to get done and work together
  • 43. HAVING EVERYONE INVOLVED Getting everyone in the same boat and working towards a common goal will speed you up like nothing else every will. Product Design Copyrighting Engineering ""Upper management"" If you can ensure that everyone was involved somewhere in the loop you spend way less time on re-discussing and avoid confusion.
  • 44. HONESTY SOLVES A LOT MORE ISSUES THAN IT CREATES True story.
  • 45. TOOLING Tooling is needed when people can't get the information they need A wall with Post'it notes and a stack of story cards might be all you need When working remote spend time on making it look beautiful so that people look at it https://trello.com/ $millionOfOtherProducts
  • 46. BUGS Technical errors Communication errors (and forgotten features) Fix the technical issues quickly to reduce complexity Don't build "bug management". But at a certain size you need someone to dispatch bugs to safe everyone time
  • 47. STATS State are awesome! Knowing what your users actually do with your software is valuable Seeing them use the new thing you build is - like - the best ever(tm). StatsD: https://github.com/etsy/statsd/ Graphite: http://graphite.wikidot.com/
  • 48. OPS AND DEVOPS If it's not in production it doesn't really count.
  • 50. DEVOPS Talking to the people getting up at night so you don't have to. Your SysAdmins care. A lot! It's your job to figure out a way to constantly deploy without breaking things Automation helps avoiding errors
  • 51. BUILD AND DEPLOYMENT TOOLING A collection of scripts that gets you from "source code" to "running in production". Create a build Can be done in Jenkins. Still keep it in a script and let Jenkins run it. Run unit tests Run integration, functional tests Report on coding/complexity metrics Once you are confident that things are going to go well Deploy the build to a staging environment Run web tests Deploy to production Rollback when really really needed That's it. No magic - Just detail work.
  • 52. HOW TO GET THAT SCRIPT? It doesn't matter what language you write that tooling in. There is no generic answer. Chances are there is going to be a lot of BASH in it. Whatever calls your BASH script isn't all that important Ant More custom BASH Ant Build Commons SF2 CLI commands Whatever works. As long as you can maintain it and it's stable. Don't over-engineer. You'll iterate a lot over this.
  • 54. PROVISIONING Getting servers and development environments in a known state Having the SAME versions on dev and prod is invaluable. The only documentation that gets always updated is the code. Being able to recreate servers safes a lot of hassle. Think about your firewalls :) Having a virtual machine per project keeps you sane http://www.vagrantup.com/ https://puppetlabs.com/ http://www.opscode.com/chef/
  • 55. CONFIGURATION MANAGEMENT Any solution will require close collaboration with the folks running the production boxes or lead to hassle. Config files in puppet/chef Configs for all systems in the SCM and only reading in environments Setting systems up in a way that they always look the same
  • 56. DATA MIGRATIONS This questions comes up a lot when talking about automation. There is no easy answer. Very specific to your project and environment Usually not possible to have downtime while data is migrated Don't throw away DB columns when you change the code. Add new ones and clean up later when you are sure.
  • 58. QUESTIONS? Get in touch Twitter: @_ _edorian G+: Volker Dusch IRC: edorian Mail: php@wallbash.com Check those things out: Facebook: https://www.facebook.com/Engineering?sk=notes Etsy: http://codeascraft.com/