Goals of Software Development

Software has many goals. Whether it’s serving up entertainment (Netflix, YouTube), delivering food (DoorDash, PostMates), or anything else you can find in the app store, there are three goals that these softwares should strive towards: reliability, scalability, and maintainability.

Reliability

Softwares should aim to be reliable. In the face of human or system error, the software should ideally still provide most (or at least some) of the value it’s set out to provide. The reality is that errors will come up. No amount of testing will cover all the scenarios possible in the world, so it’s key to build fault-tolerant systems.

Scalability

Strive for scalability.

But don’t think answering the question is as easy as saying, “Yes, this is scalable,” or, “No, this isn’t scalable.” Instead, evaluate the current load on your system (tweets/second, gigabytes of video streamed/sec) and think of how your system responds to increase or decreases in that load.

Maintainability

This one is for keeping engineers and DevOps sane. The system will need to evolve as user needs evolve. New technologies and libraries will come up – some even outperforming tech in your current stack. As such, it’s imperative to build a system that allows for flexibility and evolvability, so we don’t end up with software that needs to be scrapped and built from the ground up again and again.