Software Unintuitiveness
Designing, developing and delivering quality software is often more involved than meets the eye. I believe that a good portion of the reason for this is that the software development process is counter-intuitive in a number of ways, even to those who do it for a living.
For example:
- Small efficient teams are better than large teams. The communication overhead involved with large teams can easily lead to more bugs and re-work as well as less efficiency.
- Productivity varies widely from person to person. A rule of thumb that seems to be “common knowledge”, though hard to quantify, is that your most productive developer will be 10 times more productive than your average developer. My observation is that your worst developer can make negative progress by breaking the system so badly that your other developers have to spend their time fixing it.
- Testing may take more time and resources than development. Especially on small bug fixes or feature updates to a large project, the development might be measured in hours or days while the testing, which needs to include a regression over major functionality, can take weeks.
- Spending time “writing it down” saves time. Writing a strong, clear specification for a feature or product might take several weeks and it will seem as if there is no progress being made on the actual software. However, a good specification will mean that the software and QA teams have a mutual understanding of what the product is and does, and will be much more likely to get the job done right with fewer iterations.