I start with the purpose and the data. What do we collect, what do we output and how do we manipulate and store that in between. Is there user input, customer input or just myself maintaining a static site. That is the basics.
From there I create a set of test data. Some Ipsum Lorum text and imaginary users and design my database.
Once I know what data I have to display, I can begin to design the display. Some people like to photoshop this part. I like to do it natively in HTML with just minimal graphics cause that's just my preference. I will also draw up from HTML forms for the input side, user login and such. They'll be no backend at this stage. I have my database and the front end designs.
Now I take screen shots of the design and present them to the client. They usually have a few small modification to make at this stage. This is to be expected. Usually it's noting difficult to do since your just tweaking html pages. I often make the changes on the fly at the client meeting if they are easy changes.
When the client is happy with the designs, I'll start of the back end. Connecting the forms and display pages to the database. I generally code in php plus javascript so this work can usually be done quite quickly. I will built the site in a progressive way. I start with the main display pages. What the end user sees. And build that first before I do the admin and other pages. If it's a shopping site then I'll build the shopping cart pages first then the product pages. When a set of pages are finished I show screenshot to the client. I only show screenshot cause I don't want them clicking on some part that isn't yet finished and getting an error page.
The last part I do is the admin pages for the customer to control the site. If I'm controlling the site, I might skimp on this and just make to with phpmyadmin to make changes. When everything's finished I let the customer play on the local version of the site. If they are satisfied, I'll upload to the server.