My third job, a contract with a, well, sort of a utility company. I was originally hired to work on the implementation of a new accounting system, which did so poorly that the Major Accounting Consultant Firm was fired one afternoon. But I was personally doing well, and so got a new assignment, to be project lead to convert a system written in COBOL that called multiple FORTRAN subroutines (doing scientific computations) using VSAM files to use DB2 databases instead of flat files.
Lots of screens to update the files/databases. But it was relatively cut and dried. I worked out how long each revised program would take, counted the programs, did my homework, gave the estimates and background data to my manager, who said "That's too long... make it shorter!"
So I make it take the length of time he wanted. Then one of the contractors finished his first big task, it was horrible. Barely functional. We let him go, I gave that task to another guy. Most of my guys were in another state, which shouldn't have mattered. But of course it did!
Anyway, when we reached the time I "estimated" as instructed, we weren't done, and I was moved back to that horrible accounting project that had died a year ago. The people who took up my "failed" project finished right on time - that first estimate that was "too long"... using my specs and designs.
TL:DR Even if you do a good estimate and hit it right on, it still won't be right.