sustainable software developmt

Upload: sam-hwang

Post on 09-Apr-2018

220 views

Category:

Documents


0 download

TRANSCRIPT

  • 8/8/2019 Sustainable Software Developmt

    1/32

    Sam HwangSam Hwang

    2010 Mar2010 Mar

  • 8/8/2019 Sustainable Software Developmt

    2/32

  • 8/8/2019 Sustainable Software Developmt

    3/32

  • 8/8/2019 Sustainable Software Developmt

    4/32

  • 8/8/2019 Sustainable Software Developmt

    5/32

  • 8/8/2019 Sustainable Software Developmt

    6/32

  • 8/8/2019 Sustainable Software Developmt

    7/32

  • 8/8/2019 Sustainable Software Developmt

    8/32

    Project Stresses

    User Requirements

    External Dependencies

    Competition

    Disruptive Technologies

    Disruptive Business Models

    Cost Management

    Project Controls

    Collaboration

    Methodology

    ExpertiseDecision Making

    Leadership

    Culture

    Simplicity

  • 8/8/2019 Sustainable Software Developmt

    9/32

  • 8/8/2019 Sustainable Software Developmt

    10/32

    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 providetimely feedback

    Continual learning to refine the product so it best meetsuser needs while avoiding unnecessary features

  • 8/8/2019 Sustainable Software Developmt

    11/32

    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

  • 8/8/2019 Sustainable Software Developmt

    12/32

    Features

    WorkingProduct

    DefectPrevention

    ContinualRefinement

    Bug-fixing

    DesignEmphasis

  • 8/8/2019 Sustainable Software Developmt

    13/32

  • 8/8/2019 Sustainable Software Developmt

    14/32

    WorkingProduct

    Virtually Shippable

    Ultimate goal

    Flexibility Agility

  • 8/8/2019 Sustainable Software Developmt

    15/32

    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

  • 8/8/2019 Sustainable Software Developmt

    16/32

  • 8/8/2019 Sustainable Software Developmt

    17/32

    Numberof DefectsFound

    Numberof DefectsFound

    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

  • 8/8/2019 Sustainable Software Developmt

    18/32

    Ruthless Testing

    Use Available Tools

    Pair Programming & Code Reviews

    Lightweight Root-Cause Analysis

  • 8/8/2019 Sustainable Software Developmt

    19/32

  • 8/8/2019 Sustainable Software Developmt

    20/32

    Software must be designed to support and enhance changeabilitychangeability

    WellWell-- designed software is useful and easy to: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 faceCollaboration and face--toto--face communicationface communication

    Simple designSimple design

  • 8/8/2019 Sustainable Software Developmt

    21/32

    Design vision Guiding Principles Simple Design

    Refactoring Design Pattern Frequent Rapid Design Meetings Commitment to Rearchitecture Design for Reuse

  • 8/8/2019 Sustainable Software Developmt

    22/32

  • 8/8/2019 Sustainable Software Developmt

    23/32

    Teams need a way to balance short-term requirements andlong-term needs: to ship their product as soon as they can whileaccepting, anticipating, and even welcoming change

    The core agile software development practice of iterativedevelopment encourages continual refinement

    In agile development, teams work from a simple and clear

    vision and deal with change through frequent iterations; the goalof 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 theproject

  • 8/8/2019 Sustainable Software Developmt

    24/32

    Iterative Development

    Release Planning

    Daily Standup Meetings

    Retrospectives

    Coaching & Team Development

    Make Key Metrics Visible

  • 8/8/2019 Sustainable Software Developmt

    25/32

  • 8/8/2019 Sustainable Software Developmt

    26/32

    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 ofwhat the basic are

  • 8/8/2019 Sustainable Software Developmt

    27/32

    Culture Factors:

    Leadership Sense of urgency

    Executive support

    Culture Enablers:

    Persistence Training

    Continuous wins Positive reinforcement of desired behaviors Communication

  • 8/8/2019 Sustainable Software Developmt

    28/32

  • 8/8/2019 Sustainable Software Developmt

    29/32

    Background Software development is a complex undertaking The method : code-then fix or waterfall method

    Unsustainable Development Too many projects cant cope with the complexity ofthe software development taking

    The teams are largely only able to respond tochanges in their ecosystem The most effort goes toward adding features and

    fixing bugs These projects respond to complexity with complexsolutions that are unreliable(buggy), brittle(break easily),and unable to support future change

  • 8/8/2019 Sustainable Software Developmt

    30/32

    Sustainable Development

    Teams are able to be proactive about changes intheir ecosystem Requires acknowledging the need for change

    It means that adapting a different mindset and beinguncompromising

    The Principle of sustainable Development Having a working product every day Defect prevention Design emphasis Continual refinement

  • 8/8/2019 Sustainable Software Developmt

    31/32

    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 repetitiveand boring testing tasks that people do today

  • 8/8/2019 Sustainable Software Developmt

    32/32

    Design emphasis

    Good design is required to ensure that the period isdesigned to promote future maintainability andmodifiability

    Simple design, refactoring and design patterns allplay 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 trackedthrough iterative development Team can continually enhance its developmentprocesses and collaboration