SlideShare una empresa de Scribd logo
1 de 73
Descargar para leer sin conexión
TECHNICAL DEBT
!
THE CODE MONSTER IN
YOUR CLOSET
Nina Zakharenko
@nnja
WHAT IS
TECHNICAL
DEBT?
(BOTH BUSINESS & TECHNICAL)
A SERIES OF
BAD DECISIONS
WHICH LEAD TO
ERROR PRONE CODE
& ARCHITECTURE
… AND USING MORE
TO ACCOMPLISH
RESOURCES
LESS
What decisions were
made in the past
that prevent me from
getting sh** done today?
WHAT CAUSES IT?
ME.
AND YOU.
Mistakes I Made Early On
Not knowing how to say NO to features
Not seeing the value in Unit Tests
Mistakes I Made Early On
Overly Optimistic Estimates
Putting releases over good design & reusable code
TIME CRUNCH
The project was due yesterday!
I’ll take a shortcut, and clean up the mess tomorrow.
UNNEEDED COMPLEXITY
Lines of code committed != amount of work
accomplished.
Step 1: Have a problem.
Step 2: Look up How to do it on Stack Exchange
LACK OF UNDERSTANDING
Step 3: Copy and Paste it into your codebase
Step 4: ???
Step 5: Bugs!
CULTURE OF DESPAIR
This is already a heap of trash.
Will anyone really notice if I add something to the top?
RED FLAGS
Houston, We Have a Problem.
CODE SMELLS?
Not bugs.
An indication of a deeper problem.
CODE SMELLS
• Half implemented features
• No or poor documentation
CODE SMELLS
• Commented out code, incorrect comments
• No tests or broken tests
POOR DOCUMENTATION
class OrganicGlutenFreePizzaFactory:
def get_dough(self):
"""
        Return amazing, organic, GMO and Gluten Free Dough
        """
# ran out of organic gluten free, use the other
stuff.
!
# return 'organic gluten free dough'
return 'gmo white pesticide dough'
ARCHITECTURE & DESIGN… SMELLS
• Parts of the code that no one wants to touch
• Changing code in one area breaks other parts of the
system
• Severe outages caused by frequent & unexpected
bugs
GOOD DESIGN
Implementing new features comes easily.
BAD DESIGN
Shoe-horning new features into the system.
PYTHON SPECIFIC SMELLS
Functionality Changes,
Variable names Don’t.
employees = ['John', 'Mary', 'Dale']
!
employees = 'Bob'
!
employees[0]
Monkey Patching
def new_init(self):
pass
!
some_library.SomeClass.__init__ = new_init
What exactly does that decorator do?
def decorator_evil(target):
return False
!
@decorator_evil
def target(a,b):
return a + b
!
>>> target
False
!
>>> target(1,2)
TypeError: 'bool' object is not callable
Circular Dependencies
def some_function(x):
from some.module import some_method
some_method(x)
CASE STUDIES
IRS CHIEF:
"We Still Have Applications That Were Running When
JFK Was President"
50 Year old Technology
"And we continue to use the COBOL programming
language, it is extremely difficult to find IT experts who
are versed in this language.”
It’s not just the IRS.
Banks & Financial Insitutions
Universities
Air Traffic Control
!
… all use COBOL.
STORY TIME
I used to work in finance.
At the time I was there, all of the banking systems were
run on mainframes.
The bankers were getting frustrated. They wanted a UI.
IDEA!
Let’s write a fancy new web front end.
It’ll do ALL the things.
BUT
Rewriting the backend is too expensive.
!
It already does what we need.
!
Let’s leave the mainframe.
CURSORS
The mainframe would output a text screen from a
program result, based on a query.
The results would be parsed by reading variables from
the screen in certain positions.
RESULT?
The new system was incredibly slow.
And error prone.
!
After months of work, the multi-million dollar rewrite
was scrapped.
YOU CAN PUT LIPSTICK ON A PIG
THE MVP
(Minimum Viable Product)
Get the product to early customers as soon as possible.
A GREAT IDEA
I worked on a project that was created by a lone
developer in a coffee fueled 48 hours.
It was a great success.
THERE WAS A PROBLEM
Years went on, but the initial code and design didn’t go
away.
Instead, it became the base for an expanding project,
with expanding features.
Worse, there was never any time to refactor.
SCOPE CREEP
Features that someone thought was a good idea one
day, stuck around forever.
“In case we need them. Later.”
SAD DEVELOPERS
That made it feel like your fault.
When a release was pushed, something was bound to
break.
There were no working tests.
GRINDING TO A HALT
Development time for new features skyrocketed.
The project was deemed too difficult to maintain.
… and cancelled.
SOMETIMES YOU NEED
TO BURN IT. WITH FIRE.
BATTLING THE MONSTER
Technical Debt is a team-wide problem.
Everybody needs to be a part of the solution.
DON’T POINT FINGERS
WORK TOGETHER
Code Standards
Pair Programming
Code Reviews
Unless something is on fire, or you’re losing money,
unreviewed code should never be merged into master.
STAY ACCOUNTABLE
Unit & Integration Tests
Pre-Commit Hooks
Continuous Integration
SELL IT TO MANAGEMENT
By allocating some project time to tackling debt, the
end result will be less error prone, easier to maintain,
and easier to add features to.
TIME
COST
Source: https://msdn.microsoft.com/en-us/magazine/ee819135.aspx
NOT BROKEN, WHY FIX IT?
SKI RENTAL PROBLEM
You’re going skiing for an unknown number of days.
!
It costs $1 a day to rent, or $10 to buy.
Source: http://en.wikipedia.org/wiki/Ski_rental_problem
Technical debt frustrates developers.
Frustrated developers are more likely to leave.
THERE’S ANOTHER COST
Hiring developers is hard.
Figure out the project tolerance and work with it.
Don’t be a perfectionist.
Some lingering technical debt is inevitable.
Use these arguments to justify the additional
time it takes you to do things right.
“Always code as if the guy who ends up
maintaining your code will be a violent
psychopath who knows where you
live.”
- Martin Golding
@
TO WIN THE FIGHT
PAY DOWN YOUR DEBT
PRIORITIZE
What causes the biggest & most frequent pain points for
developers?
What is the life expectancy of this project?
longer shelf life —> higher interest
SHELF LIFE
Just like with monetary debt, pay off the high interest
loan first.
If you don’t have to pay it off, you got something for
nothing.
Technical Debt can be strategic.
Is the single greatest tool in your toolbox.
REFACTORING
Systematically changing the code without changing
functionality, while improving design and readability.
WHAT IS IT?
Slow and steady wins the race.
REFACTORING
The end goal is to refactor, without breaking existing
functionality.
Replace functions and modules incrementally.
REFACTORING
Test as you go.
Tests are MANDATORY at this step.
How you make time for refactoring depends on the size
of your team.
MAKING TIME
(And the size of your problem)
Devote a week every 6 - 8 weeks.
SMALL
MEDIUM
Devote a person per week, rotate.
LARGE
Everyone devotes 10% of their time.
A FEW LAST TIPS
CODE IS FOR HUMANS
Source: http://despairsoftware.blogspot.com/2014/05/engineering-principles-software-best.html
Despite common misconception, code is not for
computers.
!
Code is for humans to read.
DON’T REPEAT YOURSELF
Source: http://despairsoftware.blogspot.com/2014/05/engineering-principles-software-best.html
If being DRY requires mind-bending backflips and
abstractions, stop.
(BUT)
THE BOY SCOUT RULE
The Boy Scouts have a rule: "Always leave the
campground cleaner than you found it."
Source: http://programmer.97things.oreilly.com/wiki/index.php/The_Boy_Scout_Rule
"Always check a module in cleaner than when you
checked it out."
EXPECT TO BE FRUSTRATED
The process of cleaning up days / months / years
of bad code can be analogous with untangling a ball of
yarn.
!
Don’t give up.
THANK YOU!
I’m Nina Zakharenko
@nnja /nnja
nnja.dev@gmail.com

Más contenido relacionado

Destacado

Identifying and Managing Technical Debt
Identifying and Managing Technical DebtIdentifying and Managing Technical Debt
Identifying and Managing Technical Debtzazworka
 
Technical Debt: Do Not Underestimate The Danger
Technical Debt: Do Not Underestimate The DangerTechnical Debt: Do Not Underestimate The Danger
Technical Debt: Do Not Underestimate The DangerLemi Orhan Ergin
 
Nina Zakharenko - Introduction to Git - Start SLC 2015
Nina Zakharenko - Introduction to Git - Start SLC 2015Nina Zakharenko - Introduction to Git - Start SLC 2015
Nina Zakharenko - Introduction to Git - Start SLC 2015Nina Zakharenko
 
Djangocon 2014 angular + django
Djangocon 2014 angular + djangoDjangocon 2014 angular + django
Djangocon 2014 angular + djangoNina Zakharenko
 
Djangocon 2014 - Django REST Framework - So Easy You Can Learn it in 25 Minutes
Djangocon 2014 - Django REST Framework - So Easy You Can Learn it in 25 MinutesDjangocon 2014 - Django REST Framework - So Easy You Can Learn it in 25 Minutes
Djangocon 2014 - Django REST Framework - So Easy You Can Learn it in 25 MinutesNina Zakharenko
 
Memory Management In Python The Basics
Memory Management In Python The BasicsMemory Management In Python The Basics
Memory Management In Python The BasicsNina Zakharenko
 
How to successfully grow a code review culture
How to successfully grow a code review cultureHow to successfully grow a code review culture
How to successfully grow a code review cultureNina Zakharenko
 
NoSQL Nedir MongoDB ile .NET Kardeşliği
NoSQL Nedir MongoDB ile .NET KardeşliğiNoSQL Nedir MongoDB ile .NET Kardeşliği
NoSQL Nedir MongoDB ile .NET Kardeşliğiİbrahim ATAY
 
GOOGLE: Designs, Lessons and Advice from Building Large Distributed Systems
GOOGLE: Designs, Lessons and Advice from Building Large   Distributed Systems GOOGLE: Designs, Lessons and Advice from Building Large   Distributed Systems
GOOGLE: Designs, Lessons and Advice from Building Large Distributed Systems xlight
 
Getting Started with WebSocket and Server-Sent Events in Java
Getting Started with WebSocket and Server-Sent Events in JavaGetting Started with WebSocket and Server-Sent Events in Java
Getting Started with WebSocket and Server-Sent Events in JavaArun Gupta
 
Server-Side Programming Primer
Server-Side Programming PrimerServer-Side Programming Primer
Server-Side Programming PrimerIvano Malavolta
 
Technical Debt
Technical DebtTechnical Debt
Technical DebtRob Myers
 
Avoiding damage, shame and regrets data protection for mobile client-server a...
Avoiding damage, shame and regrets data protection for mobile client-server a...Avoiding damage, shame and regrets data protection for mobile client-server a...
Avoiding damage, shame and regrets data protection for mobile client-server a...Stanfy
 
ASP.Net MVC ile Web Uygulamaları -8(NHibernate)
ASP.Net MVC ile Web Uygulamaları -8(NHibernate)ASP.Net MVC ile Web Uygulamaları -8(NHibernate)
ASP.Net MVC ile Web Uygulamaları -8(NHibernate)İbrahim ATAY
 
Leadership Styles Your Team Needs
Leadership Styles Your Team NeedsLeadership Styles Your Team Needs
Leadership Styles Your Team NeedsJoshua Howard
 
Building single page applications
Building single page applicationsBuilding single page applications
Building single page applicationsSC5.io
 

Destacado (20)

Identifying and Managing Technical Debt
Identifying and Managing Technical DebtIdentifying and Managing Technical Debt
Identifying and Managing Technical Debt
 
Technical Debt: Do Not Underestimate The Danger
Technical Debt: Do Not Underestimate The DangerTechnical Debt: Do Not Underestimate The Danger
Technical Debt: Do Not Underestimate The Danger
 
Nina Zakharenko - Introduction to Git - Start SLC 2015
Nina Zakharenko - Introduction to Git - Start SLC 2015Nina Zakharenko - Introduction to Git - Start SLC 2015
Nina Zakharenko - Introduction to Git - Start SLC 2015
 
Djangocon 2014 angular + django
Djangocon 2014 angular + djangoDjangocon 2014 angular + django
Djangocon 2014 angular + django
 
Djangocon 2014 - Django REST Framework - So Easy You Can Learn it in 25 Minutes
Djangocon 2014 - Django REST Framework - So Easy You Can Learn it in 25 MinutesDjangocon 2014 - Django REST Framework - So Easy You Can Learn it in 25 Minutes
Djangocon 2014 - Django REST Framework - So Easy You Can Learn it in 25 Minutes
 
Memory Management In Python The Basics
Memory Management In Python The BasicsMemory Management In Python The Basics
Memory Management In Python The Basics
 
How to successfully grow a code review culture
How to successfully grow a code review cultureHow to successfully grow a code review culture
How to successfully grow a code review culture
 
NoSQL Nedir MongoDB ile .NET Kardeşliği
NoSQL Nedir MongoDB ile .NET KardeşliğiNoSQL Nedir MongoDB ile .NET Kardeşliği
NoSQL Nedir MongoDB ile .NET Kardeşliği
 
Nosql ve mongoDB
Nosql ve mongoDBNosql ve mongoDB
Nosql ve mongoDB
 
GOOGLE: Designs, Lessons and Advice from Building Large Distributed Systems
GOOGLE: Designs, Lessons and Advice from Building Large   Distributed Systems GOOGLE: Designs, Lessons and Advice from Building Large   Distributed Systems
GOOGLE: Designs, Lessons and Advice from Building Large Distributed Systems
 
Getting Started with WebSocket and Server-Sent Events in Java
Getting Started with WebSocket and Server-Sent Events in JavaGetting Started with WebSocket and Server-Sent Events in Java
Getting Started with WebSocket and Server-Sent Events in Java
 
Server-Side Programming Primer
Server-Side Programming PrimerServer-Side Programming Primer
Server-Side Programming Primer
 
Technical Debt
Technical DebtTechnical Debt
Technical Debt
 
Avoiding damage, shame and regrets data protection for mobile client-server a...
Avoiding damage, shame and regrets data protection for mobile client-server a...Avoiding damage, shame and regrets data protection for mobile client-server a...
Avoiding damage, shame and regrets data protection for mobile client-server a...
 
ASP.Net MVC ile Web Uygulamaları -8(NHibernate)
ASP.Net MVC ile Web Uygulamaları -8(NHibernate)ASP.Net MVC ile Web Uygulamaları -8(NHibernate)
ASP.Net MVC ile Web Uygulamaları -8(NHibernate)
 
Access by Default
Access by DefaultAccess by Default
Access by Default
 
Leadership Styles Your Team Needs
Leadership Styles Your Team NeedsLeadership Styles Your Team Needs
Leadership Styles Your Team Needs
 
Agile Experience Design Framework
Agile Experience Design FrameworkAgile Experience Design Framework
Agile Experience Design Framework
 
Business Models
Business ModelsBusiness Models
Business Models
 
Building single page applications
Building single page applicationsBuilding single page applications
Building single page applications
 

Último

Patterns for automating API delivery. API conference
Patterns for automating API delivery. API conferencePatterns for automating API delivery. API conference
Patterns for automating API delivery. API conferencessuser9e7c64
 
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...Angel Borroy López
 
Ronisha Informatics Private Limited Catalogue
Ronisha Informatics Private Limited CatalogueRonisha Informatics Private Limited Catalogue
Ronisha Informatics Private Limited Catalogueitservices996
 
How to submit a standout Adobe Champion Application
How to submit a standout Adobe Champion ApplicationHow to submit a standout Adobe Champion Application
How to submit a standout Adobe Champion ApplicationBradBedford3
 
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...OnePlan Solutions
 
Salesforce Implementation Services PPT By ABSYZ
Salesforce Implementation Services PPT By ABSYZSalesforce Implementation Services PPT By ABSYZ
Salesforce Implementation Services PPT By ABSYZABSYZ Inc
 
Comparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdfComparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdfDrew Moseley
 
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...Cizo Technology Services
 
Sending Calendar Invites on SES and Calendarsnack.pdf
Sending Calendar Invites on SES and Calendarsnack.pdfSending Calendar Invites on SES and Calendarsnack.pdf
Sending Calendar Invites on SES and Calendarsnack.pdf31events.com
 
Osi security architecture in network.pptx
Osi security architecture in network.pptxOsi security architecture in network.pptx
Osi security architecture in network.pptxVinzoCenzo
 
SAM Training Session - How to use EXCEL ?
SAM Training Session - How to use EXCEL ?SAM Training Session - How to use EXCEL ?
SAM Training Session - How to use EXCEL ?Alexandre Beguel
 
Revolutionizing the Digital Transformation Office - Leveraging OnePlan’s AI a...
Revolutionizing the Digital Transformation Office - Leveraging OnePlan’s AI a...Revolutionizing the Digital Transformation Office - Leveraging OnePlan’s AI a...
Revolutionizing the Digital Transformation Office - Leveraging OnePlan’s AI a...OnePlan Solutions
 
Large Language Models for Test Case Evolution and Repair
Large Language Models for Test Case Evolution and RepairLarge Language Models for Test Case Evolution and Repair
Large Language Models for Test Case Evolution and RepairLionel Briand
 
VictoriaMetrics Anomaly Detection Updates: Q1 2024
VictoriaMetrics Anomaly Detection Updates: Q1 2024VictoriaMetrics Anomaly Detection Updates: Q1 2024
VictoriaMetrics Anomaly Detection Updates: Q1 2024VictoriaMetrics
 
JavaLand 2024 - Going serverless with Quarkus GraalVM native images and AWS L...
JavaLand 2024 - Going serverless with Quarkus GraalVM native images and AWS L...JavaLand 2024 - Going serverless with Quarkus GraalVM native images and AWS L...
JavaLand 2024 - Going serverless with Quarkus GraalVM native images and AWS L...Bert Jan Schrijver
 
What’s New in VictoriaMetrics: Q1 2024 Updates
What’s New in VictoriaMetrics: Q1 2024 UpdatesWhat’s New in VictoriaMetrics: Q1 2024 Updates
What’s New in VictoriaMetrics: Q1 2024 UpdatesVictoriaMetrics
 
The Role of IoT and Sensor Technology in Cargo Cloud Solutions.pptx
The Role of IoT and Sensor Technology in Cargo Cloud Solutions.pptxThe Role of IoT and Sensor Technology in Cargo Cloud Solutions.pptx
The Role of IoT and Sensor Technology in Cargo Cloud Solutions.pptxRTS corp
 
2024 DevNexus Patterns for Resiliency: Shuffle shards
2024 DevNexus Patterns for Resiliency: Shuffle shards2024 DevNexus Patterns for Resiliency: Shuffle shards
2024 DevNexus Patterns for Resiliency: Shuffle shardsChristopher Curtin
 
Simplifying Microservices & Apps - The art of effortless development - Meetup...
Simplifying Microservices & Apps - The art of effortless development - Meetup...Simplifying Microservices & Apps - The art of effortless development - Meetup...
Simplifying Microservices & Apps - The art of effortless development - Meetup...Rob Geurden
 
Best Angular 17 Classroom & Online training - Naresh IT
Best Angular 17 Classroom & Online training - Naresh ITBest Angular 17 Classroom & Online training - Naresh IT
Best Angular 17 Classroom & Online training - Naresh ITmanoharjgpsolutions
 

Último (20)

Patterns for automating API delivery. API conference
Patterns for automating API delivery. API conferencePatterns for automating API delivery. API conference
Patterns for automating API delivery. API conference
 
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
 
Ronisha Informatics Private Limited Catalogue
Ronisha Informatics Private Limited CatalogueRonisha Informatics Private Limited Catalogue
Ronisha Informatics Private Limited Catalogue
 
How to submit a standout Adobe Champion Application
How to submit a standout Adobe Champion ApplicationHow to submit a standout Adobe Champion Application
How to submit a standout Adobe Champion Application
 
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
 
Salesforce Implementation Services PPT By ABSYZ
Salesforce Implementation Services PPT By ABSYZSalesforce Implementation Services PPT By ABSYZ
Salesforce Implementation Services PPT By ABSYZ
 
Comparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdfComparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdf
 
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
 
Sending Calendar Invites on SES and Calendarsnack.pdf
Sending Calendar Invites on SES and Calendarsnack.pdfSending Calendar Invites on SES and Calendarsnack.pdf
Sending Calendar Invites on SES and Calendarsnack.pdf
 
Osi security architecture in network.pptx
Osi security architecture in network.pptxOsi security architecture in network.pptx
Osi security architecture in network.pptx
 
SAM Training Session - How to use EXCEL ?
SAM Training Session - How to use EXCEL ?SAM Training Session - How to use EXCEL ?
SAM Training Session - How to use EXCEL ?
 
Revolutionizing the Digital Transformation Office - Leveraging OnePlan’s AI a...
Revolutionizing the Digital Transformation Office - Leveraging OnePlan’s AI a...Revolutionizing the Digital Transformation Office - Leveraging OnePlan’s AI a...
Revolutionizing the Digital Transformation Office - Leveraging OnePlan’s AI a...
 
Large Language Models for Test Case Evolution and Repair
Large Language Models for Test Case Evolution and RepairLarge Language Models for Test Case Evolution and Repair
Large Language Models for Test Case Evolution and Repair
 
VictoriaMetrics Anomaly Detection Updates: Q1 2024
VictoriaMetrics Anomaly Detection Updates: Q1 2024VictoriaMetrics Anomaly Detection Updates: Q1 2024
VictoriaMetrics Anomaly Detection Updates: Q1 2024
 
JavaLand 2024 - Going serverless with Quarkus GraalVM native images and AWS L...
JavaLand 2024 - Going serverless with Quarkus GraalVM native images and AWS L...JavaLand 2024 - Going serverless with Quarkus GraalVM native images and AWS L...
JavaLand 2024 - Going serverless with Quarkus GraalVM native images and AWS L...
 
What’s New in VictoriaMetrics: Q1 2024 Updates
What’s New in VictoriaMetrics: Q1 2024 UpdatesWhat’s New in VictoriaMetrics: Q1 2024 Updates
What’s New in VictoriaMetrics: Q1 2024 Updates
 
The Role of IoT and Sensor Technology in Cargo Cloud Solutions.pptx
The Role of IoT and Sensor Technology in Cargo Cloud Solutions.pptxThe Role of IoT and Sensor Technology in Cargo Cloud Solutions.pptx
The Role of IoT and Sensor Technology in Cargo Cloud Solutions.pptx
 
2024 DevNexus Patterns for Resiliency: Shuffle shards
2024 DevNexus Patterns for Resiliency: Shuffle shards2024 DevNexus Patterns for Resiliency: Shuffle shards
2024 DevNexus Patterns for Resiliency: Shuffle shards
 
Simplifying Microservices & Apps - The art of effortless development - Meetup...
Simplifying Microservices & Apps - The art of effortless development - Meetup...Simplifying Microservices & Apps - The art of effortless development - Meetup...
Simplifying Microservices & Apps - The art of effortless development - Meetup...
 
Best Angular 17 Classroom & Online training - Naresh IT
Best Angular 17 Classroom & Online training - Naresh ITBest Angular 17 Classroom & Online training - Naresh IT
Best Angular 17 Classroom & Online training - Naresh IT
 

Pycon 2015 - Technical Debt - The Monster in Your Closet