Project Proposal
As you know, the prominent component of this course is a team project on a topic of your choosing.
The purpose of the course project is to provide you with the opportunity to get a taste of software development and its practices. The end goal is not the product itself; rather, the project serves as a vehicle to help you develop your technical and teamwork skills.
There are no limits placed on the topic of the project, but we strongly encourage that you aim for a project that:
- conforms to the client-server architecture.
- serves a real purpose, not some hypothetical need that does not exist.
- goes beyond a simple CRUD application.
The client-server architecture
The client-server architecture has been described in Module-1. It is one of the most prominent and popular software architectures. Most modern software applications that you use adhere to the client-server model.
We expect your application design follow the client-server architecture. More concretely, we expect your software design exhibits a clear separation between a client application entailing a well-designed UI and a server application involving a well-documented and well-tested API that is connected to a database to provide persistence.
Build software that is needed!
Scott Adams has said that "engineers like to solve problems. If there are no problems handily available, they will create their own problems."
Before inventing a problem, look for a real one!
When considering an idea for your project, ask yourself a question regarding the utility of your product. If you're willing to solve a real problem, you enjoy the advantage of having a real "customer" with real "expectations" and a software project with real "requirements" and "constraints".
Where are the "real" problems?
You are wearing different hats! You are a member of several communities and organizations. Talk to people in your circles and uptake a real problem people actually have.
Indeed, there are many software applications out there. Yet, people constantly look for better, faster and smarter ways to accomplish everyday tasks. And fortunately for us software engineers, there are still lots of rooms for improvements in existing products (as well as many novel ones to be built).
Going beyond CRUD!
CRUD has been described in Module-1. A simple CRUD application is just a front-end (UI) for a database! Most software development frameworks have the concept of CRUD deeply embedded in their toolset, making it too easy to get an app up and running in a matter of days with little code that is doing anything else.
You don't learn much about software engineering if your app is mostly CRUD. You should strive to incorporate some challenging functional requirements to go beyond a simple CRUD application.
Caution
Once you have decided on a topic, you must get the instructor's approval before proceeding with it.