Slow process creates uncertainty
In most countries, a granted patent is considered valid starting from the application date. This means Person A can apply for a patent, and Person B can develop a product. If Person B looks at all published patents, they will not see Person A's patent application which is still being processed. If Person A's application is approved, they can immediately accuse Person B of infringing the patent - despite Person B never having had any possibility to know that this idea was patented.
The unfair situation can happen in any field of development, but it's aggravated in the case of software because the development cycle of software is often very fast.
Post-grant changes
In the USA, patent applicants can continue to enlarge the patent within the first two years after it's granted.[1] So if Amazon searched all existing patents in 1999, and if they found that their 1-click shopping idea wasn't patented, they could still find themselves sued in 2000 or 2001 by someone who later expanded a patent granted after Amazon did its search.
Related pages on ESP Wiki