Before beginning any part of the project, we met as a group and agreed on which customizable user stories we would choose to reach the 32 required points. We collectively discussed, considering the expertise across different team members and which features seemed personally interesting to us as well. After discussion, we unanimously settled on Custom User Stories 3, 4, 5, and 12. From here, we divided into subgroups or individuals to work on specific user stories.
During the development of our project, our team followed the principles of Scrum by having a centralized set of goals that were updated each week and someone who assigned individuals the tasks and responsibilities needed to reach those goals. For our team, Cho was largely responsible for that. We had a channel on our Discord dedicated to goals and task assignments, and a discussion channel that facilitated quick questions and collaboration. Overall, we worked on a week-by-week basis.
A driving factor behind a lot of our design choices was the desire to keep features isolated from each other. This meant that we could develop very different features in parallel without worry of new features disrupting others. The first main way we achieved this was by segmenting our Git repository and having everyone create and work on their own branches, with each person's branch corresponding to the particular feature or app element that had been assigned to them. This meant that to combine features together, all we really had to do was merge the branches. The second way we achieved feature isolation was by making distinct features be distinct activities in Android Studio. This allowed us to have a central activity and associated UI that would call up and start a new activity when a user wanted to use a new feature. For example, when a user wants to change their password, they would select that option from the account menu. Internally, this launches a new activity, and when the user is done, they return from that activity. Overall, these strategies ensure that features remain as independent of each other as possible, preventing unwanted dependencies in the code.