I usually plan as best as possible, then I start creating a database of planning / design specifications that I wrote for myself.
Then I use something like Linq-To-SQL to generate some DAL base classes - wrap them in a repository class that handles most CRUD situations.
Depending on the complexity of the application, I then write a graphical interface that directly uses the repository (fast / dirty), or I write a domain logic class (and possibly data transfer objects or dumb POCOs) that terminates the repository.
Obviously, better planning skips things, so make sure you take over the account, that you will need to go back and add fields, change types, add relationships, etc.
Nate source share