Inspiration

Ziele was inspired largely by our own approaches to doing work, where we found that sometimes when your motivation is low for working on a larger project or goal, it can be helpful to break it into much smaller, more manageable chunks. We wanted something that would push its users to keep getting the small victories, doing things that are not just busy work, but actually relevant to their own personal goals. We were inspired by simplistic and clean design, giving users only what they came to the app to do, as well as fun battle-style video games we love, to make this app not just useful for motivation, but a bit of fun as well.

What it does

Users of Ziele may set up to seven personal goals, which relate to different categories (for the moment we only support “Programming” to keep things simple, but would like to eventually include categories from other fields), as well as topics within that category (web-development, algorithms, etc). The users are then matched with other users who share similar goals, and compete in attempting to complete challenges that relate to these goals. Ziele also includes public forums for users to discuss challenges after attempting them, which we hope will form supportive communities of knowledge and passion sharing with like minded people. We feel that an application like Ziele is a useful means of approaching this overwhelming feeling, and that the extendability of its general concept could lead to broad appeal in a wide variety of markets and user interests.

How we built it

We began developing Ziele by creating a set of user stories based on our high-level idea. These user stories then gave way to requirements, which we then used to inform our design prototypes. Examples of all of these can be found below. After outlining the components and relationships and identifying a distinct need for a Model-View-Controller approach, we decided to use Ruby on Rails as our development framework. From here, we began working on several subsystems in parallel, namely authentication, user settings, goal selection, and the dashboard. Other subsystems, such as matchmaking, could not be worked on until the logic for these more fundamental components was implemented.

Challenges we ran into

Unfamiliar programming environment - Neither of us have extensive experience with Ruby on Rails, so the programming errors we encountered required us to investigate solutions. As a result, problems that might have been easily solved in other environments took a significant time commitment to resolve. That said, other aspects were made far easier (such as handling various relationships between components) due to the opinionated nature of Rails.

Managing concurrent development tasks - We struggled at times with how to divide work in a system that relies on each other component of that system. Although our parallel development approach was mostly effective, our progress in one direction was occasionally halted due to the need for other components to be integrated.

Logistical/Algorithmic complexity - We struggled with the process of converting our goals for the application, particularly the matchmaking system between users, into the necessary algorithms to implement them within the system. For example, we needed an effective way to compare the category, topic, and type of challenges so that we could match users with specific goals and challenge type preferences to challenges relevant to them. To meet this challenge, we took inspiration from the Unix permissions system and from seed-based algorithms, ultimately arriving at a solution that 1) identifies categories and topics using ‘seeds’ (integer values) that can be mathematically compared to determine conceptual similarity, and 2) compares challenge types using 4-digit binary values that uniquely identify each possible combination of types and type preferences.

Lofty goals for the app led to significant complexity early on - We found that once we had finalized our design for the system, the initial establishment of its bones proved much more time consuming than expected. This was particularly challenging as we wanted to get right to work on setting up the UI framework for the app, however, components often relied on backend structures that simply did not exist yet. We approached this challenge by doing a sort of follow the leader style of development, where one team member would establish the backend structure of a subsystem, and then another would follow behind and design the user facing components of that system.

Accomplishments that we're proud of

So many! The app is obviously not done, however, we are so proud to have put together what we have now, our biggest accomplishments include:

  • Developing UI mockups for the major pages of the site
  • Defining the user stories and system requirements that guided, and will continue to guide Ziele's development
  • Identifying Ruby on Rails as the framework for us, and getting as far as we did in programming the back and front end's of the system, even as novices
  • Developing an algorithm for matching users to each other, and challenges to compete in, and leveraging the technologies given to us in the framework we chose in the process

What we learned

In attempting to build this application we learned all too well the importance of trying to decompose the big walls that stood in our way, as well as communicating your struggles with others. We were oftentimes overwhelmed by the amount of work that needed to happen just to get the app to look even remotely like what we hoped for, and it could feel like running through mud. In this process, while sometimes difficult, we learned so much about development in Ruby on Rails, how to define a system and react when things will not work how you initially thought, making good user interfaces, and how to approach big challenges. We are proud to have seen this through, and are only made more certain that Ziele does have a place in the app market, and would help to serve people like us, and, hopefully, those in so many other fields.

What's next for Ziele

Next we hope to, first of all, finish designing Ziele. We are attempting to make it a very general application so that implementing new challenge and goal types will be a simple matter of data integration, and so we must finish that structure first. After this, we would like to further refine the set of programming related challenges we have to make it truly useful to this market. Finally, we will look to broaden our horizons into new categories, such as culinary arts, or home gardening, and so many more.

Share this project:

Updates