I often hear developers complain that the specifications, demands, and technology change to quickly. So how can developers deal with it?
Change is after all the key aspect that complicates the design and development process. Often it is not even a question of delivering quality, but pure survival of the delivery.
One day I got the following question:
- How can you trust anything, if everything is constantly changing?
I thought about it and expanded the question:
- How can science and truth be possible in a world of chaos?
Speed is the key
I came to the conclusion that everything is changing, but things changes at different speed.
For example a metal bucket changes slower than my body and therefore can be used as a measuring unit to measure how my body grows:
A shadow on the other hand changes quicker than my body and will be difficult to use as a measuring unit:
How to deal with change
A unit test changes slower than the code and I can use it to measure how the code changes.
This is why I apply Test Driven Development as a design methodology: First I design a single unit test, then implement the necessary code to make the unit test pass. Then I design another unit test with the necessary code implementation, then another, and another, etc.
As a developer, I am able to implement great ideas as solutions. But as a developer, I also forget about the great ideas after I have implemented the code.
I Therefore write the unit-tests to document my great ideas, before I implement and forget them. If I don’t, then it is only a question of time, before the complexity becomes large enough, so when something breaks; nobody will know how to fix it. We would end up like the elves in the Lord of the Rings:
“The world is changed. I feel it in the water. I feel it in the earth. I smell it in the air. Much that once was is lost; for none now live who remember it.” – Galadriel, Lord of the Rings.