CSE210 - Principles of Software Engineering: Project

Bill Griswold

All project milestones are due on Friday of the milestone week, preferably in print form.

If you are interested in doing a software engineering research project instead of a development project, please let me know. I will help you design your project and give you an analogous set of milestones suitable for a research project.

Software engineering not only embodies a set of key concepts and principles, it also entails a set of skills. Without proficiency in at least some of these skills, you cannot call yourself a software engineer. This course includes a project in order to help you get a taste of these skills as well as experience the key lessons of software engineering first-hand.

Few interesting programs can be built by a single person, so the project for this course is team-oriented. In addition to all the other skills and lessons that are to be conveyed, you will also be learning how to cooperate and communicate effectively.

In this project, you and your teammates will be defining a software product and seeing it through every stage of development. Because of the short span of this class, you are not expected to deliver a marketable product, but the result should be at least a compelling prototype that could serve as the basis for defining a real product or attracting venture capital. :)

You and your teammates have the flexibility--within certain parameters--to choose the product to develop and the features it provides. To provide some ``spiritual'' guidance, your product should attract the attention of the ``Small World Venture Capital'', which specializes in promoting unusual products that promote a better world through strong communities. They have special interests in software that are targeted to a large group's needs. I will personally function as the Technical Liason of SWVC, and each team will be coming to me to seek guidance about what they can do to have a better chance of attracting additional funding. Each team has considerable autonomy, however, in defining its product and managing its team. For example, you are responsible for choosing a product that is within your means to develop within the alloted time. From time to time I may sense opportunities in the marketplace and suggest small changes to improve our market position. I will consider the possibility of teams developing competing products.

As an alternative, you may pursue a software engineering research project. The project should involve building something, but being research it should also have a significant evaluation component - the application of an empirical device such as measurement, interviews, etc.

Here are some places to get inspiration (I can provide further details):

It is not uncommon for projects to be built on existing infrastructures or libraries, or to integrate existing components. Web services are all the rage.

Team and Project Organization

It is highly recommended that each team develop some sort of organizational structure (division of responsibilities, mechanism for making decisions, means for communication) in order to achieve both coherence and effective parallel effort. You may want to go Agile (e.g., XP or Scrum). You may want a team leader; you may want to have a managerial lead and a design lead (cf. the Surgical Team concept from Brooks's Mythical Man Month). You may want to have functional specialization (e.g., design versus testing); you may want to assign one or two people per component; you may want to do Extreme Programming. You may want to have regular meetings; you may want to have a mailing list and a web repository for all project information.

Communication is your biggest risk, since you probably have disparate schedules; this mutates into a coherence/consistency risk, amongst others. You've been warned. :)

Project Schedule and Documents

Your project is going to be managed based on Boehm's Spiral development model. This model guides the team through a series of repeated cycles of increasing detail (hence the term spiral). Such a model is necessary in situations where there is significant uncertainty in the product development process. The spiral model allows the delaying of decisions until the cost of making the decision is lower than the cost of not making the decision. In the extended definition of the Spiral model--which is what we are using here--there are five primary steps to each cycle. Each step is focused primarily on the issues identified for the current cycle.

Although each cycle focuses on resolving a certain class of risks, any previously unresolved risks should be monitored for realization or (preferably) elimination. Realization of unresolved risks requires a reprioritization.

For most cycles, there are six primary work products that must be incrementally refined and maintained:

If there were any money involved, there would also be a budget document. You may also want to keep supporting documents such as meeting notes and e-mails.

These work products are repeatedly augmented, refined, and changed. At no time is any document complete, unless the whole project is complete. It is impossible to know the future with certainty--and costly to to try--so knowledge is acquired as its cost to acquire drops and its cost to ignore rises.

Below are the milestones that denote the major cycles of product development, as somewhat arbitrarily predetermined by me. Do not be misled by the titles on the milestones. These are not the stages of a waterfall model that transform an input document to an output document. They are spirals that are focused on the resolution of a particular class of risks. The goal, then, it not production of documents, but resolution of risks and the successful production of a final product. The ``product'' is repeatedly defined and evaluated at increasing levels of detail. You should augment these major cycles with minor cycles as-needed to resolve individual risks, etc.

Also, these milestones are dates for you to deliver documents to me. It is expected that your actual work precedes the milestones by quite a bit. My grading of these documents will constitute the ``review and commitment'' parts of the cycle (although normally this would happen in a highly interactive and probing meeting); you are responsible for validation, which is a much more detailed activity than the review for commitment. You should maintain your four work products on the web, and hand in (on paper) the necessary portions of the products (with change marks, if necessary) for each milestone.

A milestone document should have roughly the following form:

All milestones are for the Friday of the named week. You do not have to wait until the last day to complete the work for a milestone. I recommend being about a week ahead, when possible. If you receive a substandard grade on a project, you can turn it in again the following week for a regrade. You can hand in via e-mail, and may point to a web page (e.g., in your project Wiki), although I like printed paper, frankly.

Back to CSE 210 Course Page