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

Just Die Already

Just Die Already

I'm not religious, but I'm definitely spiritual. Programs, like living creatures, need to die.

Program that run forever are zombies. They're cancers. They're unnatural.

Programs that are born and die are living. They're healthy. They're natural.

Let's look at some common cancers and some healthy software.

Scott Robinson

November 26, 2011
Tweet

More Decks by Scott Robinson

Other Decks in Programming

Transcript

  1. Just Die Already

    View Slide

  2. State

    View Slide

  3. App Servers

    View Slide

  4. • Runtime
    • Application
    • Socket
    • Database
    • Cache
    • Worker threads
    “Stateless”

    View Slide

  5. Software Ageing
    gradual degradation of application performance, over time,
    that may lead to premature program termination

    View Slide

  6. What sucks?

    View Slide

  7. Rails.

    View Slide

  8. View Slide

  9. Old news?

    View Slide

  10. “400  restarts  a  
    mother  fucking  
    day”

    View Slide

  11. Leeks

    View Slide

  12. •Memory
    •Locks
    •File descriptors
    •Sockets
    •Threads

    View Slide

  13. Recovery

    View Slide

  14. View Slide

  15. @hourly  pgrep  Rails  |  head  -­‐1  |  xargs  kill

    View Slide

  16. Passenger

    View Slide

  17. That. Is Crazy.

    View Slide

  18. Databases

    View Slide

  19. The Ultimate Single
    Point of Failure

    View Slide

  20. What sucks?

    View Slide

  21. SQL.

    View Slide

  22. View Slide

  23. Recovery

    View Slide

  24. View Slide

  25. View Slide

  26. Event Sourcing
    Martin Fowler’s

    View Slide

  27. View Slide

  28. Soft Deletes

    View Slide

  29. acts_as_audited

    View Slide

  30. View Slide

  31. Tests

    View Slide

  32. Software Testing
    Doesn’t Scale

    View Slide

  33. The Argument
    • Feature testing is effective.
    • Fast changing systems are unstable.
    • Complexity is inevitable.
    • Inter-feature testing is ineffective.

    View Slide

  34. What sucks?

    View Slide

  35. “Identical to production”

    View Slide

  36. #OccupyProduction

    View Slide

  37. Recovery

    View Slide

  38. View Slide

  39. Acceptance
    Integration
    Unit
    Run in Production
    Run in Production
    Yeah, nah.

    View Slide

  40. Multi-Version
    Concurrency

    View Slide

  41. “But what if I break
    production?”

    View Slide

  42. “But when I break
    production?”

    View Slide

  43. View Slide

  44. •Crash
    •Undo
    •Instrument

    View Slide

  45. Recovery-Oriented
    Computing
    http://roc.cs.berkeley.edu/

    View Slide

  46. fin

    View Slide