SlideShare a Scribd company logo
Client Technical Analysis
of Legacy Software and
Future Replacement
An Extensive Case Study and In-Depth Proposed
Roadmap
What the Client currently
has:
What the Client thinks they
need to replace it:
What the Client is creating:
What the Client is creating:
What the Client really needs:
What the Client currently
has:
• PHP based legacy code base for Google
Adword API integration
• Large MySQL DB
• Monolithic Design
• 1 code base
• Difficulty adding new features
• Difficulty hiring developers
What the Client thinks they
need to replace it:
• Modern Dynamic Language (Groovy)
• MicroService Architecture
• NoSql (Cassandra)
• Spring Integration Modularization
• Asynchronous Processing
• 4 Separate Code Bases
What the Client is creating:
• Poorly designed code due to lack of expert technology
understanding
• Low Velocity due to time spend training
• Tech Debt due to difficultly refactoring across modularization
and separate repos
• Increased complexity — larger code base, and more
integration points then original design
• Slower!!! then original design due to numerous abstraction
layers, modularization and remote calls
• Long time to actualized Business Value due to Big Bang rewrite
What the Client really needs:
• Modern, but readily available Tech
Stack (Spring, SQL)
• Default Monolithic design, with
creation of services as needed
• Incremental improvements and
refactoring to shorten actualization of
business value
Result of Project:
• Dead lines not met / cost over runs
• Original project cost was $300,000
then $2,000,000 then “re-org”
happened, then many components
got scrapped and project was
simplified
Break down of initial design:
• Initial 3 months of development
• Google Add/Remove Functionality
• 4000+ Lines of code
• Difficulties with deployments, refactoring,
integrations
• Upfront technical optimizations and speculative
requirements made that boosted complexity and
scope by 10x+, business value was unproven or not
needed
Break down of simplified
design:
• 110 lines of code
• Single monolithic deployable
• Easy to refactor code
What should the client have
done instead?
• Deferred performance optimizations (MicroServices, Async, etc)
until implementation of business value and only when need justified
with REAL metrics
• "Premature Optimization is the root of all evil” Principle
• Deferred implementation of speculative business requirements
(Messaging , Cassandra) until business required it
• YAGNI/KISS (You Ain’t Gonna Need It, Keep It Simple Stupid)
Principles
• Given 2 implementation choices, and no clear proof either way,
always choose the simpler solution
• Ozzam’s Razor Principle
Lessons Learned
Dynamic Languages
• Dynamic Languages have the ability to greatly improve signal-to-
noise ratio of code
• .. and conseqently reduce lines of code, maintenance costs, and bugs
• XML, REST, Database, and File Operations in particular are much
shorter, and simpler
• Strongly consider Dynamic Languages (Groovy, Ruby) for projects
where performance is not bound by application (in our case it was the
DB)
• Groovy requires coaching / vigilance to ensure that developers take
advantage of extra abilities instead of just writing plain old Java code
( we didn’t always)
MicroServices
• Microservices have a substantial costs!!
• Extra difficulty in debugging, refactoring, and
deploying, performance hit, extra code required
for retry logic and contracts, numerous issues
with version mismatches of services
• Avoid, unless you really know what you’re doing,
and you’ve analyzed the costs and benefits (with
real performance metrics)
Developer Databases
• Shared database was a problem
• Use local developers database for development
• H2 proved to be an excellent embedded SQL
solution
Deployments
• Strive to make deployments simple, and easy to
debug
• Due to our design choices, a local end-to-end test
was time consuming and error prone
• A single monolithic war would have solved this
problem, and made debugging easier as well
Lines of Code (LOC)
• Lines of Code as a tool to measure complexity
• one metric that you can always get without
requiring complex tools
• each line of code is a liability
• Business loves metrics
• Sonar is freely and can be implemented from day one
to track LOC
• Get performance measuring tools in place from the
start if performance is a consideration
• Get performance metrics on original Legacy system
that you are replacing (I suspect our solution (PP)
was slower then the Perl it was replacing)
Sonar and Profiling Tools
Quotes from Industry
Leaders:
Quotes:
Code is not an asset. It’s a liability. The more you
write, the more you’ll have to maintain later.
— Jez Humble
In deference to the gods of YAGNI, when in
doubt err on the side of simplicity.
— Martin Fowler
I'm wary of distribution and my default
inclination is to prefer a monolithic design.
— Martin Fowler
Quotes:
Don't leap into microservices just because it
sounds cool. Segregate the system into jars using a
plugin architecture first. If that's not sufficient, then
consider introducing service boundaries at
strategic points.
— Uncle Bob (Robert C Martin)
Done is better than perfect
— Mark Zuckerberg
Quotes:
Simple Design: The notion that it is best to keep the
system as simple as possible at all times
regardless of what we fear about the future.
— Kent Beck on XP
The Best Code is No Code at all
— Jeff Atwood

More Related Content

What's hot

Which messaging layer to use in a loosely coupled distributed app (no speaker...
Which messaging layer to use in a loosely coupled distributed app (no speaker...Which messaging layer to use in a loosely coupled distributed app (no speaker...
Which messaging layer to use in a loosely coupled distributed app (no speaker...
Narahari (Hari) Allamraju
 
[WSO2Con EU 2017] How to Learn and Contribute to Ballerina
[WSO2Con EU 2017] How to Learn and Contribute to Ballerina[WSO2Con EU 2017] How to Learn and Contribute to Ballerina
[WSO2Con EU 2017] How to Learn and Contribute to Ballerina
WSO2
 
Decouple and scale with enterprise messaging
Decouple and scale with enterprise messagingDecouple and scale with enterprise messaging
Decouple and scale with enterprise messaging
Ortus Solutions, Corp
 
Being Elastic -- Evolving Programming for the Cloud
Being Elastic -- Evolving Programming for the CloudBeing Elastic -- Evolving Programming for the Cloud
Being Elastic -- Evolving Programming for the Cloud
Randy Shoup
 
Building trust within the organization, first steps towards DevOps
Building trust within the organization, first steps towards DevOpsBuilding trust within the organization, first steps towards DevOps
Building trust within the organization, first steps towards DevOps
Guido Serra
 
Metaprogramming Go
Metaprogramming GoMetaprogramming Go
Metaprogramming Go
Weng Wei
 
Srivalli Aparna - The Blueprints to Success
Srivalli Aparna - The Blueprints to SuccessSrivalli Aparna - The Blueprints to Success
Srivalli Aparna - The Blueprints to Success
Neotys_Partner
 
Testing Theories & Methodologies
Testing Theories & MethodologiesTesting Theories & Methodologies
Testing Theories & MethodologiesYi Xu
 
Behavior driven development
Behavior driven developmentBehavior driven development
Behavior driven development
Extremia
 
Test-driven development with Node.js
Test-driven development with Node.jsTest-driven development with Node.js
Test-driven development with Node.js
Mirko Kiefer
 
Scalability challenges for distributed video infrastructure
Scalability challenges for distributed video infrastructureScalability challenges for distributed video infrastructure
Scalability challenges for distributed video infrastructure
Zafar Shahid, PhD
 
Schibsted Spain - Day 1 - DDD Course
Schibsted Spain - Day 1 - DDD CourseSchibsted Spain - Day 1 - DDD Course
Schibsted Spain - Day 1 - DDD Course
Kevin Mas Ruiz
 
Automation & Professional Services
Automation & Professional ServicesAutomation & Professional Services
Automation & Professional Services
MarketingArrowECS_CZ
 
Introduction to architectural patterns
Introduction to architectural patternsIntroduction to architectural patterns
Introduction to architectural patterns
Georgy Podsvetov
 
TFI2014 Session II - Requirements for SDN - Eric Osborne
TFI2014 Session II - Requirements for SDN - Eric OsborneTFI2014 Session II - Requirements for SDN - Eric Osborne
TFI2014 Session II - Requirements for SDN - Eric Osborne
Colorado Internet Society (CO ISOC)
 
PIMped Papyrus - A Language Workbench for UML DSLs
PIMped Papyrus - A Language Workbench for UML DSLsPIMped Papyrus - A Language Workbench for UML DSLs
PIMped Papyrus - A Language Workbench for UML DSLs
Accenture | SolutionsIQ
 

What's hot (16)

Which messaging layer to use in a loosely coupled distributed app (no speaker...
Which messaging layer to use in a loosely coupled distributed app (no speaker...Which messaging layer to use in a loosely coupled distributed app (no speaker...
Which messaging layer to use in a loosely coupled distributed app (no speaker...
 
[WSO2Con EU 2017] How to Learn and Contribute to Ballerina
[WSO2Con EU 2017] How to Learn and Contribute to Ballerina[WSO2Con EU 2017] How to Learn and Contribute to Ballerina
[WSO2Con EU 2017] How to Learn and Contribute to Ballerina
 
Decouple and scale with enterprise messaging
Decouple and scale with enterprise messagingDecouple and scale with enterprise messaging
Decouple and scale with enterprise messaging
 
Being Elastic -- Evolving Programming for the Cloud
Being Elastic -- Evolving Programming for the CloudBeing Elastic -- Evolving Programming for the Cloud
Being Elastic -- Evolving Programming for the Cloud
 
Building trust within the organization, first steps towards DevOps
Building trust within the organization, first steps towards DevOpsBuilding trust within the organization, first steps towards DevOps
Building trust within the organization, first steps towards DevOps
 
Metaprogramming Go
Metaprogramming GoMetaprogramming Go
Metaprogramming Go
 
Srivalli Aparna - The Blueprints to Success
Srivalli Aparna - The Blueprints to SuccessSrivalli Aparna - The Blueprints to Success
Srivalli Aparna - The Blueprints to Success
 
Testing Theories & Methodologies
Testing Theories & MethodologiesTesting Theories & Methodologies
Testing Theories & Methodologies
 
Behavior driven development
Behavior driven developmentBehavior driven development
Behavior driven development
 
Test-driven development with Node.js
Test-driven development with Node.jsTest-driven development with Node.js
Test-driven development with Node.js
 
Scalability challenges for distributed video infrastructure
Scalability challenges for distributed video infrastructureScalability challenges for distributed video infrastructure
Scalability challenges for distributed video infrastructure
 
Schibsted Spain - Day 1 - DDD Course
Schibsted Spain - Day 1 - DDD CourseSchibsted Spain - Day 1 - DDD Course
Schibsted Spain - Day 1 - DDD Course
 
Automation & Professional Services
Automation & Professional ServicesAutomation & Professional Services
Automation & Professional Services
 
Introduction to architectural patterns
Introduction to architectural patternsIntroduction to architectural patterns
Introduction to architectural patterns
 
TFI2014 Session II - Requirements for SDN - Eric Osborne
TFI2014 Session II - Requirements for SDN - Eric OsborneTFI2014 Session II - Requirements for SDN - Eric Osborne
TFI2014 Session II - Requirements for SDN - Eric Osborne
 
PIMped Papyrus - A Language Workbench for UML DSLs
PIMped Papyrus - A Language Workbench for UML DSLsPIMped Papyrus - A Language Workbench for UML DSLs
PIMped Papyrus - A Language Workbench for UML DSLs
 

Similar to Client Technical Analysis of Legacy Software and Future Replacement

Software Architecture and Architectors: useless VS valuable
Software Architecture and Architectors: useless VS valuableSoftware Architecture and Architectors: useless VS valuable
Software Architecture and Architectors: useless VS valuable
Comsysto Reply GmbH
 
Architectural Decisions: Smoothly and Consistently
Architectural Decisions: Smoothly and ConsistentlyArchitectural Decisions: Smoothly and Consistently
Architectural Decisions: Smoothly and Consistently
Comsysto Reply GmbH
 
Architectural Decisions: Smoothly and Consistently
Architectural Decisions: Smoothly and ConsistentlyArchitectural Decisions: Smoothly and Consistently
Architectural Decisions: Smoothly and Consistently
Comsysto Reply GmbH
 
Mixing d ps building architecture on the cross cutting example
Mixing d ps building architecture on the cross cutting exampleMixing d ps building architecture on the cross cutting example
Mixing d ps building architecture on the cross cutting example
corehard_by
 
2019-Nov: Domain Driven Design (DDD) and when not to use it
2019-Nov: Domain Driven Design (DDD) and when not to use it2019-Nov: Domain Driven Design (DDD) and when not to use it
2019-Nov: Domain Driven Design (DDD) and when not to use it
Mark Windholtz
 
Pros & Cons of Microservices Architecture
Pros & Cons of Microservices ArchitecturePros & Cons of Microservices Architecture
Pros & Cons of Microservices Architecture
Ashwini Kuntamukkala
 
NetWork - 15.10.2011 - Applied code generation in .NET
NetWork - 15.10.2011 - Applied code generation in .NET NetWork - 15.10.2011 - Applied code generation in .NET
NetWork - 15.10.2011 - Applied code generation in .NET Dmytro Mindra
 
Understanding Microservices
Understanding Microservices Understanding Microservices
Understanding Microservices
M A Hossain Tonu
 
Agile engineering practices
Agile engineering practicesAgile engineering practices
Agile engineering practices
Mustafa Savaşcı
 
Domain Driven Design Big Picture Strategic Patterns
Domain Driven Design Big Picture Strategic PatternsDomain Driven Design Big Picture Strategic Patterns
Domain Driven Design Big Picture Strategic Patterns
Mark Windholtz
 
DerbyDev_ModMonolith_290323.pptx
DerbyDev_ModMonolith_290323.pptxDerbyDev_ModMonolith_290323.pptx
DerbyDev_ModMonolith_290323.pptx
AaronWhite801549
 
Urbanesia - Open Source & Microsoft
Urbanesia - Open Source & MicrosoftUrbanesia - Open Source & Microsoft
Urbanesia - Open Source & Microsoft
Batista Harahap
 
Architecting for Huper Growth and Great Engineering Culture
Architecting for Huper Growth and Great Engineering CultureArchitecting for Huper Growth and Great Engineering Culture
Architecting for Huper Growth and Great Engineering Culture
SARCCOM
 
Architecting for Hyper Growth and Great Engineering Culture
Architecting for Hyper Growth and Great Engineering CultureArchitecting for Hyper Growth and Great Engineering Culture
Architecting for Hyper Growth and Great Engineering Cultureifnu bima
 
EuroMPI 2013 presentation: McMPI
EuroMPI 2013 presentation: McMPIEuroMPI 2013 presentation: McMPI
EuroMPI 2013 presentation: McMPI
Dan Holmes
 
MongoDB Partner Program Update - November 2013
MongoDB Partner Program Update - November 2013MongoDB Partner Program Update - November 2013
MongoDB Partner Program Update - November 2013MongoDB
 
Blasting Out of the Past with OSGi - Keith McFarlane
Blasting Out of the Past with OSGi - Keith McFarlaneBlasting Out of the Past with OSGi - Keith McFarlane
Blasting Out of the Past with OSGi - Keith McFarlane
mfrancis
 
Lean-Agile Development with SharePoint - Bill Ayers
Lean-Agile Development with SharePoint - Bill AyersLean-Agile Development with SharePoint - Bill Ayers
Lean-Agile Development with SharePoint - Bill Ayers
SPC Adriatics
 

Similar to Client Technical Analysis of Legacy Software and Future Replacement (20)

Software Architecture and Architectors: useless VS valuable
Software Architecture and Architectors: useless VS valuableSoftware Architecture and Architectors: useless VS valuable
Software Architecture and Architectors: useless VS valuable
 
Architectural Decisions: Smoothly and Consistently
Architectural Decisions: Smoothly and ConsistentlyArchitectural Decisions: Smoothly and Consistently
Architectural Decisions: Smoothly and Consistently
 
Architectural Decisions: Smoothly and Consistently
Architectural Decisions: Smoothly and ConsistentlyArchitectural Decisions: Smoothly and Consistently
Architectural Decisions: Smoothly and Consistently
 
Mixing d ps building architecture on the cross cutting example
Mixing d ps building architecture on the cross cutting exampleMixing d ps building architecture on the cross cutting example
Mixing d ps building architecture on the cross cutting example
 
2019-Nov: Domain Driven Design (DDD) and when not to use it
2019-Nov: Domain Driven Design (DDD) and when not to use it2019-Nov: Domain Driven Design (DDD) and when not to use it
2019-Nov: Domain Driven Design (DDD) and when not to use it
 
Pros & Cons of Microservices Architecture
Pros & Cons of Microservices ArchitecturePros & Cons of Microservices Architecture
Pros & Cons of Microservices Architecture
 
NetWork - 15.10.2011 - Applied code generation in .NET
NetWork - 15.10.2011 - Applied code generation in .NET NetWork - 15.10.2011 - Applied code generation in .NET
NetWork - 15.10.2011 - Applied code generation in .NET
 
Understanding Microservices
Understanding Microservices Understanding Microservices
Understanding Microservices
 
Code Inspection
Code InspectionCode Inspection
Code Inspection
 
Agile engineering practices
Agile engineering practicesAgile engineering practices
Agile engineering practices
 
Domain Driven Design Big Picture Strategic Patterns
Domain Driven Design Big Picture Strategic PatternsDomain Driven Design Big Picture Strategic Patterns
Domain Driven Design Big Picture Strategic Patterns
 
DerbyDev_ModMonolith_290323.pptx
DerbyDev_ModMonolith_290323.pptxDerbyDev_ModMonolith_290323.pptx
DerbyDev_ModMonolith_290323.pptx
 
Urbanesia - Open Source & Microsoft
Urbanesia - Open Source & MicrosoftUrbanesia - Open Source & Microsoft
Urbanesia - Open Source & Microsoft
 
Architecting for Huper Growth and Great Engineering Culture
Architecting for Huper Growth and Great Engineering CultureArchitecting for Huper Growth and Great Engineering Culture
Architecting for Huper Growth and Great Engineering Culture
 
Architecting for Hyper Growth and Great Engineering Culture
Architecting for Hyper Growth and Great Engineering CultureArchitecting for Hyper Growth and Great Engineering Culture
Architecting for Hyper Growth and Great Engineering Culture
 
EuroMPI 2013 presentation: McMPI
EuroMPI 2013 presentation: McMPIEuroMPI 2013 presentation: McMPI
EuroMPI 2013 presentation: McMPI
 
MongoDB Partner Program Update - November 2013
MongoDB Partner Program Update - November 2013MongoDB Partner Program Update - November 2013
MongoDB Partner Program Update - November 2013
 
Microservices
MicroservicesMicroservices
Microservices
 
Blasting Out of the Past with OSGi - Keith McFarlane
Blasting Out of the Past with OSGi - Keith McFarlaneBlasting Out of the Past with OSGi - Keith McFarlane
Blasting Out of the Past with OSGi - Keith McFarlane
 
Lean-Agile Development with SharePoint - Bill Ayers
Lean-Agile Development with SharePoint - Bill AyersLean-Agile Development with SharePoint - Bill Ayers
Lean-Agile Development with SharePoint - Bill Ayers
 

More from VictorSzoltysek

ChatGPT and Beyond - Elevating DevOps Productivity
ChatGPT and Beyond - Elevating DevOps ProductivityChatGPT and Beyond - Elevating DevOps Productivity
ChatGPT and Beyond - Elevating DevOps Productivity
VictorSzoltysek
 
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM TechniquesAI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
VictorSzoltysek
 
Harnessing ChatGPT - Elevating Productivity in Today's Agile Environment
Harnessing ChatGPT  - Elevating Productivity in Today's Agile EnvironmentHarnessing ChatGPT  - Elevating Productivity in Today's Agile Environment
Harnessing ChatGPT - Elevating Productivity in Today's Agile Environment
VictorSzoltysek
 
Simplified DevOps Bliss -with OpenAI API
Simplified DevOps Bliss -with OpenAI APISimplified DevOps Bliss -with OpenAI API
Simplified DevOps Bliss -with OpenAI API
VictorSzoltysek
 
From SpaceX Launch Pads to Rapid Deployments
From SpaceX Launch Pads to Rapid DeploymentsFrom SpaceX Launch Pads to Rapid Deployments
From SpaceX Launch Pads to Rapid Deployments
VictorSzoltysek
 
The Future of JVM Languages
The Future of JVM Languages The Future of JVM Languages
The Future of JVM Languages
VictorSzoltysek
 
Driving Process Improvements - A Guided Approach to Running Effective Retrosp...
Driving Process Improvements - A Guided Approach to Running Effective Retrosp...Driving Process Improvements - A Guided Approach to Running Effective Retrosp...
Driving Process Improvements - A Guided Approach to Running Effective Retrosp...
VictorSzoltysek
 
Spaceships, Pull Requests and Feature Branching - A Principles-Based approac...
Spaceships, Pull Requests and Feature Branching  - A Principles-Based approac...Spaceships, Pull Requests and Feature Branching  - A Principles-Based approac...
Spaceships, Pull Requests and Feature Branching - A Principles-Based approac...
VictorSzoltysek
 
Real-World DevOps — 20 Practical Developers Tips for Tightening Your Operatio...
Real-World DevOps — 20 Practical Developers Tips for Tightening Your Operatio...Real-World DevOps — 20 Practical Developers Tips for Tightening Your Operatio...
Real-World DevOps — 20 Practical Developers Tips for Tightening Your Operatio...
VictorSzoltysek
 
Real-World Application Observability - 11 Practical Developer Focused Tips
Real-World Application Observability - 11 Practical Developer Focused TipsReal-World Application Observability - 11 Practical Developer Focused Tips
Real-World Application Observability - 11 Practical Developer Focused Tips
VictorSzoltysek
 
Victor's Awesome Retro Deck
Victor's Awesome Retro DeckVictor's Awesome Retro Deck
Victor's Awesome Retro Deck
VictorSzoltysek
 
Software Development in Internet Memes
Software Development in Internet MemesSoftware Development in Internet Memes
Software Development in Internet Memes
VictorSzoltysek
 
Big Bangs, Monorails and Microservices - Feb 2020
Big Bangs, Monorails and Microservices - Feb 2020Big Bangs, Monorails and Microservices - Feb 2020
Big Bangs, Monorails and Microservices - Feb 2020
VictorSzoltysek
 
Making your RDBMS fast!
Making your RDBMS fast! Making your RDBMS fast!
Making your RDBMS fast!
VictorSzoltysek
 
SQL Tips + Tricks for Developers
SQL Tips + Tricks for DevelopersSQL Tips + Tricks for Developers
SQL Tips + Tricks for Developers
VictorSzoltysek
 
Less is more the 7 wastes of lean software development
Less is more   the 7 wastes of lean software developmentLess is more   the 7 wastes of lean software development
Less is more the 7 wastes of lean software development
VictorSzoltysek
 
Modern day jvm controversies
Modern day jvm controversiesModern day jvm controversies
Modern day jvm controversies
VictorSzoltysek
 
The Future of Java - and a look at the evolution of programming languages
The Future of Java - and a look at the evolution of programming languagesThe Future of Java - and a look at the evolution of programming languages
The Future of Java - and a look at the evolution of programming languages
VictorSzoltysek
 
Improving velocity through abstraction
Improving velocity through abstractionImproving velocity through abstraction
Improving velocity through abstraction
VictorSzoltysek
 

More from VictorSzoltysek (19)

ChatGPT and Beyond - Elevating DevOps Productivity
ChatGPT and Beyond - Elevating DevOps ProductivityChatGPT and Beyond - Elevating DevOps Productivity
ChatGPT and Beyond - Elevating DevOps Productivity
 
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM TechniquesAI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
 
Harnessing ChatGPT - Elevating Productivity in Today's Agile Environment
Harnessing ChatGPT  - Elevating Productivity in Today's Agile EnvironmentHarnessing ChatGPT  - Elevating Productivity in Today's Agile Environment
Harnessing ChatGPT - Elevating Productivity in Today's Agile Environment
 
Simplified DevOps Bliss -with OpenAI API
Simplified DevOps Bliss -with OpenAI APISimplified DevOps Bliss -with OpenAI API
Simplified DevOps Bliss -with OpenAI API
 
From SpaceX Launch Pads to Rapid Deployments
From SpaceX Launch Pads to Rapid DeploymentsFrom SpaceX Launch Pads to Rapid Deployments
From SpaceX Launch Pads to Rapid Deployments
 
The Future of JVM Languages
The Future of JVM Languages The Future of JVM Languages
The Future of JVM Languages
 
Driving Process Improvements - A Guided Approach to Running Effective Retrosp...
Driving Process Improvements - A Guided Approach to Running Effective Retrosp...Driving Process Improvements - A Guided Approach to Running Effective Retrosp...
Driving Process Improvements - A Guided Approach to Running Effective Retrosp...
 
Spaceships, Pull Requests and Feature Branching - A Principles-Based approac...
Spaceships, Pull Requests and Feature Branching  - A Principles-Based approac...Spaceships, Pull Requests and Feature Branching  - A Principles-Based approac...
Spaceships, Pull Requests and Feature Branching - A Principles-Based approac...
 
Real-World DevOps — 20 Practical Developers Tips for Tightening Your Operatio...
Real-World DevOps — 20 Practical Developers Tips for Tightening Your Operatio...Real-World DevOps — 20 Practical Developers Tips for Tightening Your Operatio...
Real-World DevOps — 20 Practical Developers Tips for Tightening Your Operatio...
 
Real-World Application Observability - 11 Practical Developer Focused Tips
Real-World Application Observability - 11 Practical Developer Focused TipsReal-World Application Observability - 11 Practical Developer Focused Tips
Real-World Application Observability - 11 Practical Developer Focused Tips
 
Victor's Awesome Retro Deck
Victor's Awesome Retro DeckVictor's Awesome Retro Deck
Victor's Awesome Retro Deck
 
Software Development in Internet Memes
Software Development in Internet MemesSoftware Development in Internet Memes
Software Development in Internet Memes
 
Big Bangs, Monorails and Microservices - Feb 2020
Big Bangs, Monorails and Microservices - Feb 2020Big Bangs, Monorails and Microservices - Feb 2020
Big Bangs, Monorails and Microservices - Feb 2020
 
Making your RDBMS fast!
Making your RDBMS fast! Making your RDBMS fast!
Making your RDBMS fast!
 
SQL Tips + Tricks for Developers
SQL Tips + Tricks for DevelopersSQL Tips + Tricks for Developers
SQL Tips + Tricks for Developers
 
Less is more the 7 wastes of lean software development
Less is more   the 7 wastes of lean software developmentLess is more   the 7 wastes of lean software development
Less is more the 7 wastes of lean software development
 
Modern day jvm controversies
Modern day jvm controversiesModern day jvm controversies
Modern day jvm controversies
 
The Future of Java - and a look at the evolution of programming languages
The Future of Java - and a look at the evolution of programming languagesThe Future of Java - and a look at the evolution of programming languages
The Future of Java - and a look at the evolution of programming languages
 
Improving velocity through abstraction
Improving velocity through abstractionImproving velocity through abstraction
Improving velocity through abstraction
 

Recently uploaded

GOING AOT WITH GRAALVM FOR SPRING BOOT (SPRING IO)
GOING AOT WITH GRAALVM FOR  SPRING BOOT (SPRING IO)GOING AOT WITH GRAALVM FOR  SPRING BOOT (SPRING IO)
GOING AOT WITH GRAALVM FOR SPRING BOOT (SPRING IO)
Alina Yurenko
 
Introducing Crescat - Event Management Software for Venues, Festivals and Eve...
Introducing Crescat - Event Management Software for Venues, Festivals and Eve...Introducing Crescat - Event Management Software for Venues, Festivals and Eve...
Introducing Crescat - Event Management Software for Venues, Festivals and Eve...
Crescat
 
Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...
Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...
Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...
Mind IT Systems
 
LORRAINE ANDREI_LEQUIGAN_HOW TO USE ZOOM
LORRAINE ANDREI_LEQUIGAN_HOW TO USE ZOOMLORRAINE ANDREI_LEQUIGAN_HOW TO USE ZOOM
LORRAINE ANDREI_LEQUIGAN_HOW TO USE ZOOM
lorraineandreiamcidl
 
Using Xen Hypervisor for Functional Safety
Using Xen Hypervisor for Functional SafetyUsing Xen Hypervisor for Functional Safety
Using Xen Hypervisor for Functional Safety
Ayan Halder
 
Essentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FMEEssentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FME
Safe Software
 
Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024
Paco van Beckhoven
 
Mobile App Development Company In Noida | Drona Infotech
Mobile App Development Company In Noida | Drona InfotechMobile App Development Company In Noida | Drona Infotech
Mobile App Development Company In Noida | Drona Infotech
Drona Infotech
 
Why Mobile App Regression Testing is Critical for Sustained Success_ A Detail...
Why Mobile App Regression Testing is Critical for Sustained Success_ A Detail...Why Mobile App Regression Testing is Critical for Sustained Success_ A Detail...
Why Mobile App Regression Testing is Critical for Sustained Success_ A Detail...
kalichargn70th171
 
Enterprise Resource Planning System in Telangana
Enterprise Resource Planning System in TelanganaEnterprise Resource Planning System in Telangana
Enterprise Resource Planning System in Telangana
NYGGS Automation Suite
 
SWEBOK and Education at FUSE Okinawa 2024
SWEBOK and Education at FUSE Okinawa 2024SWEBOK and Education at FUSE Okinawa 2024
SWEBOK and Education at FUSE Okinawa 2024
Hironori Washizaki
 
AI Fusion Buddy Review: Brand New, Groundbreaking Gemini-Powered AI App
AI Fusion Buddy Review: Brand New, Groundbreaking Gemini-Powered AI AppAI Fusion Buddy Review: Brand New, Groundbreaking Gemini-Powered AI App
AI Fusion Buddy Review: Brand New, Groundbreaking Gemini-Powered AI App
Google
 
E-commerce Application Development Company.pdf
E-commerce Application Development Company.pdfE-commerce Application Development Company.pdf
E-commerce Application Development Company.pdf
Hornet Dynamics
 
Atelier - Innover avec l’IA Générative et les graphes de connaissances
Atelier - Innover avec l’IA Générative et les graphes de connaissancesAtelier - Innover avec l’IA Générative et les graphes de connaissances
Atelier - Innover avec l’IA Générative et les graphes de connaissances
Neo4j
 
May Marketo Masterclass, London MUG May 22 2024.pdf
May Marketo Masterclass, London MUG May 22 2024.pdfMay Marketo Masterclass, London MUG May 22 2024.pdf
May Marketo Masterclass, London MUG May 22 2024.pdf
Adele Miller
 
Orion Context Broker introduction 20240604
Orion Context Broker introduction 20240604Orion Context Broker introduction 20240604
Orion Context Broker introduction 20240604
Fermin Galan
 
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdf
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdfAutomated software refactoring with OpenRewrite and Generative AI.pptx.pdf
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdf
timtebeek1
 
A Sighting of filterA in Typelevel Rite of Passage
A Sighting of filterA in Typelevel Rite of PassageA Sighting of filterA in Typelevel Rite of Passage
A Sighting of filterA in Typelevel Rite of Passage
Philip Schwarz
 
Hand Rolled Applicative User Validation Code Kata
Hand Rolled Applicative User ValidationCode KataHand Rolled Applicative User ValidationCode Kata
Hand Rolled Applicative User Validation Code Kata
Philip Schwarz
 
GraphSummit Paris - The art of the possible with Graph Technology
GraphSummit Paris - The art of the possible with Graph TechnologyGraphSummit Paris - The art of the possible with Graph Technology
GraphSummit Paris - The art of the possible with Graph Technology
Neo4j
 

Recently uploaded (20)

GOING AOT WITH GRAALVM FOR SPRING BOOT (SPRING IO)
GOING AOT WITH GRAALVM FOR  SPRING BOOT (SPRING IO)GOING AOT WITH GRAALVM FOR  SPRING BOOT (SPRING IO)
GOING AOT WITH GRAALVM FOR SPRING BOOT (SPRING IO)
 
Introducing Crescat - Event Management Software for Venues, Festivals and Eve...
Introducing Crescat - Event Management Software for Venues, Festivals and Eve...Introducing Crescat - Event Management Software for Venues, Festivals and Eve...
Introducing Crescat - Event Management Software for Venues, Festivals and Eve...
 
Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...
Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...
Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...
 
LORRAINE ANDREI_LEQUIGAN_HOW TO USE ZOOM
LORRAINE ANDREI_LEQUIGAN_HOW TO USE ZOOMLORRAINE ANDREI_LEQUIGAN_HOW TO USE ZOOM
LORRAINE ANDREI_LEQUIGAN_HOW TO USE ZOOM
 
Using Xen Hypervisor for Functional Safety
Using Xen Hypervisor for Functional SafetyUsing Xen Hypervisor for Functional Safety
Using Xen Hypervisor for Functional Safety
 
Essentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FMEEssentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FME
 
Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024
 
Mobile App Development Company In Noida | Drona Infotech
Mobile App Development Company In Noida | Drona InfotechMobile App Development Company In Noida | Drona Infotech
Mobile App Development Company In Noida | Drona Infotech
 
Why Mobile App Regression Testing is Critical for Sustained Success_ A Detail...
Why Mobile App Regression Testing is Critical for Sustained Success_ A Detail...Why Mobile App Regression Testing is Critical for Sustained Success_ A Detail...
Why Mobile App Regression Testing is Critical for Sustained Success_ A Detail...
 
Enterprise Resource Planning System in Telangana
Enterprise Resource Planning System in TelanganaEnterprise Resource Planning System in Telangana
Enterprise Resource Planning System in Telangana
 
SWEBOK and Education at FUSE Okinawa 2024
SWEBOK and Education at FUSE Okinawa 2024SWEBOK and Education at FUSE Okinawa 2024
SWEBOK and Education at FUSE Okinawa 2024
 
AI Fusion Buddy Review: Brand New, Groundbreaking Gemini-Powered AI App
AI Fusion Buddy Review: Brand New, Groundbreaking Gemini-Powered AI AppAI Fusion Buddy Review: Brand New, Groundbreaking Gemini-Powered AI App
AI Fusion Buddy Review: Brand New, Groundbreaking Gemini-Powered AI App
 
E-commerce Application Development Company.pdf
E-commerce Application Development Company.pdfE-commerce Application Development Company.pdf
E-commerce Application Development Company.pdf
 
Atelier - Innover avec l’IA Générative et les graphes de connaissances
Atelier - Innover avec l’IA Générative et les graphes de connaissancesAtelier - Innover avec l’IA Générative et les graphes de connaissances
Atelier - Innover avec l’IA Générative et les graphes de connaissances
 
May Marketo Masterclass, London MUG May 22 2024.pdf
May Marketo Masterclass, London MUG May 22 2024.pdfMay Marketo Masterclass, London MUG May 22 2024.pdf
May Marketo Masterclass, London MUG May 22 2024.pdf
 
Orion Context Broker introduction 20240604
Orion Context Broker introduction 20240604Orion Context Broker introduction 20240604
Orion Context Broker introduction 20240604
 
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdf
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdfAutomated software refactoring with OpenRewrite and Generative AI.pptx.pdf
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdf
 
A Sighting of filterA in Typelevel Rite of Passage
A Sighting of filterA in Typelevel Rite of PassageA Sighting of filterA in Typelevel Rite of Passage
A Sighting of filterA in Typelevel Rite of Passage
 
Hand Rolled Applicative User Validation Code Kata
Hand Rolled Applicative User ValidationCode KataHand Rolled Applicative User ValidationCode Kata
Hand Rolled Applicative User Validation Code Kata
 
GraphSummit Paris - The art of the possible with Graph Technology
GraphSummit Paris - The art of the possible with Graph TechnologyGraphSummit Paris - The art of the possible with Graph Technology
GraphSummit Paris - The art of the possible with Graph Technology
 

Client Technical Analysis of Legacy Software and Future Replacement

  • 1. Client Technical Analysis of Legacy Software and Future Replacement An Extensive Case Study and In-Depth Proposed Roadmap
  • 2. What the Client currently has:
  • 3. What the Client thinks they need to replace it:
  • 4. What the Client is creating:
  • 5. What the Client is creating:
  • 6. What the Client really needs:
  • 7. What the Client currently has: • PHP based legacy code base for Google Adword API integration • Large MySQL DB • Monolithic Design • 1 code base • Difficulty adding new features • Difficulty hiring developers
  • 8. What the Client thinks they need to replace it: • Modern Dynamic Language (Groovy) • MicroService Architecture • NoSql (Cassandra) • Spring Integration Modularization • Asynchronous Processing • 4 Separate Code Bases
  • 9. What the Client is creating: • Poorly designed code due to lack of expert technology understanding • Low Velocity due to time spend training • Tech Debt due to difficultly refactoring across modularization and separate repos • Increased complexity — larger code base, and more integration points then original design • Slower!!! then original design due to numerous abstraction layers, modularization and remote calls • Long time to actualized Business Value due to Big Bang rewrite
  • 10. What the Client really needs: • Modern, but readily available Tech Stack (Spring, SQL) • Default Monolithic design, with creation of services as needed • Incremental improvements and refactoring to shorten actualization of business value
  • 11. Result of Project: • Dead lines not met / cost over runs • Original project cost was $300,000 then $2,000,000 then “re-org” happened, then many components got scrapped and project was simplified
  • 12. Break down of initial design: • Initial 3 months of development • Google Add/Remove Functionality • 4000+ Lines of code • Difficulties with deployments, refactoring, integrations • Upfront technical optimizations and speculative requirements made that boosted complexity and scope by 10x+, business value was unproven or not needed
  • 13. Break down of simplified design: • 110 lines of code • Single monolithic deployable • Easy to refactor code
  • 14. What should the client have done instead? • Deferred performance optimizations (MicroServices, Async, etc) until implementation of business value and only when need justified with REAL metrics • "Premature Optimization is the root of all evil” Principle • Deferred implementation of speculative business requirements (Messaging , Cassandra) until business required it • YAGNI/KISS (You Ain’t Gonna Need It, Keep It Simple Stupid) Principles • Given 2 implementation choices, and no clear proof either way, always choose the simpler solution • Ozzam’s Razor Principle
  • 16. Dynamic Languages • Dynamic Languages have the ability to greatly improve signal-to- noise ratio of code • .. and conseqently reduce lines of code, maintenance costs, and bugs • XML, REST, Database, and File Operations in particular are much shorter, and simpler • Strongly consider Dynamic Languages (Groovy, Ruby) for projects where performance is not bound by application (in our case it was the DB) • Groovy requires coaching / vigilance to ensure that developers take advantage of extra abilities instead of just writing plain old Java code ( we didn’t always)
  • 17. MicroServices • Microservices have a substantial costs!! • Extra difficulty in debugging, refactoring, and deploying, performance hit, extra code required for retry logic and contracts, numerous issues with version mismatches of services • Avoid, unless you really know what you’re doing, and you’ve analyzed the costs and benefits (with real performance metrics)
  • 18. Developer Databases • Shared database was a problem • Use local developers database for development • H2 proved to be an excellent embedded SQL solution
  • 19. Deployments • Strive to make deployments simple, and easy to debug • Due to our design choices, a local end-to-end test was time consuming and error prone • A single monolithic war would have solved this problem, and made debugging easier as well
  • 20. Lines of Code (LOC) • Lines of Code as a tool to measure complexity • one metric that you can always get without requiring complex tools • each line of code is a liability
  • 21. • Business loves metrics • Sonar is freely and can be implemented from day one to track LOC • Get performance measuring tools in place from the start if performance is a consideration • Get performance metrics on original Legacy system that you are replacing (I suspect our solution (PP) was slower then the Perl it was replacing) Sonar and Profiling Tools
  • 23. Quotes: Code is not an asset. It’s a liability. The more you write, the more you’ll have to maintain later. — Jez Humble In deference to the gods of YAGNI, when in doubt err on the side of simplicity. — Martin Fowler I'm wary of distribution and my default inclination is to prefer a monolithic design. — Martin Fowler
  • 24. Quotes: Don't leap into microservices just because it sounds cool. Segregate the system into jars using a plugin architecture first. If that's not sufficient, then consider introducing service boundaries at strategic points. — Uncle Bob (Robert C Martin) Done is better than perfect — Mark Zuckerberg
  • 25. Quotes: Simple Design: The notion that it is best to keep the system as simple as possible at all times regardless of what we fear about the future. — Kent Beck on XP The Best Code is No Code at all — Jeff Atwood