Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Richard rodger technical debt - web summit 2013

3,220 views

Published on

The only way developers can finish projects on-time and under-budget is by taking on Technical Debt. Taking shortcuts, using quick fixes, and writing unmaintainable code builds up a technical debt that get the project delivered today. Tomorrow, there will be a reckoning, as development costs spiral and progress grinds to a halt. This talk helps you embrace the debt, love the cowboys, and gives you a way to make repayments.

Published in: Technology, Business

Richard rodger technical debt - web summit 2013

  1. 1. Falling in Love with Technical Debt @rjrodger senecajs.org Tuesday 5 November 2013
  2. 2. How did the Romans do Long Division? Tuesday 5 November 2013
  3. 3. L rem XII LXXII MMMDCXII Tuesday 5 November 2013
  4. 4. How did the Romans do Addition? Tuesday 5 November 2013
  5. 5. IV + XI = ? Tuesday 5 November 2013
  6. 6. IV + XI = ? 1. Normalize: IV → IIII 2. Concatenate: IIII + XI → IIIIXI 3. Sort, descending: IIIIXI → XIIIII 4. Reduce: XIIIII → XV Tuesday 5 November 2013
  7. 7. How did the Romans do Subtraction? Tuesday 5 November 2013
  8. 8. XXIV - XV = ? Tuesday 5 November 2013
  9. 9. XXIV - XV = ? 1. Normalize: XXIV → XXIIII 2. Eliminate: XXIIII - XV → XIIII - V 3. Expand: XIIII - V → VIIIIIIIII - V 4. Repeat 2 and 3 until no moves left 5. Reduce: IIIIIIIII → IX Tuesday 5 November 2013
  10. 10. How did the Romans do Multiplication? Tuesday 5 November 2013
  11. 11. III × VI = ? Tuesday 5 November 2013
  12. 12. III × VI = ? bit shifting Tuesday 5 November 2013
  13. 13. III × VI = ? bit shifting III → 3 VI → 6 → 110 Tuesday 5 November 2013
  14. 14. III × VI = ? bit shifting III → 3 VI → 6 → 110 Tuesday 5 November 2013 3 × 001 × 0 = 0 3 × 010 × 1 = 6 3 × 100 × 1 = 12 18
  15. 15. III × VI = ? bit shifting III → 3 VI → 6 → 110 Tuesday 5 November 2013 3 × 001 × 0 = 0 3 × 010 × 1 = 6 3 × 100 × 1 = 12 18
  16. 16. III × VI = ? bit shifting III → 3 VI → 6 → 110 Tuesday 5 November 2013 3 × 001 × 0 = 0 3 × 010 × 1 = 6 3 × 100 × 1 = 12 18
  17. 17. How did the Romans do Division? Tuesday 5 November 2013
  18. 18. Tuesday 5 November 2013
  19. 19. they didn't Tuesday 5 November 2013
  20. 20. Tuesday 5 November 2013
  21. 21. Roman Numerals have Technical Debt Tuesday 5 November 2013
  22. 22. http://akvo.org/blog/the-ball-of-mud-transition/ Tuesday 5 November 2013
  23. 23. Tuesday 5 November 2013
  24. 24. The JavaScript Date Object var today = new Date( 2013, 10, 30) console.log(today) Sat Nov 30 2013 00:00:00 GMT+0000 Tuesday 5 November 2013
  25. 25. Not all Technical Debt is created equal Tuesday 5 November 2013
  26. 26. Intentional "A good plan, violently executed now, is better than a perfect plan next week." Tuesday 5 November 2013
  27. 27. Unintentional Tuesday 5 November 2013
  28. 28. Inherent Tuesday 5 November 2013
  29. 29. Incidental Tuesday 5 November 2013
  30. 30. 2x2 Matrix! unintentional Tuesday 5 November 2013 live with it you are a bad person unknown unknowns incidental intentional deliberate choice inherent
  31. 31. Tuesday 5 November 2013
  32. 32. Tuesday 5 November 2013
  33. 33. Tuesday 5 November 2013
  34. 34. NTSC 1941 Standard: Black+White only Signal encodes Brightness Each Channel gets 6Mhz Happy Days! Tuesday 5 November 2013
  35. 35. Color Television Three Colors: Red, Green, Blue Each Color needs 3Mhz You only have 6Mhz and you need 9Mhz! Technical Debt FTW Tuesday 5 November 2013
  36. 36. You can't Break the old Black+White TVs Tuesday 5 November 2013
  37. 37. We must send the old brightness signal White Light = 30% Red 59% Green 11% Blue Send White, Red and Blue Tuesday 5 November 2013
  38. 38. You need to embed the color signals inside the brightness signal Tuesday 5 November 2013
  39. 39. Color TV circuits are more complicated than they should be. Tuesday 5 November 2013
  40. 40. How do you Reduce Technical Debt? Tuesday 5 November 2013
  41. 41. Things that Don't Work Tuesday 5 November 2013
  42. 42. Unit Testing (or any other sort) Tuesday 5 November 2013
  43. 43. Objects Tuesday 5 November 2013
  44. 44. Design Tuesday 5 November 2013
  45. 45. Process Tuesday 5 November 2013
  46. 46. Mitigation As Good as it Gets Tuesday 5 November 2013
  47. 47. Conform Tuesday 5 November 2013
  48. 48. Rebel Tuesday 5 November 2013
  49. 49. Evolve Tuesday 5 November 2013
  50. 50. Cells •Do one job •Death is natural •Use messages •Really small Tuesday 5 November 2013
  51. 51. Micro Services •Do one job •One feature •Death is natural •kill and restart •Use messages •No shared state •Really small Tuesday 5 November 2013 •100 lines of code
  52. 52. Examples User Data Image Resize Encrypt Password Tuesday 5 November 2013 Business Rule Send Email Parse Format Monitor
  53. 53. how do you route messages? Pattern Matching Tuesday 5 November 2013
  54. 54. The user Service some messages // load a user's data by name { user:"load", name:"alice" } // login user - load and check password { user:"login", name:"alice", pass:"123"} github.com/rjrodger/websummit2013 senecajs.org Tuesday 5 November 2013
  55. 55. user_load action var users = { alice: {name:"alice", pass:"123"}, bob: {name:"bob", pass:"abc"}, } function user_load( args, done ) { // callback( err, result ) done( null, users[args.name] ) } Tuesday 5 November 2013
  56. 56. user_login action function user_login( args, done ) { user_load( { name:args.name }, function(err,user){ if( err || !user ) return done(err); if( user.pass == args.pass ) return done( null, user ); return done(); }) } Tuesday 5 November 2013
  57. 57. Run user Service using Seneca require("seneca")() .add({ user:"load" }, user_load) .add({ user:"login" }, user_login) .listen(8000) $ node user.js $ curl "http://localhost:8000/act ? user=login & name=alice & pass=123" { "name":"alice", "pass":"123" } Tuesday 5 November 2013
  58. 58. What Happens? •Easy to change - just rewrite! •Easy to scale - run more instances •Easy to reason about - just messages •Easy to make robust - kill and restart! •Easy to build - natural units of work Tuesday 5 November 2013
  59. 59. Technical Debt? lower interest rate! See github for scaling and adapting github.com/rjrodger/websummit2013 senecajs.org Tuesday 5 November 2013
  60. 60. Try this at Home! •Java: twitter.github.io/finagle •Ruby: sinatrarb.com •Node: senecajs.org Tuesday 5 November 2013
  61. 61. Technical Debt •overwhelms every other factor •should drive your architecture •can be mitigated with awareness Tuesday 5 November 2013
  62. 62. Tuesday 5 November 2013
  63. 63. Thank You! @rjrodger senecajs.org Tuesday 5 November 2013

×