SlideShare a Scribd company logo
1 of 48
Download to read offline
Managing Software Debt in Practice

“What he needs is some way to pay back. Not some way to borrow more.”
   - Will Rogers



                                                             Chris Sterling
                                                                       VP of Engineering
                                                                        AgileEVM Inc.
                                                            Web: www.AgileEVM.com
                                                          Email: chris@agileevm.com
                                                        Blog: www.GettingAgile.com
                                                       Follow Me on Twitter: @csterwa
                                                    Hash Tag for Presentation: #swdebt
                                                                                      1
Chris Sterling – Sterling Barton, LLC

               Partner, Sterling Barton, LLC
               Author of Book “Managing Software
               Debt: Building for Inevitable
               Change”
               Consults on software technology,
               Agile technical practices, Scrum,
               and effective management
               techniques
                                                   Email: chris@sterlingbarton.com
                                                   Web: http://www.agileevm.com
               Certified Scrum Trainer              Blog: http://www.gettingagile.com
                                                   Follow me on Twitter: @csterwa
               Innovation Games® Trained
               Facilitator
               Open Source Developer
© 2009-2011,                                                                      2



                                                                                       2
Types of Software Debt

          Technical Debt: These are the activities that a team or team members
          choose not to do well now and will impede future development if left
          undone.

          Quality Debt: There is a diminishing ability to verify the functional and
          technical quality of software.

          Configuration Management Debt: Integration and release management
          become more risky, complex, and error-prone.

          Design Debt: The cost of adding features is increasing toward the point
          where it is more than the cost of writing from scratch.

          Platform Experience Debt: The availability of people to work on software
          changes is becoming limited or cost-prohibitive.



© 2009-2010,                                                                          3


                                                                                          3
Technical Debt

“Lowering quality lengthens development time.” - From wiki page on “First Law
of Programming” (c2.com)




                                                                                4


                                                                                    4
Patterns of Technical Debt

                                                Duplication




   Schedule Pressure


                          Get it “right” the
                          first time mentality
© 2009-2010,                                              5


                                                              5
Aspects of the software’s design that teams agree to
   should be automated, if possible, and break the build
   when they are not adhered to.




© 2009-2010,                                               6


                                                               6
Keep DRY (Don’t Repeat Yourself)




© 2009-2010,                          7


                                          7
No matter what, the cost of addressing
   technical debt increases with time.




© 2009-2010,                                8


                                                8
Principles of Executable Design

          The way we design can always be improved.
          We’ll get it “right” the third time.
          We will not get it “right” the first time.
          Design and construct for change rather than longevity.
          Lower the threshold of pain.

                  If we are not enhancing the design then
                     we are just writing a bunch of tests.


© 2009-2010,                                                       9


                                                                       9
Merciless Refactoring


          Refactoring: a disciplined technique for restructuring
          an existing body of code, altering its internal
          structure without changing its external behavior.*
          Merciless: having or showing no [mercy - showing
          great kindness toward the distressed]
          Relieve your distressed code through kindness and
          disciplined restructuring



                           * From http://www.refactoring.com/
© 2009-2010,                                                       10

                                                                        10
Where to Start Refactoring?


           Does this change directly affect feature I am working
           on?
           Would change add clarity for feature implementation?
           Will change add automated tests where there are
           none?
    If “yes” to any question above, ask following question to
       decide if you should work on it now:
           At first glance, does refactoring look like a large
           endeavor involving significant portions of the
           software’s components?
© 2009-2010,                                                       11

                                                                        11
When to Stop Refactoring?


          Am I refactoring code not directly affected by feature?

          Is other code directly affected by feature I am working on that has
          not been refactoring sufficiently?

          If refactoring is exploding feature estimate given to Customer
          then I should bring it up to Team to decide how we should
          progress

          If Team decides that refactoring can be absorbed into current
          iteration without affecting delivery on our commitments then
          continue refactor

          If refactoring affects commitments then bring it to Customer for
          discussion how to proceed

© 2009-2010,                                                                 12

                                                                                  12
Automate Testing to Support Refactoring


          Refactoring cannot be done effectively without
          automated tests surrounding code
          Start by creating automated test which fails
          If difficult to create at unit level look at
          automated acceptance tests from functional
          perspective
          Over time look for ways to create automated unit
          tests

© 2009-2010,                                                 13

                                                                  13
TDD - Basic “Flow”




© 2009-2010,            14

                             14
TDD - Basic “Flow”


                           Write	
  
                        Failing	
  Test




© 2009-2010,                              14

                                               14
TDD - Basic “Flow”


                           Write	
  
                        Failing	
  Test



                                          Make	
  Test	
  
                                            Pass



© 2009-2010,                                                 14

                                                                  14
TDD - Basic “Flow”


                                       Write	
  
                                    Failing	
  Test



               Refactor	
  to	
                       Make	
  Test	
  
               Acceptable	
  
                 Design                                 Pass



© 2009-2010,                                                             14

                                                                              14
TDD - Basic “Flow”


                                       Write	
  
                                    Failing	
  Test



               Refactor	
  to	
                       Make	
  Test	
  
               Acceptable	
  
                 Design                                 Pass



© 2009-2010,                                                             14

                                                                              14
Ji:er	
  –	
  Example	
  TDD	
  Session

• Fake	
  micro-­‐blogging	
  tool	
  named	
  “Ji4er”	
  is	
  made	
  by	
  
  Sea4le-­‐based	
  fic::ous	
  company	
  that	
  focuses	
  on	
  enabling	
  
  coffee	
  injected	
  folks	
  to	
  write	
  short	
  messages	
  and	
  have	
  
  common	
  online	
  messaging	
  shorthand	
  expanded	
  for	
  easy	
  
  reading.	
  The	
  user	
  story	
  we	
  are	
  working	
  on	
  is:
 So	
  it	
  is	
  easier	
  to	
  read	
  their	
  kid’s	
  messages,	
  Mothers	
  want	
  
   to	
  automaFcally	
  expand	
  common	
  shorthand	
  notaFon
• The	
  acceptance	
  criteria	
  for	
  this	
  user	
  story	
  are:
    – LOL,	
  AFAIK,	
  and	
  TTYL	
  are	
  expandable
    – Expand	
  lower	
  and	
  upper	
  case	
  versions	
  of	
  shorthand


                                                                                           15
                                  Copyright © 2010 Sterling Barton. All rights reserved.


                                                                                                15
Expand	
  LOL	
  to	
  “laughing	
  out	
  loud”

public class WhenMotherWantsToExpandMessagesThatContainShorthandTest {
    @Test
    public void shouldExpandLOLToLaughingOutLoud() {
        JitterSession session = mock(JitterSession.class);
        when(session.getNextMessage()).thenReturn("Expand LOL please");
        MessageExpander expander = new MessageExpander(session);
        assertThat(expander.getNextMessage(),
            equalTo("Expand laughing out loud please"));
    }
}


public class MessageExpander {
    public String getNextMessage() {
        String msg = session.getNextMessage();
        return msg.replaceAll("LOL", "laughing out loud");
    }

                                                                                     16
                            Copyright © 2010 Sterling Barton. All rights reserved.


                                                                                          16
But	
  wait…what	
  if…?

• What	
  if	
  LOL	
  is	
  wri:en	
  in	
  lower	
  case?
• What	
  if	
  it	
  is	
  wri:en	
  as	
  “Lol”?	
  Should	
  it	
  be	
  expanded?	
  
• What	
  if	
  some	
  variaFon	
  of	
  LOL	
  is	
  inside	
  a	
  word?
• What	
  if	
  characters	
  surrounding	
  LOL	
  are	
  symbols,	
  not	
  le:ers?	
  


Write	
  these	
  down	
  as	
  upcoming	
  programmer	
  tests	
  as	
  comments	
  so	
  I	
  
 don’t	
  forget	
  them.	
  
// shouldExpandLOLIfLowerCase
// shouldNotExpandLOLIfMixedCase
// shouldNotExpandLOLIfInsideWord
// shouldExpandIfSurroundingCharactersAreNotLetters




                                                                                                  17
                                         Copyright © 2010 Sterling Barton. All rights reserved.


                                                                                                       17
Expand	
  LOL	
  If	
  Lower	
  Case

@Test
public void shouldExpandLOLIfLowerCase() {
     when(session.getNextMessage()).thenReturn("Expand lol please");
     MessageExpander expander = new MessageExpander(session);
     assertThat(expander.getNextMessage(),
          equalTo("Expand laughing out loud please"));
}


This	
  forced	
  use	
  of	
  java.u1l.regex.Pa6ern	
  to	
  handle	
  case	
  insensi1vity.
public String getNextMessage() {
     String msg = session.getNextMessage();
     return Pattern.compile("LOL”, Pattern.CASE_INSENSITIVE)
          .matcher(msg).replaceAll("laughing out loud");
}



                                                                                            18
                                   Copyright © 2010 Sterling Barton. All rights reserved.


                                                                                                 18
Don’t	
  Expand	
  “Lol”	
  –	
  Mixed-­‐Case

@Test
public void shouldNotExpandLOLIfMixedCase() {
     String msg = "Do not expand Lol please";
     when(session.getNextMessage()).thenReturn(msg);
     MessageExpander expander = new MessageExpander(session);
     assertThat(expander.getNextMessage(), equalTo(msg));
}


This	
  forced	
  me	
  to	
  stop	
  using	
  Pa6ern.CASE_INSENSITIVE	
  flag	
  in	
  pa6ern	
  
  compila1on.	
  Only	
  use	
  “LOL”	
  or	
  “lol”	
  for	
  replacement	
  criteria.
public String getNextMessage() {
     String msg = session.getNextMessage();
     return Pattern.compile("LOL|lol").matcher(msg)
                      .replaceAll("laughing out loud");
}

                                                                                            19
                                   Copyright © 2010 Sterling Barton. All rights reserved.


                                                                                                    19
Don’t	
  Expand	
  “LOL”	
  If	
  Inside	
  Word

@Test
public void shouldNotExpandLOLIfInsideWord() {
     String msg = "Do not expand PLOL or LOLP or PLOLP please";
     when(session.getNextMessage()).thenReturn(msg);
     MessageExpander expander = new MessageExpander(session);
     assertThat(expander.getNextMessage(), equalTo(msg));
}


The	
  pa6ern	
  matching	
  is	
  now	
  modified	
  to	
  use	
  spaces	
  around	
  each	
  
  varia1on	
  of	
  valid	
  LOL	
  shorthand.
return Pattern.compile("sLOLs|slols").matcher(msg)
     .replaceAll("laughing out loud");




                                                                                              20
                                     Copyright © 2010 Sterling Barton. All rights reserved.


                                                                                                   20
Expand	
  “LOL”	
  If	
  Not	
  Inside	
  Word

@Test
public void shouldExpandIfSurroundingCharactersAreNotLetters() {
    when(session.getNextMessage()).thenReturn("Expand .lol! please");
    MessageExpander expander = new MessageExpander(session);
    assertThat(expander.getNextMessage(),
         equalTo("Expand .laughing out loud! please"));
}


The	
  final	
  implementa1on	
  of	
  pa6ern	
  matching	
  code	
  looks	
  as	
  follows.
return Pattern.compile("bLOLb|blolb").matcher(msg)
    .replaceAll("laughing out loud");




                                                                                           21
                                  Copyright © 2010 Sterling Barton. All rights reserved.


                                                                                                21
Quality Debt

“Promises make debt, and debt makes promises.” - Dutch Proverb




                                                                 22


                                                                      22
Effect of Project Constraints on Quality




© 2009-2010,                                  23


                                                   23
Effect of Project Constraints on Quality




© 2009-2010,                                  23


                                                   23
“For every [dollar] of competitive advantage gained by
   cutting quality, it costs $4 to restore it; and software is
   an organizational asset and decisions to cut quality
   must be made by executive management and
   reflected in the financial statements.” - Ken Schwaber




© 2009-2010,                                                     24


                                                                      24
Acceptance Test-Driven Development




© 2009-2010,                            25


                                             25
Configuration Management Debt

“If releases are like giving birth, then you must be doing something wrong.”
   - Robert Benefield




                                                                               26


                                                                                    26
The Power of 2 Scripts: Deploy and Rollback




© 2009-2010,                                     27


                                                      27
Design Debt

Design decays when not attended to so design software continually




                                                                    28


                                                                         28
The value of technical aspects in an application or its
   surrounding infrastructure is the cost of not
   addressing them.




© 2009-2010,                                                 29


                                                                  29
* Abuse User Stories




       Implement Security
      for User Information




               * From “User Stories Applied” presented by Mike Cohn Agile 2006




© 2009-2010,                                                                     30


                                                                                      30
* Abuse User Stories




                                                         As a Malicious Hacker I
       Implement Security
                                                        want to steal credit card
      for User Information                              information so that I can
                                                         make fraudulent charges



               * From “User Stories Applied” presented by Mike Cohn Agile 2006




© 2009-2010,                                                                        30


                                                                                         30
Abuse Story Writing Workshop

          Identify a user role who will try to abuse the application.

          Set a time box of 30 minutes to 1 hour for generating abuse stories.

          As pairs or individually, assume persona of the abuser role and
          brainstorm as many abuse stories as possible. This should take 5 to 15
          minutes.

          As a team, identify abuse stories that are not valid or are duplicates and
          remove them. This should take 10 to 20 minutes.

          Prioritize abuse stories in terms of impact or value. Do this fast as
          possible.

          Give all abuse stories in priority order to the Product Owner to be
          prioritized in the Product Backlog. Provide clarification on abuse stories
          that the Product Owner does not understand well.
© 2009-2010,                                                                           31


                                                                                            31
Some Potential Abusers

          Malicious Hacker
          Mass of users
          SQL injector
          Disgruntled employee
          Naïve API user
          Impatient clicker
          Denial-of-service (DoS) attacker
          Sleazy user
© 2009-2010,                                 32


                                                  32
Lack of emphasis on software quality attributes
   contributes to decay




© 2009-2010,                                         33


                                                          33
Software Quality Attributes Defined




© 2009-2010,                            34


                                             34
Software Quality Attributes Rating Tool




© 2009-2010,                                 35


                                                  35
Platform Experience Debt

“As in Nature, if an organization is too inflexible or stands still too long it will get
eaten.” - James Burke (author and historian)




                                                                                          36


                                                                                               36
Rather than creating teams to work on projects, let’s
   find ways to give projects to cross-functional teams.




© 2009-2010,                                               37


                                                                37
Component Team Configuration

                         “Component Team” structure
                         Separate Product Backlog
                         Managing dependencies is often
                         serialized
                         Problematic integration issues
                         are
                         typically faced if multiple
                         components are
                         required to release
                         Use an “Integration
                         Team” to pull
                         components together
                         Causes more rework than
                         “Feature Team” structure

© 2009-2010,                                        38


                                                         38
Feature Team Configuration

                          “Feature Team” structure
                          Uses common Product
                          Backlog
                          Integration is done in parallel
                          Requires high levels of
                          communication across teams
                          to resolve integration issues
                          Forces Product Owners to
                          be more coordinated
                          Sprints should be
                          synchronized
                          Cross team fertilization is a
                          requirement to successfully
                          deliver in parallel
© 2009-2010,                                            39


                                                             39
Principles for Managing Software Debt

          Maintain one list of work

          Emphasize quality

          Evolve tools and infrastructure continually

          Improve system design always

          Share knowledge across the organization

          And most importantly, get the right people to work on your software!




© 2009-2010,                                                                     40


                                                                                      40
Thank you

Questions and Answers




                        41


                             41
Chris Sterling – Sterling Barton, LLC

               Partner, Sterling Barton, LLC
               Author of Book “Managing Software
               Debt: Building for Inevitable
               Change”
               Consults on software technology,
               Agile technical practices, Scrum,
               and effective management
               techniques
                                                    Email: chris@sterlingbarton.com
               Certified Scrum Trainer               Web: http://www.agileevm.com
                                                     http://www.sterlingbarton.com
                                                   Blog: http://www.gettingagile.com
               Innovation Games® Trained            Follow me on Twitter: @csterwa

               Facilitator
               Open Source Developer
© 2009-2011,                                                                      42



                                                                                       42

More Related Content

What's hot

Earned Value Management and Agile Tips for Success
Earned Value Management and Agile Tips for Success Earned Value Management and Agile Tips for Success
Earned Value Management and Agile Tips for Success Brent Barton
 
Mary Poppendieck: Agile under contract
Mary Poppendieck: Agile under contractMary Poppendieck: Agile under contract
Mary Poppendieck: Agile under contractAgile Lietuva
 
Dollars and Dates are Killing Agile
Dollars and Dates are Killing AgileDollars and Dates are Killing Agile
Dollars and Dates are Killing AgileChris Sterling
 
Rawsthorne dan - scrum the big picture
Rawsthorne dan - scrum the big pictureRawsthorne dan - scrum the big picture
Rawsthorne dan - scrum the big pictureMagneta AI
 
"Lean software development: discovering waste" by Mary Poppendieck
"Lean software development: discovering waste" by Mary Poppendieck"Lean software development: discovering waste" by Mary Poppendieck
"Lean software development: discovering waste" by Mary PoppendieckOperae Partners
 
Mature agile teams essential patterns v4 - half day workshop
Mature agile teams   essential patterns v4 - half day workshopMature agile teams   essential patterns v4 - half day workshop
Mature agile teams essential patterns v4 - half day workshopdrewz lin
 
The Agile Gap: Closing it with User Experience
The Agile Gap: Closing it with User ExperienceThe Agile Gap: Closing it with User Experience
The Agile Gap: Closing it with User Experiencekalebwalton
 
Boeing Webinar - Integrating Quality in Portfolio Management - oct 2010
Boeing Webinar - Integrating Quality in Portfolio Management -  oct 2010Boeing Webinar - Integrating Quality in Portfolio Management -  oct 2010
Boeing Webinar - Integrating Quality in Portfolio Management - oct 2010Brent Barton
 
Simple Measurements #2
Simple Measurements #2Simple Measurements #2
Simple Measurements #2Schalk Cronjé
 
The Stream Process™ for Defining Projects
The Stream Process™ for Defining ProjectsThe Stream Process™ for Defining Projects
The Stream Process™ for Defining ProjectsOneSpring LLC
 
Thezenofscrum1 090221154550-phpapp01
Thezenofscrum1 090221154550-phpapp01Thezenofscrum1 090221154550-phpapp01
Thezenofscrum1 090221154550-phpapp01Dani Llamazares
 
Identifying Managing & Eliminating Technical Debt
Identifying Managing & Eliminating Technical DebtIdentifying Managing & Eliminating Technical Debt
Identifying Managing & Eliminating Technical DebtAgileDad
 
Bv Eng & Agile Specs For Scrum U.Key
Bv Eng & Agile Specs For Scrum U.KeyBv Eng & Agile Specs For Scrum U.Key
Bv Eng & Agile Specs For Scrum U.KeyLeanAgileTraining
 
One XP Experience: Introducing Agile (XP) Software Development into a Culture...
One XP Experience: Introducing Agile (XP) Software Development into a Culture...One XP Experience: Introducing Agile (XP) Software Development into a Culture...
One XP Experience: Introducing Agile (XP) Software Development into a Culture...David Leip
 
Mary Poppendieck “It’s Not About Software”
Mary Poppendieck  “It’s Not About Software”Mary Poppendieck  “It’s Not About Software”
Mary Poppendieck “It’s Not About Software”Agileee
 
Agile Project Management and Scrum Introduction
Agile Project Management and Scrum IntroductionAgile Project Management and Scrum Introduction
Agile Project Management and Scrum IntroductionEric Krock
 

What's hot (20)

Earned Value Management and Agile Tips for Success
Earned Value Management and Agile Tips for Success Earned Value Management and Agile Tips for Success
Earned Value Management and Agile Tips for Success
 
Mary Poppendieck: Agile under contract
Mary Poppendieck: Agile under contractMary Poppendieck: Agile under contract
Mary Poppendieck: Agile under contract
 
Dollars and Dates are Killing Agile
Dollars and Dates are Killing AgileDollars and Dates are Killing Agile
Dollars and Dates are Killing Agile
 
Utah PMA Quarterly Meeting, June, 2009
Utah PMA Quarterly Meeting, June, 2009Utah PMA Quarterly Meeting, June, 2009
Utah PMA Quarterly Meeting, June, 2009
 
Value stream mapping
Value stream mapping  Value stream mapping
Value stream mapping
 
Rawsthorne dan - scrum the big picture
Rawsthorne dan - scrum the big pictureRawsthorne dan - scrum the big picture
Rawsthorne dan - scrum the big picture
 
"Lean software development: discovering waste" by Mary Poppendieck
"Lean software development: discovering waste" by Mary Poppendieck"Lean software development: discovering waste" by Mary Poppendieck
"Lean software development: discovering waste" by Mary Poppendieck
 
Business value of Agile : A People10 Showcase
Business value of Agile : A People10 ShowcaseBusiness value of Agile : A People10 Showcase
Business value of Agile : A People10 Showcase
 
Mature agile teams essential patterns v4 - half day workshop
Mature agile teams   essential patterns v4 - half day workshopMature agile teams   essential patterns v4 - half day workshop
Mature agile teams essential patterns v4 - half day workshop
 
The Agile Gap: Closing it with User Experience
The Agile Gap: Closing it with User ExperienceThe Agile Gap: Closing it with User Experience
The Agile Gap: Closing it with User Experience
 
Boeing Webinar - Integrating Quality in Portfolio Management - oct 2010
Boeing Webinar - Integrating Quality in Portfolio Management -  oct 2010Boeing Webinar - Integrating Quality in Portfolio Management -  oct 2010
Boeing Webinar - Integrating Quality in Portfolio Management - oct 2010
 
Simple Measurements #2
Simple Measurements #2Simple Measurements #2
Simple Measurements #2
 
The Stream Process™ for Defining Projects
The Stream Process™ for Defining ProjectsThe Stream Process™ for Defining Projects
The Stream Process™ for Defining Projects
 
Agile Planning
Agile PlanningAgile Planning
Agile Planning
 
Thezenofscrum1 090221154550-phpapp01
Thezenofscrum1 090221154550-phpapp01Thezenofscrum1 090221154550-phpapp01
Thezenofscrum1 090221154550-phpapp01
 
Identifying Managing & Eliminating Technical Debt
Identifying Managing & Eliminating Technical DebtIdentifying Managing & Eliminating Technical Debt
Identifying Managing & Eliminating Technical Debt
 
Bv Eng & Agile Specs For Scrum U.Key
Bv Eng & Agile Specs For Scrum U.KeyBv Eng & Agile Specs For Scrum U.Key
Bv Eng & Agile Specs For Scrum U.Key
 
One XP Experience: Introducing Agile (XP) Software Development into a Culture...
One XP Experience: Introducing Agile (XP) Software Development into a Culture...One XP Experience: Introducing Agile (XP) Software Development into a Culture...
One XP Experience: Introducing Agile (XP) Software Development into a Culture...
 
Mary Poppendieck “It’s Not About Software”
Mary Poppendieck  “It’s Not About Software”Mary Poppendieck  “It’s Not About Software”
Mary Poppendieck “It’s Not About Software”
 
Agile Project Management and Scrum Introduction
Agile Project Management and Scrum IntroductionAgile Project Management and Scrum Introduction
Agile Project Management and Scrum Introduction
 

Similar to Managing Software Debt in Practice 2011

Managing Software Debt Workshop at Intel
Managing Software Debt Workshop at IntelManaging Software Debt Workshop at Intel
Managing Software Debt Workshop at IntelChris Sterling
 
Integrating Quality into Portfolio Management, PMI Silicon Valley Chapter Din...
Integrating Quality into Portfolio Management, PMI Silicon Valley Chapter Din...Integrating Quality into Portfolio Management, PMI Silicon Valley Chapter Din...
Integrating Quality into Portfolio Management, PMI Silicon Valley Chapter Din...Brent Barton
 
Managing softwaredebt agilepalooza-redmond-sept2010
Managing softwaredebt agilepalooza-redmond-sept2010Managing softwaredebt agilepalooza-redmond-sept2010
Managing softwaredebt agilepalooza-redmond-sept2010Chris Sterling
 
What Is Visualization?
What Is Visualization?What Is Visualization?
What Is Visualization?OneSpring LLC
 
Continuous Testing: A Key to DevOps Success
Continuous Testing: A Key to DevOps SuccessContinuous Testing: A Key to DevOps Success
Continuous Testing: A Key to DevOps SuccessTechWell
 
Design Thinking, Agile, DevOps - fuel the innovation delivery
Design Thinking, Agile, DevOps  - fuel the innovation deliveryDesign Thinking, Agile, DevOps  - fuel the innovation delivery
Design Thinking, Agile, DevOps - fuel the innovation deliveryYi Xu
 
Going agile with scrum
Going agile with scrumGoing agile with scrum
Going agile with scrumMayur Sand
 
Releasing Software Without Testing Team
Releasing Software Without Testing TeamReleasing Software Without Testing Team
Releasing Software Without Testing TeamAkshay Mathur
 
How to design a 'Good' Embedded Software?
How to design a 'Good' Embedded Software?How to design a 'Good' Embedded Software?
How to design a 'Good' Embedded Software?apurvaprabhakar
 
The Laws of User Experience: Making it or breaking it with the UX Factor
The Laws of User Experience: Making it or breaking it with the UX FactorThe Laws of User Experience: Making it or breaking it with the UX Factor
The Laws of User Experience: Making it or breaking it with the UX FactorEffectiveUI
 
The Laws of User Experience: Making it or Breaking It with the UX Factor
The Laws of User Experience: Making it or Breaking It with the UX FactorThe Laws of User Experience: Making it or Breaking It with the UX Factor
The Laws of User Experience: Making it or Breaking It with the UX FactorEffective
 
From Continuous Integration to DevOps - Japan Innovate 2013
From Continuous Integration to DevOps - Japan Innovate 2013From Continuous Integration to DevOps - Japan Innovate 2013
From Continuous Integration to DevOps - Japan Innovate 2013Sanjeev Sharma
 
By the Book: How Great User Experiences in Software Can Impact Government and...
By the Book: How Great User Experiences in Software Can Impact Government and...By the Book: How Great User Experiences in Software Can Impact Government and...
By the Book: How Great User Experiences in Software Can Impact Government and...EffectiveUI
 
Site Reliability Engineering: An Enterprise Adoption Story (an ITSM Academy W...
Site Reliability Engineering: An Enterprise Adoption Story (an ITSM Academy W...Site Reliability Engineering: An Enterprise Adoption Story (an ITSM Academy W...
Site Reliability Engineering: An Enterprise Adoption Story (an ITSM Academy W...ITSM Academy, Inc.
 

Similar to Managing Software Debt in Practice 2011 (20)

Managing Software Debt Workshop at Intel
Managing Software Debt Workshop at IntelManaging Software Debt Workshop at Intel
Managing Software Debt Workshop at Intel
 
Integrating Quality into Portfolio Management, PMI Silicon Valley Chapter Din...
Integrating Quality into Portfolio Management, PMI Silicon Valley Chapter Din...Integrating Quality into Portfolio Management, PMI Silicon Valley Chapter Din...
Integrating Quality into Portfolio Management, PMI Silicon Valley Chapter Din...
 
Managing softwaredebt agilepalooza-redmond-sept2010
Managing softwaredebt agilepalooza-redmond-sept2010Managing softwaredebt agilepalooza-redmond-sept2010
Managing softwaredebt agilepalooza-redmond-sept2010
 
What Is Visualization?
What Is Visualization?What Is Visualization?
What Is Visualization?
 
Continuous Testing: A Key to DevOps Success
Continuous Testing: A Key to DevOps SuccessContinuous Testing: A Key to DevOps Success
Continuous Testing: A Key to DevOps Success
 
Design Thinking, Agile, DevOps - fuel the innovation delivery
Design Thinking, Agile, DevOps  - fuel the innovation deliveryDesign Thinking, Agile, DevOps  - fuel the innovation delivery
Design Thinking, Agile, DevOps - fuel the innovation delivery
 
Agile
AgileAgile
Agile
 
Going agile with scrum
Going agile with scrumGoing agile with scrum
Going agile with scrum
 
Releasing Software Without Testing Team
Releasing Software Without Testing TeamReleasing Software Without Testing Team
Releasing Software Without Testing Team
 
How to design a 'Good' Embedded Software?
How to design a 'Good' Embedded Software?How to design a 'Good' Embedded Software?
How to design a 'Good' Embedded Software?
 
The Laws of User Experience: Making it or breaking it with the UX Factor
The Laws of User Experience: Making it or breaking it with the UX FactorThe Laws of User Experience: Making it or breaking it with the UX Factor
The Laws of User Experience: Making it or breaking it with the UX Factor
 
The Laws of User Experience: Making it or Breaking It with the UX Factor
The Laws of User Experience: Making it or Breaking It with the UX FactorThe Laws of User Experience: Making it or Breaking It with the UX Factor
The Laws of User Experience: Making it or Breaking It with the UX Factor
 
From Continuous Integration to DevOps - Japan Innovate 2013
From Continuous Integration to DevOps - Japan Innovate 2013From Continuous Integration to DevOps - Japan Innovate 2013
From Continuous Integration to DevOps - Japan Innovate 2013
 
Agile Engineering Practices
Agile Engineering PracticesAgile Engineering Practices
Agile Engineering Practices
 
Extreme programming
Extreme programmingExtreme programming
Extreme programming
 
By the Book: How Great User Experiences in Software Can Impact Government and...
By the Book: How Great User Experiences in Software Can Impact Government and...By the Book: How Great User Experiences in Software Can Impact Government and...
By the Book: How Great User Experiences in Software Can Impact Government and...
 
Agile.usability
Agile.usabilityAgile.usability
Agile.usability
 
An Agile DevOps Journey
An Agile DevOps JourneyAn Agile DevOps Journey
An Agile DevOps Journey
 
Poor Man's Kanban
Poor Man's KanbanPoor Man's Kanban
Poor Man's Kanban
 
Site Reliability Engineering: An Enterprise Adoption Story (an ITSM Academy W...
Site Reliability Engineering: An Enterprise Adoption Story (an ITSM Academy W...Site Reliability Engineering: An Enterprise Adoption Story (an ITSM Academy W...
Site Reliability Engineering: An Enterprise Adoption Story (an ITSM Academy W...
 

More from Chris Sterling

Cloud Native Java with Spring Cloud Services
Cloud Native Java with Spring Cloud ServicesCloud Native Java with Spring Cloud Services
Cloud Native Java with Spring Cloud ServicesChris Sterling
 
The DevOps Revolution And Beyond...
The DevOps Revolution And Beyond...The DevOps Revolution And Beyond...
The DevOps Revolution And Beyond...Chris Sterling
 
From Zero to Continuous Validated Learning: Lean Startup on PaaS
From Zero to Continuous Validated Learning: Lean Startup on PaaSFrom Zero to Continuous Validated Learning: Lean Startup on PaaS
From Zero to Continuous Validated Learning: Lean Startup on PaaSChris Sterling
 
Microservices: Aren't Microservices Just SOA?
Microservices: Aren't Microservices Just SOA?Microservices: Aren't Microservices Just SOA?
Microservices: Aren't Microservices Just SOA?Chris Sterling
 
Reduce Time to Value: Focus First on Configuration Management Debt
Reduce Time to Value: Focus First on Configuration Management DebtReduce Time to Value: Focus First on Configuration Management Debt
Reduce Time to Value: Focus First on Configuration Management DebtChris Sterling
 
Managing Software Debt - Quality Debt Focus - QASIG Kirkland
Managing Software Debt - Quality Debt Focus - QASIG KirklandManaging Software Debt - Quality Debt Focus - QASIG Kirkland
Managing Software Debt - Quality Debt Focus - QASIG KirklandChris Sterling
 
Managing Software Debt - Federal Reserve Bank
Managing Software Debt - Federal Reserve BankManaging Software Debt - Federal Reserve Bank
Managing Software Debt - Federal Reserve BankChris Sterling
 
UW Agile CP202 Adv Topics Class 4 Scaling Multi-Level Planning Portfolio Mana...
UW Agile CP202 Adv Topics Class 4 Scaling Multi-Level Planning Portfolio Mana...UW Agile CP202 Adv Topics Class 4 Scaling Multi-Level Planning Portfolio Mana...
UW Agile CP202 Adv Topics Class 4 Scaling Multi-Level Planning Portfolio Mana...Chris Sterling
 
UW Agile CP202 Class 3 Managing Software Debt
UW Agile CP202 Class 3 Managing Software DebtUW Agile CP202 Class 3 Managing Software Debt
UW Agile CP202 Class 3 Managing Software DebtChris Sterling
 
UW Agile CP202 - Class 1 User Stories
UW Agile CP202 - Class 1 User StoriesUW Agile CP202 - Class 1 User Stories
UW Agile CP202 - Class 1 User StoriesChris Sterling
 
Managing Software Debt Agile Bazaar
Managing Software Debt Agile BazaarManaging Software Debt Agile Bazaar
Managing Software Debt Agile BazaarChris Sterling
 
Intro To Tdd Agile Palooza
Intro To Tdd Agile PaloozaIntro To Tdd Agile Palooza
Intro To Tdd Agile PaloozaChris Sterling
 
Class5 Scaling And Strategic Planning
Class5 Scaling And Strategic PlanningClass5 Scaling And Strategic Planning
Class5 Scaling And Strategic PlanningChris Sterling
 
Executable Specifications Agile Palooza
Executable Specifications Agile PaloozaExecutable Specifications Agile Palooza
Executable Specifications Agile PaloozaChris Sterling
 
Building Integrity In Seminar
Building Integrity In   SeminarBuilding Integrity In   Seminar
Building Integrity In SeminarChris Sterling
 
UW ADC - Course 3 - Class 1 - User Stories And Acceptance Testing
UW ADC - Course 3 - Class 1 - User Stories And Acceptance TestingUW ADC - Course 3 - Class 1 - User Stories And Acceptance Testing
UW ADC - Course 3 - Class 1 - User Stories And Acceptance TestingChris Sterling
 

More from Chris Sterling (16)

Cloud Native Java with Spring Cloud Services
Cloud Native Java with Spring Cloud ServicesCloud Native Java with Spring Cloud Services
Cloud Native Java with Spring Cloud Services
 
The DevOps Revolution And Beyond...
The DevOps Revolution And Beyond...The DevOps Revolution And Beyond...
The DevOps Revolution And Beyond...
 
From Zero to Continuous Validated Learning: Lean Startup on PaaS
From Zero to Continuous Validated Learning: Lean Startup on PaaSFrom Zero to Continuous Validated Learning: Lean Startup on PaaS
From Zero to Continuous Validated Learning: Lean Startup on PaaS
 
Microservices: Aren't Microservices Just SOA?
Microservices: Aren't Microservices Just SOA?Microservices: Aren't Microservices Just SOA?
Microservices: Aren't Microservices Just SOA?
 
Reduce Time to Value: Focus First on Configuration Management Debt
Reduce Time to Value: Focus First on Configuration Management DebtReduce Time to Value: Focus First on Configuration Management Debt
Reduce Time to Value: Focus First on Configuration Management Debt
 
Managing Software Debt - Quality Debt Focus - QASIG Kirkland
Managing Software Debt - Quality Debt Focus - QASIG KirklandManaging Software Debt - Quality Debt Focus - QASIG Kirkland
Managing Software Debt - Quality Debt Focus - QASIG Kirkland
 
Managing Software Debt - Federal Reserve Bank
Managing Software Debt - Federal Reserve BankManaging Software Debt - Federal Reserve Bank
Managing Software Debt - Federal Reserve Bank
 
UW Agile CP202 Adv Topics Class 4 Scaling Multi-Level Planning Portfolio Mana...
UW Agile CP202 Adv Topics Class 4 Scaling Multi-Level Planning Portfolio Mana...UW Agile CP202 Adv Topics Class 4 Scaling Multi-Level Planning Portfolio Mana...
UW Agile CP202 Adv Topics Class 4 Scaling Multi-Level Planning Portfolio Mana...
 
UW Agile CP202 Class 3 Managing Software Debt
UW Agile CP202 Class 3 Managing Software DebtUW Agile CP202 Class 3 Managing Software Debt
UW Agile CP202 Class 3 Managing Software Debt
 
UW Agile CP202 - Class 1 User Stories
UW Agile CP202 - Class 1 User StoriesUW Agile CP202 - Class 1 User Stories
UW Agile CP202 - Class 1 User Stories
 
Managing Software Debt Agile Bazaar
Managing Software Debt Agile BazaarManaging Software Debt Agile Bazaar
Managing Software Debt Agile Bazaar
 
Intro To Tdd Agile Palooza
Intro To Tdd Agile PaloozaIntro To Tdd Agile Palooza
Intro To Tdd Agile Palooza
 
Class5 Scaling And Strategic Planning
Class5 Scaling And Strategic PlanningClass5 Scaling And Strategic Planning
Class5 Scaling And Strategic Planning
 
Executable Specifications Agile Palooza
Executable Specifications Agile PaloozaExecutable Specifications Agile Palooza
Executable Specifications Agile Palooza
 
Building Integrity In Seminar
Building Integrity In   SeminarBuilding Integrity In   Seminar
Building Integrity In Seminar
 
UW ADC - Course 3 - Class 1 - User Stories And Acceptance Testing
UW ADC - Course 3 - Class 1 - User Stories And Acceptance TestingUW ADC - Course 3 - Class 1 - User Stories And Acceptance Testing
UW ADC - Course 3 - Class 1 - User Stories And Acceptance Testing
 

Recently uploaded

SALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICESSALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICESmohitsingh558521
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLScyllaDB
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek SchlawackFwdays
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.Curtis Poe
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .Alan Dix
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyAlfredo García Lavilla
 
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxLoriGlavin3
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfLoriGlavin3
 
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxDigital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxLoriGlavin3
 
What is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfWhat is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfMounikaPolabathina
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 3652toLead Limited
 
The State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxThe State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxLoriGlavin3
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr BaganFwdays
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxLoriGlavin3
 
unit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptxunit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptxBkGupta21
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfAddepto
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersRaghuram Pandurangan
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxLoriGlavin3
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebUiPathCommunity
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsPixlogix Infotech
 

Recently uploaded (20)

SALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICESSALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICES
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQL
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easy
 
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdf
 
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxDigital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
 
What is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfWhat is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdf
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365
 
The State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxThe State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptx
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
 
unit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptxunit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptx
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdf
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information Developers
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and Cons
 

Managing Software Debt in Practice 2011

  • 1. Managing Software Debt in Practice “What he needs is some way to pay back. Not some way to borrow more.” - Will Rogers Chris Sterling VP of Engineering AgileEVM Inc. Web: www.AgileEVM.com Email: chris@agileevm.com Blog: www.GettingAgile.com Follow Me on Twitter: @csterwa Hash Tag for Presentation: #swdebt 1
  • 2. Chris Sterling – Sterling Barton, LLC Partner, Sterling Barton, LLC Author of Book “Managing Software Debt: Building for Inevitable Change” Consults on software technology, Agile technical practices, Scrum, and effective management techniques Email: chris@sterlingbarton.com Web: http://www.agileevm.com Certified Scrum Trainer Blog: http://www.gettingagile.com Follow me on Twitter: @csterwa Innovation Games® Trained Facilitator Open Source Developer © 2009-2011, 2 2
  • 3. Types of Software Debt Technical Debt: These are the activities that a team or team members choose not to do well now and will impede future development if left undone. Quality Debt: There is a diminishing ability to verify the functional and technical quality of software. Configuration Management Debt: Integration and release management become more risky, complex, and error-prone. Design Debt: The cost of adding features is increasing toward the point where it is more than the cost of writing from scratch. Platform Experience Debt: The availability of people to work on software changes is becoming limited or cost-prohibitive. © 2009-2010, 3 3
  • 4. Technical Debt “Lowering quality lengthens development time.” - From wiki page on “First Law of Programming” (c2.com) 4 4
  • 5. Patterns of Technical Debt Duplication Schedule Pressure Get it “right” the first time mentality © 2009-2010, 5 5
  • 6. Aspects of the software’s design that teams agree to should be automated, if possible, and break the build when they are not adhered to. © 2009-2010, 6 6
  • 7. Keep DRY (Don’t Repeat Yourself) © 2009-2010, 7 7
  • 8. No matter what, the cost of addressing technical debt increases with time. © 2009-2010, 8 8
  • 9. Principles of Executable Design The way we design can always be improved. We’ll get it “right” the third time. We will not get it “right” the first time. Design and construct for change rather than longevity. Lower the threshold of pain. If we are not enhancing the design then we are just writing a bunch of tests. © 2009-2010, 9 9
  • 10. Merciless Refactoring Refactoring: a disciplined technique for restructuring an existing body of code, altering its internal structure without changing its external behavior.* Merciless: having or showing no [mercy - showing great kindness toward the distressed] Relieve your distressed code through kindness and disciplined restructuring * From http://www.refactoring.com/ © 2009-2010, 10 10
  • 11. Where to Start Refactoring? Does this change directly affect feature I am working on? Would change add clarity for feature implementation? Will change add automated tests where there are none? If “yes” to any question above, ask following question to decide if you should work on it now: At first glance, does refactoring look like a large endeavor involving significant portions of the software’s components? © 2009-2010, 11 11
  • 12. When to Stop Refactoring? Am I refactoring code not directly affected by feature? Is other code directly affected by feature I am working on that has not been refactoring sufficiently? If refactoring is exploding feature estimate given to Customer then I should bring it up to Team to decide how we should progress If Team decides that refactoring can be absorbed into current iteration without affecting delivery on our commitments then continue refactor If refactoring affects commitments then bring it to Customer for discussion how to proceed © 2009-2010, 12 12
  • 13. Automate Testing to Support Refactoring Refactoring cannot be done effectively without automated tests surrounding code Start by creating automated test which fails If difficult to create at unit level look at automated acceptance tests from functional perspective Over time look for ways to create automated unit tests © 2009-2010, 13 13
  • 14. TDD - Basic “Flow” © 2009-2010, 14 14
  • 15. TDD - Basic “Flow” Write   Failing  Test © 2009-2010, 14 14
  • 16. TDD - Basic “Flow” Write   Failing  Test Make  Test   Pass © 2009-2010, 14 14
  • 17. TDD - Basic “Flow” Write   Failing  Test Refactor  to   Make  Test   Acceptable   Design Pass © 2009-2010, 14 14
  • 18. TDD - Basic “Flow” Write   Failing  Test Refactor  to   Make  Test   Acceptable   Design Pass © 2009-2010, 14 14
  • 19. Ji:er  –  Example  TDD  Session • Fake  micro-­‐blogging  tool  named  “Ji4er”  is  made  by   Sea4le-­‐based  fic::ous  company  that  focuses  on  enabling   coffee  injected  folks  to  write  short  messages  and  have   common  online  messaging  shorthand  expanded  for  easy   reading.  The  user  story  we  are  working  on  is: So  it  is  easier  to  read  their  kid’s  messages,  Mothers  want   to  automaFcally  expand  common  shorthand  notaFon • The  acceptance  criteria  for  this  user  story  are: – LOL,  AFAIK,  and  TTYL  are  expandable – Expand  lower  and  upper  case  versions  of  shorthand 15 Copyright © 2010 Sterling Barton. All rights reserved. 15
  • 20. Expand  LOL  to  “laughing  out  loud” public class WhenMotherWantsToExpandMessagesThatContainShorthandTest { @Test public void shouldExpandLOLToLaughingOutLoud() { JitterSession session = mock(JitterSession.class); when(session.getNextMessage()).thenReturn("Expand LOL please"); MessageExpander expander = new MessageExpander(session); assertThat(expander.getNextMessage(), equalTo("Expand laughing out loud please")); } } public class MessageExpander { public String getNextMessage() { String msg = session.getNextMessage(); return msg.replaceAll("LOL", "laughing out loud"); } 16 Copyright © 2010 Sterling Barton. All rights reserved. 16
  • 21. But  wait…what  if…? • What  if  LOL  is  wri:en  in  lower  case? • What  if  it  is  wri:en  as  “Lol”?  Should  it  be  expanded?   • What  if  some  variaFon  of  LOL  is  inside  a  word? • What  if  characters  surrounding  LOL  are  symbols,  not  le:ers?   Write  these  down  as  upcoming  programmer  tests  as  comments  so  I   don’t  forget  them.   // shouldExpandLOLIfLowerCase // shouldNotExpandLOLIfMixedCase // shouldNotExpandLOLIfInsideWord // shouldExpandIfSurroundingCharactersAreNotLetters 17 Copyright © 2010 Sterling Barton. All rights reserved. 17
  • 22. Expand  LOL  If  Lower  Case @Test public void shouldExpandLOLIfLowerCase() { when(session.getNextMessage()).thenReturn("Expand lol please"); MessageExpander expander = new MessageExpander(session); assertThat(expander.getNextMessage(), equalTo("Expand laughing out loud please")); } This  forced  use  of  java.u1l.regex.Pa6ern  to  handle  case  insensi1vity. public String getNextMessage() { String msg = session.getNextMessage(); return Pattern.compile("LOL”, Pattern.CASE_INSENSITIVE) .matcher(msg).replaceAll("laughing out loud"); } 18 Copyright © 2010 Sterling Barton. All rights reserved. 18
  • 23. Don’t  Expand  “Lol”  –  Mixed-­‐Case @Test public void shouldNotExpandLOLIfMixedCase() { String msg = "Do not expand Lol please"; when(session.getNextMessage()).thenReturn(msg); MessageExpander expander = new MessageExpander(session); assertThat(expander.getNextMessage(), equalTo(msg)); } This  forced  me  to  stop  using  Pa6ern.CASE_INSENSITIVE  flag  in  pa6ern   compila1on.  Only  use  “LOL”  or  “lol”  for  replacement  criteria. public String getNextMessage() { String msg = session.getNextMessage(); return Pattern.compile("LOL|lol").matcher(msg) .replaceAll("laughing out loud"); } 19 Copyright © 2010 Sterling Barton. All rights reserved. 19
  • 24. Don’t  Expand  “LOL”  If  Inside  Word @Test public void shouldNotExpandLOLIfInsideWord() { String msg = "Do not expand PLOL or LOLP or PLOLP please"; when(session.getNextMessage()).thenReturn(msg); MessageExpander expander = new MessageExpander(session); assertThat(expander.getNextMessage(), equalTo(msg)); } The  pa6ern  matching  is  now  modified  to  use  spaces  around  each   varia1on  of  valid  LOL  shorthand. return Pattern.compile("sLOLs|slols").matcher(msg) .replaceAll("laughing out loud"); 20 Copyright © 2010 Sterling Barton. All rights reserved. 20
  • 25. Expand  “LOL”  If  Not  Inside  Word @Test public void shouldExpandIfSurroundingCharactersAreNotLetters() { when(session.getNextMessage()).thenReturn("Expand .lol! please"); MessageExpander expander = new MessageExpander(session); assertThat(expander.getNextMessage(), equalTo("Expand .laughing out loud! please")); } The  final  implementa1on  of  pa6ern  matching  code  looks  as  follows. return Pattern.compile("bLOLb|blolb").matcher(msg) .replaceAll("laughing out loud"); 21 Copyright © 2010 Sterling Barton. All rights reserved. 21
  • 26. Quality Debt “Promises make debt, and debt makes promises.” - Dutch Proverb 22 22
  • 27. Effect of Project Constraints on Quality © 2009-2010, 23 23
  • 28. Effect of Project Constraints on Quality © 2009-2010, 23 23
  • 29. “For every [dollar] of competitive advantage gained by cutting quality, it costs $4 to restore it; and software is an organizational asset and decisions to cut quality must be made by executive management and reflected in the financial statements.” - Ken Schwaber © 2009-2010, 24 24
  • 31. Configuration Management Debt “If releases are like giving birth, then you must be doing something wrong.” - Robert Benefield 26 26
  • 32. The Power of 2 Scripts: Deploy and Rollback © 2009-2010, 27 27
  • 33. Design Debt Design decays when not attended to so design software continually 28 28
  • 34. The value of technical aspects in an application or its surrounding infrastructure is the cost of not addressing them. © 2009-2010, 29 29
  • 35. * Abuse User Stories Implement Security for User Information * From “User Stories Applied” presented by Mike Cohn Agile 2006 © 2009-2010, 30 30
  • 36. * Abuse User Stories As a Malicious Hacker I Implement Security want to steal credit card for User Information information so that I can make fraudulent charges * From “User Stories Applied” presented by Mike Cohn Agile 2006 © 2009-2010, 30 30
  • 37. Abuse Story Writing Workshop Identify a user role who will try to abuse the application. Set a time box of 30 minutes to 1 hour for generating abuse stories. As pairs or individually, assume persona of the abuser role and brainstorm as many abuse stories as possible. This should take 5 to 15 minutes. As a team, identify abuse stories that are not valid or are duplicates and remove them. This should take 10 to 20 minutes. Prioritize abuse stories in terms of impact or value. Do this fast as possible. Give all abuse stories in priority order to the Product Owner to be prioritized in the Product Backlog. Provide clarification on abuse stories that the Product Owner does not understand well. © 2009-2010, 31 31
  • 38. Some Potential Abusers Malicious Hacker Mass of users SQL injector Disgruntled employee Naïve API user Impatient clicker Denial-of-service (DoS) attacker Sleazy user © 2009-2010, 32 32
  • 39. Lack of emphasis on software quality attributes contributes to decay © 2009-2010, 33 33
  • 40. Software Quality Attributes Defined © 2009-2010, 34 34
  • 41. Software Quality Attributes Rating Tool © 2009-2010, 35 35
  • 42. Platform Experience Debt “As in Nature, if an organization is too inflexible or stands still too long it will get eaten.” - James Burke (author and historian) 36 36
  • 43. Rather than creating teams to work on projects, let’s find ways to give projects to cross-functional teams. © 2009-2010, 37 37
  • 44. Component Team Configuration “Component Team” structure Separate Product Backlog Managing dependencies is often serialized Problematic integration issues are typically faced if multiple components are required to release Use an “Integration Team” to pull components together Causes more rework than “Feature Team” structure © 2009-2010, 38 38
  • 45. Feature Team Configuration “Feature Team” structure Uses common Product Backlog Integration is done in parallel Requires high levels of communication across teams to resolve integration issues Forces Product Owners to be more coordinated Sprints should be synchronized Cross team fertilization is a requirement to successfully deliver in parallel © 2009-2010, 39 39
  • 46. Principles for Managing Software Debt Maintain one list of work Emphasize quality Evolve tools and infrastructure continually Improve system design always Share knowledge across the organization And most importantly, get the right people to work on your software! © 2009-2010, 40 40
  • 47. Thank you Questions and Answers 41 41
  • 48. Chris Sterling – Sterling Barton, LLC Partner, Sterling Barton, LLC Author of Book “Managing Software Debt: Building for Inevitable Change” Consults on software technology, Agile technical practices, Scrum, and effective management techniques Email: chris@sterlingbarton.com Certified Scrum Trainer Web: http://www.agileevm.com http://www.sterlingbarton.com Blog: http://www.gettingagile.com Innovation Games® Trained Follow me on Twitter: @csterwa Facilitator Open Source Developer © 2009-2011, 42 42