Laying out the flow of an application - where to start?

Hi all, first post! I have a question regarding where to start with a particular app I'm building. Hoping someone can set me on the right path. The scenario is pretty straight forward. This is the hierarchy of info:

States Towns

Each state has many Towns

Each town has the following pages

profile   - geography   - population   - demographics leaders budget history recycling maps

Part of my issue, due to lack of experience, is really where to start. My main confusion is how to associate the pages to correlate with each state and town and how I would build the main navigation. The routing and url structure I would like is www.example.com/state/town/profile/geography. I have gone through many of the normal tutorials, but I can seem to get a breakthrough mentally on this.

Very first place I always start is "What problem does this solve for whom?" and then start to ask "What tasks do they need to do? What problems do they have in performing those tasks? How can I make something that will help them do what they need to do?" Write user-centered stories of use cases. These become your early acceptance tests. When you have all that, the tasks and stories should lead to a navigation structure that will make sense to the user.

If you think you have all this information already, present it here and give us something to go on. Right now, you just have a collection of models, and we don't have a clue why.

@tamouse_m, thank for your insight. Those are great questions and I'll be sure to note them. So here are the best answers I have. In this particular situation, users are visiting static pages of information. There are no real dynamic tasks involved, just browsing pages and subpages.

In this case, a user will visit www.example.com. This root page lists all states included in the database. The user will click on a state, and that page will list all the towns, within that state, that are in the database. Next the user clicks a specific town link. On this particular page, there is a main navigation with each of the pages I originally listed in a navbar. Profiles has three subpages. In each of these pages, there is static HTML, that differs for each town, for viewing purposes only. So it's fair to assume that these pages and subpages exist for each town. Nothing dynamic. On top of this, I would like a simple admin are where I can add new states, pages, and information to the pages/subpages as well.

This is easily handled by something like WordPress, because it's a simple CMS tool. However, I want to use this particular example to learn more about RoR. Hopefully I've clearly stated the tasks involved in the ux.

That all looks ok, so what is the question that you are asking?

I presume you have already worked right through a good tutorial on rails, such as railstutorial.org, which is free to use online. If not then do so and you will understand the basics of Rails.

Colin

I guess I just need to wrap my head around associations. That's what I've been reading more about and it seems like it's taking me down the right path. What I'm still confused about, is how to separate the admin side from the user side. I know there are gems for this, but I want to understand the logic behind the way it works.

I think when you say "static" html for the pages, you really want dynamically generated content. You need a simple template which presents the requested information with links up and down the chain.

The first thing you need to do, particularly if you have data to start off with, is sort out the database structure.

Once you've got your database links mapped, you know the page order as well: You start with an index which may or may not contain a search function.

The index contains, for example, rows of dynamically generated data and links. In this case, States. Each state links to another template populated with dynamically generated content: towns.

Once you plan the Model, the View should be obvious. After that you just need to start with the default view (index) in the Controller, and then you can let the database links guide your way through the different sub-pages.

What I'd suggest in the latter case is a good long look at active_admin; not necessarily to use, as you say, but to understand how one implements such a thing. After you've perused it, you might decide it's okay to use, or roll your own (as you say this is primarily a learning project).

I'm still unclear *why* a user would be browsing these pages. What information are they looking for? What question does this information answer for them? What sorts of things will they be able to do once they have this info?

The steps you list are necessary to outline, for sure, but why do you want/need to put your user through them to get at the information they are seeking? That is the important question to answer early, I think. If you think about it, drilling down can be a very slow exercise for users, especially if they have a slow network connection and have to wait for page loads, etc., even if your app is serving up largely static data. Think about how your user is going to see this and get right down the bone on what they need to see, and not put operations in their way if not needed. I think, perhaps, you've spent quite a bit of time thinking about how to organize the data, which is a good thing, really, but not necessarily enough time yet thinking about how the user would be best served in accessing it, which can be completely different than how it's persisted in the backend.