Generally the first step for a programming lead is to determine the platform we are talking about (Mobile, Web, Desktop) and bring Romeo, Dick or a Cambria programmer with the relevant skills to talk to the Client and figure out what programming language is appropriate to the project. A programmer with expertise in the language chosen will then get involved.
The project will be broken down into specific sub tasks, and each one estimated. A proposal giving the sub tasks and the estimates will be prepared and sent to the client[a]. Most of our proposals are simple letter proposals that call for the client to sign and accept or to voice concerns if he feels that we got it wrong in some detail.
Either way we will end up with a project cost broken down by tasks. If accepted the client will be asked to give us a retainer to prove definite interest and we can get started. The retainer will be returned by applying the retainer to our invoices.
Invoices are generally given and sent weekly and are itemized showing the number of hours that a programmer worked on the project, what the charge was for the task, a total for the week and a report comparing the time to our original estimate. Our estimates are just that. And we are not always right. They are sometimes high but the experienced client will not be surprised that the estimates are sometimes low.
When it becomes clear that we are likely to overrun our estimates we will warn the client. If we are somehow at fault we will eat the overrun and a new estimate will be issued. Usually there is a variety of reasons for an overrun and a frequent one is the addition of new features by the client. So it is important to get what we want right the first time.
That is pretty much it and has not changed much since we started in 1984.