I just finished the Programming Assignment and wanted to provide some input for anyone taking it in the future. Without giving away the assignment here are my thoughts:

Allow plenty of time - The instructions suggest you allocate 20+ hours to complete the assignment. I think this is somewhat low as it took me roughly 30 hours to develop, test and deploy. Start early and knock it out before the the exam deadline. I got wrapped up on a project and, of course, finished it in the night before. I tend to work better under pressure.

Read the requirements thoroughly and often - The requirements are narrative in form; something you would expect to receive from a customer. I went through the requirements and created my own design doc which outlined objects, sharing model, triggers, controllers, Visualforce pages, workflow, security, etc. This is the document that I worked from.

Build in Production and code in Sandbox - I did virtually everything in Production which limited the amount of time needed to deploy. I built everything that I could in Production and then once I felt the solution was solid, I refreshed a Sandbox and cranked out the Triggers, Controllers, utility classes and Visualforce pages. Essentially declarative work was done in Production while code development was, of course, done in the Sandbox.

Test, deploy and retest - The test cases took some time but I wanted really strong test coverage. I think I only had one class with less than 100% coverage. After deploying all of my code to Production, I loaded some test data and went through all of the use cases to make sure it functioned as expected.

The essay portion at the testing center was fairly straight forward and took about 30 minutes. It was 6 questions as to how, why and for what reasons did I design the application the way I did.