Project Ideation

Software is a broad term! Even your kitchen oven may have embedded software, but that type of software is not suitable for an OOSE project.

For OOSE, the best choice is what is commonly called Application software, or app for short. An app is software that performs specific tasks for end-users. You are likely familiar with using apps on your phone, tablet, and computer.

When considering project ideas, I recommend putting on your entrepreneur hat and developing an original app idea that solves an existing problem. It doesn't have to be an entirely new concept; you can create a software solution that builds upon existing ones to address a new problem. The focus here is on "problem-solving." The value of entrepreneurship lies in solving real problems.

You may be wondering how to generate ideas. Remember, you belong to various communities and organizations. Connect with people in your circles and identify real problems that people are facing. While there are already many software applications available, people are constantly seeking better, faster, and smarter ways to accomplish everyday tasks. As software engineers, we have plenty of opportunities to improve existing software products and create new ones.

Refer to the enclosed "Project Ideation Checklist" to evaluate the suitability of your project idea for an OOSE project.

If you don't have any new app ideas, you can replicate an existing one for the purpose of learning. In that case, we will work closely together to evaluate the project goals and establish expectations. I may ask you to focus on a subset of its features and try to enhance them if possible.

Another option is to bring an existing project to OOSE. If you are already involved in an ongoing software project, you can choose to work on it for credit in OOSE. Ideally, you will gather a group of OOSE students to join you. In exceptional cases, I may allow you to work on the project individually, as long as there is still a team involved and you can experience teamwork and its challenges through your participation.

Once you have decided on a topic, you must obtain instructor approval before proceeding with the project. Do not start working on a project until you have obtained the instructor's approval.

Appendix: Project Ideation Checklist

Take a moment to consider your project idea and answer the following questions. The more "yes" answers your idea receives, the stronger the proposal will be. Remember that you don't have to develop an overly ambitious project to meet each criterion below. In fact, that may be too large of a project to complete. However, larger projects can be broken down into smaller components. The key is to avoid submitting a weak proposal.

  1. Does your proposed software address a "real" issue that directly impacts people's lives and has a tangible solution? A "real" problem can be any issue that is of great concern to a group of people and affects their daily lives. Consider how you can create a software project to address this issue. Even if there is already an existing app that attempts to solve the problem, there may still be potential for innovation or improvement.
  2. Does your proposed software benefit the Hopkins community? Good examples are ucredit.me and semester.ly! Even if your app is simple, if it solves a problem and benefits the Hopkins community, it is a win.
  3. Does your proposed software conform to the client-server architecture model? This architecture is widely used for applications, and gaining experience in building with it can be highly beneficial.
  4. Will you be creating a public API for your proposed software? Most modern software applications and almost the entire Web are made up of APIs. Therefore, you are highly encouraged to create a public and well-documented API for your OOSE project. Doing so will ensure that your software can work with other applications and services.
  5. Will you be using a database to store data in your proposed software? Most apps utilize a database for data persistence, so it is important to gain experience working with one. It also allows you to apply what you have learned in courses like EN.601.315. However, if the database is only used for storing user credentials, a database may not be necessary. In this case, utilizing OAuth or SSO would be more appropriate.
  6. If your proposed software includes a database, will it require operations beyond CRUD? (CRUD stands for Create, Read, Update, and Delete, which are the basic operations performed on data in a database or software application.) This may involve complex querying with advanced searching, filtering, grouping, sorting, joining tables, etc.
  7. Does your proposed software have multiple types of users? For example, Twitter has one type of user, while Gradescope has multiple types (student, TA, instructor). Each user type will have different access privileges and potentially a unique user interface.
  8. Will your proposed software use any persistence mechanism other than a database (or in addition to a database), such as file/object storage? This service is necessary if you intend to store multimedia (images, videos, PDFs, etc.) in your application.
  9. Will your proposed software integrate with multiple external APIs? These integrations are essential when you need to provide notifications, accept payments, access calendars, or integrate maps, among other functionalities.
  10. Is your proposed software considered a "data-intensive" application? Many applications today face challenges with handling large volumes of complex and rapidly changing data. If your application falls into this category, you will have the opportunity to utilize distributed systems, parallel algorithms, machine learning, and big data techniques.
  11. Is your proposed software considered a "compute-intensive" application? In compute-intensive applications, the limiting factor is more often the CPU power rather than the amount of data. Examples include performing complex web scraping on the backend, carrying out optimization tasks, solving difficult computational problems such as scheduling, and more.
  12. Will your proposed software have a complex or non-trivial user interface? Examples include creating animations, simulations, complex interactive charts, and real-time updating visualizations.
  13. Will user experience (UX) play a significant role in your proposed software? Providing the best user experience should be a priority for every software. However, for certain applications, it becomes even more critical as it can greatly impact the success or failure of the app. For instance, if you are developing an e-reader specifically for users with dyslexia, creating an optimal user experience tailored to their needs becomes paramount.
  14. Will software security be a major consideration for your proposed software? Ensuring software security is essential for all applications. However, for certain applications, it becomes even more crucial as it can significantly affect the app's success or failure. For example, securing an app that stores clients' medical records is of utmost importance compared to an app that stores their doodle finger drawings!