SlideShare une entreprise Scribd logo
1  sur  25
Télécharger pour lire hors ligne
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

Contenu connexe

Tendances

Testing Theories & Methodologies
Testing Theories & MethodologiesTesting Theories & Methodologies
Testing Theories & Methodologies
Yi Xu
 
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
 

Tendances (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
 

Similaire à Client Technical Analysis of Legacy Software and Future Replacement

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
 
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
ifnu bima
 
MongoDB Partner Program Update - November 2013
MongoDB Partner Program Update - November 2013MongoDB Partner Program Update - November 2013
MongoDB Partner Program Update - November 2013
MongoDB
 

Similaire à 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
 

Plus de 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
 

Plus de VictorSzoltysek (18)

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
 

Dernier

introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdfintroduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
VishalKumarJha10
 
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICECHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
9953056974 Low Rate Call Girls In Saket, Delhi NCR
 

Dernier (20)

Define the academic and professional writing..pdf
Define the academic and professional writing..pdfDefine the academic and professional writing..pdf
Define the academic and professional writing..pdf
 
Pharm-D Biostatistics and Research methodology
Pharm-D Biostatistics and Research methodologyPharm-D Biostatistics and Research methodology
Pharm-D Biostatistics and Research methodology
 
ManageIQ - Sprint 236 Review - Slide Deck
ManageIQ - Sprint 236 Review - Slide DeckManageIQ - Sprint 236 Review - Slide Deck
ManageIQ - Sprint 236 Review - Slide Deck
 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
 
10 Trends Likely to Shape Enterprise Technology in 2024
10 Trends Likely to Shape Enterprise Technology in 202410 Trends Likely to Shape Enterprise Technology in 2024
10 Trends Likely to Shape Enterprise Technology in 2024
 
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
 
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park %in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
 
Microsoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdfMicrosoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdf
 
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
 
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerHow To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
 
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
 
BUS PASS MANGEMENT SYSTEM USING PHP.pptx
BUS PASS MANGEMENT SYSTEM USING PHP.pptxBUS PASS MANGEMENT SYSTEM USING PHP.pptx
BUS PASS MANGEMENT SYSTEM USING PHP.pptx
 
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
 
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
 
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdfintroduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
 
AI & Machine Learning Presentation Template
AI & Machine Learning Presentation TemplateAI & Machine Learning Presentation Template
AI & Machine Learning Presentation Template
 
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Models
 
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICECHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
 
8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students
 
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
 

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