we typically think of databases, queue, caches as different tools because of their different access pattern and use cases, but ultimately all store data for some time
With the onset of tools like Apache Kafka(message queue with database durability), Redis(datastore and message queue) this boundary is further blurred
Many Applications these days has wide range of requirements which a single tool can’t deliver. Usually work is broken in tasks to processed on a single data sytems efficiently which work in harmony with application code to process large volumes of data.
Designing any new data system entails following problems to be solved
Ensuring data remains correct and complete, even if things go wrong internally
providing good performance to client when some part of system are degraded
how do you scale to handle increase in load
what does a good API for service look like
External factors that do affect design process
Skills and experience of people involved
legacy system depencies and technical debt
timescale of delievery
organisation’s tolerance for risk and regulatory constraints