# Google Hash Code Competition Roles
It may be beneficial to take on different roles to reduce duplicated efforts. This is especially true during the early stages of competition, when initial tasks must be performed before diverging efforts on different approaches.
#### Data Modeling
Creating the structures to model the data will be one of the first tasks that need to be completed. This is critical for interoperability, so it is essential that this be an focus of early efforts.
#### Input Parsing and Output Generation
The ability to read the input files and generate the output files is foundational to every solution. This step should be finished immediately after the data modeling is completed.
#### Data Analysis
It is very likely there will be multiple data sets available for the competition, and each data set will have unique properties. It is important that these get identified quickly so that algorithms can be tailored to the data sets.
#### Algorithm Application
Identification of the best algorithms to use, and implementation of those algorithms will consume the majority of the time during the competition. This is something that should be started as soon as possible, and ideally before the above mentioned tasks are completed.
#### Solution Scoring
Being able to calculate the score of an output solution without having to upload the solution in the dashboard is highly beneficial to rapid iteration, and necessary for certain algorithms. However, it's not essential for _every_ approach, so this goes in the category of beneficial but not absolutely necessary for the qualification round.
#### Submission Manager
Packaging and submitting a new solution can be a time consuming process. Having a single person continuously compile, run, and submit solutions created by the other three teammates, then report back improvements, could be a beneficial process. Emphasis on **could be**, since coordination problems or bottlenecks could also lead to a net negative productivity.