Everything in nature goes in circles. Days turn into night in a circadian rhythm. Seasons replace each other.
Even life itself is iterative.
In every generation, a small number of genes gets changed due to random mutations. I’m not a biologist, but through some quick googling I found out that the human genome changes with a mutation rate of about 10-8 per generation. This is obviously a number that natural selection has arrived at and found optimal.
A co-worker recently helped me understand why requirements usually don’t work in practice. Non-technical customers will inevitably come up with very fuzzy requirements and usually only have a vague idea of what they really want. Customers with technical knowledge, on the other hand, have more often than not already thought out a solution and will not even bother to describe the problem they are aiming to solve. So what can be done about it?
Will a new feature add value or decrease it?
A common danger to many software engineering efforts is feature creep. This is when we keep adding new and shiny features to our product, potentially rendering it less and less useful as we clutter the interface and makes harder and harder to find the few features that actually made our product valuable. A related problem is scope creep. This is when the stakeholders keep coming up with new requirements, delaying the project’s launch date more and more.
In Swedish, “efficiency” and “effectiveness” are both translated into the same word. With Swedish being my mother tongue, this leads me to sometimes mixing these terms up. This article describes the difference between the two concepts, and why both are important to understand.
The influential author Peter Drucker defined the difference between being efficient and being effective in the following way in his management book The Effective Executive: The Definitive Guide to Getting the Right Things Done: