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
- Building microservices
- Clean Architecture#Microservice Architecture
- software architecture pattern
- Event Sourcing
- Service mesh
- Data Pump Patterns - Building microservices#Data Pump Patterns
- Backend for Frontend [BFF]
- Clean Architecture
- Screaming Architecture Clean Architecture#Screaming Architecture
- Event Bus:ย https://dzone.com/articles/design-patterns-event-bus
- Lambda with Node:ย From Discover on Google https://stackify.com/aws-lambda-with-node-js-a-complete-getting-started-guide/
- AI/ML:ย https://medium.com/machine-learning-for-humans/supervised-learning-740383a2feab
- Pub/Sub Pattern:ย https://www.lightbend.com/blog/akka-message-delivery-part-2
- EAV (Entity Attribute Value)
- https://softwareengineering.stackexchange.com/questions/93124/eav-is-it-really-bad-in-all-scenarios
- https://stackoverflow.com/questions/2988142/how-would-you-structure-your-entity-model-for-storing-arbitrary-key-value-data-w/57085848#57085848
- https://www.red-gate.com/simple-talk/opinion/opinion-pieces/bad-carma/
- https://stackoverflow.com/questions/10561789/alternative-database-design-to-eav
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
- Buy vs Build (only invest in differentiating services)
- Bias to Native (Immature native features, opt for opensource, with step-up licensing)
- Pay the toll upfront - Code & parameteriseย "EVERYTHING!"
- Secure by design - include all security controls (IAM roles, Encryption w/Rotation, ephemeral credentials, delegated Auth, resiliency designs)
- Shift all security controls LEFT to the earliest point in the life-cycle (do NOT defer responsibility to developers)
- Build for agility - 1:1 decouple, stateless, immutable services (Zero time upgrades baby!)
- Sustainable at Scale - Provision with holistic lifecycle automation, risk assessment and governance (IAC to application workload)
- KISS - Select services that are lean, fit-for-purpose based on requirements, not brand (Fargate over K8's unless technically warranted )