Once you have the spec the price actually comes kind of easily...

The specification needs to be turned into tasks - "Maintain lookup tables", "Print PO's", "Massive tree-view on the left", "List-view on top", "Drag-and-drop capability", "E-mail from VB".

That's just a sample of a few from the app we just started.

We created this task list in a group meeting with 3 people - all reading the specs and throwing ideas out - all getting onto a whiteboard.

Missing a major task would be a big deal for us - so we spent hours on this.

Then we all stepped back and started "costing" each task. Since it's a real 3-tier app we put hours against each task for UI / BL / DL. Some only had UI - some only had DL - whatever.

And we were generous with those hours - everything was in 4 or 8 or 16 or 24 hour increments. Nothing gets done in one hour - you have to think - code - test - show others - come back and re-work.

There are 6 information tables in a single task on that list - they ended up being UI:12, BL:6, DL:6. That's 3 man-days of work. And we kept challenging each other - could you really develop 6 pop-up screens with a couple of dozen fields and checkboxes in 3 days - you have to be honest with yourself otherwise you lose your shirt.

At any rate - each task got popped into an excel spreadsheet - with those 3 columns of figures. Easy to grand total that.

Let's say it came to 500 man hours - what would you need to earn where you live to make 500 man hours a reasonable job. That's basically 3 months of time. If a well paid consultant earns $200,000 a year then that's a $50,000 project - this is easy math to finish up.

Then that excel spreadsheet is organized so that the tasks are put in an order that we feel is best to approach the project. We wanted our milestones to be every two weeks or so - so we simply "bracketed" them in a way that we could fit x-hours into a two week timeframe. Some items start in an earlier milestone period - so we had columns to the right for each milestone where we spread the hours of the task across.

In the end we present to the customer the part of the spreadsheet that only shows the tasks and the "milestone" completed aspect. All the hours/days info is not presented to them.