SlideShare a Scribd company logo
1 of 32
Download to read offline
Evolving Software
                Five powerful metaphors to explain change




Agile Portugal 2010 • Filipe Figueiredo Correia • filipe.correia@fe.up.pt
                           FEUP / ParadigmaXis
Metaphors
●   Human thought is fundamentally
    metaphorical
●   Metaphors: understanding concepts in
    terms of another concepts!
●   Metaphors hide some aspects and make
    us focus on another
Metaphors
●   Some examples
    ●   Life is a container
        –   I've had a full life
        –   He's got an empty life
        –   There's not much left for him in life
        –   Get the most out of life
    ●   Having control is up; being subject to control is down
        –   I am on top of the situation
        –   His in a high command
        –   I am under his control
        –   His power is on the decline


                                   from “Metaphors We Live By” by George Lakoff and Mark Johnson
Metaphors in Software Development
●   Metaphors are pervasive in software
    development
●   They are a primary tool for thought
●   But also priceless to explain non-trivial
    ideas!
Metaphors in Software Development
●   This presentation is about “responding to
    change”
●   We will look at five software evolution
    metaphors:
    ●   Learning to Drive
    ●   Software Aging
    ●   Technical Debt
    ●   Code Smell
    ●   Big Ball of Mud
Metaphors and the Agile Movement
●   eXtreme Programming practice: "System
    Metaphor"
      “the software project is guided by a single
      overarching metaphor that describes how the
      whole system works”
●   But, to find “a single overarching
    metaphor” is usually very difficult!
Metaphors and the Agile Movement
●   More often developers use a set of
    smaller metaphors to describe specific
    parts of the system
●   E.g., Most Design Patterns have a
    metaphorical name:
    ●   Observer
    ●   Singleton
    ●   Visitor
    ●   ...
Learning to Drive




             http://www.flickr.com/photos/terwilliger911/473246309/
Learning to Drive




“Driving is about constantly paying attention,
  making a little correction this way, a little
             correction that way”
                                   Kent Beck's mother




                              http://www.flickr.com/photos/terwilliger911/473246309/
Learning to Drive
●   Kent Beck
    Book: eXtreme Programming Explained – Embrace Change. Addison-Wesley

●   Metaphor of driving a car
    ●   Costumers drive the domain understanding
    ●   The whole team drives the development process
    ●   The paradigm of XP: Stay aware. Adapt. Change.
    ●   Everything in software projects changes: business,
        requirements, design, technology, the team itself!
    ●   Change is inevitable. To cope with it, we must adapt.
Software Aging




           http://www.flickr.com/photos/steffe/300053732/
Software Aging



●“Programs, like people, get old. We can't
 prevent aging, but we can understand its
  causes, take steps to limits its effects,
temporarily reverse some of the damage it
has caused, and prepare for the day when
     the software is no longer viable”
                                          David Parnas




                            http://www.flickr.com/photos/steffe/300053732/
Software Aging
●   David Parnas
    Paper: “Software Aging” ICSE 1994

●   Sometimes referred to as “Decay”
●   Human life metaphor
    ●   Like people, software loses some of its capabilities
        with time
    ●   The alternative to aging is death. Software aging
        happens to all successful products!
    ●   Constantly updating software to new user needs
        will decrease the effects of age. Of course,
        “congenital illnesses” may also exist...
Software Aging
Technical Debt




           http://www.flickr.com/photos/daviddmuir/2125697998/
Technical Debt




●   “Shipping first time code is like
            going into debt”
                         Ward Cunnigham




                            http://www.flickr.com/photos/daviddmuir/2125697998/
Technical Debt
●   Ward Cunningham
    Experience report: “The WyCash portfolio management system” OOPSLA 1992

●   Financial metaphor
    ●   It's like paying interest on a loan:
        –   Borrowed money allows to do something sooner
        –   But you'll be paying interest until you pay it back
    ●   Can you borrow money and never pay it back? That's what is
        frequently tried in software development... but:
        –   You may reach a point when you lose all your purchasing power, and
            all you do is pay interest
●   Emphasis on the technical aspects. E.g., We are not
    talking about how many requirements are implemented
Technical Debt
Technical Debt
Technical Debt
Technical Debt
Technical Debt
●   Misconceptions clarified...
    ●   Debt is writing code that doesn't reflect your
        current understanding
    ●   It is not the same as writing code poorly!
    ●   Debt is a good idea! Using the debt metaphor
        will work in your advantage if you refactor
        –   Rapid delivery of value
        –   Time-to-market...
Code Smell




         http://www.flickr.com/photos/19779889@N00/460032282/
Code Smell




●   “Highly experienced and knowledgeable
    developers have a 'feel' for good design”

                                                        c2.com




                               http://www.flickr.com/photos/19779889@N00/460032282/
Code Smell
●   Kent Beck
    @ c2.com: http://xp.c2.com/OnceAndOnlyOnce.html and http://xp.c2.com/CodeSmell.html

●   Metaphor of the human sense of smell
    ●   Like when something smells badly, experienced developers
        sense the code isn't quite right. They identify source-code
        constructs that are correlated with a lacking implementation
    ●    Like with an actual smell, you may not know what's its concrete
        origin
    ●   When something is smelling badly close to you, you may want to
        take a closer look and find what is the cause
    ●   A code smell is not a certainty that something should be
        changed, it is only a hint
Big Ball of Mud




            http://www.flickr.com/photos/19779889@N00/460032282/
Big Ball of Mud




   ●“A BBoM is haphazardly structured,
sprawling, sloppy, duct-tape and bailing wire,
           spaghetti code jungle.”
                            Brian Foote & Joe Yoder




                              http://www.flickr.com/photos/19779889@N00/460032282/
Big Ball of Mud
●   Brian Foote and Joseph Yoder
    Paper: “Big Ball of Mud” PLoP 1999

●   Also known as spaghetti code
●   Metaphor of a formless and tightly coupled mass
    ●   “Unregulated growth, and repeated, expedient repair”
    ●   “Real mud” may keep together as a randomly cohesive
        and formless volume. Code may also lack form (design)
    ●   “Real mud” gets people dirty. Muddy code is complex code,
        the options taken to maintain it frequently feel sub-optimal.
Concluding...
●   Metaphors are priceless to explain non-trivial ideas!
    ●   Learning to Drive
        Explaining someone the principles of adaptation to changing
        requirements?
    ●   Technical debt; Big Ball of Mud
        Explaining someone in your project the consequences of not
        refactoring?
    ●   Aging
        Explaining the difficulties of maintaining a legacy system?
    ●   Code Smell
        Explaining someone why should they refactor in a
        particular case?
Concluding...
●   Metaphors allows you to quickly reuse a set
    of constraints, that leads you to think a
    certain way... but those constraints may not
    match reality completely
    ●   “Argument is war” works in some ways and fails
        in another ways
        –   Argumentation strategy / line of attack / win the
            argument / …
●   Beware the use of weak metaphors to elude
    others... (i.e., intellectual impostures)
Questions?




Filipe Figueiredo Correia
     FEUP / ParadigmaXis
      filipe.correia@fe.up.pt




          2010 . 06 . 26
References
●   Metaphors We Live By
    George Lakoff and Mark Johnson

●   Software Metaphor Google Group
    Managed by Joshua Kerievsky
    http://groups.google.com/group/softwaremetaphor/

●   The metaphors:
    ●   Learning to Drive
        eXtreme Programming Explained – Embrace Change. Kent Beck. Addison-Wesley. 1999
    ●   Software Aging (decay)
        Software aging. David Parnas. ICSE. 1994
    ●   Technical Debt.
        Experience report: “The WyCash portfolio management system” OOPSLA 1992. Ward Cunningham
        http://www.c2.com/cgi/wiki?TechnicalDebt

    ●   Code smell
        c2.com. Kent Beck
        http://www.c2.com/cgi/wiki?CodeSmell

    ●   Big Ball of Mud
        PloP 1997. Brian Foote and Joseph Yoder

More Related Content

Viewers also liked

Metaphors we develop a software by 〜ソフトウェア開発に使うメタファー〜
Metaphors we develop a software by 〜ソフトウェア開発に使うメタファー〜Metaphors we develop a software by 〜ソフトウェア開発に使うメタファー〜
Metaphors we develop a software by 〜ソフトウェア開発に使うメタファー〜Takeshi Kakeda
 
Metaphors 16 47 29
Metaphors 16 47 29Metaphors 16 47 29
Metaphors 16 47 29guest97e352
 
Chapter 10 authoring
Chapter 10 authoringChapter 10 authoring
Chapter 10 authoringshelly3160
 
Introduction to monte-carlo analysis for software development - Troy Magennis...
Introduction to monte-carlo analysis for software development - Troy Magennis...Introduction to monte-carlo analysis for software development - Troy Magennis...
Introduction to monte-carlo analysis for software development - Troy Magennis...Troy Magennis
 
Metaphors we live by
Metaphors we live byMetaphors we live by
Metaphors we live byLinda Lyman
 
Managing in the presence of uncertainty
Managing in the presence of uncertaintyManaging in the presence of uncertainty
Managing in the presence of uncertaintyGlen Alleman
 
Metaphors we teach by
Metaphors we teach byMetaphors we teach by
Metaphors we teach byDavid Geelan
 

Viewers also liked (11)

Authoring Tools
Authoring ToolsAuthoring Tools
Authoring Tools
 
Metaphors we develop a software by 〜ソフトウェア開発に使うメタファー〜
Metaphors we develop a software by 〜ソフトウェア開発に使うメタファー〜Metaphors we develop a software by 〜ソフトウェア開発に使うメタファー〜
Metaphors we develop a software by 〜ソフトウェア開発に使うメタファー〜
 
Metaphors 16 47 29
Metaphors 16 47 29Metaphors 16 47 29
Metaphors 16 47 29
 
Chapter 10 authoring
Chapter 10 authoringChapter 10 authoring
Chapter 10 authoring
 
Introduction to monte-carlo analysis for software development - Troy Magennis...
Introduction to monte-carlo analysis for software development - Troy Magennis...Introduction to monte-carlo analysis for software development - Troy Magennis...
Introduction to monte-carlo analysis for software development - Troy Magennis...
 
Metaphors we live by
Metaphors we live byMetaphors we live by
Metaphors we live by
 
Learning metaphors
Learning metaphorsLearning metaphors
Learning metaphors
 
Managing in the presence of uncertainty
Managing in the presence of uncertaintyManaging in the presence of uncertainty
Managing in the presence of uncertainty
 
Control systems
Control systemsControl systems
Control systems
 
Metaphors
MetaphorsMetaphors
Metaphors
 
Metaphors we teach by
Metaphors we teach byMetaphors we teach by
Metaphors we teach by
 

Similar to AgilePT'10 - Evolving Software: Five powerful metaphors to explain change

Reversed Test Pyramid - Testing and dealing with Legacy Code
Reversed Test Pyramid - Testing and dealing with Legacy CodeReversed Test Pyramid - Testing and dealing with Legacy Code
Reversed Test Pyramid - Testing and dealing with Legacy CodeSQALab
 
Reversed Tests Pyramid - Agile Prague 2014
Reversed Tests Pyramid - Agile Prague 2014Reversed Tests Pyramid - Agile Prague 2014
Reversed Tests Pyramid - Agile Prague 2014Wiktor Żołnowski
 
Agile Software Development
Agile Software DevelopmentAgile Software Development
Agile Software DevelopmentAhmet Bulut
 
Killing the golden calf of coding - We are Developers keynote
Killing the golden calf of coding - We are Developers keynoteKilling the golden calf of coding - We are Developers keynote
Killing the golden calf of coding - We are Developers keynoteChristian Heilmann
 
Extreme programming - a quick and agile overview !
Extreme programming - a quick and agile overview !Extreme programming - a quick and agile overview !
Extreme programming - a quick and agile overview !Vinit Kumar Singh
 
What I have learned by dealing with a dungeon master
What I have learned by dealing with a dungeon masterWhat I have learned by dealing with a dungeon master
What I have learned by dealing with a dungeon masterRaúl Araya Tauler
 
Managing Rubyists GoRuCo 2010 PDF
Managing Rubyists GoRuCo 2010 PDFManaging Rubyists GoRuCo 2010 PDF
Managing Rubyists GoRuCo 2010 PDFLuke Melia
 
Front-End Fun: How to finally work with designers!
Front-End Fun: How to finally work with designers!Front-End Fun: How to finally work with designers!
Front-End Fun: How to finally work with designers!helenalozano6
 
Why Software Drives Us Crazy
Why Software Drives Us CrazyWhy Software Drives Us Crazy
Why Software Drives Us CrazyTechWell
 
How to get your app or site built
How to get your app or site builtHow to get your app or site built
How to get your app or site builtJoe Chin
 
Design of everyday things fundamental principles of interaction - V2
Design of everyday things   fundamental principles of interaction - V2Design of everyday things   fundamental principles of interaction - V2
Design of everyday things fundamental principles of interaction - V2Isaac Liao
 
Effective entrepreneurship for developers
Effective entrepreneurship for developersEffective entrepreneurship for developers
Effective entrepreneurship for developersCarlos Ble
 
The 360 Developer
The 360 DeveloperThe 360 Developer
The 360 Developerenteritos
 
Needs of Other November2011
Needs of Other November2011Needs of Other November2011
Needs of Other November2011Razi Masri
 
Making Effective Prototypes
Making Effective PrototypesMaking Effective Prototypes
Making Effective PrototypesMatthew Ho
 

Similar to AgilePT'10 - Evolving Software: Five powerful metaphors to explain change (20)

Reversed Test Pyramid - Testing and dealing with Legacy Code
Reversed Test Pyramid - Testing and dealing with Legacy CodeReversed Test Pyramid - Testing and dealing with Legacy Code
Reversed Test Pyramid - Testing and dealing with Legacy Code
 
Sqa days2013
Sqa days2013Sqa days2013
Sqa days2013
 
Reversed Tests Pyramid - Agile Prague 2014
Reversed Tests Pyramid - Agile Prague 2014Reversed Tests Pyramid - Agile Prague 2014
Reversed Tests Pyramid - Agile Prague 2014
 
Skillswap - Back To Basics
Skillswap - Back To BasicsSkillswap - Back To Basics
Skillswap - Back To Basics
 
Xp days ukraine 2012
Xp days ukraine 2012Xp days ukraine 2012
Xp days ukraine 2012
 
Secrets of Scrum
Secrets of ScrumSecrets of Scrum
Secrets of Scrum
 
Agile Software Development
Agile Software DevelopmentAgile Software Development
Agile Software Development
 
Killing the golden calf of coding - We are Developers keynote
Killing the golden calf of coding - We are Developers keynoteKilling the golden calf of coding - We are Developers keynote
Killing the golden calf of coding - We are Developers keynote
 
why agile?
why agile?why agile?
why agile?
 
Extreme programming - a quick and agile overview !
Extreme programming - a quick and agile overview !Extreme programming - a quick and agile overview !
Extreme programming - a quick and agile overview !
 
What I have learned by dealing with a dungeon master
What I have learned by dealing with a dungeon masterWhat I have learned by dealing with a dungeon master
What I have learned by dealing with a dungeon master
 
Managing Rubyists GoRuCo 2010 PDF
Managing Rubyists GoRuCo 2010 PDFManaging Rubyists GoRuCo 2010 PDF
Managing Rubyists GoRuCo 2010 PDF
 
Front-End Fun: How to finally work with designers!
Front-End Fun: How to finally work with designers!Front-End Fun: How to finally work with designers!
Front-End Fun: How to finally work with designers!
 
Why Software Drives Us Crazy
Why Software Drives Us CrazyWhy Software Drives Us Crazy
Why Software Drives Us Crazy
 
How to get your app or site built
How to get your app or site builtHow to get your app or site built
How to get your app or site built
 
Design of everyday things fundamental principles of interaction - V2
Design of everyday things   fundamental principles of interaction - V2Design of everyday things   fundamental principles of interaction - V2
Design of everyday things fundamental principles of interaction - V2
 
Effective entrepreneurship for developers
Effective entrepreneurship for developersEffective entrepreneurship for developers
Effective entrepreneurship for developers
 
The 360 Developer
The 360 DeveloperThe 360 Developer
The 360 Developer
 
Needs of Other November2011
Needs of Other November2011Needs of Other November2011
Needs of Other November2011
 
Making Effective Prototypes
Making Effective PrototypesMaking Effective Prototypes
Making Effective Prototypes
 

Recently uploaded

Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountPuma Security, LLC
 
Maximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxMaximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxOnBoard
 
Snow Chain-Integrated Tire for a Safe Drive on Winter Roads
Snow Chain-Integrated Tire for a Safe Drive on Winter RoadsSnow Chain-Integrated Tire for a Safe Drive on Winter Roads
Snow Chain-Integrated Tire for a Safe Drive on Winter RoadsHyundai Motor Group
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Patryk Bandurski
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...shyamraj55
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitecturePixlogix Infotech
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Scott Keck-Warren
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking MenDelhi Call girls
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonetsnaman860154
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsEnterprise Knowledge
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slidespraypatel2
 
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphSIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphNeo4j
 
Next-generation AAM aircraft unveiled by Supernal, S-A2
Next-generation AAM aircraft unveiled by Supernal, S-A2Next-generation AAM aircraft unveiled by Supernal, S-A2
Next-generation AAM aircraft unveiled by Supernal, S-A2Hyundai Motor Group
 
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptx
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptxMaking_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptx
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptxnull - The Open Security Community
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking MenDelhi Call girls
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreternaman860154
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machinePadma Pradeep
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationSafe Software
 
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | DelhiFULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhisoniya singh
 

Recently uploaded (20)

Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path Mount
 
Maximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxMaximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptx
 
Snow Chain-Integrated Tire for a Safe Drive on Winter Roads
Snow Chain-Integrated Tire for a Safe Drive on Winter RoadsSnow Chain-Integrated Tire for a Safe Drive on Winter Roads
Snow Chain-Integrated Tire for a Safe Drive on Winter Roads
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC Architecture
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
Vulnerability_Management_GRC_by Sohang Sengupta.pptx
Vulnerability_Management_GRC_by Sohang Sengupta.pptxVulnerability_Management_GRC_by Sohang Sengupta.pptx
Vulnerability_Management_GRC_by Sohang Sengupta.pptx
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slides
 
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphSIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
 
Next-generation AAM aircraft unveiled by Supernal, S-A2
Next-generation AAM aircraft unveiled by Supernal, S-A2Next-generation AAM aircraft unveiled by Supernal, S-A2
Next-generation AAM aircraft unveiled by Supernal, S-A2
 
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptx
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptxMaking_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptx
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptx
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machine
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
 
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | DelhiFULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
 

AgilePT'10 - Evolving Software: Five powerful metaphors to explain change

  • 1. Evolving Software Five powerful metaphors to explain change Agile Portugal 2010 • Filipe Figueiredo Correia • filipe.correia@fe.up.pt FEUP / ParadigmaXis
  • 2. Metaphors ● Human thought is fundamentally metaphorical ● Metaphors: understanding concepts in terms of another concepts! ● Metaphors hide some aspects and make us focus on another
  • 3. Metaphors ● Some examples ● Life is a container – I've had a full life – He's got an empty life – There's not much left for him in life – Get the most out of life ● Having control is up; being subject to control is down – I am on top of the situation – His in a high command – I am under his control – His power is on the decline from “Metaphors We Live By” by George Lakoff and Mark Johnson
  • 4. Metaphors in Software Development ● Metaphors are pervasive in software development ● They are a primary tool for thought ● But also priceless to explain non-trivial ideas!
  • 5. Metaphors in Software Development ● This presentation is about “responding to change” ● We will look at five software evolution metaphors: ● Learning to Drive ● Software Aging ● Technical Debt ● Code Smell ● Big Ball of Mud
  • 6. Metaphors and the Agile Movement ● eXtreme Programming practice: "System Metaphor" “the software project is guided by a single overarching metaphor that describes how the whole system works” ● But, to find “a single overarching metaphor” is usually very difficult!
  • 7. Metaphors and the Agile Movement ● More often developers use a set of smaller metaphors to describe specific parts of the system ● E.g., Most Design Patterns have a metaphorical name: ● Observer ● Singleton ● Visitor ● ...
  • 8. Learning to Drive http://www.flickr.com/photos/terwilliger911/473246309/
  • 9. Learning to Drive “Driving is about constantly paying attention, making a little correction this way, a little correction that way” Kent Beck's mother http://www.flickr.com/photos/terwilliger911/473246309/
  • 10. Learning to Drive ● Kent Beck Book: eXtreme Programming Explained – Embrace Change. Addison-Wesley ● Metaphor of driving a car ● Costumers drive the domain understanding ● The whole team drives the development process ● The paradigm of XP: Stay aware. Adapt. Change. ● Everything in software projects changes: business, requirements, design, technology, the team itself! ● Change is inevitable. To cope with it, we must adapt.
  • 11. Software Aging http://www.flickr.com/photos/steffe/300053732/
  • 12. Software Aging ●“Programs, like people, get old. We can't prevent aging, but we can understand its causes, take steps to limits its effects, temporarily reverse some of the damage it has caused, and prepare for the day when the software is no longer viable” David Parnas http://www.flickr.com/photos/steffe/300053732/
  • 13. Software Aging ● David Parnas Paper: “Software Aging” ICSE 1994 ● Sometimes referred to as “Decay” ● Human life metaphor ● Like people, software loses some of its capabilities with time ● The alternative to aging is death. Software aging happens to all successful products! ● Constantly updating software to new user needs will decrease the effects of age. Of course, “congenital illnesses” may also exist...
  • 15. Technical Debt http://www.flickr.com/photos/daviddmuir/2125697998/
  • 16. Technical Debt ● “Shipping first time code is like going into debt” Ward Cunnigham http://www.flickr.com/photos/daviddmuir/2125697998/
  • 17. Technical Debt ● Ward Cunningham Experience report: “The WyCash portfolio management system” OOPSLA 1992 ● Financial metaphor ● It's like paying interest on a loan: – Borrowed money allows to do something sooner – But you'll be paying interest until you pay it back ● Can you borrow money and never pay it back? That's what is frequently tried in software development... but: – You may reach a point when you lose all your purchasing power, and all you do is pay interest ● Emphasis on the technical aspects. E.g., We are not talking about how many requirements are implemented
  • 22. Technical Debt ● Misconceptions clarified... ● Debt is writing code that doesn't reflect your current understanding ● It is not the same as writing code poorly! ● Debt is a good idea! Using the debt metaphor will work in your advantage if you refactor – Rapid delivery of value – Time-to-market...
  • 23. Code Smell http://www.flickr.com/photos/19779889@N00/460032282/
  • 24. Code Smell ● “Highly experienced and knowledgeable developers have a 'feel' for good design” c2.com http://www.flickr.com/photos/19779889@N00/460032282/
  • 25. Code Smell ● Kent Beck @ c2.com: http://xp.c2.com/OnceAndOnlyOnce.html and http://xp.c2.com/CodeSmell.html ● Metaphor of the human sense of smell ● Like when something smells badly, experienced developers sense the code isn't quite right. They identify source-code constructs that are correlated with a lacking implementation ● Like with an actual smell, you may not know what's its concrete origin ● When something is smelling badly close to you, you may want to take a closer look and find what is the cause ● A code smell is not a certainty that something should be changed, it is only a hint
  • 26. Big Ball of Mud http://www.flickr.com/photos/19779889@N00/460032282/
  • 27. Big Ball of Mud ●“A BBoM is haphazardly structured, sprawling, sloppy, duct-tape and bailing wire, spaghetti code jungle.” Brian Foote & Joe Yoder http://www.flickr.com/photos/19779889@N00/460032282/
  • 28. Big Ball of Mud ● Brian Foote and Joseph Yoder Paper: “Big Ball of Mud” PLoP 1999 ● Also known as spaghetti code ● Metaphor of a formless and tightly coupled mass ● “Unregulated growth, and repeated, expedient repair” ● “Real mud” may keep together as a randomly cohesive and formless volume. Code may also lack form (design) ● “Real mud” gets people dirty. Muddy code is complex code, the options taken to maintain it frequently feel sub-optimal.
  • 29. Concluding... ● Metaphors are priceless to explain non-trivial ideas! ● Learning to Drive Explaining someone the principles of adaptation to changing requirements? ● Technical debt; Big Ball of Mud Explaining someone in your project the consequences of not refactoring? ● Aging Explaining the difficulties of maintaining a legacy system? ● Code Smell Explaining someone why should they refactor in a particular case?
  • 30. Concluding... ● Metaphors allows you to quickly reuse a set of constraints, that leads you to think a certain way... but those constraints may not match reality completely ● “Argument is war” works in some ways and fails in another ways – Argumentation strategy / line of attack / win the argument / … ● Beware the use of weak metaphors to elude others... (i.e., intellectual impostures)
  • 31. Questions? Filipe Figueiredo Correia FEUP / ParadigmaXis filipe.correia@fe.up.pt 2010 . 06 . 26
  • 32. References ● Metaphors We Live By George Lakoff and Mark Johnson ● Software Metaphor Google Group Managed by Joshua Kerievsky http://groups.google.com/group/softwaremetaphor/ ● The metaphors: ● Learning to Drive eXtreme Programming Explained – Embrace Change. Kent Beck. Addison-Wesley. 1999 ● Software Aging (decay) Software aging. David Parnas. ICSE. 1994 ● Technical Debt. Experience report: “The WyCash portfolio management system” OOPSLA 1992. Ward Cunningham http://www.c2.com/cgi/wiki?TechnicalDebt ● Code smell c2.com. Kent Beck http://www.c2.com/cgi/wiki?CodeSmell ● Big Ball of Mud PloP 1997. Brian Foote and Joseph Yoder