Software Development Project
Project ideas
These are ideas for projects that come from local software development companies:
Facebook Application for SalsaNinjas
- Customer: Scientist Superstar
- Description: A facebook application that allows users of a group (salsaninjas) to interact with each other.
Kiosk Web Interface
- Customer: The RedPost (contact Eric Kanagy at eric@theredpost.com)
- Description: A web interface for a kiosk (this is similar to what you see on computers at BestBuy—an interface that is in fullscreen and allows the user to have some interaction). The kiosk will play audio files via a playlist like interface (similar to iTunes maybe) either through user interaction or automatically if no there is no keyboard/mouse activity. Redpost will provide you with touchscreen hardware and other resources.
Remote Video Playback
- Customer: The RedPost (contact Eric Kanagy at eric@theredpost.com)
- Description: Allow a browser interface for triggering video playback (play, pause, etc.) on a screen via the Internet. Eg.: a large LCD is hooked up to a PC, playing default content in a visitors’ center, a visitor can click on options on a web-connected kiosk and choose which videos to watch; videos can be queued.
- Customer: Blue Pony (contact Nathan Grepke ngrepke@bluepony.com)
- Description: Online form that retrieves form details and pushes data into a format that can be imported into our project management system. Allow customers to place orders online and eliminating the step of manual re-entry.
Sync Utility
- Customer: Blue Pony (contact Nathan Grepke ngrepke@bluepony.com)
- Description: Program that connects via FTP or similar protocol to web hosting service and copies the entire directory back to a local directory. Have automatic synchronization or remote web host account to an internal service for “real time back-up”.
Real-time client/server communication using eJabberD
- Customer: The RedPost (contact Eric Kanagy at eric@theredpost.com)
- Description: Use the eJabberD server (find out more about it here and here) to implement a chat server and clicent interface.
Converting Powerpoint files to images
- Customer: The RedPost (contact Eric Kanagy at eric@theredpost.com)
- Description: Write a program to convert Powerpoint files to images.
Mobile Device Friendly Video Portfolio
- Customer: Blue Pony (contact Nathan Grepke ngrepke@bluepony.com)
- Description: Create webpage that is configured for mobile devices to view our online video portfolio. Easy to update and easy to view what we do.
Purpose
The purpose of this project is for you to understand the apply the process of software engineering on a “real-world” project and to develop the skills and knowledge of a software developer. Your goal will be to not only deliver a software product by the end of the course but also to gain experience in the concepts, principles, art, and the skill that go into software development.
Size and effort
When you conceive of and propose a software product, keep in mind that it should be neither too “big” nor too “small”. You can easily solve this problem by choosing a project that will attempt to solve a “real-world” project. In fact the best defining quality of your final product will be how well it solves a real-world problem. Obviously, this would mean lots of work. You should expect this project to be your most intensive software project yet.
Audience
You will be working for a real customer. This not only means gathering the initial requirements and delivering the final product but to also involve the customer in every step of the design, development, and testing phases. In your interactions with the customer you must make sure of the following:
- listen carefully to their needs. Figure out the specifics. Often a user may give you a general idea and the final implementation may turn out to be wildly different than what he or she intended.
- treat the customer professionally. Be on time, don’t miss an appointment, and get back to them as soon as possible.
- communicate with the customer often, sharing with them the progress you have made. Of course, you must do so based on their availability.
There are three ways in which you can find a customer:
- pick a project from the list of ideas (see above) that are supplied by local software companies
- find a customer yourself; given the number of people who rely on software for their complete professional workflow, you have a good chance of finding someone with a software need. Here are some possibilities:
- a staff or faculty in college
- the ITS
- local businesses
- if the above two options don’t work out for you, then come up with your own software product idea. In this case, I will be your customer. Please see me as soon as you have thought about a project idea. We will work on it till I can provide you with a final definition of the product. Of course, the idea must from the start be something significant, substantial, and in the end a product that a real person or organization could use. The key is that your product should offer something unique. So, it would not be enough for you to develop a website that connects to a DB and displays information in tables.
If you are coming up with the project idea on your own, then here are some pointers to help you:
- web applications are all the rage. You may think about a web-app that provides some service to a general user (e.g., a book review site, a site for sharing information in a novel way, etc.). If you are developing a website, then you may not use Dreamweaver or other web development IDEs
- allow your application to use an already existing source of information. This could mean using an existing API (Google Maps, Facebook, Yahoo!, etc.) in a novel way. Look up mashup on Wikipedia.
- develop for a mobile platform. This may be completely dictated by whether you have the hardware—a phone—that you need for testing purposes. Look up resources for Java ME (a plethora of mobile phones including Sony Ericsson, Motorola, and lots more), Symbian, Palm, Windows Mobile, and iPhone.
You are not limited to any particular set of development tools, platform or process. The tools of the trade and the way you proceed are choices that are open to you, pending, of course, my approval. This means that you can choose the programming language and platform that seems most well matched to the design of the project. Some pointers:
- use a language that you are comfortable with. Your goal is not to learn a completely new language just for this course (it would be cool, but we hardly have the time for such indulgence). For many of you Java may be new, but I am teaching it right now, so it’s all good :) . Having said that, if you believe that the project would be done better in a new language, do consider that option.
- as mentioned earlier, the use of web services with an exposed API is highly recommended. The application itself could be either for the desktop or the browser.
- use existing components and libraries for your programming platform. There is a library available in Java for almost any low-level task that you may want to incorporate in the application: reading PDF files, connecting to a remote server, reading images, reading XML, drawing 3D graphics, and much more (look here for a list).
Team Work
Team work is a very important facet of your development process. How well you work in a team will reflect on how skillful you are as a developer. Naturally this means that you learn the skills of effective cooperation and communication. Let the other person in the team know about your opinions and expectations of the project at all stages. Make sure you have an effective way of dividing up the work. This could be in terms of different roles for each person, or a clear division of work (50–50).
Another important pan-team point: multiple teams may choose to work on the same product. This will only be possible and good for you if you do not share design ideas and code. Of course, I will work with you in figuring out what would be the proper logistics and setup for sharing project ideas.
Resources
- If you choose a project idea centered around web development, I will setup an appropriate development environment for you on the Linux server.
- For regular desktop application development, Netbeans may be enough.
- If you have any special needs, please let me know.
- Remember your most valuable resource: me! If you need any help with any stage of your project development, come see me and we will try to figure out a solution.
Dates
If you miss the deadlines that may compromise your project grade regardless of your overall effort.
- Deadline for project proposal: 27th Feb. This is a written document that would include:
- vision statement: product definition, goals, customer identification
- tools, technologies: your initial estimate of what you will be using. This may change later on.
- team assessment: your initial subjctive analysis of the project: its complexity, your ability to work on it, and your opinion of the customer
- please consult me before 27th regarding all the above. I must have approved everything before your final proposal.
- Deadlines for presentations: you will be asked to present at least twice regarding your project. I will let you know later about these dates.
- Deadlines for milestones: the project will have a few definite milestones—points at which you have completed a phase of development.
- System Requirements Document: March 16th. Look at the slides at the end of Chapter 2 to see what is expected for this milestone. Also, look at the requirements document for the iGobo Project on the wiki.
- Design and Architecture: April 24th. At this stage you will produce a document—hosted on the wiki—that lists the design details of the system that you will implement (or are implementing). The document should include the User Interface and Application Architecture of your system and should be at least 1,200 words and ideally above 2,000. Consult the textbook and slides for what should go in this document. Specifically you should:
- talk about the what kind of UI or system architecure you are using and why.
- talk about the different iterations you went through for choosing the designs? What did you learn from each iteration and how did these issues affect your future design choices.
- describe your final design decision for both categories.
- include code and sketches that you wrote in this process.
- Final Document: May 17th, by midnight. The final document will conclude your work in the project should include everything you have accomplished. Include at least these aspects:
- description of final product
- list of features (compare them with the initial requirements list)
- Is it deployed already? If not, when?
- Customer interaction: their guidance and effect on the development process, and response to the final product
- Experience. Comment on: software and tools used, team interaction, and miscellaneous things learnt during the course of the project
- Link to somewhere I can view and test out your project. If this is not possible due to the nature of your project, then combine this with your meeting with me during exams week, described below.
- Final meeting: Meet with me on either the 18th, 19th, or 20th (before the final test) to discuss the project. Although I will be in my office most of the time that week, do make an appointment before hand.
Criteria for grading
These are the qualities that I will look for when evaluating your project so be mindful of them throughout the semester. All of these are important. You may choose to focus on a couple of these, but not at the expense of the others:
- quality: what’s the final quality of your product. Along with your customer’s opinion, I will evaluate the functionality and effectiveness of your product.
- learning: how much and how well you learnt new tools, concepts, and techniques that you weren’t familiar with earlier.
- effort: the amount of effort you put in the process will reflect on your grade. Therefore: choose a substantive project, do proper documentation of your work, and work hard!
- customer interaction and satisfaction: work well with the customer and make them happy.
- good documentation: regardless of every other aspect of your project. The documentation must be top-notch. This not only means that your code will be commented properly and extensively, but also you will document the whole development process. How you code each part of the project, what you learnt and how you learnt it, how much effort you put in—all must be properly documented. I will provide you with both a blog and a wiki for this.
- usability: an often-overlooked aspect of any development process. Even if your product is not complex in functionality, you will score huge points for making it easy to use.