Upload
lemi-orhan-ergin
View
482
Download
0
Embed Size (px)
Citation preview
Waste DrivenDevelopment
Lean Thinking forSoftware Developers
LEMi ORHAN ERGiNagile software craftsman @ iyzico
Fighting with
LEMi ORHAN ERGiNagile 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
Waste Driven
and over-confidentsuper 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 Developersby Connie Guglielmo
http://boeingboeing2.deviantart.com/art/Well-time-to-fly-another-airline-516735690Licensed 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
doesn’t add value to the product makes you slow down decrease productivity makes us open to do mistakes increase comlexity
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
debuggingbug fixing
manual deployments
manual testingunmerged branches
big upfront designcomments
LOGGINGframework addiction
highly coupled designbıg RELEASESno 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 Exorcistfrom 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 continuouslyKeep feature branches shortAutomatic release stepsProgram in peers and as the whole teamNever release unreviewed code to prodCheckin codebase frequentlyCommit early, commit often, perfect later
define standardseveryone 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 everythingcontinuous 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 everythingremove 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 transparencyopenness, 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
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!
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