Skip to main content

Main Topics

  • Infrastructure
  • data
  • code
  • security
  • integrations
  • system design patterns
  • integrations
  • 11 playbook/documentation
  • Assessment

Event-Driven Architecture

Event-Driven Architecture

Reference Architectures​

Reference Architectures

Considerations and Tradeoffs

tradeoffs trade-offs


  • Poly vs mono repo
  • mono repo versus poly repo

  • Asynchronous vs Synchronous - CloudAMQP
    • What is interesting is that we were still able to achieve high throughput while using confirms. Allowing 10000 in-flight messages may be high, but it does give a best of both regarding throughput and data safety.
    • Rabbit versus Kafka Messaging

  • Code Complete#General Considerations
  • Robustness vs Correctness: Code Complete#Internal Routine design#Robustness vs Correctness
  • Forward Proxy vs. Reverse Proxy
  • Orchestration vs Choreography
    • Saga Pattern Microservices
  • Microservice vs Monolithic
    • Logging segregation
    • Microservice cons
    • Seperated Databases
    • Anti-patterns on shared libraries
    • Harder to test/trace
    • Orchestration vs Choreography
  • Code Complete#General Considerations system design patterns
  • WET Principle vs DRY Principle Pragmatic Programmer
  • 01 architecture/GraphQL

Other notables

  • General Architecture Lessons
  • Code Complete#Wicked Problem Horst Rittel and Melvin Webber 1973
  • Software Engineering Laws
  • Stone Soup Pragmatic Programmer

Design

  • Code Complete#Levels of Design
  • Circut Breaker
  • 12 Factor App
  • SOLID Principles
    • S - single responsibility principle
    • O - Open Closed
    • L - Liskov Substitution - can sub out implementations
    • I - Interface segregation - keeping interfaces small
    • D - Dependency inversion Principle - core functions should not depend on for example UI functions

Laws

  • Code Complete#Brooks law 1975 more people more progress
  • "Dont document bad code rewrite it" Kernighan 1978
  • Software Engineering Laws

Scaling

  • Load Balancer
  • 01 architecture/GraphQL
  • Database sharding/sharding
  • Horizontal vs Vertical scaling
  • Caching
  • Asynchronous

Concepts

  • Idempotency
  • Immutability
  • Stateless vs Stateful
  • ACID Database
  • Semaphore and Concurrency
  • HttpClient/ Database Pooling
  • Serverless
  • What is the difference between HTTP protocol and TCP protocol
  • HASHING
    • Used to compare if there are any changes to anything
    • Property feed for Snug/Real Estate
    • Discovery upload forms
    • Snooper updating shops
    • Collision Hashes
  • Automate
    • API

Testing

  • Testing Pyramid
  • UI/Smoke test
  • Service (end to end/integration)
  • Unit
  • TDD, Testing pyramid

Lessons

  1. Buy vs Build (only invest in differentiating services)
  2. Bias to Native (Immature native features, opt for opensource, with step-up licensing)
  3. Pay the toll upfront - Code & parameteriseΒ  "EVERYTHING!"
  4. Secure by design - include all security controls (IAM roles, Encryption w/Rotation, ephemeral credentials, delegated Auth, resiliency designs)
  5. Shift all security controls LEFT to the earliest point in the life-cycle (do NOT defer responsibility to developers)
  6. Build for agility - 1:1 decouple, stateless, immutable services (Zero time upgrades baby!)
  7. Sustainable at Scale - Provision with holistic lifecycle automation, risk assessment and governance (IAC to application workload)
  8. KISS - Select services that are lean, fit-for-purpose based on requirements, not brand (Fargate over K8's unless technically warranted )