Software is improved iteratively. Large changes come through in many small changes. Good software can flex easily.
I like to think of the large changes as the brightest stars in the sky - they help you navigate the ship.
You do not want to lose the brightest stars in the sky. Finding them again takes time and effort.
You need to know what could make you lose the stars just like you need to know how to move towards them.
You need to know what keeps the stars exactly where they are (what changes are not meaningful or important in the long term).
The three stars I always care about are:
- Is it correct?
- Is it easy to use?
- Is it easy to change?
Is it correct? Does the software do what it's meant to, and what it says it will do. Nothing matters if the code isn't correct. Tests help you write (demonstrably) correct code.
Is it easy to use? Software is used by end-users, but also by engineers. Could a customer easily use the sign up form? Can an engineer easily fire a message into a queue?
Is it easy to change? How easily could an engineer alter an existing behaviour, or add a new one? Will a change in one place cause any unexpected changes elsewhere?
See other articles