Processes, Tools, & Best Practices My Background • Lexmark Software Development for 15 years (‘93 – ‘08) – Multi-tier Java application servers – Window s printer drivers – Windows applications – Java, C, C++, Visual Basic, Perl, PHP • IBM co-op in Raleigh, NC for 2 semesters (’91 & ‘92) – OS/2 Network Manager Installer • Siemens co-op in Orlando, FL for 2 semesters (‘89) – System testing of telecom switching systems Project Development Process Generally 2 camps at Lexmark: 1. Waterfall (old school) • Greatly depends on getting all of the requirements up front. • Large chunks of separate work (design docs, dev., test, …) • Test and customers come late in the process. • The process is not designed around change. 2. Iterative (agile) • Light requirements (stories) and documentation. • Small chunks of work. (light docs., small dev., small test.) • Test and customer/stakeholder are part of the process. • The process is designed around change. Waterfall Development Activities: Time: Phases: Gates: -Business Need -Deliverables -Scope -Success Criteria -Scope -Milestone schedule -Risks -Team Few days A week or two Definition Need for Project Met -Execute -Monitor -Adjust Weeks to years Planning Charter Approved -Gather feedback -Analyze project -Improve A week Production Termination Project Plan Approved Deliverables Approved Closeout Report Approved Production Phases : High-level Software Design Low-level Software & Test Design High-level Gates: Design Approved Software & Test Implementation Low-level Design Approved Integration & Rollout Rollout Readines s Review Test/PTR Full Function Acceptance Project Under Change Management Iterative Development Activities: Time: Phases: Gates: -Business Need -Deliverables -Scope -Success Criteria -Scope -Milestone schedule -Risks -Team Few days A week or two Definition Need for Project Met Planning Charter Approved -Execute -Monitor -Adjust Weeks to years Production Project Plan Approved -Gather feedback -Analyze project -Improve A week Termination Deliverables Approved Closeout Report Approved Project Prerequisites • Before getting too far into a project, the team needs to buy into and adopt a common set of best practices: – terminology – general process layout – coding standards that are automatically enforced by IDEs – automated tests & certain code coverage are required – communication methods (IM, Twiki, doc. templates, …) Requirements Gathering • Requirement sources: – Customers (world wide, US, local; technical and non-tech.) – Marketing (customer and business needs) – Development and Test (technical needs) • Found it best to focus on a few customers first • Tools – sticky notes – web applications (Trac, Redline, Telelogic) – spreadsheets and/or Word docs. (user stories to heavy specs.) – TWiki pages Iteration Planning • Include everyone (dev., test, project management, marketing, etc.). • Break work up into small deliverables so customer(s) can be engaged for early feedback. – can be discovery work, prototyping, tools dev., code reviews, product units, etc. • Size the deliverables by flash cards in the group • Light/flexible documentation of planning on – TWiki web pages …or – spreadsheet …or – MS Project Development/Test/Release • Code Repository (Subversion) • Development IDE (Eclipse, MS DevStudio, …) • Continual Build System (CruiseControl, Rational Suite, …) • Automated Testing – Unit Testing (JUnit, CUnit, etc.) – Integration Testing (JUnit) – Acceptance Testing (JUnit) • Problem Tracking System (TeamTrack, Rational Suite) • Quick, light weight, communications & documentation tools (Twiki, web forum app., IM, etc.) • Stress and Stability Test Environment Development/Test/Release (cont.) • Need many PCs for dev., test, and support – many OSs to support • • • • • • • • • • • Win9x Win2K WinXP 2003 Server Vista 2008 Server Mac Linux … different service pack levels … 32-bit, 64-bit … many languages - FIGSBP, Chinese Trad., Chinese Simp., Japanese, Korean, …) – tool: using virtual machines more and more References • Agile Estimating and Planning – by Mike Cohn • Lean Software Development: An Agile Toolkit – by Mary Poppendieck and Tom Poppendieck • Interface Oriented Design: With Patterns – by Ken Pugh • Test-Driven Development: A Practical Guide – by David Astels • Design Patterns: Elements of Reusable Object-Oriented Software (a.k.a. Gang-of-Four Book) – by Erich Gamma, Richard Helm, Ralph Johnson, and John M. Vlissides • Refactoring: Improving the Design of Existing Code – by Martin Fowler, Kent Beck, John Brant, and William Opdyke Questions ?