SlideShare una empresa de Scribd logo
1 de 9
Descargar para leer sin conexión
SoftwareSoftware
MantenibleMantenible
Carlos Blé
@carlosble
About meAbout me
Developer, Speaker, Author, Trainer, Entrepreneur
Founder of Lean Mind
Software Craftsmanhip Community Member
Brought SoCraTes to the Canary Islands
Co-founder of Agile Canarias & Agile Spain
@carlosble
@carlosble
Why is it hard to maintain?Why is it hard to maintain?
1 - Don’t consider your audience
when writing new code
2- Don’t refactor every day
@carlosble
Consider your audienceConsider your audience
Don’t aim for reusability
●
Accidental Complexity
●
Painful generalizations
●
Premature optimizations
Standards are not
enough
●
Frameworks, Three tiers, MVC,
MVP...
●
File per class, small code units, PR,
metrics
●
Linters, Compilers, Coding
standards
●
Quality Attributes
@carlosble
Explicit domain core
✔
Names and abstractions
✔
Avoid primitives
✔
Domain Driven Design
✔
Design Principles
✔
Tests as documentation
✔
Framework agnostic
✔
Database structure agnostic
Paradigms don’t solve
the problem either
●
Imperative, Declarative
●
Multi-paradigm
Domain at the coreDomain at the core
- yes! also in the front-end- yes! also in the front-end
@carlosble
input
Data
Store
output
Infrastructure:
- Controller
- Component
- Action
- ViewModel
- Dispatcher
DOMAIN CORE
Infrastructure:
- Repository
- Mapper
- Client
- DTO
- Mailer
3rd
party
system
output
Service
Entity
Value Object
Entity
Delivery
mechanism
Domain core doesn’t know the outer layers
(clean architecture: mind dependencies’ direction)
Example: Interaction-Driven DesignExample: Interaction-Driven Design
@carlosble
Image from Sandro Mancuso, author of IDD
https://dzone.com/articles/introducing-interaction-driven-design
You’re wrong anyway, refactor please!You’re wrong anyway, refactor please!
It’s about ROI
●
Avoid analysis paralysis
●
Small thoughtful changes keep the
project on the green field
●
We re-discover the business as we
work on it
●
Code is the single source of truth
Balance
●
Aim for decent quality, not
perfection
●
Technical debt under control
●
Proud of a well-done job
●
Control your optimism
@carlosble
Every day
●
Warm up reading yesterday’s
code, like a kata
●
Automatic changes with an IDE
●
Pair review, Pair programming
Pick your battles
●
The low hanging fruit
●
Refactor to understand the code
●
Discard your changes when
needed
●
Delete all the lines you safely could
●
If it works don’t touch it
Thank you!Thank you!
@carlosble

Más contenido relacionado

Similar a Maintainable software

The 360 Developer
The 360 DeveloperThe 360 Developer
The 360 Developerenteritos
 
Open source ml systems that need to be built
Open source ml systems that need to be builtOpen source ml systems that need to be built
Open source ml systems that need to be builtNikhil Garg
 
Mastering Agile Practices to Build High Performing Teams
Mastering Agile Practices to Build High Performing TeamsMastering Agile Practices to Build High Performing Teams
Mastering Agile Practices to Build High Performing TeamsAgileThought
 
Master Technical Recruiting Workshop: How to Recruit Top Tech Talent
Master Technical Recruiting Workshop:  How to Recruit Top Tech TalentMaster Technical Recruiting Workshop:  How to Recruit Top Tech Talent
Master Technical Recruiting Workshop: How to Recruit Top Tech TalentRecruitingDaily.com LLC
 
Craftsmanship 2016 -BestBrains Café-møder
Craftsmanship 2016 -BestBrains Café-møderCraftsmanship 2016 -BestBrains Café-møder
Craftsmanship 2016 -BestBrains Café-møderBestBrains
 
Craftsmanship 2016 - BestbBrains Café-møde
Craftsmanship 2016 - BestbBrains Café-mødeCraftsmanship 2016 - BestbBrains Café-møde
Craftsmanship 2016 - BestbBrains Café-mødeRikke Veng Petersen
 
Why Isn't Clean Coding Working For My Team
Why Isn't Clean Coding Working For My TeamWhy Isn't Clean Coding Working For My Team
Why Isn't Clean Coding Working For My TeamRob Curry
 
Machine Learning Vs. Deep Learning – An Example Implementation
Machine Learning Vs. Deep Learning – An Example ImplementationMachine Learning Vs. Deep Learning – An Example Implementation
Machine Learning Vs. Deep Learning – An Example ImplementationSynerzip
 
Agile Software Development
Agile Software DevelopmentAgile Software Development
Agile Software DevelopmentAhmet Bulut
 
Nearshore presentation (feb 2013)
Nearshore presentation (feb 2013)Nearshore presentation (feb 2013)
Nearshore presentation (feb 2013)Peter Stroeve
 
How to Plan for Hyper Growth Success by Slack Software Engineer
How to Plan for Hyper Growth Success by Slack Software EngineerHow to Plan for Hyper Growth Success by Slack Software Engineer
How to Plan for Hyper Growth Success by Slack Software EngineerProduct School
 
Requirements: Whose job are they anyway?
Requirements: Whose job are they anyway?Requirements: Whose job are they anyway?
Requirements: Whose job are they anyway?allan kelly
 
Distributed Agile Teams
Distributed Agile TeamsDistributed Agile Teams
Distributed Agile TeamsBrian Estep
 
Turning Passion Into Words
Turning Passion Into WordsTurning Passion Into Words
Turning Passion Into WordsBrian Hogan
 
Requirements: Whose job are they anyway?
Requirements: Whose job are they anyway?Requirements: Whose job are they anyway?
Requirements: Whose job are they anyway?allan kelly
 
Effective entrepreneurship for developers
Effective entrepreneurship for developersEffective entrepreneurship for developers
Effective entrepreneurship for developersCarlos Ble
 
Java Multithreading Developer.pdf
Java Multithreading Developer.pdfJava Multithreading Developer.pdf
Java Multithreading Developer.pdfssuser3e259f
 

Similar a Maintainable software (20)

The 360 Developer
The 360 DeveloperThe 360 Developer
The 360 Developer
 
Good behaviors
Good behaviorsGood behaviors
Good behaviors
 
Open source ml systems that need to be built
Open source ml systems that need to be builtOpen source ml systems that need to be built
Open source ml systems that need to be built
 
Mastering Agile Practices to Build High Performing Teams
Mastering Agile Practices to Build High Performing TeamsMastering Agile Practices to Build High Performing Teams
Mastering Agile Practices to Build High Performing Teams
 
Master Technical Recruiting Workshop: How to Recruit Top Tech Talent
Master Technical Recruiting Workshop:  How to Recruit Top Tech TalentMaster Technical Recruiting Workshop:  How to Recruit Top Tech Talent
Master Technical Recruiting Workshop: How to Recruit Top Tech Talent
 
Craftsmanship 2016 -BestBrains Café-møder
Craftsmanship 2016 -BestBrains Café-møderCraftsmanship 2016 -BestBrains Café-møder
Craftsmanship 2016 -BestBrains Café-møder
 
Craftsmanship 2016 - BestbBrains Café-møde
Craftsmanship 2016 - BestbBrains Café-mødeCraftsmanship 2016 - BestbBrains Café-møde
Craftsmanship 2016 - BestbBrains Café-møde
 
Why Isn't Clean Coding Working For My Team
Why Isn't Clean Coding Working For My TeamWhy Isn't Clean Coding Working For My Team
Why Isn't Clean Coding Working For My Team
 
Machine Learning Vs. Deep Learning – An Example Implementation
Machine Learning Vs. Deep Learning – An Example ImplementationMachine Learning Vs. Deep Learning – An Example Implementation
Machine Learning Vs. Deep Learning – An Example Implementation
 
Agile Software Development
Agile Software DevelopmentAgile Software Development
Agile Software Development
 
Nearshore presentation (feb 2013)
Nearshore presentation (feb 2013)Nearshore presentation (feb 2013)
Nearshore presentation (feb 2013)
 
How to Plan for Hyper Growth Success by Slack Software Engineer
How to Plan for Hyper Growth Success by Slack Software EngineerHow to Plan for Hyper Growth Success by Slack Software Engineer
How to Plan for Hyper Growth Success by Slack Software Engineer
 
Sdlc to agile transtion
Sdlc to agile transtion Sdlc to agile transtion
Sdlc to agile transtion
 
Requirements: Whose job are they anyway?
Requirements: Whose job are they anyway?Requirements: Whose job are they anyway?
Requirements: Whose job are they anyway?
 
Distributed Agile Teams
Distributed Agile TeamsDistributed Agile Teams
Distributed Agile Teams
 
Turning Passion Into Words
Turning Passion Into WordsTurning Passion Into Words
Turning Passion Into Words
 
Requirements: Whose job are they anyway?
Requirements: Whose job are they anyway?Requirements: Whose job are they anyway?
Requirements: Whose job are they anyway?
 
Effective entrepreneurship for developers
Effective entrepreneurship for developersEffective entrepreneurship for developers
Effective entrepreneurship for developers
 
Java Multithreading Developer.pdf
Java Multithreading Developer.pdfJava Multithreading Developer.pdf
Java Multithreading Developer.pdf
 
Java Developer
Java DeveloperJava Developer
Java Developer
 

Más de Carlos Ble

Gestión de proyectos
Gestión de proyectosGestión de proyectos
Gestión de proyectosCarlos Ble
 
Carbon offsetting
Carbon offsettingCarbon offsetting
Carbon offsettingCarlos Ble
 
BDD - Test Academy Barcelona 2017
BDD - Test Academy Barcelona 2017BDD - Test Academy Barcelona 2017
BDD - Test Academy Barcelona 2017Carlos Ble
 
Distinguir entre Problema y Solución
Distinguir entre Problema y SoluciónDistinguir entre Problema y Solución
Distinguir entre Problema y SoluciónCarlos Ble
 
ES6 Simplified
ES6 SimplifiedES6 Simplified
ES6 SimplifiedCarlos Ble
 
Behavior Driven Development - Material de clase PMA
Behavior Driven Development - Material de clase PMABehavior Driven Development - Material de clase PMA
Behavior Driven Development - Material de clase PMACarlos Ble
 
Apuntes #XPweek
Apuntes #XPweekApuntes #XPweek
Apuntes #XPweekCarlos Ble
 
TDD in the Web with Python and Django
TDD in the Web with Python and DjangoTDD in the Web with Python and Django
TDD in the Web with Python and DjangoCarlos Ble
 
Charla Tdd Uji 032010
Charla Tdd Uji 032010Charla Tdd Uji 032010
Charla Tdd Uji 032010Carlos Ble
 

Más de Carlos Ble (9)

Gestión de proyectos
Gestión de proyectosGestión de proyectos
Gestión de proyectos
 
Carbon offsetting
Carbon offsettingCarbon offsetting
Carbon offsetting
 
BDD - Test Academy Barcelona 2017
BDD - Test Academy Barcelona 2017BDD - Test Academy Barcelona 2017
BDD - Test Academy Barcelona 2017
 
Distinguir entre Problema y Solución
Distinguir entre Problema y SoluciónDistinguir entre Problema y Solución
Distinguir entre Problema y Solución
 
ES6 Simplified
ES6 SimplifiedES6 Simplified
ES6 Simplified
 
Behavior Driven Development - Material de clase PMA
Behavior Driven Development - Material de clase PMABehavior Driven Development - Material de clase PMA
Behavior Driven Development - Material de clase PMA
 
Apuntes #XPweek
Apuntes #XPweekApuntes #XPweek
Apuntes #XPweek
 
TDD in the Web with Python and Django
TDD in the Web with Python and DjangoTDD in the Web with Python and Django
TDD in the Web with Python and Django
 
Charla Tdd Uji 032010
Charla Tdd Uji 032010Charla Tdd Uji 032010
Charla Tdd Uji 032010
 

Último

home automation using Arduino by Aditya Prasad
home automation using Arduino by Aditya Prasadhome automation using Arduino by Aditya Prasad
home automation using Arduino by Aditya Prasadaditya806802
 
THE SENDAI FRAMEWORK FOR DISASTER RISK REDUCTION
THE SENDAI FRAMEWORK FOR DISASTER RISK REDUCTIONTHE SENDAI FRAMEWORK FOR DISASTER RISK REDUCTION
THE SENDAI FRAMEWORK FOR DISASTER RISK REDUCTIONjhunlian
 
Internet of things -Arshdeep Bahga .pptx
Internet of things -Arshdeep Bahga .pptxInternet of things -Arshdeep Bahga .pptx
Internet of things -Arshdeep Bahga .pptxVelmuruganTECE
 
Correctly Loading Incremental Data at Scale
Correctly Loading Incremental Data at ScaleCorrectly Loading Incremental Data at Scale
Correctly Loading Incremental Data at ScaleAlluxio, Inc.
 
Unit7-DC_Motors nkkjnsdkfnfcdfknfdgfggfg
Unit7-DC_Motors nkkjnsdkfnfcdfknfdgfggfgUnit7-DC_Motors nkkjnsdkfnfcdfknfdgfggfg
Unit7-DC_Motors nkkjnsdkfnfcdfknfdgfggfgsaravananr517913
 
Comparative study of High-rise Building Using ETABS,SAP200 and SAFE., SAFE an...
Comparative study of High-rise Building Using ETABS,SAP200 and SAFE., SAFE an...Comparative study of High-rise Building Using ETABS,SAP200 and SAFE., SAFE an...
Comparative study of High-rise Building Using ETABS,SAP200 and SAFE., SAFE an...Erbil Polytechnic University
 
Work Experience-Dalton Park.pptxfvvvvvvv
Work Experience-Dalton Park.pptxfvvvvvvvWork Experience-Dalton Park.pptxfvvvvvvv
Work Experience-Dalton Park.pptxfvvvvvvvLewisJB
 
Software and Systems Engineering Standards: Verification and Validation of Sy...
Software and Systems Engineering Standards: Verification and Validation of Sy...Software and Systems Engineering Standards: Verification and Validation of Sy...
Software and Systems Engineering Standards: Verification and Validation of Sy...VICTOR MAESTRE RAMIREZ
 
Class 1 | NFPA 72 | Overview Fire Alarm System
Class 1 | NFPA 72 | Overview Fire Alarm SystemClass 1 | NFPA 72 | Overview Fire Alarm System
Class 1 | NFPA 72 | Overview Fire Alarm Systemirfanmechengr
 
US Department of Education FAFSA Week of Action
US Department of Education FAFSA Week of ActionUS Department of Education FAFSA Week of Action
US Department of Education FAFSA Week of ActionMebane Rash
 
Mine Environment II Lab_MI10448MI__________.pptx
Mine Environment II Lab_MI10448MI__________.pptxMine Environment II Lab_MI10448MI__________.pptx
Mine Environment II Lab_MI10448MI__________.pptxRomil Mishra
 
Cooling Tower SERD pH drop issue (11 April 2024) .pptx
Cooling Tower SERD pH drop issue (11 April 2024) .pptxCooling Tower SERD pH drop issue (11 April 2024) .pptx
Cooling Tower SERD pH drop issue (11 April 2024) .pptxmamansuratman0253
 
Python Programming for basic beginners.pptx
Python Programming for basic beginners.pptxPython Programming for basic beginners.pptx
Python Programming for basic beginners.pptxmohitesoham12
 
multiple access in wireless communication
multiple access in wireless communicationmultiple access in wireless communication
multiple access in wireless communicationpanditadesh123
 
National Level Hackathon Participation Certificate.pdf
National Level Hackathon Participation Certificate.pdfNational Level Hackathon Participation Certificate.pdf
National Level Hackathon Participation Certificate.pdfRajuKanojiya4
 
Indian Dairy Industry Present Status and.ppt
Indian Dairy Industry Present Status and.pptIndian Dairy Industry Present Status and.ppt
Indian Dairy Industry Present Status and.pptMadan Karki
 
CCS355 Neural Networks & Deep Learning Unit 1 PDF notes with Question bank .pdf
CCS355 Neural Networks & Deep Learning Unit 1 PDF notes with Question bank .pdfCCS355 Neural Networks & Deep Learning Unit 1 PDF notes with Question bank .pdf
CCS355 Neural Networks & Deep Learning Unit 1 PDF notes with Question bank .pdfAsst.prof M.Gokilavani
 
Arduino_CSE ece ppt for working and principal of arduino.ppt
Arduino_CSE ece ppt for working and principal of arduino.pptArduino_CSE ece ppt for working and principal of arduino.ppt
Arduino_CSE ece ppt for working and principal of arduino.pptSAURABHKUMAR892774
 

Último (20)

Designing pile caps according to ACI 318-19.pptx
Designing pile caps according to ACI 318-19.pptxDesigning pile caps according to ACI 318-19.pptx
Designing pile caps according to ACI 318-19.pptx
 
home automation using Arduino by Aditya Prasad
home automation using Arduino by Aditya Prasadhome automation using Arduino by Aditya Prasad
home automation using Arduino by Aditya Prasad
 
THE SENDAI FRAMEWORK FOR DISASTER RISK REDUCTION
THE SENDAI FRAMEWORK FOR DISASTER RISK REDUCTIONTHE SENDAI FRAMEWORK FOR DISASTER RISK REDUCTION
THE SENDAI FRAMEWORK FOR DISASTER RISK REDUCTION
 
Internet of things -Arshdeep Bahga .pptx
Internet of things -Arshdeep Bahga .pptxInternet of things -Arshdeep Bahga .pptx
Internet of things -Arshdeep Bahga .pptx
 
Correctly Loading Incremental Data at Scale
Correctly Loading Incremental Data at ScaleCorrectly Loading Incremental Data at Scale
Correctly Loading Incremental Data at Scale
 
Unit7-DC_Motors nkkjnsdkfnfcdfknfdgfggfg
Unit7-DC_Motors nkkjnsdkfnfcdfknfdgfggfgUnit7-DC_Motors nkkjnsdkfnfcdfknfdgfggfg
Unit7-DC_Motors nkkjnsdkfnfcdfknfdgfggfg
 
Comparative study of High-rise Building Using ETABS,SAP200 and SAFE., SAFE an...
Comparative study of High-rise Building Using ETABS,SAP200 and SAFE., SAFE an...Comparative study of High-rise Building Using ETABS,SAP200 and SAFE., SAFE an...
Comparative study of High-rise Building Using ETABS,SAP200 and SAFE., SAFE an...
 
Work Experience-Dalton Park.pptxfvvvvvvv
Work Experience-Dalton Park.pptxfvvvvvvvWork Experience-Dalton Park.pptxfvvvvvvv
Work Experience-Dalton Park.pptxfvvvvvvv
 
Software and Systems Engineering Standards: Verification and Validation of Sy...
Software and Systems Engineering Standards: Verification and Validation of Sy...Software and Systems Engineering Standards: Verification and Validation of Sy...
Software and Systems Engineering Standards: Verification and Validation of Sy...
 
Class 1 | NFPA 72 | Overview Fire Alarm System
Class 1 | NFPA 72 | Overview Fire Alarm SystemClass 1 | NFPA 72 | Overview Fire Alarm System
Class 1 | NFPA 72 | Overview Fire Alarm System
 
US Department of Education FAFSA Week of Action
US Department of Education FAFSA Week of ActionUS Department of Education FAFSA Week of Action
US Department of Education FAFSA Week of Action
 
Mine Environment II Lab_MI10448MI__________.pptx
Mine Environment II Lab_MI10448MI__________.pptxMine Environment II Lab_MI10448MI__________.pptx
Mine Environment II Lab_MI10448MI__________.pptx
 
Design and analysis of solar grass cutter.pdf
Design and analysis of solar grass cutter.pdfDesign and analysis of solar grass cutter.pdf
Design and analysis of solar grass cutter.pdf
 
Cooling Tower SERD pH drop issue (11 April 2024) .pptx
Cooling Tower SERD pH drop issue (11 April 2024) .pptxCooling Tower SERD pH drop issue (11 April 2024) .pptx
Cooling Tower SERD pH drop issue (11 April 2024) .pptx
 
Python Programming for basic beginners.pptx
Python Programming for basic beginners.pptxPython Programming for basic beginners.pptx
Python Programming for basic beginners.pptx
 
multiple access in wireless communication
multiple access in wireless communicationmultiple access in wireless communication
multiple access in wireless communication
 
National Level Hackathon Participation Certificate.pdf
National Level Hackathon Participation Certificate.pdfNational Level Hackathon Participation Certificate.pdf
National Level Hackathon Participation Certificate.pdf
 
Indian Dairy Industry Present Status and.ppt
Indian Dairy Industry Present Status and.pptIndian Dairy Industry Present Status and.ppt
Indian Dairy Industry Present Status and.ppt
 
CCS355 Neural Networks & Deep Learning Unit 1 PDF notes with Question bank .pdf
CCS355 Neural Networks & Deep Learning Unit 1 PDF notes with Question bank .pdfCCS355 Neural Networks & Deep Learning Unit 1 PDF notes with Question bank .pdf
CCS355 Neural Networks & Deep Learning Unit 1 PDF notes with Question bank .pdf
 
Arduino_CSE ece ppt for working and principal of arduino.ppt
Arduino_CSE ece ppt for working and principal of arduino.pptArduino_CSE ece ppt for working and principal of arduino.ppt
Arduino_CSE ece ppt for working and principal of arduino.ppt
 

Maintainable software

  • 2. About meAbout me Developer, Speaker, Author, Trainer, Entrepreneur Founder of Lean Mind Software Craftsmanhip Community Member Brought SoCraTes to the Canary Islands Co-founder of Agile Canarias & Agile Spain @carlosble
  • 4. Why is it hard to maintain?Why is it hard to maintain? 1 - Don’t consider your audience when writing new code 2- Don’t refactor every day @carlosble
  • 5. Consider your audienceConsider your audience Don’t aim for reusability ● Accidental Complexity ● Painful generalizations ● Premature optimizations Standards are not enough ● Frameworks, Three tiers, MVC, MVP... ● File per class, small code units, PR, metrics ● Linters, Compilers, Coding standards ● Quality Attributes @carlosble Explicit domain core ✔ Names and abstractions ✔ Avoid primitives ✔ Domain Driven Design ✔ Design Principles ✔ Tests as documentation ✔ Framework agnostic ✔ Database structure agnostic Paradigms don’t solve the problem either ● Imperative, Declarative ● Multi-paradigm
  • 6. Domain at the coreDomain at the core - yes! also in the front-end- yes! also in the front-end @carlosble input Data Store output Infrastructure: - Controller - Component - Action - ViewModel - Dispatcher DOMAIN CORE Infrastructure: - Repository - Mapper - Client - DTO - Mailer 3rd party system output Service Entity Value Object Entity Delivery mechanism Domain core doesn’t know the outer layers (clean architecture: mind dependencies’ direction)
  • 7. Example: Interaction-Driven DesignExample: Interaction-Driven Design @carlosble Image from Sandro Mancuso, author of IDD https://dzone.com/articles/introducing-interaction-driven-design
  • 8. You’re wrong anyway, refactor please!You’re wrong anyway, refactor please! It’s about ROI ● Avoid analysis paralysis ● Small thoughtful changes keep the project on the green field ● We re-discover the business as we work on it ● Code is the single source of truth Balance ● Aim for decent quality, not perfection ● Technical debt under control ● Proud of a well-done job ● Control your optimism @carlosble Every day ● Warm up reading yesterday’s code, like a kata ● Automatic changes with an IDE ● Pair review, Pair programming Pick your battles ● The low hanging fruit ● Refactor to understand the code ● Discard your changes when needed ● Delete all the lines you safely could ● If it works don’t touch it