Project Ideation
Generating Project Ideas
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.
Project Ideation Checklist
Consider your project idea and answer the following questions! The more "yes"es your idea receives, the stronger the proposal is. You don't have to come up with a project that checks every criterion below. In fact, that may be too big a project. However, big projects can be trimmed down. The problem is small (weak) proposals.
Does your proposed software solve a real problem? You are not solving a "real" problem if it is already solved, i.e., you are building an app that already exists (unless you are improving it).
Does your proposed software benefit the Hopkins community? A successful example is Semesterly!
Does your proposed software adhere (or can it be made to adhere) to the client-server architecture? Given the ubiquity of this architecture for apps, I think there is real value in gaining experience building on this architecture model.
Will you be creating a public API for your proposed software? Most modern software applications and almost the entire Web is made up of APIs. Therefore, it is highly encouraged that you create a public and well-documented API for your OOSE project.
Will you be using a database to persist the data in your proposed software? Most apps have a database to persist data. Therefore, it is imperative that working with a database will provide a valuable experience. It also provides the opportunity to apply what you have learned in courses like EN.601.315. You should answer no to this question if the database would only store user credentials! In that case, if we were to, e.g., use OAuth or SSO, then there would be no need for a database at all!
In case your proposed software will have a database, will it involve operations beyond CRUD? Examples include complex querying that involves sophisticated searching, filtering, grouping, sorting, joining tables, etc.
Will your proposed software be using a persistence mechanism other than a database (or in addition to a database) such as a file server? You will need such a service if you store multimedia (images, videos, PDFs, etc) in your app.
Will your proposed software employ several external APIs? You will need such integrations when e.g. you need to provide notifications, accept payments, access calendar, integrate maps, NLP analysis, data analytics, AI/ML algorithms etc.
Can it be said that your proposed software is a "smart" and/or "data-intensive" application? Many applications today utilize AI-based algorithms and/or are data-intensive, wrestling with the amount of data, the complexity of data, and the speed at which it is changing. Such an application would provide you the opportunity to use AI/ML algorithms, distributed systems, parallel algorithms, ML and big-data recipes, etc.
Can it be said that your proposed software is a "compute-intensive" application? In compute-intensive apps, as opposed to data-intensive, the CPU power is more a limiting factor than the amount of data. Examples include having complex web-scraping on the backend, performing optimization tasks, solving hard computational problems like scheduling, etc.
Will your proposed software have a complex and non-trivial user interface? Examples include building animations, simulations, complex interactive charts and visualization that update in real-time, etc.
Will user experience (UX) be a big part of your proposed software? Every software must strive to provide the best user experience. That said, for some applications, this is so crucial that it can make or break the app. For example, if you are building an e-reader for users with dyslexia, then addressing their needs and creating an optimal user experience is paramount.
Will software security be a big part of your proposed software? Every software must be made secure. That said, for some applications, this is so crucial that it can make or break the app. For example, securing an app that stores clients' medical or financial records is of utmost importance compared to an app that stores their doodle finger drawings!