On any software project, the software designer creates the software design and hands it over to the software programmer to write the source code. Generally the software design contains design for every business logic which need to be implemented. The detailed design is generally good enough for a software programmer to understand how the business logic works. But still implementing the business logic in the source code is not easy as many software programmers will vouch.
What are the factors which lead to such a situation? One problem could be difficulty in implementing a business logic using a programming construct. Many looping constructs are difficult to implement. For example looping through an array and finding some value of an element of the array is a cumbrsome task which many programmers find difficult. Looping through records stored inside a database and finding some value is again a difficult task. Linking a user interface element like a drop down box with values stored inside a database is again a difficult task.
Another programming task which is difficult to implement is maintaining user sessions for web based software applications. In fact developing a web based software product itself is a difficult task. The reason is that you need to create and pass values from user interface elements to some variables to session variables to a database. Since you need to pass values to variables at many layers and levels, the entire programming task becomes difficult.
There are some more programming constructs like thread management, memory management, performance management which are even more difficult to implement. So even though a prrogrammer is given all the software design information, implenting the design into source code is still a challenging and difficult task.