1. Why Php
    1. Extreme Simplicity
    2. Easy to learn
    3. Versatile
    4. Cheap
  2. Step1 - The Team
    1. Be a software engineer
    2. Train your skills
    3. Study OO principles
    4. Consider Zend certification
  3. Step2 - Requirements
    1. Customer's communication
    2. Functional Design
      1. Requirement Definition
      2. Interaction Design / Wireframes
      3. Flow diagrams
  4. Step3 - Architecture
    1. Don't just start stacking the bricks
    2. Create an architecture first
    3. Technical Design
      1. Modelling
        1. Class diagrams
        2. ER diagram (data model)
        3. Colaboration diagrams
        4. Use cases
        5. etc.
      2. Tools: UML, whiteboards
    4. High Level Architectures
      1. MVC (Model View Controller
      2. SOA (Service Oriented Architecture
      3. Multi-tier development (Frontend, Application, Data)
      4. CBD (Component Based Development
  5. Step4 - Tools
    1. Development
      1. Eclipse (PDT)
      2. PhpED
      3. Vim
      4. Zend Studio
    2. IDE's vs Editors
      1. Debugging
      2. Profiling
      3. Navigation / cross references
      4. Inspection
    3. Source Control
      1. CVS / SVN
      2. BitKeeper / GIT
      3. Branching
      4. Tagging
  6. Step5 - Foundation
    1. Start with a foundation
    2. Use a framework
      1. Provides guidelines (frame)
      2. Off the shelf components
    3. Examples
      1. Zend Framework
      2. CakePHP
      3. ezComponents
      4. Symfony
      5. ATK
    4. The "Not Invented Here" Syndrome
      1. The existing frameworks are no good.
      2. This framework is no good.
      3. This framework is too big.
      4. I know there's a good framework.
  7. Step6 - Design Patterns
    1. A 'window' is a concept
      1. Best practice way of solving a particular problem
    2. In IT, we call this a 'design pattern'
    3. Popular patterns in PHP:
      1. MVC, Factory, Singleton, Registry, Decorator
    4. Good read:
      1. php|architect's Guide to PHP Design Patterns - Jason E. Sweat
  8. Step7 - Testing
    1. Various types of testing
      1. Developer testing
      2. Functional testing
      3. Environment testing
      4. Performance testing
      5. Usability testing
    2. Soution: Unit Tests
      1. Automated testing after each change
      2. Prevent regressions
    3. Testing for PHP applications:
      1. PHPUnit
      2. SimpleTest
    4. Continuous Integration:
      1. Xinc
    5. Test Driven Development
      1. 1. Define functionality
      2. 2. Create testcase
      3. 3. Run test -> test fails
      4. 4. Implement functionality
        1. Test succeds? Done
        2. Test fails? Refactor
      5. Repeat step 4 until finished
  9. Step8 - Optimization
    1. Accelerators for PHP:
      1. eAccelerator
      2. APC
      3. Zend Platform
    2. PHP Caching solutions:
      1. Zend_Cache
      2. Smarty
      3. Zend Platform
      4. Memcached
  10. Step9 - Deployment
    1. Lifecycle:
      1. Develop
      2. Test
      3. Deploy to acceptance test environment
      4. Deploy to live
    2. Use SVN
    3. Code is just a part, don't forget the database
    4. Create a 'Deployment & Release Profile'
    5. System Architecture - LAMP
      1. Linux
      2. Apache
      3. MySQL
      4. PHP
    6. System Architecture
      1. Hgh Availability, Horizontally Scalable architecture
  11. Step 10 - Operations
    1. Monitoring
      1. Logfiles
      2. Monitor infrastructure (tools such as Nagios)
      3. Monitor application (tools such as Zend Platform)
      4. Monitor business (is the money still pouring in?)
    2. Debugging
      1. Solution
        1. A 'root cause analysis' tool
    3. Change management
      1. Ticket system
      2. Stick to your deployment - use the DRP
      3. DON'T TOUCH THE LIVE ENVIRONMENT.
    4. No 'cowboy coding', but structured steps
      1. Higher quality
      2. Software will be easier to maintain (and cheaper)
    5. Development methodology
      1. Waterfall
      2. Agile (DSDM, XP, Scrum)
    6. Software Development Life Cycle (SDLC)
      1. Adapt from existing methods, learn from experts
      2. Document it properly
      3. Make it the cornerstone of your development efforts
  12. More things to thing about?
    1. Developmetn
    2. Implementation
    3. Documents
    4. Security