Freelance Web Developer Best Practices?
SirLurksAlot writes "My last employer had to make a series of budget cuts, and I was laid off. I have been on the job hunt since then; however in the meantime I have begun freelancing as a Web developer. This is my first time in this role and so I would like the ask the Slashdot community: are there any best practices for freelance developers? What kind of process should I use when dealing with clients? Should I bill by the hour or provide a fixed quote on a per-project basis? What kind of assurances should I get from the client before I begin work? What is the best way to create accurate time estimates? I'm also wondering if there are any good open source tools for freelancers, such as for time-tracking and invoice creation (aside from simply using a spreadsheet). Any suggestions or insights would be welcome."
First of all be sure you get signed contracts, or you will be stiffed more then you get paid.
Plenty of OSS timekeeping apps out there. Check out SQL-Ledger for a complete solution with accounting.
---- Booth was a patriot ----
Write up a standard contract. Make sure it defines what you will and won't do. Make sure that if anything is requested beyond what is listed the contract must be renegotiated including pricing. Making sure you are indemnified and held blameless. CYA.
putting the 'B' in LGBTQ+
...and you're good to go. Just look around the Web a bit. If they won't pay take down their sites: you'll own the domains.
Warning: this article may contain humor, sarcasm, parody, and perhaps even irony. Read at your own risk.
For the love of god, do NOT make your websites using any of these:
- tables (for layout, I mean)
- Flash
- Java
Also, learn to code for Opera/Safari/Firefox first, then add conditional CSS for IE6 and IE7.
Take time to learn the real-life differences between JPEG and PNG. You shouldn't have a photo in PNG anymore than a logo should be in JPEG.
And last, know the limits of bandwidth and clients. Not everyone uses a high-speed cable connection on a Quad-core computer.
posted anon because of the freakin' Adobe Flash fanboys.
1. Maximize what you get from the client. Do hourly or fixed-quote, whichever is most appropriate. If you have the luxury of choosing only high-paying clients, well, nice to meetcha, Santa. How's the skiing in Hell?
2. Half up front. No exceptions.
3. Years of experience.
Potato chips are a by-yourself food.
Quoting a fixed price for projects is like putting a "kick me" sign on your back. You'll attract cheapskate clients who will chisel you.
Use a standard contract that indemnifies you and covers your ass as much as possible. Always create a statement of work for each engagement and create a new revision that gets signed off for each material change.
Conformity is the jailer of freedom and enemy of growth. -JFK
Even in the current economy, you're an asset. Don't under value your services; the worst mistake you can make is letting your clients get used to being billed for less than you're worth.
Aside from that, bill a percentage up front when you've all agreed on the specifications. Also, set milestones and bill another percentage when you meet them. This keeps you in the black and sets up expectations which help your client perceive you as a professional (now, be sure to _meet_ those milestones!).
As for time tracking... I'm sure there are good free solutions, but I haven't used any yet. I did use Quickbooks Online and it works, especially if you'll be working with others. Hopefully you'll be back at work somewhere soon! Working for yourself can be stressful.
Good luck!
First, take your best estimate, then multiply it by two, and then increase the units to the next largest. So, if you estimate something will take 3 hours, tell the client it'll take 6 days.
Game! - Where the stick is mightier than the sword!
I carefull define what constitutes a "minor" update--basically, anything that doesn't involve a complete site redesign or a lot of graphics work is covered.
Here's the beauty of it: about half my customers go for maintenance and in the 4 years I've been doing websites on the side, I've gotten 12 customers that have maintenance contracts. I haven't done one update under maintenance. I just sit there, quietly collecting $25/month for doing absolutely nothing. And, even if I do have to do something, so long as it's not alot of graphics work, it only takes me a half hour or so anyway.
Also, as others have said, get a deposit before you start work on a site. I do sites on a flat-rate basis, and require 50% up front. Otherwise, you can spend a lot of time working on a site for someone and never get paid.
Also, remember that you will make as much money on hosting in general as you will on design--get a reseller account with a good hosting provider (I use hostgator, but if I had to do it again I'd probably get a dedicated server because hostgator's rails support sucks.) I suggest using paypal subscriptions to make sure you automatically get paid for hosting. They're cheap and easy to setup, and it all happens automatically.
"He who would learn astronomy, and other recondite arts, let him go elsewhere. " -- John Calvin, commenting on Genesis 1
Several years ago I did exactly what you are doing. I worked for several companies as a freelance web designer/developer. Here is what I learned: 1. Overestimate time demands. Use the 2x, 3x principle. For new projects figure out what you will need in terms of material resources. Break down projects into subparts and estimate the time it will take. For technology and projects you are familiar with double your time estimate. For new technology you are less familiar with triple the time estimate. If the learning curve is very steep use 4x estimate (avoid this). 2. Use a contract with your client based on 1 third up front, 2 thirds midway, and final payment on shipment of product. Specify this in writing and get it signed by their billing department. If they won't agree then consider another project to work on. 3. Consider your billing and internal planning such as flow charts for projects just as important as doing the actual work. A lot of new freelancers fail to do this and get burned. 4. If you use artists work or do your own graphics use sign off contracts to get your client's approval that the final design is acceptable. Most clients will at this point say, "It needs to be approved by marketing...," or something similar to this. This step can save you from redoing this endlessly for free. 5. Be assertive about following the above suggestions. Part of running your own business is sticking up for your rights. If you don't others will take advantage of you.
I figured out an hourly rate based on my skills and the prevailing rates. When someone wants me to do something, I get a clear statement of what the work entails. I give an hourly estimate in the form of a range (e.g., 20-25 hours), and tell the client that the top of the range is a cap--after that, I turn off the clock and finish the job, and count the 'lost' hours as an expensive education in estimating (clients quite like that there's a ceiling on their costs and that I'm apparently willing to take a hit for doing things badly).
Then, when I'm estimating, I make sure that I understand the requirements clearly enough that I (almost certainly) won't ever hit that cap. I'm generous in my estimated hours, and if possible, come in at or below that floor of my estimate, which also impresses clients. I'm very upfront about the time taken being a range to handle unexpected difficulties.
For larger jobs that I quote, I break it up into estimable pieces, and call them milestones.
For jobs under five hundred dollars, I do the work and bill. For jobs over five hundred, I get half up front and half on delivery. For large jobs with milestones, the half up front, half on delivery is for each milestone. Milestones are structured with a clear deliverable so that the client feels like, if they stop at that point, they've got a recognizable thing for which they paid.
So far it's worked pretty well for me. The most important part has been long discussions beforehand so that a clear statement of requirements is agreed to before work starts. Then, if the client says they want something different, I've got clear grounds for either revising my estimate or calling it 'out of scope' work with a separate estimate/bill.
Anyone who loves or hates any language, platform, or manufacturer, doesn't know what they're talking about.
I started freelance web development more than 10 years ago. I built my company on my freelance work. So I can speak with some authority here.
Here's my advice in bite-size nuggets:
- Only bill time and materials. Do not ever agree to do fixed fee work or you will loose your shirt.
- Incorporate. It's actually easy and gives you more protections.
- When tax time comes around have a CPA do your taxes.
- Find a basic, easy to read, even handed/fair contracting agreement that you should always try to use. Have it reviewed by a lawyer. Include these points: mutual indemnification, your *hourly* rate, terms of ownership that gives you ownership over work produced until its paid for in full. Include a clause that allows your clients to cancel at any time without warning but they still have to pay for hours worked. (More on why later.) Any contracts provided by your clients have reviewed by a lawyer.
- You *will* eventually (probably sooner rather than later) be stiffed by a client in part or in whole. Have a lawyer you can call to write them a letter. You'll at least get some payment if you have a lawyer write a letter for you. Be sure to know how far you want to push this. The point of a lawyer is not to sue, but to get partial payment.
- You can set your hourly rate more or less randomly. Look to see what other independent contractors are charging (as best you can) and set your rate proportional to your experiance and confidence. Raise your rates annually.
- There are numerous ways to handle proposals. Here's what I do and what I recommend: First, spend time talking with your leads to learn what it is that they need. Write this down in a proposal format that includes the following: 1) A short summary (1 to 2 pages at most) of what the client needs. 2) How you propose to solve their problems. This pretty much says that you'll provide what's listed in section #1. 3) A list of technologies and techniques you're likely to use including languages, platforms, frameworks, database, techniques such as Test Driven Development and Continuous Integration, Source Code Control systems, etc. Provide a short blurb about each item listed and why it's good. And 4) provide a guesstimate of how long you think it will take. More on this in the next bullet point.
- To estimate projects follow this process: 1) break the project down into major steps you'll need to follow to complete the project. This would normally be something like building infrastructure, security, each major section of the application, etc, etc, etc. This is an art and is learned through experiance. Add 33% more for meetings and project management. Add 33% more for trouble shooting and debugging. Add 33% more for post deployment support. Make it very clear to your client that this is *just a guess* based on experiance. As a part of your project management strategy hold at least weekly meetings with your client to show them what you've accomplished, tell them what you're working on, and update them on anything that has taken longer or changed in scope on the project and how that impacts your estimate. Your contact should allow them to cancel at any time. The combination of your initial guess and your weekly updates, combined with the knowledge they can pull the plug at any time gives your client confidence in your project and comfort to pay hourly.
- Invoice bi-weekly and give a discount for payment in the first week. We give 3% discount for early payment in our standard contract. We get good cash flow and our clients save money.
- To find leads for projects I recommend that you network. There are many professional networking organizations out there as well as your local chambers of commerce. Also, attend conferences in your technical expertise. Submit topics to those conferences and try to talk at them. Write for technical journals. Most of these are very easy to get into. In terms of sales, don't try to sell. Instead listen to the problems your leads have and tell
Time and materials is essential when you have clients who can't make up their minds. Usually, start these people off with a bidded job, but take any change to the project as an excuse to concert the job to "T&M".
T&M is the best situation for the vendor to be in. It is the worst situation for the client to be in. A bid job puts pressure on the vendor. The threat of T&M forces the client to lock down their decisions.
This goes for just about any contract job. not just IT or webdev.
Malama
The questions you're asking are very broad and very basic. You're going to fall flat on your face and work long and hard for a net loss if you're not very very careful.
On the one hand you're asking for a good way of doing estimates, but on the other you're asking if you should provide fixed quotes. It should be clear that if you don't have much experience estimating, you shouldn't be shooting for fixed work. You need to get these skills up BEFORE taking on this kind of work (and certainly before you take it on a fixed price basis).
Your best bet at this stage is to apply for some short term contracts, paid by the hour while you develop your estimation skills. Go through an agency to begin with if you can. Do this and provide YOURSELF with a fixed estimate at the start of the job. Write down your assumptions (which should always be part of any fixed quote - unless you want to work for free when the scope creeps). Only when you're able to create accurate estimates should you take on fixed work (making sure anything you sign limits the scope of the estimate). Make sure you're permitted to see the details of all contracts regarding your employment, and keep a copy to refer to if you do decide to take anything on without an agency. (Fixed contracts will be different again to hourly, but you need to start getting an idea of what the language is like in your employment contract if you're going to handle all this yourself).
These posts express my own personal views, not those of my employer
1) build a nice portfolio and get references
2) NEVER work without advance payments
3) never call a potential client more than 3 times before getting a deal signed
4) never ever fail in doing what you're hired for
5) paypal will do for invoicing and billing. get a premier/business account and you'll be fine
6) get a set of must-have documents: an agreement, NDA, proposal wireframe, a set of relevant links for each project category
7) avoid custom coding. there are a lot of open-source apps today you can use code from
8) donate to them!
9) use modeling and frameworks. avoid coding pure language, you will waste precious time
10) don't get jobs just because you need the money!! very important.
11) decide on some hourly rates for various category of tasks and only give discounts for large projects. calculate fixed fee projects' values based on these rates.
12) always add 10-20% on the top of any quote you generate. clients will always surprise you with stuff like "i thought that was assumed"
13) establish a sales strategy and stick to it: "i'll do it for X-10% instead of X if you decide today" or "I can do both your projects for 75% their total value"
took me 9 years to learn this on my own. the very hard way.
www.buzzica.com is the result of all this work.
Hit me up if you need help!
1. Make sure your client understands that changing a website core mid development will make it push past scheduled completion time AND drive the costs up. Sign contract (talk to a lawyer to get correct wording etc).
2. Make sure they understand that changing website mid dev... yeah.
3. Written communication each and every time or you will be SOL when the client decides to change the website mid development... you never win an argument with a client unless it is all documented.
4. Quote them a whole project if you feel they are willing to cough up the cash for it. Take deposit totalling no less than your expenses (eg. travel, lunches, new software, etc)
4.1. If they state during initial talks "Pricey/too much/whatever GAH" quote a base site, (text, images, pretty banner maybe even a basic flash animation or 2), then each addon priced separately.
5. Make sure they understand that a lot of the work is behind the scenes, but show them the pretty to satisfy their visual urges.
6. Be prepared to age quick.
7. Know people are relatively clueless and needs basic stuff explained again and again. Write it down in an easy to understand format and email to them. Keep it short, most clients develop a severe form of ADHD when they need to make an effort to understand you.
I've been freelancing on and off over the last 9 years or so, and I just came out of three years with a successful company where I learned a lot about how to be a consultant, how to create happy clients with clear expectations on both sides and how to not get soaked. Here are some things I've picked up, YMMV.
For time tracking and invoicing, I'm enamored with Freshbooks.com (referral link, non-referral link.). It's cheap, you can accept online payments, freshbooks can snail-mail invoices for you (!), the billing options are pretty flexible and the timesheet app is pretty slick with desktop widgets aplenty. I haven't found an open source project as polished and featureful as freshbooks - please let me know if something like it exists. SQL-Ledger is not a competitor to freshbooks - not by a long shot.
Hope this helps. Good luck!
I disagree. I think you should estimate as best you can for larger projects, but quote a per-hour rate as your binding price. Try to stay as close within your estimate as possible, of course, but I believe the grandparent is correct: if you quote a binding fixed price, people will increase the scope over, and over, and over, and won't pay you until you've done way beyond what the initial contract states.
Quoting a per-hour rate makes things easy and puts forward a message that you will do things as quickly as possible, but that the client will pay for any work that you do. This attracts honest clients who are willing to pay for quality.
It's better to vote for what you want and not get it than to vote for what you don't want and get it.
- E. Debs
The trick is to get them to believe your idea is their idea. Some reading on confidence cons will probably help.
Sometimes you can just get by with, I like the base concept, but what do you think about these improvements.
Most times I've dealt with in house projects its always been as you described. In the end, it's not my dime, but I try to mitigate the damage as much as possible.
"You should always go to other people's funerals; otherwise, they won't come to yours." -- Yogi Berra
Guru.com is the best freelancing site I've seen so far. They seem to genuinely respect both sides of the equation, the clients and the freelancers. Compare that to, say, Elance, which seems to treat us like interchangeable cogs. And the built-in escrow is also very nice.
Brush up on your English. A well-written bid makes you stand out among the rest, especially when the rest come from east Europe, for example. This isn't to say that all businesses there are bad, but some most definitely lack decent writing skills, and if your bid is easier to read, it makes you look more professional, and thus makes the client more likely to choose you.
Bill by the hour on all but the smallest projects until you are actually running a business where it's more than just yourself and you have an idea of how much things will end up costing in the long run. Legitimate companies won't take this as a bad thing if you provide an estimate at the same time.
Build payment times into your contract. If at all possible, get all your pay up front in escrow, but if that's not possible, make sure you state something like Net 30 days as your payment terms in the initial contract. If not, you could get shafted really easily when a client takes three months to pay you.
Encourage repeat business. Get into a discussion with your clients about their business, and suggest areas where you could help them achieve their aims. A versatile web developer can do many things for a business.
Place what you'll do into the contract. I don't think you need a lawyer like some of the sibling posts here as long as you're specific. Scope creep can really, really suck if you let it happen.
Oh, and if you happen to need any help with PHP development, give me a shout. ;^)
It's better to vote for what you want and not get it than to vote for what you don't want and get it.
- E. Debs
If you are seriously interested in freelance web development, there is a great community of like-minded people on A List Apart, quite apart from a vast repository of well-written articles that go way beyond what you've so far asked.
What a load of rubbish - have you ever seen just how slow Ruby sites run with any sort of significant load? Python too. PHP isn't the silver bullet or anything, but saying Ruby/python is "better" is just playing to the fanboy crowd.
Yes, I have used all 3 in commercial projects - have you?
And as for the idiots saying "don't use a table, you can make divs behave exactly like table cells, except not in IE6" - where to start... If you're having to code up 20k of CSS and AT LEAST the same amount of markup (probably a lot more) to emulate something that already works, and works realiably, then you're an idiot. The visitors don't care, your client won't care, Google doesn't care (really! go check it out) and you won't earn any more out of it. Saying "ah, but I can tweak it easier" is more junk - how many sites do you actually "tweak" after it matches the visuals? Virtually none. A redesign usually requires different content and completely different layout.
Don't even get me started on making the site work across mobile and email shots (yeah, you're going to be using tables, or lots of images and nothing else)
Tables have their place in the real world. Stop being elitist about it.
Code, Hardware, stuff like that.
PP derives from a fork of ActiveCollab before it went closed-source, AC being a knock-off so to speak of Basecamp.
:(
The one thing that stopped PP being adopted for my org. was the lack of built-in time tracking. I think AC has that in a much later version but ClockingIt has a 'push-on/push-off' AJAX-y timer which the PM's at my place fell in love with
PP would work well for a freelancer I think, if they need to do invoicing and bill for time by hours I'd use a little desktop timer, theres one or two for KDE in the PIM tools I think.
jaymz
You will find clients who wont agree to a fixed-fee (1/3 up front) contract, and those are the clients that you don't want anyway. Your goal should be to work for clients who know what they want, and understand that changes beyond the initial contract will cost them more in money than it will cost you in time.
You will only lose money, when you attempt to do favors for clients who change the scope of work continuously, without regard for your time or contract. Run from these clients, or suffer greatly as you learn why.
Clients should not pay you for the time it takes for you to discover what they want. You should have the ability to provide DETAILED project plans and scopes of work BEFORE your client knows what it will all cost. If a client ever has to ask you: "So, what do we get for that amount?" You failed.
Clients should also not have to pay for you to learn ANYTHING, a new technology, a new software platform, etc. You are supposed to be the pro. If they are paying you to learn, you suck, and will eventually get caught. Learn on your own time.
Provide a standard Boilerplate contract, with an attached Schedule A, defining the specifics of your project. Give your clients a 7-day out-clause, with an understanding that after that time, the upfront payment is YOURS, regardless of any cancellation.
The bottom line is, to be perceived as a professional, you must present yourself that way. If you cant afford to walk away from business, you are not a pro, but a hack.
You would be amazed at what clients will agree to if they perceive that you are confident, professional, and most importantly, not willing to be shat on for their business.
When you bill by the hour, you and the client are at odds from moment one. They want it fast, and believe that you do not, less you reduce your billings. When you charge a flat rate, you are in sync with the client, because now you BOTH want the work done as fast and as well as possible.
No project gets completed without changes or adjustments. You don't want those adjustments costing you, so learn to plan for them, and bid them right into your fee. Dont be a job-shopper with a client looking over your shoulder, calling your cell phone endlessly requesting updated timetables. Your client should know BEFORE THEY SIGN, exactly when (barring changes) the project will be completed.
With a well developed reputation, you will find yourself able to charge for early completion, with the caveat that you will also except penalties for projects that are late. Planning is everything, or you WILL lose your shirt.
If you bill by the hour, every project you do will have a winner and a loser. If you lose, the client is happy, but you left money on the table. If you win, the client is pissed and you wont get more work.
Dont charge by the hour; be good enough to know what your work is worth, and CHARGE for it. If they wont pay, fuck them. Someone will, because if you have your marketing shit together, you wont have to pound the pavement for work.
FYI, materials can still be digital, such as stock photography, icons, etc. Like intellectual property stuff you need a license to use.
Please excuse me for replying to my own post.
I want to thank everyone for all of your excellent advice. It's obvious there are some very experienced folks here, and it sounds like the way most of you have learned how to freelance is through the School of Hard Knocks. I'm sure I'll be putting some time in there myself, but hopefully not too much ;-)
It sounds like there are a lot of good arguments for and against billing by the hour and fixed-rate quotes, and that may just be something I'll have to try on a case-by-case basis until I find my groove. I can see value in both methods depending on how big or small the job is. I also see a lot of posts about setting up a some form of standard contract and from a CYA perspective that makes total sense to me. All in all I have a lot to consider (this is a good thing), and hopefully someone else who may be in the same boat that I am will benefit from this discussion as well.
This is my first AskSlashdot submission, and after reading through the responses it makes me realize again just how many intelligent and helpful people hang out on this site :-D
Thanks everyone!
God, schmod. I want my monkey man!
Contracts? From reading the article, contracts are really premature. The person asking the question is too vague about too many things. They should have at least gone into some detail about their skills, experience, and target market. "I want to freelance as a web developer" sounds more like an act of desperation than a person with a plan.
Just some of the basics that are missing:
If, after looking at this list, you see you don't have the resources to pull it off, maybe it's because succeeding in business is more than just "doing a job." Perhaps it's because now is just not the right time for you. Perha
Web Developer: Knows how to code in several server-side programming languages, including at least one (and more likely all) of the "p" scripting languages (php, python, perl), how to interact with one or more database backends (mysql, postgresql, oracle, etc), client-side programming languages (javascript, including XHR, JSON, etc); Knows the quirks wrt css in most browsers, knows what a DTD is and uses "strict". Must be able to maintain a test/development server, with version control, as well as maintaining the production web site. Codes to standards-compliant browsers first, then ports to IE, using the magic incantation "Fucking Internet Exploder" as many times as necessary - or more. Probably also knows Java, may also know C, C++, C#, assembler; can ssh to the dev box as necessary, scp files, uses svn or git, has strong opinions about sml, the vi vs emacs wars, knows what a LART is, and isn't afraid to use it.
Web Monkey. "I know Photoshop and/or Dreamweaver and/or Frontpage, and I can drink just as much coffee as a real developer. HTML is too coding! I copied this javascript to do mouse rollovers - isn't it cool? Wait until you see what your site looks like when I do it ALL in Flash. Firefox? No, I use Windows." Sometimes targeted for LARTing by bored Web Developers.
This has been a public service announcement. Please resume your usual trolling^Wdiscussion
The correct answer is you do whatever is within the budget of your client. You and I both know it takes longer to do a proper CSS based two column layout. If your client cannot afford that, do the tables and tell the damn W3C to suck it. Purity trolls have no business in contract work. This is business and you work for your client, not the W3C. You do what is in the best intest of your client.
And yes, CSS is easier to maintain in the long run, so it might be worth your while to convince your client that it is worth *their* while to pay you to do it right so they can save later. It is an up-front investment that will pay off downline. But if you know they are never gonna expand and you are doing a quick one-shot design an they are a budget... tables all the way!
In other words, it depends. Just remember, this is business, not advocacy. If you are in it for the advocacy and not for money, you'll never survive. Sorry.
I second this. As someone that had trouble getting paid when I started out, I have to acknowledge it was my own fault for doing work for either friends, or friends of friends that were just starting out.
My best friend Ryan had this problem when he started his own Web design business. He would give good rates to friends, but the problem was that his rates were so low (and he didn't charge a penalty for change orders) that they didn't mind throwing endless changes at him -- without adjusting the deadline, mind you. He ended up working round the clock for these so-called friends, literally giving up sleep so he could deliver what he promised. The shame was that most of the work was crap -- your basic logos and Web pages, nothing he'd really want to add to his portfolio.
But the real downside is that he ended up with severe, crippling Repeat Stress Injury in both arms. That's right -- he worked so long and so hard on the computer that he literally crippled himself. For a year or more he was in so much pain that he'd have to spend entire days bedridden, popping horse tranquilizers. He tried every treatment possible -- every kind of pill, massage, acupuncture, etc. -- everything short of surgery. Just to give you an idea, if he took a girl out on a date he wouldn't be able to open the car door for her because it would mean he'd lose another day due to pain. He'd have to ask her to open his door. The bottom line is that the only way he could wean himself back to health was to walk away from the computer -- probably forever. He still does some design work now but he relies heavily on assistants and he knows better than to push it.
I used to joke that he got himself into this position because he didn't charge enough. But I was only half kidding. And think about this, too -- because Ryan was self-employed at the time, he wasn't eligible for workman's compensation or state disability. You bet he moved back in with his mom. Not everybody will be so lucky.
Breakfast served all day!
I have to disagree with much of your post, as you're conflating a number of (yes, related) issues - such as how to live frugally versus how to be a freelance web developer.
More importantly, right off the bat on your first remark, you've told the person that, in all likelihood, they've earned an 'F' because they don't know their market, and that is that. I mean, that line (and most in this post) read as though they were taken straight out of a 'how to' book on business - and not the freelance Web work they're looking at. If the poster wanted that, there are plenty of places to go.
To my mind, the most important adage is "Don't train, do." You can spend a lot of time on the various points suggested - market research, for instance, or cold calling businesses, or making business cards. But there is a core to the business - doing web development. Figure out what the bare minimum is for that, and get going. Every moment wasted on anything else is moments you're not getting paid. Why sit around trying to think of ten good reasons someone shouldn't hire you? And what to say? The best reasons someone won't hire you will come up when they don't, and the best rejoinders will come with practice.
The point is that no one, out of the gate, has really any of this. You can go from zero to a successful business, but you're asking them to plan on plenty - when in all likelihood they should plan on nothing, keep an eye out for why they fail the first ten times, and learn to adapt. That is the learning curve that is needed - not how many business cards they need, or how to see fifty clients a week (which, by the way, good luck - that's ten clients a day, which is highly unlikely even if you can find them). If the person in question wants to be a salesman, then by all means, go that route. If they're going to be a developer, then they need to develop.
To my mind, there are three important pieces that all else are subordinate to:
1) Be capable. Know what you're trying to sell. You may fail to sell it, but that will get you farther than if you sell something you fail to be able to deliver.
2) Have something to show. Suits and business cards are all well and good, but if you cannot demonstrate the product they want, they'll see right through you.
3) Document everything, and review it. People get shafted by not having documentation that proves they did the work. They also lose track of where a project started to fail and why. By documenting (and showing the clients) everything, you not only keep them honest, protect yourself for the future, but you also are able to trace where it is you went wrong, and adapt.
But all of that aside, if you want to do it, you're ready. Ignore anyone who says otherwise. You may fail - but you'll get over that. Not starting is a far worse fate.
[Ego]out
For the proposal, develop essential proposal terms to submit to qualified parties at the conclusion of initial meeting or shortly thereafter. Terms at a minimum should include:
Why are these terms in a proposal, because this is where you: appear more professional and as a result can command higher amounts; provide an avenue to upsell additional services (maintenance, copy {content} development services, optimization, web site submission, online ad buying, etc.); reduce confusion by educating the client about the amount of work to be performed; and set realistic timeframes that all parties can agree with.
The final contract should detail the process even further and in greater detail but these terms must be specific to each individual developer's requirements.
Don't rely on what you find on the internet for your contracts. You'll only get what you paid for. The cost of a competent attorney is negligible compared to a potential reduction in liability and the maximization of your earning potential. I've developed different versions of both the proposals and final contracts (both from developer to client and from developer to subcontractors) in the past.
Anyone interested in learning more please feel free to drop me an e-mail or contact me at my office if you like to inquire about engaging my legal services.
And now a disclaimer: The content of this comment is only an opinion and not to be construed as legal advice. You should not act nor forgo to act on the basis of the material contained herein without seeking advice from a lawyer licensed in your jurisdiction.