Programming is picky and alot like building with legos.
If you put one piece on, another falls off. So, if you're putting something together, there's not telling how many other pieces will fall off, what other bits of code it will affect, and the amount of time it will take to put them back together. That is why timeframes are usually not able to be given until the project is nearly done.