You are on page 1of 37

1

TeamAssist
By: Beenish Syed & William Baker
California State University Monterey Bay
CST 499 Computer Science Capstone
Advisor: Dr Eric Tao
13th October 2019
2

Executive Summary:

TeamAssist was inspired by our observation of the need to consolidate not only team
stats but also individual player stats for soccer youth soccer clubs. Currently the apps that are
majorly used for youth clubs are not focused on one sport. Apps like teamsnap are used by
varying youth sports like baseball, swim teams, football etc. If you want consolidated
information about local soccer clubs there is no such thing out there. Now why do we feel that
there is a need for that.
Let's say scouts are looking for the best players among all the soccer clubs to recruit for the elite
teams. They have to arrange scouting events and pick their players from those events. Those one
or two events are not exactly the true picture or the entire picture of a certain player’s
performance. If there is a website that lets you track player statistics of each and every
game/tournament that player has played. If we have those statistics for multiple teams and
multiple soccer clubs imagine how helpful that will be! Therefore we wanted a website that
focuses on just soccer. Existing apps or websites keep track of team stats that too at a premium
membership price and still do not offer individual player stats. This website would help parents
and coaches alike. Coaches can manage their teams. Coaches can update a child’s performance
e.g. which position the player plays in, how many assists the player got, how many goals he/she
scored etc. This way scouts can also go on the website and look at the best performer or the top
performers of teams of each participating club.

Another thing we observed is that while there is a great need for a way to manage
carpooling among the players in a team but there is nothing to manage that. We have built a
carpool service on our website. There are always last minute frantic messages on the team app
asking for carpool or players missing practices and games just because they couldn’t find a ride.
So offering a feature that helps parents either offer carpool space to others or asking for a ride for
their child, would make everyone’s life easier. This way players will not have to miss an
important game just because of their parents busy schedule.

The population affected by the project is parents of children who play soccer, the players
themselves, team managers, coaches and scouts. We have an easy to use website that will make
the lives of all the stakeholders easy. The data on the website is very organized. Providing a
service that solves multiple issues in one place is what we have tried to accomplish.
3

Table of contents:

TeamAssist
Executive Summary:
Introduction/Background
Project name and description:
Problem/ Issue in technology
Solution to the problem
Evidence that the proposed project is needed
Project Goals and Objectives
Stakeholders and Community
Environmental Scan
Final Deliverables
Approach/Methodology
Legal Considerations
Ethical Considerations
Timeline/Budget
Usability Testing/Evaluation
Final Implementation
Coach Functionality
Parent Functionality
Guest User Functionality
Problems during design and implementation phases
Conclusion
References
Appendix A
Team member names
Division of labor
Appendix B
Link to our survey
Link to survey results
Link to TeamAssist code on github
4

Introduction/Background

Project name and description:

Project name: TeamAssist

After school sports require keeping track of various stats, statistics, and events. It would

be convenient to have access to all of these on one platform. Youth Soccer clubs are very

prominent in our region and we felt that it would be an excellent candidate to build our platform

for. More than 24 million people play soccer in the United States and that soccer is the fourth

most played sport in the country (Johnson, 2015). There are several youth soccer clubs just in the

Bay Area. A quick search for a youth soccer club on the Cal North Soccer website shows several

results and each club in turn has several teams. Each team needs to manage its own performance

as a whole and that of its individual several players. Information such as what tournaments the

team has played, the wins and losses, individual player performance, the positions a player plays

in, contact information of the players etc. Besides that, Youth Soccer Clubs require the

management of various logistics. A platform where all this information can be organized easily

will make everyone’s life more convenient. Such a platform would need to be usable for an

audience with varying technology literacy such as coaches, parents and students.

Problem/ Issue in technology

The problem is that there is no such platform where everything mentioned above is

combined together. While there are various apps that help organize the teams, the players

information and updates of upcoming events, there is no option for parents or players to organize

carpooling for the team. Mostly emails or texts are being sent and information becomes muddled
5

or lost in long threads. Not everyone gets those emails and sometimes misses the opportunity to

request or offer a carpool. During the season you can see busy parents struggling to find pick up

and drop off solution for their child. Older kids are also always looking for a ride, for someone to

either take them to their practice or drop them off after practice. The issue of making field

assignment while keeping coach availability in mind is still there. As the season approaches the

leagues send frantic last minute emails that they are still trying to figure out the coach and field

availability.

Solution to the problem

If we combine these problems and come up with one solution it will make the lives easier

of parents, coaches and team managers alike. Also, our project is currently only focused on one

sport - soccer! This gives a custom tailored product meant for this one sport and not a one size

fits all kind of solution. We made a website that allows parents to enter their information. We

have added an option of carpooling where parents can request carpooling or a ride and you can

offer a ride in return if you want. A parent can offer carpool to existing requests. The requesting

parent has the choice to accept or decline the offer. Everyone on the team is notified via email if

a request for a carpool has been made. The requests are also listed on the event page itself. We

had initially mentioned that if resources allow we would like to add a calendar manager that can

automatically generate practice schedules keeping in mind the field and coach availability. We

have left that for a future iteration of TeamAssist.

Evidence that the proposed project is needed

If you search around you will not find any app or website that gives solution to all the

problems described above. Neither is any app/website focused on one sport. As a parent, player,
6

coach or a team manager you can easily see that this will be a very useful tool. In addition, the

sheer number of people involved with youth soccer teams is yet further evidence of the necessity

of our project.

We feel that the carpooling feature in our project sets apart our project even further. With

more individuals becoming conscious of protecting the environment by reducing the amount of

fossil fuels released into the atmosphere, the idea of carpooling becomes much more attractive.

Additionally with the rise of gas prices, people may want to make fewer trips in their cars in an

effort to save money, another problem which carpooling solves. Of course, there are also parents

who may have something urgent that they need to attend to, and they would greatly benefit from

their child carpooling with another parent. Our application will make it easy to setup and

organize carpools between parents within the team.

Project Goals and Objectives

● Main goal:

Our goal was to create a platform that can be used by youth soccer teams to

manage the many logistical aspects involved. This is done by incorporating features that

assist the various parties involved with youth soccer teams: coaches, parents and players.

● Team and individual player stats

One major logistics involved in youth soccer leagues are player and team

statistics. Player statistics (goals, assists, games played, etc.) and team statistics (wins,

losses, ties, etc.) are maintained in a database and accessible to all three of the primary

user groups.
7

● Carpool feature

Another logistic involved is coordinating carpools to and from practices and

games. We have created a carpool manager that allows parents to communicate with

other parents within the same soccer team so that they can easily request and offer rides

to players.

● Intuitive user interface

Because of the variety of computer literacy found in our main user groups, it was

important to create an intuitive and welcoming user interface. This was done by keeping

the user interface simple and make it clear how a user can interact within a given

webpage and find the service that they desire to access.

● Focus group

We formed a focus group composed of individuals belonging to our targeted

audience in order to get feedback if our user interface is intuitive and what improvements

can be made to make it easier to use.

Each member of the user group has different services available to them. For

example, a coach has the ability to add and remove players on the team. Parents are able

to add and edit their contact information and have access to the carpool manager service.

Players, have their information stored in the player database as well. By having separate

user classes, we have kept the user interface less cluttered by irrelevant services and also

limit the access of different users.

● Showcasing our own skills


8

Another goal was to create a project that will showcase the skills that we learned

in this program and that are desirable in today’s job market. Skills such as Agile

Programming, Database/SQL, and Frontend/Backend development are all regularly

mentioned in job listings for Software Engineer positions. We believe we have achieved

that through our project.

Stakeholders and Community

This primarily affected those involved in youth soccer leagues. This includes parents,

coaches and to some extent the players themselves. Because our application is focussing on

tackling many of the logistical concerns involved in Youth Soccer Leagues, parents and coaches

will especially be affected. Having trouble finding a carpool can be a major source of stress for

parents. With the carpooling feature, parents are now able to gain a large amount of convenience.

They have an easy way to be able to coordinate carpool rides with other parents in the same

team.

Coaches also have a difficult job of communicating team announcements to all of the

parents involved. It can be difficult to keep track of emails and phone numbers. Also it can be

hard to give updates on changes in scheduling, especially last minute ones. With our platform,

coaches have a convenient way to notify parents of upcoming events, and also give updates to

the schedule. Without this service, coaches will have to devote more time to keeping track of

contact information and scheduling. Additionally, it can be difficult to coordinate scheduling the

use of facilities for practices and games. There are times when locations can be double booked,

thus causing a problem for both parties expecting to use the location. This was something that we
9

had left to do if time and resources permitted. So for a future iteration, our application will notify

when there are scheduling conflicts. This will help prevent such situations from occurring.

Environmental Scan

As previously mentioned, there are an abundance of Youth Soccer Leagues throughout

the country (“US Youth Soccer”, 2018). These teams require a great deal of effort to manage all

of the logistics involved within the team. Of course a natural solution to logistical problems often

is to use software. With the growing use of technology, essentially all of these teams use some

sort of platform to store information for the team. Unfortunately there are not as many software

options for managing these leagues. Of the options that are available, they do not offer the same

features that we offer in order to consolidate these features to make a more convenient

experience. For example, Teamsnap is the leading app used by many different leagues, but they

do not have the features that we hope to offer (“20 Million People use Teamsnap”, n.d.)

For example, they lack the ability to manage the other logistics, especially when it comes

to setting up carpools. Additionally, while ridesharing services such as Uber and Lyft are gaining

prominence, they require an adult to be present in order to use the rides. This makes using these

services to get children to youth soccer practices not an option. Plus, even if they did, many

parents would simply not trust a stranger to transport their children. However, parents often

allow their children to carpool to practices with other children on the team. By creating a

platform that assists in coordinating these carpools, we are providing parents a real option to get

their children to practices that simply does not previously existed.


10

The organization and the facilitation of youth soccer teams is an important function of

our application. It serves as a platform available to all individuals involved with these teams, and

centralize them to allow for convenient accessibility. Our application will keep track of the

contact information of coaches and players/parents. This is a fundamental need of any

organization. While most applications with similar services as ours provide this feature, it is

something that is very basic yet extremely useful.

What we are most excited about is providing an easy to use interface for updating player

stats. Currently, even if some applications have this capability it is not very easy to use,

especially considering that in soccer there are a lot of stats to update. We have provided a very

easy way to update player stats by using asynchronous calls to the server to give the user a

smooth and interruption free experience. Keeping track of each player’s data is very important.

Although, TeamAssist is meant for youth soccer, one shouldn’t underestimate the competitive

nature of sport in youth leagues as well. These are the players who in the future will be

professional soccer players playing for their colleges, at national and international level. Opta is

a website that keeps track of data on every player from every World Cup since 1966. According

to Bleacher Report’s website

“Not only does the advanced metrics movement reveal the intricacies and subtle nature of

the beautiful game, it also empirically brings to light the genius behind players that do not

necessarily score lots of goals but are critical to the success of their club or country” (Brownell,

2013).
11

Apart from providing the feature to add individual player stats, our application is a useful

tool to keep track of the entire team’s performance and statistics. Users are able to not only view

individual player’s performance but also the entire team’s in each game/event.

Furthermore, it allows the creation and building of teams. Coaches can create teams, signup

players, and add these players to their teams. In this modern age, it is important for most entities

to have an online presence, and our platform provides this to youth soccer teams. It shows the

relevant information for members of the teams, and those interested in tracking the performance

of a team. While other services offer this functionality, we feel that the additional features utilize

this base functionality much more fully.

For example, we provide the ability of creating and managing events for the team. This

includes events such as games and practices, which are essential to the performance of a youth

soccer team. One of the major problems when organizing events, is the inevitable change in the

schedule. This of course becomes a problem especially when these changes are not

communicated with to those within the team. We feel that this is a problem that can be addressed

with software. Whenever an event is created or updated, parents within the team are notified by

email. This way they will always be kept in the loop of what is happening for the team, which we

feel is essential. Having parents accidentally missing practices, or mistakenly showing up to

cancelled practices will be reduced by this functionality.

Of course, for every event, players need to be transported to and from the event. This

typically is the responsibility of the parent of that player. However there are instances where a

parent simply cannot fulfill this responsibility. This then leads to the parent frantically seeking a

carpool for their child, or simply have their child miss the event. However, by including a
12

carpool functionality within our app, we are providing parents the opportunity to easily organize

carpools between each other. Each carpool is associated with an event, and parents can either

offer a carpool or request a carpool.

Functional Decomposition:

Our program is broken up into 3 major microservices along with a main application that

interacts with each of the microservices. The microservices are as follows:

PlayerAndParentService, CoachAndTeamService, and EventAndCarpoolService.


13

The PlayerAndParentService, as the name would imply, stores and manipulates the

player and parent information. The models contained in this service are Parent, Player and

PlayerStats. This subsystem manages the CRUD functionality for each of these models. A parent

object is created whenever there is a new devise parent user created for an email address. The

player and parent objects are connected through the parent email.

The CoachAndTeamService stores the information for the Coaches and their Teams. The

two models in this subsystem are the Coach and Team models. Again this subsystem manages

the CRUD functionality for these models. Also like the parent model, a Coach model is created

whenever a devise parent user is created for an email address. Coach and Player are connected

by CoachId, and therefore Parent is connected to the coach through the CoachId stored in the

player object.

The EventAndCarpoolService stores the information for the Events and Carpools

associated with the events. The three models in this subsystem are Events, Offercarpool, and

Carpool request. Events are tied to the Teams model and Players model (and Parents model
14

through their players) using the teamId. The Carpoolrequest model is connected to the event and

the requesting parents player. The Offercarpool is connected to the Capoolrequest through the

Carpoolrequest id and is connected to the offering parent through the offering parents Id.

The TeamAssist service is connected to each of the microservices through helper classes.

This is where the TeamAssist service can make HTTP requests to the microservices.

Selection of Design Criterion

We wanted to design this project without any monetary obligations. This is done by

utilizing free resources such as Heroku, GitHub and MailGun. However, this of course provides

some limitations as these free solutions are generally not as robust. However for the goal of our

project, this is perfectly acceptable. We have designed with the intent that our application could

be ported to a more robust solution in the future as resources allow. At the present time, we have

created a fully functional prototype to a more robust application.

We want our website to perform as a functional website that can respond to and handle

possible exceptions as they may arise. For that we will have thoroughly tested different scenarios

that may occur in the use of our application. This includes scenarios that may not be the intended

use of our service, but still the application must be able to handle these.

Final Deliverables

A perfectly working website.

Admin/coaches can add/update/delete new players and their information.

Players/parents can modify player information.


15

Players/parents can access all the information regarding the player.

Carpool feature is up and running.

Parents/players can sign up for carpooling.

Parents/players can offer carpooling.

Players/teams/stats is available for viewing for guest users.

Approach/Methodology

To turn our project into a reality, first and foremost, we needed to decide what coding

tools to use and what database to use. We had recently learned Ruby on Rails so that is what we

decided to use for our project. We built a website in our internet programming class and we have

used some of the tools that we learned in that class.

We divided the project into smaller modules. Having recently learned about agile

methodology and that seemed to be a good fit for what we were trying to accomplish. We tested

each module as we go and made sure that the functionality of each step is what we expect it to be

before moving on to the next iteration.

Our first step was to design a database schema. It was a good starting point so that we

knew what information we are storing, how we are storing it and then we moved on to the next

step of information retrieval and processing. We also needed to design our website. For website

design we needed to decide the number of webpages required to meet the actionable items of our

project.

We worked on this project with the Agile approach. In doing so, we focused on creating

working prototypes and get feedback from our focus group to drive improvements and new
16

features which was in line with the Agile approach. Our project consists largely of a database

that contains the various statistics of the players and teams involved in the Youth Soccer League.

We have designed a database schema that organizes and stores all of this data and fulfills the

requirements to be considered “normalized”. The stats for players and teams can be updated and

accessed regularly. For that we have used Ruby on Rails equivalent of SQL statements to access

data from and make changes to the database. This has allowed us to demonstrate our skills in

working with databases and SQL. Our platform required a user frontend that is easy to use and

displays the information received from the database. This of course requires the working

backend that takes the input from the user and accesses the appropriate information from the

database.

Legal Considerations

The carpool feature required us to take several precautions as it involves children and

drivers. Many ride sharing companies today prohibit minors from using their services without an

adult accompanying them. For example, Uber and Lyft both instruct their drivers to deny service

to anyone that they suspect to be under the age of 18. Of course, the difference between ride

sharing services and our own carpooling service, is that our carpooling service will be used by

individuals in the same youth soccer team not a random Uber driver. The assumption and

expectation is that parents would be able to meet and know each other before any carpools are

ever arranged, so they are not entirely strangers. Additionally, parents are able to choose whether

or not to accept a carpool offer. This allows them to reject a carpool offer from anyone on the

team that they have not met yet and do not know or feel comfortable sending their child with.
17

Ethical Considerations

While creating this platform it was very important that we take into account several

ethical considerations, especially since a large portion of the users of this platform indirectly

affects children on youth soccer teams.

This application handles personal information for the players and their parents such as

home addresses, phone numbers and email addresses. It is important that this information is not

displayed and is restricted to only certain user groups. We allow parents to only share address

and contact information through the carpool service.

Player statistics is also a major feature of this platform. This can help boost the

competitive nature of youth sports. However we were concerned that it can also have a negative

effect on some of the players leaving them feeling self conscious of their performance statistics

in relation to their peers. Worse, lower performers could be bullied by higher performers. Some

players may not like their team position and actually want to play another position. However, we

realized since this is a team sport and we are tracking team statistics, it is necessary to include

the statistics of all players. Additionally it is important that players understand that it is

acceptable if they may not perform at the same level as their peers.

As mentioned earlier, the safety of children when using the carpool functionality is of

great importance. However, since these carpools will only be organized by the parents, and not

the players, it is largely the parents responsibility to confirm and choose a safe carpool for their

child. Our platform merely helps to facilitate communication for carpool requests and offers. The

parent will always have the last say in the matter.


18

Timeline/Budget

Activity Target Completion Date Target met or not

Define project specs and 08/26/19 We met the target.


complete requirements.

Design database Schema 08/28/2019 We met the target of the


initial design of the database
schema. There were some
changes made to the schema
later as we progressed in our
project especially since we
were implementing
microservices

Design the MVC pattern 9/1/2019 Done before the expected


date.

Design the web pages 9/1/2019 This was done throughout the
(Aesthetics, storyboards) project. We completed
storyboards as we progressed
in our project. Each webpage
was designed as we entered
the phase for the portion of
the project.

Implement the backend 9/25/2019 We had implemented most of,


almost 90% of the backend
by this date.

Implement the frontend 10/2/2019 On time: In our project


backend and frontend went
hand in hand. We completed
the front end as we worked on
the backend

Testing with Focus Groups 10/8/2019 On target! We did our testing


with our focus group on
October 8th 2019

Finalize Project 10/15/2019


19

Capstone Presentation 10/19/2019

Usability Testing/Evaluation

Our plan was to prescribe to the test driven development approach. This meant that we

would be writing test cases that follow certain user stories and then develop the software to pass

these user cases. This would have assisted us in developing to ensure that our application

behaves in the way that we expect and the present the experience we want to give to our

audience.

Instead of using the RSPEC tool of Ruby on Rails we stuck to a method which was more

like test as you go. As explained earlier our web pages were developed as we worked on the

backend. It was a lot easier to see the whole thing in action as we developed.

Every time we implemented a model in our rails environment, we created basic

functionality first. Basic functionality included the CRUD functions which is create, read, update

and delete. So when a model was implemented we ensure that these functions could be

implemented on it successfully. Since we were building a website, we created views for these

functions. Through our views we tested if all of the CRUD functionality was working as

expected.

The majority of the time we were testing as we went forward in creating the product. As

our project built on top of the basic functionality we kept adding views (web pages) for all of the

functionality that our website would provide. Every time the developer would extensively check

all the features, trying expected inputs, trying unexpected behaviour and making sure to catch all
20

the bugs. Both the developers fixed bugs for the portion that they were working on. Both would

test and check each other's work once it was pushed to git.

Once our project was in an almost complete state, we began our testing with our focus

group that consisted of individuals belonging to our target audience. Our target audience is

soccer team coaches/managers and parents. Age can vary from older kids to adults. It is mostly

for adults i.e. parents of kids who play in youth soccer leagues and coaches and team managers

of those teams. But kids who are about 16-18 years of age might manage their own soccer

schedules. So we picked our focus group accordingly. Our focus group included people from

various backgrounds. We had a mother of four with children involved in after school activities

that has limited computer literacy, who has offered many carpools to friends of her children to

and from after school events. As a parent they perfectly fit our target demographic. We also had

a software engineer who had extensive experience in product testing and design. He also has

experience as a soccer coach of a local youth soccer league and is a parent whose kids play

soccer. So he fit our user demographics very nicely. We had another person who is a father with

children actively involved in extracurricular activities. He has high computer literacy and

generally comfortable interacting with different applications. As a parent they perfectly fit our

target demographic. We also had a teenager in our focus group who plays soccer for a local

youth soccer league and often needs to carpool to his games and practices.

With our very well formed focus group we performed our user testing of our project. It

was very interesting to see people test our product. We came across a few bugs that we were

either not aware of or were not expecting them as we had not come across them in our own

testing. We got lots of valuable feedback from each member of the focus group varying from
21

how to improve the user friendliness of our website, how to improve navigation to how the user

generally felt about each functionality.

Final Implementation

TeamAssist provides you with three different types of users. On the main page you are

provided with three options to select from.

If you want to sign-in/sign-up as a coach you go to Coach Login. If you are a parent of a

player on a soccer team, you click on Parent Login. To view the teams under different clubs and

the performance of players on each team you don’t need to sign in or sign up you can click on

Guest User and you will be able to navigate through different clubs and their teams.

TeamAssist is built as a website that relies on three other microservices. The three microservices

used by TeamAssist are:

1. EventsAndCarpoolService:

- This service lets the coaches create events like practices and games for their

teams.

- Through this service parents can utilize the carpool feature of TeamAssist.

- Team stats are also stored in this service as scores are related to an event.
22

2. ParentsAndPlayerService

- This service stores the player’s information such as name, date of birth, gender

and which team the player plays for.

- Parents’ information such as their names, email, address and phone number are

also stored in this service.

3. CoachAndTeamService

- Coach’s information such as their name, contact information (email and phone

number)

- This service stores information about teams. Team name, what club they belong

to, who is the coach for the team, the age group are all stored here.

Coach Functionality

Once you click on the coach login you can either sign up, if it is your first time or sign in

using a previously entered email and password. We used the Devise gem, a library in Ruby, to

implement the authentication. Once the coach enters his email and password, if it is their first

time they are led to the coach information page.


23

This is where our CoachAndTeamService is contacted. Once the coach enters his/her

information, TeamAssist makes an encrypted and secure call to the CoachAndTeamService.

Coach’s information is sent to that service and a new coach is created there and the information

for coach is saved.

Once that is done the coach is taken to the coach home page.

On the coach home page there is a personalized message for the coach who is signed is

welcoming the coach with their full name.There is a button to create team. If that button is

clicked a dynamic form appears on the same page without the page being refreshed.
24

Here the coach can enter the team name, choose a club that the team and the coach belongs to

from the dropdown menu, enter the gender for team and the age group. Once save is clicked

CoachAndTeamService is contacted again and the information for team is stored there.

All the teams that belong to this coach are listed on the coach’s home page. When clicked on a

team name the user is taken to that specific team’s page.

The team page lists the team roster, displaying each team player’s first and last name,

their gender (if updated by the parent) the parent’s email and an option to remove the player

from the team.


25

There is also an option to add a new player to the team. By clicking on the Add Player

button a dynamic form is displayed on the current page.

In this form the player’s parent’s email their first and last name is required to enter. After

clicking Save Player, a call is made to the PlayerAndParentService. This call is made to check if

the player already exists in its database. If not the coach is prompted that the player he/she is

trying to add does not exist in the database and if they would like to create a new player. After

receiving the confirmation, the information is sent to PlayerAndParentService by TeamAssist

using a secure and encrypted method and through an HTTP call. Once the PlayerAndParent

service receives the information, this information is stored in the player database on that service.

On the team page is another button to create events for the specific team. If that button is

clicked another dynamic form appears where the coach can enter the event information.
26

Here the coach is required to enter the date of the event, time location the type of event

from a dropdown menu (either game or practice) and description which is optional.

A datepicker gem was used to pick the date of the event. Once clicked it displays a small

calendar from which the coach can select a date.

The team page lists all the events for the team as well. There is a link in front of each

event that takes you that specific event’s page. There is a button to edit the event which displays
27

a dynamic form. The event page also displays a chart showing team stats for that event. The stats

are initialized to 0 until entered.

If the user clicks on update stats a pop up window opens up on top of the page.

Here the coach can easily update the team stats. Every time the ‘Save Stats’ button is

clicked for a player, an AJAX call is made to the controller, which means the page is not

refreshed and the stats window stays there, but the data is sent behind the scenes. Data is sent to

the EventAndCarpoolService through our secure and encrypted method using HTTP. It is then

saved there and also updated on the event page without refreshing the page or taking away the

pop up stats window.


28

Parent Functionality

Parent login is very similar to coach login. Once the parent signs up they are directed to a

page prompting them to enter their information such as first and last name, phone number and

address. Once save is clicked this information is sent to PlayerAndParentService where it is

stored.

On the parent's home page is a button to let the user update their information. All the

players of that parent are listed on the left. Player names are links which lead to that players

personalized page. On the left side all the teams for the players of this parent are listed. Team

names are also links that take the user to that team’s page.

All the upcoming events for all the players are also listed on the parent’s home page.

Each event is listed as a link that will take the user to that event’s page. There are two other
29

columns in the events table. Carpool Requested displays the requests made by this parent for a

ride for that specific event. Carpool Offered displays all the offers that have been made in

response to the user’s request for carpool.

Once the user clicks on the player name they are directed to that player’s personalized

page containing player’s information such as Name, Team, Birthday, Age and Gender. Clicking

on the Update Player button displays a dynamic form in which the user can edit player’s

information. When the player’s information is edited, PlayerAndParentService is called and the

information is saved there.

Upcoming events such as practice or game are also displayed on the player’s page.

Events are compartmentalized into boxes to make readability easier for the user. Each box

contains information about the event and a link that will take the user to the event page.
30

On the event page besides listing the event details, there is an option to request carpool

for that particular event. Once all the information is entered a call is made to the

EventAndCarpoolService and this request is stored there. All the team parents are notified of the

request made via email. Other parents have the option of responding to each request by offering

carpool. The requesting parent has the option to accept the offer or reject it.

Guest User Functionality

The guest user does not need to create an account for sign in. When a user clicks on

Guest User they are taken to the guest user home page.
31

On the home page are listed all the soccer clubs that have been entered in the system.

When the user clicks on one of the links of a soccer club, they are taken to the soccer

club’s page. Over there all the teams that belong to that soccer club are listed with their basic

information such as Age Group and the Gender of the team.

The user can click on each team’s name and would be directed to the team page then.
32

Once on the team page the user will see all the players listed in a table format with their

aggregate scores for that season. This gives a guest user, especially if it is a scout

Problems during design and implementation phases

During the design phase we had to go back and forth a few times before we finally

decided on our microservices design. We invested a lot of time deciding which database tables

belong in which service. Also, we had to change the fields that belonged to each a few times.

When the major functionalities of our project were completed we deployed it to Heroku.

When we tested it we got unexpected errors. After spending some time on debugging we realized

one of the domain address was incorrect and that is why we were not able to access that service.

That is the beauty of using microservices. While some functionality was affected, the portion that

depended on the other two microservices was working fine.

Another major problem we faced was when somehow an older version was pushed to git

by mistake. This happened towards the end almost. We did not realize the issue until some of our

features starting failing. It took us a lot of time to get the project back to its perfect state.
33

Another thing that took some time to figure out was integrating Javascript into our

application. We needed to use JS in making AJAX calls, implementing input masks, using the

Datepicker for calendar and in some other places.

Conclusion

Soccer is a very popular sport in youth. There are many youth soccer clubs with multiple

teams. While there are many platforms out there that are meant for team management in general

there was no technology meant distinctly for soccer. Organizing teams, storing all the players

information, having the roster at a click of a button etc., while all these features are available

through other apps we felt something was amiss. Statistics in soccer doesn't only mean goals and

assists, there is a lot more to that. Keeping track of the entire team’s statistics is no easy job.

TeamAssist brought an easy solution where a coach can update the entire team’s statistics on the

field! Our website’s friendly user interface makes updating the team statistics a breeze. Not only

the stats are easy to update they can be easily retrieved and viewed later. Additionally these stats

can be viewed by others outside of the team, such as scouts that may be looking for promising

soccer prospects. Our implementation of a carpool feature is something that is very novel

amongst the current services on the market. We feel that features such as these provide a solution

that other current applications simply do not. By following the Agile Programming methodology

of creating prototypes throughout development, we were able to make great strides through each

programming sprint.

We learned a lot throughout this project. Working as a team, it was vital that we had

consistent, clear and regular communication throughout the life of the project. This of course is
34

an essential skill in the workforce, especially when companies use the Agile Programming

approach. We learned a lot about how to work with service oriented applications that utilize a

variety of microservices to provide functionality. It was clear that this approach has pros and

cons. One of the major benefits is that our microservices can fairly easily be added to other

programs, and we can add other microservices to our application. However, we also how quickly

applications can get complicated as more microservices are added. Troubleshooting became

much more complex as the various microservices are intertwined. This experience helped us to

realize why it is important to think carefully when deciding on using microservices, or a more

integrated application, because there are times when the benefits do not outweigh the additional

complexity.
35

References

20 Million People Use Teamsnap and Can Tell You Why They Do. (n.d.). Retrieved from

https://www.teamsnap.com/why

Brownell, P. (2013, April 9) The Most Important New Advanced Soccer Statistics and Why

They Matter. Retrieved from

https://bleacherreport.com/articles/1597790-the-most-important-new-advanced-soccer-sta

tistics-and-why-they-matter

Johnson, A. (2015, May 27) Soccer by the Numbers: A Look at the Game in the U.S. ​NBC News
Retrieved from
https://www.nbcnews.com/storyline/fifa-corruption-scandal/soccer-numbers-look-game-u
-s-n365601

US Youth Soccer Announces New Leagues Structure - The US Youth Soccer National Leagues.
(2018, April 18). Retrieved from
https://www.usyouthsoccer.org/us-youth-soccer-announces-new-leagues-structure---the-u

s-youth-soccer-national-leagues/
36

Appendix A

Team member names


1. Beenish Syed

2. William Baker

Division of labor

Both work on designing the database schema.

Tables can be split in half to be designed and implemented.

Player service (Beenish)

- Create/update/delete players

Event Service (William)

- Create/update/delete events.

Admin/coaches (Beenish)

- Create/update/delete players using the player service.

- Create/update/delete events using the event service .

- Create a team

- Add players to the team

Parents (William)

- Update players using

- Signup for carpool using the carpool service

- Offer carpool using the carpool service


37

Carpool Service (William and Beenish)

- Store carpool information.

- Communicate between the parents, players and events services.

- Request Carpool

- Offer Carpool

Email service (William)

Player Stats (Beenish)

Appendix B

Link to our survey

https://docs.google.com/forms/d/e/1FAIpQLSetqCH6wo2UBY21yYOaFw7k31LlWwWhJ9XTJ
mtO-RXdzfsOwg/viewform?usp=sf_link

Link to survey results

https://docs.google.com/spreadsheets/d/1V6tC65Z3fBW9PQj4xmklK--lX8Zurd9N2L2lN32idLk
/edit?usp=sharing

Link to TeamAssist code on github

https://github.com/Beenish-Syed/Capstone

You might also like