Your team will develop an amazing note taking application this term.
A note-taking application is a standalone application designed for recording and searching short, ad-hoc notes. Typically they are used by people as an informal way of organizing information for their own consumption e.g. code snippets, recipes, daily journal notes, or managing a TODO list.
Although there are many different designs, the focus of every note-taking application is storing and managing text notes. Common features include adding, editing, deleting notes, as well as ways to organize or search them.
Commercial examples include: Bear (iOS and macOS), Microsoft OneNote (Windows, macOS, iOS, Android), and Apple Notes.
These are all valid, but different, interpretations of how to address this particular design space (and they all include advanced features which we don’t expect you to emulate).
There are even command-line applications which attempt to solve the same issue. For example, here’s Terminal Velocity on Linux, optimized for very quick note entry, for users who are accustomed to working from a terminal.
These are commercial applications that have taken years to design and build, so I certainly don’t expect this level of functionality! However, they might give you some ideas of one or two key features to include that are feasible given the time that you have.
Your team will develop an amazing note taking application to complete with these designs! You will speak with users, gather requirements, make design decisions and implement your own vision.
For this course, the instructor and TAs are all potential users. You can talk with them to get their opinions. You should document what they tell you, and consider their input when defining your requirements. Keep in mind that - just like real users - their ideas are sometimes terrible. They also might forget what they told you previously, contradict themselves, or suggest features that can’t possibly work together. Part of your job is to “sift through” what they tell you, and make the best decisions that you can, to build a great application.
The following section describes what I would consider minimum functionality for any application. You need to include these features (and you are expected to build much more than just this).
Here are some questions that you and your team should ask yourselves, and your potential users! The answers to these will help form your core requirements.
Here’s an incomplete list of similar applications. Use these to get a sense of what features you might want to consider, or some design approaches.
No, not yet! We will work through all that you need to know in lectures. We have lots of time, and we will work through each stage togethere.
The lectures are meant to complement align with what your team is working on (e.g. you will watch Design videos and we’ll talk about Design before you need to do that part). For the first few weeks, I will be telling you exactly what you should be doing. Once we start into sprints, things will be less structured, simply because teams will likely have different approaches and different requirements to address.
There’s a few things that are meant to help you once you’re in a sprint.
Yes, Kotlin is very flexible and you can build everything in Kotlin + libraries/frameworks.
You can, and should, use libraries where appropriate - that’s why they exist! They’re often well-designed and tested, and using them can result in much a higher quality product (plus, they save time). You can even use third-party source code, within limits - see the course policies, specifically around what constitutes plagiarism. Tl;dr. You can external source code as long as a single source doesn’t constitute more than 10% of your project. More than that, and it’s considered a potential academic integrity offense. If you have questions about this, please just ask.
No, there’s simply not enough time for us to manage arbitrary projects like that. Capstone project, for instance, are always at least 2 terms long - and the entire first term is needed to get the requirements correct! We’re choosing a project to streamline the process, so that you can have requirements done reasonably well in weeks instead of months.
No, they’re not even close to complete! Think of them as a starting point for your team. From here, I expect you to
This should get you a very large list, and from that list you will need to decide on a smaller subset of features to actually build.
Umm, well, no. I expect you to deliver a functional application that meets basic user expectations:
You will be graded on a sliding scale, for a number of different factors: if your requirements are coherent and consistent, if your design meets your requirements, did you deliver the features that you said you would deliver and so on. We will also grade you based on how well your product works of course, but every project will be graded on how well you planned and executed the project.
Every project has rough patches, where there’s a bug that you cannot get past, or a feature that just doesn’t work, or where you need to back up and rethink a requirement. That’s fine and expected! What matters here is that you (a) admit what happened, (b) communicate with your team and stakeholders, and (c) have a reasonable to plan to address it.
You are all designing and building different versions of the same basic application, so it’s unlikely that we’re going to see large sections of duplicate course code.
However, I recognize that this could be an issue. See the plagiarism policy for this course. You are allowed up to 10% overlap from any single source - just make sure to cite it and include in a README (and include as an Appendix in your final report).
This is partially done to avoid the issue you’re describing and partly because I don’t mind if you use a snippet that someone found on Stack Overflow - as long as it’s a relatively small part of your overall project.