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

Microservices: software that fits in your head

Microservices: software that fits in your head

Software gets complicated fast. Most of good architecture and design practise is about trying to slow the rate at which software gets complicated. You can’t stop it, it’s a form of entropy. You can only slow it down and do your level best to stay on top of things.

One way to manage the mess is to maximise the likelihood that everyone knows what’s going on in the codebase. This requires two things: consistency and replaceability. Consistency implies you can make reasonable assumptions about unfamiliar parts of the application. Replaceability means you can kill code easily and replace it with something better.

Dan North argues that code should either be new enough that someone remembers writing it, or well-enough established that everyone knows how it works. It’s code in that awkward middle stage, between brand new and part-of-the-furniture, that gets forgotten about and starts to smell. If code is going to die it should die quickly. If it is going to stick around it should be stable.

In this talk, Dan describes a model for thinking about the age of code and argues for replaceability as a first class concern. He also discovers that if you optimise for both replaceability and consistency you can end up with something that looks a lot like microservices.

Daniel Terhorst-North
PRO

March 06, 2015
Tweet

More Decks by Daniel Terhorst-North

Other Decks in Technology

Transcript

  1. Microservices: software
    that fits in your head
    Dan North
    @tastapod

    View Slide

  2. What is the point of
    software development?

    View Slide

  3. What is the purpose of
    software development?

    View Slide

  4. business impact
    create
    What is the purpose of
    software development?

    View Slide

  5. business impact
    create positive
    What is the purpose of
    software development?

    View Slide

  6. What is the goal of
    software development?

    View Slide

  7. What is the goal of
    software development?
    to business impact
    minimise lead time

    View Slide

  8. What is the goal of
    software development?
    to business impact
    minimise lead time
    sustainably

    View Slide

  9. The goal is not to
    produce software!

    View Slide

  10. produce

    View Slide

  11. produce
    production

    View Slide

  12. produce
    production
    productive

    View Slide


  13. effective
    productive

    View Slide

  14. Code is not the asset…

    View Slide

  15. Code is not the asset…
    Code is the cost!

    View Slide

  16. Code is not the asset…
    Code is the cost!
    - writing code costs


    View Slide

  17. Code is not the asset…
    Code is the cost!
    - writing code costs

    - waiting for code costs


    View Slide

  18. Code is not the asset…
    Code is the cost!
    - writing code costs

    - waiting for code costs

    - changing code costs


    View Slide

  19. Code is not the asset…
    Code is the cost!
    - writing code costs

    - waiting for code costs

    - changing code costs

    - understanding code costs

    View Slide

  20. understanding code

    View Slide

  21. understanding code
    code I know

    View Slide

  22. understanding code
    code I know
    code everyone knows

    View Slide

  23. understanding code
    code I know
    code everyone knows
    code no-one knows!

    View Slide

  24. Code should be
    stabilised
    or
    killed off

    View Slide

  25. Code should be
    stabilised
    or
    killed off
    fast!

    View Slide

  26. Two complementary
    patterns

    View Slide

  27. Two complementary
    patterns
    Short Software Half-Life

    View Slide

  28. Two complementary
    patterns
    Short Software Half-Life
    Fits In My Head

    View Slide

  29. Short Software Half-Life

    View Slide

  30. Short Software Half-Life
    Design considerations

    View Slide

  31. Short Software Half-Life
    - write discrete components

    Design considerations

    View Slide

  32. Short Software Half-Life
    - write discrete components

    - define component boundary

    Design considerations

    View Slide

  33. Short Software Half-Life
    - write discrete components

    - define component boundary

    - define component purpose

    Design considerations

    View Slide

  34. Short Software Half-Life
    - write discrete components

    - define component boundary

    - define component purpose

    - define component responsibility
    Design considerations

    View Slide

  35. Short Software Half-Life
    Stewardship considerations

    View Slide

  36. Short Software Half-Life
    - write component tests and docs

    Stewardship considerations

    View Slide

  37. Short Software Half-Life
    - write component tests and docs

    - optimise for replaceability

    Stewardship considerations

    View Slide

  38. Short Software Half-Life
    - write component tests and docs

    - optimise for replaceability

    - expect to invest in stabilising

    Stewardship considerations

    View Slide

  39. Short Software Half-Life
    - write component tests and docs

    - optimise for replaceability

    - expect to invest in stabilising

    - build a stable team
    Stewardship considerations

    View Slide

  40. Fits In My Head

    View Slide

  41. Fits In My Head
    - multiple dimensions

    View Slide

  42. Fits In My Head
    - multiple dimensions
    - multiple scales

    View Slide

  43. Fits In My Head
    - multiple dimensions
    - multiple scales
    - “What would James do?”

    View Slide

  44. Fits In My Head
    - multiple dimensions
    - multiple scales
    - “What would James do?”
    Contextual Consistency

    View Slide

  45. Fits In My Head
    - multiple dimensions
    - multiple scales
    - “What would James do?”
    Contextual Consistency
    - agree guiding principles

    View Slide

  46. Fits In My Head
    - multiple dimensions
    - multiple scales
    - “What would James do?”
    Contextual Consistency
    - agree guiding principles
    - agree idioms

    View Slide

  47. Fits In My Head
    - multiple dimensions
    - multiple scales
    - “What would James do?”
    Contextual Consistency
    - agree guiding principles
    - agree idioms
    - difference is data

    View Slide

  48. Fits In My Head
    - multiple dimensions
    - multiple scales
    - “What would James do?”
    Contextual Consistency
    - agree guiding principles
    - agree idioms
    - difference is data
    - familiarity ≠ simplicity

    View Slide

  49. Replaceable Component
    Architecture

    View Slide

  50. Replaceable Component
    Architecture
    sustainably…

    View Slide

  51. Replaceable Component
    Architecture
    sustainably…

    View Slide

  52. Replaceable Component
    Architecture
    sustainably…

    View Slide

  53. Replaceable Component
    Architecture
    sustainably…

    View Slide

  54. Replaceable Component
    Architecture
    sustainably…

    View Slide

  55. Replaceable Component
    Architecture
    sustainably…

    View Slide

  56. Replaceable Component
    Architecture
    sustainably…
    “little computers

    passing messages”

    View Slide

  57. Replaceable Component
    Architecture
    sustainably…
    “little computers

    passing messages”
    — Alan Kay

    View Slide

  58. Replaceable Component
    Architecture
    sustainably…
    “little computers
    passing messages”
    — Alan Kay

    View Slide

  59. Microservices can be a
    Replaceable Component
    Architecture

    View Slide

  60. Microservices can be a
    Replaceable Component
    Architecture
    - if you choose to optimise for
    replaceability and consistency


    View Slide

  61. Microservices can be a
    Replaceable Component
    Architecture
    - if you choose to optimise for
    replaceability and consistency

    - smaller is not necessarily better


    View Slide

  62. Microservices can be a
    Replaceable Component
    Architecture
    - if you choose to optimise for
    replaceability and consistency

    - smaller is not necessarily better

    - more replaceable is better

    View Slide

  63. Kill code fearlessly!

    View Slide

  64. Kill code fearlessly!
    code I know
    code everyone knows
    code no-one knows!

    View Slide

  65. Kill code fearlessly!
    code I know
    code everyone knows

    View Slide

  66. Thank you!
    Dan North
    @tastapod
    http:/
    /dannorth.net
    http:/
    /leanpub.com/software-faster

    View Slide