Wednesday, February 4, 2009

Devcathlon Mockup Version 2

Last week my software engineering class split into three teams and each produced a different proposed interface for our semester project - the Devcathlon software developement game. The different interfaces had many common elements, but also introduced new ideas and generated discussion on the assumptions and goals of the project. A major point that we settled on was that Devcathlon should be dependent and bundled as an optional tool in the Hackystat software metrics system. Though potentially limiting some flexibility, it simplifies features like registration, login verification, data collection, and creates a more consistent environment. From here we split up into three new group configurations to further streamline and rehashed the proposed features.

Planning Phase

For this round I worked with John Zhou and Scheller Sanchez on Mockup5. We had a brief discussion on the basic needs of our interface right after class, but did most of our planning in a meeting a couple of days later. After setting up our SVN repository and Hackystat project we worked on identifying and defining the various elements of the web interface. It would have to allow for several states depending on the type of user being served. Users could assume one or sometimes several roles such as anonymous spectators, general logged in users, team leaders, team members, match members, or administrators. Then there are several different categories of pages to be implemented. First there are the static pages that include the login, about Devcathlon/instructions, events, badge listing, and level listing pages. These pages are not expected to change often though certain settings can be modified by an administrator. The other pages include the personal user profile, team profile, and match pages which can all be changed as a result of user activities on the site, including adding comments, and as a part of ongoing games. There is also the Hall of Fame page which isn't directly modified by users, but is automatically changed as a result of Devcathlon activity.
While the static pages will look roughly the same when viewed by anyone, the user profile, team, and match pages will vary depending on the access level of the user. A logged-in user can edit their own profile page and set privacy levels to determine what details others see. On the team page a members would be able to leave messages for the team, and the team leader would see extra functionality to make and accept challenges. A match page allows members to request and verify untracked events like pair programming and team meetings. I also thought it'd be interesting to have two message areas: a playing field for members of all participating teams, and then another that is for the "cheering section" of the non-member crowd.
At our meeting we also brainstormed on the requirement of creating three new events, three new "badges", and a type of leveling system. The badges and leveling system came out of groups during version one of the mockup and showed potential to be an important concept for the project. The badges would signify permanent milestone markers for a user or group such as winning a certain number of games or consistently committing code that builds. A leveling system, akin to the javablackbelt.com notion would signify long term growth and experience gained by accumulating wins and events.

Implementation

For the mockup we would need to show each of these pages as they would be seen by each type of user. This should simply involve adding a various buttons or fields to the page according to the users status. In production this would be accomplished just by having varying division tags that would be generated as active or inactive portions of the page. I was principally responsible for creating the events listing page. It would have two possible states: one for the administrator which allows him to edit each point value and criteria field, and one for all other users who would simply see the current settings of the local Devcathlon instance. My goal was to create a page similar to the Devcathlon's Google Code page with a quick list of event names but also a summary of their point values. Each event would then link to a complete description further down the page. If viewed by an administrator there would be fields for each quantitative value in an event and a save button. Three new events we came up include monitoring classpath changes, seeing that the points are spread evenly across the team, and an event that looked at the larger Hackystat picture. My experience with changes made to the classpath file past a certain point means someone or everyone is confused. Adding a new tool is acceptable, but having to continually readjust variables seems to be a sign of problems. For the event point spread event, Devcathlon would look at all team member scores once a day, compute an average, and then award or deduct a point to the team if everyone wasn't within some range of the average, perhaps 20%. It could also simply award/deduct from members within/outside the range. Another event could look at overall Hackystat data and award a point for each team member if the most metrics are "in the green."

For badges we thought they should reward consistent good work. This would include badges for being the point leader for 5, 10, 20, etc matches.

A leveling system I thought of would use the ratio of good events to bad events to determine leveling up. The first level would be a "2-bit Developer" attained when the user reaches a ratio of 2 positive events for every negative event. From there as the user got better and meticulous with their programming the could become a "4-bit Developer", then 8-bit, 16-bit, and so on. I'd also want to add some balances such as a minimum amount of matches, days, commits, or some combination necessary for each level attained.