While pipelining can cruelly cut the time taken to execute a program, there are troubles that cause it to not work as well as it possibly shall. The three stages of the instruction execution process do not essentially take an equal amount of time, with the time taken for ''execute'' being usually longer than ''fetch''. This makes it much harder to synchronize a variety of stages of the different instructions. Also, some instructions may be dependent on the results of other previous instructions. This can arise when data produced previous needs to be used, or when a conditional branch based on a previous result is used.
One of the easiest ways in which the effects of these troubles can be reduced is by breaking the instruction execution cycle into stages that are more possible to be of an equal duration.
Although, while this may resolve some of the troubles outlined above, it is not without creating further tribulations of its own. Initially, it is not always the case than an instruction will use all six of these stages. Easy load instructions, for example, will not require the use of the final ''write operand'' stage, which would perhaps upset the synchronization. There is also the matter of potential variances within the memory system, as three of the above stages (fetch instruction, fetch operands, write operand) need access to the memory. Many memory management systems would not permit three separate instructions to be accessing the memory immediately, and hence the pipelining would not be as useful as it would first seem.
On top of this, the difficulty of conditional branching and consequence dependant instructions also occurs. This means that the processor requires to be designed well so as to cope with these potential interruptions to the flow of data. As you can tell, there are many subjects which need to be taken into consideration involving to the technique of pipelining. While it is a powerful method for the purpose of increasing CPU performance, it does need careful design and consideration so as to achieve the best possible results.