Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Fighting with Waste Driven Development: Lean Th...

Fighting with Waste Driven Development: Lean Thinking for Software Developers

These are the slides that I presented at XP Days Ukraine 2017.

As developers, we often complain about the efficiency problems we face while working. We work hard but produce so little that our whole development life turns into a hamster wheel at some point. One of the biggest reason of such a common problem is working in waste. Waste is in everywhere, in our source code, in the office, in our processes and even in management. In this session, we will cover all technical aspects of software development, including code, tests, deployment strategies, coding standards, automization points, code comments, bug fixing procedures, living with technical debt, etc. I will talk about all the wastes we produce while developing software and how we can remove to make our development life leaner.

Lemi Orhan Ergin

November 22, 2017
Tweet

More Decks by Lemi Orhan Ergin

Other Decks in Programming

Transcript

  1. Lean Thinking for Software Developers LEMi ORHAN ERGiN agile software

    craftsman @ iyzico WASTE DRIVEN DEVELOPMENT FIGHTING WITH manager developer the product guy developer @lemiorhan
  2. /lemiorhan lemiorhanergin.com @lemiorhan LEMi ORHAN ERGiN agile software craftsman @

    iyzico ex-Sony, ex-eBay founder of Turkish Software 
 Craftsmanship Community
  3. 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
  4. 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 legacy code
  5. 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
  6. 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.
  7. 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.
  8. 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
  9. 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
  10. doesn’t add value to the product makes you slow down

    decrease productivity makes us open to do mistakes increase complexity WASTE
  11. 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”
  12. valueless developments The very first value of software is to

    tolerate and facilitate on-going changes Robert C. Martin
  13. debugging bug fixing manual deployments manual testing unmerged branches big

    upfront design comments LOGGING framework addiction highly coupled design bıg RELEASES COMMIT MESSAGES & GRAPH HAVING SILOS package organization
  14. debugging bug fixing manual deployments manual testing unmerged branches big

    upfront design comments LOGGING framework addiction highly coupled design bıg RELEASES HAVING SILOS package organization COMMIT MESSAGES & GRAPH
  15. debugging bug fixing manual deployments manual testing unmerged branches big

    upfront design comments LOGGING framework addiction highly coupled design bıg RELEASES HAVING SILOS package organization COMMIT MESSAGES & GRAPH
  16. debugging bug fixing manual deployments manual testing unmerged branches big

    upfront design comments LOGGING framework addiction highly coupled design bıg RELEASES HAVING SILOS package organization COMMIT MESSAGES & GRAPH
  17. debugging bug fixing manual deployments manual testing unmerged branches big

    upfront design comments LOGGING framework addiction highly coupled design bıg RELEASES HAVING SILOS package organization COMMIT MESSAGES & GRAPH
  18. debugging bug fixing manual deployments manual testing unmerged branches big

    upfront design comments LOGGING framework addiction highly coupled design bıg RELEASES HAVING SILOS package organization COMMIT MESSAGES & GRAPH
  19. debugging bug fixing manual deployments manual testing unmerged branches big

    upfront design comments LOGGING framework addiction highly coupled design bıg RELEASES HAVING SILOS package organization COMMIT MESSAGES & GRAPH
  20. debugging bug fixing manual deployments manual testing unmerged branches big

    upfront design comments LOGGING framework addiction highly coupled design bıg RELEASES HAVING SILOS package organization COMMIT MESSAGES & GRAPH
  21. debugging bug fixing manual deployments manual testing unmerged branches big

    upfront design comments LOGGING framework addiction highly coupled design bıg RELEASES HAVING SILOS package organization COMMIT MESSAGES & GRAPH
  22. debugging bug fixing manual deployments manual testing unmerged branches big

    upfront design comments LOGGING framework addiction highly coupled design bıg RELEASES HAVING SILOS package organization COMMIT MESSAGES & GRAPH
  23. debugging bug fixing manual deployments manual testing unmerged branches big

    upfront design comments LOGGING framework addiction highly coupled design bıg RELEASES HAVING SILOS package organization COMMIT MESSAGES & GRAPH
  24. debugging bug fixing manual deployments manual testing unmerged branches big

    upfront design comments LOGGING framework addiction highly coupled design bıg RELEASES HAVING SILOS package organization COMMIT MESSAGES & GRAPH
  25. debugging bug fixing manual deployments manual testing unmerged branches big

    upfront design comments LOGGING framework addiction highly coupled design bıg RELEASES HAVING SILOS package organization COMMIT MESSAGES & GRAPH
  26. debugging bug fixing manual deployments manual testing unmerged branches big

    upfront design comments LOGGING framework addiction highly coupled design bıg RELEASES HAVING SILOS package organization COMMIT MESSAGES & GRAPH
  27. debugging bug fixing manual deployments manual testing unmerged branches big

    upfront design comments LOGGING framework addiction highly coupled design bıg RELEASES HAVING SILOS package organization COMMIT MESSAGES & GRAPH
  28. “We zombify people by using wrong practices” Niels Pflaeging Management

    Exorcist from his talk at Agile Turkey Summit 2014
  29. follow the BOY SCOUT RULE Pay technical debt need a

    CULTURAL SHIFT Define technical debts regularly and put to backlog Fix bugs and do refactorings at every sprint 100 percent feature development kills your project Batman & Robin might save your life
  30. follow the BOY SCOUT RULE Pay technical debt need a

    CULTURAL SHIFT Teach your values and principles to the team Slow down to go fast It's your profession, do it well!
  31. follow the BOY SCOUT RULE Pay technical debt need a

    CULTURAL SHIFT it defines a culture and a discipline it is based on code review, refactoring and kaizen it improves collective ownership and triggers collaboration it is an antidote for dissolving silos. it is a strategy for continuously eliminating waste
  32. 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
  33. 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 Feeling like a newbie while using a SCM Manual testing again and again
  34. 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 Feeling like a newbie while using a SCM Manual testing again and again Automated tests in all levels Calculate defect resolution times 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 Learn Git (or any other you use) perfectly think differently
  35. 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