Search CTRL + K




Designing Data-Intensive Applications

However, we can and should design software in such a way that it will hopefully minimize pain during maintenance, and thus avoid creating legacy software ourselves. To this end, we will pay particular attention to three design principles for software systems:

  • Operability
    • Make it easy for operations teams to keep the system running smoothly.
  • Simplicity
    • Make it easy for new engineers to understand the system, by removing as much complexity as possible from the system. (Note this is not the same as simplicity of the user interface.)
  • Evolvability
    • Make it easy for engineers to make changes to the system in the future, adapting it for unanticipated use cases as requirements change. Also known as extensibility, modifiability, or plasticity.

As previously with reliability and scalability, there are no easy solutions for achieving these goals. Rather, we will try to think about systems with operability, simplicity, and evolvability in mind.[1]

  1. Martin Kleppmann, Designing Data-Intensive Applications, n.d. p19 ↩︎