SlideShare a Scribd company logo
1 of 19
Download to read offline
Evolving Software
How to manage explosive growth
    without exploding code
Why does software change?

Adding a feature
Growth
                        Behavior is modified
Fixing a bug
Repair

Improving structure
Refactoring
                        Behavior stays the
                              same
Improving performance
Optimization
The balance of value
!
    Creating features and fixing bugs adds value
    directly to the product
    !
        We can measure the success of these activities by
        monitoring conversions and sales
!
    Performance optimization is empirical
    !
        We get hard data on whether we did it right or not
!
    Structural change is difficult to quantify
    !
        Impacts on features, bugs, and performance
    !
        Highly subjective
Why structural change matters
!
    Software growth is not constant
    !
        Bursts of activity; release and QA cycles
    !
        We can’t anticipate all future requirements
!
    We want change with minimum cost and effort
    !
        Requires code to be supple and adaptable
!
    We want predictable results from change
    !
        Requires effects of code changes to be localized
    !
        Requires loosely coupled, easily testable objects
Measuring Programming
!
    Creative activity: no statistical feedback to tell us
    whether we are reaching our goal in code
!
    Little or no correlation between time spent coding
    and quality of the result
!
    We can mine data from code syntax; version
    control history; bug trackers
    !
        But the same metrics have different meanings,
        depending on the particular team and codebase
Looking at code on a larger scale
!
    Methods per class         70




    !
        God class             60




!
    Lines per method          50




    !
        Complex method        40




    Revisions per code file
                                         Metric
!
                              30



    !
        Churn                 20


!
    Bug fixes per code file   10


    !
        Instability
                              0
Statistical Similarities
!
    All large code bases seem to share common
    statistical features
!
    The shapes of many software metrics conform to
    power law or log-normal distributions
!
    AKA: 80/20 rule, Pareto Principle, ‘long tail effect’
The shape of software
!
    These statistical discoveries give us a new way of
    looking at widely held ideas about software
    engineering:
    !
        The ‘Big Ball of Mud’ is the wrong metaphor — even
        messy legacy systems have a definite shape
    !
        The ‘Lego Hypothesis’ is invalid — object oriented
        software is not constructed by connecting reusable,
        modular components
What we say versus what we do
!
    Traditionally, we describe effects like overly long
    methods and complex classes as ‘code smells’
!
    But these effects seem to be common to every
    large code base in existence
!
    As software engineers, we have to account for this
    in our methodology
Behavioral Economics
!
    Psychological explanation for why code tends
    towards certain shapes
!
    Stronger incentives for getting something working
    quickly than sacrificing time and mental effort to
    create new abstractions
!
    Easier to reason about code changes in one place
!
    Naming things is one of the most difficult problems
    in software development
Actor Networks
!
    Sociological explanation for why code tends
    towards certain shapes
!
    Conway’s Law: structure of systems tends to
    mirror that of the organization building the system
!
    The boundary of an application is an entirely social
    construction
!
    Rationale for coding decisions is lost when
    developers leave the team or new requirements
    overwhelm an existing system
Accidental Complexity
!
    A by-product of the technology used to solve the
    problem
!
    Cost of change increases with the volume of code
!
    Code that is difficult to change
    !
        Unavoidable
    !
        Indicator of code not evolving to fit changing
        requirements
    !
        Indicator of a mismatch between chosen abstractions
        and the shape of the problem domain
Granularity
!
    Choice of programming language matters
!
    Translating a high-level concept into actual code
    !
        Coarse grained APIs are inflexible and require heavy
        customization and workarounds
    !
        Fine grained APIs are hard to use and require large
        amounts of wrapping code and sequential calls
!
    Architectural style:
    !
        Convention or Configuration
    !
        Library or Framework
How Buildings Learn
!
    Layers of a building grouped according to different
    rates of change:
    !
        STUFF
    !
        SPACE-PLAN
    !
        SERVICES
    !
        SKIN
    !
        STRUCTURE
    !
        SITE
How Applications Learn
!
    Layered architecture
    !
        Lower levels wrap infrastructure that changes less
        frequently
    !
        Upper levels wrap business logic that changes
        constantly
!
    Domain driven design
    !
        Minimize accidental complexity through a rigorous
        approach to language
    !
        Look for implicit models hidden in existing code and
        flesh them out
Ubiquitous Language
!
    A living document of all the terms, concepts, and
    relationships that drive product features
!
    Bridging product level thinking and technical
    architecture
!
    Models behaviour from a software point of view
!
    Encapsulates essential complexity
!
    Changes and evolves in sync with the product
Relentless Refactoring
!
    Refine the model; improve the language
    !
        Discover new organizing concepts
!
    Focus on the relationships between components
    !
        Each object has a single responsibility
    !
        Small pieces, loosely joined
!
    Break apart entanglements
    !
        Extract new classes and methods from existing code
    !
        Extract new applications from existing code
Component Boundaries

Application Logic
                    !
                        Dependencies are
                        transitive
Domain Model        !
                        Lower level packages
                        should never depend on
                        higher level packages

  Data Store
Evolving Architecture Patterns
!
    Strangler App
    !
        Introduce new architectural abstractions that wrap the
        existing system like a creeping vine that eventually
        overtakes the host tree
!
    Parallel Rewrite
    !
        New architecture develops side by side with the old
        system within a single app
!
    Extract App
    !
        New applications and service layers are spawned off
        the original system

More Related Content

Viewers also liked

Room 10 and 12 Tennis
Room 10 and 12 TennisRoom 10 and 12 Tennis
Room 10 and 12 Tennisclairer
 
Room 24 Inquiry Learning
Room 24 Inquiry LearningRoom 24 Inquiry Learning
Room 24 Inquiry Learningclairer
 
Snow at Oteha!
Snow at Oteha!Snow at Oteha!
Snow at Oteha!clairer
 
Thank You PTA
Thank You PTAThank You PTA
Thank You PTAclairer
 
Vals presentation apil nov 2014 for website - (2)
Vals presentation   apil nov 2014 for website - (2)Vals presentation   apil nov 2014 for website - (2)
Vals presentation apil nov 2014 for website - (2)grossalert
 
Tennis Lessons for Room 23
Tennis Lessons for Room 23Tennis Lessons for Room 23
Tennis Lessons for Room 23clairer
 
Room 17 and 24
Room 17 and 24Room 17 and 24
Room 17 and 24clairer
 
Interactive Drumming Show
Interactive Drumming ShowInteractive Drumming Show
Interactive Drumming Showclairer
 
Room 23 and 24 at Gymnastics
Room 23 and 24 at GymnasticsRoom 23 and 24 at Gymnastics
Room 23 and 24 at Gymnasticsclairer
 
Year 5 at the Gym
Year 5 at the GymYear 5 at the Gym
Year 5 at the Gymclairer
 
Junior Syndicate Cross Country 2011
Junior Syndicate Cross Country 2011Junior Syndicate Cross Country 2011
Junior Syndicate Cross Country 2011clairer
 
Room 9 Inquiry Learning
Room 9 Inquiry LearningRoom 9 Inquiry Learning
Room 9 Inquiry Learningclairer
 
Gwinnett vehicle demo
Gwinnett vehicle demoGwinnett vehicle demo
Gwinnett vehicle demogrossalert
 
Room 18 Inquiry Learning
Room 18 Inquiry LearningRoom 18 Inquiry Learning
Room 18 Inquiry Learningclairer
 
Rippa Rugby
Rippa RugbyRippa Rugby
Rippa Rugbyclairer
 
Getting to Grips with SilverStripe Testing
Getting to Grips with SilverStripe TestingGetting to Grips with SilverStripe Testing
Getting to Grips with SilverStripe TestingMark Rickerby
 

Viewers also liked (18)

Room 10 and 12 Tennis
Room 10 and 12 TennisRoom 10 and 12 Tennis
Room 10 and 12 Tennis
 
Room 24 Inquiry Learning
Room 24 Inquiry LearningRoom 24 Inquiry Learning
Room 24 Inquiry Learning
 
Snow at Oteha!
Snow at Oteha!Snow at Oteha!
Snow at Oteha!
 
Thank You PTA
Thank You PTAThank You PTA
Thank You PTA
 
Vals presentation apil nov 2014 for website - (2)
Vals presentation   apil nov 2014 for website - (2)Vals presentation   apil nov 2014 for website - (2)
Vals presentation apil nov 2014 for website - (2)
 
Tennis Lessons for Room 23
Tennis Lessons for Room 23Tennis Lessons for Room 23
Tennis Lessons for Room 23
 
Room 17 and 24
Room 17 and 24Room 17 and 24
Room 17 and 24
 
Interactive Drumming Show
Interactive Drumming ShowInteractive Drumming Show
Interactive Drumming Show
 
Room 23 and 24 at Gymnastics
Room 23 and 24 at GymnasticsRoom 23 and 24 at Gymnastics
Room 23 and 24 at Gymnastics
 
Year 5 at the Gym
Year 5 at the GymYear 5 at the Gym
Year 5 at the Gym
 
Junior Syndicate Cross Country 2011
Junior Syndicate Cross Country 2011Junior Syndicate Cross Country 2011
Junior Syndicate Cross Country 2011
 
Room 9 Inquiry Learning
Room 9 Inquiry LearningRoom 9 Inquiry Learning
Room 9 Inquiry Learning
 
Historiographica
HistoriographicaHistoriographica
Historiographica
 
NetArt History
NetArt HistoryNetArt History
NetArt History
 
Gwinnett vehicle demo
Gwinnett vehicle demoGwinnett vehicle demo
Gwinnett vehicle demo
 
Room 18 Inquiry Learning
Room 18 Inquiry LearningRoom 18 Inquiry Learning
Room 18 Inquiry Learning
 
Rippa Rugby
Rippa RugbyRippa Rugby
Rippa Rugby
 
Getting to Grips with SilverStripe Testing
Getting to Grips with SilverStripe TestingGetting to Grips with SilverStripe Testing
Getting to Grips with SilverStripe Testing
 

Similar to Evolving Software Patterns

CASE tools and their effects on software quality
CASE tools and their effects on software qualityCASE tools and their effects on software quality
CASE tools and their effects on software qualityUtkarsh Agarwal
 
Building Commercial Applications with Oracle Applications Express by Scott Sp...
Building Commercial Applications with Oracle Applications Express by Scott Sp...Building Commercial Applications with Oracle Applications Express by Scott Sp...
Building Commercial Applications with Oracle Applications Express by Scott Sp...Enkitec
 
Build, upgrade and connect your applications to the World
Build, upgrade and connect your applications to the WorldBuild, upgrade and connect your applications to the World
Build, upgrade and connect your applications to the WorldCLMS UK Ltd
 
Measuring Your Code
Measuring Your CodeMeasuring Your Code
Measuring Your CodeNate Abele
 
Questions Every software engineer should answer
Questions Every software engineer should answerQuestions Every software engineer should answer
Questions Every software engineer should answerErtan Deniz
 
Coupling based structural metrics for measuring the quality of a software (sy...
Coupling based structural metrics for measuring the quality of a software (sy...Coupling based structural metrics for measuring the quality of a software (sy...
Coupling based structural metrics for measuring the quality of a software (sy...Mumbai Academisc
 
Pointcut Rejuvenation: Recovering Pointcut Expressions in Evolving Aspect-Ori...
Pointcut Rejuvenation: Recovering Pointcut Expressions in Evolving Aspect-Ori...Pointcut Rejuvenation: Recovering Pointcut Expressions in Evolving Aspect-Ori...
Pointcut Rejuvenation: Recovering Pointcut Expressions in Evolving Aspect-Ori...Raffi Khatchadourian
 
No Silver Bullet - Essence and Accidents of Software Engineering
No Silver Bullet - Essence and Accidents of Software EngineeringNo Silver Bullet - Essence and Accidents of Software Engineering
No Silver Bullet - Essence and Accidents of Software EngineeringAditi Abhang
 
Developer Job in Practice
Developer Job in PracticeDeveloper Job in Practice
Developer Job in Practiceintive
 
Reusability Vs Extensibility and Methodologies in OOAD
Reusability Vs Extensibility and Methodologies in OOADReusability Vs Extensibility and Methodologies in OOAD
Reusability Vs Extensibility and Methodologies in OOADSayyada Ayesha
 
Tactics Esb Implementation
Tactics Esb ImplementationTactics Esb Implementation
Tactics Esb ImplementationMurali Manohar
 
Evolutionary Design Solid
Evolutionary Design SolidEvolutionary Design Solid
Evolutionary Design SolidSai Venkat
 
Lecture 19 design concepts
Lecture 19   design conceptsLecture 19   design concepts
Lecture 19 design conceptsIIUI
 
Agile Software Design
Agile Software DesignAgile Software Design
Agile Software Designeduardomg23
 

Similar to Evolving Software Patterns (20)

Software Patterns
Software PatternsSoftware Patterns
Software Patterns
 
CASE tools and their effects on software quality
CASE tools and their effects on software qualityCASE tools and their effects on software quality
CASE tools and their effects on software quality
 
Building Commercial Applications with Oracle Applications Express by Scott Sp...
Building Commercial Applications with Oracle Applications Express by Scott Sp...Building Commercial Applications with Oracle Applications Express by Scott Sp...
Building Commercial Applications with Oracle Applications Express by Scott Sp...
 
Introduction to CodeFactory
Introduction to CodeFactoryIntroduction to CodeFactory
Introduction to CodeFactory
 
The Modern Software Architect
The Modern Software ArchitectThe Modern Software Architect
The Modern Software Architect
 
Build, upgrade and connect your applications to the World
Build, upgrade and connect your applications to the WorldBuild, upgrade and connect your applications to the World
Build, upgrade and connect your applications to the World
 
Measuring Your Code
Measuring Your CodeMeasuring Your Code
Measuring Your Code
 
1. Introduction
1. Introduction1. Introduction
1. Introduction
 
Questions Every software engineer should answer
Questions Every software engineer should answerQuestions Every software engineer should answer
Questions Every software engineer should answer
 
01 the big_idea
01 the big_idea01 the big_idea
01 the big_idea
 
Coupling based structural metrics for measuring the quality of a software (sy...
Coupling based structural metrics for measuring the quality of a software (sy...Coupling based structural metrics for measuring the quality of a software (sy...
Coupling based structural metrics for measuring the quality of a software (sy...
 
Pointcut Rejuvenation: Recovering Pointcut Expressions in Evolving Aspect-Ori...
Pointcut Rejuvenation: Recovering Pointcut Expressions in Evolving Aspect-Ori...Pointcut Rejuvenation: Recovering Pointcut Expressions in Evolving Aspect-Ori...
Pointcut Rejuvenation: Recovering Pointcut Expressions in Evolving Aspect-Ori...
 
No Silver Bullet - Essence and Accidents of Software Engineering
No Silver Bullet - Essence and Accidents of Software EngineeringNo Silver Bullet - Essence and Accidents of Software Engineering
No Silver Bullet - Essence and Accidents of Software Engineering
 
Developer Job in Practice
Developer Job in PracticeDeveloper Job in Practice
Developer Job in Practice
 
Reusability Vs Extensibility and Methodologies in OOAD
Reusability Vs Extensibility and Methodologies in OOADReusability Vs Extensibility and Methodologies in OOAD
Reusability Vs Extensibility and Methodologies in OOAD
 
Tactics Esb Implementation
Tactics Esb ImplementationTactics Esb Implementation
Tactics Esb Implementation
 
Evolutionary Design Solid
Evolutionary Design SolidEvolutionary Design Solid
Evolutionary Design Solid
 
Lecture 19 design concepts
Lecture 19   design conceptsLecture 19   design concepts
Lecture 19 design concepts
 
Domain Driven Design
Domain Driven DesignDomain Driven Design
Domain Driven Design
 
Agile Software Design
Agile Software DesignAgile Software Design
Agile Software Design
 

More from Mark Rickerby

Behaviour Driven Development
Behaviour Driven DevelopmentBehaviour Driven Development
Behaviour Driven DevelopmentMark Rickerby
 
Readme Driven Development
Readme Driven DevelopmentReadme Driven Development
Readme Driven DevelopmentMark Rickerby
 
Relentless Refactoring
Relentless RefactoringRelentless Refactoring
Relentless RefactoringMark Rickerby
 
Understanding Uncertainty
Understanding UncertaintyUnderstanding Uncertainty
Understanding UncertaintyMark Rickerby
 
The Relativity of Rates
The Relativity of RatesThe Relativity of Rates
The Relativity of RatesMark Rickerby
 
Adaptive Design & Rapid Prototyping
Adaptive Design & Rapid PrototypingAdaptive Design & Rapid Prototyping
Adaptive Design & Rapid PrototypingMark Rickerby
 

More from Mark Rickerby (7)

The D3 Toolbox
The D3 ToolboxThe D3 Toolbox
The D3 Toolbox
 
Behaviour Driven Development
Behaviour Driven DevelopmentBehaviour Driven Development
Behaviour Driven Development
 
Readme Driven Development
Readme Driven DevelopmentReadme Driven Development
Readme Driven Development
 
Relentless Refactoring
Relentless RefactoringRelentless Refactoring
Relentless Refactoring
 
Understanding Uncertainty
Understanding UncertaintyUnderstanding Uncertainty
Understanding Uncertainty
 
The Relativity of Rates
The Relativity of RatesThe Relativity of Rates
The Relativity of Rates
 
Adaptive Design & Rapid Prototyping
Adaptive Design & Rapid PrototypingAdaptive Design & Rapid Prototyping
Adaptive Design & Rapid Prototyping
 

Recently uploaded

React JS; all concepts. Contains React Features, JSX, functional & Class comp...
React JS; all concepts. Contains React Features, JSX, functional & Class comp...React JS; all concepts. Contains React Features, JSX, functional & Class comp...
React JS; all concepts. Contains React Features, JSX, functional & Class comp...Karmanjay Verma
 
JET Technology Labs White Paper for Virtualized Security and Encryption Techn...
JET Technology Labs White Paper for Virtualized Security and Encryption Techn...JET Technology Labs White Paper for Virtualized Security and Encryption Techn...
JET Technology Labs White Paper for Virtualized Security and Encryption Techn...amber724300
 
A Framework for Development in the AI Age
A Framework for Development in the AI AgeA Framework for Development in the AI Age
A Framework for Development in the AI AgeCprime
 
Abdul Kader Baba- Managing Cybersecurity Risks and Compliance Requirements i...
Abdul Kader Baba- Managing Cybersecurity Risks  and Compliance Requirements i...Abdul Kader Baba- Managing Cybersecurity Risks  and Compliance Requirements i...
Abdul Kader Baba- Managing Cybersecurity Risks and Compliance Requirements i...itnewsafrica
 
WomenInAutomation2024: AI and Automation for eveyone
WomenInAutomation2024: AI and Automation for eveyoneWomenInAutomation2024: AI and Automation for eveyone
WomenInAutomation2024: AI and Automation for eveyoneUiPathCommunity
 
Digital Tools & AI in Career Development
Digital Tools & AI in Career DevelopmentDigital Tools & AI in Career Development
Digital Tools & AI in Career DevelopmentMahmoud Rabie
 
Landscape Catalogue 2024 Australia-1.pdf
Landscape Catalogue 2024 Australia-1.pdfLandscape Catalogue 2024 Australia-1.pdf
Landscape Catalogue 2024 Australia-1.pdfAarwolf Industries LLC
 
Tampa BSides - The No BS SOC (slides from April 6, 2024 talk)
Tampa BSides - The No BS SOC (slides from April 6, 2024 talk)Tampa BSides - The No BS SOC (slides from April 6, 2024 talk)
Tampa BSides - The No BS SOC (slides from April 6, 2024 talk)Mark Simos
 
A Glance At The Java Performance Toolbox
A Glance At The Java Performance ToolboxA Glance At The Java Performance Toolbox
A Glance At The Java Performance ToolboxAna-Maria Mihalceanu
 
Potential of AI (Generative AI) in Business: Learnings and Insights
Potential of AI (Generative AI) in Business: Learnings and InsightsPotential of AI (Generative AI) in Business: Learnings and Insights
Potential of AI (Generative AI) in Business: Learnings and InsightsRavi Sanghani
 
Accelerating Enterprise Software Engineering with Platformless
Accelerating Enterprise Software Engineering with PlatformlessAccelerating Enterprise Software Engineering with Platformless
Accelerating Enterprise Software Engineering with PlatformlessWSO2
 
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyesHow to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyesThousandEyes
 
Transcript: New from BookNet Canada for 2024: BNC SalesData and LibraryData -...
Transcript: New from BookNet Canada for 2024: BNC SalesData and LibraryData -...Transcript: New from BookNet Canada for 2024: BNC SalesData and LibraryData -...
Transcript: New from BookNet Canada for 2024: BNC SalesData and LibraryData -...BookNet Canada
 
Testing tools and AI - ideas what to try with some tool examples
Testing tools and AI - ideas what to try with some tool examplesTesting tools and AI - ideas what to try with some tool examples
Testing tools and AI - ideas what to try with some tool examplesKari Kakkonen
 
Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...Farhan Tariq
 
Assure Ecommerce and Retail Operations Uptime with ThousandEyes
Assure Ecommerce and Retail Operations Uptime with ThousandEyesAssure Ecommerce and Retail Operations Uptime with ThousandEyes
Assure Ecommerce and Retail Operations Uptime with ThousandEyesThousandEyes
 
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24Mark Goldstein
 
Kuma Meshes Part I - The basics - A tutorial
Kuma Meshes Part I - The basics - A tutorialKuma Meshes Part I - The basics - A tutorial
Kuma Meshes Part I - The basics - A tutorialJoão Esperancinha
 
Infrared simulation and processing on Nvidia platforms
Infrared simulation and processing on Nvidia platformsInfrared simulation and processing on Nvidia platforms
Infrared simulation and processing on Nvidia platformsYoss Cohen
 

Recently uploaded (20)

React JS; all concepts. Contains React Features, JSX, functional & Class comp...
React JS; all concepts. Contains React Features, JSX, functional & Class comp...React JS; all concepts. Contains React Features, JSX, functional & Class comp...
React JS; all concepts. Contains React Features, JSX, functional & Class comp...
 
JET Technology Labs White Paper for Virtualized Security and Encryption Techn...
JET Technology Labs White Paper for Virtualized Security and Encryption Techn...JET Technology Labs White Paper for Virtualized Security and Encryption Techn...
JET Technology Labs White Paper for Virtualized Security and Encryption Techn...
 
A Framework for Development in the AI Age
A Framework for Development in the AI AgeA Framework for Development in the AI Age
A Framework for Development in the AI Age
 
Abdul Kader Baba- Managing Cybersecurity Risks and Compliance Requirements i...
Abdul Kader Baba- Managing Cybersecurity Risks  and Compliance Requirements i...Abdul Kader Baba- Managing Cybersecurity Risks  and Compliance Requirements i...
Abdul Kader Baba- Managing Cybersecurity Risks and Compliance Requirements i...
 
WomenInAutomation2024: AI and Automation for eveyone
WomenInAutomation2024: AI and Automation for eveyoneWomenInAutomation2024: AI and Automation for eveyone
WomenInAutomation2024: AI and Automation for eveyone
 
Digital Tools & AI in Career Development
Digital Tools & AI in Career DevelopmentDigital Tools & AI in Career Development
Digital Tools & AI in Career Development
 
Landscape Catalogue 2024 Australia-1.pdf
Landscape Catalogue 2024 Australia-1.pdfLandscape Catalogue 2024 Australia-1.pdf
Landscape Catalogue 2024 Australia-1.pdf
 
Tampa BSides - The No BS SOC (slides from April 6, 2024 talk)
Tampa BSides - The No BS SOC (slides from April 6, 2024 talk)Tampa BSides - The No BS SOC (slides from April 6, 2024 talk)
Tampa BSides - The No BS SOC (slides from April 6, 2024 talk)
 
A Glance At The Java Performance Toolbox
A Glance At The Java Performance ToolboxA Glance At The Java Performance Toolbox
A Glance At The Java Performance Toolbox
 
Potential of AI (Generative AI) in Business: Learnings and Insights
Potential of AI (Generative AI) in Business: Learnings and InsightsPotential of AI (Generative AI) in Business: Learnings and Insights
Potential of AI (Generative AI) in Business: Learnings and Insights
 
Accelerating Enterprise Software Engineering with Platformless
Accelerating Enterprise Software Engineering with PlatformlessAccelerating Enterprise Software Engineering with Platformless
Accelerating Enterprise Software Engineering with Platformless
 
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyesHow to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
 
Transcript: New from BookNet Canada for 2024: BNC SalesData and LibraryData -...
Transcript: New from BookNet Canada for 2024: BNC SalesData and LibraryData -...Transcript: New from BookNet Canada for 2024: BNC SalesData and LibraryData -...
Transcript: New from BookNet Canada for 2024: BNC SalesData and LibraryData -...
 
Testing tools and AI - ideas what to try with some tool examples
Testing tools and AI - ideas what to try with some tool examplesTesting tools and AI - ideas what to try with some tool examples
Testing tools and AI - ideas what to try with some tool examples
 
How Tech Giants Cut Corners to Harvest Data for A.I.
How Tech Giants Cut Corners to Harvest Data for A.I.How Tech Giants Cut Corners to Harvest Data for A.I.
How Tech Giants Cut Corners to Harvest Data for A.I.
 
Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...
 
Assure Ecommerce and Retail Operations Uptime with ThousandEyes
Assure Ecommerce and Retail Operations Uptime with ThousandEyesAssure Ecommerce and Retail Operations Uptime with ThousandEyes
Assure Ecommerce and Retail Operations Uptime with ThousandEyes
 
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
 
Kuma Meshes Part I - The basics - A tutorial
Kuma Meshes Part I - The basics - A tutorialKuma Meshes Part I - The basics - A tutorial
Kuma Meshes Part I - The basics - A tutorial
 
Infrared simulation and processing on Nvidia platforms
Infrared simulation and processing on Nvidia platformsInfrared simulation and processing on Nvidia platforms
Infrared simulation and processing on Nvidia platforms
 

Evolving Software Patterns

  • 1. Evolving Software How to manage explosive growth without exploding code
  • 2. Why does software change? Adding a feature Growth Behavior is modified Fixing a bug Repair Improving structure Refactoring Behavior stays the same Improving performance Optimization
  • 3. The balance of value ! Creating features and fixing bugs adds value directly to the product ! We can measure the success of these activities by monitoring conversions and sales ! Performance optimization is empirical ! We get hard data on whether we did it right or not ! Structural change is difficult to quantify ! Impacts on features, bugs, and performance ! Highly subjective
  • 4. Why structural change matters ! Software growth is not constant ! Bursts of activity; release and QA cycles ! We can’t anticipate all future requirements ! We want change with minimum cost and effort ! Requires code to be supple and adaptable ! We want predictable results from change ! Requires effects of code changes to be localized ! Requires loosely coupled, easily testable objects
  • 5. Measuring Programming ! Creative activity: no statistical feedback to tell us whether we are reaching our goal in code ! Little or no correlation between time spent coding and quality of the result ! We can mine data from code syntax; version control history; bug trackers ! But the same metrics have different meanings, depending on the particular team and codebase
  • 6. Looking at code on a larger scale ! Methods per class 70 ! God class 60 ! Lines per method 50 ! Complex method 40 Revisions per code file Metric ! 30 ! Churn 20 ! Bug fixes per code file 10 ! Instability 0
  • 7. Statistical Similarities ! All large code bases seem to share common statistical features ! The shapes of many software metrics conform to power law or log-normal distributions ! AKA: 80/20 rule, Pareto Principle, ‘long tail effect’
  • 8. The shape of software ! These statistical discoveries give us a new way of looking at widely held ideas about software engineering: ! The ‘Big Ball of Mud’ is the wrong metaphor — even messy legacy systems have a definite shape ! The ‘Lego Hypothesis’ is invalid — object oriented software is not constructed by connecting reusable, modular components
  • 9. What we say versus what we do ! Traditionally, we describe effects like overly long methods and complex classes as ‘code smells’ ! But these effects seem to be common to every large code base in existence ! As software engineers, we have to account for this in our methodology
  • 10. Behavioral Economics ! Psychological explanation for why code tends towards certain shapes ! Stronger incentives for getting something working quickly than sacrificing time and mental effort to create new abstractions ! Easier to reason about code changes in one place ! Naming things is one of the most difficult problems in software development
  • 11. Actor Networks ! Sociological explanation for why code tends towards certain shapes ! Conway’s Law: structure of systems tends to mirror that of the organization building the system ! The boundary of an application is an entirely social construction ! Rationale for coding decisions is lost when developers leave the team or new requirements overwhelm an existing system
  • 12. Accidental Complexity ! A by-product of the technology used to solve the problem ! Cost of change increases with the volume of code ! Code that is difficult to change ! Unavoidable ! Indicator of code not evolving to fit changing requirements ! Indicator of a mismatch between chosen abstractions and the shape of the problem domain
  • 13. Granularity ! Choice of programming language matters ! Translating a high-level concept into actual code ! Coarse grained APIs are inflexible and require heavy customization and workarounds ! Fine grained APIs are hard to use and require large amounts of wrapping code and sequential calls ! Architectural style: ! Convention or Configuration ! Library or Framework
  • 14. How Buildings Learn ! Layers of a building grouped according to different rates of change: ! STUFF ! SPACE-PLAN ! SERVICES ! SKIN ! STRUCTURE ! SITE
  • 15. How Applications Learn ! Layered architecture ! Lower levels wrap infrastructure that changes less frequently ! Upper levels wrap business logic that changes constantly ! Domain driven design ! Minimize accidental complexity through a rigorous approach to language ! Look for implicit models hidden in existing code and flesh them out
  • 16. Ubiquitous Language ! A living document of all the terms, concepts, and relationships that drive product features ! Bridging product level thinking and technical architecture ! Models behaviour from a software point of view ! Encapsulates essential complexity ! Changes and evolves in sync with the product
  • 17. Relentless Refactoring ! Refine the model; improve the language ! Discover new organizing concepts ! Focus on the relationships between components ! Each object has a single responsibility ! Small pieces, loosely joined ! Break apart entanglements ! Extract new classes and methods from existing code ! Extract new applications from existing code
  • 18. Component Boundaries Application Logic ! Dependencies are transitive Domain Model ! Lower level packages should never depend on higher level packages Data Store
  • 19. Evolving Architecture Patterns ! Strangler App ! Introduce new architectural abstractions that wrap the existing system like a creeping vine that eventually overtakes the host tree ! Parallel Rewrite ! New architecture develops side by side with the old system within a single app ! Extract App ! New applications and service layers are spawned off the original system