10. Elevator Pitch – “CrowdCodr”
What you do?
We will establish a marketplace where local companies can easily find developers for
their specific business needs.
What is the problem you solve?
It is very difficult for many young developers, especially college students, to gain real
world experience in their field because they do not know where to look for internships
and jobs. They might not even have time to sit at their computer to look for potential
hires.
Why is this an important problem?
With only a handful of students looking for jobs and internships, companies only have a
small collection to hire from. Our service makes it easy for any student to create a
profile about themselves and companies can go on our website at any time and search
through hundreds of potential students to hire based on their qualifications.
What is your novel unique approach?
Our unique approach to the problem is by creating an appealing, user-friendly UI that’s
fully featured to ensure that the needs and goals of both, companies and students, are
met. We do this by facilitating instant chat services within our centralized interface. Also,
we will sort developers by qualifications and specialties so companies know which
developer is right for them.
How do you beat competition?
Our easy to use UI and the ability to get your service instantly will ensure that we can
beat the competition. We also have a messaging system to make it easier for both
parties to negotiate and communicate their needs professionally and conveniently.
What is the market and how are you going to reach it?
We will be entering the classified advertisement market. We plan to reach it by
communicating to local business owners and students from the University of California,
Riverside initially. Also, we plan to promote our website through Google AdWords and
other marketing solutions.
What is the status and progress of the company?
We are currently in the development phase of the company. We have all the necessary
individuals in the company and will be building the website over the course of the next
few months.
Who is the team and why are you qualified?
There are currently six members in the team, four of which are Computer Science
majors. The other two are business informatics majors. We are qualified to complete the
tasks necessary to create the company because of everyone’s ability in website
development and business planning.
11. Elevator Pitch
Hi, my name is __________ and I’m from a company called CrowdCodr.
We are a web-based marketplace where local businesses can easily find developers for
hire. We make it easier for students to put themselves out there to get a job, and in turn,
companies can have a variety of developers to choose from to hire.
There is a big issue of student developers not being able to gain real world industry
experience due to not looking at the right companies or not being able to even speak to
a company representative. With our user-friendly UI and features such as integrated
instant messaging, we will attract many businesses and hopeful student developers,
making CrowdCodr.com the ultimate online marketspace. We will advertise our web
service by contacting local businesses and UCR students directly. Then we will move to
using Google AdWords and other marketing techniques to primarily attract college
students. We are currently in the development phase for our web app and we will be
branching out to Android and iOS apps in the future.
We are a team of six members consisting of four Computer Science students and two
business informatics students from the University of California, Riverside. We are
diverse and well-rounded in all necessary fields to make this company a success.
Thank you for your time.
13. Lean Canvas Explanations
Problem
- Many students struggle to find a job after graduation because they lack experience
- Many big companies have outreach individuals and scouts who look for new hires. This
could get expensive.
- Companies would often times try to outsource jobs to other countries but that can lead to
many difficulties
Solution
- This is an easy way for students to put themselves out there and showcase their
qualifications in an organized format
- Our website makes it easier for anyone in the company to look for someone to hire
- Companies will not have to deal with people from other countries anymore because of
the easy way they can find and hire student developers here domestically
-
Unfair Advantage
Our company focuses on providing jobs for students. We use nice user interface and original
backend algorithms to allows these students to be as marketable as possible in the eyes of
companies.
Customer Segment/Early Adopters
We, initially, will be focusing on local businesses and UCR students. Because of their affiliation
and proximity to us, we will be able to troubleshoot and apply any changes based on critiques
and suggestions from our users.
Channels
We will mostly be promoting ourselves through word of mouth, social media, and local
businesses around UCR. These methods would yield the fastest results because of the
convenience of being able to share our name and cause to each other among students.
Key Metrics
By looking at the number of users signed onto our site and how many transactions that occur,
we will be able to determine the success of our service and improve where there needs to be
improvement.
Existing Alternatives
There are many services out there that assist individuals in getting a job. However, our
company is focusing on students and making it easier for local businesses to contact the
students directly to explain exactly what they are looking for.
Revenue Streams
We will be applying a sales fee with every transaction. This will be our main, stable income
stream. We will offer promotions for new developers and eventually charge a subscription fee
for employers.
33. Customer Scenario – “CrowdCodr”
Construction Company
A contractor is very experienced and made a small company to do construction
work for other people. Word about her company was only passed through people and
she had no online presence. That way she could not make her company bigger and she
has problems getting customers. She asked us to make a website with a couple of
pages and since she didn’t have a big budget, she asked us, students to make her a
website. She wanted a couple pages with her contact information and a page with all
her projects with other customers. Since we were close by, she doesn’t have to worry
about outsourcing her project to other countries. She said her budget is $500 and we
said that’s a good price. We told her she could see the progress on her website on our
website and ask us questions if she has any on our messaging platform.
43. Marketing Plan – “CrowdCodr"
Overall Strategy
The overall objective of CrowdCodr’s marketing strategy is to connect small businesses
to upcoming developers. CrowdCodr have two main groups to host, which are the
developers and the employers. To make employers lives easier, CrowdCodr aims to
create a “social hub” for all kinds of development services to be offered to our web
users. We at CrowdCodr realize that many businesses have scouters who go out to
schools to look for future hires, and our service will make their job faster and easier. In
regards to our developers, CrowdCodr seeks to create a space for students and
individuals to showcase their programming abilities and kick-start their careers. Our
motivation stems from seeing our peers struggle to find internships and jobs to propel
themselves into the workforce.
Our main goal is to be as customer-centric as possible. The number one complaint that
most people have with many apps and services out there is that they are not user-
friendly. CrowdCodr strives to make the listing and hiring experience to be as intuitive
and helpful as possible. These qualities will bring customers back to our website. By
creating an enjoyable business-driven community for everyone, CrowdCodr will fulfill
their ultimate goal.
Positioning
CrowdCodr’s target market are college students, and eventually will branch out to
anybody who would like to do freelance programming on the side. Our position is to be
a catalyst for these individuals to start making money and kick starting their own
professional brand.
Points of Differentiation
After doing research into CrowdCodr’s competitors, it becomes evident that websites
similar to CrowdCodr’s exists. The website hackerrank.com, is a company that focuses
on challenges for developers and businesses alike. This website “gamifies” computer
programming by creating a competitive spirit among developers. The way this company
is similar to ours is by paying their subscription fees, companies can purchase
HackerRank for Work, where the business themselves can create a programming
challenge. Once developers submit their solutions, the companies are provided to
recruiters who then can actually recruit these developers. As a matter of fact, there are
quite a great deal of companies that work to gamify computer programming such as
CodeChef, Topcoder, and Codeforces.
After doing more research, however CrowdCodr, came across websites like ours.
Freelance marketplaces like UpWork, freelacer, Way Up, and toptal, These websites
are usually global freelance marketplaces where usually large businesses and
freelancers can connect and collaborate. However, these freelance marketplaces are
44. positioned differently in the market. We intend to position ourselves in the market in a
way in which our company appeals most to undergraduate talented developers. This
way, companies can not only focus on getting their projects done, but also connecting
with individuals they may want to hire after their projects are complete.
Gamifying companies seem to be attacking a market similar to ours. However,
CrowdCodr aims to position ourselves in a way to be beneficial to smaller businesses
as well. For example, a business may want to be able to reach out to a web developer
to set up an online marketplace for their products, but may not have the knowledge of
where to go to hire these developers. As a hub of computer programming, app
development and more, CrowdCodr plans to easily connect communities, with
specifically young developers to kick start their career and resume. For these reasons,
there are not very many points of differentiation seeing as there are no competitors
directly in our line of sight. However, CrowdCodr is an easy, different, and efficient way
of recruiting freelance developers for whatever computing task you may have. Our main
points of differentiation are the fact that our company is geared towards the regular
small business owner wanting to upgrade their business and stay up to date with
technology. Not only this, but our easy to use and fully integrated UI will make it easy for
businesses to connect with developers to better work hand in hand to achieve their
goals.
As of now, if you search “How to hire a computer programmer,” there is not results other
than websites that give you tips on how to hire one. Our website will serve as one
gigantic source of manpower. Otherwise, one would have to dig through countless
pages of Craigslist just to find someone right for the job.
Focus on Students and Young Developers
Small-BusinessOriented
CrowdCodr
45. Pricing Strategy
These strategies have been divided into two categories. One being a strategy that can
be implemented immediately upon launch, and another that can be implemented as
time goes on. Regardless of the category, CrowdCodr plans to roll out these revenue
streams as our team feels they could help our company grow. These plans can always
change as our team continues to test the waters and get feedback from advisors and
customers.
Current Revenue Streams
Commission Within Facilitation of Payment from Employer to Developer
CrowdCodr plans to integrate a payment center into their services where
employers can pay the developers for the services they provide. Through
this, CrowdCodr could facilitate commission through our website.
CrowdCodr would take a predetermined amount of revenue generated by
the developer. This would allow us to continue providing our services and
supporting developers on their adventures to be a freelance programmer.
Because CrowdCodr acknowledges that this may be a deterrent for
potential developers, CrowdCodr will provide new developers with free
trials where our company will not take commission from their pay, and give
the developer the full payment. This could be based on a month trial, or a
set number of projects (i.e. 5 projects).
Featured Developer
After having a predetermined amount of 5 star ratings, our company can
offer developers a way to show up first on listing results. This featured
developer option would come at a fee, in return for more views from
companies looking to hire developers. This also works as a motivator so
developers that are doing a great job can be rewarded, and CrowdCodr
can benefit from it as well.
Revenue Streams after CrowdCodr has been established
Certifications and Assessments
CrowdCodr plans to provide developers with an option to take tests and
assessments in which they can earn badges for their profiles in order to
appear more credible to potential employers. CrowdCodr would create
comprehensive examinations based on the programming language or
concepts (accessible to employers as well to ensure transparency with the
companies) and charge developers a fee per examination. Upon passing
the examination, CrowdCodr would certify the developer, thus making
them more credible and giving the developer an advantage in the market.
After passing a certain examination, a badge would appear on the
developer’s profile indicating that the developer had been certified in
whatever examination the developer had passed.
46. Payment Plans for Employers
After becoming more established in the market, CrowdCodr could move
towards a payment plan geared towards employers in order to create
another revenue stream. With a fee, employers would have access to our
services in order to easily and more efficiently connect with developers.
However, it would be essential to have our services perfected and have a
great deal of developers ready to work. Else, employers would not want to
pay for our services.
Headhunting Services
Seeing as there is a great demand of brilliant developers within technical
companies, CrowdCodr can provide a premium headhunting services to
recruiters. By providing these services, CrowdCodr will create a special
recruiter account to ensure that if the recruiter requires a certain level of
skill, our developers can provide that. With special statistics and ways of
sorting developers ranging on previous satisfaction, experience and other
similar factors, CrowdCodr can refer recruiters to those developers in an
attempt to hire them as a long-term employee.
Promotional Activities
For the time being, CrowdCodr plans to outreach to local businesses and UCR
students. By pitching to UCR students about what our service can do for them, our
company can ensure to have a successful initial launch. By informing students of the
services our company can provide them, our market will be motivated to create profiles
in an attempt to gain attention from recruiters and scouters. By reaching out to the
students first, CrowdCodr can have people who are signed up and ready to work by the
time scouters start using our website. Our company also plans to work closely with the
students to work out any incentives that will not only generate a lot of traffic on their
profile. Seeing as a great deal of our developer target market is freelance college
students, starting local and with a market such as the one UCR provides is vital.
Eventually, in order to grow our network and brand, CrowdCodr plans to offer our
service to students from universities and colleges around the country.
47.
48. Fundraising Strategy
CrowdCodr hopes to fundraise about $10,000 by the end of 2016. We plan to
aggressively tackle the task of fundraising from angels and friends/family combined.
This would allow us to be able to pay for our domain and server fees. This would ensure
that we have a properly functioning service in order to gain customers and have them
continue using our services. As of today, we have incurred a charge of $22.35 for an
AWS Data Pipeline service. The first funds that enter CrowdCodr’s cash flows will be
geared directly to reimbursing that fee. After paying for the aforementioned fees, we
intend on directing of the funds to customer acquisition. We intend to invest money
especially into marketing in order to get our brand out to our target markets. We also
intend to advertise our services through other services such as Google AdWords.
Seeing our budget and how it aligns with our marketing plan, we will allocate funds to
those necessary expenses.
In order to achieve these funding goals, we plan to target a few angel investors and
one, if any, VC firms. However, it is important to make sure that we have a fully working
product in order to ensure that we can demo our product to these VC firms. Because of
the fact that VCs require more credible companies to ask for their funding. For this
reason, we plan on developing our product more, and working towards these funding
milestones.
We have already worked to approach investors via connections. Our company has
reached out to experienced business owners such as Jeff McDaniel, and through him
we were able to meet one someone who was interested in our product. McDaniel
helped set up a meeting with one of his connections who, when ready, is able to
connect us to an investor in our field. McDaniel also said that he would connect us to
potential investors or connections to continue giving our company feedback and useful
connections that could land us with valuable funding.
49. Introduction with Investors
When looking for investors, our company reached out to local people that could help us
connect with angel investors, give feedback, and at some point connect with venture
capitalists. Our company did a lot of research with SBDC. This government-led
organization provides small businesses like ours an ability to get the ball rolling.
Whether it be with a small business loan, counseling, or even connections with
investors, this will be a helpful resource to us in the future. For the time being, we want
to focus on product development so we can show this organization what we are capable
of. Through our local branch of SBDC, we can connect with both angel groups and VC
firms.
Another “introduction” we can work to attain is penetrating the group of Tech Coast
Angels. This is an investor groups that can provide angel-level funding for our company.
For now, however, our company does not have any connections to penetrate this group.
We plan to continue working to penetrate this group in order to achieve our funding
goals.
For now, our company met with two individuals, Tony Morfin
(https://www.linkedin.com/in/tonymorfin) and Joshua Sanabria
(https://www.linkedin.com/in/jpsanabria). Morfin is a co-founder of a product that is in a
market similar to ours. His website is called freetismo.com, and focuses on allowing
businesses to offer exclusive deals and offers in order to get their name out to the
public. We can see that our market is very similar to our product seeing as he has a
similar idea in mind. For the time being, he can offer us advice and has experience with
investors. For this reason, we plan on aggressively working alongside him to penetrate
funding groups and achieve our funding goals. Sanabria is an architect working with an
architecture firm in Downtown Riverside. However, Sanabria created an application that
allows young students to look at the pros and cons of jobs and positions that are of
interest to them. When meeting with him, he seemed extremely interested in our
product, and like Morfin, he said he knew investors that had also invested in his product.
Once we had a product up and running and ready to go, Sanabria would work with us
and connect us with investors as well. He also provided a lot of feedback and
suggestions to streamline our fundraising adventures.
50. Thought Exercise
Assuming you find an investor who is willing to invest $100K, decide internally the
maximum equity you are willing to give her in the following cases:
A. Assume here that the person can only give money and has no other value to
bring in.
B. Assume that the person has 10 years of experience in the field of interest
C. Assume that the person knows very well five major investors.
D. Assume that the person has operational experience, has built three successful
companies, and seems very dynamic.
E. Any other factors that you need to consider getting your decisions?
A. 9% equity. This will be a straight calculation from the pre-money valuation to our
post-money valuation of $1M to $1.1M. As a result, the investor would receive
9% equity from the company. (Shawn)
B. 10.3%. Considering the amount of money, the person is willing to invest, this
would classify them as an angel investor. This would put our company in Series
A of funding and given the breakdown at this point in the company's development
stage, an angel investor with several years of experience (in this case, 10 years),
would take 1.3% from the option pool receiving a total of 10.3 %. (Stavan/Karen)
C. Assuming that the person knows five major investors, and those big investors
were valuable to our company, we would give them 11.5 % because 9 % for her
100k contribution and 0.5 % for each investor that funds us. (Haasith)
D. Assuming the person has operational experience, has built three successful
companies, and seems very dynamic, that person would bring a lot to the table.
In terms of equity, the investor, given this experience, would receive 9% equity
from basic dilution and on top of that 3% from the option pool given the amount
of valuable experience. (Stavan)
E. Apart from unmatchable networking, incredibly valuable experience and
knowledge, there are no other factors that we can currently consider in making
our decisions. (Stavan)
51.
52. AOP – “CrowdCodr”
Biz Development
Currently, CrowdCodr has not closed on any customers and partners, however we have
spoken to potential partners and gotten their advice. Our service is essentially free to use.
Creating an account is free for all users. CrowdCodr will have a percentage cut from the
developer’s price as our commission. The actual percentage is not yet to be determined.
To gain initial attraction from customers, we will advertise our service to our friends.
CrowdCodr’s members will also utilize social media to spread awareness to our peers at
UCR. As soon as we have about 30-50 students signed up on our website, we will then
market to friends and families who are part of or own a business. CrowdCodr will observe
if these small businesses are pleased with our UI as well as their search and interaction
with our developer listings. For research purposes, we will send out surveys to those who
got hired for a job and those who did the hiring to see if there was anything they liked
about their experience with us or if they disliked any part of the hiring process. For the
next year or so, we plan to slowly expand our features as well as fine-tune anything based
off of user feedback.
Product Development
Engineering – We have been utilizing the synchronize-and-stabilize software production
process to develop our product. Since we are working with a smaller team and a short
timeframe, we split up the project with two milestones and a couple sub-teams.
Scaling – Currently, we are using Heroku as our deployment service and Ruby on Rails
as our web application stack. Heroku allows us to build and test at each development
phase automatically, while Ruby on Rails allows us to work on features in “states”, which
improves manageability and development. Once we have a small amount of funding or
revenue, we plan to move onto Amazon Web Services (AWS) and deploy our web
application onto their Elastic Beanstalk (EB) service. By doing so, scaling up and out will
be automatically configured by AWS EB. If Ruby on Rails slows performance due to a
large number of states, we may look to converting our application to the MEAN stack,
which will significantly reduce the number of states (aka “RESTful”) and increase
scalability.
Reliability – Reliability is mutual to our software production process since we build small,
easy to implement features often and improve them while new features are being built.
Since we have multiple branches in our Git version control, namely branches for new
features, testing, and deployment.
Forward Thinking - After our product becomes well established and companies are using
it for headhunting and recruitment, we aim to push new features intended specifically for
corporation. Specifically, we plan to create a certification and assessment feature for
developers to assess their ability. By doing so, companies will be able to observe and
53. filter each developer’s ability and potentially hire those with enough experience and
qualifications. As a result, we can introduce payment plans and headhunting services for
larger employers, such that they will be able to hire developers with a lot of experience,
reviews, and certifications.
Financials
Cash Flows – At CrowdCodr, we intend on establishing a great deal of cash flows and
revenue streams. We are interested in establishing four main cash flows. First is
commission within facilitation of payment from employer to developer. CrowdCodr plans
to integrate a payment center into their services where employers can pay the developers
for the services they provide. Through this, we could facilitate commission through our
website. Second is the option of having featured developers. This featured developer
option would come at a fee, in return for more views from companies looking to hire
developers. Third is certifications and assessments that CrowdCodr plans to establish in
the future. CrowdCodr would create comprehensive examinations based on the
programming language or concepts (accessible to employers as well to ensure
transparency with the companies) and charge developers a fee per examination. Lastly,
CrowdCodr would like to implement payment plans for employers and/or head hunters.
With a fee, employers and scouters would have access to our services in order to easily
and more efficiently connect with developers.
Fundraising – CrowdCodr hopes to fundraise about $10,000 by the end of 2016. In order
to achieve these funding goals, we plan to target a few angel investors and one, if any,
VC firms. However, it is important to make sure that we have a fully working product in
order to ensure that we can demo our product to these VC firms. Because of the fact that
VCs require more credible companies to ask for their funding. For this reason, we plan
on developing our product more, and working towards these funding milestones. We have
already worked to approach investors via connections. Our company has reached out to
experienced business owners such as Jeff McDaniel, and through him we were able to
meet one someone who was interested in our product.
Legal and Intellectual Property
Similar to many of our competitors such as Freelancer, Upwork, and WayUp, we are not
liable, and under the terms and agreements that users agree to during sign-up, will not
hold us responsible, for any damages or losses airing out of or in connection with their
inability or disruption to the site or site services (defined as "Service"), damage, bugs,
errors, or inaccuracies on the Service, content, actions, or inactions of third parties' use
and hire of users. We, as well as any third-party, affiliates, or licensors, will be liable for
any special, consequential or incidental costs or damages.
Furthermore, all patent, copyright, work, publicity, trademark, trade secret, and other
intellectual property rights now and in the future are under the laws of any state, country,
territory, or other jurisdiction that which the company services in. Any and all arbitrations,
trials, and miscellaneous disputes are to be resolved in a court of law. These arbitrations
54. that which involve the company will take place in a court of law that which the company
is founded in, assumed to be in California, USA.
In the near future, CrowdCodr plans to work to acquire an office space at the Riverside
ExCITE location in an attempt to accelerate the growth of our company. This way, we can
also have access to resources that can help our company grow and thrive. Not only this,
but at an office space so close to UCR, we are able to easily test our product on students,
one of our main markets.
Structural and Operational
In our product development group, we have a primary frontend, backend, and business
team with two to three members each. Within each team, a manager oversees the
progress of each feature being implemented, code reviews, and does other tests before
deploying it into a development or master branch on our Git version control system.
Similar to Facebook’s software production process, we try to ensure that such a large
product and process design is broken down into an evolving set of specifications,
features, and stabilizations. As a result, issues are corrected in a timely manner and small
features are implemented every couple of days, with improvements being worked on in
parallel with the next set of features being implemented.
57. Hiring a CEO (Exercise)
Scope of work:
Locates or proposes potential business deals by contacting potential partners.
Screens potential business deals; evaluates options; resolve internal priorities;
recommending equity investments.
Closes new business deals by coordinating requirements; developing and
negotiating contracts.
Speak to shareholders, partners, and product development team to find the
roadmap of the future product features.
Requirements:
After half a year, a new set of features and revenue streams should be
implemented.
After a year, an increase of at least 120 transactions and 8 company contracts
are required.
Interview questions:
1. Given 2 minutes of planning and a background of our product, can you pitch to
us our product?
2. Are there any obvious issues with the product, if so, what are they? How would
you fix them?
3. Where do you see this product in a year?
58.
59.
Introduction
Purpose / Product Scope
This document provides functional specifications and requirements for the getDev’s
website application. It guides the design and development of the entire product, including:
● User Accounts
● Project Listings
● Reviews
● Messaging
● Searching
● Payments
● Bookmarks
Intended Audience
This specification documentation is intended for official use only. This includes, and is
not limited to, professors, teaching assistants, all members of the developing team, and other
technical individuals permitted to view this document.
Product Scope
GetDev is an online marketplace that aims to allow college students to display their
projects and achievements throughout their college career so that small businesses, peers, and
other individuals can connect and hire them to work on small projects or freelance work. The
product functions are as follows:
● Showcase User’s projects and other achievements
● Ability for Users to work on small projects to increase technical experience
● Secure method for Users and their employers to hire and exchange payment
References
This specification documentation is referenced in a similar format as that from
ENGR180W Technical Communications, offered at the University of California, Riverside.
Any section or format may be referred from the template provided by the referenced course
above.
The document may be found from search results entered as “IEEE Software
Requirements Specification Template” last created on 10/23/2015.
60.
Overall Description
Product Perspective
This product is an upgrade and competitor to professional freelance sites such as the
following:
● UpWork (upwork.com)
● Freelancer (freelancer.com)
● WayUp (wayup.com)
● Toptal (toptal.com)
Furthermore, it will need to showcase projects and user reviews, as well as connect
college students to potential hire. The product aims to help build up a User’s resume for future
employment opportunities.
Product Functions
GetDev has multiple components that function together to become a web application.
These components are categorized by entities described as User Accounts, (Project) Listings,
Reviews, Messaging, Searching, Payment, Bookmarks, and (Static) Pages.
These entities and their respective components are as follows:
User Accounts: Description:
UserController Controls pages regarding users
SessionController Handles keeping the user logged in
SessionsHelper Checks and controls the status and identity of the user
Users Database Model Contains all user related data
(Project) Listings: Description:
ListingsController Handles listing functions
ListingsHelper Checks listing ownership
Listings Database Model Contains all project related data per user
61.
Reviews: Description:
ReviewsController Handles review functions
Reviews Database Model Contains all review related data per user
Messaging: Description:
ConversationController Handles conversation / messaging functions
Messages Database Model Contains all messaging related data between users
Searching: Description:
UserController See User Accounts > UserController
Payments: Description:
OrdersController Handles order and payment functions
Orders Database Model Contains all orders / payment related data per user
Bookmarks: Description:
FavoritesController Handles favorites functions
Favorites Database Model Contains all favorites data per user
(Static) Pages: Description:
PagesController Handles static pages
Operating Environment
The web application is built on Ruby on Rails and compatible APIs. Currently, it is being
deployed on Heroku and PostgreSQL Database. In the future, we plan to migrate the entire
platform onto Amazon Web Services (AWS) for scalability and better maintainability.
Assumptions and Dependencies
GetDev is built upon the Rails web application framework along with numerous APIs that
help us develop rapidly.
64.
UserController
Action: Description:
show ● Loads the user profile, based on whether it was
called with user’s id or username.
● Redirects to Homepage if invalid user or user not
found
● Loads variables:
○ @listings: Contains all listings
○ @user: User to be displayed
● Loads /views/users/show.html.erb
new ● Creates a new user
● Loads variables:
○ @user: User that was just created
● Loads /views/users/new.html.erb
create ● Creates a new user and saves it in the database
● Renders new if user.save is unsuccessful
● Logs user in upon successful user.save
● Redirects to User’s profile page
● Loads variables:
○ @user: User that was just created
SessionController
Action: Description:
new ● Loads the login page
● Loads /views/sessions/new.html.erb
create ● Creates a new session for the user
● Does not allow a user to log in unless they have
the proper credentials
● Redirects to user profile after successful login
● Throws an error if username or password is
invalid
destroy ● Destroys current session if user logs out or
closes page
● Redirects user to home page
65.
SessionHelper
Function: Description:
log_in(user) ● Creates a temporary encrypted cookie
● Logs in user
log_out ● Deletes the session cookie
● Logs out user
● Set @current_user to nil
current_user ● Fetches the currently logged in user
● Loads variable:
○ @current_user: The user currently
logged in
logged_in? ● Returns true if user is logged in, false otherwise
Listings
Description
Users can post listing of things that they have worked on in the past. The Listing
contains a project name, description, the languages used and the type of job it was.
Users are able to add as many listings as they please. These listing serve as a resume,
presenting all of the projects the user has worked on.
Functional Requirements
Listings Database
Variable: Data Type: Description:
id integer Listing ID
name string Project title
description string (text) Project description
languages string Programming languages used
job_type string Type of work (e.g. freelance, web
development, app development, etc.)
price double Price of work
66.
projects string (text) Links to past projects
zipcode string User location
ListingsController
Action: Description:
show ● Shows selected listing
● Loads /views/listings/show.html.erb
●
new ● Loads form for a new listing
● Only logged in person can create a new listing
● Loads variables:
○ @listing: a new empty listing
● Loads /views/listings/new.html.erb
edit ● Loads form for editing listing
● Only owner of the post can edit
● Loads /views/listings/edit.html.erb
create ● Creates a new listing with information from the
new page
● Checks that someone is logged in
● Saves the new listing into the database
● Loads variable:
○ @listing: the new filled out listing
update ● Updates an existing listing with information from
edit
● Checks that current_user is the owner of listing
● Variables:
○ @listing: Updated to modified listing
destroy ● Deletes a listing from the database
● Checks that current_user is the owner of the
listing
67.
ListingsHelper
Function: Description:
is_owner?(listing) ● Returns true if current_user owns listing,
otherwise false
on_profile?(user,
listing)
● Returns true if user owns listing
Reviews
Description
Each user has a list of reviews. These reviews can be added to any user based
on a five star scale. A comment can be added to the review to describe why the user
deserved the rating they received. Each profile contains an average review based on the
reviews already given to the user. Using raty.js, we are able to make ratings appear as
stars instead of numbers.
Functional Requirements
Reviews Database
Variable: Data Type: Description:
id integer Review ID
rating float User’s rating (up to a value of 5.0)
comment string (text) Review comment
user_id integer User being reviewed
subject_id integer Type of work (e.g. freelance, web
development, app development, etc.)
ReviewsController
Action: Description:
new ● Loads form for a new review
● Only logged in person can create a new review
● Loads variables:
○ @review: a new empty review
● Loads /views/reviews/new.html.erb
68.
edit ● Loads form for editing review
● Only owner of the review can edit
● Loads /views/reviews/edit.html.erb
create ● Creates a new review with information from the
new page
● Checks that someone is logged in
● Saves the new review into the database
● Loads variable:
○ @review: the new filled out review
update ● Updates an existing review with information from
edit
● Checks that current_user is the owner of review
● Variables:
○ @review: Updated to modified review
destroy ● Deletes a review from the database
● Checks that current_user is the owner of the
review
Messaging
Description
Users are able to message one another. Each user has a mailbox with a list of
people who have messaged them. Users can send anyone they want a messaged,
provided that they are logged in. Conversations can be started using a button in search
or in another user’s profile. Messages are saved and displayed whenever a chat is
reopened with that user.
Functional Requirements
Messages Database
Variable: Data Type: Description:
id integer Message ID
body string (text) Message content
conversation references Conversation message owner
user references User message owner
69.
read boolean Flag if message has been read
MessagesController
Action: Description:
index ● Sets @users to all users
● Loads variable:
○ @conversations: All conversations
● Loads /views/conversations/index.html.erb
new ● Creates a new message in the conversation
create
● Creates a new conversations between current
user and recipient
● Redirects to conversation message path with the
conversations parameters
Searching
Description
Users can query the Apache Solr fulltext search server to look for Users. They
can filter their searches by user names as well as project names and descriptions. They
can also filter searches by zip code. Results will be sorted by highest average review
score.
Functional Requirements
UsersController
Action: Description:
index ● Searches for users with the Sunspot Ruby library
which utilizes the Solr search engine.
● Search looks in both user and listing fields
● Zipcode is optional
● Sorts based on the User’s average review score
● Loads variables:
○ @user: User that was just created
● Loads /views/users/index.html.erb
70.
ListingsController
Action: Description:
index ● List all listing with options relevant to current
user
● Loads variable:
○ @listing: All the list in the database
● Loads /views/listings/index.html.erb
Payments
Description
Users are able to use this feature to send others payment through Stripe. These
payments can be used to hire or to pay someone for a completed project. Payment
through the website is convenient and secure.
Functional Requirements
Orders Database
Variable: Data Type: Description:
address string Billing address
city string Billing city
state string Billing state
buyer_id string Listing_id of buyer
seller_id string Listing_id of seller
OrdersController
Action: Description:
new ● Loads form for a new listing
● Loads /views/orders/new.html.erb
sales ● Loads sales history from
/views/orders/sales.html.erb
purchases ● Loads purchase history from
/views/orders/purchases.html.erb
72.
Functional Requirements
PagesController
Action: Description:
home ● Loads /views/pages/home.html.erb
about ● Loads /views/pages/about.html.erb
login ● Links to a deprecated mock login page
● Loads /views/pages/login.html.erb
signUp ● Links to a deprecated mock signup page
● Loads /views/pages/signUp.html.erb
profilePage ● Links to a deprecated profile page
● Loads /views/pages/profilePage.html.erb
listing ● Links to a static mock listing page
● Loads /views/pages/listing.html.erb
edit ● Links to a deprecated mock edit page
● Loads /views/pages/edit.html.erb
Other Nonfunctional Requirements
Performance Requirements
Currently, we are using Heroku as our deployment service and Ruby on Rails as our
web application stack. Heroku allows us to build and test at each development phase
automatically, while Ruby on Rails allows us to work on features in “states”, which improves
manageability and development. In the future, we plan to move onto Amazon Web Services
(AWS) and deploy our web application onto their Elastic Beanstalk (EB) service. By doing so,
scaling up and out will be automatically configured by AWS EB. If Ruby on Rails slows
performance due to a large number of states, we may look to converting our application to the
MEAN stack, which will significantly reduce the number of states (aka “RESTful”) and increase
scalability.
Reliability is mutual to our software production process since we build small, easy to
implement features often and improve them while new features are being built. Since we have
multiple branches in our Git version control, namely branches for new features, testing, and
deployment, we can ensure that all features and functions being developed and tested works
well before merging into a deployment branch.