Finishing a job is a myth. Unless the attribute 'quality' is not accompanied, 'finished' is just a meaningless word.
I asked one of my past employer in a casual meeting about the reason for not trying to convince an employee to withdraw his resignation request though this guy used to be well known in keeping deadlines. Answer was - "I used to get at least one bug report from the customer within one week of the work he delivers".
How many us get angry when the internet speed is slow? What is your emotion when you want to transfer money urgently but banking site says "try later"? How do you feel when your name is misspelled in your pay slip? ...expect the same response from your customer, and so as the employer who issues paycheck.
So the reasons narrow down to 'Quality'. What ever work you do, you should be doing quality work only. In short you want to be a perfectionist.
How to be a perfectionist?
If you are in software development industry:
Do not keep aside any tasks, no matter how minor its priority be. You may keep it in a notepad and practice to follow it
Read/review your own code!
Review full module/project code and make sure the integration is done perfectly
Take responsibility and ownership of what ever task you do. If it is a team project, do not assume a task is other guy's responsibility. You must check with him and confirm it is done.
Use on screen rulers to check UI alignments
Use online grammar and spell checkers. Or you can use a word processing application to do this.
Make sure you are following coding standards and branding guidelines
Test your application well. Do not wait for tester's report to come.
Think out of box. Because your customers are not predictable.
Do not assume everything will work fine. Your website might work perfectly in Windows but you cannot ask customers not to use Mac