Sustainable SW Development
description
Transcript of Sustainable SW Development
PMO PMO
Sam Hwang Sam Hwang
Mar 2010Mar 2010
• The cost of change stays low over time• The team is able to respond to changing requirement and changes to the software’s ecosystem• Key indicators of sustainable development are an ability to keep the number of defects relatively constant over time while recognizing that the software must be modified to keep the cost of change under control
Time Time Time
Time Time Time
Working Harder
Working Smarter
Actual Performance Effort Capability
Actual Performance Effort Capability
=
X
X
=
• The cost of change is increasing constantly• The usual evidence of a high cost of change is a constantly increasing number of defects• Each change adds complexity and uncovers or causes defeats that require more changes, and this complexity leads to a declining ability to respond to customer requests and changes to the ecosystem
Project Stresses Project Controls
User Requirements
External Dependencies
Competition
Disruptive Technologies
Disruptive Business Models
Cost Management
Collaboration
Methodology
Expertise
Decision Making
Leadership
Culture
Simplicity
• A User need and vision so it is clear what is being built
• Rapid refinement to adapt to change
• A Close relationship with users so they can provide timely feedback
• Continual learning to refine the product so it best meets user needs while avoiding unnecessary features
• Continual Refinement of the product & project practices
• A Working product at all times
• A Continual investment in & Emphasis on design
• Valuing Defect Prevention over defect detection
Features
WorkingProduct
Defect Prevention
Continual Refinement
Bugfixing
DesignEmphasis
Working Product
Virtually Shippable
Ultimate goal
Flexibility Agility
• No ‘Broken Windows’• Be Uncompromising about Defects• ‘Barely sufficient’ Documentation• Continuous Integration• Nightly Builds• Prototyping• Don't Neglect Performance• Zero Tolerance for Money and Resource Leaks• Coding Standards and Guidelines• Adopt Standards (Concentrate on Your Value-Add)• Internationalize from Day One• Isolate Platform Dependencies
Number of Defects Found
Number of Defects Found
Developers QA Customers
Developers QA Customers
Defect Defection Defect Prevention
• Code then Fix• Manual Testing• Low-value manual testing
• Finding defects• Automated Test• High-value manual testing
• Ruthless Testing
• Use Available Tools
• Pair Programming & Code Reviews
• Lightweight Root-Cause Analysis
• Software must be designed to support and enhance changeabilitychangeability
• Well- designed software is useful and easy to:Well- designed software is useful and easy to:
• UseUse• MaintainMaintain• ExtendExtend• Understand.Understand.
• The elements of design in sustainable software development are:
• Working softwareWorking software• The process of doing the designThe process of doing the design• Collaboration and face-to-face communicationCollaboration and face-to-face communication• Simple designSimple design
• Design vision• Guiding Principles• Simple Design• Refactoring• Design Pattern• Frequent Rapid Design Meetings• Commitment to Rearchitecture• Design for Reuse
• Teams need a way to balance short-term requirements and long-term needs: to ship their product as soon as they can while accepting, anticipating, and even welcoming change
• The core agile software development practice of iterative development encourages continual refinement
• In agile development, teams work from a simple and clear vision and deal with change through frequent iterations; the goal of each iteration is to deliver something useful to customers
• The main advantage of agile methods is that they help teams manage uncertainty and change early and throughout the project
• Iterative Development
• Release Planning
• Daily Standup Meetings
• Retrospectives
• Coaching & Team Development
• Make Key Metrics Visible
• Organizations are complex simply : the mix of different people
• Software people :
• Come from many backgrounds• Tend to be introverts• Don't like being told how to work
• Many organization do not pay attention to key people issues
• Professional development and leadership• Focus on projects, schedules, and results
• Software education lacks standards and a poor understanding of what the basic are
• Culture Factors:
• Leadership• Sense of urgency• Executive support
• Culture Enablers:
• Persistence• Training• Continuous ‘wins’ • Positive reinforcement of desired behaviors• Communication
• Background• Software development is a complex undertaking• The method : code-then fix or waterfall method
• Unsustainable Development• Too many projects can’t cope with the complexity of the software development taking• The teams are largely only able to respond to changes in their ecosystem• The most effort goes toward adding features and fixing bugs • These projects respond to complexity with complex solutions that are unreliable(buggy), brittle(break easily), and unable to support future change
• Sustainable Development• Teams are able to be proactive about changes in their ecosystem• Requires acknowledging the need for change• It means that adapting a different mindset and being uncompromising
• The Principle of sustainable Development• Having a working product every day• Defect prevention • Design emphasis• Continual refinement
• Having a working product every day• Even if it is not functionally complete,
• gives teams flexibility• allows teams to be much more responsive to changes in their ecosystem
• Defect prevention • A change in mindset for virtually all teams• Central to defect prevention:
• the practice of ruthless testing • computers are relied upon to do the repetitive and boring testing tasks that people do today
• Design emphasis• Good design is required to ensure that the period is designed to promote future maintainability and modifiability• Simple design, refactoring and design patterns all play important role in design• Every project and team has to find the right balance between iterative design and up-front design
• Continual refinement• Applies to how the project is planned and tracked through iterative development• Team can continually enhance its development processes and collaboration