One way I've seen architectures get really complex really quickly, is when engineers try to foresee and plan to multiple rare non-critical scenarios.
The famous "what if" driven architecture:
- What if we get 10k concurrent users tomorrow? Everything needs to be CQRS event-driven, HA queue backed, produced and consumed by a fleet of microservices or it wont work perfectly!
- What if the user loses their internet connectivity while submitting this mundane form? We need localstorage backup for all CRUD operations and implement custom conflict resolution logic for each POST/PUT/DELETE.
I mean, yes we can try to tackle all possible issues and outcomes in our timeline but the sun would have cooled down by the time we are done.
Sometimes, well most of the times, you just gotta keep the project focused and 80/20 it.
The famous "what if" driven architecture:
- What if we get 10k concurrent users tomorrow? Everything needs to be CQRS event-driven, HA queue backed, produced and consumed by a fleet of microservices or it wont work perfectly!
- What if the user loses their internet connectivity while submitting this mundane form? We need localstorage backup for all CRUD operations and implement custom conflict resolution logic for each POST/PUT/DELETE.
I mean, yes we can try to tackle all possible issues and outcomes in our timeline but the sun would have cooled down by the time we are done.
Sometimes, well most of the times, you just gotta keep the project focused and 80/20 it.