Start at the center
One thing that I have picked up while reading through the /Agile Web Development with Rails/ book is the style of development that it uses. For lack of a better term, i call this starting at the center.
The example in the book is an application called depot which is an online shopping cart. The point at which the book starts development is by finding the most central aspect of a shopping cart and adding just that little bit of functionality; in this case, a product. Without products, the web app can’t do much of anything. But you can deal with products without having users or shopping carts or sessions or anything else setup.
I have always heard that you need to start with the part of the system that poses the most “risk”. The problem is that I have never really heard a very good definition for the word risk. From a certain point of view, not having the ability to deal with products in an online shopping cart poses a certain amount of risk.
The usual definition of risk is the part of the system that poses the greatest architectural problem or the part of the system that you don’t know how to do or the parts of the system that will take the longest to do. I have always wondered how you know all this about a system before you even start to code?
Personally, I like the “start at the center” method of software development because it gives you a very clear place to start adding functionality and it makes doing test-driven development easy as well as you know what you are testing. It also allows you to start coding without having the entire system figured out.