This seems to follow my experience, although I attributed it to the Pareto principle.
80% of the feature will take 20% of the time. The last 20% will take 80% of the time once you factor in all the other things like:
- getting the feature working correctly to all specifications.
- thinking about larger scale impact of your code and how your team might react to it, and deciding on which implementation to take.
- resolving missing edge cases.
- previously undescribed features the design team overlooked, but is now obviously wrong now that they can see it in action.
- time it takes to roundtrip the review process.
- resolving unrelated bugs that code changes may have created.
- writing tests.
- manual testing.
- fixing bugs found in regression tests.
- deployment and deployment related errors (happens rarely, but you have to average it out).
Just getting to "I got this feature working!", seems to only be a small part of the whole process.