Waste Driven
Development
Lean Thinking for
Software Developers
LEMi ORHAN ERGiN
agile software craftsman @ iyzico
Fighting with
LEMi ORHAN ERGiN
agile software craftsman @ iyzico
/lemiorhan
lemiorhanergin.com
@lemiorhan
agile practice lead at iyzico
Sony, eBay/GittiGidiyor & ACM
founder of Software Craftsmanship Turkey
ex product owner of Agile Turkey Summit
organized 200+ meetups and 3 conferences
we are naive
optimistic by default
assumes all goes well
of course we’ll succeed
and over-confident
super heroes
smartest guy on planet
write perfect code
design the best
do it right for the first time
understand customer needs
manage people & projects
build elegant solutions
http://imgur.com/a/Smr5d
Are you scared of
touching your source code?
Welcome to the club!
Legacy code consumes your life energy,
sucks your blood, forces you hack your
code to survive. Therefore we call it
zombie software, not legacy anymore
http://youhadonejob.org
Less than 0.01 percent
That’s how many consumer mobile apps will
be considered a financial success by their
creators at the end of 2018, according to
new research from Gartner Inc.
http://www.forbes.com/sites/connieguglielmo/2014/01/13/
mobile-apps-may-not-pave-the-way-to-developer-riches-sales-
average-less-than-1250-a-day
Mobile Apps Won't Lead To Riches For Most Developers
by Connie Guglielmo
http://boeingboeing2.deviantart.com/art/Well-time-to-fly-another-airline-516735690
Licensed under Creative Commons BY-NC 3.0
We have time to fix bugs,
but no time for writing better
We don’t refactor and write tests
because we don’t have enough time.
But we have time for debugging,
hacking code and fixing bugs.
http://forgifs.com/gallery/v/Funny/Unloading-cement-pipe-onto-tires.gif.html
Processes do not
build products,
but people do
Processes help people improve the
way they build products, increase
motivation and cultivate an
healthy environment. In the end,
the efficiency of processes are
important, but people are crucial.
build the wrong thing
build the thing wrong
poor quality
bugs and defects
slow and unproductive
endless dependencies
redundant tasks
drowned in waste
error error error error error
error error error error error
error error error error error
error error error error error
error error error error error
error error error error error
error error error error error
error error error error error
the languages we code
the technologies we use
the refactorings we need
the dependencies we have
the processes we follow
the feelings we have
Customers don’t care
their problems to be
understood and solvedCustomers really care
think like a
Customer
our job should be
maximizing the values
we can deliver
LEAN is a MINDSET
Maximizing value
for the end customer
by removing waste
LEAN is a MINDSET
value Any action or process that a
customer would be willing to pay for
doesn’t add value to the product
makes you slow down
decrease productivity
makes us open to do mistakes
increase comlexity
WASTE
Let’s
find waste
and eliminate
in software development
THE code ITSELF IS WASTE
more code more defects
Industry average is about
15 - 50 errors per 1000 lines 

of delivered code.
Steve McConnell
from of the book “Code Complete”
valueless developments
The very first value
of software is
to tolerate and facilitate
on-going changes
Robert C. Martin
Working topics on the left does not mean
we are good at using the topics on the right
debugging
bug fixing
manual deployments
manual testing
unmerged branches
big upfront design
comments
LOGGING
framework addiction
highly coupled design
bıg RELEASES
no security concerns HAVING SILOSpackage organization
FOCUS ON DESIGN & QUALITY
Design Patterns
Refactoring Techniques
OOP/FP/RP Principles
Clean Code Principles
Automated testing
Acceptance testing
Test Driven Design (TDD)
Code review techniques
Pair programming culture
KEEP YOUR REPO TINY
Slit your code into multiple modules / plugins
Keep your commit graph clean
Never allow long-living branches
Do not hesitate to delete code
Refactor code via SOLID principles
Keep independent parts in separate repos
Maintain modules in a single mono repo
“We zombify people by using wrong practices”
Niels Pflaeging
Management Exorcist
from his talk at Agile Turkey Summit 2014
Develop and refactor
Evolutionary design
Fully automated testing
Make codebase clean
Frequent short releases
Reproduce in test and fix
Get feedback and release
Develop and refactor
Evolutionary design
Fully automated testing
Make codebase clean
Frequent short releases
Reproduce in test and fix
Get feedback and release
Develop and bug fix
Big upfront design
Manual testing
Add comments to codebase
Big releases
Fix and test
Release and get feedback
waste driven development
Long-lasting defects
99% done tasks
Rework at the end
Missing continuous integration
Manual release steps
Working alone
Only author knows the code
Unsynchronized branches
Hesitation to commit the changes
Manual testing again and again
Long-lasting defects
99% done tasks
Rework at the end
Missing continuous integration
Manual release steps
Working alone
Only author knows the code
Unsynchronized branches
Hesitation to commit the changes
Manual testing again and againDesign by Tests (TDD)
Calculate defect resolution times
think differently
success
Define definition of done and obey
Refactor continuously
Keep feature branches short
Automatic release steps
Program in peers and as the whole team
Never release unreviewed code to prod
Checkin codebase frequently
Commit early, commit often, perfect later
define standards
everyone should have same understanding and base
Analysis
Testing
Architecture
Release & Deployment
Bug Fixing
Database Structure
Error Handling
Logging
Quality Metrics
Web Services / API
Coding / Naming
Code Review
Commit Messages
Messaging
version everything
continuous delivery starts with efficient use of SCMs
Source code
Deployment scripts
Application configuration
Auto generated codes
Automated tests
Static content (like images)
Rewrite rules
Server configurations
Database schema changes
Dependency configurations
automize everything
remove waste, push to extremes, slow down to go fast
Running unit tests
Building / packaging
Code analysis
Deployments
Functional testing
Releases
Cache cleanup
Performance monitoring
Regression testing
Rollbacks
Scaling
Integration of all commits
Notifying warning or errors
Reporting
radical transparency
openness, honesty, collaboration and improvement requires
Release dates
Critical defects in production
Status of the project
SLAs (Service Level Agreements)
Bugs in new features
Agreed standards
Definition of Done
Names of on-call support people
Quality metrics of the software
Velocity of the team
Lead and cycle times
Business value delivered
Moods of team members
Vacation dates of people
documentation IS WASTE
foreword
Documentation is not a way of communication
It’s sad, but have to admit
No one reads our documentation
Even we do not read what we write
Information becomes obsolete too fast
Reading analysis is too booooring!
really ???
Developers write documents A LOT
Commit messages
Branch names
Commit graph
Log messages
Production code
Test code
Release notes
Code review comments
Developers write documents
Configurations
Message flows
User guides
Module designs
Standards and guidelines
Support knowledge base
Flow diagrams
API documentation
never
ending
story
Estimations
Management practices
Performance appraisals
Status Tracking
Time Tracking
Control of working hours
Working at office
Overtimes
Meetings
Dress codes
Clean desk policy
Tools and OS
Turnovers
Motivation
Micro management
Office space
challenge your paradigms
Visualize the flows and observe
Detect waste and the root causes
Take action to improve
Inspect and Adapt
LEMi ORHAN ERGiN
agile software craftsman @ iyzico
/lemiorhan
lemiorhanergin.com
@lemiorhan

Waste Driven Development - Agile Coaching Serbia Meetup

  • 1.
    Waste Driven Development Lean Thinkingfor Software Developers LEMi ORHAN ERGiN agile software craftsman @ iyzico Fighting with
  • 2.
    LEMi ORHAN ERGiN agilesoftware craftsman @ iyzico /lemiorhan lemiorhanergin.com @lemiorhan agile practice lead at iyzico Sony, eBay/GittiGidiyor & ACM founder of Software Craftsmanship Turkey ex product owner of Agile Turkey Summit organized 200+ meetups and 3 conferences
  • 3.
    we are naive optimisticby default assumes all goes well of course we’ll succeed
  • 4.
    and over-confident super heroes smartestguy on planet write perfect code design the best do it right for the first time understand customer needs manage people & projects build elegant solutions
  • 5.
    http://imgur.com/a/Smr5d Are you scaredof touching your source code? Welcome to the club! Legacy code consumes your life energy, sucks your blood, forces you hack your code to survive. Therefore we call it zombie software, not legacy anymore
  • 6.
    http://youhadonejob.org Less than 0.01percent That’s how many consumer mobile apps will be considered a financial success by their creators at the end of 2018, according to new research from Gartner Inc. http://www.forbes.com/sites/connieguglielmo/2014/01/13/ mobile-apps-may-not-pave-the-way-to-developer-riches-sales- average-less-than-1250-a-day Mobile Apps Won't Lead To Riches For Most Developers by Connie Guglielmo
  • 7.
    http://boeingboeing2.deviantart.com/art/Well-time-to-fly-another-airline-516735690 Licensed under CreativeCommons BY-NC 3.0 We have time to fix bugs, but no time for writing better We don’t refactor and write tests because we don’t have enough time. But we have time for debugging, hacking code and fixing bugs.
  • 8.
    http://forgifs.com/gallery/v/Funny/Unloading-cement-pipe-onto-tires.gif.html Processes do not buildproducts, but people do Processes help people improve the way they build products, increase motivation and cultivate an healthy environment. In the end, the efficiency of processes are important, but people are crucial.
  • 9.
    build the wrongthing build the thing wrong poor quality bugs and defects slow and unproductive endless dependencies redundant tasks drowned in waste error error error error error error error error error error error error error error error error error error error error error error error error error error error error error error error error error error error error error error error error
  • 10.
    the languages wecode the technologies we use the refactorings we need the dependencies we have the processes we follow the feelings we have Customers don’t care
  • 11.
    their problems tobe understood and solvedCustomers really care
  • 12.
    think like a Customer ourjob should be maximizing the values we can deliver
  • 13.
    LEAN is aMINDSET
  • 14.
    Maximizing value for theend customer by removing waste LEAN is a MINDSET
  • 15.
    value Any actionor process that a customer would be willing to pay for
  • 16.
    doesn’t add valueto the product makes you slow down decrease productivity makes us open to do mistakes increase comlexity WASTE
  • 17.
  • 18.
  • 19.
    more code moredefects Industry average is about 15 - 50 errors per 1000 lines 
 of delivered code. Steve McConnell from of the book “Code Complete”
  • 20.
    valueless developments The veryfirst value of software is to tolerate and facilitate on-going changes Robert C. Martin
  • 21.
    Working topics onthe left does not mean we are good at using the topics on the right
  • 22.
    debugging bug fixing manual deployments manualtesting unmerged branches big upfront design comments LOGGING framework addiction highly coupled design bıg RELEASES no security concerns HAVING SILOSpackage organization
  • 23.
    FOCUS ON DESIGN& QUALITY Design Patterns Refactoring Techniques OOP/FP/RP Principles Clean Code Principles Automated testing Acceptance testing Test Driven Design (TDD) Code review techniques Pair programming culture
  • 24.
    KEEP YOUR REPOTINY Slit your code into multiple modules / plugins Keep your commit graph clean Never allow long-living branches Do not hesitate to delete code Refactor code via SOLID principles Keep independent parts in separate repos Maintain modules in a single mono repo
  • 25.
    “We zombify peopleby using wrong practices” Niels Pflaeging Management Exorcist from his talk at Agile Turkey Summit 2014
  • 26.
    Develop and refactor Evolutionarydesign Fully automated testing Make codebase clean Frequent short releases Reproduce in test and fix Get feedback and release Develop and refactor Evolutionary design Fully automated testing Make codebase clean Frequent short releases Reproduce in test and fix Get feedback and release Develop and bug fix Big upfront design Manual testing Add comments to codebase Big releases Fix and test Release and get feedback
  • 27.
    waste driven development Long-lastingdefects 99% done tasks Rework at the end Missing continuous integration Manual release steps Working alone Only author knows the code Unsynchronized branches Hesitation to commit the changes Manual testing again and again
  • 28.
    Long-lasting defects 99% donetasks Rework at the end Missing continuous integration Manual release steps Working alone Only author knows the code Unsynchronized branches Hesitation to commit the changes Manual testing again and againDesign by Tests (TDD) Calculate defect resolution times think differently success Define definition of done and obey Refactor continuously Keep feature branches short Automatic release steps Program in peers and as the whole team Never release unreviewed code to prod Checkin codebase frequently Commit early, commit often, perfect later
  • 29.
    define standards everyone shouldhave same understanding and base Analysis Testing Architecture Release & Deployment Bug Fixing Database Structure Error Handling Logging Quality Metrics Web Services / API Coding / Naming Code Review Commit Messages Messaging
  • 30.
    version everything continuous deliverystarts with efficient use of SCMs Source code Deployment scripts Application configuration Auto generated codes Automated tests Static content (like images) Rewrite rules Server configurations Database schema changes Dependency configurations
  • 31.
    automize everything remove waste,push to extremes, slow down to go fast Running unit tests Building / packaging Code analysis Deployments Functional testing Releases Cache cleanup Performance monitoring Regression testing Rollbacks Scaling Integration of all commits Notifying warning or errors Reporting
  • 32.
    radical transparency openness, honesty,collaboration and improvement requires Release dates Critical defects in production Status of the project SLAs (Service Level Agreements) Bugs in new features Agreed standards Definition of Done Names of on-call support people Quality metrics of the software Velocity of the team Lead and cycle times Business value delivered Moods of team members Vacation dates of people
  • 33.
  • 34.
    foreword Documentation is nota way of communication
  • 35.
    It’s sad, buthave to admit No one reads our documentation Even we do not read what we write Information becomes obsolete too fast Reading analysis is too booooring!
  • 36.
  • 37.
    Commit messages Branch names Commitgraph Log messages Production code Test code Release notes Code review comments Developers write documents Configurations Message flows User guides Module designs Standards and guidelines Support knowledge base Flow diagrams API documentation
  • 38.
    never ending story Estimations Management practices Performance appraisals StatusTracking Time Tracking Control of working hours Working at office Overtimes Meetings Dress codes Clean desk policy Tools and OS Turnovers Motivation Micro management Office space
  • 39.
    challenge your paradigms Visualizethe flows and observe Detect waste and the root causes Take action to improve Inspect and Adapt
  • 40.
    LEMi ORHAN ERGiN agilesoftware craftsman @ iyzico /lemiorhan lemiorhanergin.com @lemiorhan