What's In Your Closet?

VirtualCloset is a simple, flexible, and easy-to-use organisational tool. You wear clothes every day, and between a closet, dresser, laundry basket, washing machine, that chair in your room that accumulates clothes that you’ve worn once but don’t need to be washed yet, it's easy to lose track of parts of your wardrobe. On top of that, it can be difficult to come up with outfits that are stylish in the mornings before your busy day.

Our app can help you stay on top of your wardrobe and be your most fashionable self. It lets you keep track of all the items in your closet, from sneakers to sundresses to sweaters. Your clothes can be further categorised by their attributes, like colour or season. VirtualCloset also lets you combine items into outfits to keep track of your best style ideas.





Our Vision

Virtual Closet is an app that allows people to view and organize the clothes and outfits in their closet from their mobile device. The app will organize the user’s clothing and outfits by categories such as style, colour, and seasonal trends. The app allows users to create outfits based on clothes in their virtual closet, and helps them plan out what to wear tomorrow or the week after quickly and painlessly.

Virtual Closet is a mobile application currently being developed for Android, so people will be able to create, manage, or view their virtual closet, from anywhere they go.

The project will be considered successful based on two criteria. First, we will measure user activity on the app over a prolonged period of time. If our users develop a habit of using our app, that must mean we’ve provided a useful service. However, if they only try the app a few times, that must mean they prefer using existing solutions to our app. This usage statistic will help us understand the usefulness of the app to the average user. The second criteria we will measure is how robust our organizational tools are, based on surveys provided to our users. Because more dedicated users are the ones most likely to respond to surveys, this metric will show us how our expert users responded to our app.

Target Audience

Virtual Closet is primarily designed for the average person who wants a tool to improve the organization of their closet. The people who will use this system are those who want to spend less time in the morning getting dressed, and would use this system to more efficiently choose their outfits.

In addition to average people, people who have a strong sense of style can still use this app to enhance their experience. Those people with a large collection of clothes, can utilize this system to help manage their large closets by categorizing their clothes as outfits or by creating custom labels to sort their collection. Virtual Closet will be simple enough so average users can understand it, while also including robust tools to manage large wardrobes.






Major Functionality

The value of this project is in its function as an organizational tool, allowing people to see all of the clothes they own, without manually digging through them. It also allows users to figure out when and where to best wear their clothes, by allowing them to apply labels to them and create outfits with them. Virtual Closet will provide our users with the experience of having a walk-in closet, without requiring them to own an expensive home with one included.





Your Clothes at a Glance

Add clothes to your closet and view them anytime, anywhere



Label & Organize Clothes

Organize clothes by color, by style, by whatever



Build Tomorrow's Outfit Today

Build and view outfits from your closet so you can be ready for any occasion




The Team



Asia Miyai

Working on this app taught me how to manage large software projects. This included practising how to implement Agile design and SOLID principles to ensure that the code is flexible when things need to change, as well as learning the importance of teamwork. Good organisation and communication are critical to the success of a project like this.



Mitchel Aguilera

While developing this project I learned a lot about databases, and more specifically HSQLDB development in Android Studio. Working with a team on a project of this size also taught me tools and strategies for software development such as git and agile development.



Alborz Khakbazan

Developing this application taught me a lot about how to use Git and work together as a team, and opened my eyes up to the importance of structure when it comes to building a project. By having a concrete plan of what features to prioritize, what features we were building in the future, and what interactions these features would need to function, we avoided a great deal of technical debt and tedious refactoring.



Xiahong Zhou (Leo)

Developing this application taught me how to work with a team. With one of the biggest advantages of git, which is branching capabilities, we can easily distribute features among team members into different branches and then merge all work results into one branch. I learned using Espresso library with Junit to transfer written acceptance tests to system tests and to create automated testing to simulate user behaviour.



Gyuri Kim

While working on this project, I learned a lot of knowledge about git, android studio, html, and teamwork. Especially I learned how to test the app using android studio. Working as a team, I felt I should be more active and it is important to find myself the things that I can do.






Project Velocity

Below is a chart of our team's velocity over the development process. It looks like this because after the 1st iteration, our team had a better understanding of working with android studio so we believed we could implement features much faster. Although we had a better understanding of Android Studio, our team experienced unexpected complexity later on in the project causing things to take longer than expected.






Postmortem

Looking back on our experience developing Virtual Closet, there are plenty of things we can learn. In our Iteration 2 retrospective, we noticed that we weren’t quite following principles of test-driven-development, and ended up writing tests and working out bugs in our features relatively last minute. For iteration 3, we wanted to impose internal deadlines and keep our tests up to date so that we could finalize our features before the project due date. Although we still had some features we ended up implementing before their tests, we did a better job with being prepared before the deadline and had plenty of time to spare to work out small kinks and bugs.


Where in development did we run into trouble?

Our team ran into a fair bit of trouble when it came to setting up databases – both in terms of the stub database and the persistent SQL database. After initially adding the ability to see a single account’s clothes in the first iteration, we went into the second iteration hoping to add the ability to modify an account’s clothes and to switch between accounts, only to find that upon switching accounts, none of the changes would be saved. It turns out that we had actually set up our stub database incorrectly, and hadn’t noticed because the features for us to be able to notice hadn’t been implemented yet. With a good bit of time spent revisiting old code, we were able to modify the app to properly implement a database and actually pass around information as it is updated. However, it did present us with our first major bit of technical debt – and taught us all lessons on why we should spend time ironing out the little details before marking features as complete.


What did we learn about project management, and how to approach it in the future?

Version control is one of the strategies that we most used in our project. For a larger deployment project, these two strategies are particularly helpful to maintain workflow efficiency. Version controls keep tracking and managing changes to software code for developers. We, as developers, can easily identify the mistake of code by comparing earlier versions of the code while minimizing the unpredicted effect to all team members. Every time our team decides to merge all the branches with multiple changes on the same files, version control keeps track of every individual change by each team member on each file and this effectively prevents conflicts on the same file or program crash.



COMP3350 A01 - Group 9