enterprise workflows when you aren't enterprise
TRANSCRIPT
Ubuntu Mocha
Enterprise Workflows When You Aren't Enterprise
Chris Tankersley
E-mail: [email protected]: @dragonmantankIdenti.ca: dragonmantank
Who Are You and Why Are You In My House?
Chris Tankersley
Been doing PHP for almost 8 years now
Lots of projects no one uses released under the BSD license
What is 'Enterprise'?
Big, Robust
Structured
Standardized
Overly Complicated
Unrealistic
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
What is 'Enterprise'?
Big, Robust
Structured
Standardized
Overly Complicated
Unrealistic
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
How Do You Become Enterprise?
Pass (parts of) the Joel Test
Project Management
Managed Environments
Automated Processes
The Joel Test
Do you have a spec?
Do you use source control?
Can you make a build in one step?
Do you make daily builds?
Do you have an up-to-date schedule?
Do you have a bug database?
Project Management
You can't do work unless you know what needs to be done
Pick a Project Management StyleModified Waterfall
SCRUM
Kanban
Generate a functional and technical spec
Stick With It
Modified Waterfall
Scrum
Kanban
Project Management Tools
Trac Wiki, SCM browser, and Bug Tracker
Basecamp HQ
Microsoft Project
TaskJuggler
Excel
Whiteboard
Corkboard
Managed Environments
A work area with a specific purpose
Should have at least 3 areasDevelopment
Quality
Production
If you can, add in 'Integration' before Production
Code always moves up, not down, the chain
Development
Here Be Dragons
Code here is never considered stable
Can be any machine (local, development, a VM, whatever)
Test Driven Development starts here
Quality
Code should work here
This is for QA testers
Should be close to Production
Should have logging and debug on
Integration
Production-Lite
Used to catch deployment bugs
Uses Production data
Should be exactly the same build as ProductionSame OS, setup, and version levels of software
Production
Here Be Dragons
Live data
No Touching!
Environment Tools
VMWare Workstation/Fusion/Server/ESXi
Oracle VirtualBox
OS-Native BuildsOSX homebrew
Windows Packages and cygwin
Linux Probably already there
The CloudEC2
Rackspace Cloud
Glue Software
Continuous Integration
Act of automating build tasks
How is a PHP Project built?Check out the code from the SCM
Run unit tests
Run code helpers
Build Documentation
Packaging
Continuous Integration Software
PhpUnderControl
Hudson/Jenkins
Phing and xinc
Source Control
Pick One Doesn't Matter
Just make sure it works with your CI controller
Hook it all together
Starting a Project
Get/write the spec
Break it down into work unitsDesign Schema
Set up server
Write API for user authentication
Put all the tasks up for choosing
Choose Your Tasks
Go to the list of tasks
Pick something that needs to be worked onWaterfall should have a list of objectives
Scrum should do this at the beginning of the Sprint
Kanban should do this every time a work unit is finished
Assign and Begin Work
Development
Do your initial coding (TDD, BDD, whatever)
Commit in functional chunks. Don't check in half-baked code
When you are finished with a feature, promote and tell QA
Development -> Quality
Continuous Integration kicks inLet it manage code movement to Quality
Only passing code gets put into Quality
Quality
Do main testing here
Write down bugs/defectsIf they are in relation to a feature being worked on, let the developer know
If they are not, put in the list of things to do
Only QA should close bugs/tickets
Quality -> Integration
Tag the code in a meaningful way
Deployment is testedDownload Production data
Run update scripts
Promote Code
Check if anything broke
Usually a pass/fail
Quality/Integration -> Production
Deploy the Code
Return to 'Choose Your Tasks'
What does all this lead to?
Continuous Deployment
The Holy Grail
As work is finished, it is put into Production
Everything is automated after DeploymentYou develop, it gets automatically tested, and CI will test deployment and put into Production
Promotions to Production happen all the time
Small promotions tend to break less than large ones, and when they do break, are easier to fix
My Workflow
Not perfect by any means
Use Kanban
Develop on my local machine
Get feature, make branch, test, merge, commit
Starting to use Jenkins to do CIphpUnit, phpCodeSniffer
Manually promote code to Production
Rinse, repeat
Any Questions?
Thanks!
Credits
Waterfall Imagehttp://en.wikipedia.org/wiki/Waterfall_model
SCRUM Imagehttp://en.wikipedia.org/wiki/Scrum_%28development%29
Kanban Imagehttp://www.agileproductdesign.com/blog/2009/kanban_over_simplified.html
March 15, 2011
NWO-PUG