You are previewing Sustainable Software Development: An Agile Perspective.
O'Reilly logo
Sustainable Software Development: An Agile Perspective

Book Description

"Over the years I have seen the software development pendulum swing from one extreme to the other, as deficiencies in 'best practices' at one end of the spectrum spawned a new set of 'best practices' at the opposite end. Kevin Tate's book has finally brought the pendulum to a screeching halt, right about dead center. This book provides a balanced and practical guide to what's important if your goal is to develop software that lasts."

—Mary Poppendieck, Poppendieck.LLC. Author of "Lean Software Development"

"1) In this very practical and accessible book interspersed with real-world examples and personal opinions, Kevin has distilled his years of developing quality software into a set of principles and practices that have been proven to work. If you are thinking of introducing an agile development environment (ADE) into your organization or of improving the one you already have, this book will help you clearly understand the benefits of a sustainable ADE, establish the practices to make it happen and coach you through the follow-up required to change the culture of your organization to make sure the changes take hold.

I am currently faced with exactly this challenge and this book has already given me several ideas I am looking forward to trying out.

2) In an industry plagued with missed deadlines despite long overtime hours, this book offers a refreshing alternative: a set of guiding principles and simple practices to follow that allow you to get the job done by working smarter, not harder. Drawing on the author's extensive experience developing quality software, the book clearly explains the principles behind a sustainable agile development environment, why it works, the practices to make it happen and the follow through required to turn these practices into habits."

—Peter Schoeler, Technical Director, Artificial Mind & Movement

"It's a familiar scene—the schedule's tight, people are putting in heroic efforts to get everything done, then at the last minute a change request comes in that wipes out the gains you had finally managed to make in meeting your ship date. Looks like it's pizza at your desk for the weekend again! An unfortunate situation to be in but a pattern that repeats itself all too often. "Sustainable Software Development" offers hope to break this cycle. It shows how a change in mindset can free you from the tyranny of unrealistic expectations and brings development realities out onto the table for everyone to see. By following these techniques you will be able to define and manage a software development environment that will work for the long haul."

—Kevin Picott

Software development for immediate success and long-term sustainability

Sustainable Software Development brings together principles and practices for building software that is technically superior, delivers exceptional business value, and can evolve rapidly to reflect any change to your business or technical environment.

Kevin Tate shows how to eliminate practices that make development unsustainable and replaces these practices with a sustainable approach that draws on the best ideas from both agile and conventional development. Tate demonstrates how to balance rapid releases and long-term sustainability, achieving both rich functionality and superior quality. You'll learn how to build a development organization that is more productive and can continually improve its capability to handle complexity and change.

Writing for developers, architects, project leaders, and other software team members, Tate shows how to:

  • Take control of your development environment, so you can outship your competitors, leveraging new technologies and responding to new business opportunities

  • Maintain a consistent pace that optimally balances short- versus long-term requirements

  • Keep your code base in a "near-shippable" state between releases

  • Prevent defects, rather than just recognizing and fixing them

  • Invest continually and cost-effectively in software design improvements

  • Leverage the fundamentals of the craft of software development

  • Integrate sustainable processes with Agile and traditional methodologies

© Copyright Pearson Education. All rights reserved.

Table of Contents

  1. Copyright
    1. Dedication
  2. Praise for Kevin Tate’s Sustainable Software Development
  3. The Agile Software Development Series
  4. Acknowledgments
  5. About the Author
  6. Foreword
  7. Introduction
    1. Where This Book Fits
      1. The Three Foundations of Agile Development
      2. About the Structure of This Book
  8. 1. Sustainable Software Development
    1. Sustainable Development
    2. Chemical Manufacturing and Sustainable Development
    3. Continual Improvement: The Accelerator Button
      1. The Genius of the AND versus the Tyranny of the OR
    4. Summary
  9. 2. Unsustainable Software Development and its Causes
    1. Technical Debt and the Flywheel
    2. The Perils of Jumping in Place
    3. The Causes of Unsustainable Development
      1. Project Stresses
        1. User Requirements
        2. External Dependencies
        3. Competition
        4. Disruptive Technologies
        5. Disruptive Business Models
        6. Cost Management
      2. Project Controls
        1. Collaboration
        2. Methodology
        3. Expertise
        4. Decision Making
        5. Leadership
        6. Culture
        7. Simplicity and Reliability
    4. Summary
  10. 3. The Principles of Sustainable Software Development
    1. Why Principles Are More Important Than Practices
    2. Applying the Principles of Sustainable Development
      1. Continual Refinement of the Product and Project Practices
      2. A Working Product at All Times
      3. A Continual Emphasis on Design
      4. Valuing Defect Prevention over Defect Detection
    3. Culture, by Descriptive Words and Phrases
      1. Disciplined
      2. Responsible
      3. Leadership
      4. Visionary and Tactical
      5. Shared Sense of Urgency
      6. Highly Collaborative
      7. Complementary Talents and Skills
      8. Continually Improving and Learning
      9. Change Tolerant
      10. Risk-Aware
      11. Fun
    4. Summary
  11. 4. Working Product
    1. Practice 1: No “Broken Windows”
    2. Practice 2: Be Uncompromising about Defects
      1. How to Avoid a Defect Backlog
      2. Put More Effort into Defect Prevention Than Bugfixing
      3. Being Pragmatic about Defects
    3. Practice 3: “Barely Sufficient” Documentation
    4. Practice 4: Continuous Integration
    5. Practice 5: Nightly Builds
      1. Pay Attention to Build Times
    6. Practice 6: Prototyping
      1. Throwaway Prototypes
      2. “Tracer Bullets”
    7. Practice 7: Don’t Neglect Performance
    8. Practice 8: Zero Tolerance for Memory and Resource Leaks
    9. Practice 9: Coding Standards and Guidelines
    10. Practice 10: Adopt Standards (Concentrate on Your Value-Add)
    11. Practice 11: Internationalize from Day One
    12. Practice 12: Isolate Platform Dependencies
    13. Summary
  12. 5. Defect Prevention
    1. The Role of Quality Assurance
    2. Practice 1: Ruthless Testing
      1. Unit Tests: Test-Driven Development
      2. Integration Tests
      3. System Tests
      4. Record and Playback
      5. Visual Validation Testing
      6. Performance Testing
      7. Resource-Usage Testing
      8. Regression Testing
      9. Usability Testing
      10. User Verification Testing
      11. Resources Required for Ruthless Testing
    3. Practice 2: Use Available Tools
      1. Compiler
      2. Source Code Analyzer
      3. Test Coverage Analysis
      4. Execution Profiler
      5. Event Logging
      6. Source Code Documentation
      7. Memory and Resource Leak Detection
      8. Configuration Management
    4. Practice 3: Pair Programming and Code Reviews
    5. Practice 4: Lightweight Root-Cause Analysis
    6. Summary
  13. 6. Emphasis on Design
    1. Practice 1: Design Vision
    2. Practice 2: Guiding Principles
      1. A Hypothetical Example of Guiding Principles
      2. A Real-World Example of Guiding Principles
    3. Practice 3: Simple Design
    4. 4. Refactoring
    5. Practice 5: Design Patterns
    6. Practice 6: Frequent Rapid Design Meetings
    7. Practice 7: Commitment to Rearchitecture
    8. Practice 8: Design for Reuse
    9. Summary
  14. 7. Continual Refinement
    1. Practice 1: Iterative Development
      1. Collaboration and Iterative Development
      2. Velocity
      3. Iteration 0
    2. Practice 2: Release Planning
    3. Practice 3: Daily Standup Meetings
    4. Practice 4: Retrospectives
    5. Practice 5: Coaching and Team Development
      1. Coaching
      2. Understanding the Business
      3. Professional Development
    6. Practice 6: Make Key Metrics Visible
    7. Summary
  15. 8. Culture Change and Sustainable Development
    1. Making Change Happen
    2. Change Factors and Enablers
      1. Change Factors
        1. Leadership
        2. Sense of Urgency
        3. Executive Support
      2. Change Enablers
        1. Persistence
        2. Training
        3. Continual “Wins”
        4. Positive Reinforcement of Desired Behaviors
        5. Communication
    3. Start with What You Can Control and Influence
    4. Avoid Transition Plans
    5. Turning Unsustainable into Sustainable Development
      1. Where to Begin
    6. Sustainable Development for New Projects
    7. Some Other Ideas
      1. Identify Key Architecture Battles
      2. Get Your Defects Under Control
      3. Collaboration with Users
      4. Training
      5. Group Refactoring Exercises
      6. The Work Environment
    8. Change Examples
      1. The Introduction of a Controversial Practice
      2. Introducing Agile Development Into a Mature Software Organization
    9. Summary
  16. 1. Practice Summary
  17. 2. Extreme Programming and Sustainable Software Development
    1. The Four Values of XP
    2. XP’s Twelve Practices
    3. The Strengths of XP
      1. XP is Extreme
      2. Technical Excellence
      3. Collaboration
      4. Customer Collaboration
    4. The Weaknesses of XP
      1. XP Targets Software Developers, and Nobody Else
      2. Project Management
      3. Scalability
      4. Pair Programming
      5. The 40-Hour Week
      6. The On-Site Customer
      7. Self-Organization and Leadership
    5. Simple Design
    6. Common Misconceptions of Extreme Programming
      1. “No Design”
      2. “No Discipline”
    7. Other Agile Development Methods
    8. Summary
  18. 3. Sustainable Software Development and the CMM
    1. The Capability Maturity Model (CMM)
    2. Agile Development and the CMM
    3. Summary
  19. 4. Recommended Reading
    1. Chapters 1 and 2: Sustainable Software Development, Unsustainable Software Development
    2. Chapter 3: The Principles of Sustainable Development
    3. Chapter 4: Working Product
    4. Chapter 5: Defect Prevention
      1. Test-Driven Development
      2. Automated Testing (General)
      3. Usability Testing
      4. Other
    5. Chapter 6: Emphasis on Design
      1. Design Patterns
      2. Design Patterns, Agile Development, and Simple Design
      3. Refactoring
      4. Other
    6. Chapter 7: Continual Refinement
    7. Chapter 8: Making Culture Change Happen
  20. Conclusion
  21. References