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

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 GomegaEddy Reyes
 
Leaning on the two Ts
Leaning on the two TsLeaning on the two Ts
Leaning on the two TsMani Sarkar
 
Funcargs & other fun with pytest
Funcargs & other fun with pytestFuncargs & other fun with pytest
Funcargs & other fun with pytestBrianna Laugher
 
Refactoring Legacy Code
Refactoring Legacy CodeRefactoring Legacy Code
Refactoring Legacy CodeAdam Culp
 
QA 4 python
QA 4 pythonQA 4 python
QA 4 pythonBeDjango
 
Introduction to GoLang
Introduction to GoLangIntroduction to GoLang
Introduction to GoLangNVISIA
 
Mocking in python
Mocking in pythonMocking in python
Mocking in pythonOoblioob
 
TDD with Python and App Engine
TDD with Python and App EngineTDD with Python and App Engine
TDD with Python and App EngineRicardo Bánffy
 
Test Driven Development Methodology and Philosophy
Test Driven Development Methodology and Philosophy Test Driven Development Methodology and Philosophy
Test Driven Development Methodology and Philosophy Vijay Kumbhar
 
Lighning Talk: PHP build process
Lighning Talk: PHP build processLighning Talk: PHP build process
Lighning Talk: PHP build processBryan Agee
 
TDC2016POA | Trilha DevOps - DevOps Anti-Patterns
TDC2016POA | Trilha DevOps - DevOps Anti-PatternsTDC2016POA | Trilha DevOps - DevOps Anti-Patterns
TDC2016POA | Trilha DevOps - DevOps Anti-Patternstdc-globalcode
 
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 2Andrew Yatsenko
 
ES3-2020-P2 Bowling Game Kata
ES3-2020-P2 Bowling Game KataES3-2020-P2 Bowling Game Kata
ES3-2020-P2 Bowling Game KataDavid Rodenas
 
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...Geshan Manandhar
 

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 WorldLorna Mitchell
 
Creating a reasonable project boilerplate
Creating a reasonable project boilerplateCreating a reasonable project boilerplate
Creating a reasonable project boilerplateStanislav Petrov
 
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 stepDaniel Fahlke
 
Best Practices in PHP Application Deployment
Best Practices in PHP Application DeploymentBest Practices in PHP Application Deployment
Best Practices in PHP Application DeploymentShahar Evron
 
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
 
Tooling Matters - Development tools
Tooling Matters - Development toolsTooling Matters - Development tools
Tooling Matters - Development toolsSimon Dittlmann
 
Yet Another Continuous Integration Story
Yet Another Continuous Integration StoryYet Another Continuous Integration Story
Yet Another Continuous Integration StoryAnton Serdyuk
 
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-20Michael Lihs
 
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 ...Max Barrass
 
The Professional Programmer
The Professional ProgrammerThe Professional Programmer
The Professional ProgrammerDave Cross
 
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.Kris Buytaert
 
High Performance Software Engineering Teams
High Performance Software Engineering TeamsHigh Performance Software Engineering Teams
High Performance Software Engineering TeamsLars Thorup
 
Codeception: introduction to php testing
Codeception: introduction to php testingCodeception: introduction to php testing
Codeception: introduction to php testingEngineor
 
Devops Devops Devops, at Froscon
Devops Devops Devops, at FrosconDevops Devops Devops, at Froscon
Devops Devops Devops, at FrosconKris Buytaert
 
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 DevicesDale Lane
 
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 WorkflowAnn Cascarano
 
Automating MySQL operations with Puppet
Automating MySQL operations with PuppetAutomating MySQL operations with Puppet
Automating MySQL operations with PuppetKris Buytaert
 
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?Juan Picado
 

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

Web Services PHP Tutorial
Web Services PHP TutorialWeb Services PHP Tutorial
Web Services PHP TutorialLorna Mitchell
 
Best Practice in API Design
Best Practice in API DesignBest Practice in API Design
Best Practice in API DesignLorna Mitchell
 
Git, GitHub and Open Source
Git, GitHub and Open SourceGit, GitHub and Open Source
Git, GitHub and Open SourceLorna Mitchell
 
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 MoneyLorna Mitchell
 
Things I wish web graduates knew
Things I wish web graduates knewThings I wish web graduates knew
Things I wish web graduates knewLorna Mitchell
 
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)Lorna Mitchell
 
Tool Up Your LAMP Stack
Tool Up Your LAMP StackTool Up Your LAMP Stack
Tool Up Your LAMP StackLorna Mitchell
 
Understanding Distributed Source Control
Understanding Distributed Source ControlUnderstanding Distributed Source Control
Understanding Distributed Source ControlLorna Mitchell
 
Best Practice in Web Service Design
Best Practice in Web Service DesignBest Practice in Web Service Design
Best Practice in Web Service DesignLorna Mitchell
 
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 FishLorna Mitchell
 
Zend Certification Preparation Tutorial
Zend Certification Preparation TutorialZend Certification Preparation Tutorial
Zend Certification Preparation TutorialLorna Mitchell
 
Implementing OAuth with PHP
Implementing OAuth with PHPImplementing OAuth with PHP
Implementing OAuth with PHPLorna Mitchell
 
Object Oriented Programming in PHP
Object Oriented Programming in PHPObject Oriented Programming in PHP
Object Oriented Programming in PHPLorna Mitchell
 
Could You Telecommute?
Could You Telecommute?Could You Telecommute?
Could You Telecommute?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

A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxLoriGlavin3
 
Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...Farhan Tariq
 
Time Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsTime Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsNathaniel Shimoni
 
Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024Hiroshi SHIBATA
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity PlanDatabarracks
 
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxLoriGlavin3
 
Connecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdfConnecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdfNeo4j
 
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxDigital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxLoriGlavin3
 
A Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersA Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersNicole Novielli
 
(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...
(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...
(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...AliaaTarek5
 
[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality Assurance[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality AssuranceInflectra
 
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...Wes McKinney
 
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyesHow to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyesThousandEyes
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.Curtis Poe
 
Potential of AI (Generative AI) in Business: Learnings and Insights
Potential of AI (Generative AI) in Business: Learnings and InsightsPotential of AI (Generative AI) in Business: Learnings and Insights
Potential of AI (Generative AI) in Business: Learnings and InsightsRavi Sanghani
 
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxThe Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxLoriGlavin3
 
Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...
Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...
Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...Scott Andery
 
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24Mark Goldstein
 
What is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfWhat is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfMounikaPolabathina
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteDianaGray10
 

Recently uploaded (20)

A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
 
Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...
 
Time Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsTime Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directions
 
Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity Plan
 
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
 
Connecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdfConnecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdf
 
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxDigital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
 
A Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersA Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software Developers
 
(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...
(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...
(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...
 
[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality Assurance[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality Assurance
 
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
 
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyesHow to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.
 
Potential of AI (Generative AI) in Business: Learnings and Insights
Potential of AI (Generative AI) in Business: Learnings and InsightsPotential of AI (Generative AI) in Business: Learnings and Insights
Potential of AI (Generative AI) in Business: Learnings and Insights
 
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxThe Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
 
Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...
Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...
Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...
 
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
 
What is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfWhat is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdf
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test Suite
 

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