As I play around more and more with new technologies like Silverlight, WPF and WCF, I create a lot of little sample applications. Invariably, I start off with little hello-world and click-the-button applications. But Hello World gets old quickly and I’m tired of all the usual suspects when it comes to Microsoft’s lineup of sample applications. (Do you remember these old favorites: Northwind, Fitch & Mather, Duwamish and Adventureworks)? Given how bored I am with these samples, I’d rather just create something that’s closer to a real-world application.
Besides, there’s really no better way to learn a new technology than to try to use it to build something real. Tiny sample apps can only go so far. At some point, you have to roll your sleeves up and actually build something if you want to become really familiar with the technology.
I’m not looking to come up with some big plan for a brilliant new web site here. I just want to pick a problem/domain area that’s sufficiently interesting to me that I’ll be motivated to build something cool.
It also wouldn’t hurt if what I build will be at least marginally useful.
So I have the following requirements:
- Domain area should be something I’m very interested in
- Application should be something that I can really use
- Data model should be sufficiently rich to be interesting
There’s really no contest. I’m a lifelong bibliophile and I’ve taken many stabs at trying to catalog and organize my book collection over the years. I’m guessing that I’ve started scratching out a database schema for a Books-I-Own database at least a dozen times in the past 20 years. Just give me a boring corporate meeting and a sheet of paper with a little whitespace on it and I’ll invariably start sketching out an entity relationship diagram.
So that’s my choice for a sample real-world application: a book tracking application/site.
Let’s start off by at least defining what this thing is going to do. For the moment, let’s assume that this is going to be some sort of database-backed web site.
Here’s my mission statement:
The purpose of the books web site is to keep track of the books that I own, books that I’ve read and the books that I want to read.
Short but sweet and even a little bit ambitious in its scope.
How About a Name
I’ll get tired pretty quickly of calling this thing “the books database” or “the books web site”. So we need an honest to God site name with an associated domain name.
This is the point in a new project, even a sample project, when you can easily lose many hours on the godaddy.com site, trying to find a domain name that doesn’t suck and has at least a couple of vowels.
I won’t waste my time trying to find the holy grail of domain names for my little book database project. Instead, I’ll just pick something sort of short that I think I can remember. After 10-15 mins of godaddy’ing, here’s what I came up with:
yabts.com – Yet Another Book Tracking Site
That’s perfect: an honest-to-God 5-letter domain name that I can actually remember.
The next step is to define some basic “mission objectives”. These are the very high-level statements of what my little application is going to do. I’ll try to stay very firmly in the realm of What, rather than How. I’m also allowing myself to be a little bit ambitious or even grandiose–this is my “dream list” for the book tracking site that I’ve always wanted.
YABTS Mission Objectives:
- Keep track of all the books that I own
- Keep track of books that I want to buy
- Keep track of all books that I’ve ever read
- Keep track of recommended reading lists
- Keep track of specific books that I’d like to read
- For the books that I own, track whether I’ve read them or not
- Record my personal thoughts (review) for the books that I’ve read
- Store specific notes on some of the books that I’ve read
- Track book lists and collections for other people, too
- Publish my book collection information to the web
- Keep track of books that people have borrowed from me
- Share reviews of books that I’ve read with other people
- Find other readers who share similar book interests
- Track my progress as I work through “great book” lists
- Let people browse the “great book” lists all in one place
- Let people create their own recommended reading book lists
- Organize my reading lists by subject
- Organize my book collection by subject
Okay, I had to pull the plug on the idea-generating fairy after about 5 minutes. What started out as a simple list of books that I own just kept growing and growing as I thought of more and more “must have” features. But this list will do fine for now as a starting point.
Where Are We?
That should do for the time being. I now have a vision for a sample application that I can actually get sort of excited about. I’ve made a list of all the stuff that my application should do and I’ve payed my money to godaddy.com to get my domain name.
Next time, I’ll continue by diving into some actual data modeling.