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

Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...Natan Silnitsky
 
Ahmed Motair CV April 2024 (Senior SW Developer)
Ahmed Motair CV April 2024 (Senior SW Developer)Ahmed Motair CV April 2024 (Senior SW Developer)
Ahmed Motair CV April 2024 (Senior SW Developer)Ahmed Mater
 
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...Matt Ray
 
How To Manage Restaurant Staff -BTRESTRO
How To Manage Restaurant Staff -BTRESTROHow To Manage Restaurant Staff -BTRESTRO
How To Manage Restaurant Staff -BTRESTROmotivationalword821
 
What is Advanced Excel and what are some best practices for designing and cre...
What is Advanced Excel and what are some best practices for designing and cre...What is Advanced Excel and what are some best practices for designing and cre...
What is Advanced Excel and what are some best practices for designing and cre...Technogeeks
 
Cyber security and its impact on E commerce
Cyber security and its impact on E commerceCyber security and its impact on E commerce
Cyber security and its impact on E commercemanigoyal112
 
Intelligent Home Wi-Fi Solutions | ThinkPalm
Intelligent Home Wi-Fi Solutions | ThinkPalmIntelligent Home Wi-Fi Solutions | ThinkPalm
Intelligent Home Wi-Fi Solutions | ThinkPalmSujith Sukumaran
 
MYjobs Presentation Django-based project
MYjobs Presentation Django-based projectMYjobs Presentation Django-based project
MYjobs Presentation Django-based projectAnoyGreter
 
Folding Cheat Sheet #4 - fourth in a series
Folding Cheat Sheet #4 - fourth in a seriesFolding Cheat Sheet #4 - fourth in a series
Folding Cheat Sheet #4 - fourth in a seriesPhilip Schwarz
 
Odoo 14 - eLearning Module In Odoo 14 Enterprise
Odoo 14 - eLearning Module In Odoo 14 EnterpriseOdoo 14 - eLearning Module In Odoo 14 Enterprise
Odoo 14 - eLearning Module In Odoo 14 Enterprisepreethippts
 
SpotFlow: Tracking Method Calls and States at Runtime
SpotFlow: Tracking Method Calls and States at RuntimeSpotFlow: Tracking Method Calls and States at Runtime
SpotFlow: Tracking Method Calls and States at Runtimeandrehoraa
 
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...OnePlan Solutions
 
A healthy diet for your Java application Devoxx France.pdf
A healthy diet for your Java application Devoxx France.pdfA healthy diet for your Java application Devoxx France.pdf
A healthy diet for your Java application Devoxx France.pdfMarharyta Nedzelska
 
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
 
Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)
Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)
Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)jennyeacort
 
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
 
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
 
Precise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive GoalPrecise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive GoalLionel Briand
 
Introduction Computer Science - Software Design.pdf
Introduction Computer Science - Software Design.pdfIntroduction Computer Science - Software Design.pdf
Introduction Computer Science - Software Design.pdfFerryKemperman
 
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)

Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
 
Ahmed Motair CV April 2024 (Senior SW Developer)
Ahmed Motair CV April 2024 (Senior SW Developer)Ahmed Motair CV April 2024 (Senior SW Developer)
Ahmed Motair CV April 2024 (Senior SW Developer)
 
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
 
How To Manage Restaurant Staff -BTRESTRO
How To Manage Restaurant Staff -BTRESTROHow To Manage Restaurant Staff -BTRESTRO
How To Manage Restaurant Staff -BTRESTRO
 
What is Advanced Excel and what are some best practices for designing and cre...
What is Advanced Excel and what are some best practices for designing and cre...What is Advanced Excel and what are some best practices for designing and cre...
What is Advanced Excel and what are some best practices for designing and cre...
 
Cyber security and its impact on E commerce
Cyber security and its impact on E commerceCyber security and its impact on E commerce
Cyber security and its impact on E commerce
 
Intelligent Home Wi-Fi Solutions | ThinkPalm
Intelligent Home Wi-Fi Solutions | ThinkPalmIntelligent Home Wi-Fi Solutions | ThinkPalm
Intelligent Home Wi-Fi Solutions | ThinkPalm
 
MYjobs Presentation Django-based project
MYjobs Presentation Django-based projectMYjobs Presentation Django-based project
MYjobs Presentation Django-based project
 
Folding Cheat Sheet #4 - fourth in a series
Folding Cheat Sheet #4 - fourth in a seriesFolding Cheat Sheet #4 - fourth in a series
Folding Cheat Sheet #4 - fourth in a series
 
Odoo 14 - eLearning Module In Odoo 14 Enterprise
Odoo 14 - eLearning Module In Odoo 14 EnterpriseOdoo 14 - eLearning Module In Odoo 14 Enterprise
Odoo 14 - eLearning Module In Odoo 14 Enterprise
 
SpotFlow: Tracking Method Calls and States at Runtime
SpotFlow: Tracking Method Calls and States at RuntimeSpotFlow: Tracking Method Calls and States at Runtime
SpotFlow: Tracking Method Calls and States at Runtime
 
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
 
A healthy diet for your Java application Devoxx France.pdf
A healthy diet for your Java application Devoxx France.pdfA healthy diet for your Java application Devoxx France.pdf
A healthy diet for your Java application Devoxx France.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...
 
Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)
Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)
Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)
 
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...
 
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
 
Precise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive GoalPrecise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive Goal
 
Introduction Computer Science - Software Design.pdf
Introduction Computer Science - Software Design.pdfIntroduction Computer Science - Software Design.pdf
Introduction Computer Science - Software Design.pdf
 
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