Hourly. I would never, ever do a project pricing again. You'll get scope creep like you wouldn't believe. Even if you have clearly defined requirements, the problem is that those requirements are never perfect, so they inevitably change as the project progresses (that's the whole basis of what Agile is about.)<p>What you could do is this: you could "secretly" estimate the cost of the total project in terms of hours. Then you can decide how much you want to be paid for the entire project. Then divide that by the number of hours, giving you an effective hourly rate. Then you can quote that hourly rate for your acquaintance which perhaps a "general estimate" of how many hours it might take; don't get too specific or else you risk painting yourself into a corner when things go wrong.<p>Personally, if it were me, I'd ask for a certain amount in retainer up front before you write a single line of code.<p>For example, if you think the project is worth $15,000 and you think it'll take 150 hours, that puts your hourly at $100 per hour. I would ask for 10% of the project hours up front (after all, you are also incurring an opportunity cost by even accepting the job and there's always the risk that you won't get paid. Trust me on this! The most trustworthy people can often screw you out of money in the nicest ways.<p>So I'd say, "It looks like, based on the requirements we've discussed that it would take approximately 150 hours to complete this project. That can vary considerably depending on any changes we might make as we make progress. I charge $100 per hour and require retainer based on the projected project duration (i.e. deposit,) which in this case is $1500 to start.<p>Our next payment will be due upon the completion of milestones that we both agree upon. For example, when your Facebook page is complete, etc. All hours that have been completed up until the milestone reached will be payable once we reach that particular milestone or every two weeks, whichever is sooner."<p>..or something to that effect. Even if it's a close friend or acquaintance, do everything in writing, making it all crystal clear. I'd even use something like Basecamp (especially with their awesome checklists and milestones calendars) to manage it all. This will insure that your friend treats you like a professional and with that, you don't get abused under the guise of "friendship."<p>You certainly don't have to do it how I suggest, but at least do the following:<p>1. Use a project management system, I suggest Basecamp, but there are others.
2. Get your agreement in writing.
3. Don't commit to a project cost -- it will ALWAYS go longer than you think and "one more thing" adds up. The only exception to this is if you're charging such an insane rate that you build the inevitable overruns into the price.
4. Get paid based on milestones or on a regular time schedule (i.e. every two weeks.) I recommend milestones because it makes the client feel better, but I personally prefer time-based. If you wait until the project is "done" to get paid, then they'll have very little incentive to pay and a very big incentive to drag it out/delay. Unless you control the server. Then if payment is 1 day late, you shut that puppy down until that money hits your account. If you do milestone payments and those payments are late, stop work and tell your friend, that you can't continue until the payment has been made. Trust me on this. You will get abused if you let yourself. It has happened to all of us who've worked as freelancers!
5. Treat this project professionally. You're getting paid as a professional, so you'd better deliver as a professional, regardless of "friend" status or not.
6. Keep accurate records of time. This is useful because it will give you data you can use later when estimating future projects.<p>Good luck! I hope that helped.