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
 
coding is the .pptx
coding is the                      .pptxcoding is the                      .pptx
coding is the .pptxlaxmisorna12
 

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
 
coding is the .pptx
coding is the                      .pptxcoding is the                      .pptx
coding is the .pptx
 

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

Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherRemote DBA Services
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024Rafal Los
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAndrey Devyatkin
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdflior mazor
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?Antenna Manufacturer Coco
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...apidays
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Miguel Araújo
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Enterprise Knowledge
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century educationjfdjdjcjdnsjd
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobeapidays
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUK Journal
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...apidays
 
HTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation StrategiesHTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation StrategiesBoston Institute of Analytics
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processorsdebabhi2
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationSafe Software
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?Igalia
 

Recently uploaded (20)

Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdf
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 
HTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation StrategiesHTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation Strategies
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 

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