CS 257: Software Design

Web Application, Phase 1

For this project, you will work in groups of either 2 or 3 students. This project will last through midterm, so make sure you choose a partnership that will work for you. If you want help finding a partner, send me an email and I'll try to connect people.

When you search imdb.com for a movie, the interaction goes roughly like this:

This style of interaction (person → browser → web server → database → web server → browser → person) is at the heart of many of the most useful websites (not to mention the not-so-useful sites as well).

During the next few weeks, you are going to develop a database-driven web application.

Rough ordering of steps

Your work is going to proceed in stages, approximately like so:

  1. Choose and obtain a dataset to work with.
  2. Create a prioritized user-oriented feature list.
  3. Create mock-ups of your web page structure and its rough appearance.
  4. Create a development plan (we'll do this in class).
  5. Design and set up a database to hold the data.
  6. Design a REST-ish interface for the database (I'm sorry, but I can't bring myself to use the term "RESTful", which I find oddly annoying)
  7. Implement the interface
  8. Implement an end-to-end system that follows the pattern described in the imdb example above, but without useful queries and results. This will be sort of a database-driven client/server "hello world" application. (See Section 10 "Tracer Bullets" in The Pragmatic Programmer.)
  9. Implement and test one feature at a time, according to your development plan. In between stages of this part, you might adjust your development plan to adapt to new understanding of the project. (This phase, one small testable bite at a time, is called iterating (possibly NSFW, depending on where you W).

This project will get you beginning experience with quite a few important software technologies, including HTML, HTTP, flask, PostgreSQL, psycopg2 (the most commonly used Python PostgreSQL library), AJAX, JSON, and a little bit of Javascript. In the process of developing this project, we will also discuss use cases, user stories, more test-driven development with Python's unittest module, the design of functional and client/server interfaces, automation with Makefiles, documentation, a variety of code construction topics, and undoubtedly other stuff that will come up as we proceed.

Phase 1: Conception and rough requirements

Your first assignment is to do steps 1, 2, and 3 from the list above, like so:

Handing it in

Make sure your contributors.txt and phase1.pdf files are committed and pushed to one partner's github repository, and tag the repo "webapp_phase1". Note that if you want to update a submission, you can tag with "webapp_phase1.1", "webapp_phase1.2", etc.

Have fun!