• Business objectives can be messy: assumptions behind them can be wrong or there may be confusion about the objectives themselves.
  • Project lifecycles can vary immensely and may become unpredictable.
  • Software development often relies on stitching together existing tools and libraries. It can be difficult to see beforehand whether the chosen tools are actually suitable for the job.
  • Refining project specifications is harder because software is abstract.
  • Often, the person commissioning the project does not know what the solution should look like. Specifications are fuzzy at best.
  • It is up to the developer to articulate a solution and see whether it fits the expectations. It is not just a logical activity, it requires creative problem-solving.

Full post here, 10 mins read time