This is a map of the territory that we'll be eventually trying to cover in the podcast. It will change as we learn more (links to the updated version will be updated and announced)
- Important factors
- Good design
- Practical stories
- What is good design
- Why is it imports
- Factors that affect design
- Natural Boundaries
- Languages
- Teams
- Organizations
- Enabling Resources
- Teams
- Technologies
- Knowledge
- Constraints
- Budget
- Time
- Scope and Quality
- Political aspects
- Natural Boundaries
- Strategic concepts related to design
- Domain Model
- Ubiquitous Language
- Bounded Context
- Context Map
- Project deliverables
- Processes
- Concepts
- Long Running Process
- Behavior
- Aggregate
- Aggregate Root
- Identity
- Value Object
- use case
- Integration
- anti-corruption
- Task-based UI
- inductive vs. deductive
- eventual consistency
- "big data" processing
- Continuous delivery
- TODO based on block 3
- TODO based on block 4
- Definition and characteristics
- vs RPC (sockets, web services)
- Immutability
- Delivering messages
- Transactional queues
- Scalable Cloud queues
- ACK+NACK
- Visibility timeout
- Temporal Decoupling
- Direct dispatch
- Pub/Sub and multiplexing
- append-only streams
- Consuming messages
- Idempotency
- Competing consumers and load balancing
- Message failures and quarantine
- Message handlers and application services
- Defining messages
- Contracts and serialization
- Message builders
- DSL
- Human-readability
- Versioning and evolution
- [Related Podcast Episodes and Code]
- Definition
- Aggregates with Event Sourcing
- Domain Services
- Specifications
- Unit tests
- Documentation
- Evolving A+ES
- Basic performance concerns
- Caching
- Snapshots / Memorization
- Building event store
- Concurrency problems
- Eventual replication
- Master - slave - clone
- Failover modes
- Indexing and caching
- Conflict resolution
- [Related Podcast Episodes and Code]
- CQS
- CQRS perspective
- Elements: Client - Application Server - Projection Host
- Contracts: Command - Event - View
- Relation to Bounded contexts and UL
- Modeling distributed world
- Temporal decoupling
- Eventual consistency
- Volatility
- Transactional scopes
- Team scalability patterns
- Outsourcing CQRS elements
- Developing CQRS elements in parallel
- Developing features in parallel
- Risk mitigation
- Performance scalability patterns
- Application Server - Partitioning and load balancing
- Client - Load balancing
- Projection Host - multiplexing and partitioning
- Definition
- Simple implementation
- Document storage interfaces
- Projection Code
- Performance optimizations and tricks
- Building automated rebuilder
- Tracking changes in code
- Eventual consistency
- Concurrent changes
- Scaling and replication
- Domain modeling exercises
- TODO
- Core principles of "learning"
- deterministic
- non-deterministic
- Supervised vs. unsupervised learning
- Validation and experiments
- Dealing with data
- Classical approaches
- Regressions
- Classification
- "Brute-force" approaches
- Neural Networks
- Genetic Algorithms
- Hybrid approaches
- Evolutionary Neural networks
- Self-recovering distributed systems
- Distributing CPU-intensive machine learning tasks
- Source code versioning
- Unit testing
- Continuous integration
- Lowering development friction
- Rapid iterations
- Keeping things simple and separate
- Distributing work and outsourcing
- Application Server
- Thin client
- API
- Web
- Native
- Mobile
- Desktop
- Hybrid systems
- Smart "Fat" client
- Occasionally connected system
- Application Service
- Aggregate
- View Projection
- Long Running Process (Task)
- Event Port
- Domain Service
- Bounded Context
- Atomic document storage
- Atomicity
- Retrial and conflict resolution
- Local files
- Cloud / PaaS
- Append-only storage
- Local files
- Cloud / PaaS
- SQL
- Streaming blob storage
- Local files
- Cloud / PaaS
- Message dispatcher
- Quarantine
- Deduplication manager
- Message overflows
- Debugging and replays
- Task runner
- Startup tasks
- Partitioned storage
- Distributed processing
- Message and record streaming
- Real-time aspects
- Performance improvements
- Data Visualization
- Basics
- Supervised vs unsupervised learning
- Error
- Data quality and validation
- Deterministic heuristics
- Non-deterministic brute-force
- Neural networks
- Genetic algorithms
- Scaling out CPU-intensive learning
- Practical applications
- Deployment, maintenance and life hacks
- Lokad Salescast
- Lokad Hub
- Lokad Watchtower
- Lokad Salescast2
- Event Day
- Human Record
- TODO: ask for more external cases
- Options and costs
- With downtime
- With reduced SLAs
- With partial functionality
- Without downtime
- Managing versions
- Incremental deployments
- Rolling back on failures
- TODO: gather from Lokad experience
- TODO: gather from Lokad experience
- Persistence
- Relational
- MS SQL
- mySQL
- Postgres
- Oracle
- NoSQL
- Redis
- CouchDb
- MongoDB
- Azure
- Amazon
- NoDB
- Files / Blobs
- Memory caching
- Relational
- Messaging
- Broker-based
- Broker-less
- Push and pull infrastructures
- Hardware factors
- Rust drives
- SSD
- RAM
- Multi-core processing (including low-power ARM scenarios)
- Dedicated hardware