40
Waste Driven Development Lean Thinking for Software Developers LEMi ORHAN ERGiN agile software craftsman @ iyzico Fighting with

Waste Driven Development - Agile Coaching Serbia Meetup

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

we are naive

optimistic by default assumes all goes well

of course we’ll succeed

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

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

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

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 ERGiNagile software craftsman @ iyzico

/lemiorhan lemiorhanergin.com @lemiorhan