Read from the beginning.
To build a website as an exercise, it’s important not to get bogged down in defining the initial concept. In the world of popular sites, a winning idea makes all the difference. However, I’m not concerned with coming up with a great idea; I’m interested in the execution of the idea.
As such, I’ve come up with an idea that is simple enough to understand and start working on right away, yet broad enough to provide plenty of opportunity to demonstrate some different techniques. And the idea is…. a website about BEER.
Bring us Pints of Beer
Specifically, the site will be a review website, where beer critics (i.e. me) will taste as many different beers as possible and write reviews on them. Users will be able to comment on the reviews, or write their own. There will be plenty of opportunity for discussion and interaction on the website, bringing it in line with modern standards. There will be social media integration, typical content management and, well, lots of things. The features will definitely need to be hammered out later using a more formal process.
It is my intention that the resulting schema for the website will be generic. In this regard, the database and the data access layer will be designed so that it is subject-agnostic, that is, it could be used to build a website that reviews anything, not just beer. While for many endeavours this may seem unnecessary, I wanted to add an extra challenge to the database design phase and to showcase the flexibility of reusable code.
Aims and Objectives
It’s important to identify the major goals of a project. State what you want to achieve, then base every design decision, from database to interface, on the fulfilment of one or more of these objectives.
For example, suppose that you’re designing a commercial airliner. The primary aims of the product could be safety, efficiency and capacity, for instance. During the design process, someone incorporates mounted chainsaws on the wings and a laser rock show in lavatory. Awesome? Maybe. Does it increase safety, efficiency or capacity? Not in the slightest.
The aims and objectives for this project are:
- Learn New Things
- Improve Existing Knowledge
- Showcase Design and Implementation Techniques
- Have Fun
I have… things to do
There is a growing list of things to get done in the next few posts. This is by no means a complete list, and is intended cover only the initial stages. In rough order:
- Concept Map
This is a turgid swamp of ideas excreted from your brain onto a page. It’s kind of like brainstorming, but with a less awesome name.
I will be doing some minimal user investigation, mainly by asking myself questions but possibly interviewing others. In a serious project, you’d normally take this stage quite seriously; maybe invest some money in paid research.
- User Stories
From the investigation comes the user stories. At this stage, this will not be descriptive of the user interface. Rather, the user stories here will be a description of what kind of functions a user should be able to perform and what entities within the discourse they should be interacting with. An example would be: As a beer critic, when I publish a review I want a link posted on Twitter so my followers know about it. Simple stuff, really.
- Universe of Discourse
This is a list of all the entities that exist within the context of the website. This entry will be an informal and unstructured description of all the things that the system needs to be aware of. The structure will come as part of the…
- Entity Relationship Diagram
A structured diagram which describes each entity, its attributes and unique identifiers, and the relationships between said entities and cardinality thereof.
A language- and DBMS-agnostic description of the schema after normalisation.
- Technology choices
Including but not limited to
- Language Choice (C++, C#, Python?)
- Data Storage (Couchbase, SQL Server, PostgreSQL, Lucene?)
- Web Stack (Pylons, Django, Wt, MVC?)