SlideShare a Scribd company logo
1 of 71
Download to read offline
Passing the Joel Test
      in the PHP World


               
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
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
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?
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?
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?
What is the Joel Test For?
●
    Scoring your current organisation
●
    Improving your current organisation
●
    Scoring your next organisation




                 http://jobs.joelonsoftware.com
     
Source Control
●
    Central storage
●
    Change history
●
    Enables collaboration
●
    Manage multiple versions
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/
Centralised Source Control


           repo
                         user


 user
                        user
           user
Distributed Source Control


            repo
                         repo


 repo
                        repo
           repo
Distributed Source Control
●
    Local machine has repository
●
    Has full history
●
    Commit locally
●
    Commit globally later
Recommendations

                     subversion




Designers                                      Managers
using TortoiseSVN                              using WebSVN
                    Developers
                    using command line
                    IDE plugins
                    git-svn, bzr-svn bridges
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/
     
     
PHP is Interpreted
●
    So do we care about builds?
What's in a Build?
●
    Code compilation
●
    Document generation
●
    Test suite execution and feedback
●
    Packaging
●
    Application deployment
Sounds like ...
    Continuous Integration
       and Deployment

                
Deployment
●
    Automated deployment
    ●
        upload code
    ●
        apply database patches
    ●
        handle uploaded files and existing database
    ●
        populate caches
    ●
        switch over to new version
●
    Automated rollback
Continuous Integration
●
    A running process
●
    Responds to commit (and/or hooks)
●
    Performs tasks
    ●
        No "forgetting" to run the tests
●
    Gives feedback
Continuous Integration
Continuous Integration
Continuous Integration Solutions
●
    Hudson https://hudson.dev.java.net/
●
    phpUnderControl http://phpundercontrol.org/
●
    Xinc http://sourceforge.net/projects/xinc/
●   COMPULSORY




                      
I have a personal bug tracker
Bug Trackers
●
    Capture features/tasks
●
    Who does what?
●
    Progress for each task, keep updated
●
    Can reallocate items
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/
     
Joel Says
●
    Keep bugs near to zero
●
    Cannot estimate bug fix time
●
    Minimise unknowns
Capturing Bugs
●
    As a minimum, record bug
●
    Buggy behaviour
●
    Expected behaviour
●
    Smallest possible replication case
How to Report a Bug
                                      http://tinyurl.com/8vx3s
  ●
      http://www.chiark.greenend.org.uk/~sgtatham/bugs.html
                     if a computer does anything unexpected, freeze


                                       Try to remember as much detail as

it's not worth reporting that the      you can about what you were doing to

program generated an error             it when it did fall over, and if you see

unless you can also report what        any patterns, mention them. Anything

the error message was.                 you can provide has to be some help.


             Some of the worst bug reports I've ever
             seen come from programmers
     
     
Scheduling Workflow

   collect
requirements



    write       separate into
specification   discrete tasks



                estimate task
                  duration
Who Estimates?
●
    Ideally the do-er
●
    At least someone who could do it
●
    Never cut estimates
Specification
●
    Holds the information needed for each task
●
    May include acceptance criteria
●
    More detail means fewer misunderstandings
    ●
        mockups/pictures
    ●
        form fields
Schedule
●
    What each person is doing
●
    When it is due to finish
●
    Can record progress/actions
●
    What is next
Agile and Timings
●
    Agile development is reactive
●
    Always on time at start of sprint
●
    Estimates and spec detail can
    be prepared per sprint
Burndown Charts
●
    List of tasks
●
    Tasks have estimates
●
    Sprint is as many tasks as you have man-hours
Burndown Example
Burndown Example


Task                       Est im at e M on Tue Wed Thu Fr i
Assemble pre-built frame          2     2    2    2    2       2
Paint exterior                    2     2    2    2    2       2
Paint windowframes                1     1    1    1    1       1
Decorate bedrooms                 8     8    8    8    8       8
Decorate kitchen                  7     7    7    7    7       7
Decorate bathroom                 5     5    5    5    5       5
Decorate reception rooms          7     7    7    7    7       7
Fit carpets                       5     5    5    5    5       5
Add furniture                     1     1    1    1    1       1
Burndown Example
Burndown Example


Task                       Est im at e M on Tue Wed Thu Fr i
Assemble pre-built frame          2     0    0    0    0       0
Paint exterior                    2     0    0    0    0       0
Paint windowframes                1     1    1    1    1       1
Decorate bedrooms                 8     8    8    8    8       8
Decorate kitchen                  7     5    5    5    5       5
Decorate bathroom                 5     5    5    5    5       5
Decorate reception rooms          7     7    7    7    7       7
Fit carpets                       5     5    5    5    5       5
Add furniture                     1     1    1    1    1       1
Burndown Example
Burndown Example
Burndown Example
     
Interruptions



     Meetings



                Email


      Phone
     
Tools
●
    Software
●
    Hardware
●
    Resources
●
    All cost money (or time, or effort)
Software
●
    IDE
    ●
        Zend Studio
    ●
        Visual Studio
    ●
        many free alternatives
●
    Graphics
    ●
        Photoshop
    ●
        Paint Shop Pro
    ●
        free alternatives
Hardware



        
     
     
     
Resources
●
    Magazines
    ●
        php|architect
●
    Site memberships
    ●
        Experts' Exchange (pay per question)
    ●
        Safari
●
    Books
●
    Conferences/Events
     
Assessing Candidate Code
●
    During interview
●
    As part of recruitment process
●
    Ibuildings uses this
●
    The coding task makes a big impression on the
    candidate
     
     
Testers are not
     developers


            Developers are not
                      testers
                   
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/
That was the Joel Test
      ... what's missing?


                
Do you use test-driven
        development?


               
Do you avoid reinventing
          the wheel?


                
Do you support the
    professional development
      of your employees?

                
And?
?
              Questions?

http://joind.in/1249

                        

More Related Content

What's hot

Lighning Talk: PHP build process
Lighning Talk: PHP build processLighning Talk: PHP build process
Lighning Talk: PHP build process
Bryan Agee
 

What's hot (20)

User story workflow (eng)
User story workflow (eng)User story workflow (eng)
User story workflow (eng)
 
TDD in Go with Ginkgo and Gomega
TDD in Go with Ginkgo and GomegaTDD in Go with Ginkgo and Gomega
TDD in Go with Ginkgo and Gomega
 
Tdd presentation
Tdd presentationTdd presentation
Tdd presentation
 
Git sourcecontrolpreso
Git sourcecontrolpresoGit sourcecontrolpreso
Git sourcecontrolpreso
 
Gamedev-grade debugging
Gamedev-grade debuggingGamedev-grade debugging
Gamedev-grade debugging
 
Leaning on the two Ts
Leaning on the two TsLeaning on the two Ts
Leaning on the two Ts
 
Funcargs & other fun with pytest
Funcargs & other fun with pytestFuncargs & other fun with pytest
Funcargs & other fun with pytest
 
Refactoring Legacy Code
Refactoring Legacy CodeRefactoring Legacy Code
Refactoring Legacy Code
 
QA 4 python
QA 4 pythonQA 4 python
QA 4 python
 
Introduction to GoLang
Introduction to GoLangIntroduction to GoLang
Introduction to GoLang
 
Mocking in python
Mocking in pythonMocking in python
Mocking in python
 
TDD with Python and App Engine
TDD with Python and App EngineTDD with Python and App Engine
TDD with Python and App Engine
 
Test Driven Development Methodology and Philosophy
Test Driven Development Methodology and Philosophy Test Driven Development Methodology and Philosophy
Test Driven Development Methodology and Philosophy
 
Making Strongly-typed NETCONF Usable
Making Strongly-typed NETCONF UsableMaking Strongly-typed NETCONF Usable
Making Strongly-typed NETCONF Usable
 
Lighning Talk: PHP build process
Lighning Talk: PHP build processLighning Talk: PHP build process
Lighning Talk: PHP build process
 
Neo4j Graph Database, from PHP
Neo4j Graph Database, from PHPNeo4j Graph Database, from PHP
Neo4j Graph Database, from PHP
 
TDC2016POA | Trilha DevOps - DevOps Anti-Patterns
TDC2016POA | Trilha DevOps - DevOps Anti-PatternsTDC2016POA | Trilha DevOps - DevOps Anti-Patterns
TDC2016POA | Trilha DevOps - DevOps Anti-Patterns
 
Performance profiling and testing of symfony application 2
Performance profiling and testing of symfony application 2Performance profiling and testing of symfony application 2
Performance profiling and testing of symfony application 2
 
ES3-2020-P2 Bowling Game Kata
ES3-2020-P2 Bowling Game KataES3-2020-P2 Bowling Game Kata
ES3-2020-P2 Bowling Game Kata
 
Do You Git Your Code? Follow Simplified Gitflow Branching Model to Improve Pr...
Do You Git Your Code? Follow Simplified Gitflow Branching Model to Improve Pr...Do You Git Your Code? Follow Simplified Gitflow Branching Model to Improve Pr...
Do You Git Your Code? Follow Simplified Gitflow Branching Model to Improve Pr...
 

Similar to Passing the Joel Test in the PHP World (phpbnl10)

Passing The Joel Test In The PHP World
Passing The Joel Test In The PHP WorldPassing The Joel Test In The PHP World
Passing The Joel Test In The PHP World
Lorna Mitchell
 
RandomTest - Random Software Integration Tests That Just Work for C/C++, Java...
RandomTest - Random Software Integration Tests That Just Work for C/C++, Java...RandomTest - Random Software Integration Tests That Just Work for C/C++, Java...
RandomTest - Random Software Integration Tests That Just Work for C/C++, Java...
dcieslak
 
Debugging Web Apps on Real Mobile Devices
Debugging Web Apps on Real Mobile DevicesDebugging Web Apps on Real Mobile Devices
Debugging Web Apps on Real Mobile Devices
Dale Lane
 

Similar to Passing the Joel Test in the PHP World (phpbnl10) (20)

UPC Plone Testing Talk
UPC Plone Testing TalkUPC Plone Testing Talk
UPC Plone Testing Talk
 
Passing The Joel Test In The PHP World
Passing The Joel Test In The PHP WorldPassing The Joel Test In The PHP World
Passing The Joel Test In The PHP World
 
Creating a reasonable project boilerplate
Creating a reasonable project boilerplateCreating a reasonable project boilerplate
Creating a reasonable project boilerplate
 
Improve the deployment process step by step
Improve the deployment process step by stepImprove the deployment process step by step
Improve the deployment process step by step
 
Best Practices in PHP Application Deployment
Best Practices in PHP Application DeploymentBest Practices in PHP Application Deployment
Best Practices in PHP Application Deployment
 
RandomTest - Random Software Integration Tests That Just Work for C/C++, Java...
RandomTest - Random Software Integration Tests That Just Work for C/C++, Java...RandomTest - Random Software Integration Tests That Just Work for C/C++, Java...
RandomTest - Random Software Integration Tests That Just Work for C/C++, Java...
 
Tooling Matters - Development tools
Tooling Matters - Development toolsTooling Matters - Development tools
Tooling Matters - Development tools
 
Yet Another Continuous Integration Story
Yet Another Continuous Integration StoryYet Another Continuous Integration Story
Yet Another Continuous Integration Story
 
Continuous Integration with Open Source Tools - PHPUgFfm 2014-11-20
Continuous Integration with Open Source Tools - PHPUgFfm 2014-11-20Continuous Integration with Open Source Tools - PHPUgFfm 2014-11-20
Continuous Integration with Open Source Tools - PHPUgFfm 2014-11-20
 
How to establish ways of working that allows shifting-left of the automation ...
How to establish ways of working that allows shifting-left of the automation ...How to establish ways of working that allows shifting-left of the automation ...
How to establish ways of working that allows shifting-left of the automation ...
 
The Professional Programmer
The Professional ProgrammerThe Professional Programmer
The Professional Programmer
 
Devops, the future is here, it's just not evenly distributed yet.
Devops, the future is here, it's just not evenly distributed yet.Devops, the future is here, it's just not evenly distributed yet.
Devops, the future is here, it's just not evenly distributed yet.
 
High Performance Software Engineering Teams
High Performance Software Engineering TeamsHigh Performance Software Engineering Teams
High Performance Software Engineering Teams
 
Debugging 2013- Lars pedersen
Debugging 2013- Lars pedersenDebugging 2013- Lars pedersen
Debugging 2013- Lars pedersen
 
Codeception: introduction to php testing
Codeception: introduction to php testingCodeception: introduction to php testing
Codeception: introduction to php testing
 
Devops Devops Devops, at Froscon
Devops Devops Devops, at FrosconDevops Devops Devops, at Froscon
Devops Devops Devops, at Froscon
 
Debugging Web Apps on Real Mobile Devices
Debugging Web Apps on Real Mobile DevicesDebugging Web Apps on Real Mobile Devices
Debugging Web Apps on Real Mobile Devices
 
Go with the Flow - A Guide to a WordPress Workflow
Go with the Flow - A Guide to a WordPress WorkflowGo with the Flow - A Guide to a WordPress Workflow
Go with the Flow - A Guide to a WordPress Workflow
 
Automating MySQL operations with Puppet
Automating MySQL operations with PuppetAutomating MySQL operations with Puppet
Automating MySQL operations with Puppet
 
What can possibly go wrong if i dont e2 e test my packages?
What can possibly go wrong if i dont e2 e test my packages?What can possibly go wrong if i dont e2 e test my packages?
What can possibly go wrong if i dont e2 e test my packages?
 

More from Lorna Mitchell

Understanding Distributed Source Control
Understanding Distributed Source ControlUnderstanding Distributed Source Control
Understanding Distributed Source Control
Lorna Mitchell
 

More from Lorna Mitchell (20)

OAuth: Trust Issues
OAuth: Trust IssuesOAuth: Trust Issues
OAuth: Trust Issues
 
Web Services PHP Tutorial
Web Services PHP TutorialWeb Services PHP Tutorial
Web Services PHP Tutorial
 
Best Practice in API Design
Best Practice in API DesignBest Practice in API Design
Best Practice in API Design
 
Git, GitHub and Open Source
Git, GitHub and Open SourceGit, GitHub and Open Source
Git, GitHub and Open Source
 
Business 101 for Developers: Time and Money
Business 101 for Developers: Time and MoneyBusiness 101 for Developers: Time and Money
Business 101 for Developers: Time and Money
 
Things I wish web graduates knew
Things I wish web graduates knewThings I wish web graduates knew
Things I wish web graduates knew
 
Teach a Man To Fish (phpconpl edition)
Teach a Man To Fish (phpconpl edition)Teach a Man To Fish (phpconpl edition)
Teach a Man To Fish (phpconpl edition)
 
Web services tutorial
Web services tutorialWeb services tutorial
Web services tutorial
 
Join In With Joind.In
Join In With Joind.InJoin In With Joind.In
Join In With Joind.In
 
Tool Up Your LAMP Stack
Tool Up Your LAMP StackTool Up Your LAMP Stack
Tool Up Your LAMP Stack
 
Going Freelance
Going FreelanceGoing Freelance
Going Freelance
 
Understanding Distributed Source Control
Understanding Distributed Source ControlUnderstanding Distributed Source Control
Understanding Distributed Source Control
 
Best Practice in Web Service Design
Best Practice in Web Service DesignBest Practice in Web Service Design
Best Practice in Web Service Design
 
Coaching Development Teams: Teach A Man To Fish
Coaching Development Teams: Teach A Man To FishCoaching Development Teams: Teach A Man To Fish
Coaching Development Teams: Teach A Man To Fish
 
Zend Certification Preparation Tutorial
Zend Certification Preparation TutorialZend Certification Preparation Tutorial
Zend Certification Preparation Tutorial
 
Implementing OAuth with PHP
Implementing OAuth with PHPImplementing OAuth with PHP
Implementing OAuth with PHP
 
Web Services Tutorial
Web Services TutorialWeb Services Tutorial
Web Services Tutorial
 
Object Oriented Programming in PHP
Object Oriented Programming in PHPObject Oriented Programming in PHP
Object Oriented Programming in PHP
 
Example Presentation
Example PresentationExample Presentation
Example Presentation
 
Could You Telecommute?
Could You Telecommute?Could You Telecommute?
Could You Telecommute?
 

Recently uploaded

IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
Enterprise Knowledge
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
giselly40
 

Recently uploaded (20)

The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slides
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 

Passing the Joel Test in the PHP World (phpbnl10)

  • 1. Passing the Joel Test in the PHP World    
  • 2. 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
  • 3. 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
  • 4. 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?
  • 5. 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?
  • 6. 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?
  • 7. What is the Joel Test For? ● Scoring your current organisation ● Improving your current organisation ● Scoring your next organisation http://jobs.joelonsoftware.com
  • 8.    
  • 9. Source Control ● Central storage ● Change history ● Enables collaboration ● Manage multiple versions
  • 10. 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/
  • 11. Centralised Source Control repo user user user user
  • 12. Distributed Source Control repo repo repo repo repo
  • 13. Distributed Source Control ● Local machine has repository ● Has full history ● Commit locally ● Commit globally later
  • 14. Recommendations subversion Designers Managers using TortoiseSVN using WebSVN Developers using command line IDE plugins git-svn, bzr-svn bridges
  • 15. 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/
  • 16.    
  • 17.    
  • 18. PHP is Interpreted ● So do we care about builds?
  • 19. What's in a Build? ● Code compilation ● Document generation ● Test suite execution and feedback ● Packaging ● Application deployment
  • 20. Sounds like ... Continuous Integration and Deployment    
  • 21. Deployment ● Automated deployment ● upload code ● apply database patches ● handle uploaded files and existing database ● populate caches ● switch over to new version ● Automated rollback
  • 22. Continuous Integration ● A running process ● Responds to commit (and/or hooks) ● Performs tasks ● No "forgetting" to run the tests ● Gives feedback
  • 25. Continuous Integration Solutions ● Hudson https://hudson.dev.java.net/ ● phpUnderControl http://phpundercontrol.org/ ● Xinc http://sourceforge.net/projects/xinc/
  • 26. COMPULSORY    
  • 27. I have a personal bug tracker
  • 28. Bug Trackers ● Capture features/tasks ● Who does what? ● Progress for each task, keep updated ● Can reallocate items
  • 29. 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/
  • 30.    
  • 31. Joel Says ● Keep bugs near to zero ● Cannot estimate bug fix time ● Minimise unknowns
  • 32. Capturing Bugs ● As a minimum, record bug ● Buggy behaviour ● Expected behaviour ● Smallest possible replication case
  • 33. How to Report a Bug http://tinyurl.com/8vx3s ● http://www.chiark.greenend.org.uk/~sgtatham/bugs.html if a computer does anything unexpected, freeze Try to remember as much detail as it's not worth reporting that the you can about what you were doing to program generated an error it when it did fall over, and if you see unless you can also report what any patterns, mention them. Anything the error message was. you can provide has to be some help. Some of the worst bug reports I've ever seen come from programmers
  • 34.    
  • 35.    
  • 36. Scheduling Workflow collect requirements write separate into specification discrete tasks estimate task duration
  • 37. Who Estimates? ● Ideally the do-er ● At least someone who could do it ● Never cut estimates
  • 38. Specification ● Holds the information needed for each task ● May include acceptance criteria ● More detail means fewer misunderstandings ● mockups/pictures ● form fields
  • 39. Schedule ● What each person is doing ● When it is due to finish ● Can record progress/actions ● What is next
  • 40. Agile and Timings ● Agile development is reactive ● Always on time at start of sprint ● Estimates and spec detail can be prepared per sprint
  • 41. Burndown Charts ● List of tasks ● Tasks have estimates ● Sprint is as many tasks as you have man-hours
  • 43. Burndown Example Task Est im at e M on Tue Wed Thu Fr i Assemble pre-built frame 2 2 2 2 2 2 Paint exterior 2 2 2 2 2 2 Paint windowframes 1 1 1 1 1 1 Decorate bedrooms 8 8 8 8 8 8 Decorate kitchen 7 7 7 7 7 7 Decorate bathroom 5 5 5 5 5 5 Decorate reception rooms 7 7 7 7 7 7 Fit carpets 5 5 5 5 5 5 Add furniture 1 1 1 1 1 1
  • 45. Burndown Example Task Est im at e M on Tue Wed Thu Fr i Assemble pre-built frame 2 0 0 0 0 0 Paint exterior 2 0 0 0 0 0 Paint windowframes 1 1 1 1 1 1 Decorate bedrooms 8 8 8 8 8 8 Decorate kitchen 7 5 5 5 5 5 Decorate bathroom 5 5 5 5 5 5 Decorate reception rooms 7 7 7 7 7 7 Fit carpets 5 5 5 5 5 5 Add furniture 1 1 1 1 1 1
  • 49.    
  • 50. Interruptions Meetings Email Phone
  • 51.    
  • 52. Tools ● Software ● Hardware ● Resources ● All cost money (or time, or effort)
  • 53. Software ● IDE ● Zend Studio ● Visual Studio ● many free alternatives ● Graphics ● Photoshop ● Paint Shop Pro ● free alternatives
  • 55.    
  • 56.    
  • 57.    
  • 58.
  • 59. Resources ● Magazines ● php|architect ● Site memberships ● Experts' Exchange (pay per question) ● Safari ● Books ● Conferences/Events
  • 60.    
  • 61. Assessing Candidate Code ● During interview ● As part of recruitment process ● Ibuildings uses this ● The coding task makes a big impression on the candidate
  • 62.    
  • 63.    
  • 64. Testers are not developers Developers are not testers    
  • 65. 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/
  • 66. That was the Joel Test ... what's missing?    
  • 67. Do you use test-driven development?    
  • 68. Do you avoid reinventing the wheel?    
  • 69. Do you support the professional development of your employees?    
  • 70. And?
  • 71. ? Questions? http://joind.in/1249