Years ago I ripped all the paneling out of the downstairs, tore out cabinetry, plumbing, a sink, and a wall. I waterproofed the concrete block wall first by filling any cracks with a mortar then painting the block with a thick waterproofing sealing primer. The wife asked, "why is this taking so long?" I then created studs for the new wall which included a walk-in closet and a nook that the previous setup did not include. The wife asked, "why is this taking so long?" I pre-drilled the studs for wiring and ran electric, cable (to multiple drops), and ethernet (to multiple drops). The wife asked, "why is this taking so long?" Next I insulated the walls and hung the drywall. The wife asked, "why is this taking so long?" Finally I was able to do the tedious step of applying joint compound (spackling) to fill the gaps and cover the drywall screws. If you mess up the joint compound, the mistake will be clearly seen when paint is applyed. I sanded and sanded and reapplied compound and sanded and sanded. The wife asked, "why is this taking so long?" Finally I was able to put a coat of paint on. The wife asked, "why didn’t you do that in the first place?"
Often my programming is very similar. A lot of detail goes into the framework of the site, that is the behind the scenes stuff that nobody ever sees. As a matter of fact, if I have done my job well, anything complex should be hidden from the user and the website should leave them with a "wow that’s easy! I could do this!" feeling.
My current project involves using ColdFusion to fetch a large amount of data from a data provider (some other company that has a really big database which frequently updates) in an xml format then parse it to save the results in my client’s database. I have made it over a huge challenge! But all my work is invisible to the frustrated client. I’ll put up the visible side shortly and I fear the client will ask, "why didn’t you do that in the first place?"