Building a Website: Part 1: The Functional Specification

In our previous adventure, I talked about building an ASP.NET website for a local school.  This site would have a small Content Management System attached to it.  Nothing fancy, just something small.  But you see, I forgot a cardinal rule of programming: Get the functional specification. Oops.  Luckily, the site idea has been swimming around in my head for ages, so it should be rather easy to crank one out, right?  Let's hope so.  This specification will follow the example set by Joel Spolsky of Joel On Software.  Without further ado (or maybe with it, given my rather long intro), the functional specification.


Overview is a website that allows teachers from St. Anns to update the parents and community on what is going on in their school.

Warning: This specification may cause paralysis if read for too long. It's not complete. It will change. Hopefully not too much. The screens shown here are for illustrative effect, they are not meant to be taken as the final product.  The look and feel of the site will be refined and changed based on user feedback.

This specification only deals with what a user would see when they visited


In designing products, it helps to imagine a few real life stories
of how actual (stereotypical) people would use them. We'll look at two

Scenario 1: Samantha (The Teacher).
is a Teacher at St. Anns.  In between dealing with kids, parents, meetings, and planning, she has very little time to worry about weather or not people on that distant thing called the internet are kept up to date with what is happening in her classroom.  Up until now, she's always just put the newsletter in the Kid's bookbag, and sent them home.  If the parents needed to read something, the hope was that the child wouldn't ingest it or use it for spitballs.  For anything important, the United States Postal Service was used. Given that we're 8 years into the new millenium, and a full 12 years after the World Wide Web became huge, Samantha (being the smart teacher that she is) knows that it'd be far easier to copy and paste her news letter onto a website than it would be to print it out, make copies, and put them in her kids' bookbags.  Not to mention it'd be much more 'green'.

So Samantha logs on to, and decides to upload her news letter.  In friendly way, the site asks her what she wants to do, and if she wants to upload the newsletter, she simply copies and pastes it from Word, hits 'save', and her work for the day is done.  She can do this for every other section on her teacher page as well.

Scenario 2: Tammy, the Mother.

Tammy is the mother of two wonderful children that seemingly lose their newsletters walking from the school to their car.  It happens.  When she needs to find out information, she simply navigates to the site, and can easily select her child's classroom.  Once there, she sees that the weekly newsletter has been posted to the site, along with a note about upcoming events that's easily viewable.  Since she'd forgotten about the Picture day, she goes ahead and calls the school and asks if it's too much trouble to be sent another form.  Just like that, she is kept up to date on her children's school events.


Where to Go From Here

At this point, we've got a jist of what we want the site to do, so we'll go ahead and base a data schema off of this and start building the site.  We're pretty sure we're not going to get it right the first time, so we're not really worried about that. 

This is the site in a nutshell.  In the next article, we'll work on the data schema.

To MVC or not to MVC?

I have been following ASP.NET MVC ever since it was brought up as the meta-pattern behind Stackoverflow.  As I referred to in my last post, I'm in the process of building a website for a local Catholic school.  Part of the the act of building the site is determining whether or not I want to go the extra mile and really make it something special, or if I just want to 'make it work'.  The traditional Web Forms + NHibernate + SQL Server will make it quite easy to build; but then I wouldn't be learning anything new.  MVC does seem like overkill for the task at hand, however.  So the question at hand, Speed? Or doing it the right way?

Building an ASP.NET Website

Over the past few months, I've been working on upgrading St. Ann's Catholic School website from the circa 1996 look to something more modern.

So far, I've done the following:

  • Organized the site in a logical fashion
  • Implemented a menu system using Tanfa's CSS driven Menus
  • Used Purplehaze.css as a baseline for the website's cascading stylesheet
  • Created and helped edit static content for the site (I instructed a non-technical person on how to upload the static content and change the content so far.)

 Since that's done, I can focus on the dynamic nature of the site. There are a number of stated features to be implemented, including:

  • Ability to add weekly newsletters
  • Ability to add homework
  • Ability to add events (a la Google Calendar)
  • Ability to see recently added information

 To make this happen, I need to take the following steps:

  1. Create Database Schema
  2. Use NHibernate and My Generation to create POCO objects and theData Access Layer and Mapping files
  3. Create Business logic and create individual modules listed above
  4. Deploy and Maintain

I intend to use this blog to document this, and obviously the code will be released (open source, license unknown) to allow other schools to create dynamically driven sites without having to rely on sites like TeacherWeb. I don't have anything against TeacherWeb, I just can't believe that schools would pay for what amounts to a WYSIWYG editor (not unlike Frontpage).

You may wonder why I'm using CSS Menus and Stylesheets from other authors instead of rolling my own.  I could do both (though the latter would be far easier than the former); the reason is easy, never design what you can steal.