Creating an Application from Scratch, Part 1by Jesse Liberty
A while back, I began the new column Liberty On Beta and promised that each article will demonstrate a real-world problem that I solved for a real client. That was exactly what I did in my last article, including providing access to the source code on my website (click on Books, then on Articles).
Now, however, my incredibly brave (or nutty) editor has agreed to allow me an even more radical idea: let's document the creation of a real-world application from scratch. In real time--that is, as I develop it.
In this first column about my new application, I'll lay out what I have in mind and create a first specification for the project. In subsequent monthly columns, I'll show you how much I've built so far, what dead ends and problems I've run into, and how I've solved them. Each column will be a blow-by-blow diary of the creation of a real, meaningful, and somewhat tricky ASP.NET 2.0 application, warts and all. (If I show enough warts, I may never get work again!)
Project Concord  will be a web-based application that will be built with ASP.NET 2.0 forms-based security and personalization controls. Its purpose will be to allow you to find books on Amazon that were highly rated by people who liked other books that you liked. Rather than basing recommendations on what you've already bought, this will allow you to find books that were enjoyed by people who like the same books as you do. Further, rather than settling for reviews of a given book by just anyone, you can find just those reviews written by people who share your taste.
Project Concord will consist of the following modules:
- The ASP.NET project
- The Windows application
- The databases
- The personalization database
- The reviews database
The ASP.NET project provides the following features (at a minimum):
- User can create a new account. *
- User can log in (password-protected).
- User can enter queries. *
- Query results are displayed.
- User can optimize the system to improve satisfaction. *
- The system can improve itself as it learns more. *
Items with an asterisk (*) will not be in the first release. As a rule, I believe in shipping a stripped-down first release, and then adding features in response to feedback, rather than delaying release while you add every feature you think the user may want. It often turns out that features you thought the user would love are never actually used at all, while things you never thought of are essential. Hence, version 1 will be the core project stripped down to its essence.
For example, in the core project there will be only pre-created accounts (that is, just me, and maybe you, if you're nice to me). In version 2, we'll add a feature to let anyone create an account and use the system (why not?).
In the core project there will be, initially, only one query: "Show me all the books that I've not reviewed that were 'liked' by people who are a 'good match' for me." (The definitions of "liked" and "good match" are discussed below).
For version 1, the ASP.NET application will allow the user to sign in, and then will display recommendations. These will be books that were highly rated by people who match the user.