Fight Code Rot Using Continuous Improvement

Fight Code Rot Using Continuous Improvement

1b5863cbb2d0009e78eaa85ea89fe2a6?s=128

garyfleming

August 22, 2019
Tweet

Transcript

  1. FIGHTING CODE ROT USING CONTINUOUS IMPROVEMENT 1995 @garyfleming

  2. 1995 @garyfleming

  3. 1995 @garyfleming

  4. 1995 @garyfleming

  5. 1995 @garyfleming

  6. ! @garyfleming

  7. NOVEMBER FIFTEEN, NINETEEN NINETY-FIVE @garyfleming

  8. SIXTEEN => SOXTEEN @garyfleming

  9. SIXTEEN => SOXTEEN @garyfleming

  10. TWO THOUSAND SOXTEEN @garyfleming

  11. ▸ No source code (written in an older language) ▸

    Runs in a green screen terminal, ▸ Has to be emulated. @garyfleming
  12. FIGHT CODE ROT USING CONTINUOUS IMPROVEMENT @GARYFLEMING @garyfleming

  13. WHAT IS CODE ROT? @garyfleming

  14. SYSTEM EXPERIMENT: @garyfleming

  15. SYSTEM EXPERIMENT: FISHES AND TIME ▸ 10 minutes? ▸ 10

    hours? ▸ 10 days? ▸ 10000 years? @garyfleming
  16. ROT IN SOFTWARE @garyfleming

  17. ! @garyfleming

  18. MULTI-FACETED @garyfleming

  19. Problem KNOWING WHETHER YOUR SOFTWARE IS DEPLOYABLE @garyfleming

  20. BRIEF INTRO TO CI/CD @garyfleming

  21. CONTINUOUS INTEGRATION All developers/testers merge their code to a shared

    mainline at least once a day. @garyfleming
  22. CONTINUOUS INTEGRATION Related: ▸ Trunk-Based Development ▸ Feature Toggles @garyfleming

  23. IF IT HURTS, DO IT MORE OFTEN. @garyfleming

  24. CONTINUOUS DEPLOYMENT All changes go to production; safely, quickly, and

    sustainably. @garyfleming
  25. CONTINUOUS DEPLOYMENT Related: Blue-Green releases. @garyfleming

  26. @garyfleming

  27. Problem DEPENDENCY UPDATES @garyfleming

  28. IF IT HURTS, DO IT MORE OFTEN. @garyfleming

  29. IDEA UPDATE DEPENDENCIES DAILY @garyfleming

  30. CONTINUOUS REGENERATION @garyfleming

  31. CONTINUOUS REJUVENATION @garyfleming

  32. EXPERIMENT: DEPENDENCY UPDATE DAILY ▸ Update ▸ Build and test

    ▸ Commit/Revert ▸ Commit causes CD to happen @garyfleming
  33. OUTCOME: DEPENDENCY UPDATE DAILY Mostly success! ▸ Some Major Version

    upgrades would need intervention, ▸ Temporary exclusions are important, @garyfleming
  34. DEPENDENCY UPDATES: OTHER LANGUAGES ▸ Single versioned: Maven, Gradle, packages.config

    e.g 5.4.1 3.0-ALPHA 1.3.2 @garyfleming
  35. DEPENDENCY UPDATES: OTHER LANGUAGES ▸ Ranges and Lock files: gem/bundler,

    most JS frameworks. >=5.4.1 3.* [3.7.1) @garyfleming
  36. DEPENDENCY UPDATES: OTHER LANGUAGES ▸ Possibly open: pip, some JS

    frameworks, gem some-dep a-different-dep @garyfleming
  37. ALWAYS USE A LOCK FILE! Avoid "It works on my

    machine" @garyfleming
  38. RECENT DEVELOPMENTS ▸ Dependabot ▸ Atomist @garyfleming

  39. GOOD TESTS ARE ESSENTIAL! @garyfleming

  40. Problem RUNTIME ROT @garyfleming

  41. ROT WILL SET IN ▸ JVM ▸ .NET ▸ NPM

    version @garyfleming
  42. THE CONTINUOUS NOW @garyfleming

  43. INTERMEDIARY TOOLING ▸ Java -> Jabba ▸ Ruby -> RVM

    ▸ Node -> NVM ▸ Python -> Virtualenv (to some degree) @garyfleming
  44. Problem STANDING SERVERS @garyfleming

  45. Problem STANDING SERVERS @garyfleming

  46. AVOID SNOWFLAKE SERVERS ▸ Hard to Reproduce ▸ Hard to

    Modify ▸ Require manual processes, auditing, and docs. @garyfleming
  47. IF IT HURTS, DO IT MORE OFTEN. @garyfleming

  48. INFRASTRUCTURE AS CODE ▸ Chef/Puppet/Ansible ▸ Terraform ▸ Containerisation ▸

    Various cloud toolkits @garyfleming
  49. ENGINEERING PRACTICE ▸ Daily Deletion ▸ Chaos Engineering ▸ Dev

    Laptop Wipes @garyfleming
  50. CAUTION: TAKE THE UPDATES @garyfleming

  51. Problem LANGUISHING LANGUAGES @garyfleming

  52. Problem LANGUISHING LANGUAGES @garyfleming

  53. @garyfleming

  54. AVOIDING OBSOLESCENCE ▸ Move to new versions, ▸ Cautiously embrace

    new languages, ▸ Design language agnostic APIs @garyfleming
  55. DESTROY YOUR MICROSERVICES @garyfleming

  56. Problem PEOPLE COME AND GO. @garyfleming

  57. Problem PEOPLE COME AND GO. @garyfleming

  58. IF IT HURTS, DO IT MORE OFTEN. @garyfleming

  59. People Prepping RETROS @garyfleming

  60. People Prepping DOMAIN KNOWLEDGE ▸ User Story Maps ▸ Example

    mapping @garyfleming
  61. People Prepping STAFF LIQUIDITY MATRICES @garyfleming

  62. @garyfleming

  63. People Prepping BIGGER CHANGES @garyfleming

  64. EVERYTHING IS ROTTING... @garyfleming

  65. ...YOU CAN GET BETTER @garyfleming

  66. THANK YOU @GARYFLEMING @garyfleming