All good points!
First if you work in a team or will most of the Standard Operating Procedures are usually established.
For me as a freelancer/contract worker (many times the only developer) I develop in modular way as much as possible, a carry over from my C# and asp.net days. This way I develop and test a blog once, a authentication system with roles and permissions once etc. The key for me and I have posted in almost all similar threads is DOCUMENTATION. Scope document, feature set, explanation/mission statements, wireframes, db schema I even plan out namespaces, business logic($variables and method names) and folder structure along with descriptions of everything. Pain in the butt at first but once you get your docs set up it 1) easier 2) learn to can't work without them.
Client comes to me now and says I need a website for my lawn care and snow removal site. I need to tie in social media, how-to-blog, newsletter and coupon announcements and a way for customers to schedule/reschedule appointments.
I see:
Authentication
Socialite
blog
email newsletter sign up
Customer area only with calendar
I grab:
My Auth package, Socialite package, blog 70% code and 70 documentation done,
Find out what the client needs for newsletter (mailchip, campaign monitor smtp etc), grab that package I have done, and narrow down customer support area requirements.
I basicly have to build that 20% customer area, charge 100% of the time that is required, and I am almost done already. The documentation refreshes my mind, ensures the customer area has no conflicts (namespacing, business logic etc) and db schema issues as I combine the packages schemas and add and tweak as needed. A three month project in maybe two weeks and off to the designer....