SlideShare a Scribd company logo
1 of 73
Download to read offline
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

More Related Content

Viewers also liked

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
 

Viewers also liked (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
 

Recently uploaded

GraphSummit Madrid - Product Vision and Roadmap - Luis Salvador Neo4j
GraphSummit Madrid - Product Vision and Roadmap - Luis Salvador Neo4jGraphSummit Madrid - Product Vision and Roadmap - Luis Salvador Neo4j
GraphSummit Madrid - Product Vision and Roadmap - Luis Salvador Neo4jNeo4j
 
2024-04-09 - From Complexity to Clarity - AWS Summit AMS.pdf
2024-04-09 - From Complexity to Clarity - AWS Summit AMS.pdf2024-04-09 - From Complexity to Clarity - AWS Summit AMS.pdf
2024-04-09 - From Complexity to Clarity - AWS Summit AMS.pdfAndrey Devyatkin
 
Introduction to Firebase Workshop Slides
Introduction to Firebase Workshop SlidesIntroduction to Firebase Workshop Slides
Introduction to Firebase Workshop Slidesvaideheekore1
 
Strategies for using alternative queries to mitigate zero results
Strategies for using alternative queries to mitigate zero resultsStrategies for using alternative queries to mitigate zero results
Strategies for using alternative queries to mitigate zero resultsJean Silva
 
Enhancing Supply Chain Visibility with Cargo Cloud Solutions.pdf
Enhancing Supply Chain Visibility with Cargo Cloud Solutions.pdfEnhancing Supply Chain Visibility with Cargo Cloud Solutions.pdf
Enhancing Supply Chain Visibility with Cargo Cloud Solutions.pdfRTS corp
 
Osi security architecture in network.pptx
Osi security architecture in network.pptxOsi security architecture in network.pptx
Osi security architecture in network.pptxVinzoCenzo
 
UI5ers live - Custom Controls wrapping 3rd-party libs.pptx
UI5ers live - Custom Controls wrapping 3rd-party libs.pptxUI5ers live - Custom Controls wrapping 3rd-party libs.pptx
UI5ers live - Custom Controls wrapping 3rd-party libs.pptxAndreas Kunz
 
OpenChain Education Work Group Monthly Meeting - 2024-04-10 - Full Recording
OpenChain Education Work Group Monthly Meeting - 2024-04-10 - Full RecordingOpenChain Education Work Group Monthly Meeting - 2024-04-10 - Full Recording
OpenChain Education Work Group Monthly Meeting - 2024-04-10 - Full RecordingShane Coughlan
 
eSoftTools IMAP Backup Software and migration tools
eSoftTools IMAP Backup Software and migration toolseSoftTools IMAP Backup Software and migration tools
eSoftTools IMAP Backup Software and migration toolsosttopstonverter
 
Ronisha Informatics Private Limited Catalogue
Ronisha Informatics Private Limited CatalogueRonisha Informatics Private Limited Catalogue
Ronisha Informatics Private Limited Catalogueitservices996
 
Leveraging AI for Mobile App Testing on Real Devices | Applitools + Kobiton
Leveraging AI for Mobile App Testing on Real Devices | Applitools + KobitonLeveraging AI for Mobile App Testing on Real Devices | Applitools + Kobiton
Leveraging AI for Mobile App Testing on Real Devices | Applitools + KobitonApplitools
 
Effectively Troubleshoot 9 Types of OutOfMemoryError
Effectively Troubleshoot 9 Types of OutOfMemoryErrorEffectively Troubleshoot 9 Types of OutOfMemoryError
Effectively Troubleshoot 9 Types of OutOfMemoryErrorTier1 app
 
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
 
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
 
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
 
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
 
Zer0con 2024 final share short version.pdf
Zer0con 2024 final share short version.pdfZer0con 2024 final share short version.pdf
Zer0con 2024 final share short version.pdfmaor17
 
Pros and Cons of Selenium In Automation Testing_ A Comprehensive Assessment.pdf
Pros and Cons of Selenium In Automation Testing_ A Comprehensive Assessment.pdfPros and Cons of Selenium In Automation Testing_ A Comprehensive Assessment.pdf
Pros and Cons of Selenium In Automation Testing_ A Comprehensive Assessment.pdfkalichargn70th171
 
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
 
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
 

Recently uploaded (20)

GraphSummit Madrid - Product Vision and Roadmap - Luis Salvador Neo4j
GraphSummit Madrid - Product Vision and Roadmap - Luis Salvador Neo4jGraphSummit Madrid - Product Vision and Roadmap - Luis Salvador Neo4j
GraphSummit Madrid - Product Vision and Roadmap - Luis Salvador Neo4j
 
2024-04-09 - From Complexity to Clarity - AWS Summit AMS.pdf
2024-04-09 - From Complexity to Clarity - AWS Summit AMS.pdf2024-04-09 - From Complexity to Clarity - AWS Summit AMS.pdf
2024-04-09 - From Complexity to Clarity - AWS Summit AMS.pdf
 
Introduction to Firebase Workshop Slides
Introduction to Firebase Workshop SlidesIntroduction to Firebase Workshop Slides
Introduction to Firebase Workshop Slides
 
Strategies for using alternative queries to mitigate zero results
Strategies for using alternative queries to mitigate zero resultsStrategies for using alternative queries to mitigate zero results
Strategies for using alternative queries to mitigate zero results
 
Enhancing Supply Chain Visibility with Cargo Cloud Solutions.pdf
Enhancing Supply Chain Visibility with Cargo Cloud Solutions.pdfEnhancing Supply Chain Visibility with Cargo Cloud Solutions.pdf
Enhancing Supply Chain Visibility with Cargo Cloud Solutions.pdf
 
Osi security architecture in network.pptx
Osi security architecture in network.pptxOsi security architecture in network.pptx
Osi security architecture in network.pptx
 
UI5ers live - Custom Controls wrapping 3rd-party libs.pptx
UI5ers live - Custom Controls wrapping 3rd-party libs.pptxUI5ers live - Custom Controls wrapping 3rd-party libs.pptx
UI5ers live - Custom Controls wrapping 3rd-party libs.pptx
 
OpenChain Education Work Group Monthly Meeting - 2024-04-10 - Full Recording
OpenChain Education Work Group Monthly Meeting - 2024-04-10 - Full RecordingOpenChain Education Work Group Monthly Meeting - 2024-04-10 - Full Recording
OpenChain Education Work Group Monthly Meeting - 2024-04-10 - Full Recording
 
eSoftTools IMAP Backup Software and migration tools
eSoftTools IMAP Backup Software and migration toolseSoftTools IMAP Backup Software and migration tools
eSoftTools IMAP Backup Software and migration tools
 
Ronisha Informatics Private Limited Catalogue
Ronisha Informatics Private Limited CatalogueRonisha Informatics Private Limited Catalogue
Ronisha Informatics Private Limited Catalogue
 
Leveraging AI for Mobile App Testing on Real Devices | Applitools + Kobiton
Leveraging AI for Mobile App Testing on Real Devices | Applitools + KobitonLeveraging AI for Mobile App Testing on Real Devices | Applitools + Kobiton
Leveraging AI for Mobile App Testing on Real Devices | Applitools + Kobiton
 
Effectively Troubleshoot 9 Types of OutOfMemoryError
Effectively Troubleshoot 9 Types of OutOfMemoryErrorEffectively Troubleshoot 9 Types of OutOfMemoryError
Effectively Troubleshoot 9 Types of OutOfMemoryError
 
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
 
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
 
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
 
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
 
Zer0con 2024 final share short version.pdf
Zer0con 2024 final share short version.pdfZer0con 2024 final share short version.pdf
Zer0con 2024 final share short version.pdf
 
Pros and Cons of Selenium In Automation Testing_ A Comprehensive Assessment.pdf
Pros and Cons of Selenium In Automation Testing_ A Comprehensive Assessment.pdfPros and Cons of Selenium In Automation Testing_ A Comprehensive Assessment.pdf
Pros and Cons of Selenium In Automation Testing_ A Comprehensive Assessment.pdf
 
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 ?
 
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...
 

Pycon 2015 - Technical Debt - The Monster in Your Closet