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

Programming in the Large

Programming in the Large

Good architecture frees us to choose the right tools and techniques, allowing us to adapt easily and concentrate on solving real problems rather than our made up ones. In this talk we will run through some stereotypical projects looking at the properties of good architectures and how these play into our ability to adopt better tools like Scala and FP. We will attempt to ground the magical architecture ponies, with real examples of my past projects where things have gone well and probably of more interest where they really have not.

Mark Hibberd

November 13, 2013
Tweet

More Decks by Mark Hibberd

Other Decks in Programming

Transcript

  1. Any organization that designs a system will produce a design

    whose structure is a copy of the organization's communication structure Conway’s Law
  2. How the system interacts What is the systems purpose Macro

    Architecture Domain Architecture How the system is built Micro Architecture
  3. Code search as Systems INDEXING SEARCH CODE CTAGS CTAGS application/html

    application/search.v1+json Macro Architecture
  4. Code search as Systems INDEXING SEARCH Scala Embedded Server OS

    for logging Bourne Shell Exuberant CTAGS Deploy as git hook OS for logging OS for services
  5. Code search as Systems INDEXING SEARCH Micro Architecture Scala Embedded

    Server OS for services OS for logging Bourne Shell Exuberant CTAGS Deploy as git hook OS for logging
  6. Code search as Systems INDEXING SEARCH Micro Architecture Scala Embedded

    Server OS for services OS for logging Bourne Shell Exuberant CTAGS Deploy as git hook OS for logging MORE AUTONOMY
  7. Signs of failure Systems are not autonomous Systems share a

    domain model Systems need to be evolved in step Systems need to be built by single team Systems share a data base
  8. The concept of micro-services are great An Aside The concept

    of small libraries are great But they are not enough without thinking in systems
  9. Thinking ahead is not about avoiding change Thinking ahead is

    about letting us change at different rates for different problems
  10. Indexing V2 INDEXING SEARCH Scala Embedded Server OS for logging

    Haskell Static Executable OS for services OS for logging OS for services
  11. INDEXING SEARCH Scala Embedded Server OS for logging Haskell Static

    Executable OS for services OS for logging OS for services Micro Architecture Indexing V2
  12. now vs later priorities shift over time, can't let early

    traction sacrifice long term speed An Aside
  13. INDEXING SEARCH Scala Embedded Server OS for logging Haskell Static

    Executable OS for services OS for logging OS for services Indexing V2 DIFFERENT SYSTEMS SAME RULES DIFFERENT SYSTEMS DIFFERENT RULES An Aside
  14. Macro Architecture Search V2 INDEXING SEARCH CODE CTAGS Super-Zippy Format

    application/html application/search.v1+json Super-Zippy Format
  15. Rates of change domain macro micro Freedom to choose tools

    and technology by nailing domain and protocols
  16. Systems as the unit of work If you can’t add

    a person to your project then you are failing worse than you think again An Aside
  17. CMSs hold customer data hostage CONTENT ANALYSIS & DATA MINING

    PROJECT Free data Analyse data Derive data CMSs tied to horrible platforms Goals Constraints
  18. Play 1.1 App Protobufs Thrift HTTP Establishing Rules & Autonomy

    sbt-assembly OS package Containers IDENTITY Protocols Deployment
  19. All editors are bad, really bad ONLINE CONTENT EDITING Something

    aaS APIs Ready to change Small team, tight deadline Goals Constraints Lots of ideas, not sure what would work
  20. C Scala Scala Spelling Identity Templates Editor Customer UI Micro

    Architecture Scala/JS Scala Postgres Postgres Postgres syslog jail per service rc.d 1 executable Minimal stack
  21. Editor was working well ONLINE CONTENT EDITING Incremental Multiple Versions

    Add not modify Needed to add more services Goals Constraints System need to keep running
  22. Spelling Identity Templates Content Editor Analysis Customer UI Scala/JS Scala

    JS C Scala Scala Scala multilog jail per service daemon tools 1 executable Minimal stack
  23. Demand for standalone features ONLINE CONTENT EDITING Quick Minimal Overhead

    Maximum Reuse Not tied to our editor Goals Constraints Run in parallel to current system
  24. References + More Info Stefan Tilkov's Breaking the Monolith slides

    video Coda Hale and Ryan Kennedy on "Streamie" notification service at yammer