$30 off During Our Annual Pro Sale. View Details »

Reclaim your architecture @ sbonrails

shagemann
February 12, 2014

Reclaim your architecture @ sbonrails

The slides of my February 12, 2014 talk at Santa Barbara on Rails

shagemann

February 12, 2014
Tweet

More Decks by shagemann

Other Decks in Technology

Transcript

  1. Reclaim your architecture
    Stephan Hagemann

    View Slide

  2. Rails developers?

    View Slide

  3. STEPHAN
    GERMAN
    GERMANY
    BOULDER
    ROCK CLIMBING
    WHITE
    MALE
    NETHERLANDS
    CYCLING
    DIVING
    CONSULTANT
    RUBY
    RAILS GO
    XING
    PIVOTAL LABS

    View Slide

  4. View Slide

  5. View Slide

  6. Labeling in Software
    development

    View Slide

  7. No
    Rails app
    starts with a namespace

    View Slide

  8. All
    gems
    start with a namespace

    View Slide

  9. Rails Gems

    View Slide

  10. AEH FACE
    Rails Gems

    View Slide

  11. !
    !
    !
    !
    !
    !
    !
    !
    !
    + active record

    + active support

    + action controller

    Rails Gems

    View Slide

  12. How can you tell what
    still belongs?

    View Slide

  13. View Slide

  14. Try this!
    !
    Namespace everything
    in your next app

    View Slide

  15. Give yourself a box so
    you can start thinking
    outside of it

    View Slide

  16. Can you
    prove small
    chunks?

    View Slide

  17. Growing size

    View Slide

  18. Exploding complexity
    SIZE
    POSSIBLE
    INTERACTIONS

    View Slide

  19. Effect of structure
    VS

    View Slide

  20. SIZE
    POSSIBLE
    INTERACTIONS
    Reduced exploding
    complexity

    View Slide

  21. Slashing complexity
    SIZE
    COMPLEXITY
    SPLIT!

    View Slide

  22. Making chunks early
    SIZE
    COMPLEXITY
    SPLIT!

    View Slide

  23. Net win?
    SIZE
    COMPLEXITY
    SPLIT!
    $
    $

    View Slide

  24. You’re going to do it
    often
    SIZE
    DOUBLE
    SPLIT!
    COMPLEXITY
    NEW CODE

    IN ENGINE
    NEW CODE

    IN ENGINE

    View Slide

  25. Never build large apps
    to build large apps

    View Slide

  26. github.com/shageman/
    the_next_big_thing

    View Slide

  27. 5 looser coupling
    3 gems
    1 one app
    4 engines
    8 HTTP SOA
    2 modules
    7 eco-system
    6 services

    View Slide

  28. 1
    The one app

    View Slide

  29. HTTP://WWW.FLICKR.COM/PHOTOS/WIDNR/6589525327/

    View Slide

  30. Examples
    !
    diaspora, CF CC,
    canvas

    View Slide

  31. If you are in the situation
    where you’re reading some
    text, investigating, trying to
    figure out what is going on...
    That is a very good property
    of a detective novel and a
    very bad property of code.
    !
    Martin Fowler

    View Slide

  32. ANNOYANCE
    ENTRY
    STRUCTURE

    View Slide

  33. 2
    The modularized app

    View Slide

  34. HTTP://EECUE.COM/P/31426/METAL-RECYCLING-YARD.HTML

    View Slide

  35. +
    A higher level structure

    View Slide

  36. ANNOYANCE
    EMAIL
    SIGNUP
    STRUCTURE

    View Slide

  37. 3
    The gem component app

    View Slide

  38. View Slide

  39. +
    Provable independence

    View Slide

  40. Choose modules that tell
    the story of the system
    and contain a cohesive
    set of concepts
    Eric Evans

    View Slide

  41. View Slide

  42. HTTP://WWW.SMASHINGMAGAZINE.COM/INFORMATION-AND-INSTRUCTIONAL-SIGNS-PART-1/

    View Slide

  43. ANNOYANCE
    EMAIL
    SIGNUP
    STRUCTURE

    View Slide

  44. 4
    The Rails component app

    View Slide

  45. View Slide

  46. +
    Provable independence for
    Rails

    View Slide

  47. Rails Engines

    View Slide

  48. EMAIL
    SIGNUP
    TEASER
    STRUCTURE
    ANNOYANCE

    View Slide

  49. 5
    The loosely-coupled app

    View Slide

  50. View Slide

  51. +
    Clearer responsibilities

    View Slide

  52. EMAIL
    SIGNUP
    TEASER
    STRUCTURE
    ANNOYANCE
    EVENT
    COUNTER

    View Slide

  53. 6
    The service-oriented app

    View Slide

  54. View Slide

  55. +
    Reduced surface area

    View Slide

  56. 588 194
    LOGGER::COUNT
    EVENTCOUNTER::*.METHODS.COUNT
    LOGGER
    361 115

    View Slide

  57. 588 194
    LOGGER::COUNT
    EVENTCOUNTER::*.METHODS.COUNT
    LOGGER
    361 115
    - OBJECT.METHODS
    LOGGER::COUNT LOGGER
    394 0
    247 1

    View Slide

  58. EMAIL
    SIGNUP
    TEASER
    STRUCTURE
    ANNOYANCE
    EVENT
    COUNTER

    View Slide

  59. 7
    The eco-system app

    View Slide

  60. View Slide

  61. gem build event_counter..

    View Slide

  62. gem push event_counter..

    View Slide

  63. View Slide

  64. EMAIL
    SIGNUP
    TEASER
    STRUCTURE
    ANNOYANCE
    EVENT
    COUNTER

    View Slide

  65. 8
    The HTTP SOA app

    View Slide

  66. PICTURE HERE

    View Slide

  67. STRUCTURE
    EMAIL
    SIGNUP
    TEASER
    ANNOYANCE
    EVENT COUNTER

    View Slide

  68. 5 looser coupling
    3 gems
    1 one app
    4 engines
    8 HTTP SOA
    2 modules
    7 eco-system
    6 services

    View Slide

  69. 5 looser coupling
    3 gems
    1 one app
    4 engines
    8 HTTP SOA
    2 modules
    7 eco-system
    6 services

    View Slide

  70. 9
    Architecture the reclaimed
    years

    View Slide

  71. View Slide

  72. HTTP://WWW.CONFREAKS.COM/VIDEOS/759-RUBYMIDWEST2011-KEYNOTE-
    ARCHITECTURE-THE-LOST-YEARS

    View Slide

  73. View Slide

  74. View Slide

  75. View Slide

  76. View Slide

  77. well, we just did that

    View Slide

  78. EMAIL
    SIGNUP
    TEASER
    STRUCTURE
    ANNOYANCE
    EVENT
    COUNTER

    View Slide

  79. Thanks!
    Stephan Hagemann
    @shageman
    [email protected]

    View Slide