passing the joel test in the php world (phpbnl10)
DESCRIPTION
Talk given at the PHP Benelux conference in Antwerp, examining the points in the Joel Test and looking at how these suggested best practices apply to web development todayTRANSCRIPT
![Page 1: Passing the Joel Test in the PHP World (phpbnl10)](https://reader033.vdocument.in/reader033/viewer/2022060108/554f4319b4c90572088b543e/html5/thumbnails/1.jpg)
Passing the Joel Test in the PHP World
![Page 2: Passing the Joel Test in the PHP World (phpbnl10)](https://reader033.vdocument.in/reader033/viewer/2022060108/554f4319b4c90572088b543e/html5/thumbnails/2.jpg)
Who am I?● Lorna Mitchell● PHP Developer at Ibuildings● Editor at http://techportal.ibuildings.com● Host at DPC 2010● Personal site http://lornajane.net● Twitter: @lornajane
![Page 3: Passing the Joel Test in the PHP World (phpbnl10)](https://reader033.vdocument.in/reader033/viewer/2022060108/554f4319b4c90572088b543e/html5/thumbnails/3.jpg)
Who is Joel?● Joel Spolsky● Founder of Fog Creek Software● Blogs at http://joelonsoftware.com● Author of numerous books, particularly Best
Software Writing● Co-founder of http://stackoverflow.com
![Page 4: Passing the Joel Test in the PHP World (phpbnl10)](https://reader033.vdocument.in/reader033/viewer/2022060108/554f4319b4c90572088b543e/html5/thumbnails/4.jpg)
What is the Joel Test?● 12 questions about your organisation● "... a highly irresponsible, sloppy test to rate the
quality of a software team"● Rule-of-thumb for best practice● How does it apply to PHP?
![Page 5: Passing the Joel Test in the PHP World (phpbnl10)](https://reader033.vdocument.in/reader033/viewer/2022060108/554f4319b4c90572088b543e/html5/thumbnails/5.jpg)
The Joel Test (1-6)● Do you use source control?● Can you make a build in one step?● Do you make daily builds?● Do you have a bug database?● Do you fix bugs before writing new code?● Do you have an up-to-date schedule?
![Page 6: Passing the Joel Test in the PHP World (phpbnl10)](https://reader033.vdocument.in/reader033/viewer/2022060108/554f4319b4c90572088b543e/html5/thumbnails/6.jpg)
The Joel Test (7-12)● Do you have a spec?● Do programmers have quiet working
conditions?● Do you use the best tools money can buy?● Do you have testers?● Do new candidates write code during their
interview?● Do you do hallway usability testing?
![Page 7: Passing the Joel Test in the PHP World (phpbnl10)](https://reader033.vdocument.in/reader033/viewer/2022060108/554f4319b4c90572088b543e/html5/thumbnails/7.jpg)
What is the Joel Test For?● Scoring your current organisation● Improving your current organisation● Scoring your next organisation
http://jobs.joelonsoftware.com
![Page 8: Passing the Joel Test in the PHP World (phpbnl10)](https://reader033.vdocument.in/reader033/viewer/2022060108/554f4319b4c90572088b543e/html5/thumbnails/8.jpg)
![Page 9: Passing the Joel Test in the PHP World (phpbnl10)](https://reader033.vdocument.in/reader033/viewer/2022060108/554f4319b4c90572088b543e/html5/thumbnails/9.jpg)
Source Control● Central storage● Change history● Enables collaboration● Manage multiple versions
![Page 10: Passing the Joel Test in the PHP World (phpbnl10)](https://reader033.vdocument.in/reader033/viewer/2022060108/554f4319b4c90572088b543e/html5/thumbnails/10.jpg)
Source Control Solutions● CVS
● http://www.nongnu.org/cvs/● Subversion (svn)
● http://subversion.tigris.org/● Git
● http://git.or.cz/● Bazaar (bzr)
● http://www.bazaar-vcs.org/
![Page 11: Passing the Joel Test in the PHP World (phpbnl10)](https://reader033.vdocument.in/reader033/viewer/2022060108/554f4319b4c90572088b543e/html5/thumbnails/11.jpg)
Centralised Source Control
userrepo
user
useruser
![Page 12: Passing the Joel Test in the PHP World (phpbnl10)](https://reader033.vdocument.in/reader033/viewer/2022060108/554f4319b4c90572088b543e/html5/thumbnails/12.jpg)
Distributed Source Control
reporepo
reporepo
repo
![Page 13: Passing the Joel Test in the PHP World (phpbnl10)](https://reader033.vdocument.in/reader033/viewer/2022060108/554f4319b4c90572088b543e/html5/thumbnails/13.jpg)
Distributed Source Control● Local machine has repository● Has full history● Commit locally● Commit globally later
![Page 14: Passing the Joel Test in the PHP World (phpbnl10)](https://reader033.vdocument.in/reader033/viewer/2022060108/554f4319b4c90572088b543e/html5/thumbnails/14.jpg)
Recommendations
subversion
Developersusing command lineIDE pluginsgit-svn, bzr-svn bridges
Designersusing TortoiseSVN
Managersusing WebSVN
![Page 15: Passing the Joel Test in the PHP World (phpbnl10)](https://reader033.vdocument.in/reader033/viewer/2022060108/554f4319b4c90572088b543e/html5/thumbnails/15.jpg)
Resources● git-svn
● http://www.kernel.org/pub/software/scm/git/docs/git-svn.html● bzr-svn
● http://bazaar-vcs.org/BzrForeignBranches/Subversion● WebSVN
● http://www.websvn.info/● TortoiseSVN
● http://tortoisesvn.tigris.org/
![Page 16: Passing the Joel Test in the PHP World (phpbnl10)](https://reader033.vdocument.in/reader033/viewer/2022060108/554f4319b4c90572088b543e/html5/thumbnails/16.jpg)
![Page 17: Passing the Joel Test in the PHP World (phpbnl10)](https://reader033.vdocument.in/reader033/viewer/2022060108/554f4319b4c90572088b543e/html5/thumbnails/17.jpg)
![Page 18: Passing the Joel Test in the PHP World (phpbnl10)](https://reader033.vdocument.in/reader033/viewer/2022060108/554f4319b4c90572088b543e/html5/thumbnails/18.jpg)
PHP is Interpreted● So do we care about builds?
![Page 19: Passing the Joel Test in the PHP World (phpbnl10)](https://reader033.vdocument.in/reader033/viewer/2022060108/554f4319b4c90572088b543e/html5/thumbnails/19.jpg)
What's in a Build?● Code compilation● Document generation● Test suite execution and feedback● Packaging● Application deployment
![Page 20: Passing the Joel Test in the PHP World (phpbnl10)](https://reader033.vdocument.in/reader033/viewer/2022060108/554f4319b4c90572088b543e/html5/thumbnails/20.jpg)
Sounds like ...Continuous Integration
and Deployment
![Page 21: Passing the Joel Test in the PHP World (phpbnl10)](https://reader033.vdocument.in/reader033/viewer/2022060108/554f4319b4c90572088b543e/html5/thumbnails/21.jpg)
Deployment● Automated deployment
● upload code● apply database patches● handle uploaded files and existing database● populate caches● switch over to new version
● Automated rollback
![Page 22: Passing the Joel Test in the PHP World (phpbnl10)](https://reader033.vdocument.in/reader033/viewer/2022060108/554f4319b4c90572088b543e/html5/thumbnails/22.jpg)
Continuous Integration● A running process● Responds to commit (and/or hooks)● Performs tasks
● No "forgetting" to run the tests● Gives feedback
![Page 23: Passing the Joel Test in the PHP World (phpbnl10)](https://reader033.vdocument.in/reader033/viewer/2022060108/554f4319b4c90572088b543e/html5/thumbnails/23.jpg)
Continuous Integration
![Page 24: Passing the Joel Test in the PHP World (phpbnl10)](https://reader033.vdocument.in/reader033/viewer/2022060108/554f4319b4c90572088b543e/html5/thumbnails/24.jpg)
Continuous Integration
![Page 25: Passing the Joel Test in the PHP World (phpbnl10)](https://reader033.vdocument.in/reader033/viewer/2022060108/554f4319b4c90572088b543e/html5/thumbnails/25.jpg)
Continuous Integration Solutions● Hudson https://hudson.dev.java.net/● phpUnderControl http://phpundercontrol.org/● Xinc http://sourceforge.net/projects/xinc/
![Page 26: Passing the Joel Test in the PHP World (phpbnl10)](https://reader033.vdocument.in/reader033/viewer/2022060108/554f4319b4c90572088b543e/html5/thumbnails/26.jpg)
● COMPULSORY
![Page 27: Passing the Joel Test in the PHP World (phpbnl10)](https://reader033.vdocument.in/reader033/viewer/2022060108/554f4319b4c90572088b543e/html5/thumbnails/27.jpg)
I have a personal bug tracker
![Page 28: Passing the Joel Test in the PHP World (phpbnl10)](https://reader033.vdocument.in/reader033/viewer/2022060108/554f4319b4c90572088b543e/html5/thumbnails/28.jpg)
Bug Trackers● Capture features/tasks● Who does what?● Progress for each task, keep updated● Can reallocate items
![Page 29: Passing the Joel Test in the PHP World (phpbnl10)](https://reader033.vdocument.in/reader033/viewer/2022060108/554f4319b4c90572088b543e/html5/thumbnails/29.jpg)
Bug Tracker Solutions● Trac http://trac.edgewall.org/● Mantis http://www.mantisbt.org/● Jira http://www.atlassian.com/software/jira/● Eventum http://forge.mysql.com/wiki/Eventum/● RedMine http://www.redmine.org● Arbit http://arbittracker.org● Mtrack http://bitbucket.org/wez/mtrack/
![Page 30: Passing the Joel Test in the PHP World (phpbnl10)](https://reader033.vdocument.in/reader033/viewer/2022060108/554f4319b4c90572088b543e/html5/thumbnails/30.jpg)
![Page 31: Passing the Joel Test in the PHP World (phpbnl10)](https://reader033.vdocument.in/reader033/viewer/2022060108/554f4319b4c90572088b543e/html5/thumbnails/31.jpg)
Joel Says● Keep bugs near to zero● Cannot estimate bug fix time● Minimise unknowns
![Page 32: Passing the Joel Test in the PHP World (phpbnl10)](https://reader033.vdocument.in/reader033/viewer/2022060108/554f4319b4c90572088b543e/html5/thumbnails/32.jpg)
Capturing Bugs● As a minimum, record bug● Buggy behaviour● Expected behaviour● Smallest possible replication case
![Page 33: Passing the Joel Test in the PHP World (phpbnl10)](https://reader033.vdocument.in/reader033/viewer/2022060108/554f4319b4c90572088b543e/html5/thumbnails/33.jpg)
How to Report a Bug● http://www.chiark.greenend.org.uk/~sgtatham/bugs.html
it's not worth reporting that the program generated an error unless you can also report what the error message was.
if a computer does anything unexpected, freeze
Some of the worst bug reports I've ever seen come from programmers
Try to remember as much detail as you can about what you were doing to it when it did fall over, and if you see any patterns, mention them. Anything you can provide has to be some help.
http://tinyurl.com/8vx3s
![Page 34: Passing the Joel Test in the PHP World (phpbnl10)](https://reader033.vdocument.in/reader033/viewer/2022060108/554f4319b4c90572088b543e/html5/thumbnails/34.jpg)
![Page 35: Passing the Joel Test in the PHP World (phpbnl10)](https://reader033.vdocument.in/reader033/viewer/2022060108/554f4319b4c90572088b543e/html5/thumbnails/35.jpg)
![Page 36: Passing the Joel Test in the PHP World (phpbnl10)](https://reader033.vdocument.in/reader033/viewer/2022060108/554f4319b4c90572088b543e/html5/thumbnails/36.jpg)
Scheduling Workflowcollect
requirements
write specification
separate into discrete tasks
estimate task duration
![Page 37: Passing the Joel Test in the PHP World (phpbnl10)](https://reader033.vdocument.in/reader033/viewer/2022060108/554f4319b4c90572088b543e/html5/thumbnails/37.jpg)
Who Estimates?● Ideally the do-er● At least someone who could do it● Never cut estimates
![Page 38: Passing the Joel Test in the PHP World (phpbnl10)](https://reader033.vdocument.in/reader033/viewer/2022060108/554f4319b4c90572088b543e/html5/thumbnails/38.jpg)
Specification● Holds the information needed for each task● May include acceptance criteria● More detail means fewer misunderstandings
● mockups/pictures● form fields
![Page 39: Passing the Joel Test in the PHP World (phpbnl10)](https://reader033.vdocument.in/reader033/viewer/2022060108/554f4319b4c90572088b543e/html5/thumbnails/39.jpg)
Schedule● What each person is doing● When it is due to finish● Can record progress/actions● What is next
![Page 40: Passing the Joel Test in the PHP World (phpbnl10)](https://reader033.vdocument.in/reader033/viewer/2022060108/554f4319b4c90572088b543e/html5/thumbnails/40.jpg)
Agile and Timings● Agile development is reactive● Always on time at start of sprint● Estimates and spec detail can
be prepared per sprint
![Page 41: Passing the Joel Test in the PHP World (phpbnl10)](https://reader033.vdocument.in/reader033/viewer/2022060108/554f4319b4c90572088b543e/html5/thumbnails/41.jpg)
Burndown Charts● List of tasks● Tasks have estimates● Sprint is as many tasks as you have man-hours
![Page 42: Passing the Joel Test in the PHP World (phpbnl10)](https://reader033.vdocument.in/reader033/viewer/2022060108/554f4319b4c90572088b543e/html5/thumbnails/42.jpg)
Burndown Example
![Page 43: Passing the Joel Test in the PHP World (phpbnl10)](https://reader033.vdocument.in/reader033/viewer/2022060108/554f4319b4c90572088b543e/html5/thumbnails/43.jpg)
Burndown Example
Task Est imate Mon Tue Wed ThuAssemble pre-built frame 2 2 2 2 2 2Paint exterior 2 2 2 2 2 2
1 1 1 1 1 1Decorate bedrooms 8 8 8 8 8 8Decorate kitchen 7 7 7 7 7 7Decorate bathroom 5 5 5 5 5 5Decorate reception rooms 7 7 7 7 7 7Fit carpets 5 5 5 5 5 5Add furniture 1 1 1 1 1 1
Fr i
Paint windowframes
![Page 44: Passing the Joel Test in the PHP World (phpbnl10)](https://reader033.vdocument.in/reader033/viewer/2022060108/554f4319b4c90572088b543e/html5/thumbnails/44.jpg)
Burndown Example
![Page 45: Passing the Joel Test in the PHP World (phpbnl10)](https://reader033.vdocument.in/reader033/viewer/2022060108/554f4319b4c90572088b543e/html5/thumbnails/45.jpg)
Burndown Example
Task Est imate Mon Tue Wed ThuAssemble pre-built frame 2 0 0 0 0 0Paint exterior 2 0 0 0 0 0
1 1 1 1 1 1Decorate bedrooms 8 8 8 8 8 8Decorate kitchen 7 5 5 5 5 5Decorate bathroom 5 5 5 5 5 5Decorate reception rooms 7 7 7 7 7 7Fit carpets 5 5 5 5 5 5Add furniture 1 1 1 1 1 1
Fr i
Paint windowframes
![Page 46: Passing the Joel Test in the PHP World (phpbnl10)](https://reader033.vdocument.in/reader033/viewer/2022060108/554f4319b4c90572088b543e/html5/thumbnails/46.jpg)
Burndown Example
![Page 47: Passing the Joel Test in the PHP World (phpbnl10)](https://reader033.vdocument.in/reader033/viewer/2022060108/554f4319b4c90572088b543e/html5/thumbnails/47.jpg)
Burndown Example
![Page 48: Passing the Joel Test in the PHP World (phpbnl10)](https://reader033.vdocument.in/reader033/viewer/2022060108/554f4319b4c90572088b543e/html5/thumbnails/48.jpg)
Burndown Example
![Page 49: Passing the Joel Test in the PHP World (phpbnl10)](https://reader033.vdocument.in/reader033/viewer/2022060108/554f4319b4c90572088b543e/html5/thumbnails/49.jpg)
![Page 50: Passing the Joel Test in the PHP World (phpbnl10)](https://reader033.vdocument.in/reader033/viewer/2022060108/554f4319b4c90572088b543e/html5/thumbnails/50.jpg)
Interruptions
Meetings
Phone
![Page 51: Passing the Joel Test in the PHP World (phpbnl10)](https://reader033.vdocument.in/reader033/viewer/2022060108/554f4319b4c90572088b543e/html5/thumbnails/51.jpg)
![Page 52: Passing the Joel Test in the PHP World (phpbnl10)](https://reader033.vdocument.in/reader033/viewer/2022060108/554f4319b4c90572088b543e/html5/thumbnails/52.jpg)
Tools● Software● Hardware● Resources● All cost money (or time, or effort)
![Page 53: Passing the Joel Test in the PHP World (phpbnl10)](https://reader033.vdocument.in/reader033/viewer/2022060108/554f4319b4c90572088b543e/html5/thumbnails/53.jpg)
Software● IDE
● Zend Studio● Visual Studio● many free alternatives
● Graphics● Photoshop● Paint Shop Pro● free alternatives
![Page 54: Passing the Joel Test in the PHP World (phpbnl10)](https://reader033.vdocument.in/reader033/viewer/2022060108/554f4319b4c90572088b543e/html5/thumbnails/54.jpg)
Hardware
![Page 55: Passing the Joel Test in the PHP World (phpbnl10)](https://reader033.vdocument.in/reader033/viewer/2022060108/554f4319b4c90572088b543e/html5/thumbnails/55.jpg)
![Page 56: Passing the Joel Test in the PHP World (phpbnl10)](https://reader033.vdocument.in/reader033/viewer/2022060108/554f4319b4c90572088b543e/html5/thumbnails/56.jpg)
![Page 57: Passing the Joel Test in the PHP World (phpbnl10)](https://reader033.vdocument.in/reader033/viewer/2022060108/554f4319b4c90572088b543e/html5/thumbnails/57.jpg)
![Page 58: Passing the Joel Test in the PHP World (phpbnl10)](https://reader033.vdocument.in/reader033/viewer/2022060108/554f4319b4c90572088b543e/html5/thumbnails/58.jpg)
![Page 59: Passing the Joel Test in the PHP World (phpbnl10)](https://reader033.vdocument.in/reader033/viewer/2022060108/554f4319b4c90572088b543e/html5/thumbnails/59.jpg)
Resources● Magazines
● php|architect● Site memberships
● Experts' Exchange (pay per question)● Safari
● Books● Conferences/Events
![Page 60: Passing the Joel Test in the PHP World (phpbnl10)](https://reader033.vdocument.in/reader033/viewer/2022060108/554f4319b4c90572088b543e/html5/thumbnails/60.jpg)
![Page 61: Passing the Joel Test in the PHP World (phpbnl10)](https://reader033.vdocument.in/reader033/viewer/2022060108/554f4319b4c90572088b543e/html5/thumbnails/61.jpg)
Assessing Candidate Code● During interview● As part of recruitment process● Ibuildings uses this● The coding task makes a big impression on the
candidate
![Page 62: Passing the Joel Test in the PHP World (phpbnl10)](https://reader033.vdocument.in/reader033/viewer/2022060108/554f4319b4c90572088b543e/html5/thumbnails/62.jpg)
![Page 63: Passing the Joel Test in the PHP World (phpbnl10)](https://reader033.vdocument.in/reader033/viewer/2022060108/554f4319b4c90572088b543e/html5/thumbnails/63.jpg)
![Page 64: Passing the Joel Test in the PHP World (phpbnl10)](https://reader033.vdocument.in/reader033/viewer/2022060108/554f4319b4c90572088b543e/html5/thumbnails/64.jpg)
Testers are not developers
Developers are not testers
![Page 65: Passing the Joel Test in the PHP World (phpbnl10)](https://reader033.vdocument.in/reader033/viewer/2022060108/554f4319b4c90572088b543e/html5/thumbnails/65.jpg)
Tools for Testing in PHP● Unit Testing
● PHPUnit http://phpunit.de● SimpleTest http://simpletest.org● phpt http://qa.php.net/write-test.php
● Browser Testing● Selenium http://seleniumhq.org/
![Page 66: Passing the Joel Test in the PHP World (phpbnl10)](https://reader033.vdocument.in/reader033/viewer/2022060108/554f4319b4c90572088b543e/html5/thumbnails/66.jpg)
That was the Joel Test... what's missing?
![Page 67: Passing the Joel Test in the PHP World (phpbnl10)](https://reader033.vdocument.in/reader033/viewer/2022060108/554f4319b4c90572088b543e/html5/thumbnails/67.jpg)
Do you use test-driven development?
![Page 68: Passing the Joel Test in the PHP World (phpbnl10)](https://reader033.vdocument.in/reader033/viewer/2022060108/554f4319b4c90572088b543e/html5/thumbnails/68.jpg)
Do you avoid reinventing the wheel?
![Page 69: Passing the Joel Test in the PHP World (phpbnl10)](https://reader033.vdocument.in/reader033/viewer/2022060108/554f4319b4c90572088b543e/html5/thumbnails/69.jpg)
Do you support the professional development
of your employees?
![Page 70: Passing the Joel Test in the PHP World (phpbnl10)](https://reader033.vdocument.in/reader033/viewer/2022060108/554f4319b4c90572088b543e/html5/thumbnails/70.jpg)
And?