Introduction: Creating Bookhuddle.com, a Website for Discovering, Organizing, and Sharing Book Information

This post describes the steps involved in creating and launching Bookhuddle.com, a website aimed at helping readers discover, organize, and share book information.

The steps described here would apply to the development of other websites.

Step 1: Come Up With the Idea

We, the founders of Bookhuddle, enjoy reading for fun and learning and thought that there should be a better way to keep track of what they had read, want to read, or their reference books. We wanted a better way to find new books to read, find out what our friends were reading or had read. We wanted a place to discuss books with friends or other readers.

So we decided to build a website that would allow people to easily discover, organize, and share book information. Bookhuddle is this site.

Photo by Felipe Torres.

Step 2: Buy a Domain Name for the Site

This doesn't have to be the second step, but it's important to do it early on.
Good domain names are hard to find, but you just have to be creative.

Our site's domain is Bookhuddle.com.

There are are countless sites where you can buy domain names from. A domain name should only cost you a few dollars.

The following Google search finds domain name services: http://www.google.com/search?hl=en&q=domain+names&btnG=Search

Step 3: Form a Team

Building something as a team is much easier than trying to do it by yourself.
Find people that are passionate about the idea, have the appropriate and complimentary skills for the tasks involved, can work effectively in a team, are good communicators.

The skills needed among the team members building a website include: creativity, good analytical skills, writing, programming, design, web application development, database design and maintenance, requirements definition, testing, graphic design, server configuration and maintenance, and more.

Step 4: Identify the Core Features of the Application

Identify the core features of the application. These are the essential features that the application requires to be useful and meet the objectives for the service. Everything else will be dependent on these features being in place.

For Bookhuddle, the core features included:
- extensive database of books
- ability to search for books
- user profiles
- user book lists for users to organize their personal library, books they've read, want to read, are reading, etc.
- user search
- groups or book clubs for users to organize with friends and discuss books

Following an iterative process is useful to help prioritize the work, define frequent achievable goals or milestones for the team, get features released frequently to users, and get feedback from users to fine tune the site.

Step 5: Define Feature Requirements

For the list of features identified as core, define the requirements that describe the features in detail, explain how things will be organized, used, how the system will react, etc.

Employ use cases, diagrams, flow, etc to document the feature and facilitate communication among team members.

There are many ways to do this. Figure out what works best for your team and the environment you work in and do what is necessary but no more so you don't waste time.

If drawings on napkins are all the requirements that your team needs, then great. Some teams require more formal documentation.

Step 6: Create Prototypes

For Bookhuddle, we created HTML prototypes for the site.
Prototypes are a nice and cheap way to test out your ideas in a more concrete way. They helped us to communicate our ideas, do demos to get feedback, and we used the html, css, images, and javascript from the prototypes as input into the development stage.

Step 7: Develop the Site

In this step, we build the features targeted for the current iteration of the site.
For a dynamic website, you'll generally have to develop your program using a programming language and related technologies, you'll run your program in some kind of application server, and you'll likely need a database.

There are many options of technologies to employ and some of the popular ones include:
- Programming languages and related technology: Ruby on Rails, Java, .Net, PHP, ColdFusion, Python, etc
- Database: MySQL, PostgreSQL, Oracle, Sql Server, and others. Choose an open-source one if you can to help reduce your costs.

We recommend using a technology stack that you are familiar with and that it's proven to be a good stack for the kind of development you are doing. Being familiar with the stack will help reduce your learning curve and help you focus instead on the other aspects of developing your site.

We chose the Java technology stack because of our expertise with it and its related technologies. A nice thing about Java is the large community of developers that exists; there is a plethora of tools, frameworks, servers, resources for learning, and qualified people.

Step 8: Test Your Site

Test the functionality you've built. This phase of the process is intended to identify and fix problems in the application before the application is made available to users.

Your testing effort should include unit tests, integration tests, functional tests, etc.
Testing can be done by your developers, dedicated testers, or anyone that is available to play with your application.

Using a Bug Tracking system is an effective way to track the problems found in your application and help you manage the work. Systems such as Bugzilla, Trac, and JIRA and good tracking systems.

Step 9: Hosting

To have a public website, the site has to be hosted somewhere.
If you have one or more servers at home or business that you can use, then that's one way to go. Another option is to get a hosting service to host your site for you. Depending on the needs for your site (amount of traffic, infrastructure required, etc), you could choose a virtual server, a dedicated server, or a cluster of dedicated servers. Virtual hosting being the cheapest, and a cluster of dedicated servers being the most expensive.

There are many hosting providers out there and the prices vary quite a lot. Find something that meets your needs. Amazon has a set of services that can be used for this purpose and are priced competitively: EC2 for computing power (i.e. servers), S3 for storage, and others.

Step 10: Launch

With the website developed, tested, and deployed in the hosting service, we welcome readers.

The Instructables Book Contest

Participated in the
The Instructables Book Contest